Case Study 1: Bayesian Updating During a Breaking News Event
Overview
This case study walks through a realistic scenario where a prediction market contract responds to three sequential news events over the course of a single day. We will apply Bayes' theorem at each step to derive what the rational market price should be, compare it to how a simulated market actually responds, and analyze the efficiency of the price adjustment.
The scenario is modeled on the kind of events that regularly move prediction markets: a major policy announcement where the outcome is uncertain and information arrives in stages.
Scenario Setup
The Market: A binary contract on the question "Will the Federal Reserve announce a special emergency lending facility by the end of this week?"
Initial Conditions: - It is Monday morning - The market price is $0.30 (30% implied probability) - There have been rumors of banking stress, but no official action - The contract expires Friday at market close
We define: - H = "The Fed announces the emergency lending facility this week" - P(H) = 0.30 (our prior, derived from the market price)
Event 1: Monday 11:00 AM --- Financial Times Report
What happens: The Financial Times publishes an article stating that "Federal Reserve officials held an unscheduled meeting over the weekend to discuss potential emergency measures."
Estimating the likelihoods: - P(E1 | H): If the Fed IS going to announce the facility, how likely is it that an unscheduled weekend meeting occurred and was reported? This is quite likely --- emergency facilities require significant coordination. Estimate: 0.90 - P(E1 | not H): If the Fed is NOT going to announce the facility, how likely is this report? Weekend meetings happen for various reasons, and the FT might be speculating based on incomplete information. Estimate: 0.20
Applying Bayes' theorem:
$$P(H | E_1) = \frac{P(E_1 | H) \cdot P(H)}{P(E_1 | H) \cdot P(H) + P(E_1 | \neg H) \cdot P(\neg H)}$$
$$P(H | E_1) = \frac{0.90 \times 0.30}{0.90 \times 0.30 + 0.20 \times 0.70} = \frac{0.270}{0.270 + 0.140} = \frac{0.270}{0.410} = 0.659$$
Likelihood ratio: 0.90 / 0.20 = 4.5
Odds update: Prior odds = 0.30/0.70 = 0.429. Posterior odds = 4.5 * 0.429 = 1.929. Probability = 1.929 / 2.929 = 0.659.
Rational price after Event 1: $0.66
Simulated market response: The market price jumps to $0.62 within 15 minutes. This is slightly below our Bayesian prediction, suggesting the market may be slightly underweighting the FT report (perhaps due to skepticism about the source or general anchoring to the prior price).
Event 2: Monday 2:30 PM --- Congressional Testimony
What happens: During a scheduled congressional hearing, the Treasury Secretary says: "We are monitoring the banking situation closely and are prepared to use all available tools if necessary."
Estimating the likelihoods: - P(E2 | H): If the emergency facility IS coming, how likely is such a statement? Very likely --- officials would be laying the groundwork. Estimate: 0.80 - P(E2 | not H): If the facility is NOT coming, how likely is this statement? This is fairly standard language that officials use even when no action is imminent. Estimate: 0.45
Note that this evidence is less diagnostic than Event 1 because the statement is somewhat ambiguous --- officials often use "prepared to use all tools" language as a way to calm markets without committing to action.
Applying Bayes' theorem (using posterior from Event 1 as the new prior):
$$P(H | E_1, E_2) = \frac{0.80 \times 0.659}{0.80 \times 0.659 + 0.45 \times 0.341}$$
$$= \frac{0.527}{0.527 + 0.153} = \frac{0.527}{0.681} = 0.774$$
Likelihood ratio: 0.80 / 0.45 = 1.78
Odds update: Prior odds = 0.659/0.341 = 1.932. Posterior odds = 1.78 * 1.932 = 3.439. Probability = 3.439 / 4.439 = 0.775.
Rational price after Event 2: $0.77
Simulated market response: The market price moves from $0.62 to $0.70. This is notably below our Bayesian prediction of $0.77. The market appears to be discounting the Treasury Secretary's statement more heavily, perhaps recognizing that such language is often used without follow-through. This could represent either market wisdom (the market is correctly assigning a higher P(E2 | not H) than our estimate of 0.45) or market underreaction.
Event 3: Monday 5:45 PM --- Bloomberg Exclusive
What happens: Bloomberg reports, citing three unnamed officials, that "the Federal Reserve has finalized the terms of an emergency lending facility and plans to announce it Tuesday morning."
Estimating the likelihoods: - P(E3 | H): If the facility IS coming, how likely is this specific, detailed Bloomberg report with multiple sources? Very high. Estimate: 0.95 - P(E3 | not H): If the facility is NOT coming, how likely is such a detailed, multi-source Bloomberg report? Bloomberg is generally reliable for this kind of reporting, but false reports with "unnamed officials" do occur occasionally. Estimate: 0.05
Applying Bayes' theorem (using posterior from Event 2 as the new prior):
Using our theoretical posterior:
$$P(H | E_1, E_2, E_3) = \frac{0.95 \times 0.774}{0.95 \times 0.774 + 0.05 \times 0.226}$$
$$= \frac{0.735}{0.735 + 0.011} = \frac{0.735}{0.746} = 0.985$$
Using the market's actual posterior as the prior:
$$P(H | E_3, \text{market prior 0.70}) = \frac{0.95 \times 0.70}{0.95 \times 0.70 + 0.05 \times 0.30} = \frac{0.665}{0.665 + 0.015} = \frac{0.665}{0.680} = 0.978$$
Likelihood ratio: 0.95 / 0.05 = 19.0
This is the strongest piece of evidence, with a likelihood ratio of 19 --- the evidence is 19 times more likely if the hypothesis is true.
Rational price after Event 3: $0.98** (from our Bayesian chain) or **$0.98 (from the market's chain)
Simulated market response: The market price surges to $0.93. This is below both Bayesian predictions. In after-hours trading with lower liquidity, the market may not fully price in the information, or participants may be hedging against the (small) possibility that Bloomberg's sources are wrong.
Summary of Price Evolution
| Time | Event | Bayesian Prediction | Market Price | Gap |
|---|---|---|---|---|
| 9:00 AM | Market opens | $0.30 | $0.30 | $0.00 | |
| 11:00 AM | FT report | $0.66 | $0.62 | $0.04 | |
| 2:30 PM | Treasury testimony | $0.77 | $0.70 | $0.07 | |
| 5:45 PM | Bloomberg exclusive | $0.98 | $0.93 | $0.05 |
Analysis
Observation 1: The Market Consistently Underreacts
Across all three events, the market price was below the Bayesian prediction. The average gap was $0.05. This pattern of underreaction is a well-documented phenomenon in financial markets and prediction markets. It can arise from:
- Anchoring bias: Traders anchor to the previous price and adjust insufficiently.
- Disagreement about likelihoods: Different traders assign different likelihood values. If some traders think P(E1|not H) is higher than 0.20, their Bayesian updates will be smaller, pulling the price down.
- Liquidity constraints: Not enough capital is available to push the price to its "correct" level.
- Risk aversion: Even if traders believe the probability is 0.66, they may not buy at that price because they are risk-averse.
Observation 2: The Strength of Evidence Matters
The three events had very different likelihood ratios: - FT report: LR = 4.5 (strong evidence) - Treasury testimony: LR = 1.78 (moderate evidence) - Bloomberg exclusive: LR = 19.0 (very strong evidence)
The market appropriately reacted most strongly to the Bloomberg report and least strongly to the Treasury testimony. The relative ordering of reactions was correct, even if the magnitudes were muted.
Observation 3: Combined Effect
The combined likelihood ratio across all three events is:
$$LR_{\text{total}} = LR_1 \times LR_2 \times LR_3 = 4.5 \times 1.78 \times 19.0 = 152.1$$
Starting from prior odds of 0.30/0.70 = 0.429:
Posterior odds = 152.1 * 0.429 = 65.2
Posterior probability = 65.2 / 66.2 = 0.985
The combined evidence is overwhelming --- a total likelihood ratio of 152 means the evidence is 152 times more likely under the hypothesis than under the alternative. Starting from just a 30% prior, three strong pieces of evidence are sufficient to reach 98.5% confidence.
Observation 4: Trading Opportunity
The consistent gap between the Bayesian prediction and market price represents a potential trading opportunity. A trader who: 1. Correctly estimates the likelihoods 2. Can process the information quickly 3. Has capital available
could buy at the market price (below the Bayesian prediction) and capture the difference as the market eventually converges. This is the fundamental mechanism by which prediction markets become efficient: informed traders push prices toward the Bayesian optimum.
Lessons for Prediction Market Traders
-
Quantify your evidence. Before trading on news, estimate the likelihood ratio. If LR is close to 1, the news is uninformative and the market probably will not (and should not) move much.
-
Track the full update chain. Each new piece of evidence updates from the current price, not from the original price. The posterior from one update becomes the prior for the next.
-
Look for underreaction. Markets often do not fully incorporate evidence immediately. If you can correctly estimate the Bayesian update and the market has not reached that level, there may be a trading opportunity.
-
Be humble about likelihoods. The entire analysis depends on your estimates of P(Evidence | Hypothesis) and P(Evidence | Not Hypothesis). Small errors in these estimates compound across multiple updates. Always consider the possibility that the market's implicit likelihoods are better than yours.
-
Use the odds form for quick mental math. When news breaks, quickly estimate the likelihood ratio and multiply it by the current odds. Converting back to probability gives you a target price to compare against the market.
Python Implementation
The complete Python code for this case study is available in code/case-study-code.py. It includes:
- A
NewsEventdataclass for structuring evidence - The
BayesianNewsTrackerclass for sequential updating - Visualization of the Bayesian prediction vs. market price
- Calculation of implied likelihood ratios from market price movements
- Sensitivity analysis showing how different likelihood estimates change the outcome
See the code file for the full implementation and additional analysis.