report: full-output grade mapping spec + collapse cost measured
Report-only. Nothing built, reconnected, or promoted. Premise corrected again: the three-layer engine is BUILT but NOT WIRED and NOT DEPLOYED (0 python refs in every grade-path file, 0 python in Dockerfile; there is no engine1Adapter). So no posterior/CI/similarity prior exists to inventory or diff. Measured against the collapse that actually exists instead. THREE collapses, not one: (A) estimateProbability's components discarded at analyzeViaEngine1:521-524; (B) THE SEVERE ONE - p_win never reaches the grade at all (engine1.js has zero probability references), so the probability is excluded from grading rather than collapsed into it; (C) grade_thresholds.json (probability->grade) read backwards to manufacture confidence. Market-efficiency scaling is never computed - a gap, not a collapse. MEASURED on 354 settled rows carrying the served letter and the locked pre-game p_win (forward, not lookahead). Grade->outcome point-biserial r: champion letter 0.0050 (p~0.93, null) vs probability letter 0.1313 (p~0.013). Per sport: MLB champ 0.0686 n.s. vs prob 0.2356 (p~0.0004); WNBA champ -0.0986 vs prob -0.1258 - BOTH INVERSE. The served letter is inverted between its only two populated tiers (B 52.4% n=168 vs C 56.9% n=174). Verdict: costly on MLB, and un-collapsing does NOT help WNBA -> the challenger must be MLB-FIRST. Five falsifiable mapping rules specced, incl. R2 (uncertainty grades down) stated explicitly and droppable if it fails. Hard requirement on the next order: persist per-row n, SE and pre-adjustment p, or R2/R4 can never be adjudicated (not stored today). Re-adjudication list flagged incl. proj-v1.1's NOT PROVEN verdict (judged against the collapsed champion, so not final) and ROI-by-grade (with B/C inverted, the MLB-C +4.57% segment is likely an artifact of a meaningless letter). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QJs13VsyiSKYQP6rj3NNmc
This commit is contained in:
@@ -463,6 +463,61 @@
|
||||
> `sports.{sport}` and reads ACCRUING until its own n≥20 clears; never `overall`, which would silently
|
||||
> borrow MLB/WNBA credibility.
|
||||
|
||||
> ## 🧪 FULL-OUTPUT GRADE MAPPING + COLLAPSE COST 2026-07-30 (report-only) → **`specs/full-output-grade-mapping.md`**
|
||||
> Track-B 1 of 3. Nothing built, reconnected, or promoted. **PREMISE CORRECTED AGAIN: the three-layer
|
||||
> engine is BUILT but NOT WIRED and NOT DEPLOYED** (re-verified independently — 0 python refs in every
|
||||
> grade-path file, 0 python lines in `Dockerfile`; there is no `engine1Adapter`, the real files are
|
||||
> `utils/gradeAdapter.js` + `analyzeViaEngine1.js`). So no posterior/CI/similarity prior is produced
|
||||
> today; Phase 1 could not inventory a live three-layer output and Phase 3 could not diff against one.
|
||||
> Phase 3 was run instead against the collapse that ACTUALLY exists — which is **worse** than the
|
||||
> premise describes, and measurable now.
|
||||
> **THREE COLLAPSES (VERIFIED), not one.** (A) `estimateProbability` returns
|
||||
> `{p_over,p_under,components{base,recency,weighted,opp_adjustment,home_adjustment,consistency_adjustment,cv}}`
|
||||
> and `analyzeViaEngine1:521-524` keeps ONLY the scalar — `est.components` is attached to nothing.
|
||||
> **(B) THE SEVERE ONE: `p_win` never reaches the grade at all** — the letter is `engine1`'s factor
|
||||
> index and `engine1.js` has ZERO probability references, so the probability isn't collapsed INTO the
|
||||
> grade, it's excluded FROM it. (C) `grade_thresholds.json` (PROBABILITY→GRADE) is read BACKWARDS to
|
||||
> manufacture `confidence`. **0.2: market-efficiency scaling is NEVER COMPUTED** — a gap, not a
|
||||
> second collapse.
|
||||
> **🔴 PHASE 3 — THE COLLAPSE IS COSTLY ON MLB, AND UN-COLLAPSING DOES NOT HELP WNBA.** 354 settled
|
||||
> rows carrying both the served letter and the locked pre-game `p_win` (forward test, NOT lookahead).
|
||||
> Grade→outcome point-biserial r: **champion letter 0.0050 (p≈0.93, NULL)** vs **probability letter
|
||||
> 0.1313 (p≈0.013)**. Per sport: **MLB champ 0.0686 n.s. vs prob 0.2356 (p≈0.0004, n=224)** —
|
||||
> **WNBA champ −0.0986 vs prob −0.1258 (n=130, BOTH INVERSE)**. The pooled number is MLB's signal
|
||||
> diluted by WNBA's inversion; this independently corroborates the 07-26 calibration finding that the
|
||||
> champion does not discriminate on WNBA. **→ the full-output challenger must be MLB-FIRST; shipping
|
||||
> it for WNBA on the pooled number would ship an anti-predictive grade.**
|
||||
> **THE SERVED LETTER IS INVERTED BETWEEN ITS ONLY TWO POPULATED TIERS: B hits 52.4% (n=168), C hits
|
||||
> 56.9% (n=174).** A user reading B as better than C is reading noise. Probability letters spread
|
||||
> 30.8% (D) → 70.0% (B+), use 10-11 of 11 letters vs the champion's 3-4, and split ROI **−1.42%
|
||||
> (A-family, n=78) vs −26.62% (C-/D/F, n=51) — a 25-point spread**. Banding is NOT the lossy part
|
||||
> (0.1313 banded vs 0.1349 raw).
|
||||
> **PHASE 2 — five EXPLICIT, FALSIFIABLE rules specced** (none assumed to be an improvement):
|
||||
> R1 posterior→letter via the table read FORWARD · **R2 uncertainty grades DOWN, stated not smuggled:
|
||||
> `p_adj = 0.5 + (p−0.5)·(1 − k·min(1, 1.96·SE/W0))`, k=1, W0=0.15 — falsifiable: rows R2 moves down
|
||||
> must hit closer to their NEW band or R2 is WRONG and gets dropped** · R3 archetype adjusts the
|
||||
> PROJECTION never the letter (drop if MAE doesn't improve) · R4 efficiency scales the THRESHOLD per
|
||||
> sport, `E_sport` FIT from each sport's own record — success = equal hit rate per letter ACROSS
|
||||
> sports · R5 abstain below min instances, never a default C.
|
||||
> **🔴 HARD REQUIREMENT ON THE NEXT ORDER: R2/R3/R4 are UNMEASURABLE today — per-row instance count
|
||||
> `n` is NOT stored on the ledger.** The challenger build MUST emit and persist `n`, `SE`, and the
|
||||
> pre-adjustment `p`, or the CI-width and efficiency rules can never be adjudicated.
|
||||
> **3.7 CONSUMERS:** nothing consumes a distribution, so a distribution-based grade is safe IF it
|
||||
> still emits a letter; what changes is the letter DISTRIBUTION — `tierGating`, byGrade buckets
|
||||
> (AccuracyBadge/ModelRecord/TierRecord), `outcomeService.gradeBucket`, `isAB` in hero +
|
||||
> deskShowcase (the hero pool grows), `GRADE_RANK`/`selectTopGrades`, `capper_minimum_grade:'A-'`,
|
||||
> newsletter templates. **A-GRADES: probability grading emits 53 A-family rows where the champion
|
||||
> emitted 2. This is NOT the forbidden "rescale to mint A's"** — it is a measurably more informative
|
||||
> basis (new information), and the A's earn it (A 65.5%, A+ 62.5%, B+ 70.0% vs D 30.8%) — **but A-
|
||||
> hits 44.0%, breaking top-tier monotonicity, so the A-RATED marketing hold STAYS until the
|
||||
> challenger's own forward record shows a monotone top tier.**
|
||||
> **PHASE 4 RE-ADJUDICATION LIST (flagged, not re-run):** champion p_win→CLV 0.375 · the over-side
|
||||
> skew audit · **proj-v1.1's "NOT PROVEN" — it was judged against the COLLAPSED champion, so its
|
||||
> death is NOT final** · the C1 takeable-floor derivation · the 07-26 calibration curves (its WNBA
|
||||
> finding is corroborated and looks robust; MLB needs re-running) · **ROI-by-grade — with B and C
|
||||
> inverted, "MLB-C is the +4.57% profitable segment" is very likely an artifact of a meaningless
|
||||
> letter, not a real segment** · `confidence` on every historical row (never use it as a weight).
|
||||
|
||||
- **Redirect EXISTS + WIRED:** `closingCapture.buildCaptureRows`→`closing_captures` (append-only,
|
||||
provenance: captured_at/book/line_type/both-prices/missed_reason) via `intradayRefreshService:221`
|
||||
+ internal endpoint; `ledgerService.attachClosingProb`→`closing_prob` (de-vigs both raw sides,
|
||||
|
||||
Reference in New Issue
Block a user