Six models · five daily puzzles · free · no account

  • 6 models · 5 daily puzzles
  • 12,966 NBA · 4,831 company-years · 4,022 tennis
  • Era-honest comparisons

It's a dumb model.
Beat it anyway.

Take everything public about an athlete — the box score, the tracking data, the draft slot, the salary, the awards nobody remembers — and squash it down into a single list of numbers. That list is the whole player, as far as the model is concerned.

Then we hide the names and hand you the numbers. The model is wrong all the time — that's the fun part.

One puzzle a day per game. Each runs a real model on real public data — no staged scores, no decorative math. Three sports + one market + one joint cross-sport chimera. One more model — tennis — still ships as a model card with a playable probe and no daily puzzle yet. Unified is now live as the fifth daily: 20,719 player-seasons in 64-d, deterministic dailySeed LCG.

Vector Hoops

Game 01

Two real NBA seasons got fused into one impossible player. Name both.

12,966 player-seasons, each one a point in a 64-dimensional space the model learned on its own. Guesses are scored by how close you land — so a wrong answer that feels right usually is.

NBA · 64-d embedding · 18 towers · daily

Vector Gridiron

Game 02

Who should you actually start this week?

One net predicts a player's fantasy points and his stat line at the same time. Learning both makes it better at each — and the 32-dimensional trunk it builds along the way doubles as the map.

NFL · 32-d trunk · weekly

Vector Pitch

Game 03

The same trick, played on the World Cup.

Built from StatsBomb's open event data for 2018 and 2022, normalized inside each tournament so a 2018 workhorse isn't judged against 2022 averages. The map is a 24-d MTNN over 2,430 player-rows across 11 tournament and league contexts.

World Cup · 24-d MTNN · daily

Vector Equities

Game 04

Public companies as vectors — SEC EDGAR XBRL + market tape.

4,831 company-years — 500 tickers across 2015-2024 — as 64-d vectors from SEC EDGAR XBRL. 17 towers: Altman Z distress, Piotroski F quality, Beneish M, Sloan accruals, QMJ, plus market microstructure. One net predicts sector, next-year profile, distress and payout at once. Guess the ticker from its vector.

Equities · 500 tickers · 4,831 company-years · 17 towers · 64-d

Vector Unified

Game 05

Cross-sport chimera — 20,719 player-seasons in one 64-d joint, dailySeed LCG.

Three encoders (64-d hoops / 32-d gridiron / 24-d pitch) folded into 64-d with CORAL + contrastive + adversarial GRL. Guess the archetype from a cross-sport neighbour — sport-blind probe, deterministic daily seed — year*10000+month*100+day LCG.

Joint · 64-d x-sport · daily · 20719 player-seasons

One card per model. Real measured findings, the model’s own limitations quoted from its artifacts rather than paraphrased, and Split Decision — a game that shows you two real entities and asks which one the model rates higher. The answer key is the model’s own numbers, so you are probing the model, not guessing at a future it never predicted.

The joint 64-d model ships from unified_stage2_best.pt (best_epoch 58, 60ep, enc_lr 3e-5, GRL λ 0.10). It was gated on four tests. Every gate was measured against a null that could have failed it. Below are the shipped numbers and what happens when you drop one alignment loss — house rule from SPEC.md §5: drop each loss and measure Δ, each must earn its keep.

Gate Shipped Null / baseline Δ = earns keep? Source
G1per-sport pos non-inf hoops -0.0526 (0.7385→0.7911) · gridiron 0.0000 (0.9991 at ceiling) · pitch +0.0021 (0.8930→0.8909)
convention baseline−joint, negative = joint better
shuffled null drops +0.5493 / +0.6920 / +0.5617
old buggy value was 0.0 for all 3 — mask used as index
PASS joint ≥ baseline for 2/3, third +0.0021 inside noise; shuffled would have failed assets/unified.json → g1_verdict pos_drop / pos_baseline_e_s / pos_joint_z; g1_pos_caveat
G2sport-blind 0.6851 vs majority 0.6258 (Δ +0.0593)
target ≤0.7258 (0.6258+0.10) MET — weak
majority 0.6258 = floor any embedding hits (globally shuffled 0.6257); retired target 0.433 was UNREACHABLE (balanced-class math) drop contrastive → leakage +0.130 over majority (Stage1 0.771→0.799 baseline); drop GRL → 0.799. Each earns its keep but ceiling ~0.68 assets/unified.json → g2_sport_acc / g2_majority_baseline / g2_delta_vs_majority / g2_target
G3archetype coherence 0.683 silhouette; within-arch x-sport 0.746 >> between -0.121 (sep +0.867, measured +0.8448)
within>between holds on null ~½ time (up to +0.0440 across 50 shuffles)
composition gap up to 8.9 pp sport-pair mix differs between within/between samples — some separation is sport-pair effect PASS 0.683 > SIL_FLOOR 0.05; drop CORAL → rank 12.4 same as shuffle, silhouette collapses unified_report → g3_silhouette / within_vs_between / null calibration; archetype_map → 6/12 archetypes never assigned (A4 folds into A3)
G4analogy 0.9828 cross-sport NN same-archetype hit (random 0.1712) lift +0.8116
curated 40 triples top-10 hit 0.000, mean rank 2114 vs random 2067 ratio 0.978 (indistinguishable)
curated 40 pairs: arch-agreement 0.65 vs baseline 0.1621 (+0.488) — space knows role, not person. Earlier 3.287× salvage used N/2 not (N−k)/(k+1) STRONG but curated names fail — house rule still holds: without contrastive, hit-rate falls to shuffle baseline analogy_report → G4_cross_sport_nn_role_coherence.hit_rate 0.9828 / random_baseline 0.1712; analogy_triples_report → retrieval_top10 0.000 / mean_b_rank 2114
House rule from SPEC.md §5: ablation — drop each alignment loss (contrastive / CORAL / adversarial GRL) and measure Δ on G2/G3/G4. Each must earn its keep. Shipped joint 20,719 player-seasons (hoops 12,966 / gridiron 5,323 / pitch 2,430) x 64-d. All numbers from vector-unified/assets/unified.json and sibling reports; 0.0-pos_drop bug noted in g1_pos_caveat.

