# M4 sequential draft and series prediction

[简体中文](m4_draft_model.zh_cn.md) · [Workbench](../draft_predictions.en.html)

Choose teams, five players (including registered substitutes), BO1/3/5, map side and first-pick team independently. Confirm each next pick/ban, or follow sequential top choices. After 20 actions, supply the winner; update the score and carry all previous picks into bilateral Fearless locks. Bans do not carry over. BO3 ends at two wins; BO5 at three. Substitutions between games, undo, stored distributions for every action, and JSON export are supported.

The target is **observed next coach choice**, not optimal play or match victory. All legal next-champion probabilities sum to one; later simulated probabilities condition on earlier simulated choices. M1 tournament presence, M3 role-specific all-open choice, and M4 next-action probabilities have different denominators.

The separate [neutral draft and lineup assessment](../neutral_draft.en.html) page has no team/player selection. Win estimates are enabled only there.

## Architecture

Two regularized conditional softmax heads, one for picks and one for bans: `P(c|state)=softmax(beta·features(c)/T)` over legal champions. Fifty candidate features, no named champion offsets. Compare 33/47/50-feature linear models, then grouped CatBoost ranking trees and blends using pre-Worlds Top3 under a log-loss constraint. Tree heads add a nonlinear score to the linear term; temperature cannot change ranking. A third study keeps the linear anchor and trains residual trees from that baseline. It was proposed after observing the previous retrospective regression; parameters remain selected before Worlds, but this is not a preregistered independent experiment. A fourth study compares opening/first-phase/second-phase policies, each regularized toward the shared linear head, after diagnosing weak second-phase bans. Stage architecture and shrinkage are selected before Worlds. Finally, seven nonempty equal-weight probability ensembles of the linear, tree-blend and residual champions are compared before Worlds, normalizing each member over legal candidates before averaging. Repeated architecture exploration makes the final audit exploratory and retrospective. Historical action timing, blind comfort, revealed opponents and phase interactions are learned from cutoff-frozen opportunities. M1 pick+ban demand is separated from M3 personal deviations. Practice/ranked response enters through frozen M1, without a second handcrafted bonus. Every prefix integrates injective role assignments rather than receiving the final played roles.

Season-specific team/opponent behavior is shrunk by ten weighted opportunities; training and preference decay use 45 days with existing M2 importance, pre-match strength, event balancing, patch and game-one factors. Historic M2 models are rebuilt at the feature cutoff. Relationship outcomes and co-selection remain distinct. Directional bottom-pair evidence counts only role-choice opportunities after a partner is revealed and the candidate is still legal, including pairs chosen zero times. Effective sample size controls shrinkage toward the other-partner baseline. A separate feature learns consecutive-turn bottom completion. Only extra consecutive-pick urgency is reduced and capped. Actual conditional pair evidence is retained; unconditional public meta no longer imposes a hard ranking after a partner is revealed. Settings are selected before Worlds and documented in pair_guard_selection.json. The final revision adds shrunk absolute conditional choice frequency, effective support and frequency-by-lift interaction, addressing rare pairs with high relative lift but low absolute use. All three are zero for bans; the frozen previous ban champion remains a pre-Worlds comparator. Bottom lane uses the entire four-champion matchup, never a sum of independent ADC and support wins. Current ranked 26.20 calibration is limited to S16. S15 inputs never include current practice or current guides.

Composition uses role-specific observed damage shares (missing remains unknown). Stage preference contrasts adjusted 15-minute lane terms with adjusted 35+ minute outcome residuals, then summarizes each team's selections within that season. Conditioning on duration is biased; this is not a causal combat-power curve. Official dated kit/type text provides frontline and engage capability proxies, as soft terms rather than mandatory requirements.

Observed score and remaining horizon drive reserve and allow-and-burn features; BO1 and match point disable the extra reserve horizon. Only an actual pick consumes a champion. Observational decisions cannot prove an intentional burn strategy; this is not a solved sequential game or reinforcement-learning policy. Classic legality is supported, but the choice policy is trained on Full Fearless and Classic probabilities are out of domain.

## Training and audit

831 candidate games from July 2025 onward include all 84 Worlds games. Train through September 14, select regularization and temperature September 15–October 13. Use the first 56 play-in/Swiss games to calibrate M1 and train the new head; keep 28 knockout games out of new M4 fitting/calibration. Calibration combines 20 M1 pseudo-games with observed role picks and bans, excluding the row's whole series. After evaluation, refit all 84 with leave-series-out calibration for S16 transfer. Only shared parameters transfer; S15 champion heat is not copied into S16.

**Repeated retrospective conditional audit, not independent blind validation**: these knockout games were inspected during the previous M4 iteration; existing M1/M3 versions and M2 hyperparameters already used S15 feedback. Teacher-forced next-action metrics do not measure exact 20-action sequence accuracy. Unsupported historical roles and interrupted prefixes are recorded in `case_audit.json`, not silently treated as successes.

Flex-role assignment preserves uncertainty but has no separate validation of the strategic benefit of hiding a lane. This version does not solve multi-step baiting or lane-swap games.

|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.


Lower log loss/Brier is better. Top1 ECE measures confidence of the top candidate, not reliable calibration of every rare champion. Baselines retain role timing and legality; ablation heads are refitted on identical data. Whole-series 90% bootstrap log-loss intervals: pick [2.6746309334616476, 2.8955885964247505], ban [2.7047987631737667, 2.8731961660280594]; only seven knockout series limit uncertainty estimates.

## Final shared coefficients

Shared linear score coefficients only; selected stage-specific coefficients are in model.json phase_heads and phase_selection.json; tree interactions are stored in model.json, with nonlinear_selection.json and residual_selection.json documenting selection. Not probability percentage points. Reserve/burn signs are learned, not forced.

|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|


## Reproduce

Restore existing release data and current updates first. Required: M3 prepared/cases_v7_45/presence anchors; frozen M1; developer SQLite and official historical kits; five-season M2 game/lane files; champion damage observations. Python NumPy/SciPy/Pillow/CatBoost (1.2.10 for this run) and upstream dependencies are required. Current cutoff: 2026-10-14T20:15:19.013880+00:00. M4 uses the refreshed M1/M3 and existing M2; its own build does not alter upstream files. Four recent DCGI games still lack full independent draft-order corroboration. Missing practice accounts are not zeros. S16 has no outcome validation.

```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
```


The offline `results/m4/data.js` snapshot must be regenerated when upstream inputs change. `input_manifest.json` records hashes; training caches are not viewer dependencies. The frozen 47-feature comparator is in models/draft/inputs/relative_pair_baseline; the current build compares its ban head without silently rerunning earlier exploration. S15 confounds map color with draft order; this version learns draft-order effects only and records/displays map side without a separately identified coefficient. No GitHub push is performed by this build. Portrait and icon rights remain with their owners.

## Research and official rules

- [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.
