NBA Sports Server Status
Backup: backtest.db.bak-20260804-020719
Reproducible Sports Data Map
| Report artifact | Generated | What it proves |
|---|---|---|
| sports-data-map.json | 2026-08-04 03:26 UTC | Machine-readable sports inventory, relationship tests, and correlation outputs |
| sports-data-map.md | 2026-08-04 03:26 UTC | Readable summary of the same generated report |
| sports_data_map.py | read-only generator | Server-side script used to regenerate the map from current sports data |
The generator excludes non-sports inventory and maps only sports roots: NBA, MLB package, odds, Pikkit, Kalshi, kyleskom, Kaggle, live sports captures, and sports model artifacts.
Sports Data Inventory
| Largest sports files | Size | Use |
|---|---|---|
| backtest.db | 796.05 MB | NBA games, PBP actions, box scores, historical odds |
| backtest.db.bak-20260804-020719 | 697.27 MB | Pre-cleanup backup |
| kalshi_nba.db | 426.00 MB | Kalshi NBA games, markets, player props, candles |
| NBA_AI_dev.zip | 191.30 MB | Compressed NBA SQLite archive; 3.36 GB uncompressed |
| TeamData.sqlite | 87.62 MB | Historical team-state tables from kyleskom NBA data |
| candles.parquet | 48.87 MB | Kalshi candle export |
| dataset.sqlite | 35.62 MB | Historical modeling dataset tables |
| nba_kxnbapts_raw.json | 28.04 MB | Raw Kalshi NBA player-points market export |
| nba_kxnbareb_raw.json | 27.27 MB | Raw Kalshi NBA player-rebounds market export |
| nba_spread_markets_raw.json | 22.28 MB | Raw Kalshi NBA spread market export |
This page is scoped to sports-related data only: NBA, odds, Pikkit, Kalshi, kyleskom, Kaggle, and sports model artifacts.
Multi-Season Game Data
| Source | Rows or tables | Season or date span | What it adds |
|---|---|---|---|
| backtest.db / games | 7,041 games | 2018-10-16 to 2026-03-31 | Canonical IDs, teams, scores, PBP linkage, box-score linkage |
| backtest.db / pbp_actions | 4,536,527 actions | 2018-19 through partial 2025-26 | Action-level game state for model joins |
| kaggle_nba_betting/nba_2008-2025.csv | 23,118 rows | 2008 season through 2025 season | Game scores plus spread, total, moneyline, second-half spread, and second-half total |
| nba_2013_2014.csv ... nba_2017_2018.csv | 7,058 rows | 2013-10-06 to 2018-06-09 | Older spread/AH and O/U scraper files; 7,049 AH fields and 7,044 O/U fields |
| kyleskom-nba/Data/TeamData.sqlite | 4,320 date tables | 2007-10-30 to 2026-01-07 | Daily team-level state tables, roughly 128,570 team rows |
| kyleskom-nba/Data/OddsData.sqlite | 45,284 rows | 2007-08 through partial 2025-26 | Season-level odds tables across 36 SQLite tables |
| kyleskom-nba/Data/dataset.sqlite | 60,031 rows | 2012-26 modeling tables | Prepared historical modeling datasets with 115+ columns |
| pikkit_nba_spreads_full.json | 1,632 bets | 2022-04-03 to 2026-02-25 | User wager history for NBA spread analysis |
| kalshi_nba.db / games | 1,061 games | 2025-04-15 to 2026-03-05 | Prediction-market event ticker mapping by NBA game |
| missing_games.json | 5,655 candidates | 2018-19 through 2025-26 | Backfill queue; 4,416 already present, 1,239 remaining candidates, 1,969 rows lack date/team fields |
The server has multiple overlapping game-data layers. The safest path is to keep backtest.db as the canonical NBA game/PBP spine, then map Kaggle, kyleskom, Pikkit, and Kalshi records onto it with explicit crosswalk tables.
Season Coverage
| Season | Games | PBP games | PBP actions | Stats games | Odds games |
|---|---|---|---|---|---|
| 2018-19 | 239 | 239 | 114,814 | 239 | 0 |
| 2019-20 | 236 | 236 | 111,088 | 236 | 0 |
| 2020-21 | 1,080 | 1,080 | 605,198 | 617 | 0 |
| 2021-22 | 1,230 | 1,230 | 691,875 | 764 | 0 |
| 2022-23 | 1,230 | 1,230 | 679,732 | 768 | 0 |
| 2023-24 | 647 | 647 | 359,701 | 321 | 0 |
| 2024-25 | 1,230 | 1,230 | 686,008 | 1,230 | 846 |
| 2025-26 | 1,061 | 973 | 562,932 | 973 | 0 |
| Playoffs 2021-2024 | 88 | 88 | 47,608 | 0 | 0 |
The regular-season base spans 2018-19 through partial 2025-26, with 4,536,527 PBP actions in the raw table. 2024-25 remains the clean complete season for games, PBP, and stats.
Database Tables
| Database or table | Rows | Tables | Size |
|---|---|---|---|
| backtest.db | 4,579,557 | 5 | 796.05 MB |
| pbp_actions | 4,536,527 | - | - |
| games | 7,041 | - | - |
| box_scores | 12,770 | - | - |
| historical_odds | 22,048 | - | - |
| kalshi_nba.db | 2,826,724 | 4 | 426.00 MB |
| TeamData.sqlite | 128,570 | 4,320 | 87.62 MB |
| dataset.sqlite | 60,031 | 4 | 35.62 MB |
| OddsData.sqlite | 45,284 | 36 | 4.42 MB |
| arb_log.db | 14,034 | 3 | 1.82 MB |
| signals.db | 7,230 | 9 | 1.57 MB |
| live_spreads.db | 873 | 1 | 0.20 MB |
| odds_snapshots.db | 171 | 1 | 0.06 MB |
| sports/game_snapshots.db | 11 | 3 | 0.03 MB |
| nuclear_players.db | 158 | 3 | 0.04 MB |
Duplicate PBP rows removed: 58,419. A unique game/action guard is now in place on pbp_actions(game_id, action_number).
2024-25 Odds Detail
| Book | Market | Rows | Games |
|---|---|---|---|
| BetMGM | h2h | 1,742 | 845 |
| BetMGM | spreads | 1,718 | 834 |
| BetMGM | totals | 1,742 | 845 |
| DraftKings | h2h | 1,772 | 846 |
| DraftKings | spreads | 1,772 | 846 |
| DraftKings | totals | 1,772 | 846 |
| FanDuel | h2h | 1,766 | 841 |
| FanDuel | spreads | 1,788 | 841 |
| FanDuel | totals | 1,766 | 841 |
Current 2024-25 historical odds window: 2024-10-21T17:55:39Z through 2025-04-13T11:55:38Z. This table is archived The Odds API market data; the live/in-play rows are stored separately in the live inventory below.
Live Odds Inventory
| Source | Rows | Games or keys | Window | Status |
|---|---|---|---|---|
| arb_log.db / odds_snapshots | 9,655 | 28 game keys | 2026-02-24 to 2026-03-01 | 3,201 in-play rows |
| arb_log.db / pbp_snapshots | 4,343 | 16 games | 2026-02-24 to 2026-03-01 | Live game state snapshots |
| arb_log.db / run_events | 36 | 8 games | 2026-02-24 | Run detection context |
| live_spreads.db / spread_snapshots | 873 | 13 games | 2026-03-06 to 2026-03-16 | FanDuel spread present on 645 rows |
| odds_snapshots.db / snapshots | 171 | 9 game keys | 2026-03-07 20:38 to 20:58 UTC | Short capture window |
| sports/game_snapshots.db / game_snapshots | 7 | manual snapshots | 2026-06 capture DB | Small manual sports capture, not normalized |
| sports/screenshot_snapshots_raw.json | 14 | raw snapshots | 2026-06 support file | Raw capture payloads for manual review |
The live capture is real, but it is siloed from the historical odds table. The next database step is to create a canonical in-game odds snapshot table keyed by game and timestamp, then attach each PBP state to the latest prior odds row.
Pikkit Betting Data
| Pikkit asset | Rows | Window or coverage | Notes |
|---|---|---|---|
| pikkit_bets.csv | 7,336 | 2022-03-27 to 2026-03-01 | Raw Pikkit export; 5,960 straight bets and 1,257 parlays |
| pikkit_bets.csv / NBA rows | 2,684 | 2022-03-27 to 2026-02-28 | NBA-tagged rows; BetMGM 1,576, FanDuel 932, DraftKings 175 |
| pikkit_nba_spreads_full.json | 1,632 | 2022-04-03 to 2026-02-25 | Full NBA spread extraction; 1,590 standard lines and 42 alt lines |
| pikkit_matched_v6.json | 197 | 135 distinct game IDs | Matched spread bets with game state, fair spread, edge, and model agreement fields |
| pikkit_full_pbp_enriched.json | 203 | 133 distinct game IDs | Matched wager rows with period, clock, action index, score, margin, and rolling stat context |
| pikkit_historical_ev.json | 122 | Periods 2-4 | Historical expected-win and edge checks for filtered in-game states |
| mlb-package/pikkit_all_sports.csv | 7,336 | 2022-03-27 to 2026-03-01 | Backup all-sports export with same row count as the active raw Pikkit file |
| mlb-package/pikkit_mlb_raw.csv | 385 | 2022-05-01 to 2025-10-28 | MLB-tagged raw Pikkit rows: BetMGM 374, DraftKings 7, FanDuel 4 |
| mlb-package/pikkit_mlb_enriched.csv/json | 645 | 2022-05-01 to 2025-10-29 | MLB wager context: 321 moneyline, 318 run line, 6 spread rows |
Pikkit is wager-history data, so it should be joined after the canonical game/PBP spine is stable. The model-ready layer is the matched/enriched JSON, not the raw CSV by itself.
Sports Relationship Tests
| Relationship | Rows or games checked | Result | Next action |
|---|---|---|---|
| Pikkit full PBP enriched to backtest.db | 203 rows / 133 game IDs | All game IDs matched; 0 action numbers out of bounds vs PBP | Use as current model-ready Pikkit layer |
| Pikkit matched v6 to backtest.db | 197 rows / 135 game IDs | All game IDs matched | Keep for fair-spread and edge checks |
| live_spreads.db to backtest.db | 13 game IDs | All game IDs matched | Normalize into canonical live odds snapshots |
| arb_log.db / pbp_snapshots to backtest.db | 16 game IDs | All game IDs matched | Join to odds snapshots by game/time |
| Historical odds events to backtest.db | 846 matched odds games | 1 odds/event game ID does not match | Inspect unmatched ID before final odds backfill |
| Kalshi games to backtest.db | 1,061 Kalshi game IDs | 905 parsed ticker matches; 156 missing | Backfill missing canonical games or keep Kalshi-only rows flagged |
| Kaggle NBA betting rows to backtest.db | 8,909 rows inside canonical date range | 6,345 rows on canonical dates; 3,275 exact score matches; 17 team/date-only matches | Use as historical odds layer where canonical game exists |
| 2013-18 spread CSVs to backtest.db | 7,058 older betting rows | Mostly pre-canonical; requires historical game spine expansion | Map after canonical games are extended before 2018-19 |
| kyleskom OddsData to backtest.db | 45,284 rows across 36 tables | 4,138 exact score matches; 20 team/date-only matches | Resolve missing tournament/playoff/date gaps before production joins |
| kyleskom TeamData dates to backtest.db | 4,320 date tables | 979 dates overlap canonical games; sample dates cover all teams checked | Use as team-state feature layer by date/team |
| Generated sports map artifacts | 562 files / 57 correlations | Sports-only JSON and Markdown reports are hosted | Use sports_data_map.py as the repeatable audit gate |
| Correlation check | Dataset | N | r | Readout |
|---|---|---|---|---|
| Edge vs profit | pikkit_matched_v6.json | 115 | 0.044 | Very weak positive relationship |
| Edge vs win | pikkit_matched_v6.json | 115 | 0.057 | Very weak positive relationship |
| Margin at bet vs win | pikkit_full_pbp_enriched.json | 191 | 0.037 | No meaningful linear signal yet |
| Period vs win | pikkit_full_pbp_enriched.json | 203 | -0.008 | No linear period signal in this slice |
| Closing total vs actual points | kaggle_nba_betting | 23,118 | 0.654 | Strong sanity-check relationship |
| Second-half total vs actual points | kaggle_nba_betting | 19,817 | 0.622 | Strong secondary odds sanity check |
| Q3 margin vs dog covered | live_line_correlation_data.json | 5,498 | -0.611 | Large game-state relationship in generated report |
| Q3 margin vs dog covered | signals.db / backtest_games | 5,829 | 0.593 | Strong signal-table relationship; sign follows that table's margin convention |
| Chase gap vs dog covered | universal_game_state.json | 22,104 | -0.565 | Strong in-game state relationship |
| FG% diff vs home covered | pregame_features.json | 3,844 | 0.553 | Pregame feature signal requiring leakage review before modeling |
| kyleskom O/U vs points | OddsData.sqlite | 24,807 | 0.466 | Historical odds sanity check across normalized tables |
| Spread vs home margin | kaggle_nba_betting | 23,115 | 0.216 | Positive but noisy spread relationship |
| Outcome slice | Dataset | N | Win % | Profit |
|---|---|---|---|---|
| NBA Pikkit period 3 | pikkit_matched_v6.json | 55 | 52.7% | +3,284.69 |
| NBA Pikkit period 4 | pikkit_matched_v6.json | 46 | 54.3% | +5,229.99 |
| NBA Pikkit model agrees | pikkit_matched_v6.json | 41 | 51.2% | -735.62 |
| MLB Pikkit run line | pikkit_mlb_enriched | 318 | 53.1% | +7,499.90 |
| MLB Pikkit moneyline | pikkit_mlb_enriched | 321 | 43.3% | -39,888.64 |
These are first-pass relationship tests on verified sports joins only. Correlation checks are generated by sports_data_map.py and should be treated as screening statistics until no-lookahead joins and leakage checks are complete.
Kalshi NBA Market Data
| Kalshi asset | Rows or size | Coverage | Notes |
|---|---|---|---|
| kalshi_nba.db / games | 1,061 rows | 2025-04-15 to 2026-03-05 | Game IDs mapped to moneyline, spread, total event tickers |
| kalshi_nba.db / candles | 2,748,827 rows | 2025-04 to 2026-03 | Open, close, high, low, bid, ask, volume, and open interest |
| nba_spread_markets_raw.json | 11,062 rows / 22.28 MB | Raw spread market payloads | Largest raw Kalshi team-market file |
| nba_kxnbagame_raw.json | 2,120 rows / 4.15 MB | Raw game winner markets | Moneyline-like Kalshi market source |
| nba_kxnbatotal_raw.json | 10,155 rows / 19.73 MB | Raw game total markets | Total market source file |
| nba_kxnbapts_raw.json | 11,609 rows / 28.04 MB | Raw player points props | Player prop source file |
| nba_kxnbareb_raw.json | 11,286 rows / 27.27 MB | Raw player rebounds props | Player prop source file |
| nba_kxnbaast_raw.json | 8,635 rows / 20.82 MB | Raw player assists props | Player prop source file |
| nba_events.json | 3,156 rows / 0.74 MB | Kalshi NBA event records | Event metadata source |
| nba_kalshi_season.csv | 1,060 rows | 2025-04-15 to 2026-03-05 | Season CSV with home/away, ML volume, last prices, and winner side |
| Kalshi backup spread traces | 67,804 spread ticks / 2,026 score ticks | GSW-PHI and CHI-MIA samples | Backup per-game Kalshi market and score traces |
This is separate prediction-market data, not sportsbook odds. It can be joined later by NBA game ID, event ticker, market close time, or game date depending on the model target.
Feature Artifacts and Model Inputs
| Artifact | Rows or records | Size | Use |
|---|---|---|---|
| universal_game_state.json | 22,104 records | 17.21 MB | Universal game-state features |
| dynamic_game_states.json | 5,862 records | 12.33 MB | Dynamic in-game states |
| live_line_correlation_data.json | 5,725 records | 2.22 MB | Spread/total states with half and Q3 context |
| pregame_features.json | 3,844 records | 3.48 MB | Pregame model features |
| signals.db / backtest_games | 5,829 rows | 1.57 MB DB | Signal backtests from 2019-02-04 to 2026-03-14 |
| signals.db / team_playbook | 818 rows | - | Team profile and playbook text inputs |
| kaggle_nba_betting/nba_2008-2025.csv | 23,119 lines | 2.26 MB | Historical betting CSV |
| missing_games.json | 5,655 candidates | 0.73 MB | Backfill candidate list; 4,416 already present, 1,239 remaining, 1,969 rows need date/team repair |
| sports_data_map.py | 562 mapped files / 57 correlations | 36 KB | Read-only generator for the hosted JSON and Markdown sports map |
| nuclear_players.db | 140 players / 8 signals | 0.04 MB | Player-tier and signal reference database |
| NBA_AI_dev.zip | 1 archived SQLite | 191.30 MB | Contains NBA_AI_dev.sqlite, 3.36 GB uncompressed |
These files are useful model inputs, but they should be versioned and joined through explicit keys before being treated as production-ready training tables.
Next Backfill Steps
- Keep the 2024-25 game/PBP/stat backfill as the current base. It is complete.
- Create source crosswalk tables from backtest.db game IDs to Kaggle rows, kyleskom season/date tables, Pikkit wager rows, and Kalshi event tickers.
- Inventory the 2013-18 spread CSVs and the compressed NBA_AI_dev.sqlite archive separately from the active DB until their game IDs are mapped.
- Use sports_data_map.py as the repeatable audit gate; current generated map shows 1,239 remaining missing_games.json candidates after 4,416 are already present.
- Promote the existing live captures from arb_log.db, live_spreads.db, and odds_snapshots.db into one normalized in-game odds snapshot table.
- Create a no-lookahead join table that maps each PBP state to the latest odds snapshot at or before that game-clock timestamp.
- Backfill missing 2024-25 pregame odds for the 384 games not currently matched, then extend the same process to 2025-26.
- Do not treat PBP rows as betting-ready until a corresponding odds snapshot is attached or the row is explicitly flagged as missing live odds.
Current practical status: game data is solved for 2024-25; pregame odds are partially matched; live odds exist on the server but need normalization and action-level joins.