This site is a small, growing collection of data-driven models. Each one shares the same discipline: every number traces back to a public filing or data series (no figures pulled from thin air), it runs point-in-time (no hindsight), it updates itself, and it is honest about what it can't see. Two models are live today.
Model 01A point-in-time nowcast of the weekly change in U.S. commercial crude oil inventories — the headline number the EIA publishes in its Weekly Petroleum Status Report (WPSR). The goal is to estimate that figure before the official release, from independent supply, demand, and maritime signals. Negative is a draw (inventories fell); positive is a build.
It's a weekly product, so the page only changes once a week — it's normal for it to look identical between updates.
| Knowledge freeze | Tuesday 9:00 PM ET — nothing after this counts (strictly point-in-time, no lookahead). |
| Publish | Tuesday night — computed and pushed to the site. |
| Target | The week ending the previous Friday — the one EIA is about to report. |
| Official release | Wednesday 10:30 AM ET — the actual number (the scorecard). |
A weighted ensemble; when a model lacks inputs for a week it drops out and the rest reweight:
The interval is part of the product: it starts wide and only narrows as out-of-sample accuracy earns it, never tighter than the noise floor of EIA's own weekly adjustments.
● AIS Signal Coverage: Gap Detected
The target week has little/no vessel coverage, so the tanker signal is degraded that week. Right after continuous collection starts this is expected — a week that ended before collection began has no data. It clears once the forecast targets weeks the collector fully covered.
● PortWatch Integrity: anomaly
Port-call data shows blending anomalies (tanker counts mixing crude with refined products/chemicals). Nominal means the category mix looks clean.
A physical-velocity read on the U.S. economy: is the country building, moving, buying, and borrowing more or less? It deliberately ignores stock prices and earnings-per-share (which buybacks and price hikes distort) and scores volume and credit stress instead. Built as a bias-check against headlines, on a scale of −100 (deep contraction) to +100 (boom).
| Industrial · 30% | Build & move — rail carloads, industrial production, truck tonnage. |
| Consumer · 30% | Real demand — real retail & food-service sales, real personal consumption. |
| Credit · 25% | Can they afford it — credit-card & consumer delinquencies, bank lending standards. |
| Liquidity · 15% | Is the spigot open — real M2, Fed balance sheet, reverse-repo drain. |
Credit and liquidity carry extra weight on purpose, so an easy-money boom can't fully mask consumer stress.
Each metric is scored by magnitude — how far it sits from its own trailing trend (a z-score, clipped to ±2) — not a binary up/down, so a big move counts more than a nudge. Trending levels (rail, M2) are scored on year-over-year growth; rates (delinquencies) on their year-over-year change. Sub-indices renormalize over whatever reported, then combine into the headline score. The divergence between sub-indices (e.g. liquidity hot while the consumer softens) is often more telling than the single number.
| +50 to +100 | Expansion / boom |
| +10 to +49 | Slow growth |
| −10 to +10 | Stagnation / muddle-through |
| below −10 | Contraction |
Machine-readable data: nowcast.json · flows.json · refineries.json · economy.json