# M4 逐手BP与系列赛预测

[English](m4_draft_model.en.md) · [打开工作台](../draft_predictions.html) · [全部误差](../models/draft/artifacts/training_results.json)

[无队伍BP与阵容胜率](../neutral_draft.html) 使用独立页面与模型，队伍页面不显示阵容胜率。

## 功能与概率口径

选双方队伍及五名首发（含已收录替补），选BO1/3/5、地图方与第一手选取权。逐步显示所有合法英雄的禁用/选取概率；可以确认任何候选，也可按每一步最高概率推演本局。完成20手后由用户录入胜方，增加比分并进入下一局。BO5一方达到3胜、BO3达到2胜即结束。局间可替换选手；前面所有局双方实际选出的英雄在Full Fearless里不可再选或禁，之前的ban不会继承。支持撤销、历史每手完整概率回看与JSON导出。

**M4预测教练下一手行为，不是求解最优阵容，也不预测胜方。** 概率以当前已显示BP、选手阵容、比分和全局锁定为条件。每手全部合法候选概率之和为100%。M1整届赛事每局参与率、M3某分路全部开放选择概率与此处概率不同。自动路径不是无条件整套阵容概率。

## 模型结构

采用两个共享参数的条件softmax排序头，分别学习选取和禁用；无按英雄名字硬设的加分或强制一抢。每手对合法集合L计算 `P(c|state) = exp(beta·features(c)/T) / sum_L exp(beta·features/T)`。50项候选特征，包括历史手次偏好、先出倾向、对位亮出和阶段交互。先比较33/47/50特征线性模型，再比较CatBoost分组排序树及其与线性模型的混合；各头按赛前窗口Top3及log loss约束选择。温度T只校准概率，不改变排名。最终若使用树，得分为线性部分加树的联合响应，不再仅为 beta·features。第三轮再比较保留线性基础得分、通过训练 baseline 仅学习剩余误差的树模型；参数仍在赛前窗口选择。该结构是在观察第二轮回顾性退步后提出，不属于预先注册的独立实验。第四轮针对第二轮禁用较弱的问题，比较开局一抢、第一轮和第二轮分别拟合的策略，各阶段通过正则向共享模型收缩。模型类型与收缩强度仍按赛前窗口选择。最后比较线性、树混合与剩余误差模型的7种非空等权概率集成；每个成员先在合法候选上归一化，再平均，不连续搜索权重。选型仍用赛前窗口。多轮方案是在反复诊断后提出，因此最终结果仅是探索性回顾评估。

1. **M1热度与M3偏好**：用选取和禁用共同反映的版本需求，而非仅看已选次数；M3长期偏好、英雄池和个人表现已在其上游输出中。M4使用M3相对公共需求的偏离，近期排位练习和韩服响应沿M1进入，不再人为叠加一次。
2. **真实的摇摆不确定性**：只用此前已选英雄，枚举合法的一对一分路分配并边缘化。不会把该局最后实际分路提前喂入预测。罕见角色必须已有赛前支持；真实选取落在支持之外会计入覆盖缺口。
3. **交手与优先级**：按赛季重置队伍统计，比较同一队伍对该对手与通常行为的差别，以10个加权机会收缩小样本；考虑双方需求、争抢对方熟悉英雄、分路先后、第二轮针对性、上一局ban和当前比分。交手表是队伍行为关联，不能识别教练的真实动机。
4. **M2与完整下路**：职业关系模型按历史截止重建，控制版本、地图方、赛前队伍实力、单英雄/选手等背景。跨路表现关联与共同选择倾向分开。下路搭配使用有方向的可用机会统计：仅计算搭档已亮出、候选未被禁用/选走/全局BP耗尽时的该分路选择；包括有机会但零次选取的组合。按有效样本量向其他搭档背景收缩，另学习连续两手补齐下路的倾向。只降低并限制额外连续补齐奖励；真实条件搭配收益保留，不再按总体热度强行把已亮搭档的常用配对压到其他英雄之下。参数由赛前验证误差选择，详情见 pair_guard_selection.json。最终修正加入收缩后的绝对条件选取频率、有效样本支持及频率与相对提升的交互；相对提升大不再被当成绝对搭配流行。三项在禁用时均为0，禁用头在赛前验证中与冻结的上一轮模型对照选择。不得把条件下路选择频率当成下一手概率。ADC＋辅助对ADC＋辅助使用完整四英雄模型，不将两条独立胜率相加。对方双人组未确定时不会假装知道完整对线。S16用当前M2系数及其小幅排位校准；26.20排位不会进入S15特征。
5. **阵容与阶段**：按英雄×分路的过去实测物理/魔法/真实伤害比例计算组成；缺失保持未知。前期用调整后的15分钟对线项，长局用35分钟以上的英雄表现相对总体表现的差异，合成前后期偏好轴，再按赛季统计队伍选择。长局条件胜率有选择偏差，不等于因果强度曲线。前排和开团由历史官方英雄类型/技能文字构造能力代理，仅软性调整，不要求每队必须具备。
6. **系列赛保留与消耗**：特征结合已知比分、当前局数、剩余可能局数、己方需求/替代稀缺程度及对方选出机会。单局或已到赛点时额外保留项关闭；不读取真实最终系列赛长度。模型可以学到保留，也可以学到优先兑现强势英雄。只有英雄实际被选出才会消耗它；“故意放出让以后不用ban”是候选解释，不能从观察数据认定每次放出都出于该意图。此版没有多步博弈最优解。

