聯(lián)與ARIMA的煤炭價(jià)格預(yù)測建模實(shí)戰(zhàn))
簡介這份PDF文檔是五一數(shù)學(xué)建模競賽A題的完整參賽論文主題為“煤炭價(jià)格預(yù)測問題研究”面向備戰(zhàn)數(shù)學(xué)建模競賽的高校學(xué)生及指導(dǎo)教師也適合希望系統(tǒng)學(xué)習(xí)灰色關(guān)聯(lián)分析、時(shí)間序列與逐步回歸等建模方法的讀者。資源包共1個(gè)PDF文件大小約1.82MB內(nèi)容涵蓋承諾書、問題重述、模型假設(shè)、符號說明、問題分析及模型建立求解等完整章節(jié)結(jié)構(gòu)規(guī)范可直接作為論文寫作與建模思路的參考范本。論文圍繞秦皇島港動(dòng)力煤價(jià)格運(yùn)用灰色關(guān)聯(lián)分析量化排序國家政策、市場供需、氣候變化等影響因素借助時(shí)間序列與隨機(jī)模擬預(yù)測未來31天、35周、36個(gè)月的價(jià)格走勢并通過逐步回歸處理多重共線性問題配合靈敏度分析檢驗(yàn)?zāi)P头€(wěn)定性最終提出穩(wěn)定煤炭市場的政策建議。目前已有4996人學(xué)習(xí)下載適合需要掌握完整建模流程、學(xué)習(xí)論文排版與結(jié)果表達(dá)的中高級參賽者參考借鑒。1. 從一份競賽 PDF 說起煤炭價(jià)格預(yù)測到底在考什么五一數(shù)學(xué)建模競賽的 A 題題目叫“煤炭價(jià)格預(yù)測問題研究”核心就四件事找出影響煤炭價(jià)格的主要因素并排序、用時(shí)間序列預(yù)測未來 31 天/35 周/36 個(gè)月的價(jià)格、用逐步回歸建一個(gè)能解釋價(jià)格變化的多元線性方程、最后給政策建議。這份 PDF 不是教程是一份完整的參賽論文包含承諾書、問題重述、假設(shè)、符號說明、四個(gè)問題的建模求解過程、模型評價(jià)和 Matlab 代碼附錄。如果你正在準(zhǔn)備數(shù)學(xué)建模競賽或者需要一套“灰色關(guān)聯(lián) ARIMA 逐步回歸”的完整落地范例這份資料的價(jià)值在于它把從數(shù)據(jù)預(yù)處理到模型檢驗(yàn)的每一步都寫出來了包括 SPSS 的輸出表格、Matlab 代碼、殘差白噪聲檢驗(yàn)的判據(jù)。適合已經(jīng)學(xué)過概率統(tǒng)計(jì)和回歸分析、但不知道怎么把方法串成一篇完整論文的人。下面我按“數(shù)據(jù)怎么進(jìn)、模型怎么選、參數(shù)怎么定、結(jié)果怎么驗(yàn)”的順序拆一遍。2. 灰色關(guān)聯(lián)分析9 個(gè)指標(biāo)怎么排出影響程度2.1 為什么選灰色關(guān)聯(lián)而不是皮爾遜相關(guān)問題一要求對影響煤炭價(jià)格的因素排序數(shù)據(jù)是 2019 年 5 月到 2020 年 3 月共 11 個(gè)月的月度數(shù)據(jù)樣本量極小。皮爾遜相關(guān)系數(shù)要求數(shù)據(jù)服從正態(tài)分布、樣本量足夠11 個(gè)點(diǎn)做相關(guān)性分析置信區(qū)間寬得沒法看?;疑P(guān)聯(lián)分析的優(yōu)勢就在這里它對數(shù)據(jù)量和分布沒有嚴(yán)格要求通過比較序列曲線幾何形狀的相似程度來判斷關(guān)聯(lián)度樣本少也能算出穩(wěn)定的排序。論文里選的 9 個(gè)指標(biāo)是煤炭進(jìn)口量、煤炭產(chǎn)量、煤炭出口量、全國鐵路煤炭發(fā)運(yùn)量、居民消費(fèi)者價(jià)格指數(shù)、全國煤炭企業(yè)庫存、GDP、煤炭加工成本指數(shù)、秦皇島平均最高氣溫。母序列是煤炭價(jià)格子序列是這 9 個(gè)指標(biāo)。2.2 Matlab 實(shí)現(xiàn)從數(shù)據(jù)標(biāo)準(zhǔn)化到關(guān)聯(lián)度排序論文附錄給出了完整的 Matlab 代碼我把它拆成可獨(dú)立運(yùn)行的版本并補(bǔ)上關(guān)鍵注釋clear; clc; % price 為 11*10 數(shù)組第 1 列是煤炭價(jià)格母序列第 2-10 列是 9 個(gè)指標(biāo) load price.mat % 均值化處理每列除以該列均值消除量綱 Mean mean(price); price_norm price ./ repmat(Mean, size(price,1), 1); Y price_norm(:,1); % 母序列 X price_norm(:,2:end); % 子序列 % 計(jì)算絕對差矩陣 |X0(k) - Xi(k)| absX0Xi abs(X - repmat(Y, 1, size(X,2))); a min(min(absX0Xi)); % 兩級最小差 b max(max(absX0Xi)); % 兩級最大差 rho 0.5; % 分辨系數(shù)一般取 0.5 % 關(guān)聯(lián)系數(shù)矩陣 lambda (a rho*b) ./ (absX0Xi rho*b); % 每個(gè)指標(biāo)的灰色關(guān)聯(lián)度 關(guān)聯(lián)系數(shù)按行求均值 disp(各指標(biāo)灰色關(guān)聯(lián)度); disp(mean(lambda));邏輯說明均值化處理是灰色關(guān)聯(lián)分析的標(biāo)準(zhǔn)去量綱方式比極差標(biāo)準(zhǔn)化更溫和不會把最小值壓成 0。分辨系數(shù) rho 取 0.5 是論文里的選擇它的作用是調(diào)整關(guān)聯(lián)系數(shù)之間的差異顯著性——rho 越小差異越大rho 越大差異越小。一般取 0.5 是折中方案如果排序結(jié)果區(qū)分度不夠可以降到 0.3 試試。參數(shù)說明price.mat是 11 行 10 列的矩陣行對應(yīng)月份列對應(yīng)指標(biāo)。如果你換一組數(shù)據(jù)只要保證第一列是因變量、后面是自變量行列數(shù)對應(yīng)即可。repmat的作用是把均值向量復(fù)制成和原矩陣同尺寸避免用循環(huán)。2.3 結(jié)果解讀與排序邏輯論文跑出來的關(guān)聯(lián)度排序是居民消費(fèi)者價(jià)格指數(shù) 0.9779 煤炭加工成本指數(shù) 0.9622 全國鐵路煤炭發(fā)運(yùn)量 0.9511 煤炭產(chǎn)量 0.9353 GDP 0.9328 煤炭進(jìn)口量 0.8627 煤炭出口量 0.7559 秦皇島平均最高氣溫 0.6777 全國煤炭企業(yè)庫存 0.6559。最終歸納為四個(gè)主要因素經(jīng)濟(jì)水平、煤炭生產(chǎn)成本、煤炭產(chǎn)量、季節(jié)因素。這里有個(gè)容易翻車的地方關(guān)聯(lián)度排序不等于因果排序?;疑P(guān)聯(lián)只能說明兩個(gè)序列的變化趨勢同步不能證明誰導(dǎo)致誰。論文在結(jié)論里寫“影響程度從大到小”是競賽語境下的表述實(shí)際寫報(bào)告時(shí)最好加一句“關(guān)聯(lián)度反映的是變化趨勢的協(xié)同性因果方向需結(jié)合經(jīng)濟(jì)學(xué)邏輯判斷”。3. ARIMA 時(shí)間序列31 天、35 周、36 個(gè)月怎么分別建模3.1 三個(gè)時(shí)間尺度為什么用三個(gè)不同模型問題二要求預(yù)測未來 31 天、35 周、36 個(gè)月但原始數(shù)據(jù)是周度價(jià)格。論文的處理思路是周度數(shù)據(jù)用 ARIMA(1,1,18) 預(yù)測未來 35 周月度數(shù)據(jù)用 ARIMA(0,1,1)(0,0,0) 預(yù)測未來 36 個(gè)月日度數(shù)據(jù)因?yàn)橐恢軆?nèi)價(jià)格波動(dòng)很小用“周均值 隨機(jī)波動(dòng)”的方式模擬波動(dòng)邊界通過對每周最大值和最小值分別建 ARIMA(1,1,18) 來預(yù)測。這里的關(guān)鍵判斷是不同時(shí)間尺度的數(shù)據(jù)生成過程不一樣強(qiáng)行用一個(gè)模型套三個(gè)尺度殘差檢驗(yàn)大概率過不了。周度數(shù)據(jù)有明顯的短期自相關(guān)月度數(shù)據(jù)經(jīng)過差分后趨于平穩(wěn)日度數(shù)據(jù)在周內(nèi)近似隨機(jī)。分開建模是務(wù)實(shí)的選擇。3.2 SPSS 專家建模器的參數(shù)設(shè)置與白噪聲檢驗(yàn)論文用 SPSS 的時(shí)間序列建模器完成 ARIMA 建模。操作路徑是分析 → 時(shí)間序列預(yù)測 → 創(chuàng)建傳統(tǒng)模型 → 條件選擇“專家建模器”。專家建模器會自動(dòng)在 ARIMA 和指數(shù)平滑之間選優(yōu)評價(jià)標(biāo)準(zhǔn)是標(biāo)準(zhǔn)化 BIC。以周度預(yù)測為例選出的模型是 ARIMA(1,1,18)平穩(wěn) R 方 0.295R 方 0.992正態(tài)化 BIC 5.160。R 方接近 1 說明擬合很好但平穩(wěn) R 方只有 0.295說明模型對趨勢的解釋力有限主要靠差分和滯后項(xiàng)在擬合。這不是問題時(shí)間序列預(yù)測本來就不追求解釋力追求的是殘差白噪聲。殘差檢驗(yàn)看兩個(gè)東西ACF 和 PACF 圖是否所有滯后階數(shù)都落在置信區(qū)間內(nèi)楊-博克斯 Q 統(tǒng)計(jì)量的 p 值是否大于 0.05。論文里月度模型的 Q(18) 20.568p 0.246大于 0.05不能拒絕“殘差是白噪聲”的原假設(shè)模型可接受。注意p 值大于 0.05 只是“不能拒絕原假設(shè)”不等于“證明殘差是白噪聲”。樣本量小的時(shí)候Q 檢驗(yàn)的功效很低最好結(jié)合 ACF/PACF 圖一起看。3.3 日度價(jià)格的隨機(jī)模擬從周最大值最小值到每天價(jià)格論文的日度預(yù)測思路值得單獨(dú)說。它先對每周的最大值和最小值分別建 ARIMA(1,1,18)預(yù)測未來 35 周的最大值 a_i 和最小值 b_i然后取周均值 c_i (a_i b_i)/2。第 i 周第 j 天的價(jià)格用公式 d_ij (a_i - c_i) * rand c_i 生成rand 是 [-1,1] 的隨機(jī)數(shù)。Matlab 實(shí)現(xiàn)如下% a 和 b 分別是預(yù)測的未來 5 周最大值和最小值 a [470.3, 468.1, 466.7, 466.2, 466.2]; b [5.6, 6.3, 7.4, 8.7, 10.4]; c []; for i 1:5 for j 1:7 % 在周均值附近生成隨機(jī)波動(dòng) c [c, a(i) b(i) * (2*rand(1) - 1)]; end end邏輯說明2*rand(1)-1把隨機(jī)數(shù)映射到 [-1,1]再乘以 b(i) 作為波動(dòng)幅度。這里 b(i) 在論文里實(shí)際是“最大值與均值的差”不是最小值變量命名有點(diǎn)繞看代碼時(shí)注意區(qū)分。這個(gè)方法的本質(zhì)是用均勻分布模擬日度波動(dòng)優(yōu)點(diǎn)是簡單、可復(fù)現(xiàn)缺點(diǎn)是波動(dòng)邊界是硬截?cái)嗾鎸?shí)價(jià)格可能在邊界外。參數(shù)說明如果你要改預(yù)測周數(shù)改循環(huán)上限即可如果要改波動(dòng)分布把rand換成randn就是正態(tài)波動(dòng)但要注意正態(tài)分布沒有天然邊界需要額外截?cái)唷?. 逐步回歸多重共線性下怎么篩出有效變量4.1 為什么直接用 9 個(gè)指標(biāo)做回歸會翻車問題三要求建一個(gè)多元線性回歸方程來描述煤炭價(jià)格變化。如果直接把問題一的 9 個(gè)指標(biāo)全部塞進(jìn)回歸大概率會遇到多重共線性GDP 和居民消費(fèi)者價(jià)格指數(shù)高度相關(guān)煤炭產(chǎn)量和鐵路發(fā)運(yùn)量高度相關(guān)煤炭進(jìn)口量和出口量也可能相關(guān)。多重共線性會導(dǎo)致回歸系數(shù)估計(jì)不穩(wěn)定符號可能反直覺t 檢驗(yàn)失效。論文選擇向后逐步回歸用 SPSS 完成。向后逐步回歸的邏輯是先把所有變量放進(jìn)去然后逐步剔除對模型貢獻(xiàn)不顯著p 值大于 0.05 或 0.1的變量直到所有剩余變量都顯著。4.2 SPSS 逐步回歸的操作與輸出解讀操作路徑分析 → 回歸 → 線性 → 方法選“向后”。因變量選煤炭價(jià)格自變量選 9 個(gè)指標(biāo)。SPSS 會輸出多個(gè)模型每個(gè)模型剔除一個(gè)變量看最后一個(gè)模型的系數(shù)和顯著性。論文最終保留的變量是煤炭生產(chǎn)成本指數(shù)x8和秦皇島日均最高氣溫x9回歸方程是價(jià)格 422.072 1.548 * x8 0.696 * x9模型 2 的 R 0.948R 方 0.899調(diào)整后 R 方 0.874F 統(tǒng)計(jì)量對應(yīng) p 值小于 0.05。每個(gè)回歸系數(shù)的 t 檢驗(yàn) p 值也都小于 0.05。系數(shù)解讀煤炭生產(chǎn)成本指數(shù)每上升 1 個(gè)單位煤炭價(jià)格上升 1.548 元/噸秦皇島日均最高氣溫每上升 1℃煤炭價(jià)格上升 0.696 元/噸。第二個(gè)結(jié)論有點(diǎn)反直覺——通常認(rèn)為冬季取暖用煤多、價(jià)格高但模型顯示夏季價(jià)格更高。論文的解釋是夏季用電高峰帶動(dòng)電煤需求加上水電出力受季節(jié)影響火電補(bǔ)位推高煤價(jià)。這個(gè)解釋在競賽語境下能自圓其說但實(shí)際市場中季節(jié)性規(guī)律受庫存、進(jìn)口、政策等多因素調(diào)節(jié)不能單看氣溫。4.3 回歸模型的靈敏度分析與邊界論文對回歸方程做了靈敏度分析核心結(jié)論是煤炭價(jià)格對生產(chǎn)成本最敏感對氣溫的敏感度次之。這里有個(gè)邊界要注意逐步回歸剔除變量時(shí)被剔除的變量不是“沒有影響”而是“在當(dāng)前樣本下加入它不能顯著提升模型擬合優(yōu)度”。樣本量只有 11 個(gè)月剔除變量很可能是樣本不足導(dǎo)致的不代表這些因素在更長的時(shí)間尺度上不重要。論文自己在“模型不足與改進(jìn)”里也承認(rèn)了這一點(diǎn)向前逐步回歸過度追求模型精確性反而帶來對影響因素解釋的片面性只用了近一年數(shù)據(jù)模型缺乏長期預(yù)測能力。這個(gè)自我批評是誠實(shí)的也是這份資料值得看的地方——它沒有把模型吹成萬能。5. 避坑與排查這份資料里沒寫但你會遇到的問題5.1 灰色關(guān)聯(lián)度排序和回歸系數(shù)符號不一致現(xiàn)象灰色關(guān)聯(lián)分析里 GDP 排第 5但逐步回歸把 GDP 剔除了煤炭產(chǎn)量關(guān)聯(lián)度排第 4也被剔除了。原因灰色關(guān)聯(lián)分析衡量的是序列曲線的形狀相似性不控制變量之間的相互影響逐步回歸是在控制其他變量的條件下看單個(gè)變量的邊際貢獻(xiàn)。兩個(gè)方法的評價(jià)維度不同排序不一致是正常的。解決在論文里分別說明兩個(gè)方法的用途——灰色關(guān)聯(lián)用于初步篩選和排序逐步回歸用于在共線性約束下找精簡模型。不要強(qiáng)行讓兩個(gè)排序一致。5.2 ARIMA 模型殘差檢驗(yàn) p 值剛好卡在 0.05 附近現(xiàn)象Q 統(tǒng)計(jì)量的 p 值在 0.04 到 0.06 之間拒絕和不拒絕原假設(shè)的邊界上。原因樣本量小的時(shí)候Q 檢驗(yàn)的統(tǒng)計(jì)量本身波動(dòng)大p 值不穩(wěn)定。滯后階數(shù)的選擇也會影響結(jié)果滯后太少可能漏掉自相關(guān)滯后太多會損失自由度。解決不要只看 p 值。同時(shí)看 ACF 和 PACF 圖如果所有滯后階數(shù)都在置信區(qū)間內(nèi)即使 p 值略小于 0.05也可以認(rèn)為殘差近似白噪聲。如果圖上有明顯的超出置信區(qū)間的滯后項(xiàng)即使 p 值大于 0.05也要考慮改進(jìn)模型。5.3 日度隨機(jī)模擬的結(jié)果每次運(yùn)行都不一樣現(xiàn)象Matlab 代碼里的rand沒有設(shè)種子每次運(yùn)行生成的 31 天價(jià)格都不同。原因rand默認(rèn)以系統(tǒng)時(shí)間初始化隨機(jī)數(shù)生成器每次調(diào)用序列不同。解決在代碼開頭加rng(42)固定隨機(jī)種子保證結(jié)果可復(fù)現(xiàn)。如果論文要求給出確定的預(yù)測值可以跑多次取均值或者直接用周均值作為日度預(yù)測值在論文里說明“日度波動(dòng)在周均值附近隨機(jī)分布”。5.4 月度預(yù)測和周度預(yù)測的數(shù)據(jù)對不上現(xiàn)象論文里未來 12 個(gè)月的預(yù)測價(jià)格和未來 35 周的預(yù)測價(jià)格在時(shí)間重疊區(qū)間不一致。原因兩個(gè)模型是獨(dú)立建的ARIMA(1,1,18) 和 ARIMA(0,1,1)(0,0,0) 的參數(shù)不同預(yù)測路徑自然不同。解決論文在“模型缺點(diǎn)”里承認(rèn)了這個(gè)問題。實(shí)際處理時(shí)可以以月度模型為準(zhǔn)做長期預(yù)測以周度模型為準(zhǔn)做短期預(yù)測在重疊區(qū)間取加權(quán)平均或者統(tǒng)一用一個(gè)模型的不同時(shí)間聚合方式。競賽里如果時(shí)間緊直接在論文里說明不一致的原因即可評委通常能接受。5.5 數(shù)據(jù)插值方法選擇影響結(jié)論現(xiàn)象論文對缺失數(shù)據(jù)用了臨近線性插值和算術(shù)平均不同插值方法可能改變灰色關(guān)聯(lián)度的排序。原因插值方法會改變序列的均值和方差進(jìn)而影響標(biāo)準(zhǔn)化后的關(guān)聯(lián)系數(shù)。解決在論文里明確寫出插值方法并做敏感性分析——換一種插值方法比如樣條插值看排序是否穩(wěn)定。如果排序變化大說明結(jié)論對數(shù)據(jù)預(yù)處理敏感需要謹(jǐn)慎表述。6. 從這份 PDF 里能復(fù)用的三個(gè)進(jìn)階技巧6.1 用 BIC 而不是 R 方來選 ARIMA 階數(shù)R 方衡量的是擬合優(yōu)度但時(shí)間序列模型如果階數(shù)太高R 方會一直上升導(dǎo)致過擬合。BIC 同時(shí)考慮殘差大小和參數(shù)個(gè)數(shù)參數(shù)越多懲罰越大。論文里周度模型的 BIC 是 5.160月度模型是 6.985都比較小說明模型復(fù)雜度可控。實(shí)際操作中在 SPSS 專家建模器里把“離群值處理”關(guān)掉讓 BIC 自己選通常比手動(dòng)試階數(shù)更穩(wěn)。6.2 把灰色關(guān)聯(lián)度作為回歸的預(yù)篩選如果自變量很多比如超過 15 個(gè)直接做逐步回歸計(jì)算量大且容易過擬合。可以先用灰色關(guān)聯(lián)分析篩掉關(guān)聯(lián)度低于某個(gè)閾值的變量再做逐步回歸。論文里 9 個(gè)指標(biāo)不算多所以直接做了逐步回歸。如果指標(biāo)擴(kuò)展到 20 個(gè)以上建議先篩后回歸。6.3 殘差白噪聲檢驗(yàn)的完整流程論文里的檢驗(yàn)流程是先看 ACF/PACF 圖再算 Q 統(tǒng)計(jì)量。我一般會再加一步把殘差畫成時(shí)序圖看有沒有明顯的聚集或周期。如果殘差圖上有連續(xù)多個(gè)點(diǎn)在同側(cè)說明模型沒有捕捉到某個(gè)周期性因素。這一步不需要額外軟件SPSS 的殘差序列圖就能看。6.4 政策建議怎么寫才不空論文的政策建議部分給了三條加強(qiáng)宏觀調(diào)控、建立煤炭成本價(jià)格指數(shù)、發(fā)展新能源。這三條都是從模型結(jié)論推出來的——因?yàn)榛貧w顯示生產(chǎn)成本和氣溫顯著所以建議監(jiān)控成本、應(yīng)對季節(jié)性波動(dòng)因?yàn)槟P陀芯窒扌运越ㄗh發(fā)展新能源降低長期依賴。寫政策建議時(shí)每一條都要對應(yīng)到模型里的一個(gè)具體發(fā)現(xiàn)不要寫“加強(qiáng)監(jiān)管”“促進(jìn)發(fā)展”這種放之四海而皆準(zhǔn)的話。6.5 論文結(jié)構(gòu)的可復(fù)用模板這份 PDF 的結(jié)構(gòu)是承諾書 → 問題重述 → 假設(shè) → 符號說明 → 問題分析 → 四個(gè)問題的建模求解 → 模型評價(jià) → 參考文獻(xiàn) → 附錄代碼。數(shù)學(xué)建模競賽論文基本都可以套這個(gè)結(jié)構(gòu)。區(qū)別在于中間四個(gè)問題的建模方法不同。如果你拿到的是預(yù)測類題目把灰色關(guān)聯(lián)換成相關(guān)性分析、把 ARIMA 換成 LSTM 或灰色預(yù)測結(jié)構(gòu)不用大改。提示附錄代碼不要直接復(fù)制論文里的論文里的代碼是片段缺少數(shù)據(jù)加載和結(jié)果輸出。我一般會補(bǔ)上save命令把中間結(jié)果存成 mat 文件方便復(fù)現(xiàn)和調(diào)試。從那以后我每次做時(shí)間序列建模都會先把數(shù)據(jù)按不同時(shí)間尺度拆開分別做平穩(wěn)性檢驗(yàn)和白噪聲檢驗(yàn)再?zèng)Q定用幾個(gè)模型。這份 PDF 最大的價(jià)值不是它的結(jié)論而是它把“數(shù)據(jù)少、指標(biāo)多、時(shí)間尺度混雜”這種典型競賽場景下的完整處理流程攤開了給你看。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取