About HoopModel
A side project built by Kai Y. that predicts NBA game winners (and their winning margins), and keeps score on itself, in public.
What this is
Every night with games on the schedule, three models each predict the winner and the point margin for every matchup. The picks are logged before tip-off, graded against the final score after the buzzer, and published here — hits, misses, and everything on the track record. Nothing is edited after the fact.
The data
The models learn from years of NBA team box scores — traditional counting stats plus four-factors, hustle, player tracking, and scoring breakdowns. Before each game, every team's recent play is distilled into rolling features: how they've shot, rebounded, defended, and won over their last 5/10 games, at home and on the road. You can poke at the same data on the Team stats and Stat scatter pages, and see which of these signals actually track winning on What wins games.
The models
Three independent models make every pick: a random-forest ensemble, a gradient boosting model, and a neural network. Each predict a home-team win probability, and an expected point margin. The models don't always agree. Their strengths and weaknesses are compared openly on the Compare models page.
The nightly cycle
A scheduled batch job runs every morning: it pulls the latest results, refreshes each team's rolling form, grades yesterday's predictions, and writes tonight's picks to the database. The site you're reading is a static page that fetches those stored predictions — no model runs when you load a page, which is why it's fast.
Keeping myself honest
Accuracy alone can flatter, so the track record also shows the average margin miss, probability calibration, and a comparison against the betting market's closing pre-game spread, which I believe is the strongest public benchmark for a game's margin. The market is very hard to beat; showing the gap either way is the point.
What this is not
Betting advice. The published models and their respective outputs are published for curiosity, learning, and record-keeping only. It is purely for an educational purpose.
Under the hood
For the technically curious: the models are Python (scikit-learn and PyTorch), trained on features engineered from boxscore history in MySQL. Predictions are batch-computed on a nightly schedule in AWS (Fargate), stored in a database, and served by a small read-only API. This site is a static Next.js app on S3 behind CloudFront, and the whole stack is defined in Terraform and deployed by CI on every push.