4、趋势分析方法:移动平均法、指数平滑法、线性与非线性趋势拟合
各位同行,今天我们来聊聊趋势分析。说白了,就是怎么从一堆乱糟糟的数据里,把那个「大方向」给揪出来。
我刚开始做功率预测那会儿,最头疼的就是数据噪声。你想想看,风电、光伏这些玩意儿,受天气影响太大了。五分钟一个数据点,画出来跟心电图似的。但咱们做中长期预测,看的是月、季度、年度的趋势,不能跟着短期波动瞎折腾。
所以,趋势分析方法就是我们的「去噪利器」。我个人习惯把这几种方法分成两类:一类是平滑类,比如移动平均、指数平滑;另一类是拟合类,比如线性、非线性回归。咱们一个一个说。
4.1 移动平均法
移动平均法,最直观,也最常用。它的核心思想很简单:用过去一段时间的平均值,来代表当前时刻的趋势。
公式长这样:
MA_t = (x_t + x_{t-1} + ... + x_{t-n+1}) / n
其中 n 是窗口大小。n 越大,曲线越平滑,但对变化的反应也越迟钝。
我在项目中遇到过一个典型场景:某光伏电站的月发电量数据,受季节影响波动很大。我用 3 个月窗口的移动平均,基本能看出年度增长趋势;但用 12 个月窗口,就完全看不出季节波动了,只剩下一个缓慢上升的曲线。
4.2 指数平滑法
移动平均法有个问题:它对窗口内的所有数据一视同仁。但你想啊,昨天的数据肯定比三个月前的数据更有参考价值,对吧?
指数平滑法就是来解决这个问题的。它给近期的数据更高的权重,远期的数据权重指数衰减。
公式:
S_t = α * x_t + (1 - α) * S_{t-1}
其中 α 是平滑系数,取值 0 到 1。α 越大,越看重近期数据;α 越小,历史数据的影响越大。
我个人习惯把 α 设成 0.2~0.3 之间。为什么?因为中长期预测,我们不想被短期波动带偏。α 太大,曲线就跟着噪声跳了。
举个例子:某风电场去年 12 月发电量突然暴跌(因为无风),如果用 α=0.5,这个暴跌会严重影响后续的趋势判断。但用 α=0.2,影响就小得多,趋势线依然平稳。
4.3 线性趋势拟合
前面两种方法,都是对历史数据做平滑。但如果我们想「预测未来」,就需要拟合一个趋势线。
线性趋势拟合,就是假设数据沿着一条直线变化:
y = a * t + b
其中 t 是时间,y 是功率,a 是斜率(增长速率),b 是截距。
用最小二乘法,我们可以算出 a 和 b。然后,把未来的 t 代进去,就能得到预测值。
我记得有一次做某水电站的年度发电量预测,数据点大概有 5 年。我用线性拟合,R² 达到了 0.85,说明趋势很稳定。但后来发现,这个电站上游来水量其实在逐年减少,线性趋势根本反映不出来。
4.4 非线性趋势拟合
现实世界哪有那么多直线?功率数据往往是非线性的。比如光伏装机容量快速增长期,发电量是指数级上升的;到了饱和期,又变成对数增长。
常见的非线性模型有:
- 指数模型:y = a * e^(b*t) —— 适用于快速增长
- 对数模型:y = a * ln(t) + b —— 适用于增速放缓
- 多项式模型:y = a*t² + b*t + c —— 适用于有拐点的情况
我建议不要一上来就用高阶多项式。虽然它能完美拟合历史数据(R² 接近 1),但外推时往往「放飞自我」,预测结果离谱得很。
举个例子:某光伏电站 3 年的数据,用 5 次多项式拟合,历史误差几乎为零。但预测第 4 年时,曲线突然掉头向下,完全不符合实际情况。这就是典型的过拟合。
4.5 方法对比与选择
说了这么多,到底该用哪个?我整理了一个表格,方便大家对比:
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 移动平均法 | 数据噪声大,需要平滑 | 简单直观,计算快 | 不能预测,有滞后 |
| 指数平滑法 | 近期数据更重要 | 权重合理,适应性强 | 需要调参 α |
| 线性趋势拟合 | 匀速增长/下降 | 可预测,解释性强 | 对非线性数据失效 |
| 非线性趋势拟合 | 增速变化、有拐点 | 拟合精度高 | 容易过拟合 |
我个人习惯的做法是:先用移动平均看清趋势形态,再用线性或非线性模型做预测。两者结合,既不会漏掉细节,也不会被噪声迷惑。
4.6 知识体系图
下面这张图,把本章的核心逻辑串起来了:
嗯,这张图把本章的知识体系理清楚了。左边是平滑类,帮你「看清」趋势;右边是拟合类,帮你「预测」趋势。两条腿走路,才走得稳。