2020五一杯B题和mathorcupD题的思路

前言

这里是笔者对数模竞赛的一些内心bb,看思路的可以直接跳过。
数模是一个很好的竞赛,我个人认为挺锻炼人的。但是有不少人是抱着加分的心态在参加数模,像mathorcup、中青杯这种小比赛在笔者的学校算作是国家级比赛,加分和国赛美赛是同一水平,但是获奖难度确是低了数倍,一等奖直接在综测加4分,二等奖加2分,相当于智育成绩高了6.6分,我觉得这是对不参加此类竞赛的同学极度的不公平,因为这种比赛的二等奖本身就不是什么特别困难的事情。
笔者自己所在的院系有着相当激烈的竞争氛围,但我不认为这是一件什么好事情,大家总是在各种奇奇怪怪的地方争取综测加分,我听说了各种买论文、买专利等为了加分的举动(相比这些行为水数模竞赛还算可以接受的事情,毕竟是自己的努力拿到的)。笔者的一个朋友在期末算综测的时候总是特别沮丧,他没参加竞赛,他成绩特别好,但是相比那些“水综测”的人,他没法拿到一等奖。出于对朋友的同情,也有对水加分这一行为的厌恶,笔者在mathorcup报名的最后一天将名字划去,参加比赛只为提高自己,不为加分。
我还是希望参加数模的人是真正想要去学习技能提升自己的人参加,与其参加了一大堆比赛,不如就好好参加一两个,好好复盘,对自己更有益处。也希望院系的风气能趋于正常,不为无意义的排名干那些没有意义的事情。

五一杯

笔者这里做的是B题,所以只说一下B题。(顺便今年的五一杯难度比去年降低了好多,可能是因为组委会考虑疫情团队沟通问题,但对于笔者一个人做题的人来说,毫无影响:)。这题加上写论文一共就花了一天时间,当然笔者的写论文水平太次,被我的老师一顿臭骂。但是模型没啥问题,各位放心)

第一问

这里问的是决策方案的差异,这里首先将 10 10 10家公司的 57 57 57支股票的选择转换为 10 ∗ 57 10*57 1057的矩阵:
D = [ x 1 1 x 2 1 . . . x 57 1 x 1 2 x 2 2 . . . x 57 2 ⋮ ⋮ ⋱ ⋮ x 1 10 x 2 10 . . . x 57 10 ] D=\begin{bmatrix}x_{1}^1&x_{2}^1&...& x_{57}^1\\x_{1}^2&x_{2}^2&...& x_{57}^2 \\\vdots&\vdots&\ddots&\vdots\\x_{1}^{10}&x_{2}^{10}&...& x_{57}^{10}\end{bmatrix} D=x11x12x110x21x22x210.........x571x572x5710
其中 x j i x^i_j xji代表第 i i i家公司在第 j j j支股票的投资金额。
我们可以将 D D D的每一行作为公司的资产配置属性,比较向量之间的差异作为公司的决策差异。比较向量之间的差异的方法有很多,比如常用的欧式距离或者余弦距离。

但是明显这两个方法不够“高端”,在这种小比赛里可能会比较吃亏,因为评委就喜欢一些看上去特别厉害的方法。这里笔者想到了差异显著性评判 ,这是笔者在看2012年的国赛题“葡萄酒的评价问题”优秀范文学到的方法(所以数模还是要多看论文,总能发现一些奇奇怪怪的方法,虽然都不是特别懂,但不妨碍我用它),感觉和这个资产配置属性差异差不多。

1、什么是统计假设检验?
所谓统计假设检验就是事先对总体(随机变量)的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设是否合理。而把只限定第一类错误概率的统计假设检验就称之为显著性检验。
在上例中,我们的假设就是一种显著性检验。因为方差检验不适用于估计参数和估计总体分布,而是用于检验试验的两个组间是否有差异。而方差检验正是用于检测我们所关心的是这两个集合(两个分布)的均值是否存在差异。
2、为什么要做显著性检验?
因为我们想要判断样本与我们对总体所做的假设之间的差异是纯属机会变异,还是由我们所做的假设与总体真实情况之间不一致所引起的。 在我们的例子中,差异就是H的均值要高于Z的均值,但是最终的结论p>0.05证明,这个差异纯属机会变异(H均值>Z均值是偶然的,当H和Z的采样点数趋于无穷多时,H的均值会趋近等于Z的均值)而不是假设与真实情况不一致。如果p值<0.05,那么也就意味着我们的假设(H集合和Z集合没差别)与真实情况不一致,这就使得假设不成立,即H集合和Z集合有差别。

