Two Heads Are Better Than One: Aggregating Weaker LLMs for Better Forecasts
Organizations: Chinese University of Hong Kong
Abstract
Large language models (LLMs) are increasingly used to forecast real-world events, but access to the strongest individual forecaster may be costly or otherwise constrained. We study weak-to-strong forecast aggregation: can individually weaker LLM forecasters be aggregated to outperform a stronger forecaster? Using ForecastBench (Karger et al., 2025), we evaluate 70 LLM forecasters across 16 comparison groups, each with more than 1,000 shared subquestions, yielding 1,121 weaker-model pairs. Within each group, we identify the strongest individual by test Brier score and evaluate aggregates composed exclusively of weaker forecasters, with aggregation weights learned on separate training data. We find substantial evidence of weak-to-strong improvement. Learned linear pooling identifies a weaker pair that matches or outperforms the strongest individual in 11 of 16 groups and comes within 5% of its Brier score in all 16 groups. We also find that these improvements do not rely on having a near-best constituent and are generally accompanied by good calibration. Additional analyses show that adding more models does not consistently improve performance, and competitive weaker-model aggregates also remain available under practical constraints.
Figures & tables
| Required shared subquestions ( ) | Distinct forecasters | No. of maximal groups | Forecasters per group (min-max) | Shared subquestions per group (min-max) |
| – | – | |||
| – | – |
| Groups | Eligible pairs | ||||
| Aggregation rule | Match or improve benchmark | Within of benchmark | Match or improve benchmark | Within of benchmark | Improve on both members |
| Learned linear pooling | 11/16 (68.75%) | 16/16 (100.00%) | 315/1,121 (28.10%) | 730/1,121 (65.12%) | 1,073/1,121 (95.72%) |
| Learned log-odds pooling | 8/16 (50.00%) | 15/16 (93.75%) | 84/1,121 (7.49%) | 467/1,121 (41.66%) | 1,022/1,121 (91.17%) |
| Simple mean (AM) | 8/16 (50.00%) | 15/16 (93.75%) | 70/1,121 (6.24%) | 345/1,121 (30.78%) | 736/1,121 (65.66%) |
| Harmonic mean (HM) | 8/16 (50.00%) | 16/16 (100.00%) | 46/1,121 (4.10%) | 349/1,121 (31.13%) | 658/1,121 (58.70%) |
| Log-odds mean (GM) | 8/16 (50.00%) | 15/16 (93.75%) | 52/1,121 (4.64%) | 375/1,121 (33.45%) | 689/1,121 (61.46%) |
Appendix figures & tables20 assets
Supplementary material from the paper’s appendix.
Appendix
| Index | Size | Subquestions | Models |
|---|---|---|---|
| Overall, threshold 1,000 | |||
| 1 | 18 | 1,065 | Claude-3-7-Sonnet; Claude-Haiku-4-5; Claude-Opus-4-1; Claude-Sonnet-4-5; DeepSeek-V3.1; GPT-4.1; GPT-5-Mini; GPT-5-Nano; GPT-5.1; Gemini-2.5-Pro; Gemini-3-Pro-Preview; Grok-4; Grok-4-1-Fast-Non-Reasoning; Grok-4-1-Fast-Reasoning; Grok-4-Fast-Non-Reasoning; Grok-4-Fast-Reasoning; Qwen3-235B-A22B-Fp8-Tput; Qwen3-235B-A22B-Thinking |
| 2 | 16 | 2,969 | Claude-3-5-Sonnet; Claude-3-7-Sonnet; Claude-3-Haiku; Claude-3-Opus; GPT-4-Turbo; GPT-4.1; GPT-4o; Llama-3.2-3B-Instruct-Turbo; Llama-3.3-70B-Instruct-Turbo; Llama-4-Maverick-17B-128E-Instruct-FP8; Llama-4-Scout-17B-16E-Instruct; Meta-Llama-3.1-405B-Instruct-Turbo; Mistral-Large; O4-Mini; Qwen2.5-72B-Instruct-Turbo; Qwen3-235B-A22B-Fp8-Tput |
| 3 | 16 | 1,902 | Claude-2.1; Claude-3-5-Sonnet; Claude-3-Haiku; Claude-3-Opus; GPT-3.5-Turbo; GPT-4; GPT-4-Turbo; GPT-4o; Gemini-1.5-Flash; Gemini-1.5-Pro; Llama-2-70b-Chat-Hf; Llama-3-70b-Chat-Hf; Llama-3-8b-Chat-Hf; Mixtral-8x22B-Instruct-V0.1; Mixtral-8x7B-Instruct-V0.1; Qwen1.5-110B-Chat |
| 4 | 16 | 1,257 | Claude-3-7-Sonnet; Claude-Haiku-4-5; Claude-Opus-4-1; Claude-Sonnet-4-5; DeepSeek-V3.1; GPT-4.1; GPT-5-Mini; GPT-5-Nano; Gemini-2.5-Flash; Gemini-2.5-Pro; Grok-4; Grok-4-Fast-Non-Reasoning; Grok-4-Fast-Reasoning; O3; Qwen3-235B-A22B-Fp8-Tput; Qwen3-235B-A22B-Thinking |
| 5 | 16 | 1,137 | Claude-Haiku-4-5; Claude-Opus-4-1; Claude-Sonnet-4-5; DeepSeek-V3.1; GPT-4.1; GPT-5-Mini; GPT-5-Nano; GPT-5.1; Gemini-2.5-Pro; Gemini-3-Pro-Preview; Grok-4-1-Fast-Non-Reasoning; Grok-4-1-Fast-Reasoning; Grok-4-Fast-Non-Reasoning; Grok-4-Fast-Reasoning; Kimi-K2-Thinking; Qwen3-235B-A22B-Thinking |
| LLM | Reference | Open weight? | Comparison groups ( ) | Comparison groups ( ) |
|---|---|---|---|---|
| GPT-3.5-Turbo | OpenAI ( 2023b ) | No | G3 | N/A |
| GPT-4 | OpenAI ( 2023a ) | No | G3 | N/A |
| GPT-4-Turbo | OpenAI ( 2023c ) | No | G2, G3, G13 | G3, G4 |
| GPT-4o | OpenAI ( 2024 ) | No | G2, G3, G6, G8, G13 | G1, G2, G3, G4 |
| O3-Mini | OpenAI ( 2025g ) | No | G6, G8, G16 | G1 |
| GPT-4.5-Preview | OpenAI ( 2025b ) | No | G16 | N/A |
| Groups | Eligible pairs | ||||
| Aggregation rule | Match or improve benchmark | Within of benchmark | Match or improve benchmark | Within of benchmark | Improve on both members |
| Learned linear pooling | 8/9 (88.89%) | 9/9 (100.00%) | 65/97 (67.01%) | 85/97 (87.63%) | 97/97 (100.00%) |
| Learned log-odds pooling | 5/9 (55.56%) | 6/9 (66.67%) | 15/97 (15.46%) | 30/97 (30.93%) | 97/97 (100.00%) |
| Simple mean (AM) | 4/9 (44.44%) | 5/9 (55.56%) | 12/97 (12.37%) | 18/97 (18.56%) | 71/97 (73.20%) |
| Harmonic mean (HM) | 3/9 (33.33%) | 5/9 (55.56%) | 4/97 (4.12%) | 12/97 (12.37%) | 42/97 (43.30%) |
| Log-odds mean (GM) | 3/9 (33.33%) | 5/9 (55.56%) | 7/97 (7.22%) | 14/97 (14.43%) | 50/97 (51.55%) |
| Group | Size | Group Benchmark | Brier (95% CI) | Log-odds pooling best pair | Brier (95% CI) | Linear pooling best pair | Brier (95% CI) |
|---|---|---|---|---|---|---|---|
| Overall, threshold 4,000 | |||||||
| 1 | 9 | Llama-3.3-70B-Instruct-Turbo | 0.153 | O3-Mini QwQ-32B-Preview | 0.143 | Claude-3-5-Sonnet QwQ-32B-Preview | 0.137 |
| 2 | 8 | Llama-3.3-70B-Instruct-Turbo | 0.154 | Claude-3-7-Sonnet GPT-4.1 | 0.167 | Claude-3-5-Sonnet GPT-4.1 | 0.147 |
| 3 | 7 | Claude-3-Opus | 0.177 | Claude-3-5-Sonnet Mistral-Large | 0.170 | Claude-3-5-Sonnet Mistral-Large | 0.148 |
| 4 | 6 | Claude-3-Opus | 0.168 | Claude-3-5-Sonnet GPT-4-Turbo | 0.164 | Claude-3-5-Sonnet Llama-3-70b-Chat-Hf | 0.141 |
| 5 | 6 | Magistral-Medium | 0.159 | Claude-3-5-Sonnet GPT-4.1 | 0.153 | Claude-3-5-Sonnet GPT-4.1 | 0.138 |
| Comparison groups | ||
| Calibration rule | Match or improve group benchmark | Match or improve best aggregation pair |
| Per-model Platt scaling | 7/16 (43.75%) | 2/16 (12.50%) |
| Group | Size | Group Benchmark | Brier (95% CI) | Log-odds pooling best pair | Brier (95% CI) | Linear pooling best pair | Brier (95% CI) |
|---|---|---|---|---|---|---|---|
| Overall, threshold 1,000 | |||||||
| 1 | 18 | Gemini-3-Pro-Preview | 0.115 | Claude-3-7-Sonnet GPT-5-Mini | 0.118 | Claude-Opus-4-1 GPT-5-Mini | 0.118 |
| 2 | 16 | O4-Mini | 0.147 | Llama-3.3-70B-Instruct-Turbo Meta-Llama-3.1-405B-Instruct-Turbo | 0.139 | Llama-3.3-70B-Instruct-Turbo Meta-Llama-3.1-405B-Instruct-Turbo | 0.143 |
| 3 | 16 | Gemini-1.5-Pro | 0.171 | Claude-3-5-Sonnet Llama-3-8b-Chat-Hf | 0.170 | Claude-3-5-Sonnet GPT-4o | 0.148 |
| 4 | 16 | GPT-5-Mini | 0.120 | Claude-3-7-Sonnet Grok-4 | 0.118 | Claude-Opus-4-1 Grok-4 | 0.118 |
| 5 | 16 | Gemini-3-Pro-Preview | 0.125 | DeepSeek-V3.1 GPT-5-Mini | 0.126 | Claude-Opus-4-1 GPT-5-Mini | 0.126 |
| Lower input price | Open weights | |||
| Aggregation rule | Match or improve benchmark | Within of benchmark | Match or improve benchmark | Within of benchmark |
| Learned linear pooling | 2/16 (12.50%) | 5/16 (31.25%) | 3/10 (30.00%) | 4/10 (40.00%) |
| Learned log-odds pooling | 1/16 (6.25%) | 3/16 (18.75%) | 1/10 (10.00%) | 3/10 (30.00%) |
| BS: match or improve benchmark | ECE: match or improve benchmark | ||||
| Question category | Aggregation rule | Groups | Pairs | Groups | Pairs |
| Politics | Learned linear pooling | 8/12 (66.67%) | 23/103 (22.33%) | 12/12 (100.00%) | 57/103 (55.34%) |
| Learned log-odds pooling | 8/12 (66.67%) | 17/103 (16.50%) | 10/12 (83.33%) | 44/103 (42.72%) | |
| Finance | Learned linear pooling | 9/9 (100.00%) | 235/287 (81.88%) | 8/9 (88.89%) | 281/287 (97.91%) |
| Learned log-odds pooling | 5/9 (55.56%) | 31/287 (10.80%) | 5/9 (55.56%) | 42/287 (14.63%) | |
| Group | Size | Subquestions | Models |
|---|---|---|---|
| Politics, threshold 1,000 | |||
| 1 | 9 | 1,116 | Claude-3-5-Sonnet; Claude-3-7-Sonnet; DeepSeek-R1; DeepSeek-V3; GPT-4o; Llama-3.3-70B-Instruct-Turbo; Mistral-Large; O3-Mini; QwQ-32B-Preview |
| 2 | 8 | 1,035 | Claude-3-5-Sonnet; Claude-3-7-Sonnet; GPT-4.1; GPT-4o; Llama-3.3-70B-Instruct-Turbo; Llama-4-Maverick-17B-128E-Instruct-FP8; Llama-4-Scout-17B-16E-Instruct; Mistral-Large |
| 3 | 7 | 1,337 | Claude-3-5-Sonnet; Claude-3-Haiku; Claude-3-Opus; GPT-4-Turbo; GPT-4o; Mistral-Large; Qwen3-235B-A22B-Fp8-Tput |
| 4 | 6 | 1,129 | Claude-3-5-Sonnet; Claude-3-Haiku; Claude-3-Opus; GPT-4-Turbo; GPT-4o; Llama-3-70b-Chat-Hf |
| 5 | 5 | 1,032 | Claude-3-5-Sonnet; Claude-Sonnet-4; GPT-4.1; Kimi-K2-Instruct; Magistral-Medium |
| Group | Size | Group Benchmark | Brier (95% CI) | Log-odds pooling best pair | Brier (95% CI) | Linear pooling best pair | Brier (95% CI) |
|---|---|---|---|---|---|---|---|
| Politics, threshold 1,000 | |||||||
| 1 | 9 | O3-Mini | 0.093 | Mistral-Large QwQ-32B-Preview | 0.091 | Mistral-Large QwQ-32B-Preview | 0.090 |
| 2 | 8 | Claude-3-5-Sonnet | 0.111 | Claude-3-7-Sonnet GPT-4.1 | 0.101 | GPT-4.1 Mistral-Large | 0.103 |
| 3 | 7 | Claude-3-5-Sonnet | 0.109 | Claude-3-Opus Mistral-Large | 0.105 | Claude-3-Opus Mistral-Large | 0.102 |
| 4 | 6 | Claude-3-5-Sonnet | 0.111 | Claude-3-Opus Llama-3-70b-Chat-Hf | 0.105 | Claude-3-Opus Llama-3-70b-Chat-Hf | 0.104 |
| 5 | 5 | GPT-4.1 | 0.094 | Kimi-K2-Instruct Magistral-Medium | 0.092 | Claude-3-5-Sonnet Magistral-Medium | 0.093 |