Case Study 1: Building a Diversified Prediction Market Portfolio
Overview
This case study walks through the complete process of constructing, optimizing, and stress-testing a portfolio of 50 prediction market positions. We begin with a universe of opportunities across six event categories on three platforms, estimate correlations using structural analysis, apply portfolio Kelly optimization, enforce practical risk limits, run Monte Carlo simulations to estimate the return distribution, and perform stress tests. The goal is to demonstrate how the chapter's theoretical tools work together in practice and to illustrate the critical decisions a real portfolio manager faces.
Starting Conditions
Trader profile: - Total available capital: $50,000 - Trading capital (60%): $30,000 - Reserve capital (25%): $12,500 - Emergency fund (15%): $7,500 - Risk tolerance: Moderate (half-Kelly, 4% individual cap, 70% max deployment) - Time horizon: 3 months (one "season" of active trading)
Platforms used: - Platform A (Polymarket-style, crypto-settled): Up to 40% of trading capital - Platform B (Kalshi-style, USD-settled): Up to 40% of trading capital - Platform C (smaller exchange): Up to 25% of trading capital
The Opportunity Universe
The trader has identified 50 opportunities across six categories. Here is a representative sample showing the full diversity of the portfolio:
Political Markets (12 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| P1 | Senate Race: State A | A | 0.62 | 0.55 | +0.07 | Politics-Senate |
| P2 | Senate Race: State B | A | 0.58 | 0.52 | +0.06 | Politics-Senate |
| P3 | Senate Race: State C | B | 0.55 | 0.50 | +0.05 | Politics-Senate |
| P4 | Senate Race: State D | B | 0.48 | 0.42 | +0.06 | Politics-Senate |
| P5 | Governor Race: State E | A | 0.60 | 0.53 | +0.07 | Politics-Gov |
| P6 | Governor Race: State F | B | 0.52 | 0.45 | +0.07 | Politics-Gov |
| P7 | Policy: Bill X passes | C | 0.40 | 0.32 | +0.08 | Politics-Policy |
| P8 | Policy: Bill Y passes | C | 0.55 | 0.48 | +0.07 | Politics-Policy |
| P9 | Approval rating > 45% | A | 0.65 | 0.58 | +0.07 | Politics-Approval |
| P10 | Cabinet resignation by Q2 | B | 0.25 | 0.18 | +0.07 | Politics-Personnel |
| P11 | UN Resolution passes | C | 0.50 | 0.43 | +0.07 | Politics-Intl |
| P12 | Treaty ratified by Dec | B | 0.35 | 0.28 | +0.07 | Politics-Intl |
Economic Markets (10 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| E1 | GDP growth > 2.5% Q3 | B | 0.55 | 0.48 | +0.07 | Econ-GDP |
| E2 | Unemployment < 4.0% Oct | B | 0.60 | 0.52 | +0.08 | Econ-Jobs |
| E3 | CPI > 3.0% Sep | A | 0.45 | 0.38 | +0.07 | Econ-Inflation |
| E4 | Fed rate cut by Dec | A | 0.50 | 0.42 | +0.08 | Econ-Fed |
| E5 | S&P 500 > 5000 by Q4 | A | 0.58 | 0.50 | +0.08 | Econ-Markets |
| E6 | Oil > $90/barrel Oct | C | 0.35 | 0.28 | +0.07 | Econ-Commodities |
| E7 | Housing starts > 1.5M | B | 0.42 | 0.35 | +0.07 | Econ-Housing |
| E8 | Retail sales growth > 3% | B | 0.50 | 0.44 | +0.06 | Econ-Consumer |
| E9 | 10Y Treasury yield > 4.5% | A | 0.40 | 0.33 | +0.07 | Econ-Rates |
| E10 | Consumer confidence > 110 | C | 0.48 | 0.41 | +0.07 | Econ-Consumer |
Sports Markets (10 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| S1 | Team A wins championship | A | 0.30 | 0.22 | +0.08 | Sports-Baseball |
| S2 | Team B makes playoffs | A | 0.65 | 0.58 | +0.07 | Sports-Baseball |
| S3 | Player C wins MVP | B | 0.20 | 0.14 | +0.06 | Sports-Baseball |
| S4 | Team D wins division | A | 0.55 | 0.48 | +0.07 | Sports-Football |
| S5 | Team E over 10.5 wins | B | 0.60 | 0.52 | +0.08 | Sports-Football |
| S6 | Team F makes Final Four | C | 0.25 | 0.18 | +0.07 | Sports-Basketball |
| S7 | Player G scores 30+ ppg | A | 0.35 | 0.28 | +0.07 | Sports-Basketball |
| S8 | Team H wins league | B | 0.40 | 0.33 | +0.07 | Sports-Soccer |
| S9 | Grand Slam winner: X | A | 0.15 | 0.10 | +0.05 | Sports-Tennis |
| S10 | Fight outcome: Fighter Y | C | 0.55 | 0.48 | +0.07 | Sports-Combat |
Entertainment Markets (8 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| N1 | Film X wins Best Picture | A | 0.30 | 0.22 | +0.08 | Ent-Oscars |
| N2 | Album Y goes platinum | B | 0.45 | 0.38 | +0.07 | Ent-Music |
| N3 | Show Z renewed for S3 | A | 0.70 | 0.62 | +0.08 | Ent-TV |
| N4 | Opening weekend > $100M | A | 0.55 | 0.48 | +0.07 | Ent-BoxOffice |
| N5 | Celebrity couple split | C | 0.20 | 0.14 | +0.06 | Ent-Celebrity |
| N6 | Game W sells > 10M copies | B | 0.50 | 0.43 | +0.07 | Ent-Gaming |
| N7 | Book V on NYT list 10+ weeks | B | 0.35 | 0.28 | +0.07 | Ent-Publishing |
| N8 | Streaming platform hits 300M subs | A | 0.40 | 0.33 | +0.07 | Ent-Tech |
Science & Technology Markets (6 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| T1 | SpaceX launch success (mission X) | A | 0.92 | 0.85 | +0.07 | Tech-Space |
| T2 | FDA approves drug Y | B | 0.45 | 0.38 | +0.07 | Tech-Pharma |
| T3 | AI model beats benchmark Z | A | 0.60 | 0.52 | +0.08 | Tech-AI |
| T4 | Fusion milestone achieved | C | 0.15 | 0.09 | +0.06 | Tech-Energy |
| T5 | Chip shortage resolved by Q4 | B | 0.55 | 0.48 | +0.07 | Tech-Semicon |
| T6 | Self-driving taxi approved in city X | A | 0.35 | 0.28 | +0.07 | Tech-Auto |
Weather & Climate Markets (4 positions)
| ID | Market | Platform | True Prob | Price | Edge | Category |
|---|---|---|---|---|---|---|
| W1 | Hurricane Cat 4+ before Nov | B | 0.60 | 0.52 | +0.08 | Weather-Hurricane |
| W2 | Record high temp in city Y | A | 0.40 | 0.33 | +0.07 | Weather-Temp |
| W3 | Snowfall above average in city Z | C | 0.50 | 0.43 | +0.07 | Weather-Snow |
| W4 | Wildfire season above median | B | 0.55 | 0.48 | +0.07 | Weather-Fire |
Step 1: Correlation Structure Estimation
Approach
Since historical data for these one-time events is unavailable, we estimate correlations using structural analysis. We assign correlation values based on category relationships and shared causal drivers.
Intra-Category Correlations
| Category Pair | Estimated $\rho$ | Rationale |
|---|---|---|
| Senate races (same party effect) | 0.50 | National political environment affects all Senate races in the same direction |
| Senate vs Governor (same cycle) | 0.30 | Shared state-level political dynamics but different race dynamics |
| Policy bills vs Approval | 0.25 | Presidential approval influences legislative success |
| GDP vs Unemployment | 0.40 | Strong macroeconomic linkage |
| GDP vs Fed rate decision | 0.30 | GDP influences Fed decisions |
| Inflation vs Fed rate | 0.45 | Inflation is a primary Fed input |
| S&P 500 vs GDP | 0.25 | Markets reflect economic conditions with noise |
| Baseball teams (same league) | 0.15 | Shared league conditions, scheduling |
| Football teams (different conf.) | 0.05 | Nearly independent |
| Weather events (same season) | 0.20 | Shared climate patterns |
Inter-Category Correlations
| Category Pair | Estimated $\rho$ | Rationale |
|---|---|---|
| Politics vs Economics | 0.15 | Some linkage through economic conditions affecting elections |
| Politics vs Sports | 0.00 | No meaningful connection |
| Politics vs Entertainment | 0.00 | No meaningful connection |
| Economics vs Sports | 0.00 | No meaningful connection |
| Economics vs Weather | 0.05 | Weather can affect economic output marginally |
| Sports vs Entertainment | 0.05 | Shared cultural attention but largely independent |
| Technology vs Economics | 0.10 | Tech sector affects economic indicators |
Building the 50x50 Correlation Matrix
Using these structural estimates, we construct the full correlation matrix. The matrix is block-diagonal with intra-category blocks having elevated correlations and inter-category blocks having near-zero correlations. We ensure the matrix is positive semi-definite by computing the nearest valid correlation matrix using the alternating projections method when needed.
The resulting matrix has: - Average pairwise correlation: 0.06 - Maximum off-diagonal correlation: 0.50 (between Senate races P1-P4) - Minimum off-diagonal correlation: 0.00 (between unrelated categories) - Effective rank: 38 (indicating substantial independent variation)
Step 2: Portfolio Kelly Optimization
Configuration
- Fractional Kelly: 50% (half-Kelly)
- Individual position cap: 4% of trading capital
- Samples for optimization: 50,000
Optimization Results
Running the portfolio Kelly optimizer with the 50 opportunities, correlation matrix, and half-Kelly setting produces the following allocation (top 15 positions shown, sorted by allocation):
| Rank | Market | Raw Kelly | Half-Kelly | After Caps | Dollar Amount |
|---|---|---|---|---|---|
| 1 | E2 (Unemployment) | 0.064 | 0.032 | 0.032 | $960 |
| 2 | E4 (Fed rate cut) | 0.062 | 0.031 | 0.031 | $930 |
| 3 | T3 (AI benchmark) | 0.060 | 0.030 | 0.030 | $900 |
| 4 | W1 (Hurricane) | 0.058 | 0.029 | 0.029 | $870 |
| 5 | E5 (S&P 500) | 0.056 | 0.028 | 0.028 | $840 |
| 6 | N3 (TV Show renewed) | 0.054 | 0.027 | 0.027 | $810 |
| 7 | S5 (Football wins) | 0.053 | 0.027 | 0.027 | $810 |
| 8 | N1 (Best Picture) | 0.052 | 0.026 | 0.026 | $780 |
| 9 | S1 (Championship) | 0.051 | 0.026 | 0.026 | $780 |
| 10 | P1 (Senate Race A) | 0.050 | 0.025 | 0.025 | $750 |
| 11 | P7 (Bill X) | 0.048 | 0.024 | 0.024 | $720 |
| 12 | T1 (SpaceX) | 0.045 | 0.023 | 0.023 | $690 |
| 13 | S4 (Football div.) | 0.044 | 0.022 | 0.022 | $660 |
| 14 | W4 (Wildfire) | 0.043 | 0.022 | 0.022 | $660 |
| 15 | P5 (Governor Race E) | 0.042 | 0.021 | 0.021 | $630 |
Key observations from optimization: - The four correlated Senate races (P1-P4) received significantly reduced allocations compared to their individual Kelly sizes. P1 alone would justify a 5% half-Kelly allocation, but with the three correlated races, it received only 2.5%. - Economic positions E2 and E4 rank highest despite similar edge to political markets because they are less correlated with other positions in the portfolio. - Entertainment and weather positions receive disproportionately high allocations relative to their edge because they provide diversification with near-zero correlation to the rest of the portfolio. - Technology position T1 (SpaceX launch at 92% probability) has a relatively small allocation despite high edge because the payout per unit risked is low (buying at $0.85 for a $0.15 potential profit).
Step 3: Applying Position Sizing Constraints
Constraint Application Pipeline
Step 3a: Individual Position Caps (4%)
No positions exceeded the 4% cap after half-Kelly sizing, so no adjustments needed at this step.
Step 3b: Correlated Group Caps (12% per group)
| Group | Total Before | Cap | Total After | Action |
|---|---|---|---|---|
| Politics-Senate (P1-P4) | 8.2% | 12% | 8.2% | No change |
| Economics-Macro (E1-E4) | 10.5% | 12% | 10.5% | No change |
| Sports-Baseball (S1-S3) | 5.8% | 12% | 5.8% | No change |
| All Politics combined | 18.9% | 20% | 18.9% | No change |
| All Economics combined | 21.4% | 20% | 20.0% | Scaled by 0.934 |
The Economics group slightly exceeded the 20% combined category cap, so all economic positions were scaled down by a factor of 0.934.
Step 3c: Platform Caps (40% for A and B, 25% for C)
| Platform | Total Before | Cap | Total After | Action |
|---|---|---|---|---|
| Platform A (20 positions) | 31.2% | 40% | 31.2% | No change |
| Platform B (19 positions) | 28.5% | 40% | 28.5% | No change |
| Platform C (11 positions) | 12.4% | 25% | 12.4% | No change |
All platforms are within limits.
Step 3d: Aggregate Deployment Cap (70%)
Total allocation after all constraints: 72.1%
This exceeds the 70% cap by 2.1 percentage points. All positions are scaled proportionally by $0.70 / 0.721 = 0.971$.
Final Portfolio Allocation
| Metric | Value |
|---|---|
| Number of positions | 50 |
| Total allocation | 70.0% of trading capital |
| Dollars deployed | $21,000 |
| Dollars in reserve | $9,000 (trading) + $12,500 (reserve tier) |
| Average position size | 1.4% ($420) |
| Largest position | 3.1% ($930) |
| Smallest position | 0.5% ($150) |
| Effective number of bets | 41.3 (high diversification) |
Category Allocation Breakdown
| Category | Allocation | # Positions |
|---|---|---|
| Politics | 18.1% | 12 |
| Economics | 19.4% | 10 |
| Sports | 13.8% | 10 |
| Entertainment | 10.2% | 8 |
| Science/Tech | 5.7% | 6 |
| Weather/Climate | 2.8% | 4 |
Step 4: Monte Carlo Simulation
Single-Round Simulation (All 50 bets resolve once)
We run 100,000 Monte Carlo simulations of all 50 positions resolving simultaneously, using the correlated binary outcome model.
Return Distribution:
| Statistic | Value |
|---|---|
| Mean return | +4.82% |
| Median return | +5.14% |
| Standard deviation | 7.93% |
| Minimum return (worst sim) | -28.4% |
| Maximum return (best sim) | +35.1% |
| Skewness | -0.31 |
Probability Analysis:
| Outcome | Probability |
|---|---|
| P(profit) | 73.1% |
| P(return > 10%) | 24.8% |
| P(return > 20%) | 3.2% |
| P(loss) | 26.9% |
| P(loss > 5%) | 12.4% |
| P(loss > 10%) | 4.1% |
| P(loss > 15%) | 1.0% |
| P(loss > 20%) | 0.18% |
| P(loss > 25%) | 0.02% |
Risk Metrics:
| Metric | Value |
|---|---|
| VaR (95%) | 8.7% |
| VaR (99%) | 14.2% |
| CVaR (95%) | 11.8% |
| CVaR (99%) | 17.6% |
| Sharpe Ratio | 0.61 |
| Sortino Ratio | 0.89 |
Sequential Simulation (12 weekly rounds)
To model the three-month trading horizon, we simulate 12 rounds of the portfolio resolving and being re-entered. Each round, resolved positions are replaced with new opportunities of similar quality, maintaining the same portfolio structure.
Running 20,000 path simulations over 12 rounds:
Bankroll Path Statistics:
| Statistic | Value |
|---|---|
| Median final bankroll | $34,887 (1.163x) |
| Mean final bankroll | $35,412 (1.180x) |
| P(profit after 12 rounds) | 89.3% |
| P(bankroll > 1.5x start) | 18.7% |
| P(bankroll doubles) | 1.4% |
| P(bankroll < 0.9x start) | 4.2% |
| P(bankroll < 0.8x start) | 0.8% |
| P(bankroll < 0.5x start) | < 0.01% |
Drawdown Statistics (across all paths):
| Statistic | Value |
|---|---|
| Mean max drawdown | 8.9% |
| Median max drawdown | 7.6% |
| 95th percentile max drawdown | 18.2% |
| 99th percentile max drawdown | 23.7% |
| Worst max drawdown (any path) | 34.1% |
Interpretation
The Monte Carlo results are encouraging. The portfolio has a 73% chance of profit on any single round and an 89% chance of being profitable after the full 12-round season. The 95% VaR of 8.7% means that in the vast majority of rounds, the worst-case loss is under 9% of deployed capital.
The sequential simulation shows that the median drawdown over the season is only 7.6%, well within the "Normal" threshold of 10% that would not trigger any position scaling. Only about 5% of paths experience drawdowns exceeding 18%, which would trigger the "Serious" response of halving position sizes.
The risk of ruin (bankroll below 50% of starting value) is negligible at less than 0.01% over the 12-round horizon. This confirms that the half-Kelly sizing with 70% deployment creates a robust portfolio.
Step 5: Stress Testing
Scenario 1: Correlation Spike to 0.50
We re-run the simulation with all pairwise correlations set to 0.50, simulating a crisis where "everything is correlated."
| Metric | Base Case | Stressed | Change |
|---|---|---|---|
| Mean return | +4.82% | +4.82% | 0.00% |
| Volatility | 7.93% | 14.21% | +79% |
| VaR (95%) | 8.7% | 16.9% | +94% |
| CVaR (95%) | 11.8% | 21.3% | +81% |
| P(loss > 10%) | 4.1% | 15.8% | +285% |
| P(loss > 20%) | 0.18% | 4.7% | +2511% |
| Sharpe Ratio | 0.61 | 0.34 | -44% |
Interpretation: The expected return stays the same (correlation does not affect expected return), but risk nearly doubles. The probability of a loss exceeding 20% jumps from negligible to nearly 5%. This stress test reveals the portfolio's dependence on correlation assumptions.
Scenario 2: Edge Halved (50% of estimated edge)
We re-run assuming true probabilities are midway between our estimates and market prices.
| Metric | Base Case | Stressed | Change |
|---|---|---|---|
| Mean return | +4.82% | +1.94% | -60% |
| P(profit) | 73.1% | 59.8% | -18% |
| P(loss > 10%) | 4.1% | 8.3% | +102% |
| Sharpe Ratio | 0.61 | 0.24 | -61% |
Interpretation: With halved edge, the portfolio remains profitable in expectation but the probability of profit drops to 60%. If the trader's edges are genuinely half of what they believe, the strategy still works but is marginal. This underscores the importance of accurate probability estimation.
Scenario 3: Political Category Wipeout
All 12 political positions lose simultaneously (a scenario resembling a major political surprise).
| Metric | Value |
|---|---|
| Political allocation | 18.1% |
| Loss from wipeout | 18.1% of deployed capital |
| Loss vs total trading capital | 12.7% |
| Remaining bankroll | $26,190 |
| Status | "Serious" drawdown trigger |
Interpretation: A complete political wipeout is painful but survivable. The 12.7% loss triggers the "Serious" drawdown level, halving position sizes going forward. Combined with reserve capital, the trader can continue operating.
Scenario 4: Platform A Failure
Platform A, holding 31.2% of deployed capital, becomes insolvent.
| Metric | Value |
|---|---|
| Capital on Platform A | $6,552 |
| Loss vs trading capital | 21.8% |
| Loss vs total capital | 13.1% |
| Remaining tradeable capital | $23,448 + $12,500 reserve |
| Status | "Serious" drawdown trigger |
Interpretation: Losing the largest platform is a significant blow but does not threaten survival. The trader can redeploy reserve capital and continue trading on Platforms B and C while the Platform A situation resolves.
Scenario 5: Combined Adverse (Correlation Spike + Edge Halved)
The worst realistic scenario: correlations spike AND the trader's edge is overstated.
| Metric | Value |
|---|---|
| Mean return | +1.94% |
| Volatility | 14.21% |
| VaR (95%) | 19.4% |
| CVaR (95%) | 25.8% |
| P(loss > 10%) | 22.1% |
| P(loss > 20%) | 9.3% |
| Sharpe Ratio | 0.14 |
Interpretation: Even in this severe combined stress scenario, the expected return remains positive and the probability of catastrophic loss (>25%) is under 10%. The portfolio survives, though it would trigger significant position reductions.
Step 6: Diversification Analysis
Diversification Ratio
$$\text{DR} = \frac{\sum w_i \sigma_i}{\sigma_p} = \frac{0.1084}{0.0558} = 1.94$$
A diversification ratio of 1.94 means the portfolio's volatility is approximately half of what it would be if all positions were perfectly correlated. This represents strong diversification benefit.
Marginal Contribution to Risk (Top 5)
| Position | Weight | MCTR | % of Total Risk |
|---|---|---|---|
| P1 (Senate Race A) | 2.5% | 0.0031 | 5.6% |
| E2 (Unemployment) | 3.1% | 0.0029 | 5.2% |
| P2 (Senate Race B) | 2.2% | 0.0027 | 4.8% |
| E4 (Fed rate cut) | 3.0% | 0.0026 | 4.7% |
| E1 (GDP growth) | 2.1% | 0.0024 | 4.3% |
The top risk contributors are concentrated in political and economic markets, which have the highest intra-category correlations. No single position contributes more than 6% of total risk, indicating good risk balance.
Effective Number of Bets
$$\text{ENB} = \frac{1}{\sum w_i^2} = \frac{1}{0.0242} = 41.3$$
Out of 50 positions, the effective number of independent bets is 41.3. This is excellent. It means the portfolio is well-balanced and not dominated by a few large positions.
Conclusions and Lessons Learned
Lesson 1: The Correlation Tax on Concentrated Categories
The four Senate races each had strong individual edges (5-7 cents), but after accounting for their 0.50 intra-group correlation, the portfolio Kelly optimizer allocated less to each than their standalone Kelly fractions would suggest. The combined allocation to all four Senate races (8.2%) was less than what two uncorrelated bets of similar edge would receive. This is the "correlation tax": correlated positions dilute each other's portfolio value.
Lesson 2: Low-Correlation Mediocre Bets Can Beat High-Edge Correlated Bets
Entertainment positions N5 (Celebrity couple split, edge +0.06) and N7 (Book on NYT list, edge +0.07) received similar portfolio allocations to Senate Race P2 (edge +0.06) despite lower individual edges. The reason: zero correlation with everything else makes them more valuable to the portfolio as a whole.
Lesson 3: Stress Tests Reveal Hidden Fragility
The base-case simulation painted a rosy picture: 73% probability of profit, negligible ruin risk. But the combined stress scenario (correlation spike + edge halved) revealed that a 20%+ loss has a 9.3% probability. This is within the realm of plausible experience over a multi-season career. Knowing this in advance allows the trader to prepare psychologically and financially.
Lesson 4: Reserve Capital Is Not Wasted Capital
The trader deployed only $21,000 of their $50,000 total capital. The remaining $29,000 might seem unproductive, but it serves three critical functions: (1) it reduces effective risk to sustainable levels, (2) it provides deployment capacity for new opportunities, and (3) it ensures survival through any single-round adverse outcome.
Lesson 5: Diversification Is the Only Free Lunch
The diversification ratio of 1.94 means the portfolio achieved nearly twice the risk reduction of its individual positions through the simple act of combining uncorrelated bets. No amount of analytical sophistication can substitute for this structural benefit. A trader with 50 uncorrelated 5-cent-edge bets is in a far better position than a trader with 5 uncorrelated 10-cent-edge bets, even though the total expected return may be similar.
The complete Python code for this case study, including portfolio construction, Monte Carlo simulation, and stress testing, is available in code/case-study-code.py.