# M2：全档案关系模块与 #15 验收

这是可复现的历史关系模块，不是因果克制保证，也不是实时更新或 M4 决策器。对线/跨路使用全档案；未知赛制作为缺失背景保留，共选机会只使用规则有依据且完整选禁的系列。当前 M1/M3 预测不改写。

## 全范围覆盖与缺失

输入 16,437 场，纳入 15,669 场；每一场都有审计状态，未静默丢失。上游已排除 25 场明确盲选。

| 状态 | 比赛 |
|---|---:|
| incomplete_or_unverified_series_join | 671 |
| admitted | 15669 |
| reserved_evaluation_partition | 84 |
| duplicate_alias | 13 |

| 赛制背景 | 比赛 |
|---|---:|
| unknown | 12523 |
| classic | 209 |
| full_fearless | 2937 |

DCGI 的 39 场归入同一个测试事件块，没有猜测逐系列 ID；这种过度分组防止同一实际系列跨分组，不声称已核验所有系列或赛事已结束。

unknown 不是 Classic 标签。LEC 2024 标准 Tournament Draft 是范围限定解释，保留镜像规则书的残留年份/修订未知问题。专业合法禁用名单仍未公开恢复；这是已披露的数据未知，不通过关闭 issue 抹掉。

| 分组 | 比赛 | 组（系列或保守事件块） |
|---|---:|---:|
| train | 12114 | 6128 |
| selection | 618 | 243 |
| calibration | 401 | 142 |
| test | 2536 | 979 |

前七月 2025 拟合、七月至八月选择、九月至年底校准、2026 回顾诊断。所有系列保持完整，标签完成前不更新 Elo。已声明的原始数值冲突按目标掩码，不填零。来源/别名/规则/缺失逐项见 coverage.json 与 input_manifest.json。

## 对线全消融（测试）

