Every number the machine computes about teams, players and matches β 143 metrics, 15,422,978 stored values. Add one to registry/metrics.json and it becomes queryable, chartable and testable everywhere.
| Metric | When known | Values | What it measures |
|---|---|---|---|
| congestion 21d | before kickoff | 7,940 | Games played in the previous 21 days. |
| elo | before kickoff | 7,940 | NBA Elo entering the game (K=20, home advantage 100). |
| elo momentum (last 5) | before kickoff | 7,774 | Elo change over last 5 games. |
| matches since win | before kickoff | 7,901 | Games since last win (capped 15). |
| points against avg (last 10) | before kickoff | 7,624 | Average points conceded over previous 10 games. |
| points for avg (last 10) | before kickoff | 7,624 | Average points scored over previous 10 games. |
| rest days | before kickoff | 7,901 | Days since previous game (capped 10; back-to-back = 1). |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| ah line | before kickoff | 28,318 | Opening Asian handicap line (home side) β the market's own margin-of-victory forecast. |
| disagreement home | before kickoff | 69,302 | Cross-book relative spread of home price β market uncertainty. |
| overround 1x2 | before kickoff | 74,756 | Bookmaker margin on the opening 1x2 market β pricing confidence signal. |
| p away | before kickoff | 74,756 | Opening-odds de-vigged away-win probability. |
| p draw | before kickoff | 74,756 | Opening-odds de-vigged draw probability. |
| p home | before kickoff | 74,756 | Opening-odds de-vigged probability of home win β the market's opinion as a feature. |
| p over25 | before kickoff | 29,343 | Opening-odds de-vigged P(3+ goals). |
| sharp soft gap away | before kickoff | 42,610 | Sharp-vs-soft divergence at the open: de-vigged P(away) at Pinnacle minus the soft-book consensus median. Positive = sharp money rates away higher than recreational books. The origination signal nobody re-sells. |
| sharp soft gap draw | before kickoff | 42,610 | Sharp-vs-soft divergence at the open: de-vigged P(draw) at Pinnacle minus the soft-book consensus median. Positive = sharp money rates draw higher than recreational books. The origination signal nobody re-sells. |
| sharp soft gap home | before kickoff | 42,609 | Sharp-vs-soft divergence at the open: de-vigged P(home) at Pinnacle minus the soft-book consensus median. Positive = sharp money rates home higher than recreational books. The origination signal nobody re-sells. |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| btts | outcome | 137,822 | Both teams scored. |
| comeback happened | outcome | 75,410 | Final winner was trailing at half-time. |
| drought gap | before kickoff | 136,680 | Home winless run minus away winless run. |
| elo gap | before kickoff | 137,822 | Home Elo minus away Elo. |
| first goal minute | outcome | 63,984 | Minute of the first goal (from the event timeline; only contests with events). |
| form gap | before kickoff | 132,759 | Home 5-match form points minus away. |
| ht result | outcome | 75,410 | Half-time result (H/D/A). |
| humidity pct | outcome | 9,880 | Relative humidity (%) at kickoff hour at the match location. Forecast stand-in, see match.temp_c. OBSERVED weather (post-contest fact β excluded from leak-free features; review #10). |
| late goal | outcome | 68,862 | Any goal in the 85th minute or later (late drama). |
| mismatch | before kickoff | 137,822 | Absolute Elo gap β how lopsided the pairing is. |
| momentum clash | before kickoff | 132,759 | Home Elo momentum minus away β form trajectory differential. |
| penalty awarded | outcome | 69,092 | Was a penalty kick taken in this match (scored or missed)? Target for the ref pointing tendency. |
| points gap | before kickoff | 114,839 | Home points minus away points before kickoff. |
| rained | outcome | 9,880 | Did it rain during the match window (kickoff to +2h, β₯0.1mm)? Forecast stand-in, see match.temp_c. OBSERVED weather (post-contest fact β excluded from leak-free features; review #10). |
| rainfall mm | outcome | 9,880 | Total precipitation (mm) during the match window (kickoff to +2h). Forecast stand-in, see match.temp_c. OBSERVED weather (post-contest fact β excluded from leak-free features; review #10). |
| rank gap | before kickoff | 114,839 | Home rank minus away rank before kickoff (positive = home worse-placed). The dated 'who is above whom' feature. |
| red card shown | outcome | 68,862 | At least one red card shown (from the event timeline). |
| ref cards avg | before kickoff | 49,785 | Referee's average total cards per match before this one (min 10 matches). |
| ref fouls avg | before kickoff | 49,778 | Referee's average total fouls per match before this one (min 10 matches). |
| ref pen rate | before kickoff | 58,047 | Referee's prior penalty kicks (scored or missed) per match before this one, min 5 prior matches. The pointing-to-the-spot tendency. |
| ref var rate | before kickoff | 58,058 | Referee's prior VAR-interventions per match (any Var event: goal/penalty/card reviews), expanding history over our stored event feeds, min 5 prior matches. Officiating microstructure nobody prices. |
| result | outcome | 137,822 | Full-time result: H, D or A. |
| second half goals | outcome | 75,410 | Goals scored in the second half (both teams). |
| stakes | before kickoff | 97,479 | How much the match matters: proximity of either side to the title race or drop zone (points gap <= 8), scaled by season progress. 0 = dead rubber, ~1 = late-season six-pointer. |
| state gap | before kickoff | 137,572 | Home state_index minus away state_index β the composite of composites. |
| style clash corners | before kickoff | 78,708 | Home corners won + away corners conceded: expected corner pressure. |
| temp c | outcome | 9,880 | Air temperature (Β°C) at kickoff hour at the match location. Actual conditions stand in for the near-perfect pre-kickoff forecast. OBSERVED weather (post-contest fact β excluded from leak-free features; review #10). |
| tempo | before kickoff | 66,366 | Combined shot volume of both sides β match tempo proxy. |
| total cards | outcome | 67,953 | Total cards shown (yellow + red, both sides). |
| total corners | outcome | 67,563 | Full-time total corners. |
| total fouls | outcome | 67,179 | Total fouls committed (both sides). |
| total goals | outcome | 137,822 | Full-time total goals. |
| var intervened | outcome | 69,092 | Did VAR intervene in this match (any review event)? Target for the ref VAR rate. |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| congestion 21d | before kickoff | 13,032 | Games played in the previous 21 days. |
| elo | before kickoff | 13,032 | MLB Elo entering the game (K=4 β 162-game seasons need slow updates; home advantage 35). |
| elo momentum (last 5) | before kickoff | 12,881 | Elo change over last 5 games. |
| matches since win | before kickoff | 13,000 | Games since last win (capped 15). |
| rest days | before kickoff | 13,000 | Days since previous game (capped 7). |
| runs against avg (last 10) | before kickoff | 12,730 | Average runs conceded over previous 10 games. |
| runs for avg (last 10) | before kickoff | 12,730 | Average runs scored over previous 10 games. |
| starter era away | before kickoff | 29 | Probable away starter's season ERA at time of capture. |
| starter era gap | before kickoff | 27 | Away starter ERA minus home starter ERA at time of capture (positive = home starter sharper). |
| starter era home | before kickoff | 31 | Probable home starter's season ERA at time of capture. |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| congestion 21d | before kickoff | 28,876 | Matches played in the previous 21 days. |
| elo | before kickoff | 28,876 | Tennis Elo rating entering the match (K=32, no side advantage, set-margin multiplier). |
| elo momentum (last 5) | before kickoff | 26,706 | Elo change over the last 5 matches. |
| goals prevented (last 10) | before kickoff | 111,361 | Goals prevented per match vs the pool-average save rate, rolling last 10 (min 5). PSxG-lite: positive = stopping more than an average keeper would from the same shots. |
| matches since win | before kickoff | 28,308 | Matches since last win (capped 20). |
| rest days | before kickoff | 28,308 | Days since the player's previous match (capped 30). |
| save pct (last 10) | before kickoff | 114,799 | Keeper's rolling save percentage saves/(saves+conceded) over his last 10 appearances (min 10 shots faced). The shot-stopping number. |
| saves avg (last 10) | before kickoff | 115,306 | Keeper's rolling saves per appearance over his last 10 (min 3), strictly prior. The volume side of the save prop. |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| accuracy ratio | outcome | 133,144 | Shots on target / total shots this match. High = they know what to do with their chances; low = hit-and-hope. The chance-intelligence number. |
| accuracy ratio (last 10) | before kickoff | 128,708 | Rolling mean of team.accuracy_ratio over the previous 10 matches (leak-free). |
| accuracy ratio (last 3) | before kickoff | 131,208 | Rolling mean of team.accuracy_ratio over the previous 3 matches (leak-free). |
| accuracy ratio (last 5) | before kickoff | 131,208 | Rolling mean of team.accuracy_ratio over the previous 5 matches (leak-free). |
| blown lead rate (last 20) | before kickoff | 141,062 | Share of the last 20 games where a half-time lead was not converted to a win (bottling index). |
| box share | outcome | 127,609 | Shots inside the box / total shots this match β chance QUALITY. Low = shooting from distance out of ideas. |
| box share (last 5) | before kickoff | 125,861 | Rolling mean of box share over the previous 5 matches (leak-free). |
| cards avg (last 5) | before kickoff | 268,831 | Average cards received (yellow + red) over the previous 5 contests. |
| cards shown | outcome | 132,862 | Cards shown to this side in the match (yellow + red, API-Football). |
| coach days | before kickoff | 233,729 | Days since the current coach arrived (API-Football career spells; historical coverage from spell start dates). The 'what changed - coach?' factor. |
| comeback rate (last 20) | before kickoff | 141,062 | Share of the last 20 games won from behind at half-time (never-say-die index). |
| congestion 21d | before kickoff | 275,644 | Matches played in the previous 21 days (fixture pileup). |
| conversion (last 5) | before kickoff | 133,683 | Shot conversion: goals per shot, previous 5. |
| corner diff avg (last 5) | before kickoff | 158,930 | Average corner differential over previous 5. |
| corners against avg (last 5) | before kickoff | 158,930 | Average corners conceded over the previous 5 contests. |
| corners for avg (last 5) | before kickoff | 158,930 | Average corners won over the previous 5 contests. |
| corners taken | outcome | 135,824 | Corners taken by this side in the match (API-Football). |
| corners volatility (last 10) | before kickoff | 197,058 | Std-dev of corners won, previous 10. |
| defensive leak (last 5) | before kickoff | 133,683 | Goals conceded per shot faced, previous 5. |
| dominance (last 5) | before kickoff | 133,741 | Share of total shots in own matches, previous 5. |
| elo | before kickoff | 275,644 | Elo rating entering the contest (K=20, home advantage 60, goal-margin multiplier). |
| elo momentum (last 5) | before kickoff | 268,832 | Elo change over the last 5 matches β trajectory, not level. |
| eye test v1 | before kickoff | 131,149 | The eye test, formalized: 'damn, this team looks good' = z-combo over the last 5 matches of shots on target (25%), xG created (20%), threat rate (20%), chance intelligence (15%), possession (10%), pass accuracy (10%). Threat-weighted so sterile domination scores low. |
| eye trend v1 | before kickoff | 129,019 | Looking better than their own normal: threat components over the last 3 matches minus the same over the last 10. Positive = heating up, negative = going flat β the time-chunk comparison. |
| first sub minute (last 10) | before kickoff | 134,551 | Rolling mean minute of the team's FIRST substitution over its last 10 matches with a recorded sub (strictly prior). Coach proactivity fingerprint: ~46 acts at half-time, ~70 waits. |
| form points (last 5) | before kickoff | 268,831 | League points collected over the previous 5 contests (any venue). |
| goal diff avg (last 5) | before kickoff | 268,831 | Average goal differential over previous 5. |
| goals against avg (last 5) | before kickoff | 268,831 | Average goals conceded over the previous 5 contests. |
| goals for avg (last 5) | before kickoff | 268,831 | Average goals scored over the previous 5 contests. |
| goals volatility (last 10) | before kickoff | 262,834 | Chaos index: std-dev of goals scored, previous 10. |
| h2 goals (last 10) | before kickoff | 145,638 | Average second-half goals scored over the last 10 games (late-game engine). |
| h2h win rate (last 5) | before kickoff | 133,958 | Score vs THIS opponent over their last 5 meetings (win=1, draw=0.5), any venue, strictly pre-kickoff. |
| ht lead rate (last 20) | before kickoff | 141,062 | Share of the last 20 games this team led at half-time. |
| keeper form v1 | before kickoff | 116,590 | Save% (rolling 10) of the keeper who STARTED the team's previous match β the last line of defence as known before kickoff, no team-news leak. Books rarely reprice a keeper change. |
| league points | before kickoff | 229,678 | League points accumulated before kickoff. |
| league rank | before kickoff | 229,678 | League table position before kickoff (running points table, recomputed leak-free for all seasons). Lower = better. |
| matches since blank | before kickoff | 274,203 | Matches since last failing to score (scoring streak length, capped 20). |
| matches since clean sheet | before kickoff | 274,203 | Matches since last clean sheet (defensive drought, capped 20). |
| matches since win | before kickoff | 274,203 | Matches since last win (winless run, capped 20). |
| new coach | before kickoff | 233,729 | Coach changed within the last 60 days - the new-manager-bounce window. |
| pass acc avg (last 5) | before kickoff | 126,583 | Average pass accuracy % over the previous 5 matches. Leak-free: only games strictly before kickoff. |
| pass accuracy | outcome | 128,333 | Completed-pass percentage in this match. |
| possession | outcome | 133,706 | Share of the ball this side had (%), from API-Football match statistics. |
| possession avg (last 5) | before kickoff | 131,801 | Average possession % over the previous 5 matches. Leak-free: only games strictly before kickoff. |
| rest days | before kickoff | 274,203 | Days since the competitor's previous contest (capped at 30). |
| scorer concentration | before kickoff | 117,396 | Top scorer's share of the team's season goals before kickoff (from timed goal events). 1.0 = one-man team. |
| season ppg | before kickoff | 261,587 | Points per game in the current season before this contest. |
| shot diff avg (last 5) | before kickoff | 133,741 | Average shot differential over previous 5. |
| shots for avg (last 5) | before kickoff | 133,741 | Average shots taken over the previous 5 contests. |
| shots inside box | outcome | 128,340 | Shots taken inside the box in this match. |
| shots on target | outcome | 134,052 | Shots on target in this match. |
| shots total | outcome | 134,066 | Total shots attempted (API-Football). |
| skill v1 | before kickoff | 126,081 | Invented composite: 'skill on the ball' = 40% pass accuracy + 30% possession + 30% chance creation (xG for), each z-normalized, over the last 5 matches. Defined purely as registry data (ComboMetric) β the template for any made-up factor. |
| solidity v1 | before kickoff | 30,936 | The defensive eye test β 'the other team looks worse': MINUS xG conceded (45%), MINUS shots-on-target conceded (35%), MINUS goals conceded (20%), last 5, z-normalized. High = hard to play against. |
| sot against avg (last 5) | before kickoff | 132,087 | Shots on target CONCEDED per game over the previous 5 matches. Leak-free: only games strictly before kickoff. |
| sot for avg (last 10) | before kickoff | 129,583 | Rolling mean of team.shots_on_target over the previous 10 matches (leak-free). |
| sot for avg (last 3) | before kickoff | 132,099 | Rolling mean of team.shots_on_target over the previous 3 matches (leak-free). |
| sot for avg (last 5) | before kickoff | 132,099 | Shots on target per game over the previous 5 matches. Leak-free: only games strictly before kickoff. |
| squad age | before kickoff | 46,812 | Minutes-weighted mean age of the side's previous-match lineup (person DOB from bio-profile enrichment; strictly prior lineup, no team-news leak). |
| state index | before kickoff | 275,146 | 'How is this team right now' β weighted blend of strength (Elo), trajectory (momentum), attack/defence balance, control, home form, drought and fatigue. Each input z-scored against the past only. The first of many composites. |
| sterile dominance v1 | before kickoff | 131,271 | Possession without punch: +possession (35%) +pass accuracy (25%) MINUS threat rate (40%), last 5. High = they keep the ball and do nothing with it β the 'it's just them defending well / passing around the back' detector. |
| threat rate | outcome | 133,674 | Total shots per % of possession this match. High = the ball does something when they have it; low with high possession = sterile passing (or the other side parked). |
| threat rate (last 10) | before kickoff | 129,295 | Rolling mean of team.threat_rate over the previous 10 matches (leak-free). |
| threat rate (last 3) | before kickoff | 131,770 | Rolling mean of team.threat_rate over the previous 3 matches (leak-free). |
| threat rate (last 5) | before kickoff | 131,770 | Rolling mean of team.threat_rate over the previous 5 matches (leak-free). |
| travel km | before kickoff | 10,624 | Away side's great-circle distance from home city to the match city (clubs with known coordinates only). |
| venue ppg (last 5) | before kickoff | 262,867 | Points per game over previous 5 matches at the same venue side (home form for home side). |
| xg | outcome | 32,563 | Expected goals (xG) posted in this match β chance quality, not luck. |
| xg against avg (last 5) | before kickoff | 31,348 | Expected goals CONCEDED per game over the previous 5 matches. Leak-free: only games strictly before kickoff. |
| xg for avg (last 5) | before kickoff | 31,349 | Expected goals created per game over the previous 5 matches β chance quality walking in. Leak-free: only games strictly before kickoff. |
| Metric | When known | Values | What it measures |
|---|---|---|---|
| deciding set rate | before kickoff | 23,886 | Clutch: share of career deciding sets won entering the match (null under 5 deciders). |
| rank | before kickoff | 28,848 | Published world ranking walking into the match (as recorded by tennis-data at match time). |
| sets played 14d | before kickoff | 28,876 | Sets played in the previous 14 days β honest fatigue (a five-set war and a walkover are not the same 'one match'). |
| straight sets rate | before kickoff | 24,899 | Dominance: share of career wins in straight sets entering the match (null under 5 wins). |
| surface elo | before kickoff | 28,876 | Elo maintained separately per surface β the rating entering THIS match on THIS surface. Specialists diverge from overall Elo; the gap is the signal. |