Multi-Agent Forecasting
Multiple agents help only when they add independent information or structured disagreement. Re-running the same prompt at higher temperature usually produces correlated forecasts, not a useful ensemble.
The Problem
Forecast pipelines often report "agent consensus" from several identical agents. On well-specified macro questions, those agents read the same evidence and return nearly identical probabilities. Averaging correlated forecasts gives false confidence unless the system measures diversity, calibrates probabilities, and stress-tests the consensus with opposing arguments.
The Pattern
WRONG
forecasts = [agent.run(question, temperature=0.7) for _ in range(5)]
p_yes = sum(f.p_yes for f in forecasts) / len(forecasts)
print(f"consensus={p_yes:.2%}")
CORRECT
import math
from statistics import mean
def logit(p: float) -> float:
p = min(max(p, 1e-6), 1 - 1e-6)
return math.log(p / (1 - p))
def inv_logit(x: float) -> float:
return 1 / (1 + math.exp(-x))
def neyman_aggregate(probs: list[float], diversity: float) -> float:
avg_logit = mean(logit(p) for p in probs)
return inv_logit(avg_logit * diversity)
forecasts = [
bull_agent.run(question),
bear_agent.run(question),
base_rate_agent.run(question),
]
divergence = max(f.p_yes for f in forecasts) - min(f.p_yes for f in forecasts)
aggregate = neyman_aggregate([f.p_yes for f in forecasts], diversity=1.2)
if divergence < 0.05:
aggregate = run_adversarial_debate(question, forecasts).p_yes
Forecast Controls
- Use role, evidence-source, or method diversity; do not rely on temperature alone
- Preserve each forecast's evidence, confidence, rationale, and uncertainty list
- Aggregate in logit space when probabilities are far from 50%
- Evaluate resolved questions with Brier score, log score, calibration, and sharpness
- Run ablations: no debate, no supervisor, simple mean, weighted aggregation
Guardrails
- Identical-agent ensemble - check probability spread before claiming diversity
- Consensus without calibration - low disagreement is not the same as accuracy
- Free-text handoff - downstream aggregation needs typed
p_yes fields
- Leaky evaluation - only score questions resolved after the forecast timestamp
Checklist
1---2name: ml4t-multi-agent-forecasting3description: Multi-agent probability forecasting with diversity, aggregation, and debate controls. Use when combining several agent forecasts or evaluating forecast ensembles.4---5# Multi-Agent Forecasting67Multiple agents help only when they add independent information or structured disagreement. Re-running the same prompt at higher temperature usually produces correlated forecasts, not a useful ensemble.89## The Problem1011Forecast pipelines often report "agent consensus" from several identical agents. On well-specified macro questions, those agents read the same evidence and return nearly identical probabilities. Averaging correlated forecasts gives false confidence unless the system measures diversity, calibrates probabilities, and stress-tests the consensus with opposing arguments.1213## The Pattern1415### WRONG16```python17forecasts = [agent.run(question, temperature=0.7) for _ in range(5)]18p_yes = sum(f.p_yes for f in forecasts) / len(forecasts)19print(f"consensus={p_yes:.2%}")20```2122### CORRECT23```python24import math25from statistics import mean262728def logit(p: float) -> float:29 p = min(max(p, 1e-6), 1 - 1e-6)30 return math.log(p / (1 - p))313233def inv_logit(x: float) -> float:34 return 1 / (1 + math.exp(-x))353637def neyman_aggregate(probs: list[float], diversity: float) -> float:38 avg_logit = mean(logit(p) for p in probs)39 return inv_logit(avg_logit * diversity)404142forecasts = [43 bull_agent.run(question),44 bear_agent.run(question),45 base_rate_agent.run(question),46]47divergence = max(f.p_yes for f in forecasts) - min(f.p_yes for f in forecasts)48aggregate = neyman_aggregate([f.p_yes for f in forecasts], diversity=1.2)4950if divergence < 0.05:51 aggregate = run_adversarial_debate(question, forecasts).p_yes52```5354## Forecast Controls5556- Use role, evidence-source, or method diversity; do not rely on temperature alone57- Preserve each forecast's evidence, confidence, rationale, and uncertainty list58- Aggregate in logit space when probabilities are far from 50%59- Evaluate resolved questions with Brier score, log score, calibration, and sharpness60- Run ablations: no debate, no supervisor, simple mean, weighted aggregation6162## Guardrails6364- **Identical-agent ensemble** - check probability spread before claiming diversity65- **Consensus without calibration** - low disagreement is not the same as accuracy66- **Free-text handoff** - downstream aggregation needs typed `p_yes` fields67- **Leaky evaluation** - only score questions resolved after the forecast timestamp6869## Checklist7071- [ ] Forecast artifacts contain probability, confidence, evidence, and timestamp72- [ ] Agent diversity is structural, not only sampling noise73- [ ] Aggregation method and diversity factor are recorded74- [ ] Debate or supervisor stages are evaluated with ablations75- [ ] Resolved-question scoring uses proper scoring rules