时间序列中缺失值会破坏连续性,常用 线性插值 与 前向填充 (ffill) 还原趋势。
利用缺失点前后有效值拟合直线,适合趋势平稳片段。
# 线性插值示例 (pandas) df['sales'].interpolate(method='linear', inplace=True)
用上一个非缺失值填充,适合需求突变少的场景。
# 前向填充 df['sales'].fillna(method='ffill', inplace=True)
| 方法 | 适用场景 | 延迟 |
|---|---|---|
| 线性插值 | 趋势平稳 | 低 |
| 前向填充 | 短期缺失 | 中 |
| 多项式插值 | 曲线波动 | 高 |
识别需求尖峰或数据错误,常用 IQR (四分位距) 和 3-Sigma (标准差) 方法。
Q1 = df['sales'].quantile(0.25) Q3 = df['sales'].quantile(0.75) IQR = Q3 - Q1 outliers = (df['sales'] < Q1-1.5*IQR) | (df['sales'] > Q3+1.5*IQR)
mu = df['sales'].mean() sigma = df['sales'].std() outliers = (df['sales'] < mu-3*sigma) | (df['sales'] > mu+3*sigma)
| 方法 | 操作 |
|---|---|
| 截尾 | 替换为边界值 |
| 插值修正 | 用前后均值 |
| 剔除 | 删除异常点 |
平滑消除噪声,重采样统一时间频率,是需求预测的关键预处理。
df['sales_smooth'] = df['sales'].rolling(window=7).mean()
窗口=7 (日) 消除周波动。
# 日 -> 周聚合
df.resample('W').sum()
将日数据升维至周、月,稳定需求信号。
df['ewm'] = df['sales'].ewm(alpha=0.3).mean()
| 频率 | 聚合函数 | 适用场景 |
|---|---|---|
| 日 → 周 | sum / mean | 消除周末效应 |
| 日 → 月 | sum | 长期趋势 |
| 小时 → 日 | mean / max | 日内模式 |
⬆ 预处理流水线:缺失 → 异常 → 平滑/重采样,输出干净时序