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个有效值平滑填充(适合微结构噪声)。
  • 指数加权填充:更近的有效值权重更高,适应高频突变。
  • 时间衰减插值:结合时间戳间隔,线性/指数衰减分配权重。
⭐ 高频推荐:前向填充 + 时间窗口均值组合,延迟低且稳健。