学习检查清单

📋 学习目标检查

✅ Module 3.1: Gradient Boosting 原理

  • 理解 Boosting 的迭代纠错机制

    • 能解释 Tree₁ → Tree₂ → Tree₃ 的迭代过程
    • 理解残差学习 r₁ = y - ŷ₁ 的含义
    • 知道最终预测 = ŷ₁ + ŷ₂ + ŷ₃ + …
  • 知道 Bagging vs Boosting 的区别

    • 并行 vs 串行
    • 降低方差 vs 降低偏差
    • 不容易过拟合 vs 需要早停控制
  • 了解 LightGBM 的三大创新

    • GOSS (梯度单边采样):保留大梯度,采样小梯度
    • EFB (互斥特征捆绑):合并稀疏特征
    • Leaf-wise 生长:每次分裂增益最大的叶子
  • 理解为什么量化偏爱 Boosting

    • 信号很弱(IC 只有 0.03~0.08)
    • 特征稀疏(不是所有特征都有用)
    • 需要快速迭代(每天都有新数据)

✅ Module 3.2: 时序数据划分

  • 知道为什么不能随机划分时序数据

    • 理解数据泄露的概念
    • 能举例说明随机划分的问题
    • 知道因果性约束的重要性
  • 能正确实现时序划分

    dates = X.index.get_level_values(0)
    unique_dates = dates.unique().sort_values()
    train_mask = dates <= unique_dates[int(n_dates * 0.7)]
    valid_mask = (dates > unique_dates[int(n_dates * 0.7)]) & (dates <= unique_dates[int(n_dates * 0.85)])
    test_mask = dates > unique_dates[int(n_dates * 0.85)]
  • 了解 Purging 和 Embargo 的作用

    • Purging: 删除训练集末尾 N 天
    • Embargo: 验证集开头额外空出几天
    • 能实现完整的 Purging + Embargo
  • 能实现 Walk-Forward 验证

    • 理解滚动窗口验证的原理
    • 能实现 Walk-Forward 验证代码
    • 能分析多个窗口的 IC 变化

✅ Module 3.3: LightGBM 训练

  • 了解关键参数的含义

    参数推荐值作用
    learning_rate0.01~0.1控制收敛速度
    num_leaves31~127控制模型复杂度
    max_depth6~10防止过拟合
    feature_fraction0.8特征采样
    bagging_fraction0.8样本采样
    lambda_l10.1L1 正则
    lambda_l20.1L2 正则
  • 能正确创建 Dataset

    train_data = lgb.Dataset(X_train.values, label=y_train.values,
                             feature_name=list(FEATURES.keys()),
                             categorical_feature=[])
    valid_data = lgb.Dataset(X_valid.values, label=y_valid.values,
                             reference=train_data)
  • 能训练模型并使用早停

    model = lgb.train(
        params,
        train_data,
        num_boost_round=500,
        valid_sets=[train_data, valid_data],
        callbacks=[
            lgb.early_stopping(stopping_rounds=30),
            lgb.log_evaluation(period=50)
        ]
    )
  • 能保存和加载模型

    model.save_model('model.txt')
    model = lgb.Booster(model_file='model.txt')

✅ Module 3.4: IC/ICIR 评估

  • 理解为什么用 IC 而不是 MSE

    • 量化只关心排序,不关心绝对值
    • IC 衡量排序能力,MSE 衡量精确度
    • 预测 A=0.05, B=0.03 vs A=0.02, B=0.01 → MSE 不同,但排序相同,IC 相同
  • 能计算 IC 和 Rank IC

    from scipy.stats import pearsonr, spearmanr
     
    ic, _ = pearsonr(y_pred, y_true)
    rank_ic, _ = spearmanr(y_pred, y_true)
  • 能计算 ICIR 和 IC 胜率

    icir = ic_series.mean() / ic_series.std()
    win_rate = (ic_series > 0).mean()
  • 能评估模型质量

    IC 值模型质量
    > 0.10🌟 顶级 (非常罕见)
    > 0.05✅ 优秀
    > 0.03✅ 有效
    > 0.02⚠️ 一般
    < 0.02❌ 较弱
    ICIR 值稳定性
    > 0.5🌟 非常稳定
    > 0.3✅ 较稳定
    > 0.2⚠️ 一般
    < 0.2❌ 不稳定

✅ Module 3.5: 特征重要性分析

  • 知道三种重要性计算方式

    方式速度可靠性推荐度
    Split中等⚠️ 一般
    Gain✅ 推荐
    Permutation最高✅ 最可靠
  • 能获取和解读特征重要性

    importance = model.feature_importance(importance_type='gain')
    importance_df = pd.DataFrame({
        'feature': feature_names,
        'importance': importance
    }).sort_values('importance', ascending=False)
  • 能实现特征选择策略

    • 阈值选择
    • Top-K 选择
    • 递归特征消除 (RFE)
  • 能分析特征相关性

    corr_matrix = X[features].corr()
    high_corr_pairs = []
    for i, feat1 in enumerate(features):
        for feat2 in features[i+1:]:
            corr = corr_matrix.loc[feat1, feat2]
            if abs(corr) > threshold:
                high_corr_pairs.append((feat1, feat2, corr))

🎯 实践能力检查

