Free lesson · Statistics
Prediction markets: probability, price and net expected value
Open interactive lessonPractice calculationsExplore labs
Start with the idea
A binary contract pays a fixed amount if an event occurs and zero otherwise. Its purchase price is money paid now; your probability estimate describes an uncertain future payment. They are different quantities.
Symbols, units & horizon
- Π: profit per contract in dollars
- E: probability-weighted average
- p: your event probability for the settlement horizon
- F: fixed winning payout in dollars, positive
- c: executable purchase price in dollars
- f: total assumed fee and cost per contract in dollars
- p_BE: break-even probability
- 1−p: probability of the losing branch
When and why to use this
Use the payout ledger to evaluate a binary event contract or as a simple building block for understanding any cost-sensitive classifier.
For a contract settling at $1, list the two cash outcomes before using a formula. If you pay 62 cents and incur 1 cent of total fees, winning leaves 37 cents of net profit and losing costs 63 cents. The same upfront payment occurs in both branches.
Weight each branch by your estimated probability. A contract can correctly identify the more likely event yet be too expensive to buy. Conversely, a low-probability outcome is not attractive simply because its payout multiple is large. Expected profit depends on the price relative to a calibrated probability and all costs.
A maker posts an order and waits; a taker accepts an available quote. A lower posted price may never fill, and fills may concentrate when your forecast is wrong. The last traded price is not necessarily available for your size. Historical fee schedules in research must not be copied into current execution assumptions.
For an experiment, group contracts by underlying event, preserve their resolution deadlines and evaluate probability calibration separately from executable net returns. Compare against a market-price forecast and a no-trade decision. Use cautious sizing when probability estimates are fragile; the later Kelly lesson describes a model-dependent optimum, not an instruction to stake that amount.
Prediction markets: probability, price and net expected value
- Winning net profit is F−c−f and losing net profit is −c−f.
- Expand p(F−c−f)+(1−p)(−c−f). The price and fee terms sum to −c−f because the probabilities sum to one.
- Set pF−c−f=0, add c+f to both sides, and divide by positive F. This gives the break-even probability.
For p=.70, F=$1, c=$.62 and f=$.01, expected profit=.70−.62−.01=$.07 per contract. Break-even probability=.63. If p is actually .60, the expectation is −$.03. These are hypothetical costs, not a venue fee quote.
Apply it in a strategy
- Specify payout, settlement and executable price for the actual size.
- Estimate event probability and its uncertainty without future information.
- Stress fees, fill selection and probability error; log both forecast quality and net economic outcomes.
Research deliverable
Write a two-outcome cash ledger and identify the probability error that would erase its expected profit.
Sources & evidence · reviewed 12 September 2026
Reviewed 12 September 2026: working paper 2026-001, February cover / January manuscript. Introduction, data, fee conventions and results reviewed in full text. The selected sample covers 2021–April 2025, with 46,282 Yes contracts across 12,403 events; repeated observations create 313,972 purchased-side prices, not that many independent events. It reports favorite–longshot bias and different maker/taker outcomes. Filters exclude thin, wide-spread and sub-24-hour markets; fees reflect the historical sample. These findings motivate event-grouped calibration and execution tests, not a current trade recommendation or replicated strategy.
Further reading: Bürgi, Deng & Whelan · Makers and Takers: The Economics of the Kalshi Prediction Market ↗
Python implementation
Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.
from math import isfinite
def binary_contract(probability,price,cost,payout=1):
if not all(isfinite(x) for x in [probability,price,cost,payout]) or not 0<=probability<=1 or payout<=0 or price<0 or cost<0:
raise ValueError("Invalid contract inputs")
return probability*payout-price-cost,(price+cost)/payout
print(binary_contract(.70,.62,.01))Continue learning
Statistics & Probability — all lessons- Start with counts, probabilities and averages
- Random outcomes, sample averages and the limits of the bell curve
- Conditional probability: update a belief with evidence
- Prediction markets: probability, price and net expected value
- Expected value: measure the payoff before choosing the risk
- Correlation: how many strategies do you really have?
- Conditional probability and Bayes: where the edge actually lives
- The central limit theorem: sampling means under explicit assumptions
- Estimation uncertainty and Bayesian updating
Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations