【第七章:时间序列模型】2.时间序列统计模型与神经网络模型-(1)简单序列模型: moving average, linear model and exponential smoothing介绍及代

第七章:时间序列模型

第二部分:时间序列统计模型与神经网络模型

第一节:简单序列模型: moving average, linear model and exponential smoothing介绍及代


一、引言:从简单模型理解时间序列

在复杂的时序模型(如 ARIMA、LSTM)出现之前,最早的时间序列预测方法都来自于统计建模思想
这些模型往往不需要大规模数据或复杂网络,仅依赖于过去观测值的线性关系加权平滑机制即可实现稳定预测。

本节我们将从三个最基础的模型入手:

移动平均(Moving Average, MA)
线性回归时序模型(Linear Model)
指数平滑模型(Exponential Smoothing)

它们构成了现代时间序列分析的基石。


二、移动平均模型(Moving Average, MA)

1. 原理介绍

移动平均是一种最简单的平滑方法。
它通过对最近一段时间的观测值取平均,消除随机波动,突出数据的趋势性。

公式如下:
\hat{y}t = \frac{1}{k}\sum{i=1}^{k} y_{t-i}
其中 (k) 是滑动窗口大小,(\hat{y}_t) 为预测值。

直观理解:

  • 窗口越大 → 越平滑,但响应变化越慢;

  • 窗口越小 → 响应快,但更容易受噪声干扰。

2. 代码实战
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 模拟数据:带噪声的趋势序列
np.random.seed(42)
t = np.arange(100)
y = 0.5 * t + np.random.randn(100) * 5
series = pd.Series(y)

# 移动平均平滑
ma_3 = series.rolling(window=3).mean()
ma_7 = series.rolling(window=7).mean()

plt.plot(series, label='原始数据', alpha=0.6)
plt.plot(ma_3, label='3步移动平均')
plt.plot(ma_7, label='7步移动平均')
plt.legend()
plt.show()

应用:股票价格短期趋势、传感器信号降噪、Web流量平滑等。


三、线性模型(Linear Model)

1. 原理

线性模型通过拟合时间与观测值之间的线性关系实现预测。
其核心思想:
y_t = \beta_0 + \beta_1 t + \epsilon_t
其中 \beta_1 表示趋势斜率,\epsilon_t 为残差。

若考虑多特征(如节假日、温度),则可以扩展为多元线性模型。

2. 代码实战
from sklearn.linear_model import LinearRegression

# 构建时间索引
t = np.arange(len(series)).reshape(-1, 1)
model = LinearRegression()
model.fit(t, series)

# 拟合与预测
y_pred = model.predict(t)

plt.plot(series, label='原始数据', alpha=0.6)
plt.plot(y_pred, label='线性拟合趋势', color='red')
plt.legend()
plt.show()

print("趋势斜率 β1 =", model.coef_[0])

应用:长期趋势预测、经济指标分析(如GDP增长、销售量趋势)。


四、指数平滑模型(Exponential Smoothing)

1. 核心思想

指数平滑是一种改进的加权平均方法:
越近的时间点权重越高,越远的时间点权重越低。
其思想是:
\hat{y}t = \alpha y{t-1} + (1 - \alpha)\hat{y}_{t-1}
其中:

  • \alpha \in (0,1) 为平滑系数;

  • \alpha 越大 → 越重视最近数据。

这种方法可以递归实现预测,非常适合实时更新。

2. 单指数平滑(Simple Exponential Smoothing)
from statsmodels.tsa.holtwinters import SimpleExpSmoothing

model = SimpleExpSmoothing(series)
fit = model.fit(smoothing_level=0.2, optimized=False)
y_pred = fit.fittedvalues

plt.plot(series, label='原始数据')
plt.plot(y_pred, label='指数平滑(α=0.2)')
plt.legend()
plt.show()
3. 双指数平滑(Holt’s Linear)

考虑到趋势成分,Holt 对平滑进行了扩展:

代码实现:

from statsmodels.tsa.holtwinters import ExponentialSmoothing

model = ExponentialSmoothing(series, trend='add', seasonal=None)
fit = model.fit()
fit.fittedvalues.plot(label='Holt平滑预测')
series.plot(label='原始数据')
plt.legend()
plt.show()
4. 三指数平滑(Holt-Winters)

当数据存在明显季节性时,需再加入季节分量:

\hat{y}{t+h} = (l_t + hb_t)s{t+h-m}
可通过 seasonal='add''mul' 实现。


五、三者对比总结

模型核心思想优点缺点适用场景
Moving Average简单平均平滑实现简单、稳定反应慢、不适合趋势数据降噪、短期平滑
Linear Model拟合时间线性关系可解释性强难应对非线性趋势长期趋势预测
Exponential Smoothing权重递减的平滑响应灵敏、支持趋势/季节参数调优复杂实时预测、季节性序列

六、实践建议

  1. 先从简单模型出发

    • 若序列平稳且噪声大 → Moving Average。

    • 若趋势明显 → Linear 或 Holt 模型。

    • 若季节性强 → Holt-Winters 模型。

  2. 调优策略

    • α 越大越重视近期变化;

    • 可通过验证集误差(如 RMSE)选择最优参数。

  3. 与现代模型结合

    • 这些方法常作为基线模型(Baseline),
      用于与 LSTM、Transformer 等复杂模型性能对比。


七、小结

本节我们系统地介绍了三种最基础的时间序列建模方法:

模型关键词本质
Moving Average平滑噪声窗口加权
Linear Model趋势拟合线性回归
Exponential Smoothing加权递归平滑更新

它们的思想虽然简单,但在实际工业预测中仍被广泛使用,尤其在低延迟、低计算开销场景下具有巨大优势。

一句话总结:

“简单的时间序列模型,是理解复杂预测算法的最佳起点。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值