yarrow-forecast / README.md
gashaker's picture
Add market-model comparison to the model card
8ddcd6f verified
|
Raw History Blame Contribute Delete
4.26 kB
---
language:
- en
license: cc-by-nc-4.0
pipeline_tag: text-generation
tags:
- forecasting
- calibration
- election-forecasting
- decision-model
---
# yarrow-forecast
**yarrow-forecast** forecasts U.S. party primary and nomination outcomes. Given a question, its resolution criteria, and the evidence available as of a stated date, one forward pass returns a calibrated probability in [0, 1].
The model does not write an answer and does not abstain. It reads the probability from the next-token distribution. There is nothing to parse. The weights run locally: 27B parameters, 256K context, no hosted API in the loop.
## Why use it
**The marginal cost is about zero.** The weights sit on your own GPU. A forward pass does not incur a per-call fee.
**One forward pass, no generated text.** Measured batch inference is 0.12–1.6 seconds per question. There is no sampling and no token-by-token decode. The probability is read from the next-token distribution.
**No third-party service.** Scoring does not depend on an outside API, a proxy, or a rate limit. The model answered every item in the evaluation.
**The weights can be trained further.** A LoRA update followed by a merge left yes/no calibration error at 0.001–0.003. On 15 other checked items, the answers were unchanged after the merge.
## Model details
| | |
|---|---|
| **Model** | yarrow-forecast |
| **Parameters** | 27B |
| **Context length** | 256K tokens |
| **Task** | P(the event resolves YES) |
| **Validated domain** | U.S. party primary and nomination elections |
| **Output** | One probability in [0, 1] |
| **Inference** | One forward pass, deterministic, 0% abstention |
| **License** | [CC BY-NC-4.0](https://creativecommons.org/licenses/by-nc/4.0/) |
### Input and output
| | |
|---|---|
| **Question** | The event to forecast |
| **Resolution criteria** | How a YES or NO outcome is decided |
| **Evidence** | News, polls, and other material available at prediction time |
| **As-of date** | The date the forecast is conditioned on |
| **Output** | `p` ∈ [0, 1] |
## Usage
`forecast.py` loads the weights once. Each call returns only the calibrated probability.
```python
from forecast import Forecaster
model = Forecaster("YarrowLab/yarrow-forecast")
p = model.forecast(
title="Will candidate X win the nomination?",
rules="Resolves YES if candidate X is declared the nominee.",
evidence="[E1] ...",
as_of="2026-09-05",
)
print(p) # 0.71
```
```python
ps = model.forecast_batch([
{"title": "...", "rules": "...", "evidence": "...", "as_of": "2026-09-05"},
{"title": "...", "rules": "...", "evidence": "...", "as_of": "2026-09-05"},
])
```
## Evaluation
Validated domain: U.S. party primary and nomination questions with settled outcomes. Same questions, same evidence, same outcomes. Each model answered in its own setup. yarrow-forecast answered all 150.
| Model | Brier ↓ | AUC ↑ | Directional accuracy | Answered |
|---|---:|---:|---:|---:|
| **yarrow-forecast** | **0.175** | **0.81** | **76.0%** | **150** |
| Claude Sonnet 4.6 | 0.171 | 0.84 | 70.1% | 117 |
| GPT-5.5 | 0.185 | 0.87 | 65.5% | 148 |
| Historical base rate | 0.239 | 0.51 | 62.7% | 150 |
| GPT-5.4-mini | 0.242 | 0.51 | 62.4% | 149 |
| OpenForecaster-8B | 0.265 | 0.72 | 61.3% | 93 |
Directional accuracy on the full set is **76.0%**, above Claude Sonnet 4.6 (70.1%) and GPT-5.5 (65.5%). Brier is **0.175**, below GPT-5.5 (0.185), GPT-5.4-mini (0.242), and OpenForecaster-8B (0.265), and about 24% lower than the historical base rate (0.239). Across five out-of-sample fold splits the Brier stays in **0.175–0.185** and directional accuracy in **72.7–76.0%**. Abstention is 0%.
Claude Sonnet 4.6 scores 0.171 Brier on the 117 questions it returned. OpenForecaster-8B's 93 questions are the ones it returned. Unanswered items were left unanswered.
A later set of 166 settled questions from the same category scores **0.1653** Brier (95% interval 0.136–0.200, clustered by election night).
With the question and the resolution rule alone, AUC is about 0.51. With the evidence supplied, AUC is **0.808**.
## License
[CC BY-NC-4.0](https://creativecommons.org/licenses/by-nc/4.0/). Attribution is required. Commercial use is not permitted.