← Dashboard

Methodology

Objective

Predict the probability distribution of the US headline CPI YoY print (NSA, rounded to 0.1pp — the number prediction markets resolve on) better than the market prices it. The market price is the consensus; matching it is worth exactly nothing. Everything on this site is scored against that bar.

Kill criterion: if the model's log-loss on realized prints does not beat the market's over a trailing nine live cycles at T−7, there is no edge and the project should be killed or rethought. The scoreboard tracks this continuously.

Model — horizon-calibrated nowcast (hcal)

The point estimate is the Cleveland Fed daily inflation nowcast. The model's contribution is honesty about that estimate's error as a function of time-to-release, fitted from ~150 resolved months of daily nowcast vintages back to 2013:

h      = days until BLS release
μ      = nowcast(today) − bias(h)     # trailing 24-month mean error
σ      = rmse(h)                      # trailing 24-month RMSE, floor 0.08pp
df, s  = Student-t MLE fit on standardized vintage errors (point-in-time)
p_t    = ∫ t(df, μ, s·σ) over bucket, normalized
p_pub  = λ·p_t + (1−λ)·p_market       # λ fit on resolved prints, [0.2, 0.8]

There is no regression, no hand-tuned constant, and no conviction heuristic. The uncertainty claimed at T−12 is the error the nowcast actually made at T−12 over the trailing window; the window tracks the volatility regime (2021–23 errors were ~2.5× the 2013–19 ones), and the floor is the best T−7 RMSE the nowcast ever achieved in its calmest regime — we never claim more precision than the source has ever had. A useful empirical fact from the fit: the nowcast's error barely improves inside the final three weeks (RMSE ~0.10–0.11 from T−21 to T−1), so the model's information advantage, if any, does not grow by waiting.

v2 (after the June 2026 print, a +0.39pp nowcast miss during the Iran-war energy break): the error distribution is a Student-t, not a normal — standardized vintage errors show ~4% of months beyond 3σ vs the Gaussian's 0.27% — and the published distribution blends the model with the market's own prices at a weight λ fit point-in-time on resolved prints. Blending bounds the damage of any single model blow-up at ln(1/(1−λ)) relative to the market while preserving the model's information where it has any. An intramonth-gasoline correction was tested for the same release and rejected: over 154 months the nowcast's error is essentially uncorrelated with the month's gasoline move (r ≈ −0.15) — the Cleveland Fed model normally absorbs energy; June was an idiosyncratic failure, which is precisely what fat tails and the blend are for.

An earlier version (l1-ridge-v0.1) fit a ridge regression on top of the nowcast; its out-of-sample skill was negative and it was removed. If a future feature (component decomposition, energy pass-through, trailing-rent leads) can't beat hcal on the scoreboard, it doesn't ship either.

Scoring — model vs market, point-in-time

Every resolved market is scored at fixed horizons (T−7, T−2, T−1): the model's probability on the bucket that actually printed vs the market's normalized price on that bucket at the same moment, as log-loss and Brier score. Retro months are reconstructed point-in-time: only the nowcast vintage visible that day, and a horizon curve fitted only on months already resolved by then.

Log-loss against the market accrues evidence every print. A trade-level record (win/lose on monthly binary events) needs years to distinguish skill from luck — twelve prints a year, most correctly untraded. Distribution scoring is the primary metric; paper P&L is color.

Trading — decide-and-disclose

There is no approval step and no conviction gate. Daily, for each active market, the paper trader computes the fee-adjusted edge per bucket and either enters or explicitly declines — and logs the full judgment (inputs, skipped buckets with reasons, sizing) either way. The dashboard shows today's decision; the record is override-after-the-fact, not ask-before-acting.

admit bucket if:
  odds fresh (≤2d) and volume ≥ $1k
  entry price (ask, fallback mid) in [2¢, 95¢]
  edge = p_model × 0.98 − entry ≥ 5pp
size: proportional half-Kelly, total ≤ 12.5% of bankroll
window: T−14 to T−3 (inside T−3 the market is sharpest)

The 2¢ floor exists because sub-2¢ buckets are lottery tickets whose spread and fee eat the theoretical edge, and a record built on them is one lucky 30:1 fill wearing a track record. Positions are paper only, held to resolution, settled at 98¢ per winning share (Polymarket's 2% fee on winnings).

Pre-print brief

Before each release the pipeline writes a one-page brief: the call, the full model-vs-market distribution, what each bucket implies for the month-over-month print given base effects, the nowcast trajectory, the scoreboard prior, the decision taken, and the freshness of every input. The point is an evidence chain — any headline number on this site can be traced to the raw series that produced it, and disagreements with the market are stated as falsifiable real-economy claims before the print, not after.

Assumptions & limitations

  • The realized-YoY reconciliation uses current revised BLS values, which can differ from the first print by a rounding step; markets resolve on the first print. First-print vintages (ALFRED) are a known future fix.
  • The Student-t tail fit and blend weight are estimated on ~150 months of vintages and ~20 odds-covered prints respectively; the blend weight in particular is a noisy estimate and is bounded to [0.2, 0.8] for that reason.
  • Historical odds are daily Dune snapshots (mid only); backtest entries assume fills at mid, which flatters the backtest by roughly the spread.
  • The scoreboard's retro months include wide companion markets (e.g. "≥2.8%") where both sides score near-perfectly; they dilute the comparison symmetrically but shrink the apparent gap.
  • Rent indices (Zillow, ApartmentList) and the Manheim series are ingested but currently unused by the model; they are candidate features gated on beating hcal on the scoreboard.