guidance.md•3.65 kB
好,我来给你一个**从 0 到 1**可执行的路线图(假设你已经有:原始数据+50个feature+label〔大涨/非大涨〕)。
目标是:**做一个稳定的二分类模型(XGBoost),逐步筛选出高价值特征**。
---
# 📘 执行步骤指南
## Step 0. 数据准备
1. **保证时间顺序**:按交易日排序,不能 shuffle(避免信息泄漏)。
2. **划分训练/验证/测试**:
* Train:最早 70% 数据
* Valid:中间 15% 数据
* Test:最新 15% 数据(严格模拟未来)
(可尝试时间滚动交叉验证 `TimeSeriesSplit`)
3. **处理缺失值**:XGBoost 可自动处理 NaN,但建议先检查是否有系统性缺失。
4. **标准化/分桶(可选)**:对于偏态特征(如量能、波动),做 winsorization(截尾)或 log 转换。
---
## Step 1. 初始建模(全特征)
1. 用 XGBoost 二分类器 (`XGBClassifier`) 训练全 50 个特征。
2. 参数初始推荐(防过拟合):
```python
params = {
"n_estimators": 2000,
"learning_rate": 0.05,
"max_depth": 4,
"min_child_weight": 5,
"subsample": 0.8,
"colsample_bytree": 0.8,
"reg_alpha": 0.1,
"reg_lambda": 2,
"objective": "binary:logistic",
"eval_metric": "aucpr",
}
```
3. 使用 `early_stopping_rounds=100`,验证集早停。
4. 记录以下指标:
* **PR-AUC**(处理类别不平衡更合适)
* **Top-k Precision / Recall**(比如 Top 5% 样本是否包含大涨股票)
* **KS 值**(衡量区分度)
---
## Step 2. 特征重要性评估
1. 训练后,提取 **SHAP 值**(推荐用 `shap` 库),得到每个特征的平均贡献度。
2. 计算 **跨期稳定性**:
* 在不同折(train/valid/test)上分别算 SHAP 排名。
* 选取在各期 **排名前 20 且排名波动小**的特征。
3. 检查特征间的相关性(Spearman/Pearson):
* 若 |ρ| ≥ 0.9 → 说明强相关 → 留排名高的一个。
---
## Step 3. 逐步消融(由多到少)
1. 从 **全 50 特征 → 精简 30 → 精简 15 → 精简 10**:
* 每次去掉排名末尾的 10 个特征。
* 重新训练模型,记录验证集 PR-AUC、Top-k Precision。
* 若性能下降 < 1% → 说明这些特征贡献不大,可以安全去掉。
2. 最终目标:保留 **10\~12 个稳健特征**(便于解释 + 泛化)。
---
## Step 4. 模型定型 & 阈值选择
1. 用最终选定的特征集,重新训练完整模型(train+valid),测试集做最终评估。
2. 选择决策阈值:
* 用验证集预测概率 `p`,计算不同阈值下的 Precision / Recall。
* 结合策略目标:
* 如果只想抓极端大涨 → 选 Precision 高的阈值(可能 Recall 低)。
* 如果想覆盖更多 → 选 Recall 高的阈值。
* 可用 **Youden’s J (TPR−FPR 最大)** 或 **F1/PR-AUC 最优** 来自动定阈值。
---
## Step 5. 回测与监控
1. 把模型信号转成策略:
* 例如:当天收盘后预测,若 `p > 阈值` → 第二天开盘买入,持有 N 日。
2. 做回测:看 **累计收益、最大回撤、胜率、IC/RankIC**。
3. 线上运行时:每隔 1 个月重新训练/更新模型,检查特征重要性漂移。
---
# ✅ 总结(执行路径)
1. 数据准备 → Train/Valid/Test 时间切分
2. XGBoost 全特征初训 → 得到基线表现
3. SHAP/Permutation + 相关性分析 → 初步筛特征
4. 逐步消融 → 压缩到 10\~12 个核心特征
5. 调阈值 → 找到 Precision-Recall 的平衡点
6. 回测 → 评估实际收益曲线
7. 部署 → 持续监控 + 更新
---