Back

NBA analytics, January 2026 to February 2026

SportMind

A table can rank scorers. A graph can walk from a player to a team, a ring, and an award, and a separate model can give a win chance without the chat inventing one.

Why a graph and a document store

Roster facts, awards, and game results are relationships. Match reports and notes are prose. One index would force both through the same door.

  • Ten seasons, about 1,400 players and 12,800 regular-season and playoff games, loaded into Neo4j.
  • 6,246 document chunks embedded in Weaviate, searched with BM25 and dense retrieval together, then reranked.

How a question is routed

The orchestrator classifies intent first. A relationship question becomes Cypher. A passage question goes to the vector store. The prose store is not asked to invent a percentage.

  • Generation tries Groq, then falls back to Gemini. Repeated questions hit an LRU cache.
  • The React app streams the answer, draws a player or team neighbourhood, and can show all 30 teams.
  • A markdown note can be indexed into the same store and asked about in chat.

Forecasts

Win probability is its own model because a box score is not a document. Player forecasts are short-memory models, one per player and stat, so a recent scoring run can move the next estimate.

  • XGBoost win model, isotonic calibration, features cut down to form, rest, head-to-head, and venue.
  • 658 EWMA models: 94 players by 7 box-score metrics. On the held-out season, points miss by about 5 and assists by about 1.6.
  • A sample read: Warriors at home against the Celtics, 54% to 46%. LeBron’s next points estimate 31.1 against a recent 32.4.