跳到主要内容

预测与预报

一、直观理解:用历史信息外推尚未观测的结果​

预测与预报要回答的问题很直接:给定已经观测到的历史序列或特征,未来某个时刻(或某个新样本)的连续结果大概是多少,误差大约有多大。

可以把它想成“带误差条的外推”。例如:

  • 已知过去 36 个月的用电量,估计下个月用电量;
  • 已知一组社会经济指标,估计某地区 GDP;
  • 已知若干传感器读数,估计设备剩余寿命。

建模竞赛里,预测题的核心不是把训练集拟合得“漂亮”,而是在真实未见数据上仍然可用。时间序列题尤其要按时间顺序做训练/测试划分;截面回归题则要做交叉验证或独立测试集评估。只报告训练集 R2R^2 几乎没有说服力。

本门类覆盖的方法,大致沿三条主线展开:

  1. 时间序列外推:指数平滑、ARMA/ARIMA/SARIMA、GARCH、VAR、Prophet;
  2. 结构回归:多元线性回归、非线性回归、偏最小二乘;
  3. 小样本与组合/黑箱:灰色预测、马尔可夫、灰色–马尔可夫、树模型与 SVR,以及 SHAP 解释。

二、这一门类解决什么问题​

问题类型典型输出优先方法线索
单变量水平/趋势外推未来 hh 步点预测与区间指数平滑、ARIMA
有明显季节周期含季节的预测路径SARIMA、三次指数平滑、Prophet
多变量互相影响系统联合预测、脉冲响应VAR
波动率/风险条件方差路径GARCH
特征–响应关系新样本的 yy回归、PLS、树模型、SVR
样本极少且近似指数增长短序列趋势GM(1,1) 及其改进
状态转移/区间修正状态概率或残差修正马尔可夫、灰色–马尔可夫
模型解释特征贡献系数、变量重要性、SHAP

选择方法前,先把下面四件事说清楚:

  1. 预测对象是水平值、增量、增长率,还是波动率;
  2. 信息集合只有自身历史,还是有外生变量/多变量;
  3. 样本长度与频率(年、月、日、截面);
  4. 评价方式必须能在训练期之外复现。

三、方法选择的决策逻辑​

不要一上来就上复杂模型。建议按“基线 → 结构 → 复杂化”推进:

有明确时间顺序?
├─ 是:先画时序图,检查趋势/季节/突变
│ ├─ 近似水平、无季节 → 一次指数平滑 / ARMA
│ ├─ 有趋势、无季节 → 二次指数平滑 / ARIMA
│ ├─ 有季节 → 三次指数平滑 / SARIMA / Prophet
│ ├─ 多变量联动 → VAR
│ └─ 关心波动聚集 → 均值模型 + GARCH
└─ 否:截面或面板特征预测
├─ 关系近似线性、变量不太多 → 多元线性回归
├─ 机理曲线明确 → 非线性回归
├─ 变量多且共线 → PLS / 正则化回归
├─ 非线性、交互多,样本中等 → 随机森林(优先)
└─ 样本极大的纯数据题 → XGBoost / LightGBM

小样本(例如 n<15∼20n<15\sim20)且呈现较光滑的单调/近似指数趋势时,可考虑 GM(1,1);若灰色残差仍有系统性偏差,再考虑灰色–马尔可夫修正。状态本身是离散等级(如水质等级、景气区间)时,马尔可夫链更自然。

四、统一的建模工作流​

无论用哪一种具体模型,竞赛论文里都建议按同一套流程组织:

  1. 探索:时序图、ACF/PACF、散点图、相关矩阵、缺失与异常;
  2. 预处理:对数变换、差分、季节差分、标准化(注意只在训练集上估计变换参数);
  3. 定阶/选型:信息准则(AIC/BIC)、交叉验证、残差白噪声检验;
  4. 估计:MATLAB 中时间序列多用 arima + estimate + forecast;回归用 fitlm / fitnlm;树模型用 fitrensemble 等;
  5. 诊断:残差 ACF、Ljung-Box、异方差、正态性、杠杆点;
  6. 评价:在训练期外计算 RMSE、MAE、MAPE(注意分母接近 0 时 MAPE 失效),必要时报告预测区间覆盖率;
  7. 对比:至少保留一个朴素基线(如朴素预测 y^t+1=yt\hat y_{t+1}=y_t、季节朴素、历史均值、简单线性趋势);
  8. 解释与局限:系数/重要性是否符合机理,结构突变后是否仍可信。

