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

前言

這裏是筆者對數模競賽的一些內心bb,看思路的可以直接跳過。
數模是一個很好的競賽,我個人認爲挺鍛鍊人的。但是有不少人是抱着加分的心態在參加數模,像mathorcup、中青杯這種小比賽在筆者的學校算作是國家級比賽,加分和國賽美賽是同一水平,但是獲獎難度確是低了數倍,一等獎直接在綜測加4分,二等獎加2分,相當於智育成績高了6.6分,我覺得這是對不參加此類競賽的同學極度的不公平,因爲這種比賽的二等獎本身就不是什麼特別困難的事情。
筆者自己所在的院系有着相當激烈的競爭氛圍,但我不認爲這是一件什麼好事情,大家總是在各種奇奇怪怪的地方爭取綜測加分,我聽說了各種買論文、買專利等爲了加分的舉動(相比這些行爲水數模競賽還算可以接受的事情,畢竟是自己的努力拿到的)。筆者的一個朋友在期末算綜測的時候總是特別沮喪,他沒參加競賽,他成績特別好,但是相比那些“水綜測”的人,他沒法拿到一等獎。出於對朋友的同情,也有對水加分這一行爲的厭惡,筆者在mathorcup報名的最後一天將名字劃去,參加比賽只爲提高自己,不爲加分。
我還是希望參加數模的人是真正想要去學習技能提升自己的人蔘加,與其參加了一大堆比賽,不如就好好參加一兩個,好好覆盤,對自己更有益處。也希望院系的風氣能趨於正常,不爲無意義的排名幹那些沒有意義的事情。

五一杯

筆者這裏做的是B題,所以只說一下B題。(順便今年的五一杯難度比去年降低了好多,可能是因爲組委會考慮疫情團隊溝通問題,但對於筆者一個人做題的人來說,毫無影響:)。這題加上寫論文一共就花了一天時間,當然筆者的寫論文水平太次,被我的老師一頓臭罵。但是模型沒啥問題,各位放心)

第一問

這裏問的是決策方案的差異,這裏首先將1010家公司的5757支股票的選擇轉換爲105710*57的矩陣:
D=[x11x21...x571x12x22...x572x110x210...x5710]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}
其中xjix^i_j代表第ii家公司在第jj支股票的投資金額。
我們可以將DD的每一行作爲公司的資產配置屬性,比較向量之間的差異作爲公司的決策差異。比較向量之間的差異的方法有很多,比如常用的歐式距離或者餘弦距離。

但是明顯這兩個方法不夠“高端”,在這種小比賽裏可能會比較喫虧,因爲評委就喜歡一些看上去特別厲害的方法。這裏筆者想到了差異顯著性評判 ,這是筆者在看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的情況下,p>0.05p>0.05接受原假設,p0.05p<0.05拒絕原假設。

  • xi\overline{x}_i表示第i個總體的樣本均值,則
    xi=j=1nixijnI,(i=1,2,...,k)\overline{x}_i=\frac{\sum_{j=1}^{n_i}x_{ij}}{n_I},(i=1,2,...,k)
    其中,nin_i爲第ii個總體的樣本觀察值個數。
  • 令總均值爲x\overline{\overline{x}},則
    x=i=1kj=1nixijn=i=1knixin\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}
    式中,n=n1+n2+...+nkn=n_1+n_2+...+n_k
  • 水平項誤差平方和SSASSA。它是各組平均值 x\overline{x}與總平均值x\overline{\overline{x}}的誤差平方和,反映了 各水平總體的樣本均值之間的差異程度,因此又稱爲組間平方和。
    SSA=i=1kj=1nixij(xix)2=i=1kni(xix)2SSA=\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
  • 誤差項平方和SSESSE 。它是每個水平或各組的各樣本數據與其組平均值誤差的平方和,反映了每個樣本各觀察值的離散狀況,因此又稱爲組內平方和或殘差平方和。
    SSE=i=1kj=1ni(xijxi)2SSE=\sum_{i=1}^{k}\sum_{j=1}^{n_i}(x_{ij}-\overline{x}_i)^2
  • 檢驗統計量 FFFFMSAMSAMSEMSE的比值。
    F=MSAMSE=SSAK1SSEnkF=\frac{MSA}{MSE}=\frac{\frac{SSA}{K-1}}{\frac{SSE}{n-k}}
    最後的結果我用了一張熱力圖表示:

    顏色越深說明兩家公司的顯著性差異越大,顏色越淺說明兩家公司的顯著性差異越小。

