4. 时间戳处理
📈 高频数据缺失值处理
缺失模式 · 填充策略
⚡ 实战要点 · 高频数据缺失非随机,时间敏感性强。前向/后向填充、线性/样条插值、时间窗口填充,各有适用场景。
📊 高频数据缺失模式
| 缺失类型 | 描述 | 典型场景 | 影响等级 |
|---|---|---|---|
| 完全随机缺失 | 缺失与数据值无关 | 传感器瞬时故障 | ⭐️⭐️ |
| 随机缺失 | 缺失依赖于其他观测变量 | 交易量阈值触发 | ⭐️⭐️⭐️ |
| 非随机缺失 | 缺失与自身潜在值相关 | 价格涨跌停、熔断 | ⭐️⭐️⭐️⭐️⭐️ |
| 集群缺失 | 连续多个时间戳缺失 | 网络中断、交易所休市 | ⭐️⭐️⭐️⭐️ |
🧰 五大填充策略
⏪ 前向填充 (ffill)
⏩ 后向填充 (bfill)
📐 线性插值
🌀 样条插值 (spline)
⏱️ 时间窗口填充
⚙️ 缺失处理流程 · 根据模式选择填充策略
📐 插值法对比
📉 线性插值
相邻点直线
相邻点直线
🌀 样条插值
三次平滑曲线
三次平滑曲线
⏳ 时间加权
时间戳权重
时间戳权重
🧮 多项式插值
高阶拟合
高阶拟合
🐍 Python 实战代码
# 高频数据缺失值处理 (pandas + scipy)
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d, CubicSpline
# 模拟高频时间序列 (1秒间隔)
ts = pd.date_range('2025-03-01 09:30:00', periods=20, freq='1s')
data = [100.0, 100.2, np.nan, 100.5, np.nan, np.nan, 101.0, 101.3,
101.1, np.nan, 101.8, 102.0, np.nan, 102.5, 102.3, 102.8,
np.nan, 103.0, 103.2, 103.5]
df = pd.DataFrame(data, index=ts, columns=['price'])
# 1. 前向填充 (ffill)
df['ffill'] = df['price'].ffill()
# 2. 后向填充 (bfill)
df['bfill'] = df['price'].bfill()
# 3. 线性插值 (时间索引)
df['linear'] = df['price'].interpolate(method='linear')
# 4. 样条插值 (三次样条, 需要数值索引)
valid = df['price'].dropna()
x = np.arange(len(df))
x_valid = x[~df['price'].isna()]
y_valid = valid.values
cs = CubicSpline(x_valid, y_valid, bc_type='natural')
df['spline'] = cs(x)
# 5. 时间窗口填充 (前向1秒窗口均值)
df['window_1s'] = df['price'].fillna(
df['price'].rolling(3, min_periods=1).mean()
)
print(df.head(12))
⏱️ 基于时间窗口的填充策略
- 固定窗口前向填充:例如 250ms 窗口内最后一个有效值填充。
- 滚动窗口均值/中位数:利用前后各N个有效值平滑填充(适合微结构噪声)。
- 指数加权填充:更近的有效值权重更高,适应高频突变。
- 时间衰减插值:结合时间戳间隔,线性/指数衰减分配权重。
⭐ 高频推荐:前向填充 + 时间窗口均值组合,延迟低且稳健。