历史样本沿用M2的赛事重要性、赛前平均实力、赛事规模平衡、版本距离与首局权重；近期偏好与M4训练使用45天半衰期。关系项使用既有M2选定的较长半衰期。Classic只作为关系、伤害等历史证据；动作训练只用已确认Full Fearless。界面Classic仅切换合法性，概率属未验证的外推。

## S15训练与实测

候选 **831局**（2025年7月起，含84局世界赛），严格使用20手实际顺序。7月至9月14日训练，9月15日至世界赛前选择正则与温度。世界赛前56局入围赛/瑞士轮用于赛后热度校准和训练；**28局淘汰赛保留为M4参数的条件检验**。M1校准为20个M1伪样本与真实分路pick/ban计数的收缩组合；每个训练系列排除自身全部局，淘汰赛校准不使用淘汰赛标签。检验后使用全部84局的排除自身系列校准重新拟合共享参数，供S16使用；S15英雄的校准数值不会直接搬到S16。

**这不是独立盲测**：既有M1/M3与M2超参数以前已经参考S15反馈。这里隔离的是新M4及其校准中的淘汰赛标签，不能抹去上游的历史选择影响。测试用真实先前BP逐手回放（teacher forcing），不是声称连续20手都能猜对。

组合修正及后续重训已经多次查看同一批淘汰赛结果，因此这里是重复回顾性诊断，不再是未触碰的留出检验。摇摆项保留分路不确定性，但未单独验证隐藏分路的战略收益；没有多步诱导或换路博弈求解。

|Head|Model|Actions|Top 1|Top 3|Top 5|Log loss|Brier|ECE|
|---|---|---:|---:|---:|---:|---:|---:|---:|
|pick|meta_only|280|15.7%|37.5%|53.2%|3.1051|0.9320|0.0552|
|pick|meta_m3|280|18.9%|42.9%|56.1%|2.9808|0.9126|0.0236|
|pick|full|280|26.1%|50.7%|63.6%|2.7969|0.8770|0.0793|
|ban|meta_only|280|20.4%|40.0%|56.4%|3.1464|0.9231|0.0654|
|ban|meta_m3|280|21.1%|43.2%|56.1%|2.9683|0.9102|0.0306|
|ban|full|280|21.8%|47.9%|63.6%|2.7856|0.8902|0.0466|

合计 / Combined Top3: **49.29% (276/560)**; target 50%. Retrospective only.

Selected architectures: pick = bounded_pair_completion_linear, ban = conditional_tree_linear_blend.


Top N为真实英雄进入前N候选的比例；log loss/Brier越低越好。Top1 ECE衡量首位置信度与命中率的差异，不保证每个小概率英雄都校准良好。三个版本使用相同候选合法性与潜在分路机制，baseline仍含分路先后；不是完全随机基线。淘汰赛log loss的90%整系列重抽样区间：选取 [2.6746309334616476, 2.8955885964247505]；禁用 [2.7047987631737667, 2.8731961660280594]。只有7个淘汰赛系列，区间稳定性有限。覆盖排除逐条保存在case_audit.json，不用删去真实难例来冒充完整命中。

## 共享参数

以下只列最终全S15拟合的共享线性部分系数；若选择分阶段模型，各阶段实际系数另见 model.json 的 phase_heads 和 phase_selection.json；树模型还有联合响应，详见 model.json、nonlinear_selection.json 和 residual_selection.json。这些系数不是概率百分点；正负应结合特征定义解读。保留/消耗系数可为负，不预设“BO5必须留强势英雄”。

