Tactical Reroll
⋯

Different models, not more dials: statistical learning on the reviewer letters (T-736)

From reports/tiers/2026-10-06-statlearn.md , rendered when the site is built.

6 Oct 2026, Pacific. tools/statlearn.js; results in build/statlearn/ (git-ignored: features.json and .csv, results.json). Snapshot 8dcd24032d, inputs hash dcd477d8a78c. Base: Track A (tools/ledger-benchmarks/2026-10-05-step34b-baseline.json), wCarry 0. A report: nothing in the ledger moves, no slider, setting or letter changes, and nothing is adopted.

In plain English

The question. For days we have tuned dials on one model: Value per 100 points, about 85–91% of it Kill. It sits near 62% agreement with the reviewers across 16 armies. Jordan asked for structurally different models instead, tested cheaply and honestly. So I built one table of 75 facts about each of 733 units (595 graded), and fitted 34 models of different kinds on it, plus every fact alone.

How it was judged.

The leaderboard (the main ones; the full table is below).

Model16 armies15, no Tyranidsvs ledger on 15 [95%]On Gemini's letters, vs ledger [95%]
List share (popularity; diagnostic only, never a letter)69.667.9+7.8 [−1.0, +15.9]+10.4 [+1.2, +19.2]
Ensemble: ledger Value rank + datasheet model rank (declared before the run)65.563.9+3.9 [+0.4, +7.3]+6.2 [+3.0, +9.8]
Pairwise logistic on each fact's rank within its army65.264.0+4.0 [−0.9, +9.2]+6.5 [+2.0, +11.3]
Datasheet, keywords and support only, no ledger at all64.063.2+3.2 [−3.2, +9.6]+7.4 [+1.3, +13.3]
Kill line alone62.6–+0.8 [−1.2, +3.1] (16)–
The ledger (Track A)61.960.0–(56.7 on Gemini)
Every fact, pairwise logistic (L2 / L1)61.4 / 61.360.4 / 60.1+0.4 / +0.1+4.3 / +5.3 (CI touches 0)
Nearest neighbours across armies61.660.9+0.9 [−4.4, +6.2]–
Ordinal logistic on the letters60.759.4−0.6–
Shallow boosted trees60.459.6−0.4+3.7 (CI touches 0)
Leaders at their best joined form60.158.2−1.8 [−4.9, +1.7]–
The seven lines refitted / design/jobs.md's jobs only59.6 / 59.358.4 / 58.9−1.7 / −1.2–
Value within role (Jordan's eight roles, by rules)56.955.5−4.5 [−9.2, −0.4]–
Value over replacement (less the best same-role unit)58.957.3−2.7 [−7.1, +1.4]–
Replaceability (how many same-role units beat it)53.952.2−7.8 [−12.3, −4.1]–

What this says.

  1. Re-shaping the ledger's own information gets nowhere. Logistic (L1 and L2), ordinal, boosted trees, nearest neighbours, value over replacement and leaders at their joined form all land within about 2 points of the ledger. So does Value with every fact added. The ledger is about as good as its inputs allow. The Kill line alone does as well as the whole ledger (62.6).
  2. The gain comes from information the ledger does not use. A model that never sees the ledger beats it by about 3 points on 15 armies. It sees only the datasheet, keywords and support rules. Averaging its rank with the ledger's is the one model whose interval clears 0 on the human letters: +3.9 [+0.4, +7.3] on 15 armies, better in 9 of 16. It was declared before the run.
  3. A second, independent target agrees. The models were trained on human letters only. On Gemini's letters for the held-out army, the datasheet model beats the ledger by +7.4 [+1.3, +13.3] and the ensemble by +6.2 [+3.0, +9.8]. Caveat: Gemini says it draws on tournament results, and list share does just as well there. So some of that agreement may be popularity.
  4. Ranks beat raw values. The same every-fact model on each fact's rank within its army scores 65.2 against 61.4. Our facts are heavy-tailed, and a few outliers dominate a raw fit. Ranks are robust to that.
  5. Within-role scoring is worse, not better. Within role, within archetype, value over replacement and replaceability all lose 3 to 14 points. Reviewers rank across roles. A unit that is the best of a weak role is not graded up for it. (Our roles come from simple rules, not T-732's measured roles. A better role assignment might do better.)
  6. Multiplicity. I tried 34 models. One interval clearing 0 on the human letters is suggestive, not proof. The Gemini agreement is the stronger evidence, because Gemini's letters played no part in any fit. Nothing should be adopted before a confirmation run on lists none of these fits saw.

What reviewers seem to value. These signs hold in all 16 leave-one-out fits, across the datasheet model, the rank model, the ordinal model and the L1 model. Each is "one army-SD more of this, within an army".

Prediction (written before any fit), checked.

Recommendation

  1. Stop tuning dials on the present lines. Every reshaping of the ledger's own information, linear, ordinal, trees, neighbours, roles, lands within about 2 points of it.
  2. The missing signal is on the datasheet. Speed, named characters and psykers, Lone Operative, Infantry (Hidden), durability. A ledger-free datasheet model matches or beats the ledger.
  3. Run one confirmation of the declared ensemble (ledger rank + datasheet-model rank) on human lists none of these fits saw, such as new reviewer lists as they arrive. Adopt nothing before that.
  4. In the ledger itself, Soak deserves weight comparable to Kill. Speed and character or psyker status are mechanisms worth pricing as lines.
  5. Drop within-role, value-over-replacement and replaceability as letter models. Use ranks rather than raw values in any pooled model.

Method notes

The tables (tools/statlearn.js --md)

The leaderboard (held out, leave one army out)

Pooled = mean over the 16 armies of the held-out accuracy on each army's human consensus pairs (cascade2's definition); every pair = all armies' pairs together; lists = each human 11e list's own pairs (army mean). Scrambled: the identical pipeline on 20 letter sets permuted within each army. vs ledger: pooled difference from Track A's Value with a 95% bootstrap interval over armies (2000 draws); armies = how many of 16 it beats the ledger in. 15 (no Tyranids): the same without the army the ledger was tuned on (its Tyranid score is in sample), with its own bootstrap over the 15. Gemini = held-out accuracy on the held-out army's GEMINI AGGREGATE pairs (15 armies; Emperor's Children has none). Family: a ledger, c pairwise logistic, d ordinal, e within role, f value over replacement, g ranks, h boosting, i replaceability, j leaders joined, k diagnostic, plus/knn/ens other structural tries, gem trained with Gemini.

ModelFamilyPooled, 1615 (no Tyranids)vs ledger on 15 [95%]Every pairListsScrambledReal − scrambledBeats scrambledvs ledger [95%]Armies betterGemini
List share alone (DIAGNOSTIC ONLY: popularity, never in a letter)k69.667.9+7.8 [-1.0, 15.9]67.067.043.2 ± 2.2+26.420 of 20+7.7 [0.1, 15.7]1067.1
Ensemble: ledger Value rank + datasheet-only model rankens65.563.9+3.9 [0.4, 7.3]62.464.149.5 ± 2.9+15.920 of 20+3.6 [0.4, 7.1]962.9
Pairwise logistic on within-army ranks, every feature, L2g65.264.0+4.0 [-0.9, 9.2]65.263.650.6 ± 2.7+14.620 of 20+3.4 [-1.3, 8.7]963.2
POST HOC: datasheet-only model on within-army ranks, L2posthoc64.063.1+3.1 [-3.6, 9.9]58.962.650.7 ± 3.2+13.220 of 20+2.1 [-4.4, 9.2]866.3
Pairwise logistic, datasheet + keywords + support only (no ledger), L2c64.063.2+3.2 [-3.2, 9.6]59.262.650.6 ± 2.6+13.320 of 20+2.1 [-4.1, 8.7]764.0
POST HOC: datasheet-only features + log Value, L2posthoc63.562.6+2.6 [-2.2, 6.9]59.762.550.7 ± 2.9+12.920 of 20+1.7 [-2.9, 6.4]762.2
POST HOC: ensemble, ledger Value rank + every-feature ranks model rankens63.561.8+1.8 [-0.9, 4.5]64.162.049.6 ± 3.2+14.020 of 20+1.7 [-0.8, 4.3]1159.6
c every feature L2, trained on human + 0.5 × Geminigem62.160.9+0.9 [-4.0, 5.6]60.460.7–––+0.3 [-4.3, 5.1]761.9
Ledger Value (Track A)a61.960.0+0.0 [0.0, 0.0]61.760.750.2 ± 2.3+11.720 of 20+0.0 [0.0, 0.0]056.7
Pairwise logistic, every feature + log Value, L2c61.860.8+0.8 [-3.8, 5.2]60.660.550.7 ± 2.9+11.220 of 20-0.0 [-4.3, 4.6]860.8
25 nearest neighbours across armies (24 features)knn61.660.9+0.9 [-4.4, 6.2]60.460.350.3 ± 2.7+11.320 of 20-0.2 [-5.7, 5.2]958.7
h boosting, trained on human + 0.5 × Geminih61.660.5+0.4 [-4.4, 4.9]62.760.4–––-0.2 [-4.8, 4.3]759.0
Absolute output: Value × pointsplus61.560.4+0.3 [-3.8, 4.2]62.560.450.1 ± 2.7+11.420 of 20-0.4 [-4.4, 3.7]855.6
Pairwise logistic, every feature, L2c61.460.4+0.4 [-4.4, 4.9]60.360.250.8 ± 3.1+10.620 of 20-0.4 [-4.8, 4.3]861.0
Pairwise logistic, every feature, L1c61.360.1+0.1 [-4.0, 4.3]60.860.050.9 ± 3.0+10.420 of 20-0.6 [-4.6, 3.7]762.0
Ensemble: ledger Value rank + boosting rankens61.259.7-0.3 [-2.5, 1.9]62.360.049.4 ± 2.8+11.820 of 20-0.6 [-2.9, 1.7]757.5
Value + value over replacement (pairwise fit)f61.259.3-0.7 [-1.9, 0.0]61.460.049.8 ± 3.2+11.420 of 20-0.7 [-1.8, 0.0]557.4
Every unit at max(solo, best joined as leader or squad)j61.259.3-0.8 [-4.8, 3.3]58.960.150.8 ± 2.1+10.420 of 20-0.7 [-4.5, 3.4]756.8
Ordinal logistic on letters, every feature, L2d60.759.4-0.6 [-5.3, 4.3]59.559.550.8 ± 3.2+9.920 of 20-1.2 [-5.7, 4.0]558.9
Shallow pairwise boosting (depth 2, 100 rounds)h60.459.6-0.4 [-4.8, 4.2]61.959.350.2 ± 2.4+10.220 of 20-1.4 [-6.0, 3.4]760.4
Leaders at max(solo, best joined)j60.158.2-1.8 [-5.0, 1.7]58.659.350.7 ± 2.2+9.420 of 20-1.7 [-4.8, 1.8]456.5
Leaders at their best joined form's Valuej60.158.2-1.8 [-4.9, 1.7]58.859.250.8 ± 2.1+9.320 of 20-1.8 [-4.7, 1.6]556.9
Pairwise logistic, the seven lines only, L2c59.658.4-1.7 [-6.0, 2.8]59.858.149.8 ± 3.0+9.720 of 20-2.3 [-6.5, 2.2]656.5
Pairwise logistic, design/jobs.md's jobs only, L2c59.358.9-1.2 [-4.6, 1.8]61.058.250.7 ± 2.6+8.620 of 20-2.6 [-6.7, 1.1]657.0
c lines L2, trained on human + 0.5 × Geminigem59.358.2-1.8 [-6.4, 2.9]59.957.7–––-2.6 [-7.1, 2.3]556.0
Role intercepts + Value within role (pairwise fit)e59.257.6-2.4 [-6.0, 0.4]60.358.449.6 ± 3.6+9.620 of 20-2.7 [-6.0, 0.1]554.9
Value over replacement: less the best other same-role unitf58.957.3-2.7 [-7.1, 1.4]60.858.150.0 ± 3.0+8.920 of 20-3.0 [-7.2, 0.9]353.8
Value within archetype (T-716)e57.856.3-3.7 [-7.2, 0.0]53.957.750.3 ± 2.6+7.420 of 20-4.1 [-7.5, -0.5]556.4
Value over replacement: less the role's medianf57.556.1-4.0 [-8.4, -0.2]60.156.950.0 ± 2.7+7.520 of 20-4.3 [-8.2, -0.9]553.6
Archetype intercepts + Value within archetype (pairwise fit)e57.557.2-2.9 [-6.3, 0.6]57.157.050.4 ± 2.5+7.120 of 20-4.4 [-8.7, -0.3]457.9
Value within role (Jordan's eight, by rules)e56.955.5-4.5 [-9.2, -0.4]59.656.350.2 ± 2.9+6.719 of 20-4.9 [-9.1, -1.0]554.3
Points alone (sign chosen)plus54.454.9-5.1 [-12.3, 1.4]55.753.849.5 ± 3.1+4.920 of 20-7.4 [-15.3, 0.2]449.8
Replaceability: fewer same-role units with a higher Valuei53.952.2-7.8 [-12.3, -4.1]54.753.046.5 ± 2.7+7.420 of 20-8.0 [-11.9, -4.3]252.3
Replaceability: fewer same-army units at least as good at its main jobi47.747.5-12.5 [-16.2, -8.4]43.547.643.4 ± 2.2+4.319 of 20-14.2 [-18.8, -9.5]245.2

Each feature alone (family b; its sign chosen on the training armies)

Sign: + higher is better, as most training folds chose it (folds agreeing of 16). All 75 features listed, sorted by the score with ties as half a pair (flags and whole-number stats tie on most pairs, so the strict score, ties wrong, sits far below 50 for them).

FeatureSign (folds)Ties as halfScrambled, ties as halfReal − scrambledStrict (ties wrong)vs ledger, strict [95%]Armies betterGemini
L_kill+ (16)62.650.8+11.962.6+0.8 [-1.2, 3.1]1057.4
j_antiElite+ (16)60.748.9+11.760.6-1.2 [-6.2, 3.4]957.0
L_soak+ (16)60.650.9+9.760.6-1.3 [-4.4, 2.1]754.4
j_antiHorde+ (16)58.850.7+8.158.4-3.5 [-10.2, 2.8]854.0
j_antiTank+ (16)58.551.2+7.358.4-3.5 [-8.0, 0.7]754.7
j_burst+ (16)58.249.2+9.058.2-3.7 [-7.7, 0.0]657.7
j_antiChar+ (16)57.350.8+6.557.3-4.6 [-7.3, -2.0]355.7
j_bodies− (16)56.750.6+6.254.6-7.3 [-14.7, -0.4]449.8
pts+ (16)56.151.3+4.854.4-7.4 [-15.3, 0.2]449.8
OC+ (16)55.750.2+5.538.5-23.3 [-30.4, -16.4]136.7
j_actor− (16)55.350.8+4.554.1-7.8 [-16.7, 0.8]548.3
j_denial+ (16)55.150.9+4.254.3-7.6 [-14.8, -0.5]451.4
debuffKind− (16)54.948.6+6.222.9-38.9 [-47.2, -29.9]122.0
epic+ (16)54.850.0+4.815.5-46.4 [-54.4, -37.9]015.1
kc_elite+ (16)54.750.0+4.654.6-7.2 [-14.5, 0.6]451.7
inv+ (16)54.250.9+3.331.7-30.2 [-38.3, -21.6]136.7
kc_tank+ (16)54.150.5+3.654.1-7.8 [-14.3, -2.2]451.1
M+ (16)53.951.4+2.540.6-21.3 [-27.7, -15.0]042.9
deepStrike+ (16)53.949.4+4.522.6-39.2 [-47.8, -30.5]023.4
L_hold+ (16)53.850.4+3.553.4-8.4 [-14.8, -1.8]552.2
joinSquad+ (16)53.549.3+4.226.6-35.3 [-42.4, -28.4]028.4
enabler+ (16)53.449.7+3.712.4-49.5 [-58.3, -39.9]113.5
kc_char− (16)53.450.7+2.753.4-8.5 [-17.5, -0.0]450.6
lifted+ (16)53.249.9+3.326.4-35.5 [-43.3, -28.3]027.1
j_screen− (16)53.251.1+2.151.8-10.1 [-18.1, -2.3]448.0
cpKind+ (16)53.250.4+2.813.1-48.7 [-54.3, -43.0]013.0
unlock− (16)53.150.2+2.926.6-35.3 [-44.7, -26.9]021.3
infantry+ (16)52.749.3+3.424.5-37.4 [-43.8, -30.5]027.3
vehicle− (16)52.549.7+2.820.0-41.9 [-51.1, -32.8]023.9
psyker+ (16)52.549.8+2.710.0-51.8 [-60.0, -42.5]19.6
j_depends+ (16)52.449.5+2.944.1-17.8 [-26.4, -9.7]440.6
shockKind− (16)52.349.6+2.714.2-47.7 [-55.0, -40.6]013.5
j_hide+ (16)52.349.8+2.524.1-37.8 [-44.7, -31.0]026.7
fly− (16)52.350.0+2.214.7-47.1 [-52.3, -40.9]014.5
j_reach+ (16)52.051.3+0.847.2-14.7 [-23.9, -5.7]445.7
lone+ (16)51.950.1+1.96.3-55.5 [-61.4, -49.5]05.3
scouts+ (16)51.950.2+1.78.9-53.0 [-59.9, -46.0]08.2
j_elusive+ (16)51.950.6+1.39.2-52.6 [-58.5, -46.5]08.1
battleline+ (16)51.849.8+2.08.9-52.9 [-59.6, -46.3]07.8
j_cp+ (16)51.649.8+1.89.2-52.6 [-57.9, -47.7]09.4
aura+ (16)51.449.7+1.77.0-54.8 [-59.1, -50.2]08.1
models+ (16)51.349.7+1.631.0-30.8 [-38.1, -23.8]132.9
j_engineM+ (16)51.350.0+1.34.9-57.0 [-61.8, -51.9]04.7
j_rival− (16)51.349.9+1.46.1-55.8 [-62.2, -49.0]06.2
joinLead− (16)51.150.4+0.724.6-37.3 [-47.3, -27.8]021.4
infiltrators+ (16)51.149.7+1.45.8-56.1 [-61.6, -50.4]07.2
Ld+ (15)50.850.3+0.617.6-44.3 [-53.3, -35.4]017.8
L_score+ (16)50.849.4+1.450.1-11.8 [-18.2, -4.9]353.1
kc_horde+ (16)50.851.3-0.550.7-11.1 [-18.9, -2.7]448.6
synapse+ (16)50.750.1+0.72.2-59.7 [-63.9, -55.4]02.1
L_presence− (15)50.550.5-0.049.7-12.2 [-20.8, -4.1]447.3
L_actions− (15)50.550.6-0.249.7-12.2 [-20.9, -4.1]447.2
Sv+ (15)50.450.1+0.331.8-30.0 [-37.9, -22.2]033.6
transportKw− (16)50.349.6+0.87.7-54.2 [-59.7, -48.7]08.5
leader− (15)50.350.8-0.418.9-42.9 [-51.8, -34.7]016.2
W− (16)50.349.6+0.644.7-17.2 [-24.5, -10.1]149.6
transportCap− (16)50.349.5+0.87.8-54.1 [-59.6, -48.6]08.8
j_tough+ (16)50.349.2+1.150.1-11.8 [-18.4, -5.5]446.2
fightsFirst+ (15)50.150.4-0.32.8-59.1 [-65.6, -52.7]03.2
j_oc+ (16)49.850.1-0.348.9-13.0 [-18.8, -7.2]350.6
stealth+ (15)49.750.3-0.54.9-57.0 [-63.1, -51.1]05.6
L_spawn− (15)49.650.0-0.40.4-61.5 [-66.5, -56.5]00.5
ocPer100+ (16)49.550.2-0.748.5-13.4 [-19.6, -7.1]349.8
j_lands+ (15)49.450.0-0.632.2-29.7 [-39.3, -20.1]137.5
j_hold+ (16)49.450.1-0.749.0-12.9 [-19.3, -6.3]350.0
meleeShare+ (15)49.450.8-1.419.9-41.9 [-49.8, -33.6]024.6
j_shock− (15)49.249.6-0.41.6-60.2 [-66.5, -54.0]02.6
fnp− (14)49.150.6-1.47.5-54.4 [-61.7, -47.3]010.7
monster− (15)49.050.4-1.45.3-56.6 [-60.9, -51.9]03.6
range− (15)48.650.0-1.438.0-23.9 [-32.6, -14.9]243.4
j_recover− (12)47.549.8-2.311.7-50.1 [-56.3, -44.0]015.4
T+ (12)45.249.6-4.432.9-29.0 [-35.7, -22.4]034.4
woundsPer100− (11)43.950.2-6.243.0-18.9 [-25.0, -12.8]047.2
character+ (9)42.850.1-7.415.9-46.0 [-53.1, -39.0]017.5
supportKinds− (11)41.350.3-9.019.8-42.1 [-49.4, -35.3]021.6

What the fits value: coefficients

Pairwise logistic, every feature, L2

Fitted on all 16 armies at λ 300 (λ in the held-out folds: 300, 100, 30). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
epic+0.07160.06 to 0.24
psyker+0.07160.06 to 0.20
lone+0.07160.06 to 0.25
L_soak+0.07160.05 to 0.22
M+0.06160.04 to 0.27
j_antiElite+0.06160.06 to 0.14
j_antiTank+0.06160.04 to 0.26
j_antiHorde+0.06160.05 to 0.14
debuffKind-0.0616-0.16 to -0.05
fly-0.0516-0.19 to -0.03
deepStrike+0.05160.05 to 0.13
j_engineM+0.05160.03 to 0.12
L_kill+0.0415-0.03 to 0.06
cpKind+0.04160.03 to 0.10
infantry+0.04160.03 to 0.14
enabler+0.04160.03 to 0.17
j_hide+0.04160.03 to 0.14
L_hold+0.04160.02 to 0.07
joinSquad+0.04160.03 to 0.11
unlock-0.0316-0.08 to -0.01

Pairwise logistic, every feature, L1

Fitted on all 16 armies at λ 10 (λ in the held-out folds: 3, 10). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
M+0.19160.17 to 0.38
epic+0.17160.15 to 0.35
j_antiTank+0.16160.13 to 0.46
L_soak+0.16160.12 to 0.45
psyker+0.16160.14 to 0.31
j_antiHorde+0.16160.07 to 0.25
lone+0.15160.16 to 0.38
fly-0.1416-0.33 to -0.10
debuffKind-0.1316-0.21 to -0.11
infantry+0.12150.00 to 0.24
cpKind+0.08160.01 to 0.12
j_engineM+0.08160.07 to 0.14
deepStrike+0.08160.02 to 0.19
enabler+0.05160.01 to 0.22
lifted+0.05160.03 to 0.20
kc_elite+0.05140.00 to 0.20
L_presence+0.05150.00 to 0.33
joinSquad+0.04150.00 to 0.16
j_hide+0.04150.00 to 0.29
j_antiElite+0.02140.00 to 0.41

Pairwise logistic, the seven lines only, L2

Fitted on all 16 armies at λ 100 (λ in the held-out folds: 100, 3, 10, 300, 30, 1000). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
L_soak+0.18160.06 to 0.51
L_kill+0.16160.03 to 0.18
L_score+0.09160.04 to 0.37
L_hold+0.0714-0.22 to 0.07
L_presence+0.0415-0.02 to 0.39
L_spawn-0.0415-0.28 to 0.00

Pairwise logistic, datasheet + keywords + support only (no ledger), L2

Fitted on all 16 armies at λ 10 (λ in the held-out folds: 3, 30, 10). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
M+0.44160.29 to 0.64
infantry+0.43160.21 to 0.64
epic+0.34160.20 to 0.41
lone+0.29160.14 to 0.39
fly-0.2716-0.36 to -0.18
supportKinds-0.2616-0.41 to -0.09
psyker+0.21160.12 to 0.27
debuffKind-0.2016-0.30 to -0.14
T+0.18160.03 to 0.34
cpKind+0.18160.13 to 0.23
enabler+0.18160.11 to 0.31
transportKw-0.1516-0.33 to -0.07
vehicle-0.1116-0.18 to -0.01
W+0.11160.02 to 0.18
deepStrike+0.11160.07 to 0.15
synapse+0.1015-0.00 to 0.19
stealth-0.1016-0.15 to -0.01
pts+0.10160.02 to 0.17
range-0.1016-0.17 to -0.05
character-0.0915-0.16 to 0.05

Pairwise logistic, design/jobs.md's jobs only, L2

Fitted on all 16 armies at λ 1000 (λ in the held-out folds: 1000, 300, 30, 100). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
j_antiElite+0.05160.04 to 0.19
j_antiHorde+0.04160.03 to 0.19
j_antiTank+0.04160.03 to 0.23
j_burst+0.0413-0.04 to 0.06
j_antiChar+0.0313-0.02 to 0.05
j_engineM+0.03160.01 to 0.18
j_bodies-0.0216-0.18 to -0.02
j_hide+0.02160.02 to 0.21
j_oc+0.02160.01 to 0.05
j_hold+0.02160.02 to 0.07
j_cp+0.02160.01 to 0.15
j_denial+0.0212-0.07 to 0.03
j_elusive+0.01160.01 to 0.08
j_lands+0.0115-0.00 to 0.02
j_screen-0.0115-0.04 to 0.01
j_shock-0.0115-0.05 to 0.03
j_recover+0.0115-0.00 to 0.03
j_tough+0.009-0.06 to 0.02
j_actor+0.0014-0.01 to 0.12

Pairwise logistic, every feature + log Value, L2

Fitted on all 16 armies at λ 100 (λ in the held-out folds: 300, 100, 30). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
lone+0.14160.05 to 0.25
epic+0.13160.06 to 0.24
M+0.13160.04 to 0.27
psyker+0.13160.04 to 0.19
j_antiTank+0.11160.04 to 0.26
fly-0.1016-0.19 to -0.03
L_soak+0.10160.04 to 0.20
debuffKind-0.1016-0.16 to -0.05
j_antiHorde+0.09160.03 to 0.14
j_antiElite+0.09160.04 to 0.13
deepStrike+0.09160.04 to 0.13
j_engineM+0.08160.03 to 0.12
infantry+0.08160.03 to 0.12
j_hide+0.07160.03 to 0.11
L_presence+0.07160.00 to 0.17
enabler+0.07160.03 to 0.17
joinSquad+0.06160.02 to 0.11
cpKind+0.06160.03 to 0.08
logValue+0.06160.02 to 0.08
OC+0.06160.02 to 0.10

Ordinal logistic on letters, every feature, L2

Fitted on all 16 armies at λ 30 (λ in the held-out folds: 30, 300, 3). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
M+0.24160.05 to 0.44
j_antiTank+0.23160.05 to 0.63
lone+0.21160.04 to 0.42
epic+0.21160.05 to 0.40
psyker+0.21160.04 to 0.36
fly-0.2016-0.37 to -0.05
debuffKind-0.1716-0.34 to -0.05
j_hide+0.14160.03 to 0.30
j_engineM+0.14160.04 to 0.23
L_soak+0.14160.05 to 0.54
infantry+0.14160.04 to 0.26
enabler+0.13160.04 to 0.32
deepStrike+0.12160.03 to 0.20
j_antiElite+0.1115-0.04 to 0.28
j_antiHorde+0.11160.03 to 0.24
L_presence+0.11160.02 to 0.57
L_hold+0.11160.04 to 0.38
kc_elite+0.10160.03 to 0.19
j_antiChar-0.1011-0.40 to 0.02
range-0.1016-0.15 to -0.01

Pairwise logistic on within-army ranks, every feature, L2

Fitted on all 16 armies at λ 3 (λ in the held-out folds: 3). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
M+0.79160.63 to 0.90
psyker+0.76160.51 to 0.83
L_soak+0.72160.44 to 0.79
epic+0.71160.57 to 0.77
fly-0.6416-0.81 to -0.30
j_rival-0.6316-0.70 to -0.43
debuffKind-0.5916-0.73 to -0.48
j_hide+0.58160.49 to 0.60
infantry+0.56160.36 to 0.63
L_kill+0.53160.38 to 0.61
OC+0.50160.44 to 0.56
L_hold+0.50160.35 to 0.57
deepStrike+0.50160.34 to 0.59
joinSquad+0.49160.29 to 0.63
j_antiTank+0.44160.27 to 0.54
j_engineM+0.42160.30 to 0.46
enabler+0.39160.22 to 0.50
j_denial+0.38160.27 to 0.40
lone+0.37160.24 to 0.50
j_oc-0.3416-0.39 to -0.24

Role intercepts + Value within role (pairwise fit)

Fitted on all 16 armies at λ 100 (λ in the held-out folds: 100, 30, 10, 1). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
withinRoleValue+0.23160.15 to 0.47
Hammer+0.09160.08 to 0.38
Disruptors-0.0816-0.21 to -0.05
Action units+0.06160.03 to 0.39
Transports-0.0516-0.38 to -0.02
Heavy anti-armour+0.03160.02 to 0.95
Anvil-0.0316-0.75 to -0.01
Force multipliers-0.0314-0.06 to 0.02
Screens-0.0115-0.36 to 0.01

Archetype intercepts + Value within archetype (pairwise fit)

Fitted on all 16 armies at λ 3 (λ in the held-out folds: 1, 100, 3). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
archetype0-0.9416-1.13 to -0.13
archetype6+0.39160.08 to 0.47
withinArchValue+0.36160.13 to 0.47
archetype1+0.35160.03 to 0.54
archetype3+0.35160.02 to 0.55
archetype2-0.3216-0.54 to -0.02
archetype5+0.14160.01 to 0.20
archetype4+0.0211-0.10 to 0.15

Value + value over replacement (pairwise fit)

Fitted on all 16 armies at λ 3 (λ in the held-out folds: 10, 1, 30, 3). Coefficient per army-SD of the feature (on the score's logit scale); folds = how many of the 16 leave-one-out fits share its sign; range over the folds.

FeatureCoefficientFolds same signRange over folds
logValue+0.58160.35 to 0.64
vorBest-0.1213-0.19 to 0.06

The ledger's line weights against the fitted ones

Ledger: each line's mean share of a unit's Value (Track A). Fitted: the lines-only pairwise model's coefficients as a share of their absolute sum (a different scale: per army-SD of log(1 + the line), so read the order and sign, not the size).

LineLedger share of ValueFitted share (sign)
kill85.3%+27.7%
soak2.7%+30.9%
score3.6%+15.4%
actions0.9%+0.0%
hold5.6%+11.3%
spawn0.0%−7.1%
presence1.9%+7.6%

Boosting: split-gain importance (all 16 armies)

FeatureShare of gain
L_kill14.1%
L_soak10.3%
OC6.4%
j_antiHorde6.0%
j_oc4.4%
j_denial3.9%
infiltrators3.9%
infantry3.8%
L_hold3.0%
deepStrike2.9%
joinSquad2.8%
M2.6%
j_actor2.3%
j_rival1.9%
kc_elite1.9%

By army (held out)

ArmyListsPairsa_valueb_L_killc_all_l2c_sheet_l2d_ord_allh_gbmj_all_maxx_knnx_ens_sheetk_share
Tyranids358389.582.277.074.679.672.989.572.089.095.5
Space Marines2151562.161.259.455.462.067.654.363.059.783.8
Adeptus Mechanicus132271.466.852.550.056.261.276.758.463.771.1
Agents of the Imperium122356.157.861.467.762.857.039.062.367.328.7
Astra Militarum1131967.670.165.166.165.562.058.461.369.664.4
Blood Angels112461.363.750.075.849.264.580.671.872.652.4
Dark Angels1232553.757.852.450.249.258.152.450.852.354.2
Death Guard147655.052.956.547.151.752.557.858.452.147.3
Drukhari120758.058.958.553.652.258.061.860.957.573.9
Emperor's Children119169.671.267.063.970.257.668.649.266.073.3
Genestealer Cults211255.468.866.178.665.267.056.366.167.980.4
Leagues of Votann110561.064.862.974.352.454.350.562.974.383.8
Orks160663.562.969.067.363.566.562.780.568.060.6
Space Wolves114050.752.152.965.060.037.947.938.655.787.1
Thousand Sons130938.238.561.864.765.060.540.857.052.866.0
World Eaters321976.772.670.368.966.269.481.373.179.090.9

Gemini (GEMINI AGGREGATE letters, reference only)

Every model above was scored on the held-out army's Gemini pairs (the Gemini column; human letters only in training, so Gemini's letters are a second, independent target). Against the ledger on those pairs (15 armies, bootstrap over armies):

ModelGemini pairsvs ledger [95%]Armies better
List share alone (DIAGNOSTIC ONLY: popularity, never in a letter)67.1+10.4 [1.2, 19.2]10 of 15
POST HOC: datasheet-only model on within-army ranks, L266.3+9.6 [1.2, 18.8]10 of 15
Pairwise logistic, datasheet + keywords + support only (no ledger), L264.0+7.4 [1.3, 13.3]11 of 15
Pairwise logistic on within-army ranks, every feature, L263.2+6.5 [2.0, 11.3]10 of 15
Ensemble: ledger Value rank + datasheet-only model rank62.9+6.2 [3.0, 9.8]11 of 15
POST HOC: datasheet-only features + log Value, L262.2+5.5 [0.9, 10.3]9 of 15
Pairwise logistic, every feature, L162.0+5.3 [-0.4, 11.2]9 of 15
Pairwise logistic, every feature, L261.0+4.3 [-0.3, 9.4]10 of 15
Pairwise logistic, every feature + log Value, L260.8+4.1 [-0.5, 9.1]10 of 15
Shallow pairwise boosting (depth 2, 100 rounds)60.4+3.7 [-1.2, 8.7]10 of 15
POST HOC: ensemble, ledger Value rank + every-feature ranks model rank59.6+2.9 [0.7, 5.3]9 of 15
h boosting, trained on human + 0.5 × Gemini59.0+2.3 [-3.7, 7.9]10 of 15
Ordinal logistic on letters, every feature, L258.9+2.2 [-3.3, 8.0]7 of 15
25 nearest neighbours across armies (24 features)58.7+2.0 [-2.5, 6.6]10 of 15
Archetype intercepts + Value within archetype (pairwise fit)57.9+1.2 [-3.3, 6.5]9 of 15
Ensemble: ledger Value rank + boosting rank57.5+0.8 [-2.3, 3.4]9 of 15
Value + value over replacement (pairwise fit)57.4+0.7 [-0.1, 1.5]9 of 15
Pairwise logistic, design/jobs.md's jobs only, L257.0+0.3 [-5.3, 5.4]8 of 15
Leaders at their best joined form's Value56.9+0.3 [-2.2, 3.0]6 of 15
Every unit at max(solo, best joined as leader or squad)56.8+0.1 [-3.9, 4.1]10 of 15
Ledger Value (Track A)56.7+0.0 [0.0, 0.0]0 of 15
Leaders at max(solo, best joined)56.5-0.2 [-3.0, 2.6]7 of 15
Pairwise logistic, the seven lines only, L256.5-0.2 [-4.0, 3.3]7 of 15
Value within archetype (T-716)56.4-0.3 [-4.3, 4.3]5 of 15
Absolute output: Value × points55.6-1.1 [-4.8, 2.2]7 of 15
Role intercepts + Value within role (pairwise fit)54.9-1.8 [-5.9, 2.0]6 of 15
Value within role (Jordan's eight, by rules)54.3-2.4 [-7.2, 2.9]6 of 15
Value over replacement: less the best other same-role unit53.8-2.9 [-5.4, -0.6]5 of 15
Value over replacement: less the role's median53.6-3.1 [-7.4, 1.3]5 of 15
Replaceability: fewer same-role units with a higher Value52.3-4.4 [-7.2, -2.1]2 of 15
Points alone (sign chosen)49.8-6.9 [-14.9, 1.0]6 of 15
Replaceability: fewer same-army units at least as good at its main job45.2-11.5 [-18.1, -4.0]2 of 15

Trained on human + 0.5 × Gemini pairs (Gemini at half a single human list's weight), scored on held-out human pairs only:

ModelHuman onlyHuman + 0.5 × GeminiDifference
Pairwise logistic, every feature, L261.462.1+0.7 (8 armies up, 6 down)
Pairwise logistic, the seven lines only, L259.659.3-0.3 (6 armies up, 8 down)
Shallow pairwise boosting (depth 2, 100 rounds)60.461.6+1.2 (8 armies up, 8 down)

The eight roles as the rules assign them (counts per army)

ArmyAnvilHammerHeavy anti-armourAction unitsScreensForce multipliersDisruptorsTransports
Tyranids0112609213
Space Marines4152120122811
Adeptus Mechanicus0110204152
Agents of the Imperium070107104
Astra Militarum11538216198
Blood Angels13020950
Dark Angels3143140163310
Death Guard0802010142
Drukhari030705193
Emperor's Children05051462
Genestealer Cults1191112162911
Leagues of Votann02030683
Orks0908082010
Space Wolves13030680
Thousand Sons0903011102
World Eaters040405152