diff --git a/特征研究.md b/特征研究.md new file mode 100644 index 0000000..37f6c92 --- /dev/null +++ b/特征研究.md @@ -0,0 +1,154 @@ +用户问到现在为止的探索中,对**特码可能性排序**比较有用的特征是哪些。 + +我需要回顾所有跑过的模型,看哪些特征持续在重要性 Top 中出现。让我从几次跑的特征重要性提取稳定出现的特征。 + +回顾: + +1. **train_rank.py(RF 49类)**:之前有输出 Top15,但我不记得具体数字。 + +2. **train_lgb.py(LGB multiclass)**:特征重要性 Top10: + - 特码_间隔 (4119) + - 正码_std (3928) + - 正码3_平均值 (3826) + - 前3期特码和 (3718) + - 正码6_平均值 (3574) + - 波色转移_to_1_概率 (3521) + - 正码4_平均值 (3521) + - 正码2_平均值 (3435) + - 正码1_平均值 (3389) + - 正码5_平均值 (3181) + +3. **train_lambdarank.py(v1 49类+13候选特征)**:特征重要性 Top15: + - cand_num (15099) + - cand_gap (6307) + - cand_tail (3567) + - cand_dist_to_sp (3270) + - 波色转移_to_1_概率 (2732) + - 正码_std (2642) + - 正码4_平均值 (2483) + - 特码_间隔 (2476) + - 正码3_平均值 (2368) + - 正码6_平均值 (2349) + - 波色转移_to_2_概率 (2265) + - 正码_sum (2244) + - 大小转移_to_1_概率 (2231) + - 前3期特码和 (2152) + - cand_he (2145) + +4. **train_lambdarank_v2.py(v2 +19候选特征)**:Top15: + - cand_num (24344) + - cand_gap (7118) + - 正码_std (3005) + - 正码6_平均值 (2940) + - 正码2_平均值 (2891) + - 前3期特码和 (2877) + - 特码_间隔 (2705) + - 波色转移_to_3_概率 (2581) + - 正码_sum (2383) + - cand_dist_to_sp (2374) + - 波色转移_to_1_概率 (2358) + - 大小转移_to_1_概率 (2302) + - 总分 (2267) + - 前3期波色组合_码 (2221) + - 波色转移_to_2_概率 (2198) + +让我统计哪些特征在多次训练中持续出现: + +**共享特征(出现在多个模型 Top15)**: +- 正码_std (出现 4 次) +- 前3期特码和 (4 次) +- 正码各位置平均值 (3-5, 6) (多次) +- 特码_间隔 (3 次) +- 波色转移_to_1/2/3 (3 次) +- 大小转移_to_1 (2 次) +- 正码_sum (2 次) +- 总分 (1 次) +- 前3期波色组合_码 (1 次) + +**候选特征**(lambdarank 专用): +- cand_num (号码本身) 出现 2 次,最大头 +- cand_gap (冷热间隔) 出现 2 次 +- cand_tail (尾数) 出现 1 次 +- cand_dist_to_sp (邻域距离) 出现 1 次 +- cand_he (合数) 出现 1 次 + +**两类**: +- **强稳定特征**:所有模型都用到 + - 正码_std(波动率) + - 前3期特码和(跨期信号) + - 特码_间隔(冷热度) +- **候选维度(lambdarank 关键)**: + - cand_num(号码本身属性) + - cand_gap(冷热度) + - cand_dist_to_sp(邻域) + - cand_tail(尾数) + +**重要的洞察**: +- 候选特征 cand_num 和 cand_gap 在 lambdarank 里增益最大——号码本身的"内在属性"和"历史间隔"是排序的关键 +- 跨期信号(前3期特码和、转移概率)也有用 +- 局部统计(正码_std、正码各位置均值)持续有用 + +我应该诚实呈现: +1. 稳定 Top 5 特征 +2. 候选维度最有用的特征 +3. 注意"特征重要性 ≠ 因果预测力"——模型用得多不等于真实有效 + +也应该指出: +- LGB multiclass 和 LGB lambdarank 的 Top 特征不同(lambdarank 重在排序,cand_num 必为最大因为它本身就是候选 ID) +- 稳定性比单次重要性更可信 + +让我写一个清晰的回答。 + +根据 4 次训练的 Top 特征重要性,我把**多次出现的稳定特征**整理出来: + +## 跨模型稳定 Top 特征 + +| 特征 | RF 49类 | LGB 49类 | LGB-rank v1 | LGB-rank v2 | 含义 | +| -------------------- | ------- | ----------- | ----------- | ----------- | ------------ | +| **cand_num** | — | — | 15099 | **24344** | 候选号码本身 | +| **cand_gap** | — | — | 6307 | **7118** | 候选冷热间隔 | +| **正码_std** | — | 3928 | 2642 | 3005 | 正码波动率 | +| **前3期特码和** | — | 3718 | 2152 | 2877 | 跨期信号 | +| **特码_间隔** | — | **4119** | 2476 | 2705 | 当前特码冷热 | +| **正码各位置平均值** | — | 3500-3800×5 | 2300-2500×4 | 2400-2900×4 | 位置局部均值 | +| **波色转移概率** | — | — | 2200-2700×3 | 2100-2600×3 | 跨期波色动态 | + +## 三类最有价值的特征 + +### 1. 候选号码本身的属性(lambdarank 专属) +- `cand_num` (号码值)、`cand_tail` (尾数)、`cand_he` (合数)、`cand_dist_to_sp` (到当前特码距离) +- **增益贡献最大**——因为排名学习直接优化"号码间相对得分" + +### 2. 冷热度(跨期 + 跨候选) +- `cand_gap` (候选冷热) + `特码_间隔` (当前特码冷热) +- **多次稳定 Top 5**——你最初提的"冷热转换"角度被模型持续利用 + +### 3. 跨期结构信号 +- `前3期特码和`、`波色转移_to_X_概率`、`大小转移_to_X_概率` +- **跨期结构**有微弱但稳定贡献 + +## 反过来看:哪些特征没用上 + +lambdarank v2 新增的 6 个特征(`cand_recent5/50/100`、`cand_gap_trend`、`cand_gap_mean50`、`cand_gap_max50`)**没进 Top 15**——可能已被 `cand_gap` 包含。 + +而"异常度"、"高异常阶段"、"偏斜方向"这些基于"统计回归"假设的特征已经被删除——之前在 RF 训练中也没出现 Top15。 + +## 重要提醒 + +**特征重要性 ≠ 因果预测力**。模型使用某个特征频繁,只能说明该特征在历史数据中有统计相关性,**不代表它是真实的因果驱动**。我们看到的"微弱信号"可能只是: + +1. 数据采样偏差(CSV 不完整) +2. 模型对噪声过拟合的副产品 +3. 真正存在但微弱的真实模式 + +## 建议你保留的精简特征集 + +如果将来要精简,可以只保留这些稳定 Top 特征: + +**共享特征(每期)**: +- 正码_std、6 个正码位置均值、前3期特码和、特码_间隔、波色/大小转移概率 + +**候选特征(每期×49 号码)**: +- cand_num、cand_gap、cand_tail、cand_dist_to_sp、cand_he、cand_recent30、cand_neighbor3_K10 + +这套精简特征应该能在保留大部分信号的同时,把 132 维降到约 25 维,提升训练速度和减少过拟合风险。 \ No newline at end of file