Model metadata
Feature Store
ML Features ml_nrl_team_form_features 7 columns Point-in-time team form features at match-team grain. Rolling values are...
Point-in-time team form features at match-team grain. Rolling values are calculated only from completed matches for the same team with kickoff timestamps strictly before the fixture kickoff.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from the draw match grain. | not_null |
season |
general | Fixture season. | not_null |
round |
general | Fixture round. | not_null |
kickoff_at_utc |
general | Fixture kickoff timestamp used as the point-in-time cutoff. | not_null |
team_key |
general | Lowercase team key for the team being featurized. | not_null |
is_home |
general | True when this feature row belongs to the fixture home team. | not_null |
last_match_kickoff_at_utc |
form | Most recent prior completed match kickoff used for rest days and form features. |
ML Features ml_nrl_ladder_features 7 columns Point-in-time ladder features at match-team grain. The selected ladder row...
Point-in-time ladder features at match-team grain. The selected ladder row is the latest row in the same season with ladder round strictly less than the fixture round.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from the draw match grain. | not_null |
season |
general | Fixture season. | not_null |
round |
general | Fixture round. | not_null |
kickoff_at_utc |
general | Fixture kickoff timestamp used as the point-in-time cutoff. | not_null |
team_key |
general | Lowercase team key for the team being featurized. | not_null |
is_home |
general | True when this feature row belongs to the fixture home team. | not_null |
ladder_round |
ladder | Source ladder round used for this fixture-team row. |
ML Features ml_nrl_match_training_examples 7 columns Model-ready historical match rows for training the home-margin predictor....
Model-ready historical match rows for training the home-margin predictor. One row represents one completed match and includes target `home_margin = home_score - away_score`.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from the draw match grain. | not_null, unique |
season |
general | Fixture season. | not_null |
round |
general | Fixture round. | not_null |
kickoff_at_utc |
general | Completed fixture kickoff timestamp. | not_null |
home_margin |
weather | Training target, calculated as home_score minus away_score. | not_null |
home_team |
general | Fixture home team nickname. | not_null |
away_team |
general | Fixture away team nickname. | not_null |
ML Features ml_nrl_match_weather_features 3 columns Model-ready per-match weather features joined to match grain. Missing...
Model-ready per-match weather features joined to match grain. Missing weather values are zero-filled so downstream model and app paths can run before weather backfill, while `weather_data_available` preserves whether an observed hourly row was present.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from draw match grain. | not_null, unique |
venue_key |
general | Stable curated stadium key. | not_null |
weather_data_available |
weather | True when observed weather exists at kickoff hour. |
ML Features ml_nrl_upcoming_matches 6 columns Model-ready upcoming or unscored match rows for weekly prediction runs. The...
Model-ready upcoming or unscored match rows for weekly prediction runs. The schema mirrors training examples except the target is null.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from the draw match grain. | not_null, unique |
season |
general | Fixture season. | not_null |
round |
general | Fixture round. | not_null |
kickoff_at_utc |
general | Upcoming fixture kickoff timestamp. | not_null |
home_team |
general | Fixture home team nickname. | not_null |
away_team |
general | Fixture away team nickname. | not_null |
ML Features ml_nrl_player_season_stats 5 columns Per-player, per-season aggregate stats pivoted to wide form from...
Per-player, per-season aggregate stats pivoted to wide form from gold_nrl_stats_latest. All _pg columns are per-game averages. Minimum 3 games played to exclude cameo appearances.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
player |
lineup | — | not_null |
season |
general | — | not_null |
games_played |
general | Games played in the season (used as denominator for per-game averages). | |
strength_index |
ladder | Composite Z-score index; positive = above league average for position group. | |
tackle_efficiency |
general | tackles / (tackles + missed_tackles); higher = better defender. |
ML Features ml_nrl_player_strength 6 columns Per-lineup-appearance player strength index. For each player in...
Per-lineup-appearance player strength index. For each player in stg_team_lists, looks up prior-season stats and computes Z-score-based strength_index and playmaker_index. The prior-season join is by player name only (no team filter) so transferred players retain their stats. New players (no prior-year data) fall back to position_group average (strength_index = 0).
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
current_team |
lineup | Team the player is named in for the current season (from stg_team_lists). | |
prior_team |
lineup | Team the player played for in the prior season, or NULL if no prior stats found. | |
strength_index |
ladder | Composite of 8 Z-score components (run metres, tries, linebreaks, tackle breaks, offloads, tackles, tackle defence, discipline) / 8. 0 = position-group average. Positive = above average. | |
playmaker_index |
general | Kick-weighted composite for spine quality assessment. Weights kick_metres 2×. Higher = better playmaker. | |
true_new_player_flag |
lineup | 1 when no prior-season stats exist for this player; 0 when prior stats found (even if from a different team). | |
transferred_team_flag |
lineup | 1 when player has prior-season stats from a different team (inter-club transfer); 0 otherwise. |
ML Features ml_nrl_lineup_features 17 columns Pre-kickoff lineup features at (season, round, team) grain. All values are...
Pre-kickoff lineup features at (season, round, team) grain. All values are derivable from the named 17 announced before the match. Includes strength aggregates, spine continuity, rest context, origin week flag, and travel burden.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
spine_continuity |
ladder | Count of spine positions (1,6,7,9) unchanged from prior round. 0-4. | |
squad_strength_delta |
lineup | Current squad strength minus prior round squad strength. Positive = stronger lineup. | |
origin_week_flag |
general | 1 if this round is in nrl_round_exceptions as origin_impacted. | |
is_interstate |
general | 1 if venue_city != team home city (travel burden proxy). | |
long_travel_flag |
general | 1 for Auckland/Melbourne/Townsville trips (significant travel). | |
core_spine_strength |
lineup | Average strength_index for players in jerseys 1, 6, 7, 9. | |
spine_continuity_count |
lineup | Count of spine jersey slots (1,6,7,9) that have a named player. | |
spine_continuity_rate |
general | spine_continuity_count / 4.0. 1.0 = all four spine slots filled. | |
halves_playmaker_index |
general | Average playmaker_index for jerseys 6 (five-eighth) and 7 (halfback). | |
hooker_defence_service_index |
general | For jersey 9: composite of tackle efficiency (0.5 weight) and error rate (0.5 weight). Falls back to hooker strength_index when tackle stats unavailable. | |
top3_forward_strength |
general | Average strength_index of the top 3 forwards (by strength) among jerseys 8-13. | |
middle_forward_power |
general | Average strength_index for middle forwards: jerseys 8, 10, 13. | |
edge_forward_attack_defence |
odds | Average strength_index for edge forwards: jerseys 11, 12. | |
centre_defence_index |
general | Average strength_index for centres: jerseys 3 and 4. | |
outside_back_finish_index |
general | Average strength_index for outside backs: jerseys 1-5. | |
new_player_count |
lineup | Count of players in this lineup with true_new_player_flag = 1 (no prior-season stats). | |
transferred_player_count |
lineup | Count of players in this lineup with transferred_team_flag = 1 (inter-club transfer). |
ML Features ml_nrl_match_lineup_features 18 columns Model-ready per-match feature table combining both teams' lineup features....
Model-ready per-match feature table combining both teams' lineup features. One row per match. All features are knowable before kickoff. Prefixes: home_ / away_ / delta_ (home minus away). Outcome columns (home_win, margin) are null for future matches.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_grain |
weather | Canonical match identifier. | |
home_win |
general | 1 = home team won, 0 = away team won. Null for unplayed matches. | |
margin |
target | home_score - away_score. Null for unplayed matches. | |
delta_squad_strength |
general | home_squad_strength_avg - away_squad_strength_avg. | |
delta_spine_strength |
general | home_spine_strength_avg - away_spine_strength_avg. | |
delta_core_spine_strength |
general | home_core_spine_strength - away_core_spine_strength. | |
delta_spine_continuity_rate |
general | home_spine_continuity_rate - away_spine_continuity_rate. | |
delta_halves_playmaker_index |
general | home_halves_playmaker_index - away_halves_playmaker_index. | |
delta_hooker_defence_service_index |
general | home_hooker_defence_service_index - away_hooker_defence_service_index. | |
delta_top3_forward_strength |
general | home_top3_forward_strength - away_top3_forward_strength. | |
delta_middle_forward_power |
general | home_middle_forward_power - away_middle_forward_power. | |
delta_edge_forward_attack_defence |
odds | home_edge_forward_attack_defence - away_edge_forward_attack_defence. | |
delta_centre_defence_index |
general | home_centre_defence_index - away_centre_defence_index. | |
delta_outside_back_finish_index |
general | home_outside_back_finish_index - away_outside_back_finish_index. | |
home_new_player_count |
lineup | Count of true_new_player_flag = 1 players in the home lineup. | |
away_new_player_count |
lineup | Count of true_new_player_flag = 1 players in the away lineup. | |
home_transferred_player_count |
lineup | Count of transferred_team_flag = 1 players in the home lineup. | |
away_transferred_player_count |
lineup | Count of transferred_team_flag = 1 players in the away lineup. |
Silver (Staged) silver_nrl_draw 8 columns Normalized copy of the staged NRL draw Parquet files. This model preserves...
Normalized copy of the staged NRL draw Parquet files. This model preserves staged run history and keeps one row per scraped fixture record per run.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season from the staged partition. | |
round |
general | NRL round from the staged partition. | |
match_grain |
weather | Business grain key built from season, round, home team, and away team. | |
home_team |
general | Home team nickname from the NRL draw payload. | |
away_team |
general | Away team nickname from the NRL draw payload. | |
kickoff_at_utc |
general | Fixture kickoff timestamp in UTC when present in the source payload. | |
run_id |
general | Raw scrape run identifier that produced the staged record. | |
snapshot_date |
general | Local staging snapshot date written by the staging script. |
Silver (Staged) silver_nrl_ladder 8 columns Normalized copy of the staged NRL ladder Parquet files. This model preserves...
Normalized copy of the staged NRL ladder Parquet files. This model preserves staged run history and keeps one row per team ladder position per run.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season from the staged partition. | |
round |
general | NRL round from the staged partition. | |
team |
ladder | Team nickname from the NRL ladder payload. | |
team_key |
ladder | Lowercase normalized team key used for ladder deduplication. | |
ladder_position |
ladder | Team position on the ladder at the scraped round. | |
points |
ladder | Competition points at the scraped round. | |
run_id |
general | Raw scrape run identifier that produced the staged record. | |
snapshot_date |
general | Local staging snapshot date written by the staging script. |
Silver (Staged) silver_nrl_players 8 columns Normalized copy of the staged NRL players Parquet files. This model...
Normalized copy of the staged NRL players Parquet files. This model preserves staged run history and keeps one row per scraped player profile record per run.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season from the staged partition. | |
player_key |
lineup | Canonical player key, preferring person id, then profile slug, then player name. | |
player_name |
lineup | Player display name built from first and last name. | |
team |
lineup | Team nickname from the player profile listing. | |
position |
ladder | Player position from the profile listing. | |
player_url_slug |
lineup | NRL profile URL slug when available. | |
run_id |
general | Raw scrape run identifier that produced the staged record. | |
snapshot_date |
general | Local staging snapshot date written by the staging script. |
Silver (Staged) silver_nrl_stats 12 columns Normalized copy of the staged NRL stats Parquet files. This model preserves...
Normalized copy of the staged NRL stats Parquet files. This model preserves staged run history and collapses the source wide metric columns into `stat_value_raw` and numeric `stat_value` fields.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season from the staged partition or source year. | |
stat_category |
general | Human-readable stat category from the NRL stats payload. | |
stat_category_key |
general | Lowercase normalized stat category key. | |
metric_key |
general | Canonical metric key, preferring stat id and falling back to stat category. | |
player |
weather | Player name when the stat row is player-grain. | |
team |
general | Team nickname for the stat row. | |
business_entity_key |
lineup | Canonical player-or-team key used for required-field checks. | |
stat_value_raw |
general | Raw metric value extracted from the matching source metric column. | |
stat_value |
general | Numeric metric value parsed from `stat_value_raw` where possible. | |
stats_grain |
weather | Business grain key used by gold stats duplicate tests. | |
run_id |
general | Raw scrape run identifier that produced the staged record. | |
snapshot_date |
general | Local staging snapshot date written by the staging script. |
Silver (Staged) silver_nrl_venue_normalized 5 columns Distinct draw venue/city labels mapped to curated `stadium_locations` venue...
Distinct draw venue/city labels mapped to curated `stadium_locations` venue keys. Naming-rights aliases are expanded from the seed, with city used as a tie-breaker when an alias could map to more than one venue.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
venue |
general | Venue label from `gold_nrl_draw_latest`. | not_null, unique |
venue_city |
general | Venue city label from `gold_nrl_draw_latest`. | |
venue_key |
general | Stable curated stadium key. | |
matched_venue_count |
general | Number of distinct venue keys matched after best-score tie-breaking. | |
match_strategy |
general | Mapping strategy: venue_alias_city, venue_alias, unmapped, or ambiguous. |
Silver (Staged) stg_nrl_weather_hourly 4 columns Hourly Open-Meteo weather rows staged from the local raw weather table. The...
Hourly Open-Meteo weather rows staged from the local raw weather table. The model compiles as an empty table before ingestion has created `stg_nrl_weather_hourly_raw`, allowing the dbt graph and app defaults to remain runnable before weather backfill.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
weather_grain |
weather | Unique weather row key, `venue_key + weather_timestamp_utc`. | not_null, unique |
venue_key |
general | Stable stadium key from `stadium_locations`. | |
weather_timestamp_utc |
weather | Hourly weather timestamp in UTC. | |
weather_timestamp_local |
weather | Hourly weather timestamp in the venue timezone. |
Gold (Modelled) gold_nrl_draw_latest 9 columns Canonical latest NRL draw table. The model selects the latest staged run for...
Canonical latest NRL draw table. The model selects the latest staged run for each season and round, then deduplicates to one row per match grain.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
round |
general | NRL round. | |
match_grain |
weather | Canonical match grain key for duplicate checks. | |
home_team |
general | Home team nickname. | |
away_team |
general | Away team nickname. | |
home_score |
target | Home team score when available. | |
away_score |
target | Away team score when available. | |
kickoff_at_utc |
general | Fixture kickoff timestamp in UTC when available. | |
run_id |
general | Latest raw scrape run selected for the season and round. |
Gold (Modelled) gold_nrl_ladder_latest 8 columns Canonical latest NRL ladder table. The model selects the latest staged run...
Canonical latest NRL ladder table. The model selects the latest staged run for each season and round, then deduplicates to one row per season, round, and team.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
round |
general | NRL round. | |
team |
general | Team nickname. | |
team_key |
general | Canonical team key for duplicate checks. | |
ladder_position |
ladder | Team ladder position. | |
played |
general | Matches played at the scraped round. | |
points |
ladder | Competition points at the scraped round. | |
run_id |
general | Latest raw scrape run selected for the season and round. |
Gold (Modelled) gold_nrl_ladder_current 9 columns Dashboard-ready current NRL ladder table. The model keeps only the latest...
Dashboard-ready current NRL ladder table. The model keeps only the latest ladder round for each season from `gold_nrl_ladder_latest`, then enforces one canonical row per season and team.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
round |
ladder | Latest ladder round selected for the season. | |
team |
general | Team nickname. | |
team_key |
general | Canonical team key for duplicate checks. | |
ladder_position |
ladder | Team ladder position in the latest selected round. | |
played |
general | Matches played at the latest selected round. | |
points |
ladder | Competition points at the latest selected round. | |
scraped_at_utc |
ladder | Timestamp when the selected ladder round was scraped. | |
run_id |
ladder | Raw scrape run selected for the latest ladder round. |
Gold (Modelled) gold_nrl_players_latest 8 columns Canonical latest NRL players table. The model preserves silver history and...
Canonical latest NRL players table. The model preserves silver history and deduplicates to one profile row per season and player key using scraped timestamp, run id, team key, and profile slug as deterministic ordering fields.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
player_key |
lineup | Canonical player key used for player deduplication. | |
player_name |
lineup | Player display name. | |
team |
lineup | Team nickname from the latest player profile snapshot. | |
position |
ladder | Player position from the latest player profile snapshot. | |
player_url_slug |
lineup | NRL profile URL slug. | |
scraped_at_utc |
general | Timestamp when the source record was scraped. | |
run_id |
general | Latest raw scrape run selected for the season. |
Gold (Modelled) gold_nrl_stats_latest 14 columns Canonical latest NRL stats table. The model preserves silver history and...
Canonical latest NRL stats table. The model preserves silver history and deduplicates to one row per season, stat category, player/team key, and metric using scraped timestamp, run id, and published rank as deterministic ordering fields.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
stat_category |
general | Human-readable stat category from the NRL stats payload. | |
stat_category_key |
general | Lowercase normalized stat category key. | |
metric_key |
general | Canonical metric key used for stats deduplication. | |
player |
weather | Player name when the row is player-grain. | |
team |
general | Team nickname for the stat row. | |
business_entity_key |
lineup | Canonical player-or-team key used in required-field checks. | |
stat_value_raw |
general | Raw metric value extracted from the staged wide metric columns. | |
stat_value |
general | Numeric metric value parsed from `stat_value_raw` where possible. | |
stats_grain |
weather | Canonical stats business grain key. | |
rank_position |
ladder | Published leaderboard rank for the stat row. | |
played |
general | Games played value published with the stat row. | |
scraped_at_utc |
general | Timestamp when the source record was scraped. | |
run_id |
general | Latest raw scrape run selected for the season and round label. |
Gold (Modelled) gold_nrl_match_weather 5 columns One row per mapped draw match with hourly stadium weather at kickoff and...
One row per mapped draw match with hourly stadium weather at kickoff and derived rain, wind, heat, humidity, and severity features. Rows are present before weather ingestion, with `weather_data_available = false` when no hourly weather is loaded yet.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
match_id |
weather | Canonical match identifier inherited from draw match grain. | not_null, unique |
match_grain |
weather | Canonical match grain. | |
venue_key |
general | Stable curated stadium key. | |
weather_timestamp_utc |
weather | Hourly weather timestamp joined at kickoff hour. | |
weather_data_available |
weather | True when observed hourly weather exists at the kickoff hour. |
Gold (Modelled) gold_nrl_player_name_map 4 columns Player identity resolution table. One row per normalized name variant...
Player identity resolution table. One row per normalized name variant (full_name and nickname_last forms) mapping to a canonical NRL person_id. Used by RAPM to resolve stg_team_lists player names across season/source variants without hardcoded diminutive maps. Players absent from this table (historical players not covered by the monthly players spider) fall back to their normalized name string in the RAPM player index.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
name_norm |
general | Normalized name variant (lowercase, whitespace-collapsed). | not_null, unique |
canonical_player_id |
lineup | NRL person_id to use as the stable player key. | not_null |
variant_type |
general | full_name or nickname_last — how this variant was derived. | |
ambiguity_count |
odds | Number of distinct person_ids that share this normalized name. Values > 1 flag ambiguous names for review; the lexicographically smallest person_id is retained. |
Gold (Modelled) gold_nrl_player_round_stats 29 columns Per-player per-match statistics sourced from the NRL match-centre /data API...
Per-player per-match statistics sourced from the NRL match-centre /data API via stg_match_stats. One row per (season, round, match_id, player_id). Enriched with canonical_player_id from gold_nrl_player_name_map and match context (home/away, final scores) from gold_nrl_draw_latest. Deduplicated: latest scraped_at_utc wins when the same match is re-scraped.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
round |
general | NRL round. | |
match_id |
general | NRL match-centre match identifier. | |
player_id |
lineup | NRL player ID from the match-centre API. | |
player_name |
lineup | Player display name as reported in the match-centre payload. | |
canonical_player_id |
lineup | Stable player key from gold_nrl_player_name_map. Falls back to 'name:<normalized_name>' for players absent from the map. | |
team |
lineup | Team nickname the player represented in this match. | |
opponent |
general | Opposing team nickname. | |
position |
ladder | Playing position. | |
jersey_number |
general | Jersey number; 1-13 = starters, 14+ = bench. | |
starter_flag |
general | 1 if jersey_number is 1–13, else 0. | |
is_home |
lineup | 1 if the player's team is the home team in the draw, else 0. | |
home_team |
general | Home team nickname (from draw). | |
away_team |
general | Away team nickname (from draw). | |
home_score |
target | Final home-team score (from draw). | |
away_score |
target | Final away-team score (from draw). | |
kickoff_at_utc |
general | Match kickoff timestamp UTC (from draw). | |
all_run_metres |
general | Total run metres. | |
all_runs |
general | Total runs. | |
post_contact_metres |
general | Post-contact metres. | |
tries |
general | Tries scored. | |
try_assists |
general | Try assists. | |
line_breaks |
general | Line breaks. | |
tackle_breaks |
general | Tackle breaks. | |
tackles_made |
general | Tackles made. | |
missed_tackles |
general | Missed tackles. | |
errors |
general | Errors. | |
fantasy_points |
ladder | NRL fantasy points total. | |
scraped_at_utc |
general | Timestamp when the match-centre data was scraped. |
Gold (Modelled) gold_nrl_card_market_movements 13 columns Card-ready odds movement snapshots for H2H, line, and total markets. This...
Card-ready odds movement snapshots for H2H, line, and total markets. This read model exposes the append-only movement snapshot table for UI sparklines and post-hoc CLV display only; it is not an actionable model feature source.
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
season |
general | NRL season. | |
round |
general | NRL round. | |
match_id |
odds | Odds provider event identifier for the fixture. | |
home_team |
general | Fixture home team nickname. | |
away_team |
general | Fixture away team nickname. | |
market_type |
odds | h2h, line, or total. | |
selection |
odds | Market side, such as home, away, over, or under. | |
snapshot_at_utc |
general | Timestamp when the movement snapshot was captured. | |
price |
odds | Decimal price at the snapshot. | |
line |
general | Spread or total line at the snapshot when applicable. | |
snapshot_label |
general | open, refresh, or close. | |
bookmaker |
odds | Bookmaker name for the snapshot row. | |
is_recommended_market |
odds | Placeholder flag; the UI marks the recommended market after joining predictions. |
Python (Runtime) backtest.py → CORE_FEATURES 9 columns Core Elo + form features
Core Elo + form features
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
elo_home_prob |
odds | — | |
elo_rating_diff |
general | — | |
rolling_margin_diff_l5 |
form | — | |
rolling_win_rate_diff_l5 |
form | — | |
rest_days_diff |
general | — | |
playoff_flag |
general | — | |
neutral_venue_flag |
general | — | |
weather_data_available |
weather | — | |
weather_impact_flag |
weather | — |
Python (Runtime) backtest.py → MARKET_FEATURES 3 columns Market odds features
Market odds features
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
close_home_implied_prob |
odds | — | |
open_home_implied_prob |
odds | — | |
market_move |
odds | — |
Python (Runtime) backtest.py → LINEUP_FEATURES 5 columns Team list / lineup delta features
Team list / lineup delta features
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
lineup_overall_delta |
lineup | — | |
lineup_halves_delta |
lineup | — | |
lineup_edge_delta |
lineup | — | |
lineup_available |
lineup | — | |
lineup_nonzero_rate |
lineup | — |
Python (Runtime) prediction.py → ROLE_LINEUP_FEATURES 17 columns Role-based lineup features
Role-based lineup features
| Feature / Column | Group | Description | Tests |
|---|---|---|---|
delta_true_new_player_rate |
lineup | — | |
delta_transferred_player_rate |
lineup | — | |
delta_core_spine_strength |
general | — | |
delta_halves_playmaker_index |
general | — | |
delta_hooker_defence_service_index |
general | — | |
delta_top3_forward_strength |
general | — | |
delta_middle_forward_power |
general | — | |
delta_edge_forward_attack_defence |
odds | — | |
delta_centre_defence_index |
general | — | |
delta_outside_back_finish_index |
general | — | |
delta_replacement_strength |
general | — | |
delta_spine_continuity_rate |
general | — | |
delta_spine_strength_from_prior_round |
general | — | |
delta_starter_strength_from_prior_round |
general | — | |
delta_top3_forward_strength_from_prior_round |
general | — | |
lineup_available |
lineup | — | |
lineup_nonzero_rate |
lineup | — |
Feature value review
| Family | Status | Latest evidence | Metric / CLV | Recommendation |
|---|---|---|---|---|
| Generic H2H team-level expansion | frozen | pooled signals hid side-specific behaviour | CLA / not established | freeze unless a new data source arrives |
| RAPM lineup delta | candidate | timing hypothesis under paper observation | CLV / pending 100 settled trades | collect team-list timing evidence |
| Weather / ground context | candidate | available as model input | calibration / pending | test in totals and line models |
| Divergence signal | killed | anti-signal in recent eras | CLA / negative | do not revive without new data |
Model roadmap
- active — open_fav_v1 / rapm_timing_v1 / line-v2
- next — market-aware CLV prediction
- next — state-space variance line model
- next — calibrated lineup/player deltas and weather-aware totals
- next — compact player-combination indexes
- deprioritised — broad H2H zoo, deep learning, uncalibrated voting