Two models, each matched to its job
Qwen3-235B open-weight, via DeepInfra
- Task
- High volume, narrow job: extract statements from each article and code them to the codebook, returned as schema-enforced JSON.
- Why
- The task is tightly constrained, so a large open-weight model does it at a fraction of frontier prices. It answers with sentence numbers, so every quote is verbatim.
Claude Sonnet Anthropic, batch API
- Task
- A few dozen calls a year that need judgment: one per period (44 for Costco's year), naming the change in expectations behind its move, and one per earnings release, which only extracts the one-time items its press releases name. Outputs are structured and validated in code.
- Why
- This is where model quality matters most. Running the calls as one batch job lowers the price.
A cheap model where volume is high and the task is constrained, a stronger one where volume is low and judgment matters. Each paid step shows its cost estimate and asks before spending. The extraction model is a setting, so Sonnet can run step 1 too.
Proof of concept: Costco in 2024
| Bridge of the change | pp |
|---|---|
| Marketreturn explained by the S&P 500 and RSPS, the equal-weight consumer-staples ETF | +3.8 |
| Company-specific, stand-out periodsthe 10 divergent or outlier periods | +0.5 |
| Company-specific, quiet periodsthe 34 market-driven or within-noise periods | +3.7 |
| EPS updatesnew quarter replacing the old at each release | −3.5 |
| 10-year Treasury | +2.2 |
| Beta | +0.6 |
| Total | +7.3 |
The re-rating came from the market and ordinary drift: the 10 periods that stand out net to +0.5pp. Each release raised trailing EPS, which worked against the growth share; $0.97 of the $2.35 rise was one-time items the press releases name.
Why the output can be trusted
- A structured codebook, not free-form taggingCodes follow Damodaran's value drivers, with definitions and routing rules, enforced by a JSON schema. Stock-pick pages and bare price-move or rating statements are excluded.
- Point in timeEPS uses only filings available at each date, stepped at the 8-K acceptance time. Beta uses only prices known at each month end. Each period's explanation reads only its own news, from the day before to the day after.
- Every claim has a sourceQuotes are verbatim by construction. Each cause carries a statement ID that traces to its article and outlet, and each release cites its press releases, linked to SEC EDGAR.
- A placebo check, built inThe news is company-specific, so a cause found where the market or ordinary noise explains the move is suspect. In Costco's year the model found one in 1 of 34 such periods, against 4 of the 8 that stand out. Given fake moves on 12 quiet days, it found a medium-confidence cause for 1.
What better data would add
The prototype runs on free sources: three outlets on Media Cloud whose full text can be fetched without a paywall, selected by a search term in the headline. Nothing downstream depends on the source. A licensed news feed would plug into step 1 unchanged.
We expect it to widen coverage and cut screening noise. In the Costco run, 36 of 44 periods have no cause found and one more had no news, and none of the six stand-out rises has a cause in the news. Part of that is drift that news may never explain, which is why estimate revisions and style factors are also on the roadmap.
| Today (free) | Licensed feed | |
|---|---|---|
| Outlets | CNBC, Yahoo Finance, Fortune | Broad press plus wire services |
| Selection | Company name in the headline | Entity-tagged articles, sector news |
| Primary sources | Press releases only | Earnings-call transcripts |
| Noise | 864 articles → 484 statements | Fewer listicles and duplicates |