|Feature|Pick|Ban|
|---|---:|---:|
|meta_demand|0.7711|0.1529|
|player_preference|0.7434|0.6116|
|role_order|0.3965|0.0000|
|team_pick|0.1952|0.0000|
|opponent_pick|0.0151|0.0000|
|opponent_ban|0.0000|0.0641|
|team_ban|0.0000|0.0690|
|enemy_demand|-0.0875|0.4093|
|deny_comfort|0.2936|0.3271|
|contested_urgency|-0.0736|0.1439|
|flexibility|-0.2906|0.0504|
|lane_advantage|0.1044|0.0000|
|duo_advantage|-0.1050|0.0000|
|lane_attention|0.1338|0.0000|
|co_selection|0.3239|0.0000|
|bot_pair|0.3505|0.0000|
|synergy|-0.0581|0.0000|
|cross_counter|0.2232|0.0000|
|damage_balance|0.7071|0.0000|
|team_stage|-0.0111|0.0000|
|stage_cohesion|-0.0051|0.0000|
|frontline|0.1377|0.0000|
|engage|0.2424|0.0000|
|early_meta|1.3083|0.6118|
|second_phase_threat|0.0412|0.0341|
|series_save|-0.1690|-0.0621|
|allow_burn|0.0000|0.1668|
|break_combo|0.0456|0.2377|
|keep_own|0.0000|-1.0460|
|repeat_ban|0.5019|0.5718|
|score_pressure|-0.0411|0.0374|
|role_scarcity|-0.1188|0.0169|
|bot_turn_completion|0.3746|0.0000|
|historical_step_preference|0.4054|0.2274|
|team_step_preference|0.0359|0.0580|
|counterpick_ready|1.2704|0.0000|
|historical_blind_preference|0.8487|0.0000|
|late_meta_demand|-0.0453|-0.1342|
|late_player_preference|-0.0785|0.0000|
|late_role_order|-0.2141|0.0000|
|late_enemy_demand|0.3237|0.0341|
|late_bot_pair|-0.0163|0.0000|
|late_bot_turn_completion|-0.0120|0.0000|
|opening_meta|0.2662|0.0000|
|opening_preference|-0.0087|0.0000|
|pair_consecutive_interaction|0.2835|0.0000|
|phase_one_pair|0.3668|0.0000|
|absolute_partner_choice|0.7474|0.0000|
|partner_effective_support|-0.1126|0.0000|
|absolute_relative_pair_interaction|0.6768|0.0000|


## 输入、复现与边界

当前预测截止 **2026-10-14T20:15:19.013880+00:00**，19队103名已收录选手。冻结本轮更新后的M1/M3和既有M2输出及哈希；M4构建过程不再修改上游。S15中地图方与先后手重合，因此当前只拟合先后手效应；界面地图方仅展示与记录。本次不自动向GitHub推送。最新4局DCGI的完整独立BP顺序核验仍待补；练习数据缺失账号不会被当成零练习。官方定妆照和英雄头像版权归原权利人。

复现需要先还原项目既有Release数据包与最新本地数据：M3 prepared/cases_v7_45/presence_anchors、M1预测、开发SQLite、五季M2游戏/对线、英雄伤害观测及官方技能快照。`case_audit.json`记录覆盖，`input_manifest.json`记录来源哈希；大缓存不是页面依赖。此前47特征阶段的验证锚点保存在 models/draft/inputs/relative_pair_baseline；当前复现流程使用其冻结禁用头作对照，不会静默重跑早期探索。Python需NumPy/SciPy/Pillow/CatBoost（本轮1.2.10），历史上游依赖按各模块说明安装。

```powershell
python -m models.draft.snapshots
python -m models.draft.refit_priority
python -m models.draft.forecast
python -m models.draft.report
python -m models.draft.verify
python -m models.draft.render
node models/draft/verify_dashboard.cjs
python tools/build_unified_results.py
```


工作台为离线HTML，`results/m4/data.js`是独立冻结快照；更新上游后必须重新生成M4，不会在浏览器悄悄换参数。研究参考见下，借鉴结构与问题定义，未复制论文准确率或声称复现其神经网络。

- [CatBoost training baseline](https://catboost.ai/docs/en/concepts/python-reference_pool#baseline): initializes each candidate's training score from the learned linear anchor, enabling residual interaction fitting.
- [CatBoost ranking objectives](https://catboost.ai/docs/en/concepts/loss-functions-ranking): QuerySoftMax and top-3 YetiRank/NDCG are evaluated with each BP action as a candidate group. Browser inference uses exported numeric trees.
- [DraftRec, WWW 2022 — paper](https://arxiv.org/abs/2204.12750), [official implementation](https://github.com/dojeon-ai/DraftRec): separates player preference from draft-context interactions. Its ranked benchmark is not a professional Fearless benchmark and its reported accuracy is not comparable here.
- [BPCoach](https://arxiv.org/abs/2311.05912): motivates team familiarity, playstyle, patch context and multi-game planning; does not establish the magnitude or intent of our reserve feature.
- [Riot: Fearless in 2025](https://lolesports.com/en-PH/news/fearless-draft-takes-over-2025): previously picked champions become unavailable to both teams. Bans alone do not consume a champion for later games.
- [Riot: First Selection in 2026](https://lolesports.com/en-AU/news/season-start-2026-lol-esports): map side and first/second pick are separate choices.
