建模方法与策略
一、时间序列竞赛与传统时序建模的差异
| 维度 | 说明 |
|---|---|
| 传统时序建模 | 对单一时间序列进行预测,强调时间依赖性 |
| 竞赛时序建模 | 数据集中包含多只股票的交易机会混合,每条记录是一次交易机会而非固定时序 |
| 核心区别 | 竞赛中不是对某只股票做连续预测,而是对触发交易规则的时刻做行为判断 |
| 建模目标 | 预测Action(买入/卖出/持有),而非直接预测价格或收益率 |
二、Action标签的构建策略
| 维度 | 说明 |
|---|---|
| Baseline方法 | Response > 0 时 Action = 1,否则 Action = 0 |
| 回归方法 | 直接对Response进行回归预测,再根据回归结果推导Action,比简单阈值更精细 |
| 多标签分类 | 同时对多个时间维度的Response进行分类,利用不同时间尺度的信息 |
| 强化学习思路 | 构建强化学习模型最大化评分指标,但在当前数据量下有监督方法更有效 |
| 优化方向 | 可尝试将Weight * Response作为额外输出目标,与Response预测联合优化 |
三、时间序列交叉验证策略
| 维度 | 说明 |
|---|---|
| 时序划分原则 | 不能随机打乱,必须按时间顺序划分训练集和验证集 |
| 滚动窗口验证 | 用前N天训练,后M天验证,逐步滚动,模拟真实交易场景 |
| 扩展窗口验证 | 训练集随时间扩展(如第1-100天、第1-200天、第1-300天),验证集紧随其后 |
| Gap设置 | 训练集和验证集之间设置间隔(Gap),防止信息泄漏 |
| 多折验证 | 5折时序交叉验证,每折的训练/验证时间区间不重叠 |
时序样本切分策略(带Gap)
| 维度 | 说明 |
|---|---|
| 时序划分原则 | 不能随机打乱,必须按时间顺序划分 |
| Gap设置 | 训练集和验证集之间设置时间间隔,防止信息泄漏 |
| Web Traffic实例 | 训练数据截止到9月10日,测试数据从9月13日开始,中间有3天Gap |
| Gap的影响 | 对于强自相关的序列,Gap设置至关重要 |
| 滚动窗口 | 用前N天训练,后M天验证,逐步滚动模拟真实预测场景 |
四、树模型在时序竞赛中的应用
| 维度 | 说明 |
|---|---|
| LightGBM | 处理结构化数据效率高,支持时序交叉验证(lgb.cv),可输出每折AUC及方差 |
| XGBoost | 与LightGBM类似,正则化更强,适合小数据集 |
| CatBoost | 自动处理类别特征,对匿名特征有一定优势 |
| 特征重要性 | 树模型可输出特征重要性,辅助理解哪些特征对预测最有价值 |
| 时序特性 | 树模型本身不捕捉时间依赖,需通过特征工程引入时间信息 |
五、深度学习模型在时序竞赛中的应用
| 维度 | 说明 |
|---|---|
| LSTM/GRU | 捕捉时间序列的长期依赖关系,适合单只股票的连续预测 |
| Transformer | 自注意力机制可捕捉全局时间依赖,但需要大量数据 |
| MLP | 简单多层感知机,对每条记录独立预测,不依赖时间顺序 |
| 混合模型 | 树模型 + 深度学习模型集成,利用各自优势 |
| 资源考量 | 深度学习需要GPU,树模型CPU即可,根据资源选择 |
六、特征工程在时序竞赛中的关键作用
| 维度 | 说明 |
|---|---|
| 滞后特征 | 构造过去N天的特征值作为当前预测的输入 |
| 滚动统计 | 计算过去N天的均值、标准差、最大/最小值等统计量 |
| 时间差特征 | 计算当前时刻与上次交易的时间间隔 |
| 交叉特征 | 多个特征之间的交互(如特征0 * 特征1、特征0 / 特征2) |
| Tag分组特征 | 根据features.csv的Tag标签,对同组特征进行聚合 |
趋势特征衍生
| 维度 | 说明 |
|---|---|
| 核心思想 | 用短期统计量与长期统计量的差值/比值来表征趋势强度 |
| 短期-长期差值 | trend_feature = recent_week_median - historical_median |
| 短期-长期比值 | trend_ratio = recent_week_median / historical_median |
| 典型应用 | Web Traffic TOP8方案中,计算不同周流量中位数减去历史112天中位数 |
| 核心优势 | 将趋势信息显式编码为特征,弥补GBT等模型对趋势捕获能力不足的问题 |
七、模型集成在时序竞赛中的重要性
| 维度 | 说明 |
|---|---|
| 集成收益 | 模型集成占30%重要性,超过超参数调优(20%) |
| 多样性来源 | 不同模型结构(树模型+深度学习)、不同超参数、不同随机种子、不同Fold |
| 简单投票 | 两个得分5000+的模型直接投票/平均,可得到6000+的分数 |
| 加权平均 | 根据各模型在验证集上的表现分配权重 |
| Stacking | 将Base模型的预测结果作为Meta模型的输入特征 |
八、复合预测策略(简单模型+复杂模型)
| 维度 | 说明 |
|---|---|
| 核心思想 | 将复杂模型与简单模型结合,简单模型拟合趋势/固有值,复杂模型拟合残差 |
| 典型组合一 | 线性回归拟合趋势 → 残差用NN或GBT拟合 |
| 典型组合二 | 移动平均/中位数模型拟合固有值 → 残差用DNN拟合 |
| 典型组合三 | ARIMA/Prophet拟合趋势+季节性 → 残差用GBT拟合 |
| 中位数模型+DNN | Web Traffic TOP8方案的核心策略 |
| 预测还原 | final_pred = simple_model_pred + complex_model_residual_pred |
| 核心优势 | 简单模型处理趋势/固有值,复杂模型专注于残差中的非线性模式 |
九、SMAPE作为损失函数
| 维度 | 说明 |
|---|---|
| 核心原则 | 损失函数应与评价指标一致,使模型直接面向评价指标优化 |
| 实现方式 | 当比赛评价指标为SMAPE时,NN模型的损失函数直接设为SMAPE |
| 代码示例 | loss = 2 * torch.abs(y_pred - y_true) / (torch.abs(y_pred) + torch.abs(y_true) + eps) |
| 除零保护 | 分母加入极小值eps(如1e-8)防止除零 |
| 核心优势 | 模型优化方向与评价标准完全一致 |
十、DNN时序架构(多输入+Skip Connection)
| 维度 | 说明 |
|---|---|
| 多输入设计 | main_input(动态特征)+ side_input(静态特征)+ aux_input(辅助特征),需使用Keras Functional API |
| Skip Connection | 将concat后的原始输入x0与经过Dense层后的x通过短接连接 |
| 网络结构 | Dense → BN → Dropout → Dense → BN → Dropout,常规全连接堆叠 |
| Embedding处理 | 类别特征经Embedding后需Flatten才能与数值特征Concatenate |
| 动态特征选择 | Web Traffic TOP8方案中DNN仅使用8个趋势型动态特征,效果出奇地好 |
| 架构建议 | 参考Kaggle上类似场景的NN结构,直接迁移并微调 |
十一、取整技巧(整数型目标变量后处理)
| 维度 | 说明 |
|---|---|
| 问题背景 | 流量/销量等目标变量本质是整数,但NN回归输出为浮点数 |
| 阈值截断 | 预测值小于offset*offset时直接置为0,消除极小预测值 |
| 取整操作 | 对最终预测结果做 round() 取整 |
| 效果 | Web Traffic方案中,取整后SMAPE显著降低 |
| 核心优势 | 零成本的后处理技巧,对整数型目标变量的预测任务普遍有效 |
十二、神经网络交叉验证集成
| 维度 | 说明 |
|---|---|
| 核心思路 | 训练多个NN模型(不同随机种子/不同fold),对预测结果取中位数 |
| Web Traffic实例 | 设置NBAG=20,训练20个NN模型,最终取20个预测结果的中位数 |
| 与Snapshot Ensemble | Snapshot Ensemble是另一种NN集成方法:训练100轮,取最后10轮的模型快照做集成 |
| NN的随机性问题 | NN训练过程中随机性对结果影响明显,集成可有效降低方差 |
| 实现方式 | final_pred = np.median(predictions, axis=0) |
十三、时序竞赛的做赛节奏
| 维度 | 说明 |
|---|---|
| 初期 | 赛题理解 + Baseline跑通,精度收益最大 |
| 中期 | 数据分析 + 特征工程 + 模型选择,持续精度提升 |
| 后期 | 模型集成 + 超参数调优,精度收益逐渐减小 |
| 调参时机 | 调参应放在最后阶段,不是首要步骤 |
| 验证优先 | 每次尝试都应在验证集上评估,确认有效后再提交线上 |
十四、深度学习时序模型进阶
N-BEATS
| 维度 | 说明 |
|---|---|
| 核心思想 | 纯前向网络堆叠,每层包含两个残差分支:趋势分支(多项式)和季节性分支(傅里叶) |
| 双残差结构 | 层间残差连接(反向) + 层内残差连接(前向) |
| 可解释性 | 趋势和季节性分量可单独可视化 |
| 竞赛表现 | M4竞赛冠军方案,单变量预测SOTA |
| 适用场景 | 单变量时序预测,趋势和季节性明显的序列 |
N-HiTS
| 维度 | 说明 |
|---|---|
| 核心改进 | 在N-BEATS基础上引入多速率信号采样和层级结构 |
| 多速率 | 不同层处理不同频率的信号(高层低频/趋势,低层高频/细节) |
| 优势 | 比N-BEATS参数更少,长序列预测更准确 |
| 适用场景 | 长序列多步预测 |
PatchTST
| 维度 | 说明 |
|---|---|
| 核心思想 | 将时序数据切分为Patch(类似ViT对图像的处理),用Transformer建模 |
| Patch切分 | 将长度L的序列切为N个长度P的Patch,步长S |
| 通道独立 | 每个变量独立建模,避免多变量间的噪声干扰 |
| 优势 | 比传统Transformer时序模型更高效,长序列预测SOTA |
| 适用场景 | 多变量长序列预测 |
TimesNet
| 维度 | 说明 |
|---|---|
| 核心思想 | 将1D时序变换为2D张量,用2D卷积捕捉多周期内和周期间变化 |
| FFT周期发现 | 用快速傅里叶变换自动发现序列中的主要周期 |
| 2D卷积 | 在2D张量上用Inception模块提取特征 |
| 优势 | 同时捕捉周期内模式(行方向)和周期间模式(列方向) |
| 竞赛表现 | 2023年时序预测榜单SOTA |
Informer / Autoformer / FEDformer
| 模型 | 核心改进 | 适用场景 |
|---|---|---|
| Informer | ProbSparse注意力,O(LlogL)复杂度 | 长序列预测 |
| Autoformer | 自相关机制替代自注意力,分解趋势+季节 | 趋势季节性明显 |
| FEDformer | 频域注意力,傅里叶/小波变换 | 频域特征明显 |
时序深度模型选择决策
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 短序列单变量 | LSTM / N-BEATS | 成熟稳定 |
| 长序列多步预测 | PatchTST / N-HiTS | 长序列SOTA |
| 多周期序列 | TimesNet | 自动发现周期 |
| 多变量预测 | PatchTST(通道独立) | 避免变量间噪声 |
| 趋势季节性明显 | Autoformer / N-BEATS | 显式分解趋势季节 |
| 快速实验 | LSTM / GRU | 实现简单 |