{
 "meta": {
  "league": "NSBA4 2026",
  "week": "Week 5",
  "method": "Post-Week-4 player ratings -> subject-resolved tossup-contest simulation on each team's most-recent actual lineup -> home-court category ban -> Normal margin/total. Model-only unless a live per-game moneyline is open (then blended 70/30); the conference-winner FUTURES fallback was DROPPED after the Round-3 backtest showed it hurt (model-only beat the blend on direction 83% vs 50%).",
  "line_convention": "NSBA scores are always even, so spreads sit on ODD integers and totals on .5 -> never push.",
  "home_court": "Home removes one tossup of the category that most helps it; soft softmax over bans (lambda=1, a prior until bans are observed).",
  "byes": [
   "dan.k.memes",
   "ChessFun"
  ],
  "caveats": [
   "LOW CONFIDENCE. Over Weeks 2-3 the model's game-level direction was ~58% (n=12) -- barely better than a coin flip. These are a sharpened prior, not a proven edge.",
   "Each team is projected with its MOST RECENT actual lineup (who dressed last game), not the full drafted roster -- captures no-shows. A per-player availability model was built + backtested (predicts who dresses at 86%) but did NOT improve the lines (it's star-dominated; see nsba4_attendance_backtest.py), so it stays OFF. Known lineup change? set MANUAL_LINEUP and re-run.",
   "Model-only this week (no per-game moneylines open yet). The conf-winner futures blend was dropped: on Round 3 it dragged model picks toward season favorites (czz, anurag) who then lost.",
   "3 weeks of game data; ratings still lean partly on the combine+draft seed. Byes this week: Connor Chang (ponnor), anurag (seanjay).",
   "Real NSBA margins are huge (avg ~45) and hard to predict directionally, so spreads are kept modest on purpose -- widening a coin-flip just amplifies wrong picks. The gain (2.5x) only avoids pick'em.",
   "Totals nudged +4 vs the raw model: they ran 8-4 OVER in Weeks 2-3 (median actual 161 vs line 156), so the baseline was centered on the mean but low on the median. Totals still lack matchup dispersion (all land ~155-160) -- can't yet tell a shootout from a grind."
  ]
 },
 "games": [
  {
   "away": "jonathan",
   "home": "(Stitch)^2",
   "p_home": 0.516,
   "p_away": 0.484,
   "spread_home_raw": 2.2,
   "model_margin_home": 0.9,
   "total_raw": 160.1,
   "spread": {
    "favorite": "(Stitch)^2",
    "line": -3,
    "home_line": -3
   },
   "total": 160.5,
   "likely_home_ban": "Biology",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.19,
    "Chemistry": 0.17,
    "Computer Science": 0.17,
    "Earth/Space": 0.16,
    "Math": 0.16,
    "Physics": 0.16
   }
  },
  {
   "away": "Fez_Keyreb",
   "home": "sumin",
   "p_home": 0.581,
   "p_away": 0.419,
   "spread_home_raw": 11.5,
   "model_margin_home": 4.6,
   "total_raw": 159.2,
   "spread": {
    "favorite": "sumin",
    "line": -11,
    "home_line": -11
   },
   "total": 159.5,
   "likely_home_ban": "Math",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.1,
    "Chemistry": 0.16,
    "Computer Science": 0.2,
    "Earth/Space": 0.15,
    "Math": 0.27,
    "Physics": 0.12
   }
  },
  {
   "away": "GidTheKid2",
   "home": "mingle/Yunyi",
   "p_home": 0.5,
   "p_away": 0.5,
   "spread_home_raw": -0.0,
   "model_margin_home": -0.0,
   "total_raw": 163.2,
   "spread": {
    "favorite": "GidTheKid2",
    "line": -1,
    "home_line": 1
   },
   "total": 163.5,
   "likely_home_ban": "Chemistry",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.12,
    "Chemistry": 0.2,
    "Computer Science": 0.16,
    "Earth/Space": 0.15,
    "Math": 0.19,
    "Physics": 0.18
   }
  },
  {
   "away": "Connor Chang",
   "home": "cryo",
   "p_home": 0.43,
   "p_away": 0.57,
   "spread_home_raw": -9.8,
   "model_margin_home": -3.9,
   "total_raw": 171.3,
   "spread": {
    "favorite": "Connor Chang",
    "line": -9,
    "home_line": 9
   },
   "total": 171.5,
   "likely_home_ban": "Earth/Space",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.13,
    "Chemistry": 0.24,
    "Computer Science": 0.11,
    "Earth/Space": 0.25,
    "Math": 0.12,
    "Physics": 0.15
   }
  },
  {
   "away": "czz",
   "home": "James W",
   "p_home": 0.507,
   "p_away": 0.493,
   "spread_home_raw": 1.0,
   "model_margin_home": 0.4,
   "total_raw": 165.0,
   "spread": {
    "favorite": "James W",
    "line": -1,
    "home_line": -1
   },
   "total": 165.5,
   "likely_home_ban": "Math",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.15,
    "Chemistry": 0.11,
    "Computer Science": 0.17,
    "Earth/Space": 0.18,
    "Math": 0.21,
    "Physics": 0.18
   }
  },
  {
   "away": "anurag",
   "home": "xpoes",
   "p_home": 0.414,
   "p_away": 0.586,
   "spread_home_raw": -12.1,
   "model_margin_home": -4.8,
   "total_raw": 160.8,
   "spread": {
    "favorite": "anurag",
    "line": -13,
    "home_line": 13
   },
   "total": 160.5,
   "likely_home_ban": "Biology",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.26,
    "Chemistry": 0.21,
    "Computer Science": 0.13,
    "Earth/Space": 0.15,
    "Math": 0.12,
    "Physics": 0.14
   }
  }
 ]
}