第二問

這道題我們略過,我覺得在已知歷史數據的情況下找最優就是扯淡,找增長率最大的不就得了,沒啥意義。隨便建了一個半頁的模型,被老師罵了一頓,這裏就不提了。

第三問

2020年所有基金公司仍然按照 2019 年的資產配置策略進行投資,度量每個基金公司 2020年95%置信水平下的風險價值。度量公司的風險價值就是度量每支股票的風險價值。我們需要預測未來股票價格的走勢,常用的方法有蒙特卡洛模擬法。
但是蒙特卡洛使用的準則是隨機幾何布朗運動法,同樣離不開一個字,“low”。我們要讓它高端起來,所以我們改變它的模擬方法,使用其它時間序列的方法來代替隨機幾何運動。這裏筆者採用的是ARIMAARIMA時間序列對蒙特卡洛模擬法進行優化,使用不同的qqpp值進行1000 次的模擬,如此得到的數據走勢更具科學性,而 不是單單的隨機運動。 公式這裏就不列了,網上都有(主要是打公式太麻煩)。

第四問

題目要求既能保證投資效用η\eta最大化,同時又能使風險價值KK最低,選擇最優的股票投資組合策略。

對於雙目標求解問題,筆者一般採用的方法是將兩個指標抽象爲二維空間上的點Q(K,1η)Q(K,\frac{1}{\eta})。因
爲風險價值和增長率量綱不同,我們要對它們進行標準化處理:
Q=(KKminKmaxKmin,1η1ηmin1ηmax1ηmin)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}}})
QQ'到原點的距離rr,距離越近說明風險價值越小,投資增長率越大:
r=(KKminKmaxKmin)2+(1η1ηmin1ηmax1ηmin)2r=\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}
穩健的投資者不會將錢全部買入一支股票,所以我們爲了簡化模型,我們決定
投資n支股票,每支股票的投資金額一致。
此問題的決策變量可以定義爲:
xi={0不選取第i支股票1選取第i支股票x_i=\begin{cases} 0& \text{不選取第i支股票}\\ 1& \text{選取第i支股票} \end{cases}
所以模型的目標函數爲:
max R=i=157riximax \ R=\sum_{i=1}^{57}r_ix_i
s.t.{i=157xi=nxi(0,1)s.t.\begin{cases} \sum_{i=1}^{57}x_i=n\\ x_i\in(0,1) \end{cases}
由此問題轉化爲0-1規劃問題,求解還是很輕鬆的,lingo、暴力求解、智能算法都可以很輕鬆求解。筆者用的遺傳算法,這裏就不多闡述了,網上也有一大堆資料。

mathorcup

其實D題這題目沒啥可說的,預測類問題已經出爛了,感覺流程和方法已經完全標準化了,沒啥發揮的餘地。其實我不是很明白預測類問題在數學建模裏面出現的那麼頻繁,如果是傳統的時間序列那精度非常感人,機器學習在精度上暴打傳統時間序列,但如果用機器學習,那我感覺失去了數學建模的意義。每次看到一些論文用到什麼神經網絡我感覺這論文就沒啥意義,這玩意兒極度黑箱,只能出一個結果,每個特徵的重要性完全無法分析,而且就憑尋常數學建模的一萬左右的數據量,用神經網絡實在不是一個很好的方法,數據量太小了,而且每次調參真的是折磨,對生理和心理的耐心雙重考驗,調不好參數精度照樣感人。

如果非要用機器學習,我就建議使用決策樹,既能分析特徵重要性,不需要調參就能得到足夠精確的結果,且數學理論也足夠豐富。我就是採用了決策樹的強化版GBDTGBDT(梯度提升樹)來做的,過程就不闡述了,機器學習實在沒啥想說的,精度還不錯,MAPEMAPE5%5\%左右。

後記

現在幾所高校被美國製裁了無法使用matlabmatlab,當然筆者所在的渣渣學校是不可能被美國看上的。但是向開源軟件靠近是大勢所趨,這次我嘗試比賽全程不使用matlabmatlab,全用pythonpython,當然也是和我選擇的題目有關,我都是選擇的數據分析類題目,一是這類題目我很熟悉,二是我真的不會用python解方程和線性規劃=。=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章