Phase 56: NEW CHAMPION logbag_rank + gbm rank-blend w=0.30 (purge 1630.3, was 1972.0)
Browse files11-lane agent campaign, ~250 candidates, all paired on the deterministic
purge harness. Champion: within-fleet rank features (r_vlast/r_tau) on the
bagged logistic + gbm value-preserving order blend - ordering-only, swaps
flat 9.23, wins all three blocks (-341.7 +/- 103.8, 37W/11L). Deployed as
submit.py FrontierRUL; fidelity vs the CV candidate is bit-exact (s_10/s_30).
Dials: BATTERYSWAP_FRONTIER=0 -> legacy logbag; BATTERYSWAP_FRONTIER_W2=0 ->
plain logbag_rank (purge 1746.4, no gbm flattery exposure).
cv.py CHAMPION carries the blend; regenerated baseline matches the campaign
run bit-for-bit.
Instrument calibration (campaign's key negative): the purge rewards the two
classes the public refuted - count-coupled changes (alpha 1.5: purge -202 vs
public +527) and label-process exploits (cert-first re-derived at its exact
pre-refutation signature 3W/0L/45T). Shipping bar recorded: ordering-only,
label-process-free, swaps flat. Report-only survivors and full per-lane
records in agent_reports/ and EXPERIMENTS.md Phase 56.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- EXPERIMENTS.md +92 -0
- agent_reports/README.md +29 -0
- agent_reports/bl_findings.md +171 -0
- agent_reports/e2_findings.md +82 -0
- agent_reports/ft_findings.md +57 -0
- agent_reports/md_findings.md +27 -0
- agent_reports/pl_findings.md +149 -0
- agent_reports/rk_findings.md +61 -0
- agent_reports/sv_findings.md +112 -0
- agent_reports/tj_findings.md +46 -0
- agent_reports/tr_findings.md +108 -0
- agent_reports/wave1_registry.md +52 -0
- agent_reports/wd_findings.md +154 -0
- batteryswap_example/cv.py +9 -1
- batteryswap_example/submit.py +65 -3
|
@@ -2956,3 +2956,95 @@ for ad-hoc ordering diagnostics on methods that do rank. CSV SCHEMA CHANGE:
|
|
| 2956 |
columns; the pre-change stale candidate CSVs were deleted (they were
|
| 2957 |
denominated in dead instruments regardless - any candidate must re-run fresh
|
| 2958 |
through `cv oofcand <label>`).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2956 |
columns; the pre-change stale candidate CSVs were deleted (they were
|
| 2957 |
denominated in dead instruments regardless - any candidate must re-run fresh
|
| 2958 |
through `cv oofcand <label>`).
|
| 2959 |
+
|
| 2960 |
+
## Phase 56 - full re-adjudication under the purge + radical-pipeline campaign; NEW CHAMPION logbag_rank+gbm30 (1630.3)
|
| 2961 |
+
|
| 2962 |
+
User directive: re-run ALL improvement ideas on the purge instrument, including
|
| 2963 |
+
previously public-refuted axes ("remove the closed line... we can re-try all of
|
| 2964 |
+
that"), spin off agents, be radical ("change the whole pipeline method").
|
| 2965 |
+
Execution: 11 parallel lanes, ~250 candidates, every full-48 run paired per
|
| 2966 |
+
scenario against the champion baseline. Harness verified DETERMINISTIC
|
| 2967 |
+
(champion repeat = bit-identical on all 48), so paired SE is scenario-sampling
|
| 2968 |
+
noise only; survivor bar = delta < 0 beyond ~2*SE at ~flat swaps.
|
| 2969 |
+
Live per-lane records: agent_reports/*.md (kept in-repo).
|
| 2970 |
+
|
| 2971 |
+
### NEW CHAMPION (adopted): logbag_rank + gbm value-preserving rank blend, w=0.30
|
| 2972 |
+
|
| 2973 |
+
cv.run_all48_oof(kind='logbag_rank', blend=('gbm', 0.30))
|
| 2974 |
+
THE SCORE 1630.3 vs 1972.0 (-341.7 +/- 103.8, t=-3.3, 37W/11L,
|
| 2975 |
+
swaps 9.23 vs 9.21 flat; wins all three blocks: wu 2276/panel 1677/ne 504;
|
| 2976 |
+
gain entirely late_swap: -305 of -342)
|
| 2977 |
+
|
| 2978 |
+
Components, independently discovered and individually significant:
|
| 2979 |
+
- logbag_rank (champion + within-origin fleet-rank features r_vlast/r_tau):
|
| 2980 |
+
-225.6 +/- 74.0, 34W/11L. Linear, rank-based, no same-device channel. This
|
| 2981 |
+
kind was REJECTED on the old self-fit instrument (phase 8); purge reverses.
|
| 2982 |
+
- gbm order increment on that base: -116.1 +/- 53.6, 31W/13L. Broad weight
|
| 2983 |
+
plateau (.25/.30/.35 all <= -335). CAVEAT (md lane): a monotonic-constrained
|
| 2984 |
+
HGB partner DESTROYS the increment (+142..+269) - the gbm contribution is
|
| 2985 |
+
specifically non-monotone response, i.e. real interactions or residual
|
| 2986 |
+
same-battery flattery. Accepted risk per standing directive; public arbiter.
|
| 2987 |
+
Local optimum confirmed by 5 lanes: hyperparams (C=3 coin-flip -15.0+/-13.2,
|
| 2988 |
+
W/L against - kept C=1), features (12 full runs, all subsumed by r_vlast/r_tau;
|
| 2989 |
+
r_tau load-bearing), training weights (proximity/dedup/hard-example all
|
| 2990 |
+
neutral-to-worse on the frontier), neural rankers (RankNet/ListNet lose
|
| 2991 |
+
head-to-head +99..+120), physics blends (sim-rank 1.9sigma on old champ, ghost-
|
| 2992 |
+
promoting). vrel subsumed by ranks (worse in both combos).
|
| 2993 |
+
|
| 2994 |
+
DEPLOYMENT: submit.py FrontierRUL (BATTERYSWAP_FRONTIER=0 reverts to logbag).
|
| 2995 |
+
Fidelity test: bit-exact vs the CV candidate on s_10/s_30 (max p42 diff 0.0,
|
| 2996 |
+
ordering identical). Fit ~3.3s incl. gbm; budgets and degradation paths
|
| 2997 |
+
unchanged. cv.py CHAMPION now carries the blend (candidates with explicit
|
| 2998 |
+
kind/blend do NOT inherit it).
|
| 2999 |
+
|
| 3000 |
+
### INSTRUMENT CALIBRATION - the campaign's most important negative result
|
| 3001 |
+
|
| 3002 |
+
The purge CANNOT adjudicate two classes, proven by public anti-correlation:
|
| 3003 |
+
1. COUNT-COUPLED changes: purge alpha curve is monotone DOWN to 1.5 (-202)
|
| 3004 |
+
- the exact config the public refuted at +527 (phase 28). Same shape via
|
| 3005 |
+
p_be top-ups, EC-inclusion counts, dedup class-rebalance (tr: the -117
|
| 3006 |
+
dedup win is 80% a smuggled +1.7-swap appetite shift; its count-matched
|
| 3007 |
+
twin is -24 n.s.), gamma flattening, cohort gates.
|
| 3008 |
+
2. LABEL-PROCESS exploits: wd re-derived cert-first on the frontier at
|
| 3009 |
+
-26.2 (3W/0L/45T) - the EXACT local signature (-37.9, 3W/0L/45T) that
|
| 3010 |
+
preceded the public +43.2 (phase 48, tested ISOLATED on the clean stack;
|
| 3011 |
+
the lane's exculpation claim was checked against the record and is FALSE).
|
| 3012 |
+
Ghosts (crossed-never-labeled devices) exist publicly, are zero in train,
|
| 3013 |
+
and are invisible to ANY local instrument.
|
| 3014 |
+
SHIPPING BAR going forward: ordering-only, label-process-free, swaps flat.
|
| 3015 |
+
|
| 3016 |
+
### Report-only results (real on the purge; fail the shipping bar)
|
| 3017 |
+
|
| 3018 |
+
- pl_stack_hgatez (frontier + arrival-triggered p_be=0.2 top-up): 1559.4
|
| 3019 |
+
overall best raw number, but the gate's marginal on the frontier is
|
| 3020 |
+
-70.8 +/- 42.4 at +3.2 swaps with panel n.s. - count-coupled. The frontier
|
| 3021 |
+
self-repairs warmup (its wu swaps 9.9 vs 5.0), removing the gate's niche.
|
| 3022 |
+
- pl_stack_shiftp4 (visit day 4*p42 days earlier): 1614.0; swap-neutral and
|
| 3023 |
+
reproducibly negative on two bases (champ -13.2+/-9.4, frontier marginal
|
| 3024 |
+
-16.3+/-10.9) but sub-2sigma each. Optional public A/B candidate.
|
| 3025 |
+
- tr_hard_prox60 (hard-band x3 + proximity hl60 weights): -107.5 +/- 41.2 on
|
| 3026 |
+
the PLAIN base only (2.6sigma, swaps flat) - subsumed by the frontier.
|
| 3027 |
+
- sv_dhgate (censored-pool discrete-time hazard when train deaths < 20):
|
| 3028 |
+
-51.4 +/- 22.1 - real, but the gate NEVER fires in deployment (full-history
|
| 3029 |
+
fit; cf. phase 36's inert warm-up mechanism, same effect size).
|
| 3030 |
+
- tj_blend25e3 (MC voltage-trajectory sim rank blend 25%): -86.1 +/- 45.5
|
| 3031 |
+
(1.9sigma) on the old champion base; promotes crossed-unlabeled devices
|
| 3032 |
+
(cert class) - report-only. Standalone physics pipeline: honest negative
|
| 3033 |
+
(labels carry unrecoverable info; count-matched it catches fewer deaths).
|
| 3034 |
+
|
| 3035 |
+
### Closed by this campaign (with numbers, on the purge)
|
| 3036 |
+
|
| 3037 |
+
Planner: day placement CONVERGED (e2 surrogate local search -1.7+/-1.6 for 4x
|
| 3038 |
+
effort; ed/sd/blend day variants reject); piggyback/second-chance swaps dead
|
| 3039 |
+
(+8.8/+52); EC-economics count dead (inferior appetite); CVaR/portfolio dead
|
| 3040 |
+
(deaths do not cluster by building). Models: survival family dead (aft +337,
|
| 3041 |
+
cox +546, wiener +1100); conformal = byte-identical to logbag; building fixed
|
| 3042 |
+
effects dead (+423/+48); MoE/staleness gates inert; calibration null-to-
|
| 3043 |
+
harmful (Platt +21, isotonic -16.8 n.s.); MLP noise. Features: raw levels
|
| 3044 |
+
fail where ranks transfer (whit +43 raw vs -49 ranked); aux families dead
|
| 3045 |
+
(+95..+124); v_last_only +453 (blind-repo phase-39 claim dead on this
|
| 3046 |
+
instrument); top-12 slot squatters are label-process ghosts that still die at
|
| 3047 |
+
19% - no flag can demote them profitably. Training: recency dead, proximity
|
| 3048 |
+
real-but-subsumed; label windows d35/d21 count-starve (+72/+105); building-
|
| 3049 |
+
balanced +40; thinning +19..+32; past-only pool +19 (future-side purge pairs
|
| 3050 |
+
stabilize fits). Candidate CSVs: /tmp/cv_oofcand_*.csv (~180 full-48 files).
|
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Purge-CV re-run — live agent reports (2026-08-22)
|
| 2 |
+
|
| 3 |
+
Full re-adjudication of every improvement idea (old and new, including
|
| 4 |
+
previously public-refuted axes, per user directive) on THE SCORE:
|
| 5 |
+
the temporal-purge CV (`cv all48oof`), champion baseline **1972.0**
|
| 6 |
+
(warmup 3560.3 / panel 1839.6 / nearend 604.8, n_swaps 9.2).
|
| 7 |
+
|
| 8 |
+
Every candidate is evaluated PAIRED per scenario against the champion
|
| 9 |
+
baseline (/tmp/cv_all48oof.csv): delta mean, SE of paired deltas, W/L,
|
| 10 |
+
swap count. Survivor bar: ALL48 delta < 0 beyond ~2*SE with swaps ~flat.
|
| 11 |
+
|
| 12 |
+
One file per worker (updated live by that worker only):
|
| 13 |
+
|
| 14 |
+
| file | theme |
|
| 15 |
+
|---|---|
|
| 16 |
+
| wave1_registry.md | mechanical re-run of all 25 OOF_CANDIDATES registry entries + champion-repeat noise floor |
|
| 17 |
+
| ft_findings.md | new feature engineering |
|
| 18 |
+
| md_findings.md | model families & hyperparameters |
|
| 19 |
+
| pl_findings.md | planner: knobs, day placement, appetite (reopened) |
|
| 20 |
+
| bl_findings.md | blends, ensembles, calibration |
|
| 21 |
+
| tr_findings.md | training-data composition: weights, labels, sampling |
|
| 22 |
+
| rk_findings.md | learning-to-rank objectives |
|
| 23 |
+
| wd_findings.md | untested registry kinds + wild-card methods, cert-first (reopened) |
|
| 24 |
+
| tj_findings.md | RADICAL: voltage-trajectory forecasting, mechanistic death-rule application |
|
| 25 |
+
| sv_findings.md | RADICAL: survival curves + decision-theoretic visit-day planner |
|
| 26 |
+
| e2_findings.md | RADICAL: end-to-end plan optimization, fleet-level death forecasting |
|
| 27 |
+
|
| 28 |
+
Per-candidate CSVs: /tmp/cv_oofcand_<label>.csv. Aggregate view:
|
| 29 |
+
`venv/bin/python -m batteryswap_example.cv oofreport`.
|
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# bl (blends / ensembles / calibration) — live findings
|
| 2 |
+
|
| 3 |
+
STATUS: DONE — last updated 2026-08-22 16:05:35
|
| 4 |
+
|
| 5 |
+
Baseline: champion logbag, SCORE 1972.0, swaps 9.21. All candidates paired per-scenario vs /tmp/cv_all48oof.csv (48 rows).
|
| 6 |
+
Value-preserving rank blends keep the p42 value distribution — count machinery unchanged, only WHO holds each rank moves. Calibration candidates change values (count/day placement move) — count-shift axis reopened by user 2026-08-22.
|
| 7 |
+
|
| 8 |
+
| label | ALL48 | delta | SE | W/L | swaps |
|
| 9 |
+
|---|---|---|---|---|---|
|
| 10 |
+
| bl_lbr_gbm30 | 1630.3 | -341.75 | 103.77 | 37W/11L | 9.23 |
|
| 11 |
+
| bl_lbr_gbm35 | 1635.4 | -336.61 | 108.07 | 35W/13L | 9.25 |
|
| 12 |
+
| bl_lbr_gbm25 | 1636.6 | -335.36 | 102.23 | 37W/11L | 9.27 |
|
| 13 |
+
| bl_lbr_grw | 1642.8 | -329.21 | 105.39 | 34W/14L | 9.25 |
|
| 14 |
+
| bl_lbr_locg10 | 1654.8 | -317.25 | 104.34 | 34W/14L | 9.31 |
|
| 15 |
+
| bl_lbr_gr2510 | 1656.8 | -315.16 | 104.70 | 34W/14L | 9.23 |
|
| 16 |
+
| bl_lbr_gr2015 | 1663.6 | -308.45 | 104.71 | 33W/15L | 9.29 |
|
| 17 |
+
| bl_lbr_rfgbm | 1671.7 | -300.31 | 99.12 | 33W/15L | 9.29 |
|
| 18 |
+
| bl_lbr_gbm50 | 1683.5 | -288.48 | 110.14 | 33W/15L | 9.31 |
|
| 19 |
+
| bl_lbr_gbm15 | 1687.9 | -284.12 | 88.43 | 35W/12L | 9.25 |
|
| 20 |
+
| bl_lbr_locv10 | 1688.1 | -283.89 | 88.03 | 34W/13L | 9.35 |
|
| 21 |
+
| bl_lbr_wnr15 | 1697.4 | -274.61 | 82.48 | 36W/11L | 9.44 |
|
| 22 |
+
| bl_lbr_rf25 | 1698.6 | -273.44 | 84.78 | 35W/12L | 9.23 |
|
| 23 |
+
| bl_lbr_lb25 | 1710.9 | -261.07 | 84.04 | 34W/11L | 9.54 |
|
| 24 |
+
| bl_lbr_lb50 | 1711.0 | -261.03 | 84.42 | 34W/10L | 9.48 |
|
| 25 |
+
| bl_lbr_rf15 | 1714.6 | -257.43 | 80.79 | 35W/12L | 9.29 |
|
| 26 |
+
| bl_lbr_rf50 | 1714.9 | -257.06 | 94.15 | 31W/17L | 9.29 |
|
| 27 |
+
| bl_lbr00 | 1746.4 | -225.63 | 74.03 | 34W/11L | 9.54 |
|
| 28 |
+
| bl_combo3 | 1841.0 | -131.02 | 82.37 | 24W/24L | 13.33 |
|
| 29 |
+
| bl_combo2 | 1841.0 | -130.96 | 55.06 | 26W/21L | 10.75 |
|
| 30 |
+
| bl_gam80 | 1852.3 | -119.67 | 75.65 | 21W/27L | 13.46 |
|
| 31 |
+
| bl_combo1 | 1866.2 | -105.85 | 57.19 | 24W/23L | 11.02 |
|
| 32 |
+
| bl_gam85 | 1879.0 | -93.05 | 51.79 | 22W/26L | 12.15 |
|
| 33 |
+
| bl_locv10w60 | 1886.3 | -85.75 | 35.71 | 26W/13L | 9.17 |
|
| 34 |
+
| bl_mw_rfgbmB | 1886.4 | -85.60 | 39.37 | 27W/16L | 9.10 |
|
| 35 |
+
| bl_mw_rgw2 | 1887.1 | -84.90 | 44.94 | 28W/15L | 9.10 |
|
| 36 |
+
| bl_locv10 | 1888.3 | -83.70 | 35.76 | 25W/13L | 9.17 |
|
| 37 |
+
| bl_mw_rfgbm | 1888.8 | -83.18 | 39.67 | 27W/17L | 9.12 |
|
| 38 |
+
| bl_mw_rgw | 1889.5 | -82.49 | 45.46 | 28W/15L | 9.15 |
|
| 39 |
+
| bl_rf35 | 1890.6 | -81.37 | 39.50 | 29W/14L | 9.21 |
|
| 40 |
+
| bl_mw_rfwnr | 1894.7 | -77.35 | 38.66 | 25W/17L | 9.27 |
|
| 41 |
+
| bl_locv15 | 1899.1 | -72.93 | 35.20 | 26W/13L | 9.17 |
|
| 42 |
+
| bl_rf40 | 1901.7 | -70.30 | 41.73 | 29W/14L | 9.23 |
|
| 43 |
+
| bl_mw_rfgbm2 | 1903.1 | -68.88 | 41.96 | 29W/15L | 9.10 |
|
| 44 |
+
| bl_gam90 | 1904.5 | -67.52 | 38.28 | 19W/28L | 10.98 |
|
| 45 |
+
| bl_rf30 | 1908.3 | -63.71 | 34.98 | 30W/11L | 9.06 |
|
| 46 |
+
| bl_locv10w70 | 1909.3 | -62.75 | 38.31 | 28W/14L | 9.15 |
|
| 47 |
+
| bl_locr20 | 1909.6 | -62.36 | 44.48 | 30W/15L | 9.08 |
|
| 48 |
+
| bl_mwloc2 | 1910.5 | -61.49 | 44.84 | 28W/16L | 9.08 |
|
| 49 |
+
| bl_locv20 | 1912.4 | -59.63 | 39.92 | 29W/14L | 9.15 |
|
| 50 |
+
| bl_mw_rfgbmC | 1914.1 | -57.88 | 44.33 | 27W/18L | 9.12 |
|
| 51 |
+
| bl_locv08 | 1917.0 | -55.04 | 37.26 | 24W/14L | 9.19 |
|
| 52 |
+
| bl_rf45 | 1918.5 | -53.53 | 44.86 | 29W/16L | 9.23 |
|
| 53 |
+
| bl_locv05 | 1919.2 | -52.80 | 33.75 | 23W/12L | 9.27 |
|
| 54 |
+
| bl_rf25 | 1919.7 | -52.30 | 31.46 | 28W/11L | 9.10 |
|
| 55 |
+
| bl_wnr15 | 1920.6 | -51.45 | 33.11 | 19W/19L | 9.38 |
|
| 56 |
+
| bl_rf50 | 1921.2 | -50.85 | 45.72 | 30W/16L | 9.17 |
|
| 57 |
+
| bl_locr10 | 1921.5 | -50.46 | 40.54 | 29W/15L | 9.10 |
|
| 58 |
+
| bl_wnr25 | 1924.4 | -47.65 | 34.58 | 20W/25L | 9.54 |
|
| 59 |
+
| bl_gbm35 | 1924.6 | -47.41 | 49.19 | 29W/16L | 9.04 |
|
| 60 |
+
| bl_gam95 | 1925.0 | -46.98 | 28.37 | 12W/27L | 10.08 |
|
| 61 |
+
| bl_wnr35 | 1935.0 | -36.97 | 44.23 | 23W/24L | 9.50 |
|
| 62 |
+
| bl_mwloc1 | 1936.8 | -35.20 | 44.89 | 30W/15L | 9.04 |
|
| 63 |
+
| bl_rf15 | 1938.4 | -33.63 | 25.39 | 21W/8L | 9.15 |
|
| 64 |
+
| bl_gbm25 | 1943.3 | -28.68 | 40.85 | 25W/17L | 9.06 |
|
| 65 |
+
| bl_gbm50 | 1947.2 | -24.77 | 55.30 | 26W/21L | 9.12 |
|
| 66 |
+
| bl_wnr10 | 1950.2 | -21.82 | 22.33 | 17W/14L | 9.29 |
|
| 67 |
+
| bl_gbm15 | 1954.2 | -17.77 | 35.45 | 23W/16L | 9.10 |
|
| 68 |
+
| bl_caliso | 1955.2 | -16.81 | 18.45 | 29W/12L | 8.69 |
|
| 69 |
+
| bl_dh50 | 1957.1 | -14.90 | 19.24 | 10W/9L | 9.31 |
|
| 70 |
+
| bl_rf10 | 1964.6 | -7.38 | 18.45 | 10W/7L | 9.15 |
|
| 71 |
+
| bl_dh35 | 1966.1 | -5.90 | 15.83 | 7W/6L | 9.29 |
|
| 72 |
+
| bl_dh25 | 1967.2 | -4.78 | 5.16 | 6W/4L | 9.25 |
|
| 73 |
+
| bl_gbm10 | 1970.0 | -1.96 | 26.18 | 16W/12L | 9.23 |
|
| 74 |
+
| bl_dh10 | 1972.1 | +0.11 | 0.39 | 1W/2L | 9.21 |
|
| 75 |
+
| bl_dh15 | 1972.5 | +0.47 | 0.53 | 2W/4L | 9.21 |
|
| 76 |
+
| bl_wnr50 | 1974.3 | +2.30 | 63.99 | 21W/27L | 9.38 |
|
| 77 |
+
| bl_tau10 | 1976.7 | +4.69 | 26.10 | 12W/15L | 9.40 |
|
| 78 |
+
| bl_calsig | 1993.0 | +21.01 | 17.72 | 24W/14L | 8.92 |
|
| 79 |
+
| bl_tau15 | 1993.6 | +21.61 | 23.74 | 10W/22L | 9.52 |
|
| 80 |
+
| bl_tau25 | 2017.1 | +45.13 | 38.62 | 15W/24L | 9.65 |
|
| 81 |
+
| bl_gam110 | 2046.8 | +74.81 | 33.02 | 31W/17L | 8.08 |
|
| 82 |
+
| bl_tau35 | 2097.7 | +125.66 | 51.44 | 12W/30L | 9.62 |
|
| 83 |
+
| bl_gam125 | 2140.9 | +168.90 | 50.66 | 20W/28L | 6.69 |
|
| 84 |
+
| bl_tau50 | 2256.9 | +284.87 | 78.59 | 9W/35L | 9.60 |
|
| 85 |
+
|
| 86 |
+
## Candidate notes
|
| 87 |
+
- **bl_lbr_gbm30**: TOP RECOMMENDATION: logbag_rank base + gbm rank-blend w=.30 (value-preserving) — ALL48 1630.3, -341.8 (SE 103.8, 3.3 SE), 37W/11L, swaps 9.23 (flat). Gain is ALL late-swap (-305.0), warmup 8W/0L, nearend 6W/0L. Increment over lbr base alone: -116.1+/-53.6 (2.2 SE)
|
| 88 |
+
- **bl_lbr_gbm35**: lbr + gbm .35 — -336.6; plateau .25-.35
|
| 89 |
+
- **bl_lbr_gbm25**: lbr base + gbm .25 — TOP: -335.4 total (SE 102.2), 37W/11L, swaps 9.27; increment -109.7+/-50.0
|
| 90 |
+
- **bl_lbr_grw**: lbr + gbm .22 + rf .10 + wiener .08 — -329.2
|
| 91 |
+
- **bl_lbr_locg10**: lbr + local gbm (w .6, scale .10) — -317.3
|
| 92 |
+
- **bl_lbr_gr2510**: lbr + gbm .25 + rf .10 — -315.2
|
| 93 |
+
- **bl_lbr_gr2015**: lbr + gbm .20 + rf .15 — -308.5
|
| 94 |
+
- **bl_lbr_rfgbm**: lbr base + rf .28 + gbm .12 — -300.3, increment -74.7
|
| 95 |
+
- **bl_lbr_gbm50**: lbr + gbm .50 — -288.5; past minimum
|
| 96 |
+
- **bl_lbr_gbm15**: lbr base + gbm .15 — increment -58.5+/-33.1
|
| 97 |
+
- **bl_lbr_locv10**: lbr base + local rf (w .6, scale .10) — -283.9, increment -58.3+/-41.4
|
| 98 |
+
- **bl_lbr_wnr15**: lbr base + wiener .15 — increment -49.0+/-31.6
|
| 99 |
+
- **bl_lbr_rf25**: lbr base + rf .25 — increment -47.8+/-30.5 (25W/11L)
|
| 100 |
+
- **bl_lbr_lb25**: lbr base + plain logbag .25 — increment -35.4+/-17.5 (7W/1L): even the champion itself adds on the lbr base
|
| 101 |
+
- **bl_lbr_lb50**: lbr base + plain logbag .50 — increment -35.4+/-21.7
|
| 102 |
+
- **bl_lbr_rf15**: lbr base + rf .15 — increment -31.8+/-23.6 over lbr
|
| 103 |
+
- **bl_lbr_rf50**: lbr base + rf .50 — increment -31.4+/-48.0
|
| 104 |
+
- **bl_lbr00**: logbag_rank base alone (cached re-run) — replicates wave-1 -225.6 exactly
|
| 105 |
+
- **bl_combo3**: locv10w60 order x gamma-0.80 values — -131.0 SE 82.4, 24W/24L, swaps 13.3: heavy appetite
|
| 106 |
+
- **bl_combo2**: mw_rfgbmB order x gamma-0.90 values — -131.0 SE 55.1 (2.4 SE), 26W/21L, swaps 10.75: best mean overall but count-shifted
|
| 107 |
+
- **bl_gam80**: calibration/appetite: p42**0.80 (flatter values, swaps 13.5 vs 9.2) — mean -119.7 but 21W/27L: warmup insurance (-629) paid in nearend early-swaps (+213). Historical: appetite axis publicly refuted pre-reopening
|
| 108 |
+
- **bl_combo1**: locv10w60 order x gamma-0.90 values — -105.9, 24W/23L, swaps 11.0 (blend + appetite stack, ~additive)
|
| 109 |
+
- **bl_gam85**: p42**0.85 — -93.1, swaps 12.2, 22W/26L (appetite shape)
|
| 110 |
+
- **bl_locv10w60**: local rf blend, scale 0.10, w 0.6 — BEST: -85.8, SE 35.7 (2.4 SE), 27W/13L, swaps 9.17 (flat)
|
| 111 |
+
- **bl_mw_rfgbmB**: 3-way logbag+rf(.28)+gbm(.12) — -85.6, 2.2 SE, swaps 9.10
|
| 112 |
+
- **bl_mw_rgw2**: 4-way logbag+rf(.25)+gbm(.15)+wiener(.05) — -84.9, 1.9 SE
|
| 113 |
+
- **bl_locv10**: local rf blend, scale 0.10, w 0.5 — -83.7, 2.3 SE; the never-tried rank-local axis works
|
| 114 |
+
- **bl_mw_rfgbm**: 3-way global rank blend logbag+rf(.25)+gbm(.15) — -83.2, 2.1 SE, swaps flat
|
| 115 |
+
- **bl_mw_rgw**: 4-way logbag+rf(.22)+gbm(.13)+wiener(.08) — -82.5, 1.8 SE
|
| 116 |
+
- **bl_rf35**: value-preserving rank blend logbag+rf w=0.35 — SURFACE MINIMUM (-81.4, SE 39.5 = 2.1 SE, 30W/14L, swaps 9.21 flat). Flag: rf gets some same-battery flattery under the purge (accepted, user decision)
|
| 117 |
+
- **bl_mw_rfwnr**: 3-way logbag+rf(.30)+wiener(.10) — -77.4, 2.0 SE
|
| 118 |
+
- **bl_locv15**: local rf blend, scale 0.15, w 0.5 — -72.9
|
| 119 |
+
- **bl_rf40**: rf global blend w=0.40 — -70.3
|
| 120 |
+
- **bl_mw_rfgbm2**: 3-way logbag+rf(.20)+gbm(.20) — -68.9
|
| 121 |
+
- **bl_gam90**: p42**0.90 — -67.5, swaps 11.0, 19W/28L: same insurance shape, smaller
|
| 122 |
+
- **bl_rf30**: rf global blend w=0.30 (fine grid) — -63.7; confirms 0.35 minimum
|
| 123 |
+
- **bl_locv10w70**: local rf blend, scale 0.10, w 0.7 — overshoot (-62.8)
|
| 124 |
+
- **bl_locr20**: rank-distance local (width 20, w 0.5) — -62.4
|
| 125 |
+
- **bl_mwloc2**: local rf (0.45) + global gbm .12 + wiener .08 — -61.5
|
| 126 |
+
- **bl_locv20**: local rf blend, scale 0.20, w 0.5 — -59.6
|
| 127 |
+
- **bl_mw_rfgbmC**: 3-way logbag+rf(.30)+gbm(.15) — -57.9
|
| 128 |
+
- **bl_locv08**: local rf blend, scale 0.08, w 0.5 — -55.0
|
| 129 |
+
- **bl_rf45**: rf global blend w=0.45 — -53.5
|
| 130 |
+
- **bl_locv05**: confidence-weighted local blend: rf weight 0.5*exp(-|p42-cutoff|/0.05) — -52.8
|
| 131 |
+
- **bl_rf25**: value-preserving rank blend logbag+rf w=0.25 — replicates wave-1 rankavg25rf exactly (-52.3)
|
| 132 |
+
- **bl_wnr15**: value-preserving rank blend logbag+wiener w=0.15 — wiener minimum (-51.5, 1.6 SE), swaps flat
|
| 133 |
+
- **bl_rf50**: value-preserving rank blend logbag+rf w=0.50 — past minimum (-50.9)
|
| 134 |
+
- **bl_locr10**: rank-distance local rf blend (width 10 ranks, w 0.5) — -50.5; value-distance beats rank-distance
|
| 135 |
+
- **bl_wnr25**: value-preserving rank blend logbag+wiener w=0.25 — (-47.7, 1.4 SE)
|
| 136 |
+
- **bl_gbm35**: value-preserving rank blend logbag+gbm w=0.35 — gbm minimum (-47.4, 1.0 SE), swaps flat
|
| 137 |
+
- **bl_gam95**: p42**0.95 — -47.0, swaps 10.1, 14W/28L
|
| 138 |
+
- **bl_wnr35**: value-preserving rank blend logbag+wiener w=0.35 — fading (-37.0)
|
| 139 |
+
- **bl_mwloc1**: local rf (0.5, scale .10) + global gbm .15 — -35.2; global gbm on top of local rf HURTS
|
| 140 |
+
- **bl_rf15**: value-preserving rank blend logbag+rf w=0.15 — (-33.6, 1.3 SE, 25W/9L)
|
| 141 |
+
- **bl_gbm25**: value-preserving rank blend logbag+gbm w=0.25 — mild (-28.7, 0.7 SE)
|
| 142 |
+
- **bl_gbm50**: value-preserving rank blend logbag+gbm w=0.50 — past minimum (-24.8)
|
| 143 |
+
- **bl_wnr10**: value-preserving rank blend logbag+wiener w=0.10 — mild (-21.8)
|
| 144 |
+
- **bl_gbm15**: value-preserving rank blend logbag+gbm w=0.15 — mild (-17.8, 0.5 SE)
|
| 145 |
+
- **bl_caliso**: cross-fitted isotonic calibration — -16.8 +/- 18.5, swaps 8.69: null
|
| 146 |
+
- **bl_dh50**: value-preserving rank blend logbag+dthaz — small (-14.9, 0.8 SE)
|
| 147 |
+
- **bl_rf10**: value-preserving rank blend logbag+rf w=0.10 — mild (-7.4)
|
| 148 |
+
- **bl_dh35**: value-preserving rank blend logbag+dthaz — null
|
| 149 |
+
- **bl_dh25**: value-preserving rank blend logbag+dthaz — null
|
| 150 |
+
- **bl_gbm10**: value-preserving rank blend logbag+gbm w=0.10 — null (-2.0, 0.1 SE)
|
| 151 |
+
- **bl_dh10**: value-preserving rank blend logbag+dthaz — dthaz is a logbag clone (rho_top 0.96): null as predicted
|
| 152 |
+
- **bl_dh15**: value-preserving rank blend logbag+dthaz — null
|
| 153 |
+
- **bl_wnr50**: value-preserving rank blend logbag+wiener w=0.50 — null (+2.3)
|
| 154 |
+
- **bl_tau10**: value-preserving rank blend logbag+tau (physics timer) w=0.10 — null (+4.7)
|
| 155 |
+
- **bl_calsig**: cross-fitted Platt calibration (GroupKFold-by-device OOF on purged pool) — +21.0 +/- 17.7, swaps 8.92: mild harm, champion values already calibrated enough
|
| 156 |
+
- **bl_tau15**: value-preserving rank blend logbag+tau (physics timer) w=0.15 — harmful (+21.6)
|
| 157 |
+
- **bl_tau25**: value-preserving rank blend logbag+tau (physics timer) w=0.25 — harmful (+45.1); tau anti-correlates with logbag near the top (rho_top -0.20) but that disagreement is noise, not signal
|
| 158 |
+
- **bl_gam110**: p42**1.10 (sharper, fewer swaps 8.1) — +74.8, harmful
|
| 159 |
+
- **bl_tau35**: value-preserving rank blend logbag+tau (physics timer) w=0.35 — very harmful (+125.7)
|
| 160 |
+
- **bl_gam125**: p42**1.25 (swaps 6.7) — +168.9, very harmful
|
| 161 |
+
- **bl_tau50**: value-preserving rank blend logbag+tau (physics timer) w=0.50 — very harmful (+284.9)
|
| 162 |
+
|
| 163 |
+
## Conclusion
|
| 164 |
+
|
| 165 |
+
TOP RECOMMENDATION: **bl_lbr_gbm30** — kind='logbag_rank' with blend=('gbm', 0.30) (the built-in value-preserving rank blend). ALL48 = 1630.3 vs champion 1972.0: delta -341.8, SE 103.8 (3.3 SE), 37W/11L, swaps 9.23 vs 9.21 (flat -> not appetite). The whole gain is late-swap reduction (-305.0/origin) with early-swap also slightly down; warmup 8W/0L, panel 23W/11L, nearend 6W/0L. It decomposes as: logbag_rank base (wave-1 find, -225.6) + gbm rank-blend increment (-116.1 +/- 53.6, 2.2 SE, 31W/13L). The gbm-weight plateau on this base is broad (.25-.35 all < -335), so it is not a tuned spike. One-line flag: gbm/rf flexible partners receive some same-battery flattery under the purge (accepted by user decision; the lbr base itself carries most of the delta and is logistic).
|
| 166 |
+
|
| 167 |
+
Runner-up if lbr base is rejected: on the plain champion base the blend family maxes at ~-86 (bl_locv10w60 local rf blend -85.8/2.4 SE; bl_mw_rfgbmB -85.6/2.2 SE), panel-block late-swap driven, swaps flat.
|
| 168 |
+
|
| 169 |
+
Axis verdicts: (1) blend-weight surface mapped, rf best single partner on champion base (min w=.35), gbm best on lbr base (min w=.30), dthaz useless (logbag clone), tau harmful; (2) confidence-weighted local blending WORKS (locv10w60 beats all global cells on champion base) but adds nothing on the lbr base; (3) principled calibration (cross-fitted Platt/isotonic) is null-to-harmful — champion values already serve the count rule; (4) gamma flattening = monotone appetite (mean gains up to -120 at gamma .80 but majority-loss W/L and swaps +4.3; historical: publicly refuted axis, reopened by user 2026-08-22); (5) combos (blend order x flattened values) stack ~additively (bl_combo2 -131) but inherit the appetite signature.
|
| 170 |
+
|
| 171 |
+
Scripts: /tmp/bl/*.py (lib_bl.py = cached exact replica of cv.run_all48_oof). CSVs: /tmp/cv_oofcand_bl_*.csv (73). Prediction caches: /tmp/bl/pred_*.pkl.
|
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# e2 — end-to-end plan optimization & fleet-level forecasting (radical pipeline)
|
| 2 |
+
|
| 3 |
+
STATUS: DONE — 2026-08-22 ~17:20. Top candidate: e2_hgatez (-245.8 +/- 88.3, clears 2*SE bar).
|
| 4 |
+
|
| 5 |
+
Baseline: champion logbag/tsroute, SCORE 1972.0 (warmup 3560.3 / panel 1839.6 / nearend 604.8), swaps 9.21.
|
| 6 |
+
Champion PREDICTIONS frozen & cached (48 temporal-purge logbag fits reproduce baseline EXACTLY: 1972.01, max|diff|=0.000000).
|
| 7 |
+
Every delta below is a pure PLANNER/BUDGET change on identical predictions. True eol only ever enters evaluate_plan.
|
| 8 |
+
Harness /tmp/e2/harness.py, cache /tmp/e2/preds.pkl, candidate CSVs /tmp/cv_oofcand_e2_*.csv.
|
| 9 |
+
|
| 10 |
+
## Results table (full-48, paired vs /tmp/cv_all48oof.csv; d/dsw = delta per extra swap)
|
| 11 |
+
|
| 12 |
+
| label | ALL48 | delta | SE | W/L | swaps | d/dsw | blocks (wu/pn/ne) | verdict |
|
| 13 |
+
|---|---|---|---|---|---|---|---|---|
|
| 14 |
+
| e2_hgatez | 1726.3 | -245.8 | 88.3 | 17/8 | 11.96 | -89 | -853 / -146 / 0 | SURVIVOR — top pick |
|
| 15 |
+
| e2_hgate | 1773.8 | -198.3 | 84.0 | 15/8 | 11.77 | -77 | -568 / -146 / 0 | survivor; superseded by hgatez |
|
| 16 |
+
| e2_hgate_b | 1785.2 | -186.8 | 84.9 | 14/9 | 12.04 | -66 | -568 / -130 / 0 | budget floor on top adds nothing |
|
| 17 |
+
| e2_nbud | 1875.5 | -96.5 | 62.2 | 11/10 | 10.67 | -66 | -211 / -87 / 0 | appetite-equivalent, not adopted |
|
| 18 |
+
| e2_a093 | 1908.9 | -63.1 | 33.8 | 16/23 | 10.23 | -62 | -192 / -45 / +3 | control (blanket alpha 0.93) |
|
| 19 |
+
| e2_nbud075 | 1933.2 | -38.9 | 39.2 | 8/7 | 9.75 | -72 | -42 / -45 / 0 | muted beta loses the big wins |
|
| 20 |
+
| e2_lsadd | 1938.6 | -33.4 | 29.1 | 14/19 | 11.21 | -17 | -40 / -46 / +46 | surrogate-EV adds < simple p_be rule |
|
| 21 |
+
| e2_opt | 1970.3 | -1.7 | 1.6 | 21/18 | 9.21 | — | +1 / -3 / +2 | day placement is CONVERGED |
|
| 22 |
+
| triage-only: e2_ls -4.7+/-76.8 (9.71 sw), e2_cvar -4.4+/-67.6 (8.47 sw), e2_ls_pmax +97.6+/-57.9 (7.71 sw) | | | | | | | | washes / harmful |
|
| 23 |
+
|
| 24 |
+
## Top candidate: e2_hgatez — hazard-gated break-even top-up
|
| 25 |
+
|
| 26 |
+
Rule (all plan-time observable): let r42 = fleet deaths RECORDED in (T-42d, T], zone42 = census of devices
|
| 27 |
+
currently below the 2.45V corrected threshold that crossed within the last 42d (telemetry <= T).
|
| 28 |
+
If max(r42, zone42) > sum(p42): open the break-even top-up p_be=0.2 (include every device with p42 >= 0.2).
|
| 29 |
+
Else: plan EXACTLY as champion. Fires at ~22/48 origins (warmup s_0-2 via zone42 — the ~34d recording lag
|
| 30 |
+
blinds r42 there; high-hazard panel eras s_4-16, s_18-23 via r42; NEVER at s_24-47 calm/near-end).
|
| 31 |
+
|
| 32 |
+
- -245.8 +/- 88.3, 17W/8L, swaps 11.96 (+2.75). Clears the survivor bar (2*SE = 177) despite the swap rise.
|
| 33 |
+
- Head-to-head vs pl_pbe20 (same p_be mechanism, always-on, -254.0 +/- 98.5, swaps 14.69): means statistically
|
| 34 |
+
identical (+8.3 +/- 44.6), hgatez better on 14 of 20 differing origins, lower per-origin std (612 vs 683),
|
| 35 |
+
2.7 fewer swaps/scenario, nearend swaps unchanged (16.7 = base) vs pbe20's 18.5.
|
| 36 |
+
- Where the gate closes, pbe20 is bimodal: it forfeits 2 big wins the gate misses (s_3 -979, s_17 -1374 — origins
|
| 37 |
+
where the COUNT was adequate but the RANKING was broken; not plan-time detectable) but avoids 14 losses
|
| 38 |
+
averaging +220 (calm origins where extra swaps caught nothing).
|
| 39 |
+
- Deployment asymmetry: at near-end (most deployment-like) origins the gate never fires — adopting it cannot
|
| 40 |
+
change the submission plan unless recorded arrivals demonstrably exceed the model's expected count at runtime.
|
| 41 |
+
It is a safety net, not a recalibration.
|
| 42 |
+
|
| 43 |
+
COORDINATION: e2_hgatez and pl_pbe20 are ONE mechanism family (gated vs always-on p_be) — adjudicate together,
|
| 44 |
+
never stack. If appetite-driven wins are distrusted (static appetite was publicly refuted historically), the
|
| 45 |
+
gated form is the defensible variant: swaps stay at champion level except under an observable hazard signal.
|
| 46 |
+
|
| 47 |
+
MULTIPLICITY: 10 full-48 planner variants were run; the gate signal was widened once (r42 -> max(r42, zone42))
|
| 48 |
+
after seeing full-48 results. p_be=0.2 itself was found independently by the pl agent. Selection bias is real;
|
| 49 |
+
the survivor margin (-245.8 vs bar -177) should be read with that in mind.
|
| 50 |
+
|
| 51 |
+
## Direction verdicts
|
| 52 |
+
|
| 53 |
+
A) SURROGATE-COST PLAN SEARCH: DEAD, with strong evidence. (i) Day placement/routing: 4x search effort
|
| 54 |
+
(restarts 8, iters 100, constructive start, NN routing) = -1.7 +/- 1.6 — the champion's optimize_days output is
|
| 55 |
+
~converged; no recoverable slack in WHEN/ORDER. (ii) Membership local search (drop/piggyback-add/new-group vs
|
| 56 |
+
surrogate expected cost with per-device emergency mobility, exact mobility deltas): wash (e2_ls -4.7 +/- 76.8);
|
| 57 |
+
add-only full-48 -33.4 +/- 29.1 with +2.0 swaps — strictly dominated by the simple p_be>=0.2 rule at the same
|
| 58 |
+
appetite; the drop pass is actively harmful (+97.6). EV membership decisions inherit p42-scale noise, exactly
|
| 59 |
+
the historical tspig failure, reconfirmed under the purge instrument. The champion planner is ~optimal given
|
| 60 |
+
its beliefs; ALL remaining planner upside is in the beliefs.
|
| 61 |
+
|
| 62 |
+
B) FLEET-LEVEL DEATH FORECAST: THE WINNER, but only as a GATE, not a budget. As a budget floor
|
| 63 |
+
(n = 0.8*max(sum_p42, r42)): -96.5 +/- 62.2 — real, but per-swap efficiency (-66) matches blanket appetite
|
| 64 |
+
(-58 to -62): targeting the count adds ~nothing because conversion of extra slots is governed by per-origin
|
| 65 |
+
ranking luck (s_8/s_9: late 2620->660, 2310->300; s_13/14/15: late UNCHANGED, pure waste). As a gate on the
|
| 66 |
+
p_be top-up it is the most efficient appetite form measured (-89/extra swap). Diagnostic that motivated it:
|
| 67 |
+
sum(p42) undercounts the arrival process at warmup (s_0: 2.0 vs 9 deaths) and mid-panel (s_15: 5.3, late 3210).
|
| 68 |
+
|
| 69 |
+
C) PORTFOLIO/CVaR SELECTION: DEAD. (i) Building-correlation premise falsified: marginal-zone (rank 8-40)
|
| 70 |
+
devices die at 0.129 with NO recent building deaths vs 0.105 WITH; std logit coef of building recent-deaths
|
| 71 |
+
0.05 vs p42's 0.57. Deaths do not cluster by building beyond p42. (ii) Count-matched reordering by expected
|
| 72 |
+
parked loss (p42 x early-death mass x 10/day + emergency-trip ops incl. travel/overtime): -4.4 +/- 67.6 wash —
|
| 73 |
+
the p42 order already carries the value signal; day-quantile noise on marginal devices eats the rest.
|
| 74 |
+
|
| 75 |
+
## Conclusion
|
| 76 |
+
|
| 77 |
+
The radical-pipeline premise "the planner leaks cost" is 3/4 refuted: WHEN, ORDER, and WHO-at-fixed-count are
|
| 78 |
+
all at (or within noise of) their optimum given the champion's predictions. The one real leak is WHO-at-what-
|
| 79 |
+
count in eras where the model's belief about fleet hazard is wrong, and the fleet's own death-arrival record
|
| 80 |
+
(r42 + zone census) detects exactly those eras at plan time. e2_hgatez converts that detection into -245.8
|
| 81 |
+
+/- 88.3 (12.5% of SCORE) at +2.75 swaps. Recommend adjudicating e2_hgatez vs pl_pbe20 as the two forms of the
|
| 82 |
+
same finding; prefer hgatez on variance, appetite, and deployment-asymmetry grounds.
|
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ft — new feature engineering (temporal-purge CV)
|
| 2 |
+
|
| 3 |
+
STATUS: DONE (last updated 2026-08-22 ~20:1x)
|
| 4 |
+
|
| 5 |
+
Baseline: champion logbag/base SCORE 1972.0, swaps 9.21. All rows paired per-scenario vs /tmp/cv_all48oof.csv.
|
| 6 |
+
Reference points from siblings: logbag_rank 1746.4 (-225.6), frontier logbag_rank+gbm-0.30 blend 1630.3 (-341.7).
|
| 7 |
+
|
| 8 |
+
## Results table (full-48 runs, sorted by delta vs champion 1972.0)
|
| 9 |
+
|
| 10 |
+
| label | ALL48 | delta | SE | W/L | swaps |
|
| 11 |
+
|---|---|---|---|---|---|
|
| 12 |
+
| ft_fr_ddown | 1675.0 | -297.0 | 101.6 | 34/13 | 9.29 |
|
| 13 |
+
| ft_fr_whit | 1748.9 | -223.1 | 84.9 | 32/15 | 9.15 |
|
| 14 |
+
| ft_rkw | 1758.3 | -213.7 | 68.8 | 34/13 | 8.92 |
|
| 15 |
+
| ft_fr_rwhit | 1782.3 | -189.7 | 81.9 | 31/16 | 8.96 |
|
| 16 |
+
| ft_rkwd | 1794.2 | -177.8 | 68.1 | 32/15 | 8.94 |
|
| 17 |
+
| ft_rwhit | 1922.7 | -49.3 | 41.0 | 29/19 | 8.96 |
|
| 18 |
+
| ft_rkw2 | 1931.5 | -40.6 | 37.3 | 26/19 | 8.96 |
|
| 19 |
+
| ft_rdip7 | 1961.9 | -10.1 | 28.4 | 24/17 | 9.27 |
|
| 20 |
+
| ft_dip7 | 1968.0 | -4.0 | 33.2 | 20/23 | 9.31 |
|
| 21 |
+
| ft_rddown | 1977.8 | +5.8 | 25.6 | 22/15 | 9.00 |
|
| 22 |
+
| ft_whit | 2015.1 | +43.1 | 39.2 | 18/30 | 9.44 |
|
| 23 |
+
| ft_wd | 2035.1 | +63.1 | 42.4 | 20/26 | 9.31 |
|
| 24 |
+
|
| 25 |
+
CRITICAL READING: the negative deltas in the top half are NOT my features — they are the r_vlast/r_tau rank pair and the gbm blend those configs sit on. The correct paired comparisons:
|
| 26 |
+
- ft_rkw vs logbag_rank alone: +11.9 SE 33.1 (30W/18L) — r_whit adds nothing significant.
|
| 27 |
+
- ft_fr_ddown vs frontier: +44.8 SE 25.7, 17W/28L — DEGRADES.
|
| 28 |
+
- ft_fr_whit vs frontier: +118.6 SE 48.9, 16W/32L — DEGRADES.
|
| 29 |
+
- ft_fr_rwhit vs frontier: +152.1 SE 42.3, 16W/31L — DEGRADES.
|
| 30 |
+
- ft_rkwd vs ft_rkw: r_dip7 costs ~36.
|
| 31 |
+
- ft_rkw2 (r_whit REPLACING r_tau): -40.6 vs champion — collapses from rkw's -213.7. r_tau is load-bearing; whit is no substitute.
|
| 32 |
+
|
| 33 |
+
## What each feature was
|
| 34 |
+
|
| 35 |
+
- whit: analytic Wiener 42d first-hit probability (staleness-conditioned inverse-Gaussian CDF from wnr_m/wnr_s2/v_corr_last, per-origin fleet-median shrinkage), fed as logit. r_whit = within-origin pct-rank.
|
| 36 |
+
- dip7: v_last - v_min_7 (recent dip). newlow: v_min_30 - v_min_life. ddown: drawdown from running max of temp-corrected V (raw rebuild).
|
| 37 |
+
- b250_60/b242_60: days below 2.50/2.42 V in last 60d (raw rebuild). readslope60: 60d slope of daily read count. macd: EWMA(10d)-EWMA(30d) momentum. divmm: min-vs-median slope divergence. All from a causal per-device rebuild of battery_metrics.parquet (/tmp/ft/rawfeat.parquet).
|
| 38 |
+
- cohort_overdue/rel_age: install-batch calibrated clock (already in table, never in FEATURES).
|
| 39 |
+
- ghost: (days_below_245>42 & v_corr_last<2.55) label-process ghost indicator; ft_gz = hard GHOST_ZERO.
|
| 40 |
+
|
| 41 |
+
## Triage graveyard (17 origins; cut, not confirmed)
|
| 42 |
+
|
| 43 |
+
cohort +20/+43, b250_60 +66 (5W/11L), obsr +75, stsl +52, b242_60 +7, readsl +2, fiterr +22, ghost +44, ghostv -22 (noise), GHOST_ZERO +533 (swaps 8.5->5.6, count rule gutted — phase-15 non-adoption emphatically confirmed under the purge; historical: never adopted).
|
| 44 |
+
|
| 45 |
+
## Structural findings worth keeping
|
| 46 |
+
|
| 47 |
+
1. Slot squatters vs wall misses (purged fits, 9 origins): the alive devices occupying top-12 ranks are largely label-process ghosts (median days_below_245=43, b250_60=24.5); the missed deaths at ranks 13-30 sit HIGHER in voltage (v_corr 2.479 vs 2.441, tau_projected 23 vs 9). BUT ghost-flagged devices still die at 19% (vs 29% non-ghost at same depth), so both demoting them (feature) and zeroing them (GHOST_ZERO) lose more late-swap than they free in slots. The squatter problem is real but not solvable by a ghost flag.
|
| 48 |
+
2. Rank transforms are the transfer device on this instrument: raw whit +43 -> r_whit -49 (same information, rank form). Confirms the sibling logbag_rank finding from the feature side.
|
| 49 |
+
3. Offline marginal-signal screens (AUC beyond v_last) DO NOT predict cost: b250_60 screened best (0.643) and hurt worst; the "extra signal" pointed at ghosts.
|
| 50 |
+
4. 17-origin even-panel triage can cut losers but cannot confirm winners: ft_whit read -71 on the subset and +43 on the full 48 (the full panel block alone flipped to +57).
|
| 51 |
+
|
| 52 |
+
## Conclusion / recommendation
|
| 53 |
+
|
| 54 |
+
NO FEATURE SURVIVOR. Recommend the frontier config UNCHANGED (logbag_rank + gbm-0.30, 1630.3) — every tested addition (whit raw/ranked, dip7, ddown, and by triage all others) is neutral-to-harmful on top of it. The champion's BASE_FEATURES remain fully distilled; the r_vlast/r_tau rank pair subsumes what my candidates offered.
|
| 55 |
+
|
| 56 |
+
Scripts: /tmp/ft/run.py (all variants), /tmp/ft/rawbuild.py (+ /tmp/ft/rawfeat.parquet).
|
| 57 |
+
CSVs: /tmp/cv_oofcand_ft_{whit,dip7,wd,rwhit,rdip7,rddown,rkw,rkwd,rkw2,fr_whit,fr_rwhit,fr_ddown}.csv; triage /tmp/ft/tri_ft_*.csv.
|
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# md — model families & hyperparameters — FINAL
|
| 2 |
+
|
| 3 |
+
STATUS: DONE 2026-08-22. Scripts: /tmp/md/runner.py, /tmp/md/mdmodels.py. Subset CSVs: /tmp/md/cv_sub_md_*.csv. Full-48 CSVs: /tmp/cv_oofcand_md_rank_c3_gbm30.csv, /tmp/cv_oofcand_md_c3.csv.
|
| 4 |
+
|
| 5 |
+
References: CHAMP = /tmp/cv_all48oof.csv (logbag, ALL48 1972.0, swaps 9.21). FRONTIER = /tmp/cv_oofcand_bl_lbr_gbm30.csv (logbag_rank + gbm@0.30, ALL48 1630.3, swaps 9.23).
|
| 6 |
+
|
| 7 |
+
## FULL-48 runs (the only numbers that count)
|
| 8 |
+
|
| 9 |
+
| label | ALL48 | delta vs champ | SE | W/L | delta vs frontier | SE | W/L | swaps |
|
| 10 |
+
|---|---|---|---|---|---|---|---|---|
|
| 11 |
+
| md_rank_c3_gbm30 (frontier w/ base C=3) | **1615.24** | -356.8 | 106.5 | 36/11 | -15.0 | 13.2 | 18/22 | 9.27 |
|
| 12 |
+
| md_c3 (champion w/ C=3) | 1965.24 | -6.8 | 4.9 | 9/8 | — | — | — | 9.19 |
|
| 13 |
+
|
| 14 |
+
**Verdict: no survivor past the 2-SE bar.** md_rank_c3_gbm30 is the best absolute number seen anywhere (1615.24, swaps flat) but its edge over the frontier is 1.1 SE with W/L against (mean carried by a few scenarios). Treat as an optional coin-flip tweak for the frontier owner, not an adoption. C=2 base behaves identically to C=3 (saturation); C<1 hurts everywhere.
|
| 15 |
+
|
| 16 |
+
## Key diagnostics (subset, 17 origins)
|
| 17 |
+
|
| 18 |
+
1. **The frontier's gbm blend increment is NON-MONOTONE response.** Replacing the gbm partner with a monotone-constrained HGB (voltage down = risk up etc., sklearn monotonic_cst) destroys the increment: conservative constraints +141.6±46.3 vs frontier (W3/L12), aggressive +268.5±71.8. Whatever the gbm adds — real interactions or same-battery flattery — it is exactly the part a monotone GBM cannot express.
|
| 19 |
+
2. **The frontier's partner params are locally optimal on every axis tested**: depth 2 (+54), depth 4 (+156), iters 100 (+23), iters 400@lr.05 (+129), leaf 50 (+112).
|
| 20 |
+
3. **gbm is uniquely the right partner family**: ExtraTrees partner +101±61 (W4/L13), RandomForest partner +69±74 (W4/L12), all at weight 0.30.
|
| 21 |
+
4. **Calibration is appetite in disguise and NOT additive to the frontier.** On champion base: calbag_sig -165±86, cal_iso -88±74, logcal -107±79 — all with swaps +2.0-2.1 and W/L ~even. Calibrated frontier base + gbm blend: -0.6±62 vs frontier (wash) with swaps 10.41 vs 8.29. The calibrated count buys nothing the frontier ordering hasn't already banked.
|
| 22 |
+
5. **Champion hyperparameter plateau confirmed**: bags 15 optimal (5 flat; 30/60 +39/+44), impute median > mean (+42), scaler required (removal = noisy wash, 8x slower), L1 wash (+15±46), elasticnet skipped (bracketed by L2=0 and L1=wash), poly2 interactions worse (+34 to +141), class_weight=balanced catastrophic (+2829, swaps 63.7 — count channel explodes), MLP noise (-55±143), DayQuantiles depth/trees noise.
|
| 23 |
+
6. Standalone flexible families (flagged: flexible-family purge flattery, and none approach the frontier): xtrees -160±104, rf leaf2 -171±129 (swaps +1.2), rf leaf10 -114±126 (swaps +0.9), hgb_mono +88±167.
|
| 24 |
+
|
| 25 |
+
## Recommendation
|
| 26 |
+
|
| 27 |
+
Frontier (logbag_rank + gbm@0.30, C=1, bags=15, gbm defaults) stands. Its hyperparameters are already at a local optimum on every axis this lane tested. If the frontier owner wants a free coin-flip: base C=3 (full-48 1615.24, -15.0±13.2) — flat swaps, no protocol change, but not statistically earned.
|
|
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# PL agent - planner/scheduling/day-placement/routing sweep (purge CV)
|
| 2 |
+
|
| 3 |
+
STATUS: DONE — all planned runs complete (last updated 2026-08-22 16:37:26)
|
| 4 |
+
|
| 5 |
+
Baseline: champion SCORE 1972.01 (warmup 3560.3 / panel 1839.6 / nearend 604.8; swaps 9.21).
|
| 6 |
+
Paired per scenario vs /tmp/cv_all48oof.csv. Survivor bar: delta < -2*SE.
|
| 7 |
+
Appetite axis REOPENED by user for this sweep (historical public results noted).
|
| 8 |
+
|
| 9 |
+
Code findings (pre-run):
|
| 10 |
+
- CHAMPION['day_q'] is DEAD for tsroute (signature-only); day placement = cost_curves + optimize_days.
|
| 11 |
+
- run_all48_oof hardcodes p_be=0/floor_day=0/p_conf=0.5 -> tested via call-time wrapper (identity check: delta exactly 0.0).
|
| 12 |
+
- Planner EARLY/LATE 0.5/10.0 match evaluator exactly (20:1). EMERGENCY_DAY=45 vs true queue ~48.
|
| 13 |
+
|
| 14 |
+
## Results (sorted by delta; wu=warmup s0-7, pn=panel s8-41, ne=nearend s42-47)
|
| 15 |
+
|
| 16 |
+
| label | ALL48 | delta | SE | W/L | swaps | wu delta | pn delta | ne delta |
|
| 17 |
+
|---|---|---|---|---|---|---|---|---|
|
| 18 |
+
| pl_stack_hgatez | 1559.4 | -412.6 | 106.9 | 39W/9L | 11.7 | -1513 | -209 | -98 |
|
| 19 |
+
| pl_stack_hg25 | 1586.6 | -385.4 | 106.5 | 37W/11L | 10.6 | -1458 | -183 | -101 |
|
| 20 |
+
| pl_stack_hg30 | 1592.2 | -379.8 | 104.6 | 36W/12L | 9.9 | -1345 | -202 | -101 |
|
| 21 |
+
| pl_stack_shiftp4 | 1614.0 | -358.0 | 102.9 | 37W/11L | 9.2 | -1296 | -173 | -156 |
|
| 22 |
+
| pl_stack_shiftp2 | 1617.3 | -354.7 | 99.3 | 37W/11L | 9.2 | -1257 | -181 | -136 |
|
| 23 |
+
| pl_stack_shiftp6 | 1619.7 | -352.4 | 102.6 | 37W/11L | 9.3 | -1287 | -169 | -145 |
|
| 24 |
+
| pl_stack_hg15 | 1620.8 | -351.2 | 113.9 | 35W/13L | 13.5 | -1481 | -132 | -87 |
|
| 25 |
+
| pl_stack_base | 1630.3 | -341.7 | 103.8 | 37W/11L | 9.2 | -1284 | -163 | -101 |
|
| 26 |
+
| pl_pbe10g8 | 1670.4 | -301.6 | 128.0 | 12W/9L | 15.1 | -1708 | -31 | +39 |
|
| 27 |
+
| pl_pbe20g10 | 1673.7 | -298.3 | 93.2 | 21W/14L | 13.2 | -975 | -192 | +3 |
|
| 28 |
+
| pl_pbe15g8 | 1693.9 | -278.1 | 103.3 | 11W/10L | 12.7 | -1275 | -94 | +8 |
|
| 29 |
+
| pl_pbe20 | 1718.0 | -254.0 | 98.5 | 22W/21L | 14.7 | -975 | -132 | +14 |
|
| 30 |
+
| pl_pbe15 | 1735.6 | -236.4 | 130.9 | 18W/30L | 18.7 | -1473 | +3 | +55 |
|
| 31 |
+
| pl_stack_hg10 | 1735.7 | -236.3 | 130.4 | 30W/18L | 16.2 | -1564 | +48 | -75 |
|
| 32 |
+
| pl_pbe20g8 | 1755.2 | -216.8 | 81.5 | 12W/6L | 11.2 | -871 | -101 | +0 |
|
| 33 |
+
| pl_a15 | 1770.1 | -201.9 | 91.7 | 18W/25L | 14.7 | -887 | -81 | +27 |
|
| 34 |
+
| pl_a12 | 1798.1 | -173.9 | 72.5 | 22W/18L | 12.2 | -619 | -102 | +11 |
|
| 35 |
+
| pl_pbe30 | 1802.4 | -169.7 | 58.0 | 17W/10L | 10.8 | -598 | -99 | +3 |
|
| 36 |
+
| pl_pbe10 | 1849.1 | -122.9 | 164.5 | 16W/32L | 25.4 | -1870 | +236 | +170 |
|
| 37 |
+
| pl_pbe30g8 | 1854.4 | -117.6 | 42.9 | 9W/3L | 9.8 | -504 | -47 | +0 |
|
| 38 |
+
| pl_a10 | 1878.8 | -93.2 | 43.7 | 19W/20L | 10.8 | -269 | -69 | +7 |
|
| 39 |
+
| pl_a09 | 1896.0 | -76.0 | 33.1 | 14W/22L | 10.0 | -192 | -63 | +3 |
|
| 40 |
+
| pl_shiftp4 | 1958.8 | -13.2 | 9.4 | 22W/25L | 9.2 | -2 | -9 | -54 |
|
| 41 |
+
| pl_shift2 | 1964.7 | -7.3 | 9.4 | 21W/27L | 9.3 | -1 | -1 | -50 |
|
| 42 |
+
| pl_ec06 | 1968.8 | -3.2 | 11.1 | 7W/1L | 8.7 | +0 | +5 | -55 |
|
| 43 |
+
| pl_sd3 | 1975.7 | +3.7 | 2.4 | 12W/11L | 9.2 | +0 | +2 | +15 |
|
| 44 |
+
| pl_blend30 | 1977.6 | +5.5 | 4.7 | 13W/28L | 9.2 | -0 | +7 | +7 |
|
| 45 |
+
| pl_ed48 | 1978.0 | +6.0 | 4.2 | 1W/6L | 9.5 | +0 | +4 | +27 |
|
| 46 |
+
| pl_sec5 | 1980.8 | +8.8 | 39.7 | 12W/25L | 11.5 | -170 | +49 | +18 |
|
| 47 |
+
| pl_ec10 | 1991.2 | +19.2 | 8.2 | 1W/7L | 10.5 | +0 | +6 | +120 |
|
| 48 |
+
| pl_ec00 | 2016.2 | +44.2 | 27.5 | 3W/5L | 7.6 | +0 | +14 | +273 |
|
| 49 |
+
| pl_ec12 | 2019.8 | +47.8 | 16.8 | 0W/8L | 12.0 | +0 | +25 | +240 |
|
| 50 |
+
| pl_pig10 | 2024.0 | +52.0 | 27.6 | 11W/31L | 8.7 | -43 | +51 | +187 |
|
| 51 |
+
| pl_a07 | 2043.9 | +71.9 | 31.3 | 19W/13L | 8.5 | +306 | +30 | -2 |
|
| 52 |
+
| pl_a06 | 2110.8 | +138.8 | 50.2 | 19W/20L | 7.8 | +475 | +85 | -3 |
|
| 53 |
+
|
| 54 |
+
## Candidate log
|
| 55 |
+
|
| 56 |
+
- pl_stack_hgatez: stack + e2 census-gated p_be=0.2 (SHIPPING CANDIDATE; gate marginal -70.8 +/-42.4 vs stack_base) -> -412.6 +/-106.9 [wu -1513 (8W/0L), pn -209 (25W/9L), ne -98], swaps 11.7. SURVIVOR (beats 2SE bar). CAVEAT: swaps 11.7 vs 9.2 - appetite-driven; check block attribution.
|
| 57 |
+
- pl_stack_hg25: stack + census-gated p_be=0.25 -> -385.4 +/-106.5 [wu -1458 (8W/0L), pn -183 (23W/11L), ne -101], swaps 10.6. SURVIVOR (beats 2SE bar). CAVEAT: swaps 10.6 vs 9.2 - appetite-driven; check block attribution.
|
| 58 |
+
- pl_stack_hg30: stack + census-gated p_be=0.3 -> -379.8 +/-104.6 [wu -1345 (8W/0L), pn -202 (22W/12L), ne -101], swaps 9.9. SURVIVOR (beats 2SE bar).
|
| 59 |
+
- pl_stack_shiftp4: stack + risk-scaled belief shift 4*p42 d earlier -> -358.0 +/-102.9 [wu -1296 (8W/0L), pn -173 (23W/11L), ne -156], swaps 9.2. SURVIVOR (beats 2SE bar).
|
| 60 |
+
- pl_stack_shiftp2: stack + risk-scaled belief shift 2*p42 d earlier (swap-neutral timing) -> -354.7 +/-99.3 [wu -1257 (8W/0L), pn -181 (23W/11L), ne -136], swaps 9.2. SURVIVOR (beats 2SE bar).
|
| 61 |
+
- pl_stack_shiftp6: stack + risk-scaled belief shift 6*p42 d earlier -> -352.4 +/-102.6 [wu -1287 (7W/1L), pn -169 (24W/10L), ne -145], swaps 9.3. SURVIVOR (beats 2SE bar).
|
| 62 |
+
- pl_stack_hg15: stack + census-gated p_be=0.15 -> -351.2 +/-113.9 [wu -1481 (7W/1L), pn -132 (22W/12L), ne -87], swaps 13.5. SURVIVOR (beats 2SE bar). CAVEAT: swaps 13.5 vs 9.2 - appetite-driven; check block attribution.
|
| 63 |
+
- pl_stack_base: MODEL FRONTIER logbag_rank + gbm rank-blend w=0.30 (cached preds; replication of model agent 1630.3) -> -341.7 +/-103.8 [wu -1284 (8W/0L), pn -163 (23W/11L), ne -101], swaps 9.2. SURVIVOR (beats 2SE bar).
|
| 64 |
+
- pl_pbe10g8: p_be=0.1 gated N<8 (warmup-only strong top-up) -> -301.6 +/-128.0 [wu -1708 (7W/0L), pn -31 (5W/7L), ne +39], swaps 15.1. SURVIVOR (beats 2SE bar). CAVEAT: swaps 15.1 vs 9.2 - appetite-driven; check block attribution.
|
| 65 |
+
- pl_pbe20g10: p_be=0.2 gated N<10 -> -298.3 +/-93.2 [wu -975 (7W/0L), pn -192 (14W/13L), ne +3], swaps 13.2. SURVIVOR (beats 2SE bar). CAVEAT: swaps 13.2 vs 9.2 - appetite-driven; check block attribution.
|
| 66 |
+
- pl_pbe15g8: p_be=0.15 gated N<8 -> -278.1 +/-103.3 [wu -1275 (6W/1L), pn -94 (5W/7L), ne +8], swaps 12.7. SURVIVOR (beats 2SE bar). CAVEAT: swaps 12.7 vs 9.2 - appetite-driven; check block attribution.
|
| 67 |
+
- pl_pbe20: break-even prob top-up p_be=0.2 (include all p42>=0.2 beyond count rule) -> -254.0 +/-98.5 [wu -975 (7W/0L), pn -132 (15W/19L), ne +14], swaps 14.7. SURVIVOR (beats 2SE bar). CAVEAT: swaps 14.7 vs 9.2 - appetite-driven; check block attribution.
|
| 68 |
+
- pl_pbe15: p_be=0.15 top-up -> -236.4 +/-130.9 [wu -1473 (7W/1L), pn +3 (11W/23L), ne +55], swaps 18.7. inconclusive (negative, inside 2SE). CAVEAT: swaps 18.7 vs 9.2 - appetite-driven; check block attribution.
|
| 69 |
+
- pl_stack_hg10: stack + census-gated p_be=0.1 -> -236.3 +/-130.4 [wu -1564 (7W/1L), pn +48 (18W/16L), ne -75], swaps 16.2. inconclusive (negative, inside 2SE). CAVEAT: swaps 16.2 vs 9.2 - appetite-driven; check block attribution.
|
| 70 |
+
- pl_pbe20g8: p_be=0.2 gated: fires only when count-rule N<8 (starvation gate, deployable) -> -216.8 +/-81.5 [wu -871 (6W/0L), pn -101 (6W/6L), ne +0], swaps 11.2. SURVIVOR (beats 2SE bar). CAVEAT: swaps 11.2 vs 9.2 - appetite-driven; check block attribution.
|
| 71 |
+
- pl_a15: appetite alpha=1.5 (historical public: 2188.78 vs 1661.45) -> -201.9 +/-91.7 [wu -887 (7W/1L), pn -81 (11W/20L), ne +27], swaps 14.7. SURVIVOR (beats 2SE bar). CAVEAT: swaps 14.7 vs 9.2 - appetite-driven; check block attribution.
|
| 72 |
+
- pl_a12: appetite alpha=1.2 -> -173.9 +/-72.5 [wu -619 (7W/0L), pn -102 (15W/16L), ne +11], swaps 12.2. SURVIVOR (beats 2SE bar). CAVEAT: swaps 12.2 vs 9.2 - appetite-driven; check block attribution.
|
| 73 |
+
- pl_pbe30: p_be=0.3 top-up -> -169.7 +/-58.0 [wu -598 (7W/0L), pn -99 (10W/9L), ne +3], swaps 10.8. SURVIVOR (beats 2SE bar). CAVEAT: swaps 10.8 vs 9.2 - appetite-driven; check block attribution.
|
| 74 |
+
- pl_pbe10: p_be=0.1 top-up -> -122.9 +/-164.5 [wu -1870 (8W/0L), pn +236 (8W/26L), ne +170], swaps 25.4. inconclusive (negative, inside 2SE). CAVEAT: swaps 25.4 vs 9.2 - appetite-driven; check block attribution.
|
| 75 |
+
- pl_pbe30g8: p_be=0.3 gated N<8 -> -117.6 +/-42.9 [wu -504 (6W/0L), pn -47 (3W/3L), ne +0], swaps 9.8. SURVIVOR (beats 2SE bar).
|
| 76 |
+
- pl_a10: appetite alpha=1.0 -> -93.2 +/-43.7 [wu -269 (6W/1L), pn -69 (13W/18L), ne +7], swaps 10.8. SURVIVOR (beats 2SE bar). CAVEAT: swaps 10.8 vs 9.2 - appetite-driven; check block attribution.
|
| 77 |
+
- pl_a09: appetite alpha=0.9 -> -76.0 +/-33.1 [wu -192 (4W/2L), pn -63 (10W/19L), ne +3], swaps 10.0. SURVIVOR (beats 2SE bar).
|
| 78 |
+
- pl_shiftp4: risk-scaled shift: quantiles 4*p42 days earlier (high risk -> earlier) -> -13.2 +/-9.4 [wu -2 (3W/4L), pn -9 (16W/18L), ne -54], swaps 9.2. inconclusive (negative, inside 2SE).
|
| 79 |
+
- pl_shift2: belief shift: all day-quantiles 2d earlier, optimizer re-solves -> -7.3 +/-9.4 [wu -1 (3W/5L), pn -1 (14W/20L), ne -50], swaps 9.3. inconclusive (negative, inside 2SE).
|
| 80 |
+
- pl_ec06: ec_margin=0.6 -> -3.2 +/-11.1 [wu +0 (0W/0L), pn +5 (2W/1L), ne -55], swaps 8.7. inconclusive (negative, inside 2SE).
|
| 81 |
+
- pl_sd3: split_days=3 -> +3.7 +/-2.4 [wu +0 (0W/0L), pn +2 (12W/7L), ne +15], swaps 9.2. reject (worse).
|
| 82 |
+
- pl_blend30: cost_curves blend=0.3 (low-p42 CDF toward uniform) -> +5.5 +/-4.7 [wu -0 (4W/3L), pn +7 (8W/20L), ne +7], swaps 9.2. reject (worse).
|
| 83 |
+
- pl_ed48: EMERGENCY_DAY=48 exact queue price (champion 45) -> +6.0 +/-4.2 [wu +0 (0W/0L), pn +4 (1W/2L), ne +27], swaps 9.5. reject (worse).
|
| 84 |
+
- pl_sec5: second-chance: ranks N+1..N+5 piggyback on already-visited buildings (marginal travel ~0) -> +8.8 +/-39.7 [wu -170 (4W/1L), pn +49 (8W/21L), ne +18], swaps 11.5. reject (worse).
|
| 85 |
+
- pl_ec10: ec_margin=1.0 -> +19.2 +/-8.2 [wu +0 (0W/0L), pn +6 (1W/2L), ne +120], swaps 10.5. reject (worse).
|
| 86 |
+
- pl_ec00: ec_margin=0 (EV top-up off; champion 0.8) -> +44.2 +/-27.5 [wu +0 (0W/0L), pn +14 (1W/2L), ne +273], swaps 7.6. reject (worse).
|
| 87 |
+
- pl_ec12: ec_margin=1.2 -> +47.8 +/-16.8 [wu +0 (0W/0L), pn +25 (0W/3L), ne +240], swaps 12.0. reject (worse).
|
| 88 |
+
- pl_pig10: plan_tspig2 alpha2=1.0 rank-gated piggyback planner -> +52.0 +/-27.6 [wu -43 (2W/2L), pn +51 (7W/25L), ne +187], swaps 8.7. reject (worse).
|
| 89 |
+
- pl_a07: appetite alpha=0.7 -> +71.9 +/-31.3 [wu +306 (1W/5L), pn +30 (17W/8L), ne -2], swaps 8.5. reject (worse).
|
| 90 |
+
- pl_a06: appetite alpha=0.6 -> +138.8 +/-50.2 [wu +475 (1W/6L), pn +85 (17W/14L), ne -3], swaps 7.8. reject (worse).
|
| 91 |
+
|
| 92 |
+
## Conclusion (final, 2026-08-22 16:37)
|
| 93 |
+
|
| 94 |
+
35 full-48 paired runs, zero peer file races (module md5 pinned start/end), identity
|
| 95 |
+
check of the wrapper reproduced baseline exactly (delta 0.0).
|
| 96 |
+
|
| 97 |
+
### 1. The purge CV's appetite direction is ANTI-correlated with the public leaderboard
|
| 98 |
+
alpha curve on purge: 0.6 +138.8 / 0.7 +71.9 / 0.8 base / 0.9 -76.0 / 1.0 -93.2 /
|
| 99 |
+
1.2 -173.9 / 1.5 -201.9 — monotone down. Public measured alpha 1.5 at 2188.78 vs
|
| 100 |
+
1661.45 (+527). Same for cert-first (wd agent). Count-coupled purge wins are
|
| 101 |
+
REPORT-ONLY per coordination ruling; every p_be / gated-p_be / alpha "survivor" in
|
| 102 |
+
the table above carries that tag. Mechanically the purge starves models (warmup
|
| 103 |
+
hardest, panel too), so optimal appetite shifts up — an instrument property, not a
|
| 104 |
+
deployable insight.
|
| 105 |
+
|
| 106 |
+
### 2. p_be break-even top-up: biggest purge lever, warmup-concentrated, count-coupled
|
| 107 |
+
Ungated p_be: 0.1 -122.9 (25.4 swaps) / 0.15 -236.4 (18.7) / 0.2 -254.1 (14.7) /
|
| 108 |
+
0.3 -169.7 (10.8); peak 0.2. Gains concentrate at warmup (pbe20: wu -975 7W/0L,
|
| 109 |
+
panel wash at +6.3 swaps). Two gate triggers compared at p_be=0.2: e2's arrival
|
| 110 |
+
census (-245.8 +/-88.3, 11.96 swaps) vs my count-rule N<8 (-216.8 +/-81.5, 11.19) —
|
| 111 |
+
statistically equivalent; N<10 gate -298.3 +/-93.2 (13.2 swaps; gate width tuned
|
| 112 |
+
in-sample, discount accordingly).
|
| 113 |
+
|
| 114 |
+
### 3. Full stack (logbag_rank+gbm30 x census-gated p_be): holds on purge, gate part is report-only
|
| 115 |
+
stack_base replicates 1630.26 exactly. stack+hgatez = 1559.4 (-412.6 +/-106.9 vs
|
| 116 |
+
champion), p_be=0.2 optimal under the gate (0.1 -236 / 0.15 -351 / 0.2 -413 /
|
| 117 |
+
0.25 -385 / 0.3 -380). BUT the gate's paired MARGINAL on the frontier is only
|
| 118 |
+
-70.8 +/-42.4 (wu -229 +/-150, panel -46.6 +/-47.7 at +3.2 swaps) — fails the
|
| 119 |
+
"panel gain at flat swaps" shipping bar. The frontier model itself already repairs
|
| 120 |
+
most of the warmup undercount (its warmup swaps 9.9 vs champion 5.0). Verdict:
|
| 121 |
+
ship the ordering-only frontier; the gate is report-only.
|
| 122 |
+
|
| 123 |
+
### 4. Day placement: converged except one weak, swap-neutral lever
|
| 124 |
+
- ed48 +6.0 / sd3 +3.7 / blend30 +5.6 / global shift2 -7.3: all noise or reject —
|
| 125 |
+
champion pricing/routing/split confirmed optimal under purge.
|
| 126 |
+
- RISK-SCALED belief shift (quantiles k*p42 days earlier): champion model
|
| 127 |
+
shiftp4 -13.2 +/-9.4 (swaps 9.23, exactly flat); frontier model marginal
|
| 128 |
+
shiftp2 -12.9 +/-10.7, shiftp4 -16.3 +/-10.9, shiftp6 -10.6 +/-12.9 (swaps flat
|
| 129 |
+
9.25). Reproducible sign and size across two independent prediction sets, peak
|
| 130 |
+
k=4, never crosses 2SE individually. The ONLY swap-neutral candidate in my lane
|
| 131 |
+
with any signal. Recommend: cheap public A/B alongside the frontier if there is
|
| 132 |
+
submission budget; otherwise drop.
|
| 133 |
+
|
| 134 |
+
### 5. Piggyback / second-chance: dead on the purge CV too
|
| 135 |
+
sec5 (ranks N+1..N+5 into visited buildings at ~zero marginal travel) +8.8 +/-39.7
|
| 136 |
+
12W/26L; tspig2 alpha2=1.0 +52.0 +/-27.6. Matches the historical "even zero-travel
|
| 137 |
+
extras lose". Closed.
|
| 138 |
+
|
| 139 |
+
### Top recommendation
|
| 140 |
+
No planner-side change qualifies for shipping on its own. The one candidate worth
|
| 141 |
+
carrying forward is pl_stack_shiftp4 (frontier model + risk-scaled 4*p42-day
|
| 142 |
+
earlier placement): purge 1614.0 vs frontier 1630.3, swap-neutral, reproducible
|
| 143 |
+
across model bases, sub-2SE — A/B-only. Everything count-coupled (p_be family,
|
| 144 |
+
alpha, gates incl. the -412.6 stack+hgatez) is report-only per the calibration
|
| 145 |
+
ruling; the purge CV cannot adjudicate count changes.
|
| 146 |
+
|
| 147 |
+
Artifacts: /tmp/pl/run.py (knob/wrapper driver), /tmp/pl/stack.py,
|
| 148 |
+
/tmp/pl/stack_shift.py, /tmp/pl/blocks.py, /tmp/pl/update_report.py,
|
| 149 |
+
CSVs /tmp/cv_oofcand_pl_*.csv (one per row above), log /tmp/pl/results.txt.
|
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# rk — learning-to-rank (value-preserving order injection) — FINAL
|
| 2 |
+
|
| 3 |
+
STATUS: DONE — no rk survivor over the current frontier. Last updated 2026-08-22 18:25
|
| 4 |
+
|
| 5 |
+
Method: pairwise/listwise rankers supply the ORDER, the base model supplies the
|
| 6 |
+
p42 VALUES via cv.run_all48_oof(blend=('rk_r', w)). Within-origin (dying,
|
| 7 |
+
surviving) pairs, hard-negative mining (top-40 survivors by prelim pointwise
|
| 8 |
+
score + 10 random per death), 3-seed rank-bagged torch MLP(16); ListNet
|
| 9 |
+
(listwise softmax CE per origin, days-to-death gain) variant; linear PairLogit
|
| 10 |
+
variant. Code: /tmp/rk/rk_models.py, runner /tmp/rk/run_cost.py.
|
| 11 |
+
|
| 12 |
+
## Full-48 results (paired vs /tmp/cv_all48oof.csv champion baseline 1972.0)
|
| 13 |
+
|
| 14 |
+
| label | ALL48 | delta | SE | W/L | swaps |
|
| 15 |
+
|---|---|---|---|---|---|
|
| 16 |
+
| rk_lbr_trbag3r_b50 | 1729.0 | -243.0 | 104.9 | 30/18 | 9.29 |
|
| 17 |
+
| rk_lbr_trbag3r_b25 | 1750.0 | -222.0 | 98.0 | 31/17 | 9.29 |
|
| 18 |
+
| rk_trbag3_b25 | 1957.0 | -15.0 | 36.5 | 20/23 | 9.23 |
|
| 19 |
+
| rk_comb_b25 | 1971.9 | -0.1 | 28.0 | 19/19 | 9.31 |
|
| 20 |
+
| rk_lnbag3g2_b25 | 1974.3 | +2.3 | 24.0 | 17/22 | 9.29 |
|
| 21 |
+
| rk_trbag3_b50 | 1985.7 | +13.7 | 54.6 | 17/30 | 9.25 |
|
| 22 |
+
|
| 23 |
+
(rk_lbr_* rows: base kind='logbag_rank', ranker trained WITH r_vlast/r_tau.
|
| 24 |
+
CSVs: /tmp/cv_oofcand_rk_*.csv. Baseline swaps 9.21 — all rows count-flat.)
|
| 25 |
+
|
| 26 |
+
## Head-to-head vs the frontier (bl_lbr_gbm30 = logbag_rank + gbm@0.30, 1630.3)
|
| 27 |
+
|
| 28 |
+
- rk_lbr_trbag3r_b25 vs bl_lbr_gbm30: +119.8 SE 42.9, W/L 17/27 (worse on
|
| 29 |
+
every block: warmup +165, panel +130).
|
| 30 |
+
- rk_lbr_trbag3r_b50 vs bl_lbr_gbm30: +98.8 SE 58.0, W/L 15/33.
|
| 31 |
+
- VERDICT: the learned pairwise order LOSES to the gbm order as blend partner
|
| 32 |
+
on the same base. Do not adopt any rk candidate.
|
| 33 |
+
|
| 34 |
+
## What was learned (transferable)
|
| 35 |
+
|
| 36 |
+
1. Ordering diagnostics improve but do not convert: rec13 .651 -> .689
|
| 37 |
+
(RankNet bag3 b25) / .704 (ListNet g2 b25) on 62 deaths, yet panel cost
|
| 38 |
+
stayed flat-to-worse in every run. Phase-47's lesson replicated on the
|
| 39 |
+
temporal-purge instrument: head-ordering gains are eaten in conversion.
|
| 40 |
+
2. The ranker's value concentrates EXACTLY where the base is data-starved:
|
| 41 |
+
on the champion base, warmup late_swap -161/origin (b25, 4W/0L) deepening
|
| 42 |
+
to -213 at b50, while panel worsened +20 -> +66. Clean two-sided dose-
|
| 43 |
+
response; a fixed global blend weight cannot win on the champion base.
|
| 44 |
+
The bl lane's logbag_rank+gbm30 (warmup -1284) hit the same vein harder.
|
| 45 |
+
3. Single-seed torch rankers are unstable (one seed fell below champion);
|
| 46 |
+
3-seed rank-bagging fixed it. Any future torch ranker should seed-bag.
|
| 47 |
+
4. Pure ranker order (no blend) is far worse than champion (rec13 .502
|
| 48 |
+
RankNet, .676 ListNet standalone) — all value is in the hybrid.
|
| 49 |
+
5. Cross-origin pairs add nothing over within-origin (diag .651 vs .665).
|
| 50 |
+
6. RankNet and ListNet deltas correlate only 0.43, but rank-averaging them
|
| 51 |
+
diluted wins to 0.0 rather than uniting them.
|
| 52 |
+
7. Post-hoc gated splice (ranker only on warmup, w=0 elsewhere): -28.0
|
| 53 |
+
SE 18.8 (b25). Not claimed: gate threshold chosen after seeing the wins,
|
| 54 |
+
no natural cliff in the gate signal (past-side pool grows smoothly
|
| 55 |
+
18k->66k pairs). Recorded only.
|
| 56 |
+
|
| 57 |
+
## Artifacts
|
| 58 |
+
- /tmp/rk/rk_models.py (PairLogit, TorchRankNet, TorchListNet)
|
| 59 |
+
- /tmp/rk/run_cost.py (runner; RK_EXTRA env adds ranker-only features)
|
| 60 |
+
- /tmp/rk/diag_rank.py, diag_seeds.py, diag_listnet.py + CSVs in /tmp/rk/
|
| 61 |
+
- /tmp/cv_oofcand_rk_{trbag3_b25,trbag3_b50,lnbag3g2_b25,comb_b25,lbr_trbag3r_b25,lbr_trbag3r_b50}.csv
|
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# sv — Full survival curves + decision-theoretic visit-day planning
|
| 2 |
+
|
| 3 |
+
STATUS: DONE. Two of the three radical axes REFUTED with clean attribution;
|
| 4 |
+
one survivor-shaped composite: sv_dhgate (cold-start-gated censored-pool
|
| 5 |
+
hazard) = -51.4 +/- 22.1 (-2.33 SE), swaps 9.23 vs 9.21 (flat).
|
| 6 |
+
|
| 7 |
+
Theme: replace (a) single-horizon p42 with censoring-aware full survival
|
| 8 |
+
curves S(t), t=1..42, and (b) the 0.8*sum(p42) count rule with per-device
|
| 9 |
+
expected-cost economics. Protocol: exact copy of cv.run_all48_oof loop
|
| 10 |
+
(temporal purge, full-fleet, floor off); harness copy verified byte-identical
|
| 11 |
+
to champion baseline. Baseline /tmp/cv_all48oof.csv (champion 1972.0/9.21sw).
|
| 12 |
+
|
| 13 |
+
## Results — FULL-48 (paired, n=48)
|
| 14 |
+
|
| 15 |
+
| label | ALL48 | delta | SE | W/L | swaps |
|
| 16 |
+
|---|---|---|---|---|---|
|
| 17 |
+
| sv_dhgate | 1920.6 | -51.4 | 22.1 | 7/1 (8 active) | 9.23 |
|
| 18 |
+
| sv_dhr_vp | 1932.4 | -39.6 | 58.3 | 25/20 | 9.33 |
|
| 19 |
+
| sv_dhr_who | 1937.5 | -34.5 | 88.2 | 28/20 | 9.04 |
|
| 20 |
+
| sv_dh_who | 1951.1 | -20.9 | 43.8 | 24/24 | 9.31 |
|
| 21 |
+
| sv_lb_ec | 1967.5 | -4.5 | 47.0 | 19/26 | 13.17 |
|
| 22 |
+
| sv_dhrb_vp | 1989.6 | +17.6 | 52.0 | 22/17 | 9.27 |
|
| 23 |
+
|
| 24 |
+
- sv_dhgate: gate at fit time on past_uniq_pos = unique dead devices among
|
| 25 |
+
PAST-side purged closed pairs; < 20 -> DTHazFine (3d-bucket discrete-time
|
| 26 |
+
hazard on the censored pool), else champion logbag. Planner untouched.
|
| 27 |
+
Gate fires at exactly s_0-7 (past_uniq_pos 3..16; s_8 = 20). 20 is
|
| 28 |
+
CHAMPION['floor_gate'], not tuned here. Blocks: warmup 3251.8 (-308.6,
|
| 29 |
+
7W/1L), panel 1839.6 (=champion), nearend 604.8 (=champion).
|
| 30 |
+
End-to-end boundary run s_5-s_10 verified byte-exact vs composition.
|
| 31 |
+
- sv_dh_who: hazard everywhere. Warmup -308.6 / panel +43.8 / nearend -4.4.
|
| 32 |
+
The hazard is a cold-start specialist, slightly worse than logbag when
|
| 33 |
+
the past side is rich.
|
| 34 |
+
- sv_dhr_who / sv_dhr_vp: + within-origin rank features (r_vlast/r_tau);
|
| 35 |
+
triage promise (-107) did not survive the full panel (+4.4/+5.6); s_2
|
| 36 |
+
blowup +2150 in the un-remapped form. Value-preserving control shows the
|
| 37 |
+
panel ordering gain was noise.
|
| 38 |
+
- sv_lb_ec (decision-theoretic COUNT: visit iff min-day expected cost <
|
| 39 |
+
park): -4.5 at swaps 13.17 (+4 appetite), nearend +171.2 (0W/6L).
|
| 40 |
+
REFUTED — see appetite calibration below.
|
| 41 |
+
- sv_dhrb_vp (50/50 rank blend logbag+hazard, value-preserving): +17.6. No
|
| 42 |
+
committee effect.
|
| 43 |
+
|
| 44 |
+
## Results — triage (origins 8..40 step 2, n=17, paired)
|
| 45 |
+
|
| 46 |
+
| label | T17 mean | delta | SE | W/L | swaps |
|
| 47 |
+
|---|---|---|---|---|---|
|
| 48 |
+
| sv_lb_ec12 | 1711.9 | -158.2 | 76.2 | 12/5 | 12.8 |
|
| 49 |
+
| sv_dhr_who | 1763.3 | -106.8 | 89.8 | 9/8 | 8.5 |
|
| 50 |
+
| sv_lb_ec | 1773.9 | -96.1 | 95.9 | 10/7 | 10.6 |
|
| 51 |
+
| sv_dhc_ec12 | 1786.8 | -83.3 | 89.1 | 9/8 | 11.4 |
|
| 52 |
+
| sv_dh_who | 1811.2 | -58.9 | 67.8 | 8/9 | 8.6 |
|
| 53 |
+
| sv_dh_pmf | 1842.3 | -27.8 | 64.6 | 7/10 | 8.7 |
|
| 54 |
+
| sv_dhc_who | 1866.2 | -3.9 | 61.7 | 10/7 | 7.8 |
|
| 55 |
+
| sv_dhc_pmf | 1875.1 | +5.0 | 59.2 | 9/8 | 8.1 |
|
| 56 |
+
| sv_dh_ec | 1879.2 | +9.1 | 102.2 | 8/9 | 10.4 |
|
| 57 |
+
| sv_lbdh_when | 1908.3 | +38.2 | 19.9 | 4/13 | 8.5 |
|
| 58 |
+
| sv_lb_sav | 1931.7 | +61.6 | 71.9 | 5/8 | 8.5 |
|
| 59 |
+
| sv_dhc_ec | 1959.3 | +89.2 | 123.5 | 7/10 | 10.2 |
|
| 60 |
+
| sv_dhc_sav | 2069.7 | +199.6 | 101.7 | 5/12 | 8.1 |
|
| 61 |
+
| sv_dhc_ec08 | 2108.7 | +238.7 | 140.1 | 6/11 | 7.7 |
|
| 62 |
+
| sv_aft_pmf | 2168.7 | +298.6 | 71.5 | 3/14 | 6.6 |
|
| 63 |
+
| sv_aft_who | 2170.5 | +300.4 | 70.5 | 3/14 | 6.6 |
|
| 64 |
+
|
| 65 |
+
## Stage attribution
|
| 66 |
+
|
| 67 |
+
1. WHEN (full-curve day placement): REFUTED. Pure curve-shape swap
|
| 68 |
+
(champion p42/count, hazard pmf shape into the same expected-cost
|
| 69 |
+
machinery): +38.2 +/- 19.9, 4W/13L. The champion's 4-knot GBR
|
| 70 |
+
DayQuantiles beat the hazard's own bucket CDF — confirms the old phase
|
| 71 |
+
finding on the new instrument. pmf placement also cost ~+31 inside the
|
| 72 |
+
hazard arms (dh_pmf vs dh_who).
|
| 73 |
+
2. COUNT (expected-cost economics): REFUTED — it is an appetite dial in
|
| 74 |
+
disguise, and an inferior one. Calibration on this instrument: pl_a10
|
| 75 |
+
(plain alpha 1.0, swaps 10.4 on T17) = -117.3 and pl_pbe20 (swaps 14.8)
|
| 76 |
+
= -265.7; my sv_lb_ec (swaps 10.6) = -96.1 and sv_lb_ec12 (swaps 12.8)
|
| 77 |
+
= -158.2 — strictly worse than the alpha dial at matched appetite, and
|
| 78 |
+
full-48 collapses to -4.5 with nearend 0W/6L (over-swaps where false
|
| 79 |
+
swaps cost real mobility). The appetite axis itself is user-closed and
|
| 80 |
+
publicly refuted. Ranking picks by expected savings at FIXED count also
|
| 81 |
+
loses (sv_lb_sav +61.6, sv_dhc_sav +199.6).
|
| 82 |
+
3. WHO (survival model): the only live axis. Weibull AFT: dead (+300,
|
| 83 |
+
undercounts). Isotonic calibration: no help (dhc_who -3.9; economics
|
| 84 |
+
still erratic) — logbag/hazard p42 are already usably calibrated in
|
| 85 |
+
sum. The discrete-time hazard matches logbag overall (flat swaps) and
|
| 86 |
+
BEATS it at cold start: warmup -308.6, 7W/1L.
|
| 87 |
+
4. Cold-start mechanism ATTRIBUTED to the likelihood, not the data:
|
| 88 |
+
LogBagOpen (same censored pool, determined binary labels) at warmup =
|
| 89 |
+
+21.3 vs the hazard's -308.6. Person-period decomposition extracts more
|
| 90 |
+
from the same scarce labels (each death contributes K timing-resolved
|
| 91 |
+
rows instead of one binary row).
|
| 92 |
+
|
| 93 |
+
## Top recommendation
|
| 94 |
+
|
| 95 |
+
sv_dhgate — keep the champion pipeline EXCEPT: when the fit-time pool has
|
| 96 |
+
fewer than 20 past-side unique training deaths (the champion's existing
|
| 97 |
+
floor_gate constant), fit p42 with the censored-pool discrete-time hazard
|
| 98 |
+
(3d buckets) instead of logbag. -51.4 +/- 22.1 on THE SCORE, swaps flat.
|
| 99 |
+
HONESTY FLAGS: (1) the decision to gate on the cold-start regime was made
|
| 100 |
+
after seeing dh_who's warmup wins (one selection look) — the gate rule and
|
| 101 |
+
its constant are a-priori, the look is not; (2) in deployment the static
|
| 102 |
+
model is fit once on all closed windows — the gated branch matters only for
|
| 103 |
+
fleets whose calendar-past has <20 observed deaths (true for fresh splits;
|
| 104 |
+
the warmup harness regime is the closest proxy the instrument has).
|
| 105 |
+
Runner-up (not recommended): nothing else cleared or approached the bar.
|
| 106 |
+
|
| 107 |
+
## Artifacts
|
| 108 |
+
- Harness/models: /tmp/sv/sv_lib.py; runs: /tmp/sv/triage.py, wave2.py,
|
| 109 |
+
full48.py, gated.py (end-to-end gated), warmattr.py, smoke_*.py
|
| 110 |
+
- Full-48 CSVs: /tmp/cv_oofcand_sv_dhgate.csv (boundary-verified composite),
|
| 111 |
+
/tmp/cv_oofcand_sv_{dh_who,dhr_who,dhr_vp,dhrb_vp,lb_ec}.csv
|
| 112 |
+
- Triage CSVs: /tmp/sv/triage_sv_*.csv; logs: /tmp/sv/*.log
|
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# tj — voltage-trajectory forecasting (radical pipeline agent)
|
| 2 |
+
|
| 3 |
+
STATUS: DONE. Best candidate: tj_blend25e3 (champion logbag + 25% MC-trajectory-sim rank, value-preserving) = 1885.9, delta -86.1 +/- 45.5 on full-48 — the strongest rank-blend on the board (existing: rf -52.3, fht -47.6, gbm -28.7), but formally just short of the 2*SE survivor bar (needs -91). Replicated across 3 independent MC seeds (-75.9 / -83.3 / -86.1). Standalone trajectory pipelines (radical replacement of p42) are all honest negatives.
|
| 4 |
+
|
| 5 |
+
## Verified facts (reusable by any agent)
|
| 6 |
+
- Death rule (80/82 exact): EOL = day of the 3rd consecutive gated (10-30C) daily-median reading < 2.40 V, + ~1d (median lag 0-1d; 57/80 within +/-1d). "Consecutive" = consecutive gated READINGS, not calendar days. Zero ghosts at this rule on train.
|
| 7 |
+
- Recorded death REQUIRES readings: dark devices cannot be labeled until they resume. KM resume curve (censored): P(gap>1d)=.024, P(resume within 42d | silent 28d) ~ .5. Dark-drop is heavy-tailed: q10 = -0.10V over 30-60d silences.
|
| 8 |
+
- Empirical P(sustained-cross within 42d | 7-reading median level) — self-supervised calibration curve: 2.40-2.42: .80 | 2.42-2.45: .49 | 2.45-2.475: .27 | 2.475-2.50: .20 | 2.50-2.55: .07 | 2.55-2.60: .03 | 2.60-2.70: .007 | >2.70: ~0.
|
| 9 |
+
- Cliff/plunge regime: onset ~0.01/device-day below 2.8V (0.003 above), FINITE depth (median 0.08V, q75 0.12) — only devices within ~0.15V of threshold can plunge-die. Reading noise: 0.008 fast + slow wobble (lag-1 rho ~0.5, total 0.014).
|
| 10 |
+
|
| 11 |
+
## Results (delta = paired vs champion baseline; triage = origins 8..40 step 2, base 1870.1; full = all 48, base 1972.0)
|
| 12 |
+
| label | scope | ALL | delta | SE | W/L | swaps |
|
| 13 |
+
|---|---|---|---|---|---|---|
|
| 14 |
+
| tj_blend25e3 (25% sim-rank blend, 3-seed ensemble) | FULL | 1885.9 | -86.1 | 45.5 | 31/17 | 9.2 |
|
| 15 |
+
| tj_blend25s1 (25% sim-rank blend, seed 1) | FULL | 1888.7 | -83.3 | 45.2 | 29/18 | 9.2 |
|
| 16 |
+
| tj_blend25 (25% sim-rank blend, seed 0) | FULL | 1896.1 | -75.9 | 46.2 | 29/19 | 9.2 |
|
| 17 |
+
| tj_blend15 (15% sim-rank blend) | FULL | 1929.2 | -42.8 | 34.0 | 29/14 | 9.2 |
|
| 18 |
+
| tj_blend25 | triage | 1781.1 | -89.0 | 72.2 | 9/8 | 8.6 |
|
| 19 |
+
| tj_blend15 | triage | 1788.6 | -81.5 | 55.2 | 12/5 | 8.5 |
|
| 20 |
+
| tj_blend20n12 (w=.20, 1200 sims) | triage | 1815.5 | -54.6 | 55.8 | 10/7 | 8.6 |
|
| 21 |
+
| tj_ablend50 (promote-only blend w=.5) | triage | 1841.0 | -29.1 | 39.7 | 9/5 | 8.6 |
|
| 22 |
+
| tj_blend35 | triage | 1861.0 | -9.1 | 89.1 | 7/10 | 8.5 |
|
| 23 |
+
| tj_blend50 | triage | 1862.0 | -8.1 | 90.5 | 7/10 | 8.5 |
|
| 24 |
+
| tj_daysw (champion p42 + sim day quantiles) | triage | 1868.3 | -1.8 | 25.9 | 10/7 | 8.5 |
|
| 25 |
+
| tj_ablend25 (promote-only w=.25) | triage | 1874.1 | +4.0 | 4.0 | 3/1 | 8.5 |
|
| 26 |
+
| tj_ssblend25 (blend w/ self-supervised GBM ranks) | triage | 1880.5 | +10.5 | 98.2 | 8/8 | 8.5 |
|
| 27 |
+
| tj_h2s60 (v2 sim standalone, p42*0.6) | triage | 2190.9 | +320.8 | 113.0 | 5/12 | 10.3 |
|
| 28 |
+
| tj_h2s45 (v2 standalone, p42*0.45) | triage | 2250.7 | +380.6 | 113.7 | 3/14 | 7.8 |
|
| 29 |
+
| tj_hybrid2 (v2 standalone, unscaled) | triage | 2261.9 | +391.9 | 193.2 | 4/13 | 17.5 |
|
| 30 |
+
| tj_ss1 (self-supervised crossing GBM standalone) | triage | 2294.1 | +424.1 | 156.9 | 4/13 | 7.6 |
|
| 31 |
+
| tj_radical2 (direct schedule at crossing-quantile) | triage | 2274.4 | +404.3 | 177.6 | 5/12 | 17.1 |
|
| 32 |
+
| tj_radical1 (direct schedule, wider inclusion) | triage | 2758.0 | +887.9 | 241.2 | 4/13 | 25.3 |
|
| 33 |
+
| tj_hybrid1 (v1 sim: naive resume) | triage | 2957.2 | +1087.1 | 178.6 | 1/16 | 23.5 |
|
| 34 |
+
|
| 35 |
+
## Verdicts
|
| 36 |
+
- STANDALONE trajectory p42 (any version): REJECTED. Even the fully calibrated self-supervised crossing GBM (swaps 7.6, perfect count) ranks recorded deaths worse than the 82-label logbag at matched N (late 1779 vs 1376). The label-free crossing signal is real but coarser than the labeled classifier.
|
| 37 |
+
- RADICAL direct scheduling (swap at crossing-quantile minus margin): REJECTED (+404 at best). Late cost falls to 870-976 (it does catch deaths) but early-swap explodes — the expected-cost placement machinery is worth its keep.
|
| 38 |
+
- Timing swap (sim day quantiles into champion): exact wash (-1.8 +/- 25.9). Sim physics timing == DayQuantiles GBM in cost terms.
|
| 39 |
+
- RANK BLEND (the survivor candidate): champion p42 values kept (count/appetite/pricing identical, swaps pinned at 9.2), ordering = 0.75*champ_rank + 0.25*sim_rank. Full-48: -86.1 +/- 45.5 (1.89 sigma), panel block -130.7 +/- 55.8 (22W/12L), nearend -29.3 (6W/0L), warmup +60 (noise). Late 1455 -> 1376, early 296 -> 259. Mechanism: the MC sim through the exact death rule up-ranks threshold-run (r0) devices and dark near-threshold devices that logbag underranks; demotions also help (moving stale false-positives out). Beats every existing rank-blend candidate (rf -52.3, fht -47.6, gbm -28.7, tau +45.1) — the sim adds information beyond the Wiener-FHT feature blend.
|
| 40 |
+
- Caveat: three seeds of the same config all land 1.6-1.9 sigma; formally SHORT of the 2*SE bar. Public-refutation history of rank-boost interventions (cert-first +43 public) argues caution: the sim's biggest promotions are cert-like crossed-but-unlabeled devices, exactly the class that inverted on the public fleet (ghosts). If considered for submission, weight w=0.15 is the tamer variant (-42.8 +/- 34.0, 29W/14L).
|
| 41 |
+
|
| 42 |
+
## Reproduce
|
| 43 |
+
- Sim: /tmp/tj/forecast3.py (two-timescale robust WLS on temp-corrected daily medians, EB slope shrinkage, KM resume + empirical dark-drop, level-dependent finite plunge hazard, AR slow+fast noise, exact sustain-3 rule + 1d lag; all statistics from telemetry <= T).
|
| 44 |
+
- Harness copy: /tmp/tj/run_eval.py (per-scenario loop identical to cv.run_all48_oof incl. purge, full-fleet plan, evaluate_plan, CSV schema). Blend mode fits purged logbag exactly as cv.py does.
|
| 45 |
+
- Champion-comparable CSVs: /tmp/cv_oofcand_tj_blend25e3.csv (also _tj_blend25, _tj_blend25s1, _tj_blend15). Triage CSVs in /tmp/tj/.
|
| 46 |
+
- Best run: PYTHONPATH=<repo> venv/bin/python /tmp/tj/run_eval.py tj_blend25e3 blend full ver=3 w2=0.25 nseeds=3
|
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# tr findings (training-data composition)
|
| 2 |
+
STATUS: DONE — updated 2026-08-22 16:55
|
| 3 |
+
|
| 4 |
+
Baseline champion SCORE 1972.0, swaps 9.2. Paired full-48 temporal-purge CV. delta<0 = better.
|
| 5 |
+
|
| 6 |
+
| label | ALL48 | delta | SE | W/L | swaps |
|
| 7 |
+
|---|---|---|---|---|---|
|
| 8 |
+
| tr_rankgbm_ctrl | 1630.3 | -341.7 | 103.8 | 37W/11L | 9.2 |
|
| 9 |
+
| tr_rank_proxdedup | 1651.7 | -320.3 | 103.9 | 31W/17L | 10.5 |
|
| 10 |
+
| tr_rank_dedup | 1665.0 | -307.0 | 90.9 | 33W/15L | 11.1 |
|
| 11 |
+
| tr_rankgbm_prox60 | 1666.6 | -305.5 | 89.4 | 34W/14L | 8.5 |
|
| 12 |
+
| tr_rankgbm_hard | 1672.7 | -299.3 | 104.9 | 31W/17L | 8.6 |
|
| 13 |
+
| tr_rank_prox120 | 1737.6 | -234.4 | 85.4 | 31W/15L | 8.9 |
|
| 14 |
+
| tr_rank_hard | 1757.6 | -214.4 | 81.9 | 30W/17L | 8.6 |
|
| 15 |
+
| tr_rank_prox60 | 1765.2 | -206.8 | 87.2 | 30W/18L | 8.5 |
|
| 16 |
+
| tr_prox_dedup | 1774.3 | -197.7 | 64.6 | 24W/23L | 10.4 |
|
| 17 |
+
| tr_dedup | 1855.0 | -117.0 | 53.9 | 22W/25L | 10.9 |
|
| 18 |
+
| tr_hard_prox60 | 1864.5 | -107.5 | 41.2 | 30W/13L | 8.3 |
|
| 19 |
+
| tr_dedup05 | 1883.7 | -88.3 | 40.3 | 20W/25L | 10.1 |
|
| 20 |
+
| tr_pos3 | 1901.1 | -70.9 | 108.3 | 17W/31L | 18.0 |
|
| 21 |
+
| tr_hard | 1912.2 | -59.8 | 40.3 | 28W/11L | 8.8 |
|
| 22 |
+
| tr_prox60 | 1915.0 | -57.0 | 39.7 | 28W/17L | 8.7 |
|
| 23 |
+
| tr_prox30 | 1915.5 | -56.5 | 61.7 | 28W/19L | 8.5 |
|
| 24 |
+
| tr_d49 | 1938.1 | -33.9 | 26.5 | 15W/31L | 10.5 |
|
| 25 |
+
| tr_hard5 | 1941.6 | -30.4 | 45.5 | 28W/14L | 8.4 |
|
| 26 |
+
| tr_prox120 | 1943.0 | -29.0 | 30.3 | 23W/15L | 9.0 |
|
| 27 |
+
| tr_soft | 1945.8 | -26.2 | 41.8 | 16W/32L | 11.2 |
|
| 28 |
+
| tr_dedupvp | 1948.0 | -24.0 | 29.9 | 17W/18L | 9.5 |
|
| 29 |
+
| tr_prox240 | 1958.7 | -13.3 | 23.5 | 19W/12L | 9.2 |
|
| 30 |
+
| tr_prox480 | 1959.7 | -12.3 | 23.4 | 15W/13L | 9.2 |
|
| 31 |
+
| tr_fut20 | 1966.8 | -5.2 | 46.6 | 20W/26L | 9.8 |
|
| 32 |
+
| tr_rw240 | 1967.2 | -4.8 | 29.5 | 22W/18L | 8.9 |
|
| 33 |
+
| tr_fut50 | 1983.4 | +11.3 | 30.6 | 15W/21L | 9.5 |
|
| 34 |
+
| tr_lowstale | 1988.6 | +16.6 | 49.7 | 23W/23L | 8.2 |
|
| 35 |
+
| tr_rw120 | 1990.2 | +18.2 | 42.2 | 27W/19L | 8.8 |
|
| 36 |
+
| tr_thin3 | 1990.9 | +18.9 | 36.1 | 14W/24L | 9.4 |
|
| 37 |
+
| tr_pastonly | 1991.2 | +19.2 | 86.8 | 15W/31L | 11.4 |
|
| 38 |
+
| tr_thin2 | 2003.8 | +31.8 | 25.9 | 13W/19L | 9.4 |
|
| 39 |
+
| tr_bldg | 2012.2 | +40.2 | 62.2 | 16W/32L | 13.5 |
|
| 40 |
+
| tr_d35 | 2044.4 | +72.4 | 38.1 | 31W/16L | 8.1 |
|
| 41 |
+
| tr_d21e | 2077.0 | +105.0 | 59.9 | 27W/21L | 7.2 |
|
| 42 |
+
| tr_pos10 | 2221.1 | +249.1 | 191.1 | 15W/33L | 33.0 |
|
| 43 |
+
|
| 44 |
+
- **tr_rankgbm_ctrl** — CONTROL: frontier logbag_rank + gbm blend 0.30. delta -341.7±103.8, swaps 9.2 (base 9.2). SURVIVOR candidate.
|
| 45 |
+
- **tr_rank_proxdedup** — rank feats + prox120 * dedup. delta -320.3±103.9, swaps 10.5 (base 9.2). SURVIVOR candidate.
|
| 46 |
+
- **tr_rank_dedup** — rank feats + dedup 1/k. delta -307.0±90.9, swaps 11.1 (base 9.2). SURVIVOR candidate.
|
| 47 |
+
- **tr_rankgbm_prox60** — frontier + prox60. delta -305.5±89.4, swaps 8.5 (base 9.2). SURVIVOR candidate.
|
| 48 |
+
- **tr_rankgbm_hard** — frontier + hard-band x3. delta -299.3±104.9, swaps 8.6 (base 9.2). SURVIVOR candidate.
|
| 49 |
+
- **tr_rank_prox120** — rank feats + proximity hl 120d. delta -234.4±85.4, swaps 8.9 (base 9.2). SURVIVOR candidate.
|
| 50 |
+
- **tr_rank_hard** — rank feats + hard-band x3. delta -214.4±81.9, swaps 8.6 (base 9.2). SURVIVOR candidate.
|
| 51 |
+
- **tr_rank_prox60** — rank feats + prox60. delta -206.8±87.2, swaps 8.5 (base 9.2). SURVIVOR candidate.
|
| 52 |
+
- **tr_prox_dedup** — prox120 * dedup combo, base feats. delta -197.7±64.6, swaps 10.4 (base 9.2). SURVIVOR candidate.
|
| 53 |
+
- **tr_dedup** — downweight overlapping same-device windows w=1/k. delta -117.0±53.9, swaps 10.9 (base 9.2). SURVIVOR candidate.
|
| 54 |
+
- **tr_hard_prox60** — hard-band x3 * prox60. delta -107.5±41.2, swaps 8.3 (base 9.2). SURVIVOR candidate.
|
| 55 |
+
- **tr_dedup05** — softer dedup w=1/sqrt(k). delta -88.3±40.3, swaps 10.1 (base 9.2). SURVIVOR candidate.
|
| 56 |
+
- **tr_pos3** — positives upweighted 3x. delta -70.9±108.3, swaps 18.0 (base 9.2). weak win.
|
| 57 |
+
- **tr_hard** — upweight prefit decision band ranks 3-30 x3. delta -59.8±40.3, swaps 8.8 (base 9.2). weak win.
|
| 58 |
+
- **tr_prox60** — proximity |origin-T| half-life 60d. delta -57.0±39.7, swaps 8.7 (base 9.2). weak win.
|
| 59 |
+
- **tr_prox30** — proximity half-life 30d. delta -56.5±61.7, swaps 8.5 (base 9.2). weak win.
|
| 60 |
+
- **tr_d49** — dies49 where purge-safe (est. T). delta -33.9±26.5, swaps 10.5 (base 9.2). weak win.
|
| 61 |
+
- **tr_hard5** — hard-band x5. delta -30.4±45.5, swaps 8.4 (base 9.2). weak win.
|
| 62 |
+
- **tr_prox120** — proximity half-life 120d. delta -29.0±30.3, swaps 9.0 (base 9.2). weak win.
|
| 63 |
+
- **tr_soft** — soft label: 42<d<=63 graded weight, purge-safe. delta -26.2±41.8, swaps 11.2 (base 9.2). weak win.
|
| 64 |
+
- **tr_dedupvp** — dedup ORDER, champion p42 values (count-matched). delta -24.0±29.9, swaps 9.5 (base 9.2). weak win.
|
| 65 |
+
- **tr_prox240** — proximity half-life 240d. delta -13.3±23.5, swaps 9.2 (base 9.2). weak win.
|
| 66 |
+
- **tr_prox480** — proximity half-life 480d. delta -12.3±23.4, swaps 9.2 (base 9.2). weak win.
|
| 67 |
+
- **tr_fut20** — future-side pairs weighted 0.2. delta -5.2±46.6, swaps 9.8 (base 9.2). weak win.
|
| 68 |
+
- **tr_rw240** — recency half-life 240d (existing kind). delta -4.8±29.5, swaps 8.9 (base 9.2). weak win.
|
| 69 |
+
- **tr_fut50** — future-side pairs weighted 0.5. delta +11.3±30.6, swaps 9.5 (base 9.2). worse.
|
| 70 |
+
- **tr_lowstale** — train only rows with staleness<=30d. delta +16.6±49.7, swaps 8.2 (base 9.2). worse.
|
| 71 |
+
- **tr_rw120** — recency half-life 120d (existing kind). delta +18.2±42.2, swaps 8.8 (base 9.2). worse.
|
| 72 |
+
- **tr_thin3** — keep every 3rd pool origin. delta +18.9±36.1, swaps 9.4 (base 9.2). worse.
|
| 73 |
+
- **tr_pastonly** — past-side pairs only (fallback: all, warmup). delta +19.2±86.8, swaps 11.4 (base 9.2). worse.
|
| 74 |
+
- **tr_thin2** — keep every 2nd pool origin. delta +31.8±25.9, swaps 9.4 (base 9.2). worse.
|
| 75 |
+
- **tr_bldg** — building-balanced weights. delta +40.2±62.2, swaps 13.5 (base 9.2). worse.
|
| 76 |
+
- **tr_d35** — train label dies35. delta +72.4±38.1, swaps 8.1 (base 9.2). worse.
|
| 77 |
+
- **tr_d21e** — mean(dies42, dies21) two-label ensemble. delta +105.0±59.9, swaps 7.2 (base 9.2). worse.
|
| 78 |
+
- **tr_pos10** — positives upweighted 10x. delta +249.1±191.1, swaps 33.0 (base 9.2). worse.
|
| 79 |
+
|
| 80 |
+
## CONCLUSION (all 35 runs complete)
|
| 81 |
+
|
| 82 |
+
1. **The rank+gbm frontier stands; this lane adds nothing on top of it.** Control replicated exactly
|
| 83 |
+
(tr_rankgbm_ctrl 1630.3, -341.7±103.8, swaps flat). Layering my two best weightings ON the frontier
|
| 84 |
+
made it worse: hard-band 1672.7 (+42 vs ctrl), prox60 1666.6 (+36 vs ctrl). The within-origin rank
|
| 85 |
+
features + gbm blend subsume the ordering information my weights were adding.
|
| 86 |
+
2. **Best flat-count survivor on the PLAIN champion base: tr_hard_prox60** (hard-band x3 times proximity
|
| 87 |
+
hl60): -107.5±41.2 (2.6 SE), swaps 8.3, 31W/13L. Components additive (hard -59.8, prox60 -57.0).
|
| 88 |
+
Relevant ONLY if the team ships the plain-base champion instead of the rank+gbm config.
|
| 89 |
+
3. **Proximity beats recency decisively** — the new |origin - T_scenario| weighting (T estimated from the
|
| 90 |
+
purge hole in the origin grid, exact to 0 days on all tested scenarios) gives -57 (hl60) / -29 (hl120)
|
| 91 |
+
/ -13 (hl240), while classic recency (rw120/rw240) is flat-to-worse (+18/-5). Monotone in half-life,
|
| 92 |
+
plateaus at hl 30-60.
|
| 93 |
+
4. **tr_dedup's -117 does NOT survive count-matching.** Its value-preserving twin (same ORDER, champion
|
| 94 |
+
p42 values, swaps 9.5) reads -24.0±29.9 (n.s.). ~80% of the dedup gain is a +1.7-swap appetite shift
|
| 95 |
+
smuggled in through the class balance (near-death rows sit at window edges where overlap-count k is
|
| 96 |
+
small, so 1/k upweights positives). Appetite dose-response across my runs: swaps 9.2 base ->
|
| 97 |
+
10.9 (dedup, -117) -> 18.0 (pos3, -71) -> 33.0 (pos10, +249). The purge CV's appetite optimum is a
|
| 98 |
+
MILD boost (~+1.5 swaps); worth a direct count-rule test in the appetite lane, not via train weights.
|
| 99 |
+
5. **Dead axes** (honest negatives): building-balanced weights (+40, swaps 13.5), origin thinning
|
| 100 |
+
(+32/+19), staleness filter (+17), past-side-only pool (+19, SE 87 - the future-side purge pairs
|
| 101 |
+
stabilize fits), future downweight (flat), label-window changes d35/d21e (+72/+105 - count starvation),
|
| 102 |
+
d49/soft labels (small count-shift wins, subsumed by dedup), hard-band overdose x5 (-30 < x3's -60).
|
| 103 |
+
|
| 104 |
+
**Top recommendation:** adopt nothing from this lane on top of the logbag_rank+gbm frontier - it stands
|
| 105 |
+
as the best known config. If (and only if) the plain-base champion ships, add tr_hard_prox60. Pass the
|
| 106 |
+
appetite dose-response numbers (point 4) to the appetite lane.
|
| 107 |
+
|
| 108 |
+
Scripts: /tmp/tr/tr_models.py (model zoo), /tmp/tr/run_tr.py (runner). Runs: /tmp/cv_oofcand_tr_*.csv (35).
|
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Wave 1 — full OOF_CANDIDATES registry re-run under the temporal purge
|
| 2 |
+
|
| 3 |
+
STATUS: DONE 2026-08-22 ~16:05. 25 registry candidates + champion repeat, all full-48, zero failures.
|
| 4 |
+
Baseline: champion logbag/base ALL48 = 1972.0, swaps 9.21. Paired per scenario.
|
| 5 |
+
Harness verified DETERMINISTIC (champrep delta exactly 0.0 on all 48) — every nonzero delta is a real method effect; only scenario-sampling noise (SE) matters.
|
| 6 |
+
|
| 7 |
+
| label | ALL48 | delta | SE | W/L | swaps | verdict |
|
| 8 |
+
|---|---|---|---|---|---|---|
|
| 9 |
+
| logbag_rank | 1746.4 | -225.6 | 74.0 | 34W/11L | 9.5 | **SURVIVOR bar met** |
|
| 10 |
+
| vrel_only | 1854.5 | -117.5 | 49.5 | 32W/14L | 8.4 | wins, but count-shifted |
|
| 11 |
+
| vrel | 1855.3 | -116.7 | 50.3 | 32W/16L | 8.4 | wins, but count-shifted |
|
| 12 |
+
| rf | 1887.3 | -84.7 | 67.6 | 29W/19L | 9.8 | negative, inside noise |
|
| 13 |
+
| blind4 | 1905.9 | -66.1 | 61.8 | 28W/20L | 8.3 | negative, inside noise |
|
| 14 |
+
| vcorr | 1913.1 | -58.9 | 39.9 | 29W/15L | 9.1 | negative, inside noise |
|
| 15 |
+
| rankavg25rf | 1919.7 | -52.3 | 31.5 | 28W/11L | 9.1 | negative, inside noise |
|
| 16 |
+
| rankavg25fht | 1924.4 | -47.6 | 34.6 | 20W/25L | 9.5 | negative, inside noise |
|
| 17 |
+
| dthaz | 1933.0 | -39.0 | 34.3 | 22W/26L | 9.6 | negative, inside noise |
|
| 18 |
+
| ranks | 1934.6 | -37.4 | 89.5 | 27W/21L | 9.1 | rejected |
|
| 19 |
+
| rankavg25gbm | 1943.3 | -28.7 | 40.8 | 25W/17L | 9.1 | rejected |
|
| 20 |
+
| logbagC03 | 1952.7 | -19.3 | 22.1 | 15W/11L | 9.2 | rejected |
|
| 21 |
+
| logbagC01 | 1957.5 | -14.5 | 25.8 | 23W/12L | 9.3 | rejected |
|
| 22 |
+
| logistic | 1971.9 | -0.1 | 20.1 | 8W/11L | 9.2 | rejected |
|
| 23 |
+
| champrep | 1972.0 | +0.0 | 0.0 | 0W/0L | 9.2 | noise floor: exactly 0 |
|
| 24 |
+
| zone | 1975.7 | +3.7 | 41.3 | 18W/28L | 10.1 | rejected |
|
| 25 |
+
| vrel_bldg | 1986.0 | +14.0 | 8.8 | 14W/24L | 9.2 | rejected |
|
| 26 |
+
| blind3 | 1997.4 | +25.4 | 64.3 | 21W/27L | 10.5 | rejected |
|
| 27 |
+
| gbm | 2000.5 | +28.5 | 84.5 | 24W/24L | 8.5 | rejected |
|
| 28 |
+
| vmin7_only | 2013.0 | +41.0 | 25.1 | 15W/23L | 9.1 | rejected |
|
| 29 |
+
| rankavg25tau | 2017.1 | +45.1 | 38.6 | 15W/24L | 9.6 | rejected |
|
| 30 |
+
| aux_ucb05 | 2066.8 | +94.8 | 50.4 | 11W/36L | 9.4 | rejected |
|
| 31 |
+
| aux_ucb10 | 2079.1 | +107.1 | 49.2 | 11W/35L | 9.6 | rejected |
|
| 32 |
+
| logbag_aux | 2095.8 | +123.8 | 47.2 | 12W/34L | 9.2 | rejected |
|
| 33 |
+
| v_last_only | 2425.2 | +453.2 | 77.1 | 6W/42L | 11.0 | rejected |
|
| 34 |
+
|
| 35 |
+
## Reading
|
| 36 |
+
|
| 37 |
+
- **logbag_rank is the wave-1 headline: -225.6 +/- 74.0 (t=-3.05), 34W/11L, swaps 9.5 (~flat).**
|
| 38 |
+
Champion + within-origin fleet-rank features (r_vlast, r_tau). Linear, rank-based - no
|
| 39 |
+
same-device memorization channel. This kind was REJECTED on the old self-fit instrument
|
| 40 |
+
(phase 8 lineage); the purge reverses it. Combination runs (x vrel, x rf-blend) queued.
|
| 41 |
+
- vrel / vrel_only (-117, t=-2.3, swaps 8.4): fleet-relative voltage transfers; second real signal.
|
| 42 |
+
- bl_rf35 (-81, t=-2.06, swaps flat 9.2): rf rank-blend at 35% - flexible-family purge flattery
|
| 43 |
+
caveat applies (accepted by user directive; flagged, not vetoed).
|
| 44 |
+
- gbm alone (+28.5) and aux features (logbag_aux +123.8) are clearly rejected under purge.
|
| 45 |
+
- v_last_only (+453) demolishes the blind-repo phase-39 claim on this instrument.
|
| 46 |
+
- Multiplicity note: ~60 candidates adjudicated so far; expected max |t| under the global null
|
| 47 |
+
is ~2.6-2.9, so a lone t=-3.05 is suggestive-strong, not conclusive. The W/L record (34/11)
|
| 48 |
+
and combination behavior are the confirmation instruments (harness is deterministic;
|
| 49 |
+
re-running the same config adds no information).
|
| 50 |
+
|
| 51 |
+
Agent-prefixed rows (pl_/bl_/tr_/rk_...) live in the agents' own files; the aggregate is
|
| 52 |
+
`venv/bin/python -m batteryswap_example.cv oofreport`.
|
|
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# wd (wild card) — untested registry kinds + literature methods
|
| 2 |
+
|
| 3 |
+
STATUS: DONE (last updated 2026-08-22 16:19)
|
| 4 |
+
|
| 5 |
+
## TOP RECOMMENDATION
|
| 6 |
+
**wd_frcert — cert-first confirmation guard composed onto the bl frontier: ALL48 = 1604.0**
|
| 7 |
+
(frontier logbag_rank + value-preserving gbm 0.30 rank-avg = 1630.3; champion logbag = 1972.0)
|
| 8 |
+
|
| 9 |
+
- Marginal of cert on the frontier, paired per-origin: **-26.2 +- 14.8, W/L 3/0, 45 exact ties,
|
| 10 |
+
swaps 9.23 vs 9.23 (byte-identical count)**. It moves ONLY origins 25/26/27
|
| 11 |
+
(-401.5 / -419.0 / -438.2) and is a no-op everywhere else.
|
| 12 |
+
- Mechanism (label-process grounded, phase-46 reverse engineering, 81/82 exact): EOL is stamped
|
| 13 |
+
~3d after the gated 10-30C daily-median voltage sustains < 2.40 V for 3 consecutive gated
|
| 14 |
+
readings. A device confirmed at plan time is a certain death; the guard adds +2.0 to its
|
| 15 |
+
rank_score (rank-only: p42, count, and timing curves untouched). Worst case = swapping a
|
| 16 |
+
device days before its already-in-flight EOL stamp - one-sided risk.
|
| 17 |
+
- Historical public read: +43 - but that adjudication ran on top of ALPHA_STATIC=1.5 + cliff
|
| 18 |
+
(contaminated baseline per submit.py phase notes). Purge says pure win. Implementation:
|
| 19 |
+
cert_confirm_days() already exists in submit.py behind BATTERYSWAP_CERT_FIRST.
|
| 20 |
+
- wd_frcertday (also force day_q=1 for confirmed devices) = 1605.5: the 3 wins persist but day
|
| 21 |
+
jiggle adds 10 noisy origins (+216 loss at s35). NOT recommended - rank boost only.
|
| 22 |
+
- Model code: /tmp/wd/wd_models.py (FrontierCert); runs: /tmp/cv_oofcand_wd_frcert.csv.
|
| 23 |
+
|
| 24 |
+
## Full-48 results (paired vs champion 1972.0 baseline; swaps baseline 9.2)
|
| 25 |
+
| label | ALL48 | delta | SE | W/L | swaps | verdict |
|
| 26 |
+
|---|---|---|---|---|---|---|
|
| 27 |
+
| wd_frcert | 1604.0 | -368.0 | 104.4 | 37/11 | 9.2 | NEW FRONTIER: cert on (logbag_rank + gbm30 rank-avg) |
|
| 28 |
+
| wd_frcertday | 1605.5 | -366.5 | 104.7 | 37/11 | 9.2 | + immediate day placement: inert-to-harmful, drop |
|
| 29 |
+
| wd_certrank | 1708.5 | -263.5 | 75.7 | 35/11 | 9.5 | cert on logbag_rank (no gbm blend): survivor, dominated by wd_frcert |
|
| 30 |
+
| wd_rkblend | 1769.0 | -203.0 | 80.0 | 32/16 | 9.0 | prob-mean blend form: dominated by value-preserving rank-avg (bl 1630.3) |
|
| 31 |
+
| wd_xtrank | 1816.4 | -155.6 | 80.0 | 32/16 | 8.3 | xtrees + rank feats: real but weaker |
|
| 32 |
+
| wd_blend | 1900.5 | -71.5 | 66.0 | 29/19 | 8.8 | logbag(+)gbm prob mean: 1.1 SE only |
|
| 33 |
+
| wd_logcal | 1901.8 | -70.2 | 46.9 | 18/30 | 11.3 | swaps +2.1, L>W: appetite in disguise. REJECTED |
|
| 34 |
+
| wd_rank_rf | 1932.1 | -39.9 | 44.5 | 28/19 | 9.2 | noise |
|
| 35 |
+
| wd_cert20 | 1933.6 | -38.4 | 23.5 | 7/2 | 9.2 | cert on champion logbag: only s25/26/27 move, all wins (-1845 tot) |
|
| 36 |
+
| wd_xtrees | 1935.4 | -36.6 | 62.1 | 26/22 | 9.2 | subset -160 was luck |
|
| 37 |
+
| wd_aux_all | 1949.4 | -22.6 | 43.5 | 22/24 | 9.1 | null |
|
| 38 |
+
|
| 39 |
+
## Re-opened axes - purge vs public calibration (subset reads)
|
| 40 |
+
| axis | subset delta | swaps | read |
|
| 41 |
+
|---|---|---|---|
|
| 42 |
+
| wd_alpha15 (appetite 1.5) | -202.3 +- 159 | 14.9 (+5.7) | purge REWARDS appetite; public said +527. The purge CANNOT adjudicate appetite - its optimism channels pay for extra swaps. Do not adopt appetite on purge evidence. |
|
| 43 |
+
| wd_cliffct (cliff, count-coupled) | -113.8 +- 101 | 11.1 (+2.5) | appetite-flavored, same caveat |
|
| 44 |
+
| wd_cliff (cliff, rank-only) | -80.9 +- 92 | 8.5 flat | clean but noisy; cert-first captures the same devices with a sharper rule |
|
| 45 |
+
| wd_cert (cert-first, rank-only) | -56.6 | 8.5 flat | pure win, see top recommendation |
|
| 46 |
+
|
| 47 |
+
## Triage table - ALL untested registry kinds + innovations (subset origins 8..40/2, champion subset mean 1870.1)
|
| 48 |
+
| kind | mean | delta | SE | W/L/T | swaps |
|
| 49 |
+
|---|---|---|---|---|---|
|
| 50 |
+
| blend | 1708.6 | -161.5 | 102.6 | 12/5/0 | 8.2 |
|
| 51 |
+
| xtrees | 1710.5 | -159.6 | 103.9 | 9/8/0 | 8.9 |
|
| 52 |
+
| cg_all | 1741.6 | -128.5 | 129.9 | 8/8/1 | 12.9 |
|
| 53 |
+
| cg_silent | 1741.6 | -128.5 | 129.9 | 8/8/1 | 12.9 |
|
| 54 |
+
| aux_all | 1760.6 | -109.5 | 76.3 | 10/7/0 | 8.1 |
|
| 55 |
+
| logcal | 1763.5 | -106.6 | 79.1 | 7/10/0 | 10.5 |
|
| 56 |
+
| rank_rf | 1778.2 | -91.9 | 103.7 | 10/7/0 | 8.5 |
|
| 57 |
+
| logbag_cw | 1793.3 | -76.8 | 182.8 | 7/10/0 | 18.7 |
|
| 58 |
+
| logbag_rankproj | 1804.2 | -65.9 | 132.7 | 8/8/1 | 8.5 |
|
| 59 |
+
| wd_cert20 | 1813.5 | -56.6 | 56.6 | 1/0/16 | 8.5 |
|
| 60 |
+
| wd_cert05 | 1813.5 | -56.6 | 56.6 | 1/0/16 | 8.5 |
|
| 61 |
+
| mlp | 1815.4 | -54.6 | 142.9 | 10/7/0 | 9.5 |
|
| 62 |
+
| aux_rank | 1817.9 | -52.2 | 108.1 | 9/7/1 | 8.6 |
|
| 63 |
+
| wd_moe10 | 1846.0 | -24.1 | 85.6 | 8/8/1 | 8.6 |
|
| 64 |
+
| aux_log | 1848.2 | -21.9 | 55.0 | 8/9/0 | 8.5 |
|
| 65 |
+
| blend_dh | 1850.8 | -19.3 | 44.4 | 8/8/1 | 8.7 |
|
| 66 |
+
| aux_rvr | 1853.0 | -17.1 | 56.8 | 6/9/2 | 8.5 |
|
| 67 |
+
| logbag_c3 | 1854.1 | -16.0 | 13.3 | 3/1/13 | 8.5 |
|
| 68 |
+
| silentfix06 | 1869.5 | -0.6 | 0.6 | 1/0/16 | 8.5 |
|
| 69 |
+
| silentfix015 | 1870.1 | +0.0 | 0.0 | 0/0/17 | 8.5 |
|
| 70 |
+
| silentfix03 | 1870.1 | +0.0 | 0.0 | 0/0/17 | 8.5 |
|
| 71 |
+
| crt_in25 | 1870.1 | +0.0 | 0.0 | 0/0/17 | 8.5 |
|
| 72 |
+
| logbag_proj | 1873.5 | +3.4 | 65.5 | 5/4/8 | 8.8 |
|
| 73 |
+
| logbag_open | 1887.3 | +17.2 | 31.0 | 5/9/3 | 8.8 |
|
| 74 |
+
| wd_moe21 | 1893.8 | +23.7 | 106.5 | 9/8/0 | 8.4 |
|
| 75 |
+
| crt_sp15 | 1900.2 | +30.1 | 150.1 | 8/9/0 | 10.4 |
|
| 76 |
+
| dthaz_aux | 1904.2 | +34.1 | 94.2 | 9/8/0 | 8.9 |
|
| 77 |
+
| aux_bag50 | 1905.0 | +34.9 | 72.0 | 4/10/3 | 8.6 |
|
| 78 |
+
| logbag_dh | 1905.6 | +35.5 | 18.9 | 4/13/0 | 8.5 |
|
| 79 |
+
| aux_bag30 | 1905.8 | +35.7 | 72.1 | 4/10/3 | 8.6 |
|
| 80 |
+
| lw_mean | 1908.0 | +37.9 | 197.8 | 7/10/0 | 23.0 |
|
| 81 |
+
| blend_dhaux | 1909.9 | +39.8 | 92.4 | 5/9/3 | 8.8 |
|
| 82 |
+
| logbag_rw240 | 1911.0 | +40.9 | 64.3 | 5/9/3 | 8.2 |
|
| 83 |
+
| wd_brate | 1918.4 | +48.3 | 66.2 | 6/10/1 | 8.2 |
|
| 84 |
+
| wd_brate_m50 | 1924.2 | +54.2 | 75.9 | 8/8/1 | 8.1 |
|
| 85 |
+
| logbag_rw120 | 1935.4 | +65.3 | 50.8 | 7/10/0 | 7.9 |
|
| 86 |
+
| aux_rv | 1936.1 | +66.0 | 67.1 | 6/9/2 | 8.5 |
|
| 87 |
+
| logbag_aux2 | 1961.7 | +91.6 | 64.7 | 5/11/1 | 8.5 |
|
| 88 |
+
| aux_rvg | 1963.7 | +93.6 | 79.4 | 4/12/1 | 8.5 |
|
| 89 |
+
| aux_proj | 2021.1 | +151.0 | 84.2 | 3/12/2 | 8.8 |
|
| 90 |
+
| wd_cox_p001 | 2109.1 | +239.0 | 131.7 | 5/12/0 | 9.5 |
|
| 91 |
+
| aft | 2207.1 | +337.0 | 108.8 | 5/12/0 | 6.3 |
|
| 92 |
+
| wd_bfe | 2292.9 | +422.8 | 126.6 | 3/14/0 | 8.4 |
|
| 93 |
+
| wd_bfe_c03 | 2318.2 | +448.1 | 128.5 | 4/13/0 | 8.2 |
|
| 94 |
+
| wd_cox | 2416.6 | +546.5 | 111.9 | 2/14/1 | 7.7 |
|
| 95 |
+
| logbag_lah | 2870.1 | +1000.0 | 171.1 | 0/17/0 | 9.9 |
|
| 96 |
+
| logbag_lah_ds | 2921.3 | +1051.2 | 157.5 | 0/17/0 | 8.7 |
|
| 97 |
+
| lw_stale | 2950.0 | +1079.9 | 223.8 | 1/16/0 | 21.2 |
|
| 98 |
+
| wiener | 2969.9 | +1099.9 | 330.3 | 4/13/0 | 37.2 |
|
| 99 |
+
| rank_v | 14493.1 | +12623.0 | 828.1 | 0/17/0 | 172.1 |
|
| 100 |
+
|
| 101 |
+
Not run, proven inert by inspection + one representative: crt_in15/40/50 (identical to crt_in25
|
| 102 |
+
= logbag: p_cut only read by plan_tscut, mode 'in' trains on everything; measured delta exactly 0.0).
|
| 103 |
+
CRASH (stale feature dep, cached fht parquet lacks fht_days): logbag_fht, logbag_fht2.
|
| 104 |
+
|
| 105 |
+
## One-line verdicts (registry kinds I owned)
|
| 106 |
+
- blend/xtrees/aux_all/logcal/rank_rf: see full-48 table - none survives alone.
|
| 107 |
+
- cg_all, cg_silent (-128.5 identical, swaps +4.4): cohort lift inflates count = appetite. Rejected.
|
| 108 |
+
- logbag_cw (-77, swaps 18.7): stake-weighting doubles inclusion = pure appetite. Rejected.
|
| 109 |
+
- logbag_rankproj (-66+-133), aux_rank (-52+-108), mlp (-55+-143), aux_log, aux_rvr, blend_dh,
|
| 110 |
+
logbag_c3 (-16+-13): noise-level; c3 is a mild real but tiny regularization effect.
|
| 111 |
+
- silentfix015/03/06: EXACTLY inert (silent-cohort model needs >=20 silent-zone train deaths; purge pools rarely have them).
|
| 112 |
+
- logbag_proj, logbag_open, dthaz_aux, blend_dhaux, aux_bag30/50, lw_mean, logbag_rw120/240,
|
| 113 |
+
aux_rv/rvg/proj, logbag_aux2, logbag_dh, crt_sp15: null to mildly negative (+3 to +92).
|
| 114 |
+
- Survival family is DEAD under the purge: aft +337 (count collapses, swaps 6.3), wd_cox +546,
|
| 115 |
+
wd_cox_p001 +239, logbag_lah +1000, logbag_lah_ds +1051, lw_stale +1080, wiener +1100.
|
| 116 |
+
- Building identity is DEAD: wd_bfe +423, wd_bfe_c03 +448 (24 one-hot intercepts), wd_brate +48,
|
| 117 |
+
wd_brate_m50 +54 (even a single shrunk building-rate column hurts).
|
| 118 |
+
- Staleness MoE: wd_moe10 -24+-86, wd_moe21 +24+-107 - inert.
|
| 119 |
+
- rank-v +12623: emits ranks as p42, count rule explodes (contract violation, not a model flaw).
|
| 120 |
+
|
| 121 |
+
## Artifacts
|
| 122 |
+
- Scripts: /tmp/wd/triage.py, /tmp/wd/wd_run.py, /tmp/wd/wd_models.py, /tmp/wd/wd_alpha.py, /tmp/wd/summarize.py
|
| 123 |
+
- Subset CSVs: /tmp/wd/sub_*.csv; full-48 CSVs: /tmp/cv_oofcand_wd_*.csv; log: /tmp/wd/triage.log
|
| 124 |
+
|
| 125 |
+
---
|
| 126 |
+
|
| 127 |
+
## ORCHESTRATOR CORRECTION (appended after agent completion — main session)
|
| 128 |
+
|
| 129 |
+
The top recommendation above (`wd_frcert`) must NOT be adopted on this
|
| 130 |
+
evidence, and its historical-context claim is factually wrong:
|
| 131 |
+
|
| 132 |
+
1. **Cert-first was publicly adjudicated ISOLATED on the clean stack**, not
|
| 133 |
+
on the contaminated alpha-1.5+cliff stack: submission `9438aac`
|
| 134 |
+
("cert-first isolated, pooling default off") scored 1704.64 vs 1661.45
|
| 135 |
+
(EXPERIMENTS.md Phase 48). The exculpation does not hold.
|
| 136 |
+
2. **The local signature is a re-measurement of the same trap**: the original
|
| 137 |
+
cert-first read -37.9 at 3W/0L with 45 ties locally, then +43.2 publicly.
|
| 138 |
+
`wd_frcert` reads -26.2 at 3W/0L with 45 ties on the purge. Same mechanism,
|
| 139 |
+
same shape, new instrument. The failure mode (crossed-but-never-labeled
|
| 140 |
+
"ghost" devices, which exist in public data and are ZERO in train) is
|
| 141 |
+
structurally invisible to ANY local CV, including the purge. A rank-only
|
| 142 |
+
boost is if anything MORE ghost-exposed than the original force-swap form:
|
| 143 |
+
boosted ghosts DISPLACE real picks from the fixed swap budget.
|
| 144 |
+
3. **The agent's own alpha calibration finding proves the instrument limit**:
|
| 145 |
+
purge rewards alpha 1.5 by -202 while the public punished it +527. Together
|
| 146 |
+
with cert-first, that's two independent demonstrations that the purge
|
| 147 |
+
cannot adjudicate (a) count-coupled changes or (b) label-process exploits.
|
| 148 |
+
|
| 149 |
+
**Standing conclusions from this lane** (valid and valuable): the registry
|
| 150 |
+
triage (conformal = byte-identical to logbag; survival kinds dead; building
|
| 151 |
+
fixed effects dead; cg_*/logbag_cw = appetite), and the calibration finding
|
| 152 |
+
itself, which sets the shipping bar for the whole campaign: only
|
| 153 |
+
ordering-only, label-process-free purge wins are trustworthy for deployment.
|
| 154 |
+
Current shippable frontier remains `logbag_rank` + gbm30 rank-blend (1630.3).
|
|
@@ -68,7 +68,11 @@ BASE_FEATURES = list(mc.FEATURES)
|
|
| 68 |
# Mirrors submit.py's rolling branch: logbag / tsroute alpha 0.8 + break-even
|
| 69 |
# top-up (ec_margin 0.8, ec_pmax 25) + 7d building split + censor-aware
|
| 70 |
# pricing + the gated cold-start floor (k=2.5, gate 20).
|
| 71 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
ec_margin=0.8, ec_pmax=25.0, split_days=7,
|
| 73 |
floor=2.5, floor_gate=20, floor_zone=1)
|
| 74 |
|
|
@@ -236,6 +240,10 @@ def run_all48_oof(origins=range(48), dataset_path=Path('dataset'), kind=None,
|
|
| 236 |
a post-hoc blend whose beliefs disagree with the count machinery fails
|
| 237 |
for that reason alone).
|
| 238 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
kind = kind or CHAMPION['model']
|
| 240 |
t = load_table(dataset_path)
|
| 241 |
mc.FEATURES = list(VARIANTS[variant](t))
|
|
|
|
| 68 |
# Mirrors submit.py's rolling branch: logbag / tsroute alpha 0.8 + break-even
|
| 69 |
# top-up (ec_margin 0.8, ec_pmax 25) + 7d building split + censor-aware
|
| 70 |
# pricing + the gated cold-start floor (k=2.5, gate 20).
|
| 71 |
+
# Phase 56 (2026-08-22): champion = logbag_rank + gbm value-preserving rank
|
| 72 |
+
# blend at w=0.30 (THE SCORE 1630.3, was 1972.0 for plain logbag). Deployed
|
| 73 |
+
# as FrontierRUL in submit.py (bit-exact fidelity test in Phase 56).
|
| 74 |
+
CHAMPION = dict(model='logbag_rank', blend=('gbm', 0.30),
|
| 75 |
+
planner='tsroute', p_star=0.8, day_q=0.05,
|
| 76 |
ec_margin=0.8, ec_pmax=25.0, split_days=7,
|
| 77 |
floor=2.5, floor_gate=20, floor_zone=1)
|
| 78 |
|
|
|
|
| 240 |
a post-hoc blend whose beliefs disagree with the count machinery fails
|
| 241 |
for that reason alone).
|
| 242 |
"""
|
| 243 |
+
if kind is None and blend is None:
|
| 244 |
+
# the champion arm carries its own blend; an explicit candidate kind
|
| 245 |
+
# replaces the model config outright (no implicit blend inheritance)
|
| 246 |
+
blend = CHAMPION.get('blend')
|
| 247 |
kind = kind or CHAMPION['model']
|
| 248 |
t = load_table(dataset_path)
|
| 249 |
mc.FEATURES = list(VARIANTS[variant](t))
|
|
@@ -42,7 +42,7 @@ from batteryswap_public.utils import load_dataset, iterate_scenarios
|
|
| 42 |
from batteryswap_example.features import (
|
| 43 |
daily_voltage, daily_all, weekly_betas, master_curve, physics_features,
|
| 44 |
features_at_origin, WINDOW_DAYS, BETA_DEFAULT)
|
| 45 |
-
from batteryswap_example.models_cv import SklearnRUL, plan_tsroute
|
| 46 |
from batteryswap_example import models_cv
|
| 47 |
|
| 48 |
TRAIN_TABLE = Path(__file__).parent / 'data' / 'train_features.parquet'
|
|
@@ -94,6 +94,68 @@ HELDOUT_BUILD_BUDGET_S = float(os.environ.get('BATTERYSWAP_HELDOUT_BUDGET_S', '3
|
|
| 94 |
# them again: ~5.5 min/split, ~11 min for the pair, comfortably inside 20.
|
| 95 |
HELDOUT_REFIT_EVERY = int(os.environ.get('BATTERYSWAP_HELDOUT_REFIT_EVERY', '4'))
|
| 96 |
MODEL_KIND = 'logbag'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 97 |
# Inclusion appetite, tuned by local CV: alpha sweep 0.7-1.3 on dev has a clear
|
| 98 |
# minimum at 0.8 (beats every alternative on 11-12 of 16 origins), confirmed on
|
| 99 |
# the test block (0.8: 1398 vs 1.15: 1516). Component curves show why: past 0.8
|
|
@@ -311,7 +373,7 @@ def adaptive_split_plans(split, split_path, log=print, deadline=None):
|
|
| 311 |
# eliminates the time-budget fallback risk. Own-fleet rows are
|
| 312 |
# excluded: same fleet means same answer key.
|
| 313 |
foreign = base[~base['device_id'].isin(fleet)]
|
| 314 |
-
static_model =
|
| 315 |
static_uniq = int(foreign.loc[foreign['dies42'] == 1, 'device_id'].nunique())
|
| 316 |
log(f' static foreign fit: {len(foreign)} pairs, {static_uniq} unique '
|
| 317 |
f'deaths (own-fleet frac {own_fleet:.2f})')
|
|
@@ -418,7 +480,7 @@ def adaptive_split_plans(split, split_path, log=print, deadline=None):
|
|
| 418 |
own_pairs = train[~train['foreign']]
|
| 419 |
assert (own_pairs['origin'] + pd.Timedelta(days=WINDOW_DAYS) <= T).all()
|
| 420 |
uniq = int(train.loc[train['dies42'] == 1, 'device_id'].nunique())
|
| 421 |
-
fitted[fkey] = (
|
| 422 |
model, train_uniq = fitted[fkey]
|
| 423 |
|
| 424 |
feats = features_at_origin(daily, locs, T)
|
|
|
|
| 42 |
from batteryswap_example.features import (
|
| 43 |
daily_voltage, daily_all, weekly_betas, master_curve, physics_features,
|
| 44 |
features_at_origin, WINDOW_DAYS, BETA_DEFAULT)
|
| 45 |
+
from batteryswap_example.models_cv import SklearnRUL, LogBagFeats, plan_tsroute
|
| 46 |
from batteryswap_example import models_cv
|
| 47 |
|
| 48 |
TRAIN_TABLE = Path(__file__).parent / 'data' / 'train_features.parquet'
|
|
|
|
| 94 |
# them again: ~5.5 min/split, ~11 min for the pair, comfortably inside 20.
|
| 95 |
HELDOUT_REFIT_EVERY = int(os.environ.get('BATTERYSWAP_HELDOUT_REFIT_EVERY', '4'))
|
| 96 |
MODEL_KIND = 'logbag'
|
| 97 |
+
# Phase 56 frontier (2026-08-22 purge-CV campaign, ~250 candidates across 11
|
| 98 |
+
# lanes): logbag + within-origin fleet-rank features (r_vlast, r_tau) with a
|
| 99 |
+
# gbm rank-blend at w=0.30, value-preserving (blended ORDER mapped back onto
|
| 100 |
+
# the primary's own p42 values, so count/pricing/timing machinery see the
|
| 101 |
+
# identical p42 distribution - ordering-only, swaps flat 9.23 vs 9.21).
|
| 102 |
+
# THE SCORE: 1630.3 vs champion 1972.0 (-341.7 +/- 103.8, 37W/11L, wins all
|
| 103 |
+
# three blocks). Components independently significant: rank features -225.6
|
| 104 |
+
# (linear, clean), gbm order increment -116.1 (non-monotone response; carries
|
| 105 |
+
# the accepted flexible-model purge-flattery risk - monotonic-constrained
|
| 106 |
+
# partner destroys the increment, so the public score is the arbiter).
|
| 107 |
+
# Confirmed local optimum by 5 lanes (hyperparams, features, weights, neural
|
| 108 |
+
# rankers, physics blends all subsumed or worse head-to-head).
|
| 109 |
+
FRONTIER = os.environ.get('BATTERYSWAP_FRONTIER', '1') != '0'
|
| 110 |
+
# Blend weight dial for public A/B: 0.30 = full frontier (purge 1630.3);
|
| 111 |
+
# 0 = plain logbag_rank, no gbm (purge 1746.4 - the clean linear component,
|
| 112 |
+
# fallback if the gbm increment turns out to be purge flattery on public);
|
| 113 |
+
# BATTERYSWAP_FRONTIER=0 = legacy plain logbag (purge 1972.0, the 1661.45
|
| 114 |
+
# public config).
|
| 115 |
+
FRONTIER_W2 = float(os.environ.get('BATTERYSWAP_FRONTIER_W2', '0.30'))
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
class FrontierRUL:
|
| 119 |
+
"""logbag_rank + gbm value-preserving rank blend (the phase-56 frontier).
|
| 120 |
+
|
| 121 |
+
Faithful deployment of cv.run_all48_oof(kind='logbag_rank',
|
| 122 |
+
blend=('gbm', 0.30)): primary = LogBagFeats(['r_vlast', 'r_tau']) (bagged
|
| 123 |
+
logistic on FEATURES + within-origin fleet-rank transforms), partner =
|
| 124 |
+
SklearnRUL('gbm') on FEATURES; the blended rank ORDER is mapped back onto
|
| 125 |
+
the primary's own sorted p42 values, and the DayQuantiles timing columns
|
| 126 |
+
stay with their device (exactly what the CV blend branch does).
|
| 127 |
+
"""
|
| 128 |
+
|
| 129 |
+
def fit(self, train):
|
| 130 |
+
t = train.copy()
|
| 131 |
+
t['r_vlast'] = t.groupby('origin')['v_last'].rank(pct=True)
|
| 132 |
+
t['r_tau'] = t.groupby('origin')['tau_projected'].rank(pct=True)
|
| 133 |
+
self.primary = LogBagFeats(['r_vlast', 'r_tau']).fit(t)
|
| 134 |
+
self.partner = SklearnRUL('gbm').fit(t)
|
| 135 |
+
return self
|
| 136 |
+
|
| 137 |
+
def predict(self, rows):
|
| 138 |
+
r = rows.copy()
|
| 139 |
+
# prediction rows are one fleet snapshot at one origin: the
|
| 140 |
+
# within-origin rank is a rank over the fleet
|
| 141 |
+
r['r_vlast'] = r['v_last'].rank(pct=True)
|
| 142 |
+
r['r_tau'] = r['tau_projected'].rank(pct=True)
|
| 143 |
+
pred = self.primary.predict(r)
|
| 144 |
+
if FRONTIER_W2 <= 0:
|
| 145 |
+
return pred
|
| 146 |
+
p2 = self.partner.predict(r)
|
| 147 |
+
rk = ((1 - FRONTIER_W2) * pred['p42'].rank(pct=True)
|
| 148 |
+
+ FRONTIER_W2 * p2['p42'].rank(pct=True))
|
| 149 |
+
vals = np.sort(pred['p42'].values)[::-1]
|
| 150 |
+
pred = pred.copy()
|
| 151 |
+
pred['p42'] = pd.Series(
|
| 152 |
+
vals, index=rk.sort_values(ascending=False).index
|
| 153 |
+
).reindex(pred.index)
|
| 154 |
+
return pred
|
| 155 |
+
|
| 156 |
+
|
| 157 |
+
def _fit_model(train):
|
| 158 |
+
return (FrontierRUL() if FRONTIER else SklearnRUL(MODEL_KIND)).fit(train)
|
| 159 |
# Inclusion appetite, tuned by local CV: alpha sweep 0.7-1.3 on dev has a clear
|
| 160 |
# minimum at 0.8 (beats every alternative on 11-12 of 16 origins), confirmed on
|
| 161 |
# the test block (0.8: 1398 vs 1.15: 1516). Component curves show why: past 0.8
|
|
|
|
| 373 |
# eliminates the time-budget fallback risk. Own-fleet rows are
|
| 374 |
# excluded: same fleet means same answer key.
|
| 375 |
foreign = base[~base['device_id'].isin(fleet)]
|
| 376 |
+
static_model = _fit_model(foreign)
|
| 377 |
static_uniq = int(foreign.loc[foreign['dies42'] == 1, 'device_id'].nunique())
|
| 378 |
log(f' static foreign fit: {len(foreign)} pairs, {static_uniq} unique '
|
| 379 |
f'deaths (own-fleet frac {own_fleet:.2f})')
|
|
|
|
| 480 |
own_pairs = train[~train['foreign']]
|
| 481 |
assert (own_pairs['origin'] + pd.Timedelta(days=WINDOW_DAYS) <= T).all()
|
| 482 |
uniq = int(train.loc[train['dies42'] == 1, 'device_id'].nunique())
|
| 483 |
+
fitted[fkey] = (_fit_model(train), uniq)
|
| 484 |
model, train_uniq = fitted[fkey]
|
| 485 |
|
| 486 |
feats = features_at_origin(daily, locs, T)
|