← Dashboard

RoliBot NBA · docs

How RoliBot NBA works

This is a custom end-to-end AI system I designed and built — not a generic chatbot wrapper. It ingests real NBA statistics, trains calibrated predictors, scores tonight's slate, and ranks player props with betting-math overlays (Kelly sizing, parlay math, opponent context).

Author

Robby Rolison

I architected and implemented the full pipeline: feature engineering from team game logs, the ensemble model, the props / parlay engines, JSON API surface, and this dashboard. The stack is Python (pandas, scikit-learn, XGBoost) plus the public nba_api client for schedules and box-score-derived histories — wired to run in CI, locally, or on Vercel serverless.

Data & seasons

Regular-season team games are pulled season-by-season via LeagueGameFinder. The code automatically includes every season from 2018-19 through the current NBA season string (e.g. 2025-26), so the merged training frame always grows with the calendar — not a fixed "2018–2025" cap.

Richer runs may embed a per-season audit under pipeline.season_pull (older JSON). The v5 CLI JSON is slimmer: slate date, injury snapshot, accuracy guardrails, and parlay blocks are at the root — the dashboard reads both shapes.

Model training

  • Features: rolling offensive/defensive proxies, rest and back-to-back flags, win-streak and momentum differentials, home/away splits merged into one row per game.
  • Split: strictly time-ordered 80% train / 20% holdout (no random shuffle leakage).
  • Ensemble (v5): four calibrated models — XGBoost, Random Forest, Gradient Boosting, Logistic Regression — blended at 45% / 30% / 15% / 10%.
  • Features (v5): ~65 rolling team signals including multi-window momentum (3 / 5 / 10 games) and variance-style cues so unstable teams are distinguishable from steady ones.
  • Cache: fingerprinted training data; cache hit skips full retrain (see JSON model.cache_hit).
  • Evaluation: when the JSON includes them, holdout accuracy, log-loss, and calibration bins appear on the dashboard; v5 runs may omit the full evaluation block.
  • LLM layer (optional): with ANTHROPIC_API_KEY, short per-game narratives can augment the rules-based output; without a key the pipeline still runs.

Props, parlays, injuries

Props use PlayerGameLog for the current NBA season (with a previous-season merge early in the year when sample size is thin). Hit rates blend recent games heavier than older ones; opponent defensive context nudges scoring lines. Injuries: ESPN-style feed with tighter name matching; Out, Doubtful, GTD, Questionable, and similar statuses are excluded from props. Traded players: recent game logs must align with the roster team or the player is skipped. Activity: very stale game activity is filtered so long-term IR doesn't slip through. Same-game parlays (SGP) are listed separately; hit probabilities still multiply legs (books price correlation).

Live calibration (graded picks)

After the morning grading job fills graded_picks, this chart compares each model-confidence bucket to realized hit rates. Points hugging the diagonal mean stated probabilities matched outcomes — a sanity check before trusting Kelly-style sizing.

Add public Supabase env vars to render calibration.

How to use the dashboard

  1. Set your bankroll assumptions in the predictor config to match what you actually risk.
  2. Treat STRONG / GOOD sides plus printed Kelly amounts as templates, not guarantees.
  3. Safe prop parlays prioritize hit rate; risky ladders are for tiny stakes only.
  4. Hot-streak legs emphasize recent form vs season baseline — still statistical, not narrative.
  5. Re-run or deploy the API after the date rolls so the slate matches "tonight."
  6. Invalidate or delete the model cache when you want a forced full retrain on fresh history.
  7. Never bet more than you can afford to lose — this stack is research and entertainment.

Start free (today)

The live slate, model picks, props, and parlay math on the home dashboard are free to use—point the site at your hosted predictor JSON and you're live. No payment is required to explore tonight's board or read the methodology here.

Why "pay" might exist later: optional premium add-ons (push alerts, CSV exports, custom bankroll profiles, API rate limits) can help cover compute and data costs. Nothing here is a promise of profit; any future paid tier would be clearly labeled and optional.

← Back to tonight's picks

Disclaimer

RoliBot NBA outputs probabilities and sizing math for education and entertainment. Past model performance does not predict future results. Sports betting carries financial and legal risk; comply with your jurisdiction.

— Built by Robby Rolison