数据预处理与趋势识别

时序分析的首要步骤是对原始数据进行预处理和趋势识别,为后续建模打下基础。这些步骤有助于发现数据中的异常、周期性和长期趋势。

异常点处理

在时序数据中,异常点可能来自系统错误、记录错误或特殊事件:

  • 均值填补:使用前后时间点的均值替代异常值
  • 前向填充:使用前一个有效值填充缺失点
  • IQR清洗:基于四分位距识别并处理异常点
    Q1 = df['value'].quantile(0.25)
    Q3 = df['value'].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]

去噪平滑

消除随机噪声,突出真实趋势:

  • 滑动平均(SMA):使用固定窗口均值平滑时序
    df['sma_7d'] = df['value'].rolling(window=7).mean()
  • 指数平滑(EMA):赋予近期数据更高权重
    df['ema'] = df['value'].ewm(span=7).mean()

周期性识别

识别时序数据中的周期性模式:

  • ACF/PACF图:自相关函数和偏自相关函数,用于判断季节性与滞后相关性
    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    plot_acf(df['value'], lags=50)
    plot_pacf(df['value'], lags=50)
  • 频域分析:使用傅里叶变换等方法检测周期

趋势分解

将时序数据分解为多个组成部分:

  • STL分解:将时序拆分为趋势(trend)、季节性(seasonality)和残差(residual)
    from statsmodels.tsa.seasonal import STL
    stl = STL(df['value'], period=7).fit()
    trend = stl.trend
    seasonal = stl.seasonal
    residual = stl.resid

与其他模块的关系

数据预处理的质量直接影响后续时序分析-传统统计模型时序分析-机器学习模型时序分析-深度学习模型的效果。特别是,干净的数据和准确识别的周期性能够帮助选择合适的时序分析-混合方法。在时序分析-评估指标与误差分析中,也需要考虑数据预处理的影响。