4. 经典分解方法(Classical Decomposition)实战

经典分解(Classical Decomposition)是时间序列分析中最朴素也最透明的一套方法。它把一条观测序列 Yt 拆成趋势项 Tt、季节项 St 和不规则项 Rt 三部分,按组合方式分为加法模型 Yt = Tt + St + Rt 与乘法模型 Yt = Tt × St × Rt。本节以某城市 PM2.5 月度浓度为例,完整走一遍“中心化移动平均求趋势 → 去趋势得季节比 → 按月平均并归一化得季节指数 → 重构与残差检验”的流程,并讨论它的适用边界。

一、数据与模型选择

假设我们拿到该城市连续 5 年(60 个月)的 PM2.5 月均浓度,单位 μg/m³,记为 Y1…Y60。PM2.5 呈现“冬高夏低”的年内节律,且季节波动的绝对幅度往往随浓度水平同步放大——重污染年份冬季峰值更高、夏季谷值也略高。这种“波动幅度与水平相关”的特征提示应优先采用乘法模型,使季节指数表现为围绕 1 的比例因子(如 1.35 表示该月比趋势高 35%)。若序列波动幅度与水平基本无关,则改用加法模型,季节项为绝对偏差。

选择乘法模型后,计算步骤为:先用中心化 12 项移动平均得到趋势 Tt;再计算季节比率 Yt/Tt;对同一月份的所有比率求平均,得到未归一化的季节因子;最后按“各月因子之和 = 12”归一化,得到季节指数 St;残差 Rt = Yt/(Tt·St)。

二、中心化移动平均提取趋势

月度数据周期 m = 12,为偶数,普通 12 项移动平均的结果会落在两个整数月之间,因此必须做中心化处理:先算相邻两个 12 项平均,再取二者均值,等价于对 t−6 到 t+6 共 13 个点加权,两端权重为 1/24,中间 11 个点权重为 1/12。以第 7 个月(t = 7)为例:

T7 = (0.5·Y1 + Y2 + … + Y12 + 0.5·Y13) / 12
   = (0.5×Y1 + ΣY2..Y12 + 0.5×Y13) / 12

这样得到的 T7 正好对齐第 7 个月,且已平滑掉整年周期。代价是序列首尾各损失 6 个月,60 个月只剩 t = 7…54 共 48 个趋势值。这是经典分解的固有缺陷:端点趋势无法估计,最新半年的趋势只能靠外推或改用 STL 等方法补足。

移动平均的窗口长度直接决定趋势的“光滑度”。窗口过短(如 3 项)会把季节波动残留进趋势;窗口过长(如 24 项)则把真实的年际变化也抹平。对月度数据,12 项中心化平均是标准做法,因为它恰好完整覆盖一个周期,理论上能完全消除固定周期的季节成分。

三、季节指数计算与归一化

得到趋势后,逐点计算比率 Yt/Tt,再把 48 个比率按月份归组:1 月有 4 个比率(第 1、2、3、4 年的 1 月),2 月同样 4 个,依此类推。对每组求算术平均,得到 12 个未归一化季节因子。由于乘法模型要求一年内季节效应“相互抵消”,需做归一化:

S_i = 原始因子_i × 12 / Σ(原始因子_1..12)

归一化后 12 个季节指数之和恰为 12,均值恰为 1。示例结果(合理假设值)大致为:1 月 1.42、2 月 1.28、3 月 1.05、4 月 0.92、5 月 0.80、6 月 0.72、7 月 0.68、8 月 0.70、9 月 0.82、10 月 0.98、11 月 1.18、12 月 1.45。解读方式很直接:1 月指数 1.42 意味着该月 PM2.5 通常比当月趋势水平高约 42%,7 月 0.68 则低约 32%。冬季采暖与逆温、夏季降水与扩散条件改善,是这一节律的物理背景。

归一化不可省略。若直接使用原始因子,各月因子之和不等于 12,重构时会把系统性偏差带入趋势项,导致“趋势被季节项偷走”。

四、重构、残差与效果评估

用 Tt·St 得到拟合值,与原序列相减(乘法模型下用比值)得到残差 Rt。评估分解效果主要看三点:其一,残差是否近似围绕 1 随机波动、无明显规律,若残差仍呈季节性,说明模型形式选错或周期设定有误;其二,残差的自相关是否显著,若滞后 1 期自相关很高,说明趋势提取不足;其三,用 R² 或残差标准差衡量拟合优度,PM2.5 月度数据通常能解释 80% 以上的变异。

下图展示了本节方法的完整数据流与关键中间产物,包括端点损失、归一化约束和残差回检三个易错环节。

PM2.5 月度序列经典乘法分解流程 原始序列 Yₜ 60 个月 PM2.5 中心化 12 项移动平均 两端权重 1/24,中间 1/12 首尾各损失 6 个月 趋势项 Tₜ t = 7 … 54 季节比率 Yₜ / Tₜ 48 个比率值 按月份归组求平均 每月 4 个比率 归一化 ΣSᵢ = 12,均值 = 1 季节指数 Sₜ 12 个比例因子 重构 Tₜ · Sₜ 拟合值 残差 Rₜ = Yₜ/(Tₜ·Sₜ) 应围绕 1 随机波动 残差回检 自相关 / 季节性残留 R² 与残差标准差 残差仍有规律 → 改模型形式 / 换周期 / 改用 STL 季节指数示例(合理假设) 1月 1.42 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 基准 1.0

五、局限性:什么时候不该只用经典分解

经典分解的透明性来自它的强假设,而这些假设在环境数据中经常被打破。第一,趋势被假定为平滑且缓慢变化,移动平均无法刻画突变型趋势(如某年实施大气治理行动后浓度台阶式下降),会把突变摊平到前后若干个月。第二,季节形态被假定为逐年不变,而 PM2.5 的季节振幅会随治理力度和气象年景变化,固定季节指数会低估或高估某些年份的冬季峰值。第三,端点信息丢失,最新 6 个月没有趋势估计,无法直接判断当前污染水平相对趋势的偏离,这对业务预警是硬伤。第四,对异常值敏感,一次重污染过程会同时污染趋势和季节比率,且移动平均会把异常“传染”给相邻 6 个月。

因此,经典分解更适合作为基线方法与教学起点:它计算简单、每一步都可手工复核、结果可解释性强,适合快速判断序列是否存在稳定季节性与大致趋势方向。当需要处理季节形态漂移、端点估计或异常稳健性时,应转向 STL(Loess 分解)、X-13ARIMA-SEATS 或状态空间模型。实践中一个稳妥的做法是:先用经典分解得到季节指数与趋势的“粗估”,再用 STL 复核季节项是否随时间变化,两者差异明显时以 STL 为准。

若残差序列在滞后 12 期仍出现显著自相关,说明 12 项移动平均未能完全剥离季节性,应检查是否存在周期错位(如数据为周度却按月度处理)或缺失月份导致的相位偏移。

六、可直接复用的计算检查表

环节检查项合格判据
模型选择季节波动幅度是否随水平放大是→乘法;否→加法
趋势提取窗口长度是否等于周期月度用 12 项中心化
端点处理首尾损失是否已记录60 个月剩 48 个趋势值
归一化季节指数之和恰为 12,均值 1
残差检验是否围绕 1 随机波动无季节性残留、滞后 12 期自相关不显著
拟合优度R² 或残差标准差PM2.5 月度通常 R² > 0.8

把这张表逐项走完,一次经典分解就算做“干净”了。它的价值不在于精度最高,而在于每一步都能被追问、被复核——这正是后续引入更复杂方法时判断“改进是否真的有效”的参照基准。