“无假设,不检验”。首先我们假设公司的资产配置策略不存在显著性差异,在显著性水平 α = 0.05 α =0.05 α=0.05的情况下, p > 0.05 p>0.05 p>0.05接受原假设, p < 0.05 p<0.05 p0.05拒绝原假设。

  • x ‾ i \overline{x}_i xi表示第i个总体的样本均值,则
    x ‾ i = ∑ j = 1 n i x i j n I , ( i = 1 , 2 , . . . , k ) \overline{x}_i=\frac{\sum_{j=1}^{n_i}x_{ij}}{n_I},(i=1,2,...,k) xi=nIj=1nixij,(i=1,2,...,k)
    其中, n i n_i ni为第 i i i个总体的样本观察值个数。
  • 令总均值为 x ‾ ‾ \overline{\overline{x}} x,则
    x ‾ ‾ = ∑ i = 1 k ∑ j = 1 n i x i j n = ∑ i = 1 k n i x ‾ i n \overline{\overline{x}}=\frac{\sum_{i=1}^{k}\sum_{j=1}^{n_i}x_{ij}}{n}=\frac{\sum_{i=1}^{k}n_i\overline{x}_i}{n} x=ni=1kj=1nixij=ni=1knixi
    式中, n = n 1 + n 2 + . . . + n k n=n_1+n_2+...+n_k n=n1+n2+...+nk
  • 水平项误差平方和 S S A SSA SSA。它是各组平均值 x ‾ \overline{x} x与总平均值 x ‾ ‾ \overline{\overline{x}} x的误差平方和,反映了 各水平总体的样本均值之间的差异程度,因此又称为组间平方和。
    S S A = ∑ i = 1 k ∑ j = 1 n i x i j ( x ‾ i − x ‾ ‾ ) 2 = ∑ i = 1 k n i ( x ‾ i − x ‾ ‾ ) 2 SSA=\sum_{i=1}^{k}\sum_{j=1}^{n_i}x_{ij}(\overline{x}_i-\overline{\overline{x}})^2=\sum_{i=1}^{k}n_i(\overline{x}_i-\overline{\overline{x}})^2 SSA=i=1kj=1nixij(xix)2=i=1kni(xix)2
  • 误差项平方和 S S E SSE SSE 。它是每个水平或各组的各样本数据与其组平均值误差的平方和,反映了每个样本各观察值的离散状况,因此又称为组内平方和或残差平方和。
    S S E = ∑ i = 1 k ∑ j = 1 n i ( x i j − x ‾ i ) 2 SSE=\sum_{i=1}^{k}\sum_{j=1}^{n_i}(x_{ij}-\overline{x}_i)^2 SSE=i=1kj=1ni(xijxi)2
  • 检验统计量 F F F F F F M S A MSA MSA M S E MSE MSE的比值。
    F = M S A M S E = S S A K − 1 S S E n − k F=\frac{MSA}{MSE}=\frac{\frac{SSA}{K-1}}{\frac{SSE}{n-k}} F=MSEMSA=nkSSEK1SSA
    最后的结果我用了一张热力图表示:
    2020五一杯B题和mathorcupD题的思路_第1张图片
    颜色越深说明两家公司的显著性差异越大,颜色越浅说明两家公司的显著性差异越小。

第二问

这道题我们略过,我觉得在已知历史数据的情况下找最优就是扯淡,找增长率最大的不就得了,没啥意义。随便建了一个半页的模型,被老师骂了一顿,这里就不提了。

第三问

2020年所有基金公司仍然按照 2019 年的资产配置策略进行投资,度量每个基金公司 2020年95%置信水平下的风险价值。度量公司的风险价值就是度量每支股票的风险价值。我们需要预测未来股票价格的走势,常用的方法有蒙特卡洛模拟法。
但是蒙特卡洛使用的准则是随机几何布朗运动法,同样离不开一个字,“low”。我们要让它高端起来,所以我们改变它的模拟方法,使用其它时间序列的方法来代替随机几何运动。这里笔者采用的是 A R I M A ARIMA ARIMA时间序列对蒙特卡洛模拟法进行优化,使用不同的 q q q p p p值进行1000 次的模拟,如此得到的数据走势更具科学性,而 不是单单的随机运动。 公式这里就不列了,网上都有(主要是打公式太麻烦)。
2020五一杯B题和mathorcupD题的思路_第2张图片
2020五一杯B题和mathorcupD题的思路_第3张图片

