|
Download README.md from YarrowLab/yarrow-forecast: direct link, hf CLI and curl.
- Browser
- Download file 4.26 kB
-
https://huggingface.co/YarrowLab/yarrow-forecast/resolve/main/README.md
- Command line
-
hf download hf://YarrowLab/yarrow-forecast/README.md
-
curl -L -o README.md https://huggingface.co/YarrowLab/yarrow-forecast/resolve/main/README.md
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. | |