| 单位/分钟 | 模型 | 选中 | 目标 | 有效N | MAE | RMSE | 名义90%区间覆盖 | 低支持N |
|---|---|---|---|---:|---:|---:|---:|---:|
| top/10 | context | 否 | cs_difference | 2388 | 10.47 | 13.26 | 89.8% | 873 |
| top/10 | context | 否 | gold_difference | 2388 | 395.34 | 504.33 | 83.3% | 873 |
| top/10 | context | 否 | xp_difference | 2388 | 323.96 | 431.81 | 93.0% | 873 |
| top/10 | champions | 是 | cs_difference | 2388 | 9.80 | 12.42 | 90.5% | 873 |
| top/10 | champions | 是 | gold_difference | 2388 | 364.87 | 473.99 | 84.9% | 873 |
| top/10 | champions | 是 | xp_difference | 2388 | 316.05 | 425.10 | 92.0% | 873 |
| top/10 | hierarchical | 否 | cs_difference | 2388 | 9.81 | 12.43 | 90.4% | 873 |
| top/10 | hierarchical | 否 | gold_difference | 2388 | 365.99 | 474.69 | 85.6% | 873 |
| top/10 | hierarchical | 否 | xp_difference | 2388 | 317.52 | 425.99 | 91.9% | 873 |
| top/15 | context | 否 | cs_difference | 2371 | 15.06 | 18.78 | 88.3% | 866 |
| top/15 | context | 否 | gold_difference | 2099 | 698.89 | 891.39 | 83.1% | 768 |
| top/15 | context | 否 | xp_difference | 2276 | 664.23 | 856.21 | 84.2% | 829 |
| top/15 | champions | 是 | cs_difference | 2371 | 14.45 | 18.16 | 87.1% | 866 |
| top/15 | champions | 是 | gold_difference | 2099 | 662.69 | 851.25 | 84.0% | 768 |
| top/15 | champions | 是 | xp_difference | 2276 | 657.27 | 849.60 | 83.1% | 829 |
| top/15 | hierarchical | 否 | cs_difference | 2371 | 14.46 | 18.19 | 87.1% | 866 |
| top/15 | hierarchical | 否 | gold_difference | 2099 | 665.11 | 853.24 | 82.6% | 768 |
| top/15 | hierarchical | 否 | xp_difference | 2276 | 658.67 | 851.25 | 83.2% | 829 |
| mid/10 | context | 否 | cs_difference | 2388 | 9.00 | 11.36 | 85.2% | 818 |
| mid/10 | context | 否 | gold_difference | 2388 | 373.62 | 483.39 | 85.4% | 818 |
| mid/10 | context | 否 | xp_difference | 2388 | 330.19 | 417.44 | 84.7% | 818 |
| mid/10 | champions | 否 | cs_difference | 2388 | 8.38 | 10.61 | 82.1% | 818 |
| mid/10 | champions | 否 | gold_difference | 2388 | 365.79 | 471.62 | 86.1% | 818 |
| mid/10 | champions | 否 | xp_difference | 2388 | 327.88 | 413.50 | 83.5% | 818 |
| mid/10 | hierarchical | 是 | cs_difference | 2388 | 8.46 | 10.72 | 83.3% | 818 |
| mid/10 | hierarchical | 是 | gold_difference | 2388 | 367.21 | 475.75 | 85.3% | 818 |
| mid/10 | hierarchical | 是 | xp_difference | 2388 | 327.11 | 412.75 | 85.0% | 818 |
| mid/15 | context | 否 | cs_difference | 2369 | 12.77 | 16.12 | 87.9% | 813 |
| mid/15 | context | 否 | gold_difference | 2100 | 626.22 | 804.11 | 88.5% | 728 |
| mid/15 | context | 否 | xp_difference | 2265 | 559.33 | 712.61 | 89.6% | 779 |
| mid/15 | champions | 否 | cs_difference | 2369 | 11.98 | 15.15 | 88.1% | 813 |
| mid/15 | champions | 否 | gold_difference | 2100 | 615.65 | 789.26 | 88.4% | 728 |
| mid/15 | champions | 否 | xp_difference | 2265 | 553.40 | 705.67 | 89.7% | 779 |
| mid/15 | hierarchical | 是 | cs_difference | 2369 | 12.13 | 15.34 | 86.6% | 813 |
| mid/15 | hierarchical | 是 | gold_difference | 2100 | 619.37 | 794.75 | 88.3% | 728 |
| mid/15 | hierarchical | 是 | xp_difference | 2265 | 554.60 | 706.28 | 87.5% | 779 |
| bot_duo/10 | context | 否 | bot_cs_difference | 2388 | 10.02 | 12.87 | 86.6% | 2334 |
| bot_duo/10 | context | 否 | duo_gold_difference | 2388 | 585.13 | 763.97 | 83.1% | 2334 |
| bot_duo/10 | context | 否 | duo_xp_difference | 2388 | 415.44 | 534.49 | 88.3% | 2334 |
| bot_duo/10 | champions | 是 | bot_cs_difference | 2388 | 9.89 | 12.68 | 89.5% | 2334 |
| bot_duo/10 | champions | 是 | duo_gold_difference | 2388 | 576.04 | 754.04 | 83.1% | 2334 |
| bot_duo/10 | champions | 是 | duo_xp_difference | 2388 | 410.83 | 528.76 | 88.6% | 2334 |
| bot_duo/10 | duo | 否 | bot_cs_difference | 2388 | 9.88 | 12.67 | 88.9% | 2334 |
| bot_duo/10 | duo | 否 | duo_gold_difference | 2388 | 575.23 | 753.14 | 83.3% | 2334 |
| bot_duo/10 | duo | 否 | duo_xp_difference | 2388 | 410.83 | 528.78 | 88.6% | 2334 |
| bot_duo/10 | hierarchical | 否 | bot_cs_difference | 2388 | 9.90 | 12.69 | 88.6% | 2334 |
| bot_duo/10 | hierarchical | 否 | duo_gold_difference | 2388 | 575.13 | 753.11 | 83.3% | 2334 |
| bot_duo/10 | hierarchical | 否 | duo_xp_difference | 2388 | 410.99 | 528.86 | 88.6% | 2334 |
| bot_duo/15 | context | 是 | bot_cs_difference | 2383 | 14.36 | 18.45 | 84.8% | 2329 |
| bot_duo/15 | context | 是 | duo_gold_difference | 2007 | 1049.12 | 1359.64 | 84.5% | 1960 |
| bot_duo/15 | context | 是 | duo_xp_difference | 2272 | 709.00 | 899.08 | 88.7% | 2220 |
| bot_duo/15 | champions | 否 | bot_cs_difference | 2383 | 14.35 | 18.36 | 86.3% | 2329 |
| bot_duo/15 | champions | 否 | duo_gold_difference | 2007 | 1042.42 | 1349.20 | 83.7% | 1960 |
| bot_duo/15 | champions | 否 | duo_xp_difference | 2272 | 705.66 | 895.52 | 87.9% | 2220 |
| bot_duo/15 | duo | 否 | bot_cs_difference | 2383 | 14.35 | 18.37 | 86.1% | 2329 |
| bot_duo/15 | duo | 否 | duo_gold_difference | 2007 | 1041.31 | 1348.37 | 83.4% | 1960 |
| bot_duo/15 | duo | 否 | duo_xp_difference | 2272 | 705.47 | 895.40 | 87.7% | 2220 |
| bot_duo/15 | hierarchical | 否 | bot_cs_difference | 2383 | 14.37 | 18.41 | 85.9% | 2329 |
| bot_duo/15 | hierarchical | 否 | duo_gold_difference | 2007 | 1041.12 | 1348.28 | 83.4% | 1960 |
| bot_duo/15 | hierarchical | 否 | duo_xp_difference | 2272 | 705.35 | 895.40 | 87.7% | 2220 |

