本节摘要:周期性是长度不固定、形状不规则的长期波动,常见于宏观经济、商业周期、气候系统。本节给出周期性 vs 季节性的关键区别,并用一段合成经济数据演示"周期长度在 5–9 年之间漂移"的现象。
阅读完本节,你应当能够:
本节正式把"周期性"和"季节性"分家:周期长度不固定、来源是经济机制、不可预知但可建模。读完后你能识别出业务中"周期性"的常见来源。
周期性是这样一种信号:它在较长的时间跨度内呈现波动,但每一次循环的长度都不完全相同。教科书最常引用的例子是经济周期——繁荣、衰退、萧条、复苏四阶段反复出现,但每次循环的"繁荣持续多久""衰退多深"都不一样。
回到侦探视角:周期性像一个"老熟人",但每次作案都用不同手法。你确定它会再来,但不知道下次什么时候、用什么方式。
| 维度 | 季节性 | 周期性 |
|---|---|---|
| 周期长度 | 固定(如 7 天、12 个月) | 不固定(5–9 年、3–15 年都可能) |
| 来源 | 日历、天气、社会习惯 | 经济机制、系统反馈、气候驱动 |
| 可预测性 | 高(已知周期就能预测) | 低(每次循环都不同) |
| 业务可见度 | 短期/高频数据中明显 | 长期/低频数据中才显著 |
第三条最致命。季节性可以"预知"——你可以提前 7 天预测下周的同一天;周期性无法预知——你只能说"经济周期大概会再来",但说不出"下个衰退何时开始"。这也是为什么分析师对周期性的建模始终比对季节性更保守。
import numpy as np import matplotlib.pyplot as plt # 合成一段 50 年的"经济序列":长期增长 + 多个不同长度的周期 + 噪声 rng = np.random.default_rng(42) n = 200 # 200 个季度 t = np.arange(n) trend = 0.05 * t # 长期增长 cycle1 = 8 * np.sin(2 * np.pi * t / 20 + 0.3) # 20 季度长周期 cycle2 = 5 * np.sin(2 * np.pi * t / 35 + 1.2) # 35 季度长周期 cycle3 = 3 * np.sin(2 * np.pi * t / 60 + 2.0) # 60 季度超长周期 noise = rng.normal(0, 1.5, n) y = trend + cycle1 + cycle2 + cycle3 + noise plt.figure(figsize=(10, 3.5)) plt.plot(t, y, lw=0.8) plt.title("合成经济序列:长趋势 + 多周期 + 噪声") plt.xlabel("季度") plt.tight_layout()
从图上可以直观看到:没有固定的"循环长度"。每个峰到下一个峰的距离都不完全相等。这正是周期性的视觉特征——一段"看似有规律但每次都不一样"的曲线。
三个原因:
判别一段波动是季节性还是周期性,看 3 个维度:
工程上的取舍:季节性是必须剥掉的(影响预测和异常检测),周期性是可剥也可保留的(保留有助于中长期预测,但模型复杂度上升)。
很多新手把"看起来有规律但找不到物理解释的波动"都当周期性。区分要点:先问"有没有物理解释"——没有就是噪声/事件驱动,不要硬归为周期性。