第四问

题目要求既能保证投资效用 η \eta η最大化,同时又能使风险价值 K K K最低,选择最优的股票投资组合策略。

对于双目标求解问题,笔者一般采用的方法是将两个指标抽象为二维空间上的点 Q ( K , 1 η ) Q(K,\frac{1}{\eta}) Q(K,η1)。因
为风险价值和增长率量纲不同,我们要对它们进行标准化处理:
Q ′ = ( K − K m i n K m a x − K m i n , 1 η − 1 η m i n 1 η m a x − 1 η m i n ) Q'=(\frac{K-K_{min}}{K_{max}-K_{min}},\frac{\frac{1}{\eta}-\frac{1}{\eta_{min}}}{\frac{1}{\eta_{max}}-\frac{1}{\eta_{min}}}) Q=(KmaxKminKKmin,ηmax1ηmin1η1ηmin1)
Q ′ Q' Q到原点的距离 r r r,距离越近说明风险价值越小,投资增长率越大:
r = ( K − K m i n K m a x − K m i n ) 2 + ( 1 η − 1 η m i n 1 η m a x − 1 η m i n ) 2 r=\sqrt{(\frac{K-K_{min}}{K_{max}-K_{min}})^2+(\frac{\frac{1}{\eta}-\frac{1}{\eta_{min}}}{\frac{1}{\eta_{max}}-\frac{1}{\eta_{min}}})^2} r=(KmaxKminKKmin)2+(ηmax1ηmin1η1ηmin1)2
稳健的投资者不会将钱全部买入一支股票,所以我们为了简化模型,我们决定
投资n支股票,每支股票的投资金额一致。
此问题的决策变量可以定义为:
x i = { 0 不选取第i支股票 1 选取第i支股票 x_i=\begin{cases} 0& \text{不选取第i支股票}\\ 1& \text{选取第i支股票} \end{cases} xi={01不选取第i支股票选取第i支股票
所以模型的目标函数为:
m a x   R = ∑ i = 1 57 r i x i max \ R=\sum_{i=1}^{57}r_ix_i max R=i=157rixi
s . t . { ∑ i = 1 57 x i = n x i ∈ ( 0 , 1 ) s.t.\begin{cases} \sum_{i=1}^{57}x_i=n\\ x_i\in(0,1) \end{cases} s.t.{i=157xi=nxi(0,1)
由此问题转化为0-1规划问题,求解还是很轻松的,lingo、暴力求解、智能算法都可以很轻松求解。笔者用的遗传算法,这里就不多阐述了,网上也有一大堆资料。
2020五一杯B题和mathorcupD题的思路_第4张图片

mathorcup

其实D题这题目没啥可说的,预测类问题已经出烂了,感觉流程和方法已经完全标准化了,没啥发挥的余地。其实我不是很明白预测类问题在数学建模里面出现的那么频繁,如果是传统的时间序列那精度非常感人,机器学习在精度上暴打传统时间序列,但如果用机器学习,那我感觉失去了数学建模的意义。每次看到一些论文用到什么神经网络我感觉这论文就没啥意义,这玩意儿极度黑箱,只能出一个结果,每个特征的重要性完全无法分析,而且就凭寻常数学建模的一万左右的数据量,用神经网络实在不是一个很好的方法,数据量太小了,而且每次调参真的是折磨,对生理和心理的耐心双重考验,调不好参数精度照样感人。

如果非要用机器学习,我就建议使用决策树,既能分析特征重要性,不需要调参就能得到足够精确的结果,且数学理论也足够丰富。我就是采用了决策树的强化版 G B D T GBDT GBDT(梯度提升树)来做的,过程就不阐述了,机器学习实在没啥想说的,精度还不错, M A P E MAPE MAPE 5 % 5\% 5%左右。
2020五一杯B题和mathorcupD题的思路_第5张图片
2020五一杯B题和mathorcupD题的思路_第6张图片

后记

现在几所高校被美国制裁了无法使用 m a t l a b matlab matlab,当然笔者所在的渣渣学校是不可能被美国看上的。但是向开源软件靠近是大势所趋,这次我尝试比赛全程不使用 m a t l a b matlab matlab,全用 p y t h o n python python,当然也是和我选择的题目有关,我都是选择的数据分析类题目,一是这类题目我很熟悉,二是我真的不会用python解方程和线性规划=。=

你可能感兴趣的:(数学建模,数学建模)