## 系列误差差异区间

固定选中模型相对 context：正数代表 RMSE 减少。2,000 次完整系列／保守赛事块成对 bootstrap，非克制系数置信区间；缺失标签逐目标处理，不重新用测试结果选模型。

| 单位/分钟 | 目标 | 有效N | 系列 | RMSE减少 | 95%系列区间 |
|---|---|---:|---:|---:|---|
| top/10 | cs_difference | 2388 | 940 | 0.84 | [0.62, 1.03] |
| top/10 | gold_difference | 2388 | 940 | 30.34 | [23.86, 36.81] |
| top/10 | xp_difference | 2388 | 940 | 6.71 | [2.91, 10.31] |
| top/15 | cs_difference | 2371 | 937 | 0.62 | [0.34, 0.88] |
| top/15 | gold_difference | 2099 | 908 | 40.14 | [28.74, 52.18] |
| top/15 | xp_difference | 2276 | 931 | 6.61 | [0.93, 11.97] |
| mid/10 | cs_difference | 2388 | 940 | 0.64 | [0.52, 0.75] |
| mid/10 | gold_difference | 2388 | 940 | 7.64 | [4.29, 11.08] |
| mid/10 | xp_difference | 2388 | 940 | 4.69 | [1.95, 7.38] |
| mid/15 | cs_difference | 2369 | 938 | 0.78 | [0.65, 0.92] |
| mid/15 | gold_difference | 2100 | 907 | 9.36 | [5.19, 13.73] |
| mid/15 | xp_difference | 2265 | 926 | 6.33 | [2.73, 10.14] |
| bot_duo/10 | bot_cs_difference | 2388 | 940 | 0.20 | [0.03, 0.37] |
| bot_duo/10 | duo_gold_difference | 2388 | 940 | 9.94 | [6.02, 14.06] |
| bot_duo/10 | duo_xp_difference | 2388 | 940 | 5.73 | [3.61, 7.98] |
| bot_duo/15 | bot_cs_difference | 2383 | 940 | 0.00 | [0.00, 0.00] |
| bot_duo/15 | duo_gold_difference | 2007 | 897 | 0.00 | [0.00, 0.00] |
| bot_duo/15 | duo_xp_difference | 2272 | 929 | 0.00 | [0.00, 0.00] |

## 全局关系消融

| 模型 | 选中 | 测试N | Log loss | Brier |
|---|---|---:|---:|---:|
| context | 否 | 2536 | 0.6497 | 0.2285 |
| champions | 是 | 2536 | 0.6437 | 0.2260 |
| same | 否 | 2536 | 0.6443 | 0.2265 |
| enemy | 否 | 2536 | 0.6441 | 0.2263 |
| full | 否 | 2536 | 0.6483 | 0.2282 |

| 交互候选 | 对单英雄基线Log loss减少 | 95%系列／事件块区间 |
|---|---:|---|
| same | -0.000678 | [-0.004063, 0.002837] |
| enemy | -0.000470 | [-0.004469, 0.003661] |
| full | -0.004617 | [-0.010421, 0.001451] |

选择结果为 champions。同队/敌对交互未通过选择时，默认查询返回停用/未知，不拿原始胜率或共现叫克制；experimental 可以检查有支持的正则候选。

## 机会模型：赛制隔离

