Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ notebooks stay short and readable.
| [`notebooks/01_historical_archive.ipynb`](notebooks/01_historical_archive.ipynb) | Download, cache, and load the historical archive, then reproduce the baseline scoring regressions (Koijen & Levy WP, Table 3) with the competition's exact scoring transform |
| [`notebooks/02_earnings_call_facts.ipynb`](notebooks/02_earnings_call_facts.ipynb) | Where each event's ten-fact `disclosure` comes from — the exact prompt, model config, and parsing behind it, and how extraction failures surface |
| [`notebooks/03_earnings_previews.ipynb`](notebooks/03_earnings_previews.ipynb) | The **earnings preview** — the result of running [Anthropic's Earnings Preview Skill](https://github.com/anthropics/financial-services/blob/main/plugins/agent-plugins/earnings-reviewer/skills/earnings-preview/SKILL.md) prior to each earnings announcement. Starting Q4 2026, events carry this as a second disclosure item. The notebook covers how it is built, what it looks like, and how it pairs with the facts |
| [`notebooks/04_options_market_data.ipynb`](notebooks/04_options_market_data.ipynb) | The **option-implied statistics** — what the options market priced for each release, why the scorer is blind to a uniform rescaling of predictions, and how the implied move works as an *event-specific* scale for a prediction. Reproduces the effect on the two reference baselines with the exact scoring transform |

### The option-implied statistics

Expand All @@ -34,11 +35,11 @@ stats = option_implied_stats_from_disclosure(record) # dict, or None wh
move = statistic_value(stats, "implied_absolute_earnings_move") # float, or None unless status is "ok"
```

`examples.option_stats` documents what the three numbers mean and when they are missing. There is no notebook for it yet, and the bundled 2026Q3 sample predates the item, so run against the live archive to see it.
`examples.option_stats` documents what the three numbers mean and when they are missing, and `scale_by_implied_move` turns the move into an event-specific rescaling of a submission's predictions. Notebook 04 walks through both; its regression sections need the live archive (the bundled sample carries the item on its six events but no baseline predictions).

If you parse bundles with your own typed model, make sure an item's `content` accepts any JSON type. A model that allows only strings and lists of strings rejects the whole bundle, facts included, the first time it meets this item. `examples.schemas.DisclosureItem` had exactly that annotation until this release.

All four run top-to-bottom. With an API key they hit the live API; **without one they
All five run top-to-bottom. With an API key they hit the live API; **without one they
fall back to a small bundled sample** (`data/sample/`), so you can run them — and CI
can execute them — with no credentials.

Expand Down
14 changes: 9 additions & 5 deletions data/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ Just enough data for the notebooks to run top-to-bottom **without an API key**
lines may include additional fields. Treat the API as the source of truth.
- `archive_EARNINGS_RELEASE_2026Q3.jsonl.gz` — six **real** archive lines (NVDA,
WMT, HD, CRM, AVGO, ORCL), copied verbatim from the live 2026Q3 file on
2026-09-24. Each carries both disclosure items — the ten facts and the
agent-written **earnings preview** — plus the realized `event_returns`,
2026-09-24. Each carries all three disclosure items — the ten facts, the
agent-written **earnings preview**, and the **option-implied statistics** (the
last spliced in from the same events' archive lines on 2026-09-29, ahead of its
dissemination on the public archive) — plus the realized `event_returns`,
`metrics`, and `knowledge_cutoff` the archive adds once an event is scored, so
`notebooks/03_earnings_previews.ipynb` and the preview section of notebook 01
run offline on genuine content. 2026Q3 was unsealed when this was pulled, so
fields may later change upstream; the API remains the source of truth.
`notebooks/03_earnings_previews.ipynb`, `notebooks/04_options_market_data.ipynb`
and the preview section of notebook 01 run offline on genuine content. The
lines' `baseline_predictions` are empty, so notebook 04's regression sections
skip in sample mode. 2026Q3 was unsealed when this was pulled, so fields may
later change upstream; the API remains the source of truth.
- `transcript_sample.json` — a **synthetic** earnings-call transcript for a
fictional company (Northwind Logistics). Real transcripts are licensed and are
not distributed with this repo; this one exists so
Expand Down
Binary file modified data/sample/archive_EARNINGS_RELEASE_2026Q3.jsonl.gz
Binary file not shown.
2 changes: 1 addition & 1 deletion notebooks/01_historical_archive.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@
"2. Convert that reaction into a percentile rank in `[0, 1]` **across the quarter's cross-section** of scored event outcomes \u2014 a rank against all the period's events, not against the asset's own history. That's the target the competition scores; `examples.scoring.percentile_ranks` is the exact transform (see section 6).\n",
"3. Score your model's predicted percentile against it offline, and iterate.\n",
"\n",
"For the ex ante side of each event \u2014 the earnings preview \u2014 see [`03_earnings_previews.ipynb`](03_earnings_previews.ipynb).\n",
"For the ex ante side of each event \u2014 the earnings preview \u2014 see [`03_earnings_previews.ipynb`](03_earnings_previews.ipynb). For what the options market priced for each event, and why only an *event-specific* rescaling can move the score, see [`04_options_market_data.ipynb`](04_options_market_data.ipynb).\n",
"\n",
"When your model is ready, move it into a deployed webhook handler (see the starter repos) \u2014 that's what receives live events and submits predictions. These notebooks deliberately stop short of `POST /predictions`."
]
Expand Down
2 changes: 1 addition & 1 deletion notebooks/03_earnings_previews.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@
"- The preview is **optional** and arrived in 2026Q3. Match on `id` / `kind`, never on position, and build for its absence.\n",
"- It is a **public-sources research note with a fixed brief** \u2014 Anthropic's open `earnings-preview` skill, run by Claude in a sandboxed Claude Code session \u2014 not a model prediction and not a proprietary feed. Its sources and dates are cited inline.\n",
"- Going forward it is assembled **before the CAR1 window opens**; the 2026Q3 archive previews are not guaranteed to be, so treat them as illustrative.\n",
"- The facts (notebook 02) are the ex post disclosure; the preview is the ex ante expectation; `car1` is the reaction. `examples.scoring` turns the last into the percentile target the competition scores."
"- The facts (notebook 02) are the ex post disclosure; the preview is the ex ante expectation; `car1` is the reaction. `examples.scoring` turns the last into the percentile target the competition scores.\n- The third item, the **option-implied statistics**, is the subject of [`04_options_market_data.ipynb`](04_options_market_data.ipynb)."
]
}
],
Expand Down
Loading
Loading