学习检查清单
📋 学习目标检查
✅ 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_rate 0.01~0.1 控制收敛速度 num_leaves 31~127 控制模型复杂度 max_depth 6~10 防止过拟合 feature_fraction 0.8 特征采样 bagging_fraction 0.8 样本采样 lambda_l1 0.1 L1 正则 lambda_l2 0.1 L2 正则 -
能正确创建 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
✅ 能回答的问题
-
为什么量化投资偏爱 Boosting 而不是 Bagging?
- Boosting 更适合捕捉微弱信号
- 能逐步降低偏差
- 在量化场景中表现更好
-
为什么不能用随机划分时序数据?
- 会导致数据泄露(未来信息)
- 不符合实际投资场景
- 模型性能虚高
-
Purging 和 Embargo 的作用是什么?
- Purging: 删除训练集末尾,避免标签包含未来信息
- Embargo: 验证集开头空出几天,作为缓冲
- 两者结合,更严格地防止信息泄露
-
IC 和 MSE 哪个更重要?
- IC 更重要,因为量化只关心排序
- MSE 衡量精确度,不适合量化场景
- IC 能直接反映预测能力
-
如何判断模型是否过拟合?
- 训练集 IC 远高于验证集 IC
- 使用早停机制
- 增加正则化
- 减少特征数量
-
特征重要性分析的意义是什么?
- 理解模型决策逻辑
- 识别有效因子
- 剔除冗余特征
- 提升模型性能
📚 推荐学习路径
🟢 初学者路径
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 model3. IC 评估
def evaluate_ic(y_pred, y_true):
ic, _ = pearsonr(y_pred, y_true)
rank_ic, _ = spearmanr(y_pred, y_true)
return ic, rank_ic4. 特征重要性
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加权)
- 投资组合构建方法
- 回测框架使用
- 风险指标计算 (夏普比率、最大回撤等)
祝学习顺利! 🎉