4、时间序列基础:时间序列的构成(趋势、季节、周期、随机)、平稳性与差分
活动需求预测中,我们面对的数据绝大多数是按时间顺序记录的观测值序列,例如每日活动报名人数、每周场馆使用率、每月会员活跃度等。这类数据统称为时间序列(Time Series)。与普通横截面数据不同,时间序列的相邻观测值之间存在先后依赖关系,这种顺序性决定了我们不能简单套用均值或回归模型,而必须先理解其内部结构。本章将系统拆解时间序列的四大构成要素,并重点讲解平稳性这一核心概念及差分处理方法,为后续使用移动平均、指数平滑、ARIMA 等预测模型打下坚实基础。
上图展示了时间序列分析的整体框架:原始序列可分解为趋势、季节、周期和随机四个部分,通过加法模型组合后,我们需要判断序列是否平稳,若不平稳则通过差分等手段进行处理,最终才能进入模型构建阶段。下面逐一展开。
4.1 时间序列的四大构成要素
任何时间序列都可以视为四种成分的叠加或耦合。理解这些成分,是选择预测模型的第一步。
4.1.1 趋势(Trend)
趋势是序列在较长时期内呈现的持续上升、下降或持平的方向性变化。它反映了活动需求的长期演变规律,例如某健身工作室的月均团课报名人数在过去三年中逐年递增,这背后可能是品牌知名度提升、周边社区人口增长或健康意识增强等因素。趋势可以是线性的(如每年增加 500 人次),也可以是非线性的(如指数增长或对数增长)。识别趋势的常用方法包括移动平均平滑、时间散点图观察以及线性回归拟合。
4.1.2 季节性(Seasonality)
季节性是指序列在固定时间间隔内重复出现的规律性波动,周期长度固定且已知。对于活动运营而言,季节性非常常见:工作日晚间与周末的客流差异、寒暑假与开学季的培训需求变化、年末与年初的预算消耗节奏等。季节性的关键特征是周期固定(如日、周、月、季度),且波动幅度通常相对稳定。例如,某博物馆的参观人数在每周六达到峰值、每周一为低谷,这就是以“周”为单位的季节性。
4.1.3 周期性(Cyclicality)
周期性与季节性容易混淆,但两者有本质区别:周期性波动的周期长度不固定,通常与经济或行业大环境相关,持续时间较长(如 2-5 年)。例如,会展行业的兴衰周期受宏观经济景气度影响,繁荣期可能持续 2 年,衰退期可能持续 1.5 年,没有固定频率。在活动需求预测中,周期性往往难以精确建模,通常需要结合外部经济指标或行业指数进行辅助判断。
4.1.4 随机性(Irregular / Random)
随机性(又称不规则波动)是序列中无法被趋势、季节和周期解释的剩余部分,由突发事件、天气变化、政策调整、个体行为差异等偶然因素引起。随机成分没有规律可循,在预测模型中通常被视为“噪声”。例如,一场突如其来的暴雨可能导致某户外音乐节当天到场人数骤降 30%,这种波动无法提前通过历史数据预测。
| 构成要素 | 周期特征 | 可预测性 | 活动需求示例 | 处理方式 |
|---|---|---|---|---|
| 趋势 T | 无固定周期 | 高(长期) | 会员基数逐年增长 | 回归拟合、差分 |
| 季节 S | 固定周期(日/周/月/季) | 高(短期) | 周末客流高于工作日 | 季节指数、虚拟变量 |
| 周期 C | 不固定(2-5年) | 中 | 行业景气循环 | 外部指标辅助 |
| 随机 R | 无规律 | 低 | 天气、突发事件 | 作为误差项处理 |
4.2 平稳性:时间序列建模的前提
平稳性(Stationarity)是时间序列分析中最核心的概念之一。一个严格平稳的序列要求其统计性质(均值、方差、自协方差)不随时间变化。但在实际应用中,我们通常使用弱平稳(宽平稳)的定义:序列的均值恒定、方差恒定,且任意两个时点之间的协方差只依赖于时间间隔而非具体时间点。
4.2.1 为什么需要平稳性
绝大多数时间序列预测模型(如 ARIMA、指数平滑的某些形式)都建立在平稳性假设之上。原因在于:如果序列的均值或方差随时间漂移,模型无法从历史数据中提取稳定的规律,预测结果将不可靠。例如,若某活动报名人数从年初的日均 100 人增长到年末的日均 300 人,直接用历史均值预测下个月就会产生系统性偏差。平稳性保证了模型可以“以史为鉴”,因为过去的数据分布与未来的数据分布是一致的。
4.2.2 平稳性的判断方法
判断序列是否平稳,通常采用以下三种方式:
- 时序图观察法:绘制序列折线图,观察均值是否围绕某一常数上下波动、波动幅度是否大致恒定。若序列呈现明显上升/下降趋势或波动幅度随时间扩大/缩小,则非平稳。
- 自相关图(ACF)检验:平稳序列的自相关系数通常随滞后阶数增加而快速衰减至零附近;非平稳序列的自相关系数衰减缓慢,且长期保持较高水平。
- 单位根检验(ADF 检验):这是最常用的统计检验方法。ADF 检验的原假设为“序列存在单位根(非平稳)”,若检验统计量对应的 p 值小于显著性水平(如 0.05),则拒绝原假设,认为序列平稳。
statsmodels.tsa.stattools.adfuller() 进行 ADF 检验。当 p 值 > 0.05 时,序列非平稳,需要进一步处理。
4.3 差分:让非平稳序列“变平稳”的核心工具
差分(Differencing)是消除趋势和部分季节性最直接有效的方法。一阶差分计算相邻两个观测值之差:
Y'(t) = Y(t) - Y(t-1)
差分后的序列 Y'(t) 表示当前值相对于上一期的变化量。如果原始序列存在线性趋势,一阶差分后趋势基本被消除;若存在二次趋势,则可能需要二阶差分。对于季节性序列,可以使用季节差分:Y'(t) = Y(t) - Y(t-s),其中 s 为季节周期长度(如周数据 s=7,月数据 s=12)。
4.3.1 差分阶数的选择
差分阶数并非越多越好。过度差分会导致信息损失和方差膨胀。一般原则是:能用一阶差分解决就不用二阶,差分后需再次进行 ADF 检验确认平稳性。在实际操作中,可通过观察差分后序列的自相关图:若 ACF 在滞后 1 阶后迅速截尾,说明差分阶数合适;若 ACF 仍呈现缓慢衰减,则可能需要增加差分阶数。
4.3.2 差分与方差稳定
差分主要解决均值非平稳问题。若序列的方差也随时间变化(如波动幅度随均值增大而增大),可先进行对数变换或 Box-Cox 变换,再做差分。例如,某电商大促期间订单量波动远大于平日,直接差分后残差方差仍不均匀,此时先取对数再差分效果更佳。
4.4 案例拆解:某连锁咖啡品牌门店周度销售额预测
为帮助理解上述概念,我们以一个实际场景进行完整演练。
背景与目标:某连锁咖啡品牌在华东地区拥有 120 家门店,运营团队希望预测未来 4 周的周度总销售额,以便安排原料采购和兼职排班。历史数据为过去 104 周(两年)的周度销售额(单位:万元)。
初始观察:绘制时序图后发现:销售额整体呈缓慢上升趋势(从平均 850 万元/周增长到 950 万元/周);存在明显的以 52 周为周期的季节性(冬季热饮旺季销售额高于夏季);个别周(如春节前后)出现异常波动。
分析过程:
- 分解序列:使用 STL 分解(Seasonal-Trend decomposition using Loess)将序列拆分为趋势、季节和残差三部分。趋势项显示年均增长约 5%,季节项显示冬季(第 45-52 周)销售额比年均值高 8%-12%,夏季(第 20-30 周)低 6%-10%。
- 平稳性检验:对原始序列进行 ADF 检验,p 值为 0.32(>0.05),无法拒绝非平稳原假设。观察 ACF 图,自相关系数在滞后 1-10 阶均显著为正且衰减缓慢,确认非平稳。
- 差分处理:先做一阶差分(消除趋势),再次 ADF 检验 p 值为 0.01,序列已平稳。但 ACF 在滞后 52 阶处仍有显著峰值,提示存在季节性,因此再做 52 阶季节差分。最终序列通过平稳性检验。
- 建模与验证:基于差分后的序列拟合 SARIMA(1,1,1)(1,1,1)52 模型,使用前 96 周数据训练,后 8 周数据验证。预测结果平均百分比误差(MAPE)为 4.2%,优于未做差分的简单移动平均模型(MAPE 为 9.8%)。
结果与复盘:差分处理是模型成功的关键。若跳过差分直接建模,模型会将趋势和季节性误认为随机波动,导致预测系统性偏低。此外,春节周的异常值在建模前被识别并单独处理(作为哑变量),避免了异常值对差分计算的干扰。
| 步骤 | 操作 | 关键指标 | 结论 |
|---|---|---|---|
| 1 | 时序图 + STL 分解 | 趋势项斜率、季节幅度 | 存在趋势和 52 周季节 |
| 2 | ADF 检验 | p=0.32 | 非平稳 |
| 3 | 一阶差分 + ADF | p=0.01 | 趋势消除,季节残留 |
| 4 | 季节差分 + ADF | p<0.01 | 序列平稳 |
| 5 | SARIMA 建模 | MAPE=4.2% | 预测精度达标 |
4.5 常见误区与总结复盘
在活动需求预测实践中,时间序列基础环节常出现以下问题:
- 混淆季节性与周期性:将不固定周期的经济循环误认为季节性,导致季节差分阶数设置错误。记住:季节性周期固定,周期性不固定。
- 忽略方差非平稳:只关注均值平稳而忽略方差异质性。当序列波动幅度随时间变化时,应先做对数变换或 Box-Cox 变换。
- 过度差分:对原本平稳的序列进行差分,引入了不必要的负自相关,降低了预测精度。每次差分后都应进行平稳性检验。
- 忽视异常值:极端值(如促销活动、突发事件)会严重影响差分计算和模型参数估计。建议在分解前先识别并处理异常值。