Sports ML: evaluation before ego
A compact example of how I build model-backed decision systems: reusable Python primitives, an evaluation dashboard, and reporting that surfaces calibration, rolling accuracy, and CLV-style behavior instead of hiding behind one flattering number.
Problem
Sports models are easy to oversell with a headline accuracy number. That is rarely enough for a serious team. If the model is going to influence decisions, you need to know whether it is calibrated, whether the behavior is stable over time, and whether the evaluation language resembles the way real forecasting and risk work is reviewed.
Outcome
This project gives employers a fast way to see how I think. I did not just train a model. I built the layer around it so another person can inspect quality, reason about tradeoffs, and decide whether the signal is real enough to trust.
Approach
- Primitives library:
nba-ratings/nba-edgepackages Elo updates, logistic win probability, implied probability math, and Kelly helpers into reusable, test-backed Python primitives. - Monitoring layer:
odds-drift-watchtracks meaningful sportsbook movement via FastAPI and webhooks for research and decision-support use cases. - Evaluation UI:
nba-clv-dashboardsurfaces calibration, rolling accuracy, Brier score, and CLV-oriented reporting in a way that can swap in real backtest output without rewriting the interface.
Why It Matters
The strongest signal here is not “sports betting.” It is that I know how to build evaluation-first analytics in a noisy domain where leakage, overconfidence, and vanity metrics are common. The same thinking translates well to forecasting, experimentation, fraud, risk, and decision-support products.
Links
Dashboard repo · Primitives repo · Odds monitoring repo
To save as PDF: print this page from Chrome or Safari and choose “Save as PDF.”