时间序列挖掘及建模
一、时间序列
首先,什么是时间序列?简单说,就是按时间顺序记录的一组随机变量。比如我们连续 30 天记录的每日气温,按时间排好序,就是一条时间序列。我们挖掘它的目的,就是从历史数据中找规律,用来预测未来 —— 比如根据过去的销售数据预测下个月的销量,根据历史交通流量规划明天的出行路线。
那时间序列有哪些 “性格特点” 呢?主要有三个:
- 趋势性:就是长期来看的上升或下降趋势。比如近 10 年我国 GDP 持续增长,这就是明显的趋势性。
- 季节性:在一定周期内重复出现的波动。比如每年春节前后,航空机票销量会大幅上升,这就是季节性。
- 随机性:突然的、无规律的波动。比如一场突发暴雨导致某一天的打车量激增,这就是随机性。
根据这些特点,时间序列可以分为三大类:
- 纯随机序列:完全无规律,变量之间没任何关系,比如掷骰子的结果序列,这种序列没挖掘价值。
- 平稳非白噪声序列:均值和方差是常数,没有趋势,但有一定相关性(不是纯随机),适合用 AR、MA 等模型建模。
- 非平稳序列:均值或方差会变,有明显趋势或季节性,比如股票价格、月度销售额,这类序列需要先处理再建模。
二、建模前的 “准备工作”:时间序列预处理
拿到一条时间序列,不能直接建模,得先做预处理,核心是判断它是否平稳 —— 因为很多模型(比如 ARMA)只适用于平稳序列。怎么判断呢?主要有两种方法:
第一种是时序图检验。平稳序列的时序图应该围绕一个常数波动,均值和方差基本不变;如果图中明显有上升 / 下降趋势,或者波动越来越大,那就是非平稳的。比如 “1950-1998 年北京城乡居民定期储蓄占比” 的时序图,整体呈上升趋势,显然是非平稳的。
第二种是自相关图检验。自相关系数衡量序列自身在不同延迟期的相关性。平稳序列的自相关系数会快速衰减到 0 附近;而非平稳序列的自相关系数衰减很慢,甚至长期徘徊在较高水平。还是刚才的储蓄占比数据,它的自相关图衰减很慢,进一步印证了非平稳性。
三、平稳非白噪声序列:用 ARMA 模型 “捕捉规律”
如果预处理后,序列是平稳非白噪声的(有规律但平稳),我们就可以用 ARMA 模型来建模。它其实是 AR 模型和 MA 模型的组合,我们先简单了解下这两个 “基础款”:
- AR (p) 模型:全称自回归模型,核心是 “用过去 p 个时刻的值预测当前值”。它的偏自相关系数(PACF)是 p 阶截尾的(超过 p 阶后突然变 0)。
- MA (q) 模型:移动平均模型,核心是 “用过去 q 个时刻的随机误差预测当前值”。它的自相关系数(ACF)是 q 阶截尾的(超过 q 阶后突然变 0)。
而 ARMA (p,q) 模型,就是同时考虑自回归和移动平均,p 是 AR 的阶数,q 是 MA 的阶数。
那怎么建模呢?步骤很清晰:
- 先算序列的 ACF 和 PACF,根据截尾 / 拖尾特点确定 p 和 q(比如 AR 模型看 PACF 截尾,MA 看 ACF 截尾);
- 估计模型的未知参数;
- 检验模型是否合格:关键看残差是不是纯随机序列(白噪声)。如果残差还有规律,说明模型没建好,得重新调 p 和 q;
- 模型合格后,就可以用来预测未来趋势了。
检验残差的方法有两种:一是正态性检验,p 值 > 0.05 说明残差非正态,可能有信息残留;二是 DW 检验,结果靠近 2 说明残差无自相关,靠近 0 或 4 则有问题。
四、非平稳序列:ARIMA 模型 “来帮忙”
现实中,我们遇到的大多是非平稳序列(有趋势或季节性),这时候 ARMA 就不够用了,得请出 ARIMA 模型。它的核心思路是:先通过 “差分” 把非平稳序列变成平稳序列,再用 ARMA 建模。
ARIMA (p,d,q) 中的 “d” 就是差分阶数 —— 比如 d=1,就是对序列做 1 阶差分(用当前值减前一个值),直到序列平稳。当 d=0 时,ARIMA 就退化成了 ARMA,所以 ARMA 其实是 ARIMA 的特殊情况。
除了 ARIMA,非平稳序列还有另一种处理思路:确定性因素分解,就是把序列拆成长期趋势、季节变动、循环波动和随机波动四个部分,分别建模再合成。不过 ARIMA 因为灵活性高,应用更广泛。