Windows tighten faster than the history earns, and coverage dips mid-learning #52

Closed
opened 2026-08-20 16:13:30 -05:00 by null · 0 comments
Owner

Measured by the learning-curve simulation at 93ec5b7.

What is true now. The forecast window promises to contain the actual start 80% of the time (WINDOW_MASS = 0.80). Measured coverage holds for stable users late, but dips to its worst around five cycles of history: 57.5% for a variable user, 65% drifting, 77.5-82.5% stable. The window is a promise, and mid-learning it is broken roughly a third of the time for the users least able to absorb a surprise.

Why. With two to five intervals the weighted MAD and mean-absolute-deviation both underestimate the population spread — small-sample bias, made worse by recency weighting shrinking the effective sample. 80% of a distribution that is too narrow covers well under 80%.

What to do. Inflate the estimate that is biased, not the promise: multiply fromSpread in scaleOf by 1 + EARLY_WIDENING * max(0, EARLY_FULL_HISTORY - n) / EARLY_FULL_HISTORY, starting at 0.5 and 6.0 (x1.33 at two intervals, ramping to x1.0 at six and beyond).

Traps. Do not touch WINDOW_MASS — that is the semantic promise, and moving it changes what the window means rather than making it true. Do not touch MINIMUM_SCALE — that is policy. The ramp reaching exactly 1.0 at six intervals is the safety argument: every six-interval §51 fixture stays bit-identical, and the five-interval stable fixtures land below the scale floor anyway. Tune upward against the harness only until the mid-learning coverage floor passes; stop before a stable user gets high confidence and a tight window (window <= 4 days) or EngineComparisonTest's mean-window ceiling of 8.0 complains.

Verify: LearningCurveTest's coverage assertion for k in 3..6 (red before at 57.5%, green after), with the §51 acceptance suite and EngineComparisonTest unchanged.

Measured by the learning-curve simulation at 93ec5b7. **What is true now.** The forecast window promises to contain the actual start 80% of the time (`WINDOW_MASS` = 0.80). Measured coverage holds for stable users late, but dips to its worst around five cycles of history: 57.5% for a variable user, 65% drifting, 77.5-82.5% stable. The window is a promise, and mid-learning it is broken roughly a third of the time for the users least able to absorb a surprise. **Why.** With two to five intervals the weighted MAD and mean-absolute-deviation both underestimate the population spread — small-sample bias, made worse by recency weighting shrinking the effective sample. 80% of a distribution that is too narrow covers well under 80%. **What to do.** Inflate the estimate that is biased, not the promise: multiply `fromSpread` in `scaleOf` by `1 + EARLY_WIDENING * max(0, EARLY_FULL_HISTORY - n) / EARLY_FULL_HISTORY`, starting at 0.5 and 6.0 (x1.33 at two intervals, ramping to x1.0 at six and beyond). **Traps.** Do not touch `WINDOW_MASS` — that is the semantic promise, and moving it changes what the window means rather than making it true. Do not touch `MINIMUM_SCALE` — that is policy. The ramp reaching exactly 1.0 at six intervals is the safety argument: every six-interval §51 fixture stays bit-identical, and the five-interval stable fixtures land below the scale floor anyway. Tune upward against the harness only until the mid-learning coverage floor passes; stop before `a stable user gets high confidence and a tight window` (window <= 4 days) or EngineComparisonTest's mean-window ceiling of 8.0 complains. Verify: `LearningCurveTest`'s coverage assertion for k in 3..6 (red before at 57.5%, green after), with the §51 acceptance suite and EngineComparisonTest unchanged.
null added this to the Batch 09 — Prediction Science & Hardening milestone 2026-08-20 16:13:30 -05:00
null added the
P1
label 2026-08-20 16:13:30 -05:00
null closed this issue 2026-08-20 16:30:03 -05:00
Sign in to join this conversation.
No Label
P0
P1
P2
release-blocker
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: null/Privacy-Period-Tracker#52
No description provided.