Chapter 34 Exercises: Prop Bets and Player Markets
Part A: Foundational Concepts (Exercises 1-6)
Exercise 1. Define proposition bets (props) and explain how they differ from traditional game-outcome wagers (moneylines, spreads, totals). Provide five examples of player props from three different sports. For each example, identify the key statistical driver and the primary source of uncertainty in projecting the outcome.
Exercise 2. Write out the multiplicative player prop projection formula: Projected Stat = Playing Time x Per-Minute Rate x Opponent Adjustment x Context Adjustments. For an NBA player who averages 34.5 minutes, 0.72 points per minute, faces an opponent that allows 8% more points than league average to his position, and is playing at home on normal rest, calculate the projected points. Then calculate the impact if his minutes drop to 28 due to blowout risk (spread of -12.5).
Exercise 3. Explain the concept of pace adjustment in player prop modeling. Two NBA teams meet: Team A averages 102.3 possessions per 48 minutes, Team B averages 97.8 possessions per 48 minutes, and the league average is 100.0. Calculate the expected game pace and the pace adjustment factor. If a player's baseline projection is 22.0 points, what is the pace-adjusted projection? How does the Vegas total (set at 228.5 versus a league average of 220) further modify this adjustment?
Exercise 4. Describe the concept of usage rate in basketball and explain how teammate absences affect a player's projected statistics. A star player has a usage rate of 30.5%. A teammate with a 22.0% usage rate is ruled out for a game. Assuming the remaining players share the missing usage proportionally to their own rates, calculate the star's new effective usage rate. Discuss which statistical categories (points, rebounds, assists) are most and least affected by this redistribution.
Exercise 5. Explain opponent defense adjustments for player prop modeling across three sports: basketball (position-specific defensive rating), football (fantasy points allowed by position), and baseball (pitcher-specific metrics). For basketball, if the league average points allowed to small forwards is 18.2 per game and the upcoming opponent allows 20.1 to small forwards, calculate the opponent adjustment factor and apply it to a player projected for 24.0 points before adjustment.
Exercise 6. A sportsbook posts the following prop line for an NBA player: Points Over 24.5 at -115, Under 24.5 at -105. Calculate: (a) the implied probability for over and under, (b) the total vig, (c) the de-vigged fair probabilities using proportional normalization, and (d) the book's implied mean assuming a normal distribution with standard deviation of 7.5.
Part B: Correlation and Same-Game Parlays (Exercises 7-12)
Exercise 7. Explain positive and negative correlation between same-game parlay (SGP) legs with three examples of each. For a positively correlated pair (team wins and star player scores over his points prop), explain intuitively why P(A and B) > P(A) x P(B), and calculate the true joint probability if P(A) = 0.60, P(B) = 0.55, and the correlation coefficient is rho = 0.22.
Exercise 8. Describe the Gaussian copula approach to modeling correlated SGP legs. Explain each step: (a) defining marginal probabilities for each leg, (b) constructing a correlation matrix, (c) generating correlated normal samples, (d) transforming to uniform via the CDF, and (e) determining outcomes by comparing to marginal probabilities. Write Python code that implements this procedure for a 3-leg SGP and computes the correlated joint probability.
Exercise 9. A sportsbook prices a same-game parlay at +400 (5.00 decimal odds). The three legs have individual fair probabilities of 0.62, 0.55, and 0.48. The legs are: (1) Team Win, (2) Star Player Over Points, and (3) Game Over Total. Using the correlation matrix from the chapter (Team Win / Player Pts = 0.22, Team Win / Game Total = 0.08, Player Pts / Game Total = 0.32), calculate the true joint probability using Monte Carlo simulation with 100,000 samples. Is this SGP positive or negative expected value?
Exercise 10. Explain when same-game parlays have positive expected value. Address four scenarios: (a) the book underestimates positive correlation, (b) the book overestimates negative correlation, (c) individual legs have positive EV, and (d) the book uses a simplified correlation model. For scenario (a), calculate the edge when the true correlated probability of a 2-leg parlay is 0.38 but the book prices it as if the probability is 0.33.
Exercise 11. Build a correlation matrix for NFL same-game parlay legs. Include at least six leg types: team win, game total over, QB passing yards over, RB rushing yards over, WR receiving yards over, and opposing QB passing yards over. For each pair, estimate the correlation coefficient and explain the sports logic behind the sign and magnitude. Verify that your matrix is positive semi-definite.
Exercise 12. Write Python code that takes a list of SGP legs (each with a marginal probability and leg type), a correlation matrix, and the offered parlay odds, and outputs: (a) the independent parlay probability, (b) the correlated parlay probability (via simulation), (c) the correlation boost (difference between correlated and independent), (d) the implied probability from the offered odds, and (e) the expected value per dollar wagered. Test with at least two different SGP configurations.
Part C: Projection Systems (Exercises 13-18)
Exercise 13. Design a minutes projection model for NBA players. Identify and describe five factors that influence a player's minutes in a given game: baseline workload, injury/rest status, game script (blowout risk), foul trouble probability, and coaching tendencies. For each factor, specify how you would quantify it and incorporate it into a projection. Write Python code that implements the minutes projection with appropriate uncertainty (standard deviation).
Exercise 14. Implement an exponentially weighted moving average (EWMA) stat rate calculator. Write a Python function that takes a player's game log (list of per-game stat values and minutes) and returns the EWMA per-minute rate with a configurable decay parameter. Compare the results for decay = 0.90, 0.95, and 0.99 on a synthetic 30-game log where the player's true rate increases midseason. Discuss which decay parameter is most appropriate for prop betting and why.
Exercise 15. Explain game script impact on player projections for football. When a team is a 10-point underdog with a game total of 44.5, calculate the team's implied score, determine the expected game script (trailing), and apply game-script adjustments to three player types: quarterback (passing yards), running back (rushing yards), and wide receiver (receiving yards). Write the adjustment factors and demonstrate the calculation for each.
Exercise 16. Write a complete Python class PlayerPropProjector that projects all major NBA stat categories (points, rebounds, assists, steals, blocks, three-pointers made) for a player in a specific game. The class should accept a player profile (per-minute rates, minutes baseline) and a game context (opponent adjustments, pace, Vegas lines) and produce projections with means and standard deviations. Include a method that evaluates a specific prop line and returns the over/under probabilities and estimated edge.
Exercise 17. Describe the Bayesian stabilization technique for player stat rates. A player has played only 8 games this season with per-minute scoring rates of [0.65, 0.80, 0.72, 0.58, 0.90, 0.68, 0.75, 0.82]. The league average per-minute scoring rate for his position is 0.48 with a standard deviation of 0.15. Using a normal prior with weight equivalent to 5 games of data, compute the Bayesian stabilized rate. Compare this to the raw sample mean and explain why stabilization improves projection accuracy for small samples.
Exercise 18. Build a correlation-aware combination prop evaluator. For a player projected at 26.2 points (std 7.5), 8.1 rebounds (std 3.2), and 4.8 assists (std 2.5), with pairwise correlations of rho(pts,reb) = 0.12, rho(pts,ast) = 0.18, and rho(reb,ast) = 0.04, calculate: (a) the projected PRA (points + rebounds + assists) with proper variance accounting for correlations, (b) the probability of over 38.5 PRA, and (c) the edge if the book offers -110/-110 on O/U 38.5.
Part D: Market Inefficiencies (Exercises 19-24)
Exercise 19. Explain why alternate prop lines can be mispriced. A book offers the following alternate points lines for a player projected at 25.0 points with standard deviation 7.0: Over 30.5 at +175 and Over 35.5 at +400. Using a normal distribution, calculate the true probabilities, the implied probabilities from the odds, and the edge on each alternate. Then recalculate assuming the player's distribution has fat tails (excess kurtosis of 2.0, using a t-distribution with appropriate degrees of freedom). How does the fat-tail assumption change the value assessment?
Exercise 20. Analyze the "public bias toward overs" phenomenon. Given historical data showing that 68% of public money is wagered on the over for star player points props, explain: (a) how this systematic bias might affect line setting, (b) under what conditions betting unders becomes a systematic strategy, (c) how to quantify the "shade" (line adjustment toward the public side), and (d) the expected ROI of a blind "always bet unders on star player points" strategy assuming a 2% shade and -110/-110 odds.
Exercise 21. Write Python code for a prop market scanner that, given a set of player projections and a set of prop lines from multiple sportsbooks, identifies the best available odds for each prop, calculates the edge at each book, and ranks all opportunities by expected value. The scanner should handle multiple stat categories (points, rebounds, assists, threes, PRA, P+R, P+A) and output a sorted table of opportunities above a minimum edge threshold.
Exercise 22. Describe the concept of "ceiling games" and how they create value in alternate prop markets. A player averages 22.5 points per game with a standard deviation of 7.0. In 12% of his games, he scores 35 or more points. Using a mixture model (85% normal with mean 21, std 5; 15% "ceiling" normal with mean 34, std 4), calculate the probability of scoring over 30.5, 35.5, and 40.5 points. Compare these to probabilities from a single normal distribution and identify which alternates are most underpriced by books using normal models.
Exercise 23. Explain the "less-liquid props" inefficiency. Compare the expected efficiency (accuracy of pricing) of the following prop markets and rank them from most to least efficient: (a) LeBron James points, (b) a mid-rotation guard's assists, (c) a center's blocks, (d) a first-basket scorer market, (e) a double-double prop for a versatile forward. For each, identify the factors that determine efficiency (liquidity, modeling difficulty, public attention) and estimate the typical edge available.
Exercise 24. Write Python code that analyzes a player's statistical distribution for fat tails. Given a list of game-by-game stat values, compute: (a) the mean and standard deviation, (b) the skewness and excess kurtosis, (c) the percentage of games in the upper and lower tails (beyond 1.5 standard deviations), (d) the ratio of actual tail frequency to expected normal tail frequency, and (e) a recommendation on whether alternate lines are likely underpriced. Test on synthetic data with and without fat tails.
Part E: Advanced Strategies (Exercises 25-30)
Exercise 25. Design and implement a "stacking" strategy for NBA props. Given a pace-up game environment (Vegas total 235, league average 220), identify which props benefit most, calculate the environmental boost for each stat category, and construct an optimal stack of 4-5 correlated over bets. Write Python code that evaluates the stack's expected value, accounting for both individual leg edges and the correlation benefit.
Exercise 26. Implement a contrarian prop strategy analyzer. Given a dataset of props with public betting percentages, model probabilities, and offered odds, identify opportunities where: (a) heavy public action on one side (>70%) creates value on the other, and (b) the model probability confirms the contrarian side. Calculate the expected ROI of a systematic contrarian approach and compare it to a model-only approach (ignoring public percentages).
Exercise 27. Write a complete Python class SGPCorrelationEngine that: (a) stores empirical correlations between different leg types, (b) builds correlation matrices for arbitrary combinations of SGP legs, (c) simulates correlated outcomes using the Gaussian copula, (d) prices SGPs using both independent and correlated models, and (e) identifies SGPs where the correlation adjustment creates positive expected value. Include a method for updating correlations from historical data.
Exercise 28. Analyze the game-script exploitation strategy for NFL player props. For a team that is a 9.5-point underdog with a game total of 47.5, calculate: (a) the team's implied score, (b) the expected pass-run ratio given the game script, (c) adjusted projections for the team's QB (passing yards), RB (rushing yards), and WR1 (receiving yards), and (d) which props are most likely mispriced if the market does not fully adjust for game script. Implement the calculations in Python.
Exercise 29. Build a prop bet bankroll management system. Given a portfolio of 20 prop bets with varying edges (2-6%), offered odds (-150 to +200), and correlations (some bets on the same game are correlated), implement: (a) Kelly criterion sizing for each bet, (b) correlation-aware portfolio risk calculation, (c) a per-game exposure cap, and (d) a maximum total exposure limit. Write Python code that outputs the optimal stake for each bet.
Exercise 30. Design and implement a complete prop betting pipeline that, for a single NBA game: (a) projects all major stat categories for every player expected to receive significant minutes, (b) evaluates every available prop line, (c) identifies the top 10 value opportunities, (d) constructs the optimal SGP if one exists with positive expected value, and (e) sizes each bet using portfolio-aware Kelly criterion. Write the complete Python code, using synthetic data for the player profiles and game context.