plan: add §10 — aggregator + paid-model gaps, and the one root cause behind both
Answers "what makes this the top product, not just a finished one."
THE REFRAME: the aggregator gap and the model gap are the SAME gap in two places.
Our "market" is often ONE book — MLB props are 73% single-book, and
proplineAdapter sends only {apiKey, markets} with NO regions/bookmakers param
(:152), so we take PropLine's default response. That single fact causes four
problems we had been treating as unrelated: no line shopping (the category's #1
free hook), a fair_prob_lock that is a de-vigged single soft book rather than a
consensus (the bent ruler the model is judged against), weak CLV (cannot measure
beat-the-close against one book), and no steam/disagreement detection (needs >=2
books to exist).
So the highest-leverage unblocked action in the whole plan is a cheap API test:
does PropLine return more books with a regions/bookmakers param on our tier? One
request, and if it works it upgrades the free product, the model's denominator and
the CLV instrument simultaneously.
Aggregator gaps catalogued: book breadth, true consensus, historical odds archive
(started — closing_captures 844k rows, lock_lines new, but in-grade history capped
at 24 points, so no full open->close series), market breadth (11 live vs the
category's 50+), ingested alt-line ladders, injury/lineup wire, player news.
Paid-model gaps catalogued: distribution instead of a point (distribution.js
already computes survival probabilities and rungs but is proj-v1.1, ledger-only
and lost to the champion); opportunity/playing-time projected FIRST with its own
uncertainty (the single biggest available modelling gain); per-stat models instead
of one additive index; matchup granularity that actually reaches the grade;
applied calibration; a backtest harness (blocked by the archive gap — you cannot
backtest a price you never stored); CLV as north star.
THE PATTERN: almost every model capability is ALREADY BUILT AND DISCONNECTED.
VYNDR does not have a building problem, it has a connection-and-proof problem plus
one genuine ingestion gap that starves both halves. The expensive part is largely
done, but no new feature fixes it.
Ordering principle recorded: get MLB genuinely good BEFORE replicating across six
sports — a copied-six-times thin model is six times the maintenance for the same
absent edge.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
@@ -241,3 +241,104 @@ at adequate n*, on one sport, with a projection whose best layers aren't connect
|
||||
accrued data that we cannot rush** — and the discipline to report that verdict
|
||||
honestly if it says the edge isn't there. The plan above builds the machine. Only
|
||||
time and honest measurement decide whether the machine is right.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# 10. TO BE A REAL AGGREGATOR *AND* A MODEL PEOPLE PAY FOR
|
||||
|
||||
*Kev's question: what makes this the top product, not just a finished one. The
|
||||
answer that matters most: **the aggregator gap and the model gap are the SAME gap
|
||||
in two places.** Fix the data breadth and both halves improve at once.*
|
||||
|
||||
## 10.1 The one finding that reframes everything
|
||||
|
||||
**Our "market" is often ONE book.** MLB props are **73% single-book** (2.18 audit).
|
||||
And `proplineAdapter` sends only `{ apiKey, markets }` — **no `regions`, no
|
||||
`bookmakers` param** (`:152`). We take PropLine's *default* response.
|
||||
|
||||
That single fact causes four separate problems we have been treating as unrelated:
|
||||
1. **No line shopping** — the #1 free-tier hook in this category needs many books.
|
||||
2. **`fair_prob_lock` is a de-vigged SINGLE SOFT BOOK**, not a consensus. That is
|
||||
the ruler the model is judged against — a bent one. (Flagged as T1; never run.)
|
||||
3. **CLV is weak** — you cannot measure "beat the close" against one book's close.
|
||||
4. **No steam/disagreement detection** — needs ≥2 books to even exist.
|
||||
|
||||
**So the highest-leverage unblocked action in the whole plan is a cheap API test:
|
||||
does PropLine return more books with a `regions`/`bookmakers` param on our tier?**
|
||||
It is one request. If yes, it upgrades the free product, the model's denominator,
|
||||
and the CLV instrument simultaneously.
|
||||
|
||||
## 10.2 What a real DATA AGGREGATOR has that we don't
|
||||
|
||||
| capability | ours | gap |
|
||||
|---|---|---|
|
||||
| **Book breadth** | 5 MLB / 2 WNBA, 73% single-book | the category runs 10–20. **Root gap (10.1)** |
|
||||
| **True consensus / no-vig line** | single-book de-vig | needs breadth first |
|
||||
| **Historical odds archive** | **STARTED** — `closing_captures` 844k rows, `lock_lines` (033) new, in-grade history capped at **24 points** | no full open→close series per prop. This is what makes CLV and backtesting real |
|
||||
| **Market breadth** | 11 live markets | the category ships 50+ (alt lines, combos, innings, quarters) |
|
||||
| **Alt-line ladders from books** | we *compute* a ladder; we don't *ingest* the books' | users shop rungs |
|
||||
| **Injury / lineup wire** | partial (`depthChart`, confirmed-vs-projected) | no real-time news wire |
|
||||
| **Player news** | `NewsWire` on Explore | not beat-level, not per-prop |
|
||||
|
||||
**None of this is model work. It's ingestion.** And it is the half competitors
|
||||
compete on hardest, because it is visible to a free user in five seconds.
|
||||
|
||||
## 10.3 What a prediction model people PAY for has that we don't
|
||||
|
||||
1. **A distribution, not a point.** We project a point (l5/l20 average) and take
|
||||
an empirical `P(over)`. Paid-tier models simulate a **full distribution per
|
||||
stat** (negative-binomial / Poisson / MC). **We already have this** —
|
||||
`projection/distribution.js` computes real survival probabilities and a rung
|
||||
ladder — but it is **proj-v1.1, ledger-only, and it lost to the champion.** The
|
||||
asset exists; it is unconnected and unproven.
|
||||
2. **Opportunity modelled FIRST.** In props, playing time is the dominant driver —
|
||||
plate appearances, snaps, minutes, batting-order slot. We carry `ab_per_game`
|
||||
and minutes as *features*, not as a **projected opportunity** with its own
|
||||
uncertainty. This is the single biggest modelling upgrade available.
|
||||
3. **Per-stat models.** Hits, strikeouts and total bases have different shapes.
|
||||
One additive factor index across all of them is why the ladder is meaningless.
|
||||
4. **Matchup granularity that actually reaches the grade.** Arsenal, handedness,
|
||||
park, weather, platoon — **all built, all challenger-only, none feed the grade.**
|
||||
5. **Calibrated probabilities with honest intervals.** Measured (isotonic
|
||||
qualifies on MLB) — **not applied.**
|
||||
6. **A backtest harness on real historical odds.** Blocked by 10.2's archive gap:
|
||||
you cannot backtest a price you never stored.
|
||||
7. **CLV as the north-star metric**, published honestly. Instrument built,
|
||||
guard-blocked, and weak until book breadth lands.
|
||||
|
||||
## 10.4 The uncomfortable pattern
|
||||
|
||||
**Almost every model capability above is ALREADY BUILT and DISCONNECTED**:
|
||||
similarity, Bayesian, archetypes, park/weather/platoon, the distribution ladder,
|
||||
calibration. VYNDR does not have a *building* problem. It has a **connection and
|
||||
proof** problem — plus one genuine ingestion gap (book breadth) that starves both
|
||||
halves at once.
|
||||
|
||||
That is good news: the expensive part is largely done. But it also means **no new
|
||||
feature fixes this.** Connecting the layers and proving them on held-out data is
|
||||
the work.
|
||||
|
||||
## 10.5 If I had to order it for "top product"
|
||||
|
||||
1. **Book breadth test + consensus fair line** (10.1) — one API call to find out;
|
||||
upgrades aggregator, model denominator and CLV together.
|
||||
2. **Opportunity projection** (10.3.2) — the biggest genuine modelling gain.
|
||||
3. **Per-stat distributions** — connect `distribution.js`, prove per stat.
|
||||
4. **Connect the built layers** (Phase 1) — each proven on held-out or left off.
|
||||
5. **Full odds archive** — store every book's open→close; unlocks backtesting.
|
||||
6. **Market breadth** — 11 → 50+ markets is mostly ingestion + the 4-layer wiring.
|
||||
7. **Then** the sports rollout, on a template that is actually worth replicating.
|
||||
|
||||
**The ordering principle:** do not replicate a thin model across six sports. Get
|
||||
MLB genuinely good first — a copied-six-times thin model is six times the
|
||||
maintenance for the same absent edge.
|
||||
|
||||
## 10.6 The honest caveat on "top product"
|
||||
|
||||
The category's leaders are judged on one number: **do their picks beat the closing
|
||||
line, at scale, published.** We cannot claim that yet — not because the product is
|
||||
unfinished, but because **we have not measured it at adequate n on a market we can
|
||||
trust.** Book breadth + the odds archive + accrued settlements are what make that
|
||||
claim *possible*. Everything in §10 is in service of being able to make it — or of
|
||||
being able to say honestly that we can't.
|
||||
|
||||
Reference in New Issue
Block a user