
简介这份PDF文档是五一数学建模竞赛A题的完整参赛论文主题为“煤炭价格预测问题研究”面向备战数学建模竞赛的高校学生及指导教师也适合希望系统学习灰色关联分析、时间序列与逐步回归等建模方法的读者。资源包共1个PDF文件大小约1.82MB内容涵盖承诺书、问题重述、模型假设、符号说明、问题分析及模型建立求解等完整章节结构规范可直接作为论文写作与建模思路的参考范本。论文围绕秦皇岛港动力煤价格运用灰色关联分析量化排序国家政策、市场供需、气候变化等影响因素借助时间序列与随机模拟预测未来31天、35周、36个月的价格走势并通过逐步回归处理多重共线性问题配合灵敏度分析检验模型稳定性最终提出稳定煤炭市场的政策建议。目前已有4996人学习下载适合需要掌握完整建模流程、学习论文排版与结果表达的中高级参赛者参考借鉴。1. 从一份竞赛 PDF 说起煤炭价格预测到底在考什么五一数学建模竞赛的 A 题题目叫“煤炭价格预测问题研究”核心就四件事找出影响煤炭价格的主要因素并排序、用时间序列预测未来 31 天/35 周/36 个月的价格、用逐步回归建一个能解释价格变化的多元线性方程、最后给政策建议。这份 PDF 不是教程是一份完整的参赛论文包含承诺书、问题重述、假设、符号说明、四个问题的建模求解过程、模型评价和 Matlab 代码附录。如果你正在准备数学建模竞赛或者需要一套“灰色关联 ARIMA 逐步回归”的完整落地范例这份资料的价值在于它把从数据预处理到模型检验的每一步都写出来了包括 SPSS 的输出表格、Matlab 代码、残差白噪声检验的判据。适合已经学过概率统计和回归分析、但不知道怎么把方法串成一篇完整论文的人。下面我按“数据怎么进、模型怎么选、参数怎么定、结果怎么验”的顺序拆一遍。2. 灰色关联分析9 个指标怎么排出影响程度2.1 为什么选灰色关联而不是皮尔逊相关问题一要求对影响煤炭价格的因素排序数据是 2019 年 5 月到 2020 年 3 月共 11 个月的月度数据样本量极小。皮尔逊相关系数要求数据服从正态分布、样本量足够11 个点做相关性分析置信区间宽得没法看。灰色关联分析的优势就在这里它对数据量和分布没有严格要求通过比较序列曲线几何形状的相似程度来判断关联度样本少也能算出稳定的排序。论文里选的 9 个指标是煤炭进口量、煤炭产量、煤炭出口量、全国铁路煤炭发运量、居民消费者价格指数、全国煤炭企业库存、GDP、煤炭加工成本指数、秦皇岛平均最高气温。母序列是煤炭价格子序列是这 9 个指标。2.2 Matlab 实现从数据标准化到关联度排序论文附录给出了完整的 Matlab 代码我把它拆成可独立运行的版本并补上关键注释clear; clc; % price 为 11*10 数组第 1 列是煤炭价格母序列第 2-10 列是 9 个指标 load price.mat % 均值化处理每列除以该列均值消除量纲 Mean mean(price); price_norm price ./ repmat(Mean, size(price,1), 1); Y price_norm(:,1); % 母序列 X price_norm(:,2:end); % 子序列 % 计算绝对差矩阵 |X0(k) - Xi(k)| absX0Xi abs(X - repmat(Y, 1, size(X,2))); a min(min(absX0Xi)); % 两级最小差 b max(max(absX0Xi)); % 两级最大差 rho 0.5; % 分辨系数一般取 0.5 % 关联系数矩阵 lambda (a rho*b) ./ (absX0Xi rho*b); % 每个指标的灰色关联度 关联系数按行求均值 disp(各指标灰色关联度); disp(mean(lambda));逻辑说明均值化处理是灰色关联分析的标准去量纲方式比极差标准化更温和不会把最小值压成 0。分辨系数 rho 取 0.5 是论文里的选择它的作用是调整关联系数之间的差异显著性——rho 越小差异越大rho 越大差异越小。一般取 0.5 是折中方案如果排序结果区分度不够可以降到 0.3 试试。参数说明price.mat是 11 行 10 列的矩阵行对应月份列对应指标。如果你换一组数据只要保证第一列是因变量、后面是自变量行列数对应即可。repmat的作用是把均值向量复制成和原矩阵同尺寸避免用循环。2.3 结果解读与排序逻辑论文跑出来的关联度排序是居民消费者价格指数 0.9779 煤炭加工成本指数 0.9622 全国铁路煤炭发运量 0.9511 煤炭产量 0.9353 GDP 0.9328 煤炭进口量 0.8627 煤炭出口量 0.7559 秦皇岛平均最高气温 0.6777 全国煤炭企业库存 0.6559。最终归纳为四个主要因素经济水平、煤炭生产成本、煤炭产量、季节因素。这里有个容易翻车的地方关联度排序不等于因果排序。灰色关联只能说明两个序列的变化趋势同步不能证明谁导致谁。论文在结论里写“影响程度从大到小”是竞赛语境下的表述实际写报告时最好加一句“关联度反映的是变化趋势的协同性因果方向需结合经济学逻辑判断”。3. ARIMA 时间序列31 天、35 周、36 个月怎么分别建模3.1 三个时间尺度为什么用三个不同模型问题二要求预测未来 31 天、35 周、36 个月但原始数据是周度价格。论文的处理思路是周度数据用 ARIMA(1,1,18) 预测未来 35 周月度数据用 ARIMA(0,1,1)(0,0,0) 预测未来 36 个月日度数据因为一周内价格波动很小用“周均值 随机波动”的方式模拟波动边界通过对每周最大值和最小值分别建 ARIMA(1,1,18) 来预测。这里的关键判断是不同时间尺度的数据生成过程不一样强行用一个模型套三个尺度残差检验大概率过不了。周度数据有明显的短期自相关月度数据经过差分后趋于平稳日度数据在周内近似随机。分开建模是务实的选择。3.2 SPSS 专家建模器的参数设置与白噪声检验论文用 SPSS 的时间序列建模器完成 ARIMA 建模。操作路径是分析 → 时间序列预测 → 创建传统模型 → 条件选择“专家建模器”。专家建模器会自动在 ARIMA 和指数平滑之间选优评价标准是标准化 BIC。以周度预测为例选出的模型是 ARIMA(1,1,18)平稳 R 方 0.295R 方 0.992正态化 BIC 5.160。R 方接近 1 说明拟合很好但平稳 R 方只有 0.295说明模型对趋势的解释力有限主要靠差分和滞后项在拟合。这不是问题时间序列预测本来就不追求解释力追求的是残差白噪声。残差检验看两个东西ACF 和 PACF 图是否所有滞后阶数都落在置信区间内杨-博克斯 Q 统计量的 p 值是否大于 0.05。论文里月度模型的 Q(18) 20.568p 0.246大于 0.05不能拒绝“残差是白噪声”的原假设模型可接受。注意p 值大于 0.05 只是“不能拒绝原假设”不等于“证明残差是白噪声”。样本量小的时候Q 检验的功效很低最好结合 ACF/PACF 图一起看。3.3 日度价格的随机模拟从周最大值最小值到每天价格论文的日度预测思路值得单独说。它先对每周的最大值和最小值分别建 ARIMA(1,1,18)预测未来 35 周的最大值 a_i 和最小值 b_i然后取周均值 c_i (a_i b_i)/2。第 i 周第 j 天的价格用公式 d_ij (a_i - c_i) * rand c_i 生成rand 是 [-1,1] 的随机数。Matlab 实现如下% a 和 b 分别是预测的未来 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 % 在周均值附近生成随机波动 c [c, a(i) b(i) * (2*rand(1) - 1)]; end end逻辑说明2*rand(1)-1把随机数映射到 [-1,1]再乘以 b(i) 作为波动幅度。这里 b(i) 在论文里实际是“最大值与均值的差”不是最小值变量命名有点绕看代码时注意区分。这个方法的本质是用均匀分布模拟日度波动优点是简单、可复现缺点是波动边界是硬截断真实价格可能在边界外。参数说明如果你要改预测周数改循环上限即可如果要改波动分布把rand换成randn就是正态波动但要注意正态分布没有天然边界需要额外截断。4. 逐步回归多重共线性下怎么筛出有效变量4.1 为什么直接用 9 个指标做回归会翻车问题三要求建一个多元线性回归方程来描述煤炭价格变化。如果直接把问题一的 9 个指标全部塞进回归大概率会遇到多重共线性GDP 和居民消费者价格指数高度相关煤炭产量和铁路发运量高度相关煤炭进口量和出口量也可能相关。多重共线性会导致回归系数估计不稳定符号可能反直觉t 检验失效。论文选择向后逐步回归用 SPSS 完成。向后逐步回归的逻辑是先把所有变量放进去然后逐步剔除对模型贡献不显著p 值大于 0.05 或 0.1的变量直到所有剩余变量都显著。4.2 SPSS 逐步回归的操作与输出解读操作路径分析 → 回归 → 线性 → 方法选“向后”。因变量选煤炭价格自变量选 9 个指标。SPSS 会输出多个模型每个模型剔除一个变量看最后一个模型的系数和显著性。论文最终保留的变量是煤炭生产成本指数x8和秦皇岛日均最高气温x9回归方程是价格 422.072 1.548 * x8 0.696 * x9模型 2 的 R 0.948R 方 0.899调整后 R 方 0.874F 统计量对应 p 值小于 0.05。每个回归系数的 t 检验 p 值也都小于 0.05。系数解读煤炭生产成本指数每上升 1 个单位煤炭价格上升 1.548 元/吨秦皇岛日均最高气温每上升 1℃煤炭价格上升 0.696 元/吨。第二个结论有点反直觉——通常认为冬季取暖用煤多、价格高但模型显示夏季价格更高。论文的解释是夏季用电高峰带动电煤需求加上水电出力受季节影响火电补位推高煤价。这个解释在竞赛语境下能自圆其说但实际市场中季节性规律受库存、进口、政策等多因素调节不能单看气温。4.3 回归模型的灵敏度分析与边界论文对回归方程做了灵敏度分析核心结论是煤炭价格对生产成本最敏感对气温的敏感度次之。这里有个边界要注意逐步回归剔除变量时被剔除的变量不是“没有影响”而是“在当前样本下加入它不能显著提升模型拟合优度”。样本量只有 11 个月剔除变量很可能是样本不足导致的不代表这些因素在更长的时间尺度上不重要。论文自己在“模型不足与改进”里也承认了这一点向前逐步回归过度追求模型精确性反而带来对影响因素解释的片面性只用了近一年数据模型缺乏长期预测能力。这个自我批评是诚实的也是这份资料值得看的地方——它没有把模型吹成万能。5. 避坑与排查这份资料里没写但你会遇到的问题5.1 灰色关联度排序和回归系数符号不一致现象灰色关联分析里 GDP 排第 5但逐步回归把 GDP 剔除了煤炭产量关联度排第 4也被剔除了。原因灰色关联分析衡量的是序列曲线的形状相似性不控制变量之间的相互影响逐步回归是在控制其他变量的条件下看单个变量的边际贡献。两个方法的评价维度不同排序不一致是正常的。解决在论文里分别说明两个方法的用途——灰色关联用于初步筛选和排序逐步回归用于在共线性约束下找精简模型。不要强行让两个排序一致。5.2 ARIMA 模型残差检验 p 值刚好卡在 0.05 附近现象Q 统计量的 p 值在 0.04 到 0.06 之间拒绝和不拒绝原假设的边界上。原因样本量小的时候Q 检验的统计量本身波动大p 值不稳定。滞后阶数的选择也会影响结果滞后太少可能漏掉自相关滞后太多会损失自由度。解决不要只看 p 值。同时看 ACF 和 PACF 图如果所有滞后阶数都在置信区间内即使 p 值略小于 0.05也可以认为残差近似白噪声。如果图上有明显的超出置信区间的滞后项即使 p 值大于 0.05也要考虑改进模型。5.3 日度随机模拟的结果每次运行都不一样现象Matlab 代码里的rand没有设种子每次运行生成的 31 天价格都不同。原因rand默认以系统时间初始化随机数生成器每次调用序列不同。解决在代码开头加rng(42)固定随机种子保证结果可复现。如果论文要求给出确定的预测值可以跑多次取均值或者直接用周均值作为日度预测值在论文里说明“日度波动在周均值附近随机分布”。5.4 月度预测和周度预测的数据对不上现象论文里未来 12 个月的预测价格和未来 35 周的预测价格在时间重叠区间不一致。原因两个模型是独立建的ARIMA(1,1,18) 和 ARIMA(0,1,1)(0,0,0) 的参数不同预测路径自然不同。解决论文在“模型缺点”里承认了这个问题。实际处理时可以以月度模型为准做长期预测以周度模型为准做短期预测在重叠区间取加权平均或者统一用一个模型的不同时间聚合方式。竞赛里如果时间紧直接在论文里说明不一致的原因即可评委通常能接受。5.5 数据插值方法选择影响结论现象论文对缺失数据用了临近线性插值和算术平均不同插值方法可能改变灰色关联度的排序。原因插值方法会改变序列的均值和方差进而影响标准化后的关联系数。解决在论文里明确写出插值方法并做敏感性分析——换一种插值方法比如样条插值看排序是否稳定。如果排序变化大说明结论对数据预处理敏感需要谨慎表述。6. 从这份 PDF 里能复用的三个进阶技巧6.1 用 BIC 而不是 R 方来选 ARIMA 阶数R 方衡量的是拟合优度但时间序列模型如果阶数太高R 方会一直上升导致过拟合。BIC 同时考虑残差大小和参数个数参数越多惩罚越大。论文里周度模型的 BIC 是 5.160月度模型是 6.985都比较小说明模型复杂度可控。实际操作中在 SPSS 专家建模器里把“离群值处理”关掉让 BIC 自己选通常比手动试阶数更稳。6.2 把灰色关联度作为回归的预筛选如果自变量很多比如超过 15 个直接做逐步回归计算量大且容易过拟合。可以先用灰色关联分析筛掉关联度低于某个阈值的变量再做逐步回归。论文里 9 个指标不算多所以直接做了逐步回归。如果指标扩展到 20 个以上建议先筛后回归。6.3 残差白噪声检验的完整流程论文里的检验流程是先看 ACF/PACF 图再算 Q 统计量。我一般会再加一步把残差画成时序图看有没有明显的聚集或周期。如果残差图上有连续多个点在同侧说明模型没有捕捉到某个周期性因素。这一步不需要额外软件SPSS 的残差序列图就能看。6.4 政策建议怎么写才不空论文的政策建议部分给了三条加强宏观调控、建立煤炭成本价格指数、发展新能源。这三条都是从模型结论推出来的——因为回归显示生产成本和气温显著所以建议监控成本、应对季节性波动因为模型有局限性所以建议发展新能源降低长期依赖。写政策建议时每一条都要对应到模型里的一个具体发现不要写“加强监管”“促进发展”这种放之四海而皆准的话。6.5 论文结构的可复用模板这份 PDF 的结构是承诺书 → 问题重述 → 假设 → 符号说明 → 问题分析 → 四个问题的建模求解 → 模型评价 → 参考文献 → 附录代码。数学建模竞赛论文基本都可以套这个结构。区别在于中间四个问题的建模方法不同。如果你拿到的是预测类题目把灰色关联换成相关性分析、把 ARIMA 换成 LSTM 或灰色预测结构不用大改。提示附录代码不要直接复制论文里的论文里的代码是片段缺少数据加载和结果输出。我一般会补上save命令把中间结果存成 mat 文件方便复现和调试。从那以后我每次做时间序列建模都会先把数据按不同时间尺度拆开分别做平稳性检验和白噪声检验再决定用几个模型。这份 PDF 最大的价值不是它的结论而是它把“数据少、指标多、时间尺度混杂”这种典型竞赛场景下的完整处理流程摊开了给你看。希望帮到你。本文还有配套的精品资源点击获取