A well-tracked drift is punished with a widening window #53

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. For a user whose cycle lengthens steadily (+0.5 days per cycle), the engine follows the drift well — mean error stays 0.9-1.6 days across fifteen cycles — but its windows widen from ~3.0 to ~5.6 days and its Low-confidence share climbs from 2.5% to 35%. Accuracy holds while stated confidence falls.

Why. scaleOf measures each interval's deviation from a single static centre. Under a real trend those deviations grow with the length of the history no matter how well the trend is being followed, so the engine reads its own successful tracking as spread.

What to do. Measure residuals from the trend line rather than the centre, gated on the trend actually firing: have centreOf return the damped trend alongside the centre (a private holder), derive a per-cycle slope from the two half-medians dampedTrend already computes, and in scaleOf compare each interval against the line rather than the constant.

Traps. Gate it on the existing spread-relative floor test so trendPerCycle is zero unless a real trend fires — the computation then reduces bit-identically to today's for every non-drifting history, which is what protects the §51 fixtures (the variable fixture never fires the trend: its shift of 3 sits under its floor of ~3.8). Keep one code path, not a parallel one. The damping lag stays covered by the scored-error term, which is the honest empirical floor. If EngineComparisonTest's shortening-drift row goes red (boundary case: error 1 against a +/-1 window), add a minimum scale that applies when the trend fires — following a trend is still an extrapolation.

Verify: LearningCurveTest's drifting-profile assertions at k>=10 — Low share <= 0.15 and mean window <= 4.8 (both red before: 35% and 5.6), with mean error unchanged and EngineComparisonTest still won by the personal engine.

Measured by the learning-curve simulation at 93ec5b7. **What is true now.** For a user whose cycle lengthens steadily (+0.5 days per cycle), the engine follows the drift well — mean error stays 0.9-1.6 days across fifteen cycles — but its windows widen from ~3.0 to ~5.6 days and its Low-confidence share climbs from 2.5% to 35%. Accuracy holds while stated confidence falls. **Why.** `scaleOf` measures each interval's deviation from a single static centre. Under a real trend those deviations grow with the length of the history no matter how well the trend is being followed, so the engine reads its own successful tracking as spread. **What to do.** Measure residuals from the trend line rather than the centre, gated on the trend actually firing: have `centreOf` return the damped trend alongside the centre (a private holder), derive a per-cycle slope from the two half-medians `dampedTrend` already computes, and in `scaleOf` compare each interval against the line rather than the constant. **Traps.** Gate it on the existing spread-relative floor test so `trendPerCycle` is zero unless a real trend fires — the computation then reduces bit-identically to today's for every non-drifting history, which is what protects the §51 fixtures (the variable fixture never fires the trend: its shift of 3 sits under its floor of ~3.8). Keep one code path, not a parallel one. The damping lag stays covered by the scored-error term, which is the honest empirical floor. If EngineComparisonTest's shortening-drift row goes red (boundary case: error 1 against a +/-1 window), add a minimum scale that applies when the trend fires — following a trend is still an extrapolation. Verify: `LearningCurveTest`'s drifting-profile assertions at k>=10 — Low share <= 0.15 and mean window <= 4.8 (both red before: 35% and 5.6), with mean error unchanged and EngineComparisonTest still won by the personal engine.
null added this to the Batch 09 — Prediction Science & Hardening milestone 2026-08-20 16:13:30 -05:00
null added the
P2
label 2026-08-20 16:13:30 -05:00
null closed this issue 2026-08-20 16:27:18 -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#53
No description provided.