# S15 世界赛英雄选取模型、验证与参数校准

已完成角色分层建模、世界赛实际数据核验、赛前数据重建预测、系列赛隔离检验与赛后全量校准。最终输出按**整个世界赛**汇总；包括入围赛 4 局、瑞士轮 52 局、淘汰赛 28 局，共 84 局。另提供 80 局正赛口径作参考。S16 尚未预测。

[交互式结果](results.html) · [全部英雄预测与实际数据](champion_predictions_vs_actual.json) · [留给 S16 的参数](parameters_s16_prior.json) · [数据核验](worlds_verification.json) · [模型检查](model_validation.json)

## 统计口径

选取热度同时输出两个指标：选取率 = 英雄被选局数 / 全赛事局数；综合 BP 热度 =（被选局数 + 被主动禁用局数）/ 全赛事局数。禁用率单独列出。无畏征召导致的前局英雄不可选不计入主动 ban。每局同一英雄至多被选或禁用一次。

平均位置只在英雄被选时计算：主指标是双方合计第 1–10 手选人；辅助指标是完整 20 步 BP 中的选取位置（7–12、17–20）。不是队内 pick1–5，也不是该英雄在某个阶段的平均位置。未被选过的英雄，实际平均位置为 null，不填 0。

模型内部使用 171 个英雄 × 5 个分路 = 855 个状态。分路取最终选手位置，不取 BP 顺序；同一英雄的上单、打野、辅助等分别统计。英雄总体选取率为各分路概率之和；总体平均位置按预测的各分路**选取次数**加权，不能按五条分路简单平均。禁用没有实际分路标签，保留英雄级别统计，不虚构“禁上单英雄”标签。

## 数据与版本

赛前特征仅使用已核验的 2,392 局，截止 2025-10-14 00:00 UTC。世界赛 84 局从原始 OE、gol.gg 逐局页面、Leaguepedia 人工编号 BP 表三方匹配，全部 1,680 个编号 BP 槽位及最终英雄分路、选手、胜者、版本一致，0 未解决差异。每局源链接与表格编号见核验文件。

