{
 "meta": {
  "league": "NSBA4 2026",
  "week": "Week 3",
  "method": "Post-Week-2 player ratings -> subject-resolved tossup-contest simulation -> home-court category ban -> Normal margin/total, then blended 70/30 model/market. The market leg uses an OPEN per-game moneyline if one exists, otherwise the conference-winner FUTURES (Bradley-Terry on the standings-aware futures odds) -> the market's read on team strength enters every line.",
  "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": [
   "mingle/Yunyi",
   "James W"
  ],
  "caveats": [
   "Each line = 70% model / 30% market. Market leg = open per-game moneyline if any, else the conference-winner futures (the market's standings-aware team-strength read) via Bradley-Terry, shrunk toward 50% since season odds overstate one-game edges.",
   "(Stitch)^2 @ Connor Chang already played (market resolved); it is shown for completeness off the pre-game numbers.",
   "Each team is projected with its MOST RECENT actual lineup (who dressed last game), not the full drafted roster -- this captures no-shows. xpoes is short with Rohan G OUT (confirmed out again Week 3) -> the GidTheKid2 line is wide by design. Unmapped-but-present players are padded with roster slots so identity gaps don't fake a no-show.",
   "FIRST LIVE WEEK of this model version (projected lineups + 70/30 futures-market blend). It fixes the prior version's under-dispersion, but the blend weight and lineup-continuity assumption are not yet backtested -- treat as a sharpened prior, not a proven edge.",
   "2 weeks of game data: player ratings still lean partly on the combine+draft seed.",
   "The model leg is widened by a confidence factor (gain 2.5x) so lines aren't pick'em; totals are NOT widened. Win/loss STANDINGS enter only through the futures blend (and via player-rating updates), not as a direct record-based feature."
  ]
 },
 "games": [
  {
   "away": "(Stitch)^2",
   "home": "Connor Chang",
   "p_home": 0.573,
   "p_away": 0.427,
   "spread_home_raw": 10.3,
   "model_margin_home": 4.0,
   "total_raw": 161.2,
   "spread": {
    "favorite": "Connor Chang",
    "line": -11,
    "home_line": -11
   },
   "total": 161.5,
   "likely_home_ban": "Math",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": 11.2
   },
   "ban_dist": {
    "Biology": 0.18,
    "Chemistry": 0.12,
    "Computer Science": 0.17,
    "Earth/Space": 0.13,
    "Math": 0.2,
    "Physics": 0.19
   }
  },
  {
   "away": "sumin",
   "home": "anurag",
   "p_home": 0.483,
   "p_away": 0.517,
   "spread_home_raw": -2.4,
   "model_margin_home": 1.9,
   "total_raw": 155.6,
   "spread": {
    "favorite": "sumin",
    "line": -3,
    "home_line": 3
   },
   "total": 155.5,
   "likely_home_ban": "Biology",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": -19.4
   },
   "ban_dist": {
    "Biology": 0.22,
    "Chemistry": 0.15,
    "Computer Science": 0.14,
    "Earth/Space": 0.17,
    "Math": 0.15,
    "Physics": 0.18
   }
  },
  {
   "away": "ChessFun",
   "home": "jonathan",
   "p_home": 0.422,
   "p_away": 0.578,
   "spread_home_raw": -11.1,
   "model_margin_home": -2.9,
   "total_raw": 158.2,
   "spread": {
    "favorite": "ChessFun",
    "line": -11,
    "home_line": 11
   },
   "total": 158.5,
   "likely_home_ban": "Biology",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": -20.0
   },
   "ban_dist": {
    "Biology": 0.23,
    "Chemistry": 0.18,
    "Computer Science": 0.15,
    "Earth/Space": 0.14,
    "Math": 0.16,
    "Physics": 0.15
   }
  },
  {
   "away": "xpoes",
   "home": "GidTheKid2",
   "p_home": 0.605,
   "p_away": 0.395,
   "spread_home_raw": 14.9,
   "model_margin_home": 5.6,
   "total_raw": 152.0,
   "spread": {
    "favorite": "GidTheKid2",
    "line": -15,
    "home_line": -15
   },
   "total": 151.5,
   "likely_home_ban": "Earth/Space",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": 16.9
   },
   "ban_dist": {
    "Biology": 0.14,
    "Chemistry": 0.17,
    "Computer Science": 0.17,
    "Earth/Space": 0.2,
    "Math": 0.16,
    "Physics": 0.15
   }
  },
  {
   "away": "dan.k.memes",
   "home": "Fez_Keyreb",
   "p_home": 0.443,
   "p_away": 0.557,
   "spread_home_raw": -8.0,
   "model_margin_home": -3.2,
   "total_raw": 151.9,
   "spread": {
    "favorite": "dan.k.memes",
    "line": -7,
    "home_line": 7
   },
   "total": 151.5,
   "likely_home_ban": "Biology",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": -8.1
   },
   "ban_dist": {
    "Biology": 0.21,
    "Chemistry": 0.2,
    "Computer Science": 0.16,
    "Earth/Space": 0.12,
    "Math": 0.15,
    "Physics": 0.17
   }
  },
  {
   "away": "cryo",
   "home": "czz",
   "p_home": 0.54,
   "p_away": 0.46,
   "spread_home_raw": 5.7,
   "model_margin_home": -0.2,
   "total_raw": 158.5,
   "spread": {
    "favorite": "czz",
    "line": -5,
    "home_line": -5
   },
   "total": 158.5,
   "likely_home_ban": "Biology",
   "market_blended": true,
   "market_source": "futures",
   "market": {
    "implied_home_margin": 20.0
   },
   "ban_dist": {
    "Biology": 0.2,
    "Chemistry": 0.2,
    "Computer Science": 0.16,
    "Earth/Space": 0.13,
    "Math": 0.13,
    "Physics": 0.18
   }
  }
 ]
}