Chapter 35 Exercises: Futures and Season-Long Markets
Part A: Foundational Concepts (Exercises 1-6)
Exercise 1. Define futures bets and explain how they differ from game-by-game wagers in three key dimensions: time horizon, capital commitment, and margin structure. Provide five examples of futures markets from three different sports (e.g., NBA championship, NFL win totals, MLB division winners). For each, identify the primary source of uncertainty that makes the bet difficult to evaluate and the typical overround charged by sportsbooks.
Exercise 2. Explain the Pythagorean expectation formula and its use in win total projections. For an NBA team that scored 9,215 points and allowed 8,940 points over 82 games last season, calculate: (a) the Pythagorean win percentage using exponent k = 13.91, (b) the expected number of wins, (c) the actual win count if the team went 52-30, and (d) the "luck" component (actual wins minus Pythagorean wins). Discuss what the sign and magnitude of the luck component implies for the team's win total projection for next season.
Exercise 3. Derive the single-game win probability formula used in Monte Carlo season simulation: P(Win) = 1 / (1 + 10^(-(R_team - R_opp + HCA) / s)), where R values are team ratings, HCA is home court advantage, and s is the scaling parameter. For two NBA teams with ratings 5.2 and -1.8, a home court advantage of 3.0, and a scaling parameter of 10.0, calculate: (a) the home team's win probability, (b) the away team's win probability, and (c) how the probability changes if the home team is on a back-to-back (1.5-point penalty).
Exercise 4. Explain why Monte Carlo simulation is preferred over analytical formulas for win total modeling. Address each of the following advantages: (a) handling schedule effects (varying opponent strength), (b) producing full probability distributions (not just point estimates), (c) incorporating dependencies (e.g., division games), (d) computing derived probabilities (division winner, playoff odds), and (e) handling tiebreaker scenarios. For a team with a projected mean of 48.0 wins and standard deviation of 5.2 over an 82-game NBA season, estimate the probability of winning exactly 48 games, at least 50 games, and fewer than 42 games using a normal approximation. Then explain why the normal approximation may be inaccurate for extreme win totals.
Exercise 5. Describe the concept of implied probability extraction from futures markets. A sportsbook posts the following NBA championship futures: Team A +300, Team B +450, Team C +800, Team D +1200, and Field +150. Calculate: (a) the implied probability for each selection, (b) the total overround, (c) the de-vigged probabilities using proportional normalization, and (d) the de-vigged probabilities using the power method (p_fair = p_implied^k, where k is chosen so the fair probabilities sum to 1). Compare the two de-vigging approaches and discuss when each is more appropriate.
Exercise 6. Explain how futures market prices embed information about the market's collective assessment of team quality. A team's win total is posted at over/under 48.5 with odds of -115/-105. Calculate: (a) the implied probabilities for over and under, (b) the de-vigged fair probabilities, (c) the implied mean win total assuming a normal distribution with standard deviation of 5.0, and (d) the book's implied team rating (assuming the league average is 0.0 and each win above .500 corresponds to approximately 1.2 rating points).
Part B: Season Simulation (Exercises 7-12)
Exercise 7. Write Python code that implements a complete Monte Carlo season simulation for a 6-team league. Each team should have a rating, rating uncertainty, and a round-robin schedule (each team plays every other team 4 times, twice at home and twice away). Simulate 10,000 seasons and output: (a) the mean and standard deviation of wins for each team, (b) the probability of finishing first, (c) the probability of winning at least 15 games (out of 20), and (d) the full win distribution histogram for the highest-rated team.
Exercise 8. Implement rating uncertainty in season simulation. A team has a preseason rating of 4.5 with an uncertainty of 2.0. Explain why we should sample a new rating for each simulated season (rather than using the point estimate). Write Python code that compares win total distributions when: (a) using the point estimate only, (b) sampling ratings from a normal distribution, and (c) sampling ratings from a t-distribution with 5 degrees of freedom (fatter tails). Calculate the standard deviation of the win distribution under each scenario and explain why rating uncertainty increases the spread of the win distribution.
Exercise 9. Build a schedule strength analyzer. Given a set of team ratings and a specific team's schedule, calculate: (a) the average opponent rating, (b) the home/away game balance, (c) the number of back-to-back games, (d) the expected wins from the schedule (using single-game probabilities), and (e) a "schedule difficulty rank" relative to other teams in the league. Write Python code that implements this analysis for a 30-team league with synthetic schedules.
Exercise 10. Explain Pythagorean regression and its role in futures projections. A team won 56 games last season with a Pythagorean projection of 51.2 wins (4.8 wins of "luck"). For next season's projection, you want to regress the luck component by 80%. Calculate: (a) the regressed win projection, (b) how this changes if the team also lost a player worth approximately 2.5 wins in free agency, (c) the impact of a coaching change estimated at +1.0 wins, and (d) the final preseason projection incorporating all three adjustments.
Exercise 11. Write Python code that simulates an NBA-like season for 30 teams (organized into two conferences with three divisions each) and computes: (a) regular season standings, (b) division winners, (c) conference standings with tiebreakers (head-to-head, division record, conference record), (d) playoff seeding, and (e) the probability of each team making the playoffs across 5,000 simulations. Use synthetic team ratings and a realistic 82-game schedule structure.
Exercise 12. Describe how in-season updates modify futures projections. Midway through an 82-game NBA season, a team has gone 28-13 (41 games played). Their preseason rating was 3.0 (projected 49 wins). Using a Bayesian update with a prior weight equivalent to 20 games, calculate: (a) the observed win rate, (b) the prior projected win rate, (c) the Bayesian posterior win rate, (d) the expected wins for the remaining 41 games, and (e) the updated full-season win total projection. Compare to the naive approach of simply extrapolating the observed win rate.
Part C: Championship and Division Futures (Exercises 13-18)
Exercise 13. Explain the relationship between win total futures and championship futures. If Team A has a projected win total of 55.5 and the top 8 teams in a 15-team conference make the playoffs, describe how you would use Monte Carlo simulation to estimate: (a) the probability of making the playoffs, (b) the probability of earning a top-4 seed (home court), (c) the probability of winning the conference, and (d) the probability of winning the championship. Discuss how each successive probability is smaller and why the relationship is not simply multiplicative.
Exercise 14. Build a championship probability calculator that uses simulated season standings to seed a playoff bracket, then simulates the playoffs. Write Python code for a simplified 8-team single-elimination playoff where the probability of the higher seed winning each game is determined by the rating difference between teams. Run 10,000 simulations and compute championship probabilities for each team. Compare the results to the raw championship market prices and identify any mispriced teams.
Exercise 15. Analyze the "long-shot bias" in championship futures markets. Historical data shows that long-shot teams (implied probability below 5%) are systematically overpriced in championship futures. Explain three possible explanations for this bias: (a) recreational bettor preferences (entertainment value of long shots), (b) sportsbook margin structure (higher vig on lower-probability outcomes), and (c) information asymmetry (casual bettors overreact to narrative). For a team priced at +5000 (implied 1.96%), calculate the expected value if the true probability is 1.4%. Discuss the practical challenge of exploiting this bias given the capital commitment required.
Exercise 16. Write Python code that implements the Shin method for de-vigging a multi-outcome futures market. The Shin method assumes that a fraction z of the betting volume comes from informed bettors and finds the unique set of fair probabilities that produces the observed odds under this assumption. Test on a futures market with 10 selections and compare the Shin-devigged probabilities to those from proportional normalization and the power method.
Exercise 17. Describe the concept of conditional championship probability. A team that was +1500 before the season started has now won its division and earned the #2 seed. Using Bayes' theorem and the relationship P(Champion | Division Winner) = P(Champion AND Division Winner) / P(Division Winner), calculate the updated championship probability given: P(Champion) = 0.065, P(Division Winner) = 0.42, and P(Division Winner | Champion) = 0.85. Compare this Bayesian update to the current market price and identify potential value.
Exercise 18. Build a division futures evaluator. Given team ratings for all teams in a 5-team division, simulate 10,000 seasons and compute: (a) the probability of each team winning the division, (b) the probability of each team finishing in each position (1st through 5th), (c) the expected margin of victory for the division winner (in games), and (d) the probability of a "close race" (margin of 2 or fewer games). Write Python code and test with two scenarios: (i) one dominant team and (ii) four closely rated teams.
Part D: Hedging and Risk Management (Exercises 19-24)
Exercise 19. Explain the concept of hedging a futures bet. You placed a $100 bet on a team to win the championship at +2000 before the season. The team has now reached the championship series. Calculate: (a) the maximum possible payout, (b) the risk-free hedge (bet on the opponent) that guarantees a profit, (c) the guaranteed profit from the risk-free hedge, (d) the Kelly-optimal hedge that maximizes expected log utility, and (e) the partial hedge (50% hedge) payoff table. Assume the opponent's moneyline is -150 and the team's current series win probability is 45%.
Exercise 20. Write Python code that implements a general-purpose futures hedge calculator. The calculator should accept: (a) the original bet details (stake, odds, current probability), (b) the current hedge opportunity (opponent odds), and (c) the hedge strategy (risk-free, Kelly, partial). It should output: (d) the optimal hedge stake, (e) the payoff table under both outcomes, (f) the guaranteed profit (risk-free) or expected profit (Kelly), and (g) the risk reduction (measured as the decrease in standard deviation of total return). Test with at least three different scenarios.
Exercise 21. Analyze the "hedge vs. let it ride" decision using expected value and utility theory. A bettor has a +3000 futures ticket (original stake $200) on a team now in the conference finals with a 35% probability of winning the championship. Calculate: (a) the expected value of not hedging, (b) the guaranteed profit from a risk-free hedge, (c) the expected value of the Kelly-optimal hedge. Then introduce a concave utility function (log utility) and show that the Kelly hedge has higher expected utility than both "let it ride" and "risk-free hedge" for a bettor with a $10,000 bankroll.
Exercise 22. Explain multi-leg hedging for a futures bet that must pass through multiple rounds. A team is in the conference semifinals and must win two more series (conference finals and championship) to cash a +2500 ticket. Write Python code that computes the optimal hedge strategy at each remaining decision point, using backward induction from the final round. Compare: (a) hedging only at the final round, (b) hedging at each round, and (c) no hedging. Show the full decision tree and the expected utility under each strategy.
Exercise 23. Describe the concept of "middling" futures markets. You hold an over 47.5 wins bet on a team. The team is now 40-25 (65 games played) and the live win total has moved to 52.5. Calculate: (a) the probability of the team finishing with exactly 48, 49, 50, 51, or 52 wins (the "middle" outcomes), (b) the hedge bet (under 52.5) that guarantees profit, (c) the potential bonus profit if the team finishes in the middle (both bets win), and (d) the expected value accounting for the middle probability.
Exercise 24. Build a futures portfolio risk management system. Given a portfolio of 5 futures bets on different teams, each with a stake, odds, and current probability, write Python code that computes: (a) the total capital at risk, (b) the expected profit/loss, (c) the correlation structure between bets (some teams are in the same conference, creating negative correlations), (d) the portfolio variance and standard deviation accounting for correlations, and (e) the optimal rebalancing trades to maximize the Sharpe ratio of the portfolio.
Part E: Advanced Strategies (Exercises 25-30)
Exercise 25. Design and implement a complete win total betting system. Given preseason team ratings for a 30-team league, write Python code that: (a) simulates 10,000 seasons, (b) computes win distributions for each team, (c) evaluates posted win totals and odds, (d) identifies the top 5 value bets (highest edge), and (e) sizes each bet using the Kelly criterion (1/4 Kelly). Output a bet slate with expected ROI and risk metrics.
Exercise 26. Analyze the timing of futures bets. Explain when futures value is typically greatest: (a) preseason (maximum information asymmetry), (b) early season (overreaction to small samples), (c) trade deadline (roster changes not priced in), or (d) playoff time (hedging and emotional pricing). Write Python code that simulates a futures market through a season with evolving probabilities and identifies the optimal entry points by comparing model probabilities to market prices at each time step.
Exercise 27. Implement a contrarian futures strategy. Historical data suggests that teams receiving less than 10% of the betting handle on championship futures outperform the market's implied probabilities. Write Python code that: (a) generates synthetic betting handle data for a 30-team championship market, (b) identifies contrarian opportunities (low handle, positive model edge), (c) simulates the strategy over 10 seasons with 3 bets per season, and (d) computes the long-run ROI and confidence interval.
Exercise 28. Write a complete Python class FuturesPortfolioManager that: (a) tracks all open futures positions, (b) computes current portfolio expected value and risk, (c) evaluates new bet opportunities and recommends position sizes, (d) identifies hedging opportunities as the season progresses, (e) enforces exposure limits (max bet size, max single-team exposure, max total capital at risk), and (f) generates a nightly report summarizing portfolio performance and recommended actions.
Exercise 29. Analyze the Kelly criterion for futures bets with very long time horizons. For a futures bet with a 6-month resolution, a 5% edge, and 12:1 odds, calculate: (a) the full Kelly fraction, (b) the 1/4 Kelly fraction, (c) the opportunity cost of locked-up capital (assuming 5% annual risk-free rate), (d) the edge-adjusted Kelly that accounts for opportunity cost, and (e) the minimum edge required to justify the capital commitment at 1/4 Kelly. Discuss how the long time horizon and capital lockup should modify standard Kelly bet sizing for futures.
Exercise 30. Design and implement a complete end-to-end futures betting pipeline that: (a) ingests team ratings and schedule data, (b) runs Monte Carlo season simulations, (c) evaluates all available win total and championship futures, (d) identifies positive-EV opportunities, (e) sizes bets using portfolio-aware Kelly criterion, (f) monitors positions throughout the season with Bayesian updates, and (g) recommends hedging actions when appropriate. Write the complete Python code using synthetic data for a simplified 10-team league with a 40-game season.