scout-cli powers this

Training now runs through scout-cli v0.8scout vector train --game hoops, scout vector eval --game unified --gates G1-G4, scout unified ablation --ablate contrastive|coral|adversarial. Router picks 5 tiers: deterministic cheap (no LLM, reads mtnn_meta.json), LLM medium (3-5 sub-swarm via CommsBus), or deep_research heavy 9K (13-swarm checkpointed). Checkpoint Manager writes bundles/ultra/runs/<runId>/checkpoint.json with fields nodeId/agentId/attempt/latency/tokens/status/errorClass so a 60-epoch unified job can pause days and resume. Verification econ budget3 threshold8.0 early-exit delta<0.3 catches mask-as-index pos_drop 0.0 via shuffled null 0.5493.

6

Model cards · 5 with a daily game

21,819

Hoops + Equities + Tennis rows

64/32/24/64/64

Dims · NBA / NFL / WC / EQ / joint

Free

No account · no ads

A player isn't one kind of thing. He's a body, a shot chart, a contract, a draft night, a postseason. Most models pick one of those and throw the rest away.

  1. 01 · Towers

    Seventeen towers, fused (Hoops)

    Vector Hoops runs eighteen separate towers — one each for volume, playmaking, rebounding, defense, efficiency, shot mix, biometrics, tracking, form, market value, roster context, career arc, strength of schedule, team, draft pedigree, playoffs, and honors — then fuses them into a single 48-number embedding. Equities runs 17 towers — Altman Z distress, Piotroski F quality, Beneish M earnings manipulation, Sloan accrual quality, QMJ quality, investment, payout, growth, operational efficiency, market microstructure, and more — into a 64-d company vector.

  2. 02 · Multi-task

    One vector, many jobs

    That embedding gets graded on many jobs at once: cluster the archetypes, name the position/sector, rebuild the box score / financial profile, guess the salary, predict who rises in the playoffs, predict distress, payout, next-year stats. A vector that can do all of that simultaneously has nowhere left to hide a lie. That's the MTNN — a multi-tower, multi-task net.

  3. 03 · Per domain

    Shared trunk, classical fallback

    Vector Gridiron runs the same idea with a shared trunk and multiple heads. Vector Pitch now ships a true MTNN (24-d) that beats the old PCA baseline on role recovery; Equities ships a 64-d MTNN (17 towers) trained with CQS_v2 = 0.4*recall_no_wiki + 0.25*purity + 0.2*next_R2 + 0.15*sector.

Where this is going

The per-sport games still live in their own spaces (64-d hoops, 32-d gridiron, 24-d pitch, 64-d equities). On top of that, a 64-d joint embedding now folds 20,719 player-seasons across the three sports into one shared role geometry — so you can ask what a power forward and a strong safety have in common and get a real neighbour.

Shipped with caveats: sport identity is still partly recoverable from the joint vector (Δ +0.0593 over majority), but the joint daily puzzle is now live — 20,719 × 64-d chimera, dailySeed LCG deterministic, probe daily on the unified model card. Equities is its own market puzzle — guess the ticker from the vector. The five games are the product you play.

  • Every number is recomputable from public sources: stats.nba.com, Basketball-Reference, nflverse, StatsBomb open data.
  • Era- and context-honest. Stats are normalized inside their own season or tournament before anything is compared.
  • Free. No account, no ads, no tracking.
  • It is called dumbmodel for a reason. It is wrong all the time. That's the fun part.

Every number on every game is recomputable from public source data — an accuracy harness gates every deploy.

Back to the roster →