数据预处理与趋势识别
时序分析的首要步骤是对原始数据进行预处理和趋势识别,为后续建模打下基础。这些步骤有助于发现数据中的异常、周期性和长期趋势。
异常点处理
在时序数据中,异常点可能来自系统错误、记录错误或特殊事件:
- 均值填补:使用前后时间点的均值替代异常值
- 前向填充:使用前一个有效值填充缺失点
- 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
与其他模块的关系
数据预处理的质量直接影响后续时序分析-传统统计模型、时序分析-机器学习模型和时序分析-深度学习模型的效果。特别是,干净的数据和准确识别的周期性能够帮助选择合适的时序分析-混合方法。在时序分析-评估指标与误差分析中,也需要考虑数据预处理的影响。