本节摘要:趋势并非只有"上升的线"这一种形态。本节系统化地介绍四类趋势——线性、指数、S 形、分段——用代码合成各自的样本,并讨论如何根据业务直觉挑选最合适的形态。
阅读完本节,你应当能够:
本节回到 1.2 节那个 SaaS 反例:早期指数、S 形饱和、后期选错形态会让预测误差 5 个数量级。读完后你能为业务数据选对趋势形态,而不是机械套线性外推。
回到 1.2 节的反例:某 SaaS 公司 2018–2020 年早期用户数 100 → 1000 → 8000 增长。用线性外推预测 2024 年用户数 = 2018 + 6 × 增长率 = 2 万;但实际已经接近 50 万——误差 25 倍。
错就错在"线性"假设。早期 SaaS 增长是指数(每个用户带来 N 个新用户的病毒系数),到一定规模后会饱和(S 形),再用指数外推就会离谱地高估。选对趋势形态,比挑一个花哨的模型更重要。
import numpy as np import matplotlib.pyplot as plt n = 100 t = np.arange(n) # 1) 线性:每期 +常数 linear = 50 + 0.8 * t # 2) 指数:每期 × 固定增长率 exp = 50 * np.exp(0.04 * t) # 3) S 形 / Logistic:早期慢、中期快、后期饱和 sigmoid = 1000 / (1 + np.exp(-0.1 * (t - 50))) # 4) 分段线性:在 t=50 处突然改变斜率 piecewise = 0.5 * t + (t >= 50) * (5 * (t - 50)) fig, axes = plt.subplots(2, 2, figsize=(10, 6)) for ax, y, title in zip(axes.ravel(), [linear, exp, sigmoid, piecewise], ["线性", "指数", "S 形", "分段线性"]): ax.plot(t, y) ax.set_title(title) plt.tight_layout()
从图上可以直观看到:
| 业务场景 | 最可能形态 | 原因 |
|---|---|---|
| 城市 GDP(成熟城市) | 线性或 S 形 | 总量已大,增长趋稳 |
| 新兴 APP 用户 | 指数或 S 形 | 早期有病毒系数 |
| 工业产能 | 分段(受投资周期影响) | 重大投资带来阶跃 |
| 季节性疾病的就诊数趋势 | S 形(疫情扩散形态) | 指数到饱和 |
| 累计装机量 | S 形 | 天然有上限 |
不同形态的数学表达,决定了下游用什么模型拟合:
| 形态 | 拟合工具 | 工程实现 |
|---|---|---|
| 线性 | 普通最小二乘 | np.polyfit(t, y, 1) 或 statsmodels OLS |
| 指数 | 对数线性回归 | np.polyfit(t, np.log(y), 1) 再 exp |
| S 形 | 非线性最小二乘拟合 Logistic | scipy.optimize.curve_fit |
| 分段 | 线性回归 + 变点检测 | Prophet changepoint_prior_scale、PELT 算法 |
💡 关键直觉:分段线性是最稳的工程默认。它不要求你选对"完美形态",只要求识别出变点。Prophet 默认就是分段线性 + 季节性 Fourier 项 + 误差项的组合,对业务数据非常友好。
回到开头那个 SaaS 案例。如果用线性外推,2018 → 2024 年用户数预测为 2 万;用指数外推,预测为 12 亿(明显离谱);用 S 形外推,预测 50 万(接近实际)。三种数学形态,预测结果相差 5 个数量级。这就是为什么趋势形态不是"模型细节",而是"模型地基"。
实操中遇到的 90% 的趋势,都能归到这 5 种形态之一:
from statsmodels.tsa.stattools import adfuller import numpy as np y = series.values # 1. ADF 检验:p>0.05 → 有趋势 adf_p = adfuller(y)[1] # 2. 差分后再 ADF,p<0.05 → 一阶差分可平稳化 adf_d1 = adfuller(np.diff(y))[1] # 3. 差分次数 = d(ARIMA 的 d)
很多教程把"趋势"默认设为线性。但现实中 S 形、分段、指数趋势更常见。识别错了形态,模型会系统性地高估或低估未来值。
实操中遇到趋势,按这个顺序判别:
"长期上升"不一定是趋势。如果只是周期性波动的"上升段",不是趋势;只是事件驱动的"一段暴涨",也不是趋势。判别趋势一定要用 ADF + 回归 + 视觉综合判别,单一指标不可靠。