📦 需求预测 · 数据类型与特征工程

选型 & 调优实战
⏳ 时间序列特点 📈 趋势·季节·周期 🎯 节假日·外部特征
⏱️ 1. 时间序列数据特点
  • 时序依赖性 —— 观测值按时间顺序排列,前后相关 自相关
  • 非平稳性 —— 均值/方差随时间变化,常含趋势与季节
  • 等间隔 vs 非等间隔 —— 日/周/月粒度,缺失值处理
  • 多尺度模式 —— 短周期波动 + 长周期形态
📌 核心挑战
  • 🔸 滞后性 & 序列膨胀
  • 🔸 多重季节性 (日/周/年)
  • 🔸 异常点 & 水平偏移
t₀ tₙ 时间 → 趋势 + 季节 + 噪声
🧩 2. 核心成分提取

📊 趋势 · 季节 · 周期

成分描述提取方式
趋势长期增加/减少移动平均、多项式拟合
季节性固定周期 (周/月/年)STL分解、傅里叶项
周期性非固定周期 (经济循环)自相关分析、谱分析

🎉 节假日效应

  • 📅 固定日期 (春节/圣诞) → one-hot / 距离编码
  • 📅 浮动节日 (感恩节/ Ramadan) → 相对位置特征
  • 📅 节前/节后窗口 (前3天/后5天) 叠加效应
✨ 技巧: 结合中国假日API,生成“是否长假”“调休日”等布尔特征。
STL 分解 (示意) 趋势 季节 残差
🌦️ 3. 外部特征提取与处理

🏷️ 促销特征

  • 折扣深度 / 促销类型 (满减/秒杀)
  • 促销持续时间 & 累计曝光
  • 上期促销后遗效应 (库存消化)

🌤️ 天气 & 经济

  • 温度/降雨/降雪 (滞后影响)
  • GDP、CPI、消费者信心指数
  • 行业指数 / 搜索热度 (Google Trends)
特征类型原始数据特征工程方法示例
促销折扣率, 促销flag折扣分箱, 累计促销天数, 距离下次促销0.3折扣 → 高促销强度
天气温度, 湿度, 天气代码平滑移动平均, 极端天气哑变量暴雨日 → 销量下降20%
经济PMI, 失业率差分, 同比变化, 滞后3期PMI>50 → 扩张信号
🔗 外部特征融合: 与时间索引对齐,注意前瞻性偏差 (future leakage) —— 只使用历史已知信息。
⚙️ 4. 特征工程代码示例 (Python)
import pandas as pd
import numpy as np
from statsmodels.tsa.seasonal import STL

# 假设 df 包含 'date' 和 'sales'
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date').asfreq('D')

# 1. 趋势+季节分解
stl = STL(df['sales'], period=7)
res = stl.fit()
df['trend'] = res.trend
df['seasonal_7'] = res.seasonal

# 2. 节假日特征 (示例: 春节)
holiday_dates = pd.to_datetime(['2024-02-10', '2025-01-29'])  # 春节
df['is_spring_festival'] = df.index.isin(holiday_dates).astype(int)
# 节前窗口
df['days_to_spring'] = (df.index - holiday_dates[0]).dt.days  # 简化

# 3. 促销外部特征
df['promo_discount'] = np.where(df['promo_type'] == 'high', 0.8, 0.0)
df['promo_accum_days'] = df['promo_flag'].groupby(
    (df['promo_flag'] == 0).cumsum()).cumsum()

# 4. 天气滞后特征
df['temp_lag1'] = df['temperature'].shift(1)
df['rain_3d_avg'] = df['rainfall'].rolling(3).mean()

print("特征工程完成 ✅  shape:", df.shape)
🧭 5. 特征工程流程架构
原始时序 分解·滞后·窗口 外部特征对齐 ML 趋势/季节 节假日 促销/天气 经济指标 特征存储 → 模型训练 (LightGBM / Prophet / LSTM)