尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

数学建模_预测类模型

数学建模_预测类模型 一.灰色预测“数据极少只有4到10个” “单一变量” “只想看个大致趋势”。比如预测未来3年GDP、预测下周传染病累计确诊数。这就是灰色预测的战场比如你养了一只蚕宝宝想知道它第7天大概能长到多长。你翻出日记本上面只记了前4天的长度第1天2厘米第2天2.5厘米第3天3.2厘米第4天4.1厘米。就这4个数别的什么数据都没有。1. 先做体检级比检验你不敢直接拿这4个数去预测得先检查它们“配不配”做灰色预测。你拿起计算器算相邻两天的比值——第1天除以第2天2÷2.50.8第2天除以第3天2.5÷3.2≈0.78第3天除以第4天3.2÷4.1≈0.78。你又查了一下标准发现只要这些比值落在(0.135, 7.389)这个区间里就算合格。一看0.8、0.78、0.78全在里头体检通过2. 累加抹平一次累加生成原始数据波动太大你看不清趋势。于是你把它们一个一个累加起来——2不变2加2.5得4.54.5加3.2得7.77.7加4.1得11.8。累加后的序列变成了2、4.5、7.7、11.8画出来是一条光滑的上升曲线指数增长的趋势清清楚楚。3. 搭桥紧邻均值生成背景值你现在的数据是离散的第1天、第2天……但你要建的方程是连续的。你需要在中间搭一座桥——把累加后的相邻两个数取平均(24.5)÷23.25(4.57.7)÷26.1(7.711.8)÷29.75。背景值就算好了。4. 算核心参数最小二乘法求a和b你把背景值排成一个叫B的矩阵把原始数据从第2个开始排成一个叫Y的向量套进最小二乘法的公式里——算出来两个数a-0.12b3.8。a是负数说明序列在指数增长跟你观察到的一样5. 预测未来白化方程还原你代进时间响应函数算出累加预测值——第5天累加到19.2第6天23.7第7天28.5。但这些是累加后的数你得把它们“打回原形”——第7天的累加值减去第6天的累加值28.5-23.74.8厘米。这就是蚕宝宝第7天的预测长度。6. 再体检一次精度检验算C和P你算了两个指标——后验差比C0.28小于0.35优秀小误差概率P0.96大于0.95优秀。两个指标全是一级这个预测可信典型赛题预测未来3年GDP、短期传染病累计确诊数、某产品未来5期销量、区域用电量未来趋势。第一步级比检验设原始序列为判决标准所有 λ(k) 落在 (e−2,e2)≈(0.135,7.389)内即可建模。如果有超出的把原始数据整体加一个常数 C直到通过。【画表】论文中画“级比检验结果表”包含三列k 值、λ(k) 值、是否在区间内。最后一行写“所有级比均在可容覆盖内序列可建模”。第二步一次累加生成【画图】画“累加前后对比折线图”。原始折线弯弯绕绕和累加后折线光滑上升画在一起标注“累加生成有效提取了指数增长趋势”。第3步紧邻均值生成背景值第4步最小二乘法求发展系数 a 和灰作用量 b【画表】画“模型参数估计表”列出 aa 值和 bb 值并附上“a−0.120a−0.120表明序列呈指数增长趋势”第5步白化方程求解并还原【画表】画“模型预测值表”包含三列时间k、累加预测值 x^(1)、原始预测值 x^(0)。第6步精度检验【画表】画“模型精度检验综合表”【画图】画“拟合与预测曲线图”。横轴是时间纵轴是数值。画三条线历史真实值黑色实线、历史拟合值红色虚线、未来预测值蓝色实线延申到未来。二.时间序列数据量较大至少50个点以上单变量有趋势或季节效应如月度销量、日温度。比如你开了一家冰淇淋店手里握着过去3年、每天打烊时的销售记录——1095个数。你发现每年6到8月销量猛冲、冬天猛砸季节效应而且整体上一年比一年卖得多一点点趋势效应。你想预测明年7月15日的销量。1. 看它稳不稳平稳性检验ADF检验你跑了一个叫ADF的检验屏幕上蹦出来p0.68——远大于0.05说明数据不稳定有趋势在拽着它走。你按了一下差分键——今天的数减去昨天的数——把差分后的数据再跑一遍ADFp变成了0.02小于0.05了数据平稳了。你记下了d1差分一次就够了。2. 定阶看ACF和PACF图或偷懒用auto_arima你本来想盯着自相关图ACF和偏自相关图PACF慢慢看——PACF截尾定pACF截尾定q。但转念一想竞赛时间宝贵你掏出一个偷懒绝招——auto_arima库把数据丢进去让它自动遍历所有(p,d,q)组合按AIC最小的标准帮你挑。电脑蹦出来p2q1。所以你的模型是ARIMA(2,1,1)。3. 正式拟合模型构建你把(p2,d1,q1)填进ARIMA模型跑了一下——AR系数和MA系数的P值都是0.000全部显著AIC2345BIC2378。模型建好了。4. 检查残渣残差诊断Ljung-Box检验你怕模型没把规律学干净把拟合后的残差拿出来跑Ljung-Box检验——p0.78远大于0.05说明残渣里什么都没有了全是白噪音。体检全部合格5. 正式预测你用model.forecast(steps30)往前推了30天算出了未来30天的预测值还带上了95%的置信区间。画一张图——历史数据用黑色实线未来预测用蓝色实线往外延伸上下包一层浅蓝色阴影带置信区间。这就是你的预测结果典型赛题月度用电量预测、航空公司月度旅客人数、某商品月度销售额、每日温度预测。第一步平稳性检验ADF检验用 Python 的statsmodels跑 ADF 检验看 p-value。p ≤ 0.05→ 序列平稳直接进入第2步。p 0.05→ 序列不平稳做差分data_diff data.diff().dropna()重复检验。差分的次数记为d。【画图】画“原始序列图”和“差分后序列图”左右并排。差分后序列应围绕0值上下波动标注“差分后序列已消除趋势基本平稳”。第二步定阶确定 p 和 q方法一看图法画 ACF 图和 PACF 图。PACF 截尾 → 定pACF 截尾 → 定q方法二竞赛推荐用pmdarima的auto_arima。model auto_arima(data, dd, seasonalFalse, stepwiseTrue, traceTrue)自动遍历所有 (p,d,q) 组合按 AIC/BIC 最小挑最优参数。【画图】画“ACF 图”和“PACF 图”两个并排的柱状条形图带置信区间阴影带。第三步模型构建与拟合from statsmodels.tsa.arima.model import ARIMA model ARIMA(data, order(p, d, q)).fit()【画表】输出“模型拟合摘要表”model.summary()。重点看各系数的 P 值必须 0.05 显著和 AIC/BIC 值。第四步残差诊断Ljung-Box检验对残差做 Ljung-Box 检验p 0.05→ 残差是白噪声模型合格p ≤ 0.05 → 残差还有自相关返回第2步重新定阶。【画图】三张都画残差 QQ 图点落在45°直线上 → 正态。残差自相关图条形不超阴影带 → 无自相关。残差散点图在0上下随机波动 → 无趋势。第五步预测forecast_result model.forecast(stepsH)【画图】画“预测结果总览图”。必须包含三个元素历史真实数据黑色实线未来预测值蓝色实线延申95%置信区间浅蓝色阴影带【画表】画“未来 H 期预测值表”包含三列预测时间点、预测值、95%置信区间下限/上限。注意如果数据有固定周期月度 s12季度 s4日度 s7用SARIMAauto_arima(data, ms, seasonalTrue)一步完成这个做完直接跳到第四步。三.回归分析数据是表格形式有多个输入特征X和一个输出目标Y。不强调时间顺序强调“X影响Y”。你手里有一张Excel表100块试验田的数据——施肥量(X1)、浇水量(X2)、日照时数(X3)、最终产量(Y)。老板问你“每多施一斤肥到底能多打多少粮”1. 画图看关系数据探索你画了一张散点图矩阵——施肥量和产量明显往右上走但散点越来越散像个喇叭口日照时数和产量也相关但没那么强。你又画了一张相关系数热力图——施肥量和产量的相关系数是0.73红得发紫。2. 拉一条直线建立回归方程你写了个公式产量 β0 β1×施肥量 β2×浇水量 β3×日照时数。跑完多元线性回归电脑吐出来一张回归系数表——施肥量β15.2P0.000显著浇水量β21.3P0.32不显著日照时数β33.8P0.001显著。你在论文里写“其他条件不变时每多施1公斤肥产量平均增加5.2公斤。”3. 整体评价拟合优度你看了R²0.82调整R²0.81——模型解释了81%的产量波动不错。4. 给模型做体检四大假设诊断你画了残差vs拟合值的散点图——点虽然分布在0上下但越往右越往外扩像个喇叭口异方差。你又画了QQ图——点基本贴在45°线上正态性OK。Durbin-Watson1.98独立性OK。VIF都小于10无多重共线性。5. 补救措施Box-Cox变换喇叭口得解决。你对产量取了对数ln(Y)重新跑回归——喇叭口消失了残差图干干净净。6. 变量筛选Lasso回归你把数据丢进Lasso回归——它自动把“浇水量”的系数压成了0从模型里踢出去了。最后只剩施肥量和日照时数调整R²还是0.80。7. 最终验证你画了一张真实值vs预测值散点图——点密密麻麻贴在45°对角线两侧预测很准。又画了一张特征重要性条形图——施肥量的条最高日照时数次之浇水量的条被压成了0。典型赛题房价影响因素分析、学生成绩影响因素分析、用户消费金额影响因素分析。第一步数据探索【画什么图】两张都画散点图矩阵Pairplot所有变量两两之间的散点图。相关系数热力图颜色越红 → 正相关越强颜色越蓝 → 负相关越强。第二步建立回归方程公式多元线性回归【画表】画“回归系数估计表”论文核心表包含四列变量名回归系数 Coef“每变化1单位Y平均变化多少”标准误 Std.ErrP值P 0.05代表显著标星号 *第3步拟合优度第4步模型体检四大假设诊断第5步多重共线性排查VIF判决标准VIF 10表示严重多重共线性。处理方法三选一删掉 VIF 最大的变量。主成分回归。改用岭回归Ridge或 Lasso 回归。第6步变量筛选Lasso回归Lasso公式加 L1 惩罚项效果不重要变量的系数直接被压成0实现自动变量选择。【画图】画“特征重要性条形图”横轴变量名纵轴标准化回归系数绝对值。第7步最终验证【画图】两张终极验证图“真实值 vs 预测值 散点图”点越靠近45°对角线越准。“残差 vs 拟合值 改进图”证明补救措施有效喇叭口消失。四.机器学习 / LSTM数据量大成千上万条非线性强或者传统模型死活拟合不好。你追一部80集的悬疑剧。凶手在第1集留下了一个细节——左撇子。中间40多集全是干扰信息。第80集大结局要抓凶手时必须跨过79集、记住第1集的线索长期依赖。传统模型记不了那么远你需要一个“带记忆的智能笔记本”——LSTM。1. 开窗滑动窗口变换你设定窗口长度10集——用前10集预测第11集。你把第1-10集作为X、第11集作为Y第2-11集作为X、第12集作为Y……窗口一格格滑下去80集的剧本生成了70个样本。2. 加料特征工程光有原始特征不够——你又加了集数(1-80)、是否周末(0/1)、前3集滚动均值、前5集滚动标准差。特征从10个变成14个。3. 归一化标准化你把所有特征缩放到[0,1]区间。特别注意只基于训练集算min和max再转换验证集和测试集——绝对不能把测试集的信息混进来。4. 搭网络搭建LSTM结构你把X变形为(样本数, 时间步10, 特征数14)一层一层搭——第一层LSTM(64, return_sequencesTrue)加Dropout(0.2)第二层LSTM(32, return_sequencesFalse)最后Dense(1)输出。5. 防过拟合早停法学习率衰减你开了早停法——验证集Loss连续10个Epoch不降就自动停。跑到第45个Epoch验证集Loss不降了训练自动停止——没有过拟合6. 预测与评估你在测试集上跑预测——RMSE0.21MAE0.15MAPE7.85%。你又拿XGBoost跑了一遍RMSE0.32——LSTM赢了有长期依赖的数据LSTM就是王者。7. 双剑合璧模型集成你把LSTM和XGBoost的预测值加权平均——RMSE从0.21降到了0.18。集成就是稳典型赛题股票价格预测、交通流量预测、电力负荷预测、大规模销量预测。第1步滑动窗口变换设定窗口长度Look-back用过去 N 步预测未来 1 步。X, y [], [] for i in range(len(data) - look_back): X.append(data[i:ilook_back]) y.append(data[ilook_back]) X np.array(X) # 形状: (样本数, look_back) y np.array(y)【画表】画“滑动窗口构造示例表”展示前3行构造出来的 X 和 Y 长什么样。第2步特征工程在原始滞后值之外人工添加三类特征时间特征月份(1-12)、星期几(1-7)、是否节假日(0/1)、季度(1-4)。统计特征滚动均值、滚动标准差、滚动最大值、滚动最小值。趋势特征过去几天的线性拟合斜率。【画图】训练后画“特征重要性条形图”XGBoost/LightGBM 自带feature_importances_。第3步数据标准化LSTM必须做Min-Max 标准化只基于训练集算 min 和 max再用训练集的 min/max 去转换验证集和测试集第四步二选一①如果数据是表格像成绩单—— 上 XGBoost / LightGBMimport xgboost as xgb model xgb.XGBRegressor(n_estimators100, learning_rate0.1) model.fit(X_train, y_train)必须使用时序交叉验证TimeSeriesSplit就是拿 2010-2015 年训练2016-2017 年验证。绝对不准随机打乱如果你把 2017 年的数据混进训练集模型等于“偷看了未来答案”成绩再高也是假的②如果数据是连续剧有顺序依赖—— 上 LSTM先变形把 X 变成 (样本数, 时间步, 特征数) 的 3 维张量。X_train X_train.reshape((X_train.shape[0], X_train.shape[1], n_features))搭积木网络结构第一层LSTM(64, return_sequencesTrue)—— 64 个笔记本随机扔掉一些防止死记硬背Dropout(0.2)第二层LSTM(32)—— 浓缩成 32 个笔记本输出层Dense(1)—— 输出一个预测数字model.add(LSTM(64, return_sequencesTrue, input_shape(look_back, n_features))) model.add(Dropout(0.2)) model.add(LSTM(32)) model.add(Dense(1)) model.compile(optimizeradam, lossmse)第五步防过拟合早停法EarlyStopping验证集Loss连续10个Epoch不降就停。学习率衰减ReduceLROnPlateau验证集Loss不动学习率自动除以10。Dropout随机丢弃神经元。第六步模型集成把 XGBoost 和 LSTM 的预测值加权平均如 0.5×XGB 0.5×LSTM。【画表】画“单一模型 vs 集成模型性能对比表”列出 RMSE、MAE、MAPE。第7步评估指标与画图输出三个必报指标RMSEMAEMAPE【画图】三张都画Loss下降曲线训练集Loss和验证集Loss分开展示。预测对比折线图最重要真实值黑色实线vs 预测值红色虚线重合度越高越牛。残差直方图应近似以0为中心的正态分布。
返回列表