| 赛制 | 权重 | 选择机会 | 测试机会 | 测试Top5 | 测试Log loss |
|---|---:|---:|---:|---:|---:|
| classic | 0 | 0 | 0 | 无样本 | 无样本 |
| full_fearless | 0.5 | 5850 | 6540 | 17.1% | 4.6760 |

Classic 的本局屏蔽不携带前局英雄，Full Fearless 屏蔽双方此前小局选用英雄。缺少完整历史或赛制未知时不输出机会评分。客户端 roster 只防止未来英雄跨版本混入；调用方可提供带来源和时间的精确可用池。未见英雄保留有标记的平滑先验与零支持，不伪装成测得的协同。相对池权重不是校准过的合法下一手概率。

## 稀疏对位候选视图

下表按支持度显示前 60 项，完整候选均在 relationships.json。四英雄顺序明确；规范排序第一组减第二组。数值只为 hierarchical 残差组件，不是总对线预测；未选中模型的候选不自动启用。

| 单位/分钟 | 规范对位ID（双人=bot,sup） | 比赛 | 系列 | 收缩权重 | 按赛制支持 | 调整残差组件 |
|---|---|---:|---:|---:|---|---|
| top/10 | 58 对 897 | 261 | 226 | 0.723 | {'unknown': 231, 'classic': 6, 'full_fearless': 24} | cs_difference=1.5, gold_difference=31.1, xp_difference=26.0 |
| top/15 | 58 对 897 | 261 | 226 | 0.723 | {'unknown': 231, 'classic': 6, 'full_fearless': 24} | cs_difference=1.7, gold_difference=55.9, xp_difference=26.6 |
| top/10 | 58 对 150 | 248 | 230 | 0.713 | {'unknown': 237, 'classic': 2, 'full_fearless': 9} | cs_difference=-0.1, gold_difference=-12.9, xp_difference=-1.3 |
| top/15 | 58 对 150 | 248 | 230 | 0.713 | {'unknown': 237, 'classic': 2, 'full_fearless': 9} | cs_difference=-0.5, gold_difference=-9.1, xp_difference=-6.9 |
| mid/10 | 163 对 268 | 233 | 218 | 0.959 | {'unknown': 131, 'classic': 15, 'full_fearless': 87} | cs_difference=-1.2, gold_difference=-16.0, xp_difference=-6.2 |
| mid/15 | 163 对 268 | 233 | 218 | 0.823 | {'unknown': 131, 'classic': 15, 'full_fearless': 87} | cs_difference=-0.6, gold_difference=4.5, xp_difference=2.7 |
| top/10 | 24 对 897 | 196 | 184 | 0.662 | {'unknown': 188, 'full_fearless': 8} | cs_difference=-1.2, gold_difference=-58.3, xp_difference=-24.6 |
| top/15 | 24 对 897 | 196 | 184 | 0.662 | {'unknown': 188, 'full_fearless': 8} | cs_difference=-1.7, gold_difference=-94.4, xp_difference=-58.2 |
| top/10 | 150 对 897 | 167 | 158 | 0.625 | {'unknown': 147, 'classic': 6, 'full_fearless': 14} | cs_difference=-0.2, gold_difference=0.7, xp_difference=-20.1 |
| top/15 | 150 对 897 | 167 | 158 | 0.625 | {'unknown': 147, 'classic': 6, 'full_fearless': 14} | cs_difference=0.1, gold_difference=-12.1, xp_difference=-12.4 |
| top/10 | 58 对 516 | 163 | 156 | 0.620 | {'unknown': 143, 'classic': 12, 'full_fearless': 8} | cs_difference=1.0, gold_difference=21.6, xp_difference=-9.3 |
| top/15 | 58 对 516 | 163 | 156 | 0.620 | {'unknown': 143, 'classic': 12, 'full_fearless': 8} | cs_difference=0.8, gold_difference=15.8, xp_difference=-21.8 |
| mid/10 | 103 对 163 | 157 | 147 | 0.940 | {'unknown': 90, 'classic': 7, 'full_fearless': 60} | cs_difference=0.9, gold_difference=111.1, xp_difference=47.9 |
| mid/15 | 103 对 163 | 157 | 147 | 0.758 | {'unknown': 90, 'classic': 7, 'full_fearless': 60} | cs_difference=1.0, gold_difference=82.2, xp_difference=4.5 |
| mid/10 | 61 对 268 | 156 | 143 | 0.940 | {'unknown': 147, 'classic': 2, 'full_fearless': 7} | cs_difference=-0.1, gold_difference=-10.7, xp_difference=-19.8 |
| mid/15 | 61 对 268 | 156 | 143 | 0.757 | {'unknown': 147, 'classic': 2, 'full_fearless': 7} | cs_difference=-0.2, gold_difference=-60.5, xp_difference=-58.2 |
| top/10 | 41 对 150 | 151 | 143 | 0.602 | {'unknown': 149, 'full_fearless': 2} | cs_difference=-0.3, gold_difference=-13.9, xp_difference=-29.8 |
| top/15 | 41 对 150 | 151 | 143 | 0.602 | {'unknown': 149, 'full_fearless': 2} | cs_difference=-0.9, gold_difference=-34.2, xp_difference=-58.1 |
| top/10 | 24 对 58 | 147 | 139 | 0.595 | {'unknown': 138, 'classic': 1, 'full_fearless': 8} | cs_difference=1.5, gold_difference=45.5, xp_difference=30.3 |
| top/15 | 24 对 58 | 147 | 139 | 0.595 | {'unknown': 138, 'classic': 1, 'full_fearless': 8} | cs_difference=2.2, gold_difference=105.7, xp_difference=43.0 |
| mid/10 | 103 对 268 | 145 | 139 | 0.935 | {'unknown': 103, 'classic': 4, 'full_fearless': 38} | cs_difference=-0.8, gold_difference=0.4, xp_difference=-26.2 |
| mid/15 | 103 对 268 | 145 | 139 | 0.744 | {'unknown': 103, 'classic': 4, 'full_fearless': 38} | cs_difference=-1.4, gold_difference=9.1, xp_difference=-38.6 |
| top/10 | 58 对 79 | 136 | 133 | 0.576 | {'unknown': 121, 'classic': 6, 'full_fearless': 9} | cs_difference=1.3, gold_difference=34.1, xp_difference=9.4 |
| top/15 | 58 对 79 | 136 | 133 | 0.576 | {'unknown': 121, 'classic': 6, 'full_fearless': 9} | cs_difference=2.2, gold_difference=91.4, xp_difference=18.4 |
| mid/10 | 18 对 42 | 136 | 105 | 0.932 | {'unknown': 119, 'classic': 13, 'full_fearless': 4} | cs_difference=-2.3, gold_difference=-21.2, xp_difference=-30.6 |
| mid/15 | 18 对 42 | 136 | 105 | 0.731 | {'unknown': 119, 'classic': 13, 'full_fearless': 4} | cs_difference=-2.5, gold_difference=8.2, xp_difference=-41.8 |
| top/10 | 150 对 887 | 132 | 124 | 0.569 | {'unknown': 120, 'full_fearless': 12} | cs_difference=1.4, gold_difference=38.8, xp_difference=38.0 |
| top/15 | 150 对 887 | 132 | 124 | 0.569 | {'unknown': 120, 'full_fearless': 12} | cs_difference=1.8, gold_difference=77.6, xp_difference=59.0 |
| mid/10 | 268 对 517 | 129 | 123 | 0.928 | {'unknown': 110, 'classic': 3, 'full_fearless': 16} | cs_difference=2.4, gold_difference=12.4, xp_difference=55.6 |
| mid/15 | 268 对 517 | 129 | 123 | 0.721 | {'unknown': 110, 'classic': 3, 'full_fearless': 16} | cs_difference=2.7, gold_difference=14.3, xp_difference=47.7 |
| mid/10 | 42 对 268 | 128 | 121 | 0.928 | {'unknown': 111, 'classic': 8, 'full_fearless': 9} | cs_difference=0.6, gold_difference=-1.1, xp_difference=-32.7 |
| mid/15 | 42 对 268 | 128 | 121 | 0.719 | {'unknown': 111, 'classic': 8, 'full_fearless': 9} | cs_difference=1.5, gold_difference=50.5, xp_difference=0.3 |
| mid/10 | 268 对 777 | 126 | 121 | 0.926 | {'unknown': 81, 'classic': 3, 'full_fearless': 42} | cs_difference=-1.9, gold_difference=-69.5, xp_difference=-72.2 |
| mid/15 | 268 对 777 | 126 | 121 | 0.716 | {'unknown': 81, 'classic': 3, 'full_fearless': 42} | cs_difference=-1.9, gold_difference=-77.3, xp_difference=-96.4 |
| bot_duo/10 | 221,117 对 236,267 | 123 | 104 | 0.552 | {'unknown': 121, 'full_fearless': 2} | bot_cs_difference=0.2, duo_gold_difference=-17.4, duo_xp_difference=-11.5 |
| bot_duo/15 | 221,117 对 236,267 | 123 | 104 | 0.552 | {'unknown': 121, 'full_fearless': 2} | bot_cs_difference=0.7, duo_gold_difference=19.0, duo_xp_difference=30.6 |
| top/10 | 58 对 266 | 121 | 111 | 0.548 | {'unknown': 101, 'classic': 6, 'full_fearless': 14} | cs_difference=1.5, gold_difference=60.0, xp_difference=-5.7 |
| top/15 | 58 对 266 | 121 | 111 | 0.548 | {'unknown': 101, 'classic': 6, 'full_fearless': 14} | cs_difference=2.1, gold_difference=76.4, xp_difference=24.4 |
| top/10 | 68 对 897 | 117 | 107 | 0.539 | {'unknown': 88, 'classic': 5, 'full_fearless': 24} | cs_difference=1.7, gold_difference=66.4, xp_difference=28.6 |
| top/15 | 68 对 897 | 117 | 107 | 0.539 | {'unknown': 88, 'classic': 5, 'full_fearless': 24} | cs_difference=2.1, gold_difference=89.1, xp_difference=45.3 |
| mid/10 | 112 对 268 | 117 | 107 | 0.921 | {'unknown': 100, 'full_fearless': 17} | cs_difference=-1.3, gold_difference=-57.9, xp_difference=-79.0 |
| mid/15 | 112 对 268 | 117 | 107 | 0.701 | {'unknown': 100, 'full_fearless': 17} | cs_difference=-1.1, gold_difference=-107.9, xp_difference=-46.9 |
| top/10 | 887 对 897 | 115 | 114 | 0.535 | {'unknown': 112, 'classic': 2, 'full_fearless': 1} | cs_difference=0.6, gold_difference=-3.9, xp_difference=13.3 |
| top/15 | 887 对 897 | 115 | 114 | 0.535 | {'unknown': 112, 'classic': 2, 'full_fearless': 1} | cs_difference=0.1, gold_difference=-3.6, xp_difference=5.2 |
| top/10 | 150 对 164 | 114 | 109 | 0.533 | {'unknown': 109, 'classic': 2, 'full_fearless': 3} | cs_difference=0.9, gold_difference=-10.9, xp_difference=-4.9 |
| top/15 | 150 对 164 | 114 | 109 | 0.533 | {'unknown': 109, 'classic': 2, 'full_fearless': 3} | cs_difference=1.4, gold_difference=33.2, xp_difference=41.1 |
| mid/10 | 84 对 268 | 114 | 109 | 0.919 | {'unknown': 106, 'classic': 2, 'full_fearless': 6} | cs_difference=-0.8, gold_difference=8.0, xp_difference=4.8 |
| mid/15 | 84 对 268 | 114 | 109 | 0.695 | {'unknown': 106, 'classic': 2, 'full_fearless': 6} | cs_difference=-0.3, gold_difference=16.0, xp_difference=14.5 |
| top/10 | 24 对 150 | 110 | 101 | 0.524 | {'unknown': 99, 'full_fearless': 11} | cs_difference=0.7, gold_difference=14.4, xp_difference=24.5 |
| top/15 | 24 对 150 | 110 | 101 | 0.524 | {'unknown': 99, 'full_fearless': 11} | cs_difference=1.4, gold_difference=31.7, xp_difference=61.5 |
| mid/10 | 61 对 112 | 109 | 105 | 0.916 | {'unknown': 87, 'full_fearless': 22} | cs_difference=-0.7, gold_difference=34.1, xp_difference=-12.4 |
| mid/15 | 61 对 112 | 109 | 105 | 0.686 | {'unknown': 87, 'full_fearless': 22} | cs_difference=-1.3, gold_difference=37.2, xp_difference=-57.3 |
| top/10 | 266 对 897 | 107 | 96 | 0.517 | {'unknown': 100, 'classic': 1, 'full_fearless': 6} | cs_difference=1.9, gold_difference=32.2, xp_difference=19.9 |
| top/15 | 266 对 897 | 107 | 96 | 0.517 | {'unknown': 100, 'classic': 1, 'full_fearless': 6} | cs_difference=2.8, gold_difference=52.5, xp_difference=28.9 |
| top/10 | 126 对 150 | 106 | 97 | 0.515 | {'unknown': 105, 'full_fearless': 1} | cs_difference=0.8, gold_difference=-2.8, xp_difference=15.7 |
| top/15 | 126 对 150 | 106 | 97 | 0.515 | {'unknown': 105, 'full_fearless': 1} | cs_difference=1.4, gold_difference=23.9, xp_difference=58.7 |
| mid/10 | 18 对 268 | 103 | 92 | 0.912 | {'unknown': 96, 'classic': 5, 'full_fearless': 2} | cs_difference=1.0, gold_difference=33.6, xp_difference=-44.3 |
| mid/15 | 18 对 268 | 103 | 92 | 0.673 | {'unknown': 96, 'classic': 5, 'full_fearless': 2} | cs_difference=0.3, gold_difference=72.8, xp_difference=-23.0 |
| mid/10 | 13 对 61 | 97 | 89 | 0.907 | {'unknown': 77, 'full_fearless': 20} | cs_difference=-0.3, gold_difference=43.7, xp_difference=-4.4 |
| mid/15 | 13 对 61 | 97 | 89 | 0.660 | {'unknown': 77, 'full_fearless': 20} | cs_difference=-1.5, gold_difference=-10.5, xp_difference=-94.8 |

