本节摘要:周期性不像季节性那样由日历决定,它来自系统反馈机制。本节系统介绍三大类来源——经济周期、商业周期、气候周期——并讨论它们各自的时间尺度、对业务的影响,以及"为什么周期长度会漂移"。
阅读完本节,你应当能够:
本节从"来源"切入周期性:经济周期(5–10 年)、商业周期(2–7 年)、气候周期(3–15 年)。读完后你能把业务上观察到的长波反推到具体的反馈机制上。
季节性的来源简单——日历。周期性的来源复杂——背后是经济机制、产业结构、气候系统的反馈回路。理解来源能帮分析师判断"看到的周期是真实的还是数据巧合"。比如半导体行业有个著名的"硅周期"——它不是日历效应,而是产能投资、需求、库存、产能去化四个变量互相反馈的结果。
把"周期性"理解为"系统反馈的副产品",比把它当成"一段特殊曲线"有用得多。
最经典的周期性来源是经济周期,简称商业周期(business cycle)。它的四阶段:
驱动机制:库存投资 + 信贷扩张收缩 + 产能调整。为什么周期长度会漂移? 因为每次复苏的起点不同、产能调整速度不同、信贷紧缩程度不同——这导致每个循环的时长在 5–10 年区间内变化。
经典观测指标:GDP、工业产值、PMI、失业率、信贷增速。
比经济周期更短、更聚焦。常见的有:
驱动机制:行业特定的供给-需求反馈 + 技术成熟度曲线 + 竞争格局变化。
气候系统本身有多个时间尺度的振荡:
驱动机制:海洋-大气耦合系统的反馈回路。气候周期会通过"影响消费需求"传导到零售、能源等行业。
一个常见的反直觉事实:同一类周期在不同时间段的"平均长度"会变。比如硅周期在 2010 年代平均 3.5 年,但在 1990 年代平均 2.5 年。原因有几个:
💡 关键直觉:周期性预测必须给"长度区间"而不是"精确周期"。说"下一个硅周期大概在 2–4 年内出现"比说"明年就出现"更可靠。
下面这段合成数据模拟"GDP 月度增速 + 5 年周期 + 季度噪声":
import numpy as np import pandas as pd import matplotlib.pyplot as plt rng = np.random.default_rng(0) n = 240 # 20 年月度 t = np.arange(n) cycle = 4 * np.sin(2 * np.pi * t / 60 + 0.5) # 5 年周期 quarterly = 1 * np.sin(2 * np.pi * t / 3) # 季度噪声(误判为周期) y = 5 + cycle + quarterly + rng.normal(0, 0.5, n) s = pd.Series(y, index=pd.date_range("2005-01-01", periods=n, freq="MS")) # 周期图:最强峰在 60 月附近(5 年) from scipy.signal import periodogram freqs, power = periodogram(s.values, fs=1.0) periods = 1 / freqs[1:] power_no_dc = power[1:] top_idx = np.argsort(power_no_dc)[::-1][:5] for i in top_idx: print(f"周期 {periods[i]:.2f} 月 功率 {power_no_dc[i]:.2f}") # 预期:周期 ≈ 60 月功率最高,3 月次之
注意:60 月周期的"功率"可能不如 3 月"季度噪声"高——因为 5 年里 3 月周期重复了 20 次而 5 年周期只重复 4 次。这正是周期性的一个工程难题:长周期信号容易被短周期噪声掩盖。处理办法是用低通滤波器先剥短周期,或加长数据观测时间。
除了统计信号外,业务上的"周期性事件"也能反推周期来源:
业务分析师应当结合统计信号 + 业务认知共同判断——单纯看 ACF / 周期图容易把"业务节奏"误判为"统计巧合"。