时间序列划分必须保持因果顺序:

Ttrain={1,…,T0},Ttest={T0+1,…,T}\mathcal{T}_{\text{train}}=\{1,\ldots,T_0\},\quad \mathcal{T}_{\text{test}}=\{T_0+1,\ldots,T\}

禁止把未来信息泄漏进特征(例如用全样本标准化后再切分,或把 t+1t+1 的外生变量当作已知却未说明获取方式)。

五、评价指标:不要只看 R2R^2​

设测试集真实值为 yty_t,预测为 y^t\hat y_t,常用:

RMSE=1m∑t∈Ttest(yt−y^t)2,MAE=1m∑t∈Ttest∣yt−y^t∣\mathrm{RMSE}=\sqrt{\frac{1}{m}\sum_{t\in\mathcal{T}_{\text{test}}}(y_t-\hat y_t)^2},\quad \mathrm{MAE}=\frac{1}{m}\sum_{t\in\mathcal{T}_{\text{test}}}|y_t-\hat y_t| MAPE=100%m∑t∈Ttest∣yt−y^tyt∣(yt≠0)\mathrm{MAPE}=\frac{100\%}{m}\sum_{t\in\mathcal{T}_{\text{test}}}\left|\frac{y_t-\hat y_t}{y_t}\right| \quad (y_t\neq 0)

补充原则:

  • R2R^2 高不等于能预测:尤其是含趋势的时间序列,连“用时间做回归”也能得到很高的拟合 R2R^2;
  • 训练误差只用于诊断过拟合,最终排名应看测试误差或滚动预测误差;
  • 区间预测要报告覆盖率与平均区间宽度,而不是只给点预测;
  • 不同量纲序列比较时,优先用相对误差或标准化 RMSE。

六、MATLAB 工具箱速查​

任务常用函数
平稳性/单位根adftest, kpsstest
ACF/PACFautocorr, parcorr
ARIMA/SARIMAarima, estimate, infer, forecast, simulate
自动选阶(若可用)arima 手动网格 + AIC/BIC;或 Econometrics 相关工具
GARCHgarch, egarch, gjrgarch, estimate, forecast
VARvarm, estimate, forecast, armairf
指数平滑smoothdata, 或自写 Holt/Holt-Winters;ets(若版本支持)
线性/非线性回归fitlm, fitnlm, predict, anova
PLSplsregress
随机森林/提升fitrensemble(Bag/LSBoost)
SVRfitrsvm
高斯过程等fitrgp, fitrkernel

灰色预测、马尔可夫、Prophet 风格分解往往需要手写或外部工具;本门类对应页面会给出可运行的 MATLAB 实现思路。

七、常见误区​

  1. 用随机打乱的方式划分时间序列,造成未来泄漏;
  2. 差分/季节调整用了全样本信息,再回头做“预测”;
  3. 只比较训练集 R2R^2,不报告测试集误差与残差检验;
  4. 忽视平稳性,直接对明显带趋势的序列拟合 ARMA;
  5. 过度追求复杂模型,却打不过季节朴素或简单指数平滑;
  6. 把相关当因果,在政策建议里夸大回归系数含义;
  7. 小样本上堆机器学习,方差巨大且不可复现。

八、小结与阅读顺序​

预测的本质是:

在明确的信息集与损失函数下,给出可检验的外推,并诚实报告不确定性。

推荐阅读顺序:

  1. 回归预测(多元线性 → 非线性 → PLS)与指数平滑,建立基线思维;
  2. 单变量时间序列(AR → MA → ARMA → ARIMA → SARIMA → GARCH);
  3. 多变量 VAR、Prophet 分解;
  4. 灰色预测、马尔可夫及其组合;
  5. 机器学习预测(随机森林优先)与 SHAP 解释。

进入具体方法页后,按“直观理解 → 适用边界 → 原理 → MATLAB → 结果解释 → 误区”阅读,并亲手跑通示例代码。最终写进论文的,应是训练期外误差 + 诊断图 + 与基线的对比,而不是单一的拟合优度数字。