{
 "meta": {
  "league": "NSBA4 2026",
  "week": "Week 4",
  "method": "Post-Week-3 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": [
   "Connor Chang",
   "anurag"
  ],
  "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. Unmapped-but-present players are padded with roster slots so identity gaps don't fake a no-show; if you know a 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": "cryo",
   "home": "(Stitch)^2",
   "p_home": 0.453,
   "p_away": 0.547,
   "spread_home_raw": -6.7,
   "model_margin_home": -2.7,
   "total_raw": 162.1,
   "spread": {
    "favorite": "cryo",
    "line": -7,
    "home_line": 7
   },
   "total": 162.5,
   "likely_home_ban": "Chemistry",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.19,
    "Chemistry": 0.2,
    "Computer Science": 0.17,
    "Earth/Space": 0.15,
    "Math": 0.14,
    "Physics": 0.15
   }
  },
  {
   "away": "mingle/Yunyi",
   "home": "dan.k.memes",
   "p_home": 0.558,
   "p_away": 0.442,
   "spread_home_raw": 8.2,
   "model_margin_home": 3.3,
   "total_raw": 159.0,
   "spread": {
    "favorite": "dan.k.memes",
    "line": -9,
    "home_line": -9
   },
   "total": 158.5,
   "likely_home_ban": "Math",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.19,
    "Chemistry": 0.15,
    "Computer Science": 0.15,
    "Earth/Space": 0.13,
    "Math": 0.2,
    "Physics": 0.19
   }
  },
  {
   "away": "czz",
   "home": "jonathan",
   "p_home": 0.477,
   "p_away": 0.523,
   "spread_home_raw": -3.2,
   "model_margin_home": -1.3,
   "total_raw": 163.0,
   "spread": {
    "favorite": "czz",
    "line": -3,
    "home_line": 3
   },
   "total": 162.5,
   "likely_home_ban": "Math",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.13,
    "Chemistry": 0.12,
    "Computer Science": 0.2,
    "Earth/Space": 0.19,
    "Math": 0.21,
    "Physics": 0.15
   }
  },
  {
   "away": "James W",
   "home": "ChessFun",
   "p_home": 0.465,
   "p_away": 0.535,
   "spread_home_raw": -4.9,
   "model_margin_home": -2.0,
   "total_raw": 161.0,
   "spread": {
    "favorite": "James W",
    "line": -5,
    "home_line": 5
   },
   "total": 161.5,
   "likely_home_ban": "Chemistry",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.19,
    "Chemistry": 0.19,
    "Computer Science": 0.16,
    "Earth/Space": 0.16,
    "Math": 0.16,
    "Physics": 0.14
   }
  },
  {
   "away": "xpoes",
   "home": "sumin",
   "p_home": 0.599,
   "p_away": 0.401,
   "spread_home_raw": 14.0,
   "model_margin_home": 5.6,
   "total_raw": 155.7,
   "spread": {
    "favorite": "sumin",
    "line": -15,
    "home_line": -15
   },
   "total": 155.5,
   "likely_home_ban": "Earth/Space",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.08,
    "Chemistry": 0.19,
    "Computer Science": 0.18,
    "Earth/Space": 0.21,
    "Math": 0.19,
    "Physics": 0.15
   }
  },
  {
   "away": "GidTheKid2",
   "home": "Fez_Keyreb",
   "p_home": 0.394,
   "p_away": 0.606,
   "spread_home_raw": -15.0,
   "model_margin_home": -6.0,
   "total_raw": 154.4,
   "spread": {
    "favorite": "GidTheKid2",
    "line": -15,
    "home_line": 15
   },
   "total": 154.5,
   "likely_home_ban": "Physics",
   "market_blended": false,
   "market_source": null,
   "market": null,
   "ban_dist": {
    "Biology": 0.14,
    "Chemistry": 0.17,
    "Computer Science": 0.12,
    "Earth/Space": 0.18,
    "Math": 0.14,
    "Physics": 0.25
   }
  }
 ]
}