1. Prediction Markets as Probability Machines
Prediction markets allow participants to trade contracts that pay $1 if an event occurs and $0 otherwise. In theory, the market price of such a contract equals the consensus probability of the event (Wolfers and Zitzewitz, 2004). The efficiency question is whether these prices are well-calibrated — whether events priced at 70% actually occur 70% of the time — and whether arbitrage opportunities exist for quantitatively sophisticated participants.
2. Calibration Analysis
We collect contract-level data from three platforms over 2022–2025, binning resolved contracts by their price at various horizons before resolution. A perfectly calibrated market would show a 45-degree line when plotting realised frequency against contract price.
| Price Bin | N Contracts | Realised Frequency | Calibration Error |
|---|---|---|---|
| 0–10% | 1,247 | 4.8% | −0.2% |
| 10–30% | 892 | 18.4% | −1.6% |
| 30–50% | 634 | 38.2% | −1.8% |
| 50–70% | 587 | 61.3% | +1.3% |
| 70–90% | 912 | 81.7% | +1.7% |
| 90–100% | 1,418 | 96.2% | +1.2% |
Table 1: Calibration analysis across all platforms, 2022–2025. Calibration errors are modest, indicating that prediction markets are approximately well-calibrated in aggregate.
3. Liquidity and Mispricing
Calibration improves with liquidity. We find that contracts with daily volume above $1M show near-perfect calibration (mean absolute error 0.8%), while contracts below $10k daily volume show systematic biases: low-probability events are overpriced (the favourite-longshot bias) and high-probability events are underpriced. The mispricing in low-liquidity contracts has a half-life of approximately 48 hours — it decays as arbitrageurs gradually bring prices into line, but the speed is limited by the capital willing to be deployed in illiquid contracts.
def calibration_analysis(contracts, bins=10):
"""
Compute calibration curve for resolved prediction market contracts.
contracts: list of (price_at_time_T, resolved_1_or_0)
"""
prices = np.array([c[0] for c in contracts])
outcomes = np.array([c[1] for c in contracts])
bin_edges = np.linspace(0, 1, bins+1)
calibration = []
for i in range(bins):
mask = (prices >= bin_edges[i]) & (prices < bin_edges[i+1])
if mask.sum() > 10:
mean_price = prices[mask].mean()
realised = outcomes[mask].mean()
calibration.append({
'bin': f'{bin_edges[i]:.0%}-{bin_edges[i+1]:.0%}',
'mean_price': mean_price,
'realised_freq': realised,
'error': realised - mean_price,
'n': mask.sum()
})
return calibration
4. Cross-Platform Arbitrage
We identify instances where the same event is priced differently across platforms. Persistent cross-platform price differences exist, averaging 2.3 percentage points for contracts with matching definitions. However, after accounting for withdrawal delays, counterparty risk, and capital lockup, the risk-adjusted return from cross-platform arbitrage averages only 4–6% annualised — positive but below the threshold for institutional deployment.
5. Conclusion
Prediction markets are approximately efficient for high-liquidity contracts but show exploitable mispricings in the long tail of low-liquidity contracts. The favourite-longshot bias persists in thin markets. For quantitative traders, the opportunity set is limited by liquidity constraints: the most mispriced contracts are precisely those where deploying meaningful capital is difficult. The markets are best understood as well-calibrated probability estimators for high-profile events, with decreasing reliability as liquidity declines.
References
- Wolfers, J. and Zitzewitz, E. (2004). "Prediction Markets." J. Economic Perspectives, 18(2), 107–126.
- Arrow, K.J. et al. (2008). "The Promise of Prediction Markets." Science, 320(5878), 877–878.
- Manski, C.F. (2006). "Interpreting the Predictions of Prediction Markets." Economics Letters, 91(3), 425–429.
- Rothschild, D. (2009). "Forecasting Elections: Comparing Prediction Markets, Polls, and Their Biases." Public Opinion Quarterly, 73(5), 895–916.