## #15 逐项验收

| 要求 | 实现 | 保留的数据限制 |
|---|---|---|
| 既有顶级队比赛档案、国际赛/已完赛 DCGI，覆盖缺失记账 | 全档案逐局审计，至少一方年度成员；对线/跨路保留未知赛制 | 未核验完整系列连接的比赛隔离；DCGI 全部已收录对局作为一个保守测试块，84 场保留评估分区，13 个别名重复；冻结至指定旧快照，非实时采集 |
| 排除盲选、Classic / Full Fearless 机会分开 | 上游显式盲选已排除；已知规则分别拟合；未知/混合/不完整选禁系列不训练机会 | 历史规则及修订有缺失；未猜成 Classic，LEC 2024 证据保留修订 caveat |
| 实际分路、10/15分钟 CS/金币/经验，完整下路双人对位 | 原目标、独立有限标签分母、四英雄键、ADC CS/双人金币经验、完整消融 | 物理站线/换线/游走/介入仍未知 |
| 稀疏共享/收缩与不确定性 | 正则英雄/双人项、规范对位残差收缩、低支持分组、单次表现残差区间与系列误差差异区间 | 不提供伪造克制系数 CI；跨年区间覆盖不保证 |
| 共选、同队、敌对关系分开；控制版本/双方/实力/单英雄基线 | 独立共选；全局五模型；版本类别/主次版本、赛区/赛制/赛前 Elo；负结果保留回退 | 未知赛制可能残留混杂；全部关系为调整后关联而非因果克制 |
| 职业为主，少量同口径排位辅助，禁用选手英雄胜率/KDA加分 | 独立 2493 场迁移验证已交付；无稳定金币收益，当前贡献零；M2 特征不含个人英雄胜率/KDA | 排位逐局队列与段位未知；不声明全部大师以上 |
| 版本/英雄/候选分路/当前阵容查询，支持与来源，队伍倾向接口 | 统一 JSON API；可行联合分路边缘化；当前前缀与带来源的可用池；team 历史上下文 | 默认客户端 roster 不是官方禁用名单；调用方池未经项目独立核验，不虚报合法概率或 T1 优线偏好 |
| 时间/完整系列验证、去重、脚本/参数/结构化结果/可视化/覆盖报告；不覆盖 M1 | 分组切分、完成后标签、固定回放、哈希、全部消融与本报告；M1/M3 文件不改 | 2026 已被查看过，仅回顾诊断；M4 接入与未来未见窗口为后续工作 |

开发交付已经覆盖 #15 的模块、验证、接口和报告要求。缺失已按数据状态保留在合同中，不声称恢复全部历史官方规则/名单；生产排位权重零、未通过选择的关系回退、无个人英雄胜率/KDA加分。下一阶段是 M4 接入与新时间窗口验证。