英雄全集取 [Riot Data Dragon 15.20.1](https://ddragon.leagueoflegends.com/cdn/15.20.1/data/en_US/champion.json)，包含零登场英雄，避免用赛后登场名单挑选建模对象。官方版本名为 25.20；Data Dragon 与 OE 使用 15.xx 命名。新英雄发布前的比赛不纳入该英雄的曝光分母；Yunara 发布日依据 [25.14 官方说明](https://www.leagueoflegends.com/en-ph/news/game-updates/patch-25-14-notes/)。赛事具体启用延迟未逐联赛收集，不等同把发布日期视作正式启用日。

世界赛版本确认与改动来源：[25.19 官方说明](https://www.leagueoflegends.com/en-us/news/game-updates/patch-25-19-notes/)、[25.20 官方说明](https://www.leagueoflegends.com/en-us/news/game-updates/patch-25-20-notes/)。只使用召唤师峡谷相关改动，排除 ARAM、Arena、Doom Bots。实际数据来源：[gol.gg 正赛](https://gol.gg/tournament/tournament-matchlist/Worlds%202025%20Main%20Event/)、[入围赛](https://gol.gg/tournament/tournament-matchlist/Worlds%202025%20Play-in/)、[Leaguepedia 瑞士轮编号表](https://lol.fandom.com/wiki/2025_Season_World_Championship/Main_Event/Picks_and_Bans/Swiss_Stage)、[淘汰赛编号表](https://lol.fandom.com/wiki/2025_Season_World_Championship/Main_Event/Picks_and_Bans/Knockout_Stage)。

## 模型如何处理价值与优先级

历史局权重：

`w = 2^(-距开赛天数 / 半衰期) × exp(-版本衰减 × 相差版本数) × 赛事重要性^α × exp(β × 赛前平均 Elo 标准化值) × 赛事样本量^(-平衡指数) × 首局权重`

权重归一化到有效样本量，使伪计数/平滑参数能够跨赛季比较。赛事基础重要性预设：MSI 1.8、EWC 1.4、First Stand 1.3、资格赛/Road to MSI 1.45、季后赛 1.35、常规赛 1.0、ASI 0.75、升降级 0.4；指数由校准确定。平均实力来自逐局比赛开始前的 Elo，先验 LCK 1600、LPL 1580、LEC 1500、LTA North 1450、LCP 1430，升降级挑战者 1350，其余未知 1460，K=20。先验为模型假设，不是 Riot 官方排名。

选取信号综合分路频率、世界赛参赛队偏好、近期趋势、主动禁用率、版本冲击、按实力调整的胜负残差与分路熵。禁用率既反映受限制程度，也关联潜在英雄强度，关联系数允许为负；它不是 ban 的因果效应。最终联合约束平均每局 10 次选取、每个分路 2 次选取、10 次主动 ban，并使每个英雄的 pick+ban 概率不超过 1。

平均顺位从各英雄各分路的历史顺位收缩估计，再按版本影响和早期 ban/pick 优先级修正。两个位置指标满足 `E[完整BP步数] = E[选取手数] + 6 + 4 × P(第7–10手选取)`，不会把平均手数直接当作完整 BP 步数。

无畏征召使用首局权重与实际历史系列赛局次分布作近似迁移。[Riot 规则说明](https://lolesports.com/en-PH/news/fearless-draft-takes-over-2025)。本模型预测赛事整体边际统计，不是逐局合法 BP 模拟器，不知道未来具体系列赛长度、对手或蓝红方选择。

## 版本数值、技能及机制重要性

已拆成 85 条数值/机制/系统影响分量，见 [版本特征明细](patch_change_features.json) 及 make_patch_features.py。数值分量使用相对对数变化 `log(新/旧)`，冷却缩短反向计分；伤害含比例加成时使用声明的代表 AP/AD 与技能等级。每条乘技能重要性和分路相关系数。

例如 Diana 清野倍率只影响打野状态；Poppy 的清野削弱与全分路 R 冷却分开计分；Azir 的早期清线、充能与 E 伤害分别处理；新机制、清线阈值、装备交互与换线限制使用单独的机制/系统暴露先验。技能重要性、代表 AP/AD 与装备/符文暴露是显式判断，不是已识别的因果效应。英雄级机制响应、数值响应、系统响应由全局参数校准，未给每个英雄塞入赛后专属加分。

只对历史记录尚未包含的改动计额外影响：25.19 分量按该英雄该分路的旧版本样本占比折算；已经使用 25.19 的样本不再重复叠加 25.19 改动。25.20 分量作用于全部赛前记录。

Azir 采用 10 月 9 日官方热修后的 W 比例作为主情景；未独立证实赛事客户端热修包是否完全相同，因此另存原 25.20 情景。[敏感性分析](patch_sensitivity.json) 还包括数值影响 ±25%、关闭机制/系统影响。系统暴露包括部分支持装备/符文的先验，而非收集到的逐局装备使用率。

## 比较与校准结果

这是利用历史数据重建的**回顾性赛前预测**，不是 2025 年真实封存的盲预测。世界赛实际数据仅进入参数优化与评估，不进入赛前频率、Elo、队伍偏好等特征。先验模型、56 局开发集校准、全 84 局赛后重拟合分别保留。20 个自由参数均经过有界搜索与逐坐标调整，原始版本事实和 85 条技能重要性先验不按赛后英雄结果逐条改写。

开发集：入围赛 + 瑞士轮 56 局；隔离检验：淘汰赛 28 局、7 场完整系列赛。系列赛不拆分，避免无畏征召相邻局混进两边。最终全量重拟合使用全部 84 局，因此它的全赛事误差是**样本内拟合误差**，不能用来宣称对 S16 的预测准确率。

|全赛事指标|先验预测|56 局校准参数|84 局全量重拟合（样本内）|
|---|---:|---:|---:|
|综合 BP 热度 RMSE（百分点）|8.891|7.223|7.126|
|选取率 RMSE（百分点）|3.817|3.971|3.709|
|禁用率 MAE（百分点）|3.308|2.618|2.586|
|平均选取顺位 MAE（按实际选取次数加权）|0.905|0.957|0.930|
|平均完整 BP 步数 MAE（按实际选取次数加权）|1.480|1.526|1.512|
|综合热度前 20 名重合数|13.000|16.000|15.000|

|淘汰赛隔离检验|先验预测|56 局校准后|
|---|---:|---:|
|综合 BP 热度 RMSE（百分点）|9.820|10.334|
|选取率 RMSE（百分点）|5.051|5.858|
|禁用率 MAE（百分点）|4.109|4.111|
|平均选取顺位 MAE（按实际选取次数加权）|1.455|1.460|
|平均完整 BP 步数 MAE（按实际选取次数加权）|2.360|2.355|
|综合热度前 20 名重合数|12.000|14.000|

校准没有在隔离检验的所有指标上改善：选取率和 BP 热度 RMSE 变差，平均选取顺位也没有改善；平均完整 BP 步数误差只有很小变化。不能将全量拟合的改善等同于已经证明泛化改善。7 场淘汰赛的样本也很小；[系列赛自助法](holdout_bootstrap.json) 保留改善差值区间。

频率误差对完整 171 英雄计算，其中大量低频/零登场英雄会降低均值；平均位置仅对实际被选英雄计算，另给等英雄权重与按选取次数权重两种误差。[消融与朴素基线](ablations_and_baselines.json) 包括全赛季不加权、只使用 25.18，以及去掉改动、参赛队偏好、价值权重、近期趋势等设置。

## 校准后整体 BP 热度前 20 名

|英雄|预测选取率|实际选取率|预测禁用率|实际禁用率|预测 BP 热度|实际 BP 热度|预测平均选取手数|实际平均选取手数|
|---|---:|---:|---:|---:|---:|---:|---:|---:|
|Azir|7.0%|16.7%|69.1%|65.5%|76.1%|82.1%|2.81|2.79|
|Neeko|23.8%|23.8%|47.5%|42.9%|71.3%|66.7%|4.67|4.25|
|Poppy|14.0%|15.5%|52.3%|53.6%|66.3%|69.0%|5.85|5.92|
|Wukong|22.7%|26.2%|43.1%|33.3%|65.7%|59.5%|2.85|1.64|
|Yunara|23.0%|19.0%|40.5%|69.0%|63.5%|88.1%|4.24|2.06|
|Rumble|23.2%|25.0%|40.0%|14.3%|63.3%|39.3%|2.93|3.62|
|Orianna|26.7%|23.8%|31.4%|54.8%|58.2%|78.6%|2.49|1.50|
|Alistar|30.5%|29.8%|21.9%|29.8%|52.4%|59.5%|5.90|6.60|
|Ambessa|24.1%|22.6%|27.1%|28.6%|51.2%|51.2%|5.26|6.21|
|Jarvan IV|33.0%|26.2%|17.6%|7.1%|50.6%|33.3%|3.36|3.86|
|Rakan|23.4%|26.2%|23.8%|14.3%|47.1%|40.5%|6.63|6.68|
|Aurora|15.1%|20.2%|30.5%|28.6%|45.5%|48.8%|4.27|3.06|
|Vi|22.6%|20.2%|22.4%|21.4%|45.0%|41.7%|3.76|3.41|
|Corki|24.2%|26.2%|20.0%|9.5%|44.2%|35.7%|5.07|6.41|
|Kai'Sa|26.9%|21.4%|17.0%|25.0%|43.9%|46.4%|5.50|5.67|
|Ryze|28.9%|27.4%|14.9%|17.9%|43.8%|45.2%|3.39|3.04|
|Taliyah|20.0%|27.4%|20.0%|21.4%|40.1%|48.8%|3.37|3.83|
|Galio|23.5%|15.5%|16.5%|16.7%|40.0%|32.1%|5.45|6.15|
|Qiyana|9.2%|19.0%|29.2%|33.3%|38.4%|52.4%|4.20|4.38|
|Sivir|18.2%|16.7%|20.1%|19.0%|38.3%|35.7%|5.72|7.36|

## 全部自由参数

|参数|先验|56 局校准|84 局重拟合|范围|
|---|---:|---:|---:|---|
|时间半衰期（天）|45|13.01|15.03|10–160|
|每相差一版的指数衰减|0.25|0.7246|0.6377|0–1.5|
|赛事重要性指数|1|1.696|1.848|0–2|
|赛前实力指数|0.8|1.03|1.113|0–2|
|赛事样本量平衡指数|0.25|0.3129|0.3231|0–0.7|
|世界赛参赛队偏好混合比例|0.45|0.6584|0.6097|0–0.95|
|系列赛首局权重|1.4|1.077|1.126|1–3|
|近期趋势系数|0.4|0.9016|0.5996|0–2|
|禁用率与选取率的关联修正|0.25|-0.4154|-0.3618|-0.6–1.2|
|数值改动响应|1|0.9501|0.8282|0–4|
|英雄机制改动响应|1|0|0|0–3|
|系统/装备/符文改动响应|1|0.9362|0.9567|0–3|
|实力调整后胜负残差响应|0.2|-0.1782|-0.3587|-0.5–1.2|
|分路灵活性响应|0.15|0.2469|0.1706|0–0.8|
|选取分布集中度|1|1.288|1.148|0.65–1.6|
|禁用分布集中度|1|1.278|1.203|0.65–1.6|
|版本改动对平均顺位的响应|1|0.6208|1.134|-2–3|
|平均顺位收缩伪选取数|12|13.96|10.64|1–50|
|早期禁用对选取顺位的响应|0.3|0.5228|1.675|-1.5–2|
|分路频率平滑强度|0.1|0.01|0.3437|0.01–1.5|

时间半衰期校准为 15.03 天，机制响应为 0，说明这个 S15 样本支持近期信息，但没有支持额外主观机制加成。它也可能反映样本偏差和参数共线性，不能推断机制改动真实没有影响。条件参数剖面见 [parameter_profiles.json](parameter_profiles.json)，不是置信区间。

## 给 S16 留下的内容

parameters_s16_prior.json 保存全部 20 个全局参数；同时保留先验及开发集参数，作为更保守的候选。没有英雄专属赛后偏置，没有预测 S16。后续必须重新读取 S16 的参赛队、历史 BP 分路、版本数值、英雄启用情况和赛事规则，再计算特征；不能直接沿用 S15 的英雄概率表。

历史系列赛重采样得到的 95% 区间只描述固定参数下的历史样本波动，不覆盖版本机制误判、比赛中临时 meta 演变或跨赛季迁移风险。单个世界赛尚不能稳定识别全部参数；跨多个赛事/赛季按时间外推验证后，才能更有把握地决定 S16 的参数。

## 复现与文件

依次运行：verify_worlds_data.py → make_patch_features.py → worlds_model.py → audit_worlds_model.py → render_worlds_model_report.py。模型只依赖 numpy；本轮固定随机种子，缓存数据均有哈希。原 OE CSV 与原赛前 BP 档案未覆盖。

- worlds_actual_games.json：核验后的 84 局完整 BP 及分路。
- champion_predictions_vs_actual.json：171 英雄总体与五分路输出。
- parameters_initial.json / parameters_development.json / parameters_s16_prior.json：三个版本的全局参数。
- fitted_data_group_weights.json：每个赛事实际数据权重与有效样本量。
- evaluation.json / holdout_evaluation.json：误差与隔离检验。
- source_hashes.json：实际数据来源文件哈希。
- results.html：可筛选英雄、切换模型、查看分路和参数的结果页面。
