| --- |
| license: apache-2.0 |
| tags: |
| - horse-racing |
| - australia |
| - gallops |
| - lightgbm |
| - ranking |
| - tabular-classification |
| pipeline_tag: tabular-classification |
| --- |
| |
| # Australian Gallops Tipper |
|
|
| LightGBM `ranker` model for ranking Australian thoroughbred race fields. |
| The model uses FormFav-derived form/field variables and Racing Australia result |
| labels from a Supabase `ml_feature_matrix` style dataset. |
|
|
| ## Intended Use |
|
|
| - Rank runners within a single Australian gallops race. |
| - Estimate field-normalized win probabilities. |
| - Support form analysis and model research. |
|
|
| This is not financial advice and must not be treated as a guaranteed betting |
| system. |
|
|
| ## Feature Logic |
|
|
| Numerical inputs are min-max scaled within each `race_id`, so each horse is |
| evaluated relative to its field. Lower-is-better variables such as barrier, |
| days since run, last start margin, and last 600m rank are inverted after |
| scaling. |
|
|
| The model also receives expert bucket scores: |
|
|
| - Speed map and pace: 25% |
| - Form and class: 25% |
| - Track and environment: 20% |
| - Sectionals: 15% |
| - Humans and market: 15% |
|
|
| This baseline was trained from the local `2026-08-01` FormFav and Racing |
| Australia comparison archives. Several unavailable live variables are currently |
| proxy-filled, including true early sectionals, last-start weight, jockey/trainer |
| historical strike rate, and market firming. Treat this as a first real data |
| artifact, not a production betting model. |
|
|
| ## Validation Metrics |
|
|
| - `mode`: ranker |
| - `rows`: 1292 |
| - `train_rows`: 1024 |
| - `validation_rows`: 268 |
| - `races`: 124 |
| - `train_races`: 99 |
| - `validation_races`: 25 |
| - `top1_accuracy`: 0.24 |
| - `mean_ndcg_at_3`: 0.3809487605714332 |
| - `race_normalized_log_loss`: 0.3578525368255854 |
| - `roc_auc`: 0.6179423868312758 |
|
|
| ## Feature Importance |
|
|
| - `expert_prior_score`: 1110.0574 |
| - `form_class_score`: 950.1305 |
| - `rel_sectional_vs_class_avg`: 857.8760 |
| - `rel_api_index`: 829.7493 |
| - `rel_barrier`: 760.1593 |
| - `speed_map_score`: 736.7255 |
| - `rel_margin_beaten_last_start`: 707.3938 |
| - `sectionals_score`: 660.5257 |
| - `rel_track_condition_win_pct`: 609.6845 |
| - `rel_last_600m_rank`: 548.6328 |
| - `track_env_score`: 510.0266 |
| - `rel_distance_mastery_pct`: 320.8251 |
| - `rel_early_speed_rating`: 81.1268 |
| - `projected_settling_position`: 18.3684 |
| - `rel_days_since_last_run`: 6.8742 |
| - `rel_market_firm_factor`: 0.0000 |
| - `rel_jockey_trainer_strike_rate`: 0.0000 |
| - `rel_track_layout_score`: 0.0000 |
| - `human_market_score`: 0.0000 |
| - `rel_weight_delta`: 0.0000 |
|
|
| ## Files |
|
|
| - `model.joblib`: trained LightGBM estimator |
| - `model.txt`: native LightGBM booster text dump |
| - `preprocessing.json`: feature schema and race-relative scaling metadata |
| - `training_config.json`: training settings |
| - `metrics.json`: validation metrics |
| - `feature_importance.csv`: gain-based feature importance |
|
|