- 1FastF1 ingestion pulls live timing + telemetry per session
- 2Leakage-safe feature pipeline: strictly time-ordered splits + walk-forward season backtesting
- 3Random Forest vs. gradient-boosting models, compared on top-3 hit-rate
- 4Flask REST API + dashboard, containerized with Docker on a public cloud VM
- 5Automated race-data fetching and model retraining
Data leakage. Naive random splits let information from the future bleed into training and inflate the score. The fix was strict time-ordering and walk-forward backtesting across seasons — so every prediction is made only from the past.
An honest metric beats an impressive one. Top-3 hit-rate under walk-forward validation tells the truth; a shuffled split just tells you what you want to hear.
Top-3 hit-rate — the average share of each race's real podium that appears in the model's three picks. Walk-forward: before every race the model is retrained on earlier races only, then scored on that race. Baseline: pick the three fastest qualifiers.
| season | races | model | baseline | Δ |
|---|---|---|---|---|
| 202420 races | 20 | 61.7% | 63.3% | −1.6 |
| 202524 races | 24 | 75.0% | 75.0% | ±0.0 |
| 2026 (to R17)17 races | 17 | 56.9% | 60.8% | −3.9 |
It matches the baseline in 2025 and trails it by 1.6–3.9 points in 2024 and 2026 — it doesn't beat the qualifying grid yet.
Random-forest model · walk-forward run of 22 Oct 2026 on the deployed app (/api/backtest). The repo README's ~74% (2025) and ~63% (2024) come from an earlier run on 8 Aug 2026 (73.6% and 61.7%). A 6-race holdout isn't reported: the training script picks its 'best model' on those same races.

loading the next race weekend…
demo access · The live app is served over plain HTTP from a small VM, so browsers that enforce HTTPS-only may block it. The screenshot and race data above are relayed over HTTPS.
