| { | |
| "model": "LightGBM binary classifier", | |
| "version": "v1", | |
| "model_file": "lgbm_overtake_v1.pkl (joblib, sklearn LGBMClassifier)", | |
| "features": [ | |
| "gap_ahead_s", | |
| "pace_delta_s", | |
| "tyre_life_x", | |
| "tyre_life_y", | |
| "tyre_life_diff", | |
| "speed_trap_delta", | |
| "LapNumber", | |
| "drs_window", | |
| "compound_x", | |
| "compound_y", | |
| "circuit_cluster", | |
| "gap_pace_product", | |
| "drs_ready_gap", | |
| "gap_trend", | |
| "pace_delta_rolling3" | |
| ], | |
| "categorical_features": [ | |
| "compound_x", | |
| "compound_y", | |
| "circuit_cluster" | |
| ], | |
| "derived_features": { | |
| "gap_pace_product": "gap_ahead_s * pace_delta_s", | |
| "drs_ready_gap": "gap_ahead_s * drs_window", | |
| "gap_trend": "gap_ahead_s[k] - gap_ahead_s[k-1] (per pair per race)", | |
| "pace_delta_rolling3": "rolling mean(pace_delta_s, 3) (per pair per race)" | |
| }, | |
| "inference_note": "Compute derived features before predict_proba. Apply calibrator to raw scores.", | |
| "target": "overtake", | |
| "train_seasons": [ | |
| 2023, | |
| 2024 | |
| ], | |
| "test_season": 2025, | |
| "n_train": 18277, | |
| "n_test": 10217, | |
| "overtake_rate_train": 8.9183, | |
| "overtake_rate_test": 7.5756, | |
| "auc_pr_test": 0.5491, | |
| "auc_roc_test": 0.8758, | |
| "logloss_test": 0.409, | |
| "optimal_threshold": 0.7976, | |
| "scale_pos_weight": 12.0501, | |
| "n_estimators": 717, | |
| "calibration": "Platt scaling (LogisticRegression on val 2024 scores)" | |
| } |