✅ 能独立完成的项目

  • 项目1: 基础模型训练

    • 加载数据,正确划分训练集/验证集/测试集
    • 训练 LightGBM 模型
    • 评估模型 IC 和 ICIR
    • 打印完整评估报告
  • 项目2: 时序数据划分

    • 实现 Walk-Forward 验证
    • 实现 Purging 和 Embargo
    • 分析多个窗口的 IC 变化
    • 识别模型是否需要重训练
  • 项目3: 特征工程

    • 计算多种特征重要性(Split, Gain, Permutation)
    • 分析特征相关性
    • 实现特征选择
    • 验证特征选择的效果
  • 项目4: 模型优化

    • 调优关键参数
    • 实现早停机制
    • 防止过拟合
    • 提升模型 IC 和 ICIR

✅ 能回答的问题

  1. 为什么量化投资偏爱 Boosting 而不是 Bagging?

    • Boosting 更适合捕捉微弱信号
    • 能逐步降低偏差
    • 在量化场景中表现更好
  2. 为什么不能用随机划分时序数据?

    • 会导致数据泄露(未来信息)
    • 不符合实际投资场景
    • 模型性能虚高
  3. Purging 和 Embargo 的作用是什么?

    • Purging: 删除训练集末尾,避免标签包含未来信息
    • Embargo: 验证集开头空出几天,作为缓冲
    • 两者结合,更严格地防止信息泄露
  4. IC 和 MSE 哪个更重要?

    • IC 更重要,因为量化只关心排序
    • MSE 衡量精确度,不适合量化场景
    • IC 能直接反映预测能力
  5. 如何判断模型是否过拟合?

    • 训练集 IC 远高于验证集 IC
    • 使用早停机制
    • 增加正则化
    • 减少特征数量
  6. 特征重要性分析的意义是什么?

    • 理解模型决策逻辑
    • 识别有效因子
    • 剔除冗余特征
    • 提升模型性能

📚 推荐学习路径

🟢 初学者路径

1. 理解 Gradient Boosting 原理
   ↓
2. 学习时序数据划分
   ↓
3. 训练第一个 LightGBM 模型
   ↓
4. 计算 IC 和 ICIR
   ↓
5. 分析特征重要性

🟡 进阶路径

1. 掌握 IC 优化训练
   ↓
2. 学习在线学习
   ↓
3. 实现 Walk-Forward 验证
   ↓
4. 掌握高级评估方法
   ↓
5. 进行稳定性分析

🔴 实战路径

1. 从实际项目出发
   ↓
2. 遇到问题查文档
   ↓
3. 理论原理学习
   ↓
4. 实践应用
   ↓
5. 持续优化迭代

🔧 工具箱

必备 Python 库

import lightgbm as lgb  # LightGBM
import pandas as pd       # 数据处理
import numpy as np        # 数值计算
from scipy.stats import pearsonr, spearmanr  # IC 计算
import matplotlib.pyplot as plt  # 可视化
import shap  # SHAP 解释

常用代码片段

1. 数据划分

def train_val_test_split(X, y, dates, train_ratio=0.7, val_ratio=0.15):
    unique_dates = np.unique(dates)
    n_dates = len(unique_dates)
    train_end_idx = int(n_dates * train_ratio)
    val_end_idx = int(n_dates * (train_ratio + val_ratio))
 
    train_mask = dates <= unique_dates[train_end_idx]
    valid_mask = (dates > unique_dates[train_end_idx]) & (dates <= unique_dates[val_end_idx])
    test_mask = dates > unique_dates[val_end_idx]
 
    return (X[train_mask], X[valid_mask], X[test_mask]), (y[train_mask], y[valid_mask], y[test_mask])

2. 模型训练

def train_lightgbm(X_train, y_train, X_valid, y_valid, params):
    train_data = lgb.Dataset(X_train, label=y_train)
    valid_data = lgb.Dataset(X_valid, label=y_valid, reference=train_data)
 
    model = lgb.train(
        params,
        train_data,
        num_boost_round=500,
        valid_sets=[train_data, valid_data],
        callbacks=[
            lgb.early_stopping(stopping_rounds=30),
            lgb.log_evaluation(period=50)
        ]
    )
 
    return model

3. IC 评估

def evaluate_ic(y_pred, y_true):
    ic, _ = pearsonr(y_pred, y_true)
    rank_ic, _ = spearmanr(y_pred, y_true)
    return ic, rank_ic

4. 特征重要性

def get_feature_importance(model, feature_names, importance_type='gain'):
    importance = model.feature_importance(importance_type=importance_type)
    importance_df = pd.DataFrame({
        'feature': feature_names,
        'importance': importance
    }).sort_values('importance', ascending=False)
    return importance_df

🚀 下一步学习

完成 Week 3 后,你已经掌握了:

✅ Gradient Boosting 原理 ✅ 时序数据正确划分 ✅ LightGBM 模型训练 ✅ 量化模型评估 (IC/ICIR) ✅ 特征重要性分析与选择

下一步:Week 4 - 策略回测

你将学习:

  • 交易策略原理 (Top-K、等权重、IC加权)
  • 投资组合构建方法
  • 回测框架使用
  • 风险指标计算 (夏普比率、最大回撤等)

祝学习顺利! 🎉