平稳性(Stationarity)指的是一个时间序列的统计特征不会随着时间平移而改变:无论是今天看、下个月看,还是三年后看,它的均值、方差以及“它和自己的相关性”都保持不变。
打个比方
把序列想象成一根在水平地面上抖动的绳子,比如恒温房间里的温度读数、稳定电路上的电压噪声。它的抖动幅度、抖动节奏都有规律,因此你可以用“过去怎么抖”去推测“接下来会怎么抖”。
非平稳的序列,则是把这根绳子挂在一部正在上升的电梯上:抖动本身可能没变,但整体高度在变。这时,你没法用“过去抖了多少”去猜“下一分钟它会出现在哪一层”,因为你手里数据的均值和方差本身就在漂移。
具体一点:一家电商的日订单量,平时几百单,大促期间几千单,全年还在增长。如果你把这个序列直接喂给 ARIMA(AI 词典:Autoregressive">Autoregressive Integrated Moving Average,自回归积分滑动平均)这类模型,它拟合出的“均值”其实是那段历史的平均水位,对未来没有指导意义。这种时候,模型并不是预测得不准;相反,它赖以成立的假设从一开始就不成立。
三条要求和两个容易混淆的概念
工程上常用的是弱平稳(wide-sense stationarity),它只要求三件事:均值是常数;方差是常数,即波动不会随时间越来越大;任意两个时刻的协方差只跟时间间隔有关,跟“具体是哪一天”无关。更严格的严平稳(strict stationarity)要求整个联合分布不随时间平移而改变,实践中很少真的去验证。
| 形态 | 均值 | 方差 | 常见处理 |
|---|---|---|---|
| 平稳 | 恒定 | 恒定 | 可以直接建模 |
| 趋势(trend) | 随时间变 | 通常恒定 | 差分、拟合趋势项 |
| 季节性(seasonality) | 周期性起伏 | 通常恒定 | 季节差分 |
| 异方差(heteroskedasticity) | 可能恒定 | 随时间变 | 对数或 Box-Cox 变换 |
几个常见的混淆点:白噪声(white noise)是平稳的特例,它额外要求没有自相关;平稳不等于“没有趋势”,去完趋势后可能还剩季节性和方差漂移;平稳也不等于“可预测”,它只保证规律不随时间改变,不保证这个规律有信息量。
把非平稳序列变平稳的常用手段是差分(differencing),差几次就是 ARIMA 里那个 I。判断要差几次,可以看图,也可以用单位根检验(unit root test,常被提到的是 ADF,Augmented Dickey-Fuller)。注意 ADF 的原假设是“存在单位根、不平稳”,p 值小才是拒绝原假设,很多人第一次用时会记反。
对实际工作的意义
只要涉及时间维度的建模,平稳性都是第一个要确认的前提。做回归,两条各自向上爬的曲线能轻松拟合出很高的相关性,这是典型的伪回归(spurious regression);做深度学习,用全量数据的均值方差做归一化,等于把未来的信息泄漏进了训练集,通常的做法是改用滚动窗口统计量;做线上监控,输入分布的缓慢漂移会让模型指标悄悄劣化,而监控这类漂移本质上也是在看平稳性。
最省事的第一步永远是:画图,并叠加滚动均值和滚动标准差。如果这两条线明显在移动或张开,就先别急着调模型。
