Thibaut Forest Claude Fable 5 commited on
Commit ·
e4aaa05
1
Parent(s): 88db96b
docs: phase 67 - T4 count-flat campaign (6 lanes, ~50 arms) all rejected with mechanisms; 60d65da = count-flat ceiling
Browse files- EXPERIMENTS.md +37 -0
- agent_reports_bgkf/t4_ext.md +85 -0
- agent_reports_bgkf/t4_lit.md +115 -0
- agent_reports_bgkf/t4_seq.md +86 -0
- agent_reports_bgkf/t4_stack.md +86 -0
- agent_reports_bgkf/t4_surv.md +90 -0
- agent_reports_bgkf/t4_transplant.md +106 -0
EXPERIMENTS.md
CHANGED
|
@@ -3456,3 +3456,40 @@ favorable on bgkf warmup. Fourth count-coupled public refutation
|
|
| 3456 |
lone converter. bgkf's warmup block over-prices cold-scenario catches
|
| 3457 |
relative to the public fleet. PRIVATE SELECTION: 60d65da (count-flat
|
| 3458 |
lam2sp3, expected ~1571) or measured 4c93883 (1575.31); not e4745d2.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3456 |
lone converter. bgkf's warmup block over-prices cold-scenario catches
|
| 3457 |
relative to the public fleet. PRIVATE SELECTION: 60d65da (count-flat
|
| 3458 |
lam2sp3, expected ~1571) or measured 4c93883 (1575.31); not e4745d2.
|
| 3459 |
+
|
| 3460 |
+
## Phase 67 - T4 count-flat campaign (6 lanes, ~50 arms): ZERO adoptions - 60d65da confirmed as the count-flat ceiling of this feature space
|
| 3461 |
+
|
| 3462 |
+
User-directed sub-1400 count-flat push. Every lane paired vs 60d65da
|
| 3463 |
+
(1541.3) at 2sigma, parity-verified, swaps flat. All six REJECTED with
|
| 3464 |
+
mechanisms (reports agent_reports_bgkf/t4_*.md):
|
| 3465 |
+
- STACKING: learned metas over-weight the best-AUC source (gapHGB); plan
|
| 3466 |
+
cost is decided at the cutoff, which the cost-tuned .50/.30/.20 already
|
| 3467 |
+
encodes. Loss monotone in meta dose (+16.5 at 25% ... +139 HGB-meta).
|
| 3468 |
+
- EXTERNAL data/models: NASA transfer collapses to a monotone transform
|
| 3469 |
+
of the current voltage gap (Spearman .999) - lab aging corpora have
|
| 3470 |
+
near-uniform fade slopes; foundation models unloadable in the runtime
|
| 3471 |
+
stack (no transformers/safetensors). Measured +32.5 / wash.
|
| 3472 |
+
- SURVIVAL/LTR: Cox, cost-weighted listwise, martingale-GBM all lose the
|
| 3473 |
+
gap slot by >=2.6sig WITH identical features - the dies42 classification
|
| 3474 |
+
objective itself is the value. Cost-aligned listwise is the worst
|
| 3475 |
+
(gradient too diffuse at ~1.2k positives/157 groups).
|
| 3476 |
+
- LITERATURE features (knee/Bacon-Watts, sample entropy, monotonicity,
|
| 3477 |
+
relaxation, variance): all lose or wash inside the gapHGB; best
|
| 3478 |
+
standalone-AUC features lose MOST (dilute the depth-2 splits on the
|
| 3479 |
+
validated quartet). Anchored logbag control failed on cue (+61.6).
|
| 3480 |
+
- TRANSPLANT (rank-4 MnesisLab, full source read): geo-aware ordering
|
| 3481 |
+
tilt +135..+452 (their compactness gate passes on all our fold-fleets,
|
| 3482 |
+
so gating does not rescue it); seasonal temp layer = plan no-op (gated
|
| 3483 |
+
devices already top-ranked); left-truncated FP-AFT faithful (params
|
| 3484 |
+
match theirs) but moves ~1 unit; their EB wiener +128. THEIR 1407.63 IS
|
| 3485 |
+
OPERATING POINT + their untransplantable base pipeline, not a readable
|
| 3486 |
+
layer: 743 swaps converting at ~16.8 late-days/swap vs our 6.0 marginal.
|
| 3487 |
+
- SEQUENCE (GRU-D on 60d daily telemetry, 5-seed, fold-safe): encoder
|
| 3488 |
+
genuine (OOF AUC 0.94-0.96) but fully redundant with the snapshot
|
| 3489 |
+
stack; monotone-against dose response (+21.6 at w=.05).
|
| 3490 |
+
|
| 3491 |
+
CONCLUSION: 60d65da (CV 1541.3) is the measured count-flat ceiling of
|
| 3492 |
+
this feature space across our own features, the literature's, and the
|
| 3493 |
+
readable competitors' - the ordering axis is closed from every direction
|
| 3494 |
+
tried. PRIVATE SELECTION stands: 60d65da first, 4c93883 (measured
|
| 3495 |
+
1575.31) as the no-inference alternative.
|
agent_reports_bgkf/t4_ext.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 external-resources lane — final report (2026-08-23)
|
| 2 |
+
|
| 3 |
+
Question: can EXTERNAL battery datasets or pretrained time-series models
|
| 4 |
+
improve the count-flat ORDER vs head 60d65da (CV 1541.3 on bgkf)?
|
| 5 |
+
|
| 6 |
+
**Verdict: NO — well-argued and empirically measured negative.** Nothing on
|
| 7 |
+
the external axis reaches the 2σ new-mechanism bar tonight; the one candidate
|
| 8 |
+
that could be built (NASA PCoE transfer GRU) degenerates to a redundant
|
| 9 |
+
voltage-level rank and measures null-to-negative.
|
| 10 |
+
|
| 11 |
+
## Rules caveat (applies to everything below)
|
| 12 |
+
|
| 13 |
+
Whether competition rules permit external data / pretrained weights is
|
| 14 |
+
UNKNOWN. Any external candidate — including the NASA-trained GRU measured
|
| 15 |
+
here — would need an explicit rules check before any ship. None qualified on
|
| 16 |
+
merit anyway, so the question is moot tonight.
|
| 17 |
+
|
| 18 |
+
## Triage table
|
| 19 |
+
|
| 20 |
+
| Resource | Verdict | Why |
|
| 21 |
+
|---|---|---|
|
| 22 |
+
| NASA PCoE battery aging (phm-datasets S3, 200 MB, no registration) | ACQUIRED + MEASURED — null/negative | 34 cells .mat v5 (scipy.io reads; 26 usable ≥40 discharge cycles). Capacity-fade-per-cycle mapped to our gap-to-2.40V scale; transfer signal collapses to a level detector (see below). |
|
| 23 |
+
| CALCE (CS2 etc., direct zip, no registration) | DEAD in stack | Zips contain .xlsx; openpyxl absent from venv and competition runtime → unparseable. Same per-cycle structure as NASA anyway. |
|
| 24 |
+
| Toyota/Stanford Severson (data.matr.io) | DEAD in stack | .mat v7.3 = HDF5; h5py absent → unreadable. Files ~GB each. Same capacity-per-cycle structure. |
|
| 25 |
+
| Oxford battery degradation (ORA) | TRIAGED OUT | n=8 cells (too tiny to train anything), .mat retrieval path unclear inside budget; cycling structure again. |
|
| 26 |
+
| Sandia / batteryarchive.org | TRIAGED OUT | Download flow not scriptable in budget (account-gated cell downloads); per-cycle capacity structure → same degeneracy as NASA. |
|
| 27 |
+
| Calendar-aging sets (Samsung INR21700 279-cell "multi-stage", NMC/C-SiO 228-cell, Nature Sci Data 2024) | TRIAGED OUT | Closest structurally, but they publish periodic lab check-ups (capacity/OCV curves), NOT continuous daily float-voltage drift; multi-GB (over 2 GB budget); mapping to our task reduces to the same fade-level trajectory. |
|
| 28 |
+
| HF time-series foundation models (amazon/chronos, timesfm, moment, moirai, TTM) | DEAD ON ARRIVAL | `transformers` and `safetensors` absent from venv AND system python; no pip installs allowed; competition runtime = sklearn/torch/lifelines/scipy only. Models cannot even be LOADED, let alone shipped. Not measurable, not shippable. |
|
| 29 |
+
| Competition's own unlabeled telemetry | SKIPPED per mission | Closed, contaminated axis. |
|
| 30 |
+
|
| 31 |
+
## What was built and measured (NASA transfer)
|
| 32 |
+
|
| 33 |
+
Pipeline (all in /tmp/c26/, nothing tracked touched):
|
| 34 |
+
- `prep_ours.py` — leak-free lookback windows: per (device, origin 0–47),
|
| 35 |
+
last 64 calendar days of temp-gated (10–30 °C) daily-median voltage minus
|
| 36 |
+
2.40, interpolated on the day grid. 22,128 windows, 461 devices.
|
| 37 |
+
- `nasa_train_score.py` — 26 NASA cells' discharge-capacity trajectories
|
| 38 |
+
mapped to our scale (gap = 0 at 70% initial capacity, fresh gap 0.6 V);
|
| 39 |
+
time-stretch augmentation f ∈ {1,1.5,2,4,6,8} + 0.015 V noise; windows
|
| 40 |
+
L=64, label = crosses threshold within 42 units; GRU(1→16)+linear
|
| 41 |
+
(~1k params, torch-only → runtime-shippable in principle). Trained ONLY on
|
| 42 |
+
NASA → frozen, fold-safe by construction. Held-out-cell AUC 0.93.
|
| 43 |
+
- `run.py` — head-exact driver (order .50 logbag / .30 wiener / .20 gapHGB,
|
| 44 |
+
vm7, p*=1.0, split_days=3, timing_weight=2.0; ref asserts 1541.3).
|
| 45 |
+
|
| 46 |
+
**The decisive diagnostic**: on our windows, Spearman(GRU score, −final gap)
|
| 47 |
+
= 0.999, and slope-probe ramps at equal level get identical scores (fast
|
| 48 |
+
decline 0.031 vs slow 0.031 at gap 0.05). The GRU is a pure LEVEL detector.
|
| 49 |
+
Cause is structural, not a bug: within any time-stretch class of NASA
|
| 50 |
+
capacity trajectories, per-unit fade slope is nearly uniform, so
|
| 51 |
+
"crosses within 42 units" is fully determined by current level — the corpus
|
| 52 |
+
never forces slope-dependence. Broadening the stretch mix (f=1…8, 8× slope
|
| 53 |
+
range) did not change this. So the maximum transferable signal ≈ a monotone
|
| 54 |
+
transform of v_corr_last — the single most-mined feature in this competition
|
| 55 |
+
(v_last, vmin7_rank, wiener FHT all already encode level and better).
|
| 56 |
+
|
| 57 |
+
## Measured arms (bgkf, paired vs head 1541.3, 28 scored origins)
|
| 58 |
+
|
| 59 |
+
| Arm | SCORE | Δ ± SE | sig | W/L | Wilcoxon | swaps |
|
| 60 |
+
|---|---|---|---|---|---|---|
|
| 61 |
+
| ext4 — GRU as 4th order source, weights .45/.27/.18/.10 | 1573.8 | +32.5 ± 21.1 (worse) | 1.5σ | 10W/12L | p 0.236 | 2.26 |
|
| 62 |
+
| extemb — 8 GRU hidden dims added to gapHGB feature cols | 1540.2 | −1.2 ± 8.1 | 0.1σ | 4W/2L | p 0.688 | 2.27 |
|
| 63 |
+
|
| 64 |
+
Count-flatness vs ref: extemb swap counts identical on all origins; ext4
|
| 65 |
+
differs by 1 swap on 1 origin (reorder moved one battery across the planning
|
| 66 |
+
window edge — same magnitude as prior c9 arms at 2.28).
|
| 67 |
+
|
| 68 |
+
Reading: ext4 actively hurts — a redundant level rank at w=.10 dilutes the
|
| 69 |
+
richer 3-way order (mirrors t_rk4's +22.3 from the c9 wave). extemb is a
|
| 70 |
+
pure null — HGB absorbs/ignores the level-transform columns (which are also
|
| 71 |
+
NaN on the 72% synthetic training rows). Neither is close to the 2σ +
|
| 72 |
+
controls bar for a new mechanism. Nothing to ship.
|
| 73 |
+
|
| 74 |
+
## Tier verdict
|
| 75 |
+
|
| 76 |
+
REJECT the external axis for this competition. The failure is structural,
|
| 77 |
+
not effort-bounded: every accessible public dataset is cycle/calendar aging
|
| 78 |
+
whose mapping onto "daily float voltage drifting to a hard 2.40 V threshold"
|
| 79 |
+
collapses to fade-level — information the order already exploits to
|
| 80 |
+
saturation. Pretrained TS foundation models are unloadable in the allowed
|
| 81 |
+
stack. Recommend no further spend here before the deadline.
|
| 82 |
+
|
| 83 |
+
Artifacts: /tmp/c26/{prep_ours.py, nasa_train_score.py, run.py,
|
| 84 |
+
ext_scores.csv, gru_nasa.pt, cv_bgkfcand_ext4.csv, cv_bgkfcand_extemb.csv,
|
| 85 |
+
ours_windows.npz}; NASA raw in /tmp/c26/nasa/.
|
agent_reports_bgkf/t4_lit.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 LITERATURE lane — literature-derived count-flat order features
|
| 2 |
+
|
| 3 |
+
Date: 2026-08-23 (deadline day). Baseline: head config 60d65da = CV 1541.3
|
| 4 |
+
on bgkf (`/tmp/ref_head_1541.csv`, per-origin paired, 48 origins).
|
| 5 |
+
Work dir `/tmp/c25/` (build_lit.py, run.py, lane.log). No repo files touched.
|
| 6 |
+
|
| 7 |
+
## Literature sweep (~20 min, 5 searches)
|
| 8 |
+
|
| 9 |
+
What the battery-RUL/PHM literature suggests that is computable from a daily
|
| 10 |
+
median-voltage series in <=30 lines, mapped to our two known failure modes
|
| 11 |
+
(misses ranked 3-4 too low with signal present; plateau devices at
|
| 12 |
+
2.41-2.44 V, 40+ days, only 36% die):
|
| 13 |
+
|
| 14 |
+
1. **Knee-point / broken-stick detection** — Bacon-Watts and two-segment
|
| 15 |
+
fits are the standard for locating the transition from slow to fast
|
| 16 |
+
degradation; robust to noise, no capacity-fade model needed.
|
| 17 |
+
- Fermin-Cueto et al. (knee-point identification, Bacon-Watts),
|
| 18 |
+
via [MDPI Batteries 11(6) 221](https://doi.org/10.3390/batteries11060221)
|
| 19 |
+
and [knee-onset ID, IOPscience](https://iopscience.iop.org/article/10.1088/3049-4761/ae5067)
|
| 20 |
+
- [Segmented regression](https://en.wikipedia.org/wiki/Segmented_regression)
|
| 21 |
+
- Implemented: `bw_tau` (days-before-origin of best two-segment break on
|
| 22 |
+
the last 120 d, O(n) prefix-sum SSE grid), `bw_slope2` (post-knee
|
| 23 |
+
slope), `bw_dslope` (knee sharpness). Targets misses whose recent
|
| 24 |
+
regime change is diluted in the fixed-window slopes.
|
| 25 |
+
|
| 26 |
+
2. **Sample entropy of voltage** — SampEn of discharge voltage is a
|
| 27 |
+
recurring SOH indicator (Widodo et al.; RVM prognostics).
|
| 28 |
+
- [Sample-entropy prognostics with RVM, J. Manuf. Syst.](https://www.sciencedirect.com/science/article/abs/pii/S0278612521000741)
|
| 29 |
+
- Implemented: `sampen_30` (m=1, r=0.2*std, last 30 daily values).
|
| 30 |
+
|
| 31 |
+
3. **Monotonicity metric (PHM prognostic-parameter suitability, Coble &
|
| 32 |
+
Hines family)** — Spearman rho of voltage vs time; a plateau device is
|
| 33 |
+
flat (rho ~ 0) while a real decliner is monotone (rho ~ -1). Directly
|
| 34 |
+
attacks the plateau false-include mode.
|
| 35 |
+
- [Data-driven prognostics based on health indicators (HAL)](https://hal.science/hal-00869489/document)
|
| 36 |
+
- Implemented: `mono_60` (Spearman rho over last 60 d).
|
| 37 |
+
|
| 38 |
+
4. **Relaxation/recovery statistics** — Zhu et al., Nat Comm 2022: variance,
|
| 39 |
+
skewness, maxima of the voltage-relaxation curve predict capacity; the
|
| 40 |
+
recovery-from-minimum idea transfers as rebound features.
|
| 41 |
+
- [Zhu et al. 2022, Nature Communications](https://www.nature.com/articles/s41467-022-29837-w)
|
| 42 |
+
- Implemented: `reb_30 = v_last - v_min_30`, `reb_frac` (rebound as a
|
| 43 |
+
fraction of the drop from baseline), `skew_30` (skewness of last 30
|
| 44 |
+
daily values).
|
| 45 |
+
|
| 46 |
+
5. **Variance-of-degradation** — float-voltage spread/variance rises toward
|
| 47 |
+
EOL in stationary lead-acid fleets.
|
| 48 |
+
- [Lead-acid EOL field discussion](https://forum.solar-electric.com/discussion/354321/learning-to-identify-end-of-life-for-lead-acid-batteries),
|
| 49 |
+
[multi-phase Wiener RUL for lead-acid](https://www.sciencedirect.com/science/article/abs/pii/S0957582025002411)
|
| 50 |
+
- Implemented: zero-cost arm, `vstd_30`/`rng_30` already on the table
|
| 51 |
+
(never tried inside the gap-HGB; dead only as GLOBAL logbag features).
|
| 52 |
+
|
| 53 |
+
Considered and skipped: label-statistic smoothers (banned — lagging),
|
| 54 |
+
cohort/batch clocks (already adjudicated), CNN/GPR/RVM model swaps (not
|
| 55 |
+
count-flat order deliverables in the time budget), ranking-under-censoring
|
| 56 |
+
methods (method-level, no <=30-line feature).
|
| 57 |
+
|
| 58 |
+
## Delivery vehicle
|
| 59 |
+
|
| 60 |
+
All features delivered ADDED to the gap-HGB order source of the shipped
|
| 61 |
+
3-way order (.50 logbag(vm7) + .30 wiener + .20 gapHGB), champion HGB
|
| 62 |
+
architecture identical (depth2 lr.06 300it seed0), only cols change.
|
| 63 |
+
Feature pass strictly as-of-origin (`day <= origin`), same in-band
|
| 64 |
+
daily-median series as features.py, all 168 origins (real + synthetic),
|
| 65 |
+
cached to /tmp/c25/lit_features.parquet (77 299 rows).
|
| 66 |
+
|
| 67 |
+
Parity arm `t_head` re-runs the exact head config against the reference.
|
| 68 |
+
|
| 69 |
+
## Feature diagnostics (closed pairs, before any CV run)
|
| 70 |
+
|
| 71 |
+
Direction-free single-feature AUC vs dies42: bw_slope2 0.75 (reversed),
|
| 72 |
+
mono_60 0.65, reb_frac 0.66, vstd_30/rng_30 0.82/0.83, sampen_30 0.53
|
| 73 |
+
(dead), skew_30 0.56. On the plateau cohort (v_corr_last 2.41-2.44,
|
| 74 |
+
n=636, death rate 0.37): bw_slope2 0.63 and mono_60 0.63 are the best
|
| 75 |
+
discriminators — the literature signals DO exist in this data, on the right
|
| 76 |
+
cohort. They just do not convert to plan cost (below).
|
| 77 |
+
|
| 78 |
+
## Results (paired vs head 1541.3 per origin, 48 origins; positive = worse)
|
| 79 |
+
|
| 80 |
+
| arm | delivery | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
|
| 81 |
+
|--------|-----------------------|--------|--------------|-----|--------|----------|-------|
|
| 82 |
+
| t_head | parity (exact head) | 1541.3 | +0.0± 0.0 | 0.4 | 1W/1L | nan | 2.27 |
|
| 83 |
+
| t_bw | gapHGB + bw_tau/slope2/dslope | 1573.4 | +32.1±17.2 | 1.9 | 8W/9L | 0.159 | 2.28 |
|
| 84 |
+
| t_ent | gapHGB + sampen_30 | 1555.9 | +14.6±19.7 | 0.7 | 8W/4L | 1.000 | 2.27 |
|
| 85 |
+
| t_mono | gapHGB + mono_60 | 1576.2 | +34.8��21.3 | 1.6 | 7W/9L | 0.348 | 2.27 |
|
| 86 |
+
| t_reb | gapHGB + reb_30/reb_frac/skew_30 | 1549.7 | +8.3±12.5 | 0.7 | 7W/6L | 0.893 | 2.27 |
|
| 87 |
+
| t_var | gapHGB + vstd_30/rng_30 | 1567.5 | +26.1±21.7 | 1.2 | 10W/11L | 0.432 | 2.28 |
|
| 88 |
+
| t_lb_reb | logbag primary + reb family (anchored control) | 1602.9 | +61.6±26.3 | 2.3 | 13W/18L | 0.079 | 2.27 |
|
| 89 |
+
|
| 90 |
+
Anchored control behaves exactly as predicted: the least-bad HGB family
|
| 91 |
+
(reb) moved into the logbag order-primary loses +61.6 at 2.3sig — same
|
| 92 |
+
failure shape as GAP4 in logbag (+123). The instrument is measuring what it
|
| 93 |
+
should.
|
| 94 |
+
|
| 95 |
+
Count-flat check (per (origin, fold) n_swaps vs reference, 240 cells):
|
| 96 |
+
t_head/t_ent/t_mono cell-identical; t_bw/t_reb/t_var differ in 3-4 cells by
|
| 97 |
+
max ±1 (break-even top-up wiggle). All arms are order-only as designed.
|
| 98 |
+
|
| 99 |
+
Combos (t_bwmono, t_all, ...) were pre-registered but NOT run: every
|
| 100 |
+
single-family arm lost, so stacking them cannot clear the bar; deadline
|
| 101 |
+
budget went to the anchored control instead.
|
| 102 |
+
|
| 103 |
+
## Verdict
|
| 104 |
+
|
| 105 |
+
REJECT — tier: no adoption, report-only. Zero of five literature arms wins;
|
| 106 |
+
best is t_reb at +8.3±12.5 (noise-level LOSS), worst are the two arms whose
|
| 107 |
+
features had the best plateau AUC (t_bw +32.1 at 1.9sig, t_mono +34.8 at
|
| 108 |
+
1.6sig — significant in the WRONG direction). The pattern repeats the GAP4
|
| 109 |
+
logbag lesson from the other side: features with real cohort-level AUC
|
| 110 |
+
dilute the depth-2 HGB's splits on the already-validated gap quartet and
|
| 111 |
+
push the marginal ranking around at exactly the rank-gap 1-10 positions
|
| 112 |
+
where the cost lives. The gap-HGB at its shipped weight (.20) appears
|
| 113 |
+
saturated; the head config's feature set survives another five-way attack
|
| 114 |
+
unchanged.
|
| 115 |
+
|
agent_reports_bgkf/t4_seq.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 SEQUENCE lane: GRU temporal encoder on raw daily telemetry (NEGATIVE)
|
| 2 |
+
|
| 3 |
+
Date 2026-08-23. Baseline: head 60d65da (order .50 logbag(vm7) + .30 wiener
|
| 4 |
+
+ .20 gapHGB; values logbag @ alpha 1.0; planner tw 2.0 / split 3), reference
|
| 5 |
+
per-cell CSV /tmp/ref_head_1541.csv, CV 1541.3 on bgkf. All arms paired vs
|
| 6 |
+
that reference on the 48 all-building scenario totals.
|
| 7 |
+
|
| 8 |
+
## Hypothesis
|
| 9 |
+
|
| 10 |
+
The whole stack is snapshot features; degradation SHAPE (knees, dips,
|
| 11 |
+
recovery, plateau texture) in the raw daily series is unexploited. A small
|
| 12 |
+
recurrent encoder (CMAPSS / battery-SoH literature) on the last 60 days of
|
| 13 |
+
daily telemetry as a new order source.
|
| 14 |
+
|
| 15 |
+
## Method
|
| 16 |
+
|
| 17 |
+
- Sequences: per (device, origin) row of the feature table, the 60 calendar
|
| 18 |
+
days ENDING at the origin (leak spot-checked). 4 channels: daily median
|
| 19 |
+
v_corr (v - 0.005*(t-20), last-obs-carried-forward, fixed physical
|
| 20 |
+
normalization - nothing fitted), observed mask, days-since-last-obs
|
| 21 |
+
(GRU-D-style delta, /90), temp-gated in-band coverage mask. Built once for
|
| 22 |
+
all 71,878 rows (no cross-device stats, so one cache serves every fold).
|
| 23 |
+
Builder: /tmp/c22/build_seqs.py -> /tmp/c22/seqs.npz.
|
| 24 |
+
- Encoder: GRU(4 -> hidden 48, 2 layers, dropout 0.1) -> linear logit on
|
| 25 |
+
dies42. BCE, pos_weight = neg/pos, positives urgency-weighted (RankNet
|
| 26 |
+
'days' precedent). Adam lr 3e-3, wd 1e-3, 30 epochs, batch 1024.
|
| 27 |
+
- Fold safety: exact replication of run_bgkf's split (cv.build_folds) and
|
| 28 |
+
train subset (closed rows, fold-train buildings only). NO self-supervised
|
| 29 |
+
pretraining, no test-fold telemetry in any fit (phase-51 lesson honored).
|
| 30 |
+
Seed ensemble = 5 seeds, combined as mean of within-fleet pct ranks.
|
| 31 |
+
Fitter: /tmp/c22/fit_seq.py -> /tmp/c22/seq_scores_f{0..4}.parquet.
|
| 32 |
+
- Measurement: cv.run_bgkf(kind='logbag', variant='vm7', blend=(arm,1.0),
|
| 33 |
+
p_star=1.0, split_days=3, timing_weight=2.0) - value-preserving order
|
| 34 |
+
mapping, counts fixed. Driver /tmp/c22/run.py; per-cell CSVs
|
| 35 |
+
/tmp/cv_bgkfcand_c22_*.csv.
|
| 36 |
+
- Parity control: re-implemented champion order reproduces the reference
|
| 37 |
+
EXACTLY (+0.0, 46/48 cells identical), so arm deltas are clean.
|
| 38 |
+
|
| 39 |
+
## Encoder quality (out-of-fold, test-building closed real-origin rows)
|
| 40 |
+
|
| 41 |
+
| fold | seq AUC | -v_last AUC | pos |
|
| 42 |
+
|------|---------|-------------|-----|
|
| 43 |
+
| 0 | 0.951 | 0.944 | 123 |
|
| 44 |
+
| 1 | 0.942 | 0.946 | 91 |
|
| 45 |
+
| 2 | 0.939 | 0.964 | 80 |
|
| 46 |
+
| 3 | 0.908 | 0.779 | 71 |
|
| 47 |
+
| 4 | 0.956 | 0.954 | 61 |
|
| 48 |
+
|
| 49 |
+
The encoder is real (it generalizes across buildings; fold 3 shows it beats
|
| 50 |
+
the raw level where v_last fails) but overall only ~matches a single strong
|
| 51 |
+
snapshot feature.
|
| 52 |
+
|
| 53 |
+
## Results (paired vs head 1541.3; 48 scenarios)
|
| 54 |
+
|
| 55 |
+
| arm | order | SCORE | delta +/- SE | sig | W/L | wilcoxon | swaps |
|
| 56 |
+
|-----|-------|-------|--------------|-----|-----|----------|-------|
|
| 57 |
+
| champ (parity) | .50/.30/.20/- | 1541.3 | +0.0 +/- 0.0 | 0.4 | 1W/1L | nan | 2.27 |
|
| 58 |
+
| (d) seq_alone | 0/0/0/1.0 | 1935.7 | +394.4 +/- 71.3 | 5.5 | 9W/39L | 0.000 | 2.26 |
|
| 59 |
+
| (a) seq_g20 | .50/.30/0/.20 | 1654.3 | +113.0 +/- 36.5 | 3.1 | 14W/21L | 0.017 | 2.27 |
|
| 60 |
+
| (c) seq_w30 | .50/0/.20/.30 | 1613.8 | +72.5 +/- 27.1 | 2.7 | 20W/22L | 0.089 | 2.25 |
|
| 61 |
+
| (b) seq_4th | .45/.27/.18/.10 | 1584.1 | +42.8 +/- 20.4 | 2.1 | 9W/14L | 0.140 | 2.27 |
|
| 62 |
+
| dose ctrl | .475/.285/.19/.05 | 1562.9 | +21.6 +/- 16.9 | 1.3 | 6W/7L | 0.508 | 2.27 |
|
| 63 |
+
|
| 64 |
+
All arms count-flat (2.25-2.27 vs ref 2.27). Dose-response is MONOTONE
|
| 65 |
+
against the source: 0 -> +0.0, .05 -> +21.6, .10 -> +42.8, .20 -> +113.0.
|
| 66 |
+
Every insertion point (gap slot, wiener slot, 4th source, any weight) makes
|
| 67 |
+
the order worse; the losses are significant in the wrong direction.
|
| 68 |
+
|
| 69 |
+
## Verdict
|
| 70 |
+
|
| 71 |
+
REJECTED (new-mechanism tier needs >= 2 sigma IMPROVEMENT; we have 2-5 sigma
|
| 72 |
+
degradation). The temporal-shape signal the GRU extracts is already captured
|
| 73 |
+
by the snapshot stack (slopes, accel, drop_recent, wiener drift, gap
|
| 74 |
+
features); at the margin the encoder adds noise, not recall. Standalone
|
| 75 |
+
anchor (1935.7) confirms it is far from champion-grade on its own.
|
| 76 |
+
|
| 77 |
+
Do NOT retest: GRU/temporal encoder on daily (v_corr, mask, delta, in-band)
|
| 78 |
+
sequences as an order source at any slot/weight in the 3-way order. A
|
| 79 |
+
materially different attempt would need a different signal (e.g. sub-daily
|
| 80 |
+
texture), not different weights.
|
| 81 |
+
|
| 82 |
+
## Deployment cost (moot, for the record)
|
| 83 |
+
|
| 84 |
+
Fit: ~7 s/epoch uncontended at 2 torch threads -> ~3.5 min/seed, ~17.5 min
|
| 85 |
+
for the 5-seed ensemble (deployment fits once on full train); inference on
|
| 86 |
+
the whole table <10 s. Inside the 30-min budget, but not shipped.
|
agent_reports_bgkf/t4_stack.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 stacking lane: learned meta-combiner over the 3-source order — REJECTED
|
| 2 |
+
|
| 3 |
+
Date: 2026-08-23. Lane: STACKING (T4 count-flat campaign).
|
| 4 |
+
Baseline: head config 60d65da, CV 1541.3 on bgkf (`/tmp/ref_head_1541.csv`,
|
| 5 |
+
parity re-verified through this lane's own driver). Champion order =
|
| 6 |
+
fixed-weight rank blend .50*rank(logbag vm7) + .30*rank(WienerFHT) +
|
| 7 |
+
.20*rank(gapHGB depth2 on FEATURES+vmin7_rank+GAP4).
|
| 8 |
+
|
| 9 |
+
## Question
|
| 10 |
+
|
| 11 |
+
Can a LEARNED fold-safe meta-combiner (stacked generalization) beat the
|
| 12 |
+
fixed .50/.30/.20 weights by knowing per-device WHEN to trust which source
|
| 13 |
+
(context: wnr_n, staleness, gap_ratio, vmin7_rank; disagreement stats)?
|
| 14 |
+
|
| 15 |
+
## Method
|
| 16 |
+
|
| 17 |
+
Driver `/tmp/c24/run.py` (diagnostic `/tmp/c24/diag.py`). Inside each outer
|
| 18 |
+
fold's fit(train): fold-train split by BUILDING into K=4 inner folds
|
| 19 |
+
(deaths-sorted snake, deterministic; the established contamination rule —
|
| 20 |
+
never by row); out-of-fold predictions of all 3 sources on every train row,
|
| 21 |
+
pct-ranked WITHIN origin_idx groups (the deployment-time analog: the test
|
| 22 |
+
fleet is ranked at one origin, ~5 buildings — inner-test is also ~5
|
| 23 |
+
buildings, so rank distributions match); meta fit on
|
| 24 |
+
[r1,r2,r3, spread, |ri-rj|, wnr_n, staleness, gap_ratio, vmin7_rank] ->
|
| 25 |
+
dies42; sources refit on full fold-train; meta combines their test ranks.
|
| 26 |
+
Order-only: measured via cv.run_bgkf(kind='logbag', variant='vm7',
|
| 27 |
+
blend=(arm,1.0), p_star=1.0, split_days=3, timing_weight=2.0) — blend w2=1.0
|
| 28 |
+
reassigns the primary's sorted p42 values onto the meta's order, so the
|
| 29 |
+
count machinery is untouched. Paired vs the 48 per-scenario reference
|
| 30 |
+
totals. cv.py/models_cv.py md5-pinned per run (race guard); no repo files
|
| 31 |
+
touched.
|
| 32 |
+
|
| 33 |
+
## Results (paired vs head 1541.3, 48 scenarios)
|
| 34 |
+
|
| 35 |
+
| arm | meta | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
|
| 36 |
+
|---|---|---|---|---|---|---|---|
|
| 37 |
+
| par (parity) | fixed .50/.30/.20 | 1541.3 | +0.0±0.0 | 0.4σ | 1W/1L | – | 2.27 |
|
| 38 |
+
| a_log | logistic, ranks+disagree+context | 1604.5 | +63.2±44.8 | 1.4σ | 19W/25L | p0.208 | 2.26 |
|
| 39 |
+
| b_hgb | HGB depth2, same features | 1680.5 | +139.2±61.6 | 2.3σ | 17W/31L | p0.020 | 2.28 |
|
| 40 |
+
| c_ranks | HGB depth2, 3 ranks only | 1613.2 | +71.9±46.5 | 1.5σ | 17W/26L | p0.113 | 2.30 |
|
| 41 |
+
| d_cvx | convex weights, simplex grid by OOF AUC | 1598.6 | +57.3±41.0 | 1.4σ | 21W/21L | p0.620 | 2.28 |
|
| 42 |
+
| e_logrk | logistic, 3 ranks only | 1619.1 | +77.8±44.0 | 1.8σ | 17W/24L | p0.257 | 2.26 |
|
| 43 |
+
| e_log50 | 0.50*champ + 0.50*rank(a_log) | 1594.8 | +53.4±27.5 | 1.9σ | 13W/26L | p0.065 | 2.26 |
|
| 44 |
+
| e_log75 | 0.75*champ + 0.25*rank(a_log) | 1557.8 | +16.5±19.6 | 0.8σ | 16W/11L | p0.838 | 2.27 |
|
| 45 |
+
|
| 46 |
+
All deltas positive = WORSE than head. Every learned arm loses; b_hgb is a
|
| 47 |
+
2.3σ significant LOSS. Swaps flat everywhere (2.26-2.30 vs 2.27) — the
|
| 48 |
+
mechanism is count-flat as designed; the losses are pure ordering damage.
|
| 49 |
+
|
| 50 |
+
## Why it fails (diagnostic, per outer fold)
|
| 51 |
+
|
| 52 |
+
Per-source inner-OOF AUCs: lb 0.932-0.944, wiener 0.919-0.947, gap
|
| 53 |
+
0.941-0.955 — gapHGB is the BEST dies42 classifier in every fold. So any
|
| 54 |
+
classification-trained meta over-weights it:
|
| 55 |
+
|
| 56 |
+
- d_cvx learned weights (lb, wn, gap): (.15,.45,.40), (.10,.25,.65),
|
| 57 |
+
(.05,.30,.65), (.30,.30,.40), (.25,.20,.55) — gap at 2-3x its champion
|
| 58 |
+
weight, logbag starved. The champion .50/.30/.20 is IN the grid and the
|
| 59 |
+
learned points beat it on inner-OOF AUC in all 5 folds (+0.001 to +0.008)
|
| 60 |
+
— yet cost says the opposite. Objective mismatch, not estimation noise.
|
| 61 |
+
- a_log coefficients: r3 (gap) largest in 4/5 folds; context features get
|
| 62 |
+
small/unstable coefficients (vmin7_rank negative only because it double-
|
| 63 |
+
counts with the sources) — context adds nothing (a_log ~ e_logrk ~ c_ranks).
|
| 64 |
+
- Dose-response is monotone: 25% meta +16.5, 50% +53.4, 100% +63.2. The
|
| 65 |
+
learned order contributes no positive increment at ANY mixing weight.
|
| 66 |
+
|
| 67 |
+
Root cause: dies42-AUC/logloss over the closed-pair corpus is dominated by
|
| 68 |
+
separating obvious survivors from obvious deaths, where gapHGB excels. Plan
|
| 69 |
+
cost is decided by the fine ordering near the swap-inclusion cutoff and its
|
| 70 |
+
timing interplay, where logbag's calibrated top ranks matter — exactly what
|
| 71 |
+
the fully-mapped cost simplex (.50/.30/.20 optimal) already encodes. A
|
| 72 |
+
fold-safe meta cannot see cost, so it reliably walks AWAY from the cost
|
| 73 |
+
optimum toward the classification optimum (~.15/.30/.55 region).
|
| 74 |
+
|
| 75 |
+
## Verdict
|
| 76 |
+
|
| 77 |
+
Tier: REJECTED, mechanism dead — do not adopt, no arm to escalate.
|
| 78 |
+
Stacked generalization over these 3 sources is structurally mispriced under
|
| 79 |
+
any label-classification objective; the fixed .50/.30/.20 cost-mapped
|
| 80 |
+
weights stand. Do NOT revisit with a different meta-model family (HGB,
|
| 81 |
+
logistic, constrained-convex, ranks-only, context, shrinkage all measured
|
| 82 |
+
here); the only untried fix — per-fold weights tuned on plan cost — is the
|
| 83 |
+
already-dead static-simplex search wearing fold noise.
|
| 84 |
+
|
| 85 |
+
Artifacts: /tmp/c24/run.py, /tmp/c24/diag.py, /tmp/c24/*.out,
|
| 86 |
+
/tmp/cv_bgkfcand_c24_*.csv.
|
agent_reports_bgkf/t4_surv.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 survival/ranking campaign: literature-grade survival & LTR as order sources
|
| 2 |
+
|
| 3 |
+
**Date:** 2026-08-23 (deadline day). **Agent:** SURVIVAL/RANKING lane, /tmp/c23/.
|
| 4 |
+
**Verdict up front: comprehensive REJECT — all 13 arms lose to the head, most at 2.6–3.3σ. No adoption candidate. All arms count-flat (swaps 2.27±0.02).**
|
| 5 |
+
|
| 6 |
+
## Setup
|
| 7 |
+
|
| 8 |
+
- Baseline: head config 60d65da, CV 1541.3 on bgkf; reference per-cell CSV
|
| 9 |
+
`/tmp/ref_head_1541.csv` (assert passed: groupby-origin mean within 1.0).
|
| 10 |
+
- Measurement: `cv.run_bgkf(kind='logbag', variant='vm7', blend=(name,1.0),
|
| 11 |
+
p_star=1.0, split_days=3, timing_weight=2.0)` — value-preserving rank blend,
|
| 12 |
+
counts untouched. Paired per-origin deltas over 48 all-building totals.
|
| 13 |
+
- Champion order = .50·rank(logbag vm7) + .30·rank(WienerFHT) + .20·rank(gapHGB).
|
| 14 |
+
- **Parity control:** a from-parts recomposition of the head order (`ctrl`)
|
| 15 |
+
scored 1541.3, delta +0.0 (1W/1L, ties elsewhere) — the composer is faithful,
|
| 16 |
+
so every arm delta is attributable to the swapped-in source alone.
|
| 17 |
+
- Fold safety: supervised sources fit on the fold-train closed table run_bgkf
|
| 18 |
+
hands them; Cox-family censored pools built exactly per cv.py's hazard-branch
|
| 19 |
+
recipe (`mc.censored_pairs(FULL, max_origin)` restricted to fold-train devices).
|
| 20 |
+
- Driver + sources: `/tmp/c23/run.py`; per-cell CSVs `/tmp/c23/cv_*.csv`.
|
| 21 |
+
|
| 22 |
+
## Order sources tested (methods, not features)
|
| 23 |
+
|
| 24 |
+
- **cox** — lifelines CoxPHFitter (penalizer 1.0 / 0.1) on FEATURES+vmin7_rank
|
| 25 |
+
(median-impute + standardize), proper censoring from the censored-pairs pool;
|
| 26 |
+
order = log partial hazard.
|
| 27 |
+
- **lcw** — cost-aware LISTWISE ranker (torch, 5-seed bag, MLP 32/16, 300 ep):
|
| 28 |
+
softmax loss over per-origin groups, each positive's gain = expected late-day
|
| 29 |
+
cost `10·(42 − days_to_eol)` (floor 5). Meaningfully different from the dead
|
| 30 |
+
plain RankNet: listwise normalization over the whole origin group + linear
|
| 31 |
+
cost gains (0–420) instead of pairwise BCE with 1–2× weights.
|
| 32 |
+
- **mgb** — GBM-Cox hybrid (two-stage boosting-for-survival): HGB regressor
|
| 33 |
+
(3-seed bag, depth 2, lr .06, 300 iter) on lifelines martingale residuals;
|
| 34 |
+
order = log-partial-hazard + HGB(residual). (Residuals realigned from
|
| 35 |
+
lifelines' duration-sorted output — verified.)
|
| 36 |
+
- **\*g4** variants — same sources given the four gap-approach columns
|
| 37 |
+
(gap_ratio, rel_close, dwell_flat, gap_log), closing the features-vs-method
|
| 38 |
+
confound in the gap slot.
|
| 39 |
+
|
| 40 |
+
## Results (paired vs head 1541.3; 48 origins; swaps target ~2.27)
|
| 41 |
+
|
| 42 |
+
| arm | slot | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
|
| 43 |
+
|---|---|---|---|---|---|---|---|
|
| 44 |
+
| ctrl (parity) | head recomposed | 1541.3 | +0.0±0.0 | 0.4σ | 1W/1L | — | 2.27 |
|
| 45 |
+
| cox1_gap | gap .20 | 1611.7 | +70.4±24.2 | 2.9σ | 13W/25L | .019 | 2.27 |
|
| 46 |
+
| cox01_gap | gap .20 | 1614.0 | +72.7±24.9 | 2.9σ | 13W/19L | .065 | 2.27 |
|
| 47 |
+
| coxg4_gap | gap .20 (+GAP4) | 1648.4 | +107.1±32.7 | 3.3σ | 12W/26L | .001 | 2.28 |
|
| 48 |
+
| cox1_4th | 4th .10 | 1561.2 | +19.9±13.5 | 1.5σ | 11W/9L | .571 | 2.27 |
|
| 49 |
+
| cox1_alone | alone | 1665.5 | +124.2±46.8 | 2.7σ | 13W/33L | .006 | 2.24 |
|
| 50 |
+
| lcw_gap | gap .20 | 1618.5 | +77.2±28.2 | 2.7σ | 8W/26L | .003 | 2.27 |
|
| 51 |
+
| lcwg4_gap | gap .20 (+GAP4) | 1619.3 | +78.0±29.6 | 2.6σ | 10W/24L | .011 | 2.27 |
|
| 52 |
+
| lcw_4th | 4th .10 | 1578.2 | +36.9±21.5 | 1.7σ | 12W/14L | .340 | 2.27 |
|
| 53 |
+
| lcw_alone | alone | 1710.4 | +169.1±61.5 | 2.7σ | 18W/29L | .012 | 2.25 |
|
| 54 |
+
| mgb_gap | gap .20 | 1651.5 | +110.2±34.2 | 3.2σ | 7W/23L | .001 | 2.29 |
|
| 55 |
+
| mgbg4_gap | gap .20 (+GAP4) | 1650.3 | +109.0±36.4 | 3.0σ | 5W/28L | .001 | 2.29 |
|
| 56 |
+
| mgb_4th | 4th .10 | 1571.2 | +29.9±21.0 | 1.4σ | 7W/11L | .181 | 2.27 |
|
| 57 |
+
| mgb_alone | alone | 1625.0 | +83.7±47.4 | 1.8σ | 20W/27L | .098 | 2.26 |
|
| 58 |
+
|
| 59 |
+
(All deltas are LOSSES; positive = worse than head.)
|
| 60 |
+
|
| 61 |
+
## Reading
|
| 62 |
+
|
| 63 |
+
1. **The gap slot's signal is the objective, not the features.** With identical
|
| 64 |
+
GAP4 columns, Cox (+107), listwise-cost (+78) and martingale-GBM (+109) all
|
| 65 |
+
lose the slot by 2.6–3.3σ; the dies42 classification HGB is doing real,
|
| 66 |
+
method-specific work there.
|
| 67 |
+
2. **Proper censoring buys nothing here.** Cox partial hazard alone (+124) is
|
| 68 |
+
far behind the champion composite; the closed-window dies42 label already
|
| 69 |
+
captures what the 42d planning problem needs. Martingale-residual boosting
|
| 70 |
+
does add order signal over pure Cox (alone: +84 vs +124) but never enough.
|
| 71 |
+
3. **Cost-weighted listwise is the weakest source** (alone +169) despite being
|
| 72 |
+
aligned with the real cost objective — with ~1.2k positives across ~157
|
| 73 |
+
origin-groups the listwise gradient is too diffuse; the champion's bagged
|
| 74 |
+
logistic + FHT prior generalize better at this n.
|
| 75 |
+
4. **Dilution monotonicity:** every source's damage scales with its weight
|
| 76 |
+
(alone > gap .20 > 4th .10), and no 4th-slot arm shows even a directional
|
| 77 |
+
win (best: cox1_4th +19.9±13.5, 11W/9L, wilcoxon .571 — noise-shaped loss).
|
| 78 |
+
|
| 79 |
+
## Tier verdict
|
| 80 |
+
|
| 81 |
+
Adoption bar (tiered, user-approved): new mechanisms need ≥2σ paired WINS with
|
| 82 |
+
controls. **Nothing qualifies �� every arm is a loss; the best is a 1.4σ loss.**
|
| 83 |
+
No follow-up recommended on this axis.
|
| 84 |
+
|
| 85 |
+
DEAD (do not retest): Cox partial hazard as order source (any penalizer, any
|
| 86 |
+
slot, ±GAP4), cost-weighted listwise/softmax ranker (per-origin groups, late-day
|
| 87 |
+
gains, any slot, ±GAP4), GBM-on-martingale-residuals hybrid (any slot, ±GAP4).
|
| 88 |
+
Together with the earlier kills (discrete-time hazard HGB, AFT-lite+IPCW, plain
|
| 89 |
+
RankNet, imminence-weighted gap-HGB) this closes the survival/LTR order-source
|
| 90 |
+
axis: **the champion 3-way order stands.**
|
agent_reports_bgkf/t4_transplant.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# T4 TRANSPLANT — rank-4 competitor mechanisms on the head config
|
| 2 |
+
|
| 3 |
+
**Agent:** transplant lane, T4 count-flat campaign. **Date:** 2026-08-23.
|
| 4 |
+
**Baseline:** head 60d65da (3-way order .50 logbag / .30 wiener / .20 gap-HGB,
|
| 5 |
+
alpha 1.0, split_days 3, timing_weight 2.0) = **CV 1541.3** on bgkf.
|
| 6 |
+
Reference per-cell CSV `/tmp/ref_head_1541.csv` (asserted 1541.31).
|
| 7 |
+
**Parity:** the order3 replica reproduced the deployed head exactly
|
| 8 |
+
(champ arm: 1541.3, delta +0.0, swaps 2.27) — every arm below is paired
|
| 9 |
+
against a validated baseline.
|
| 10 |
+
|
| 11 |
+
**Source:** rank-4 competitor's readable source (public 1407.63 vs our
|
| 12 |
+
lineage 1575.31), cached `/tmp/hf_battery3/carl/` (`hierarchical_fpt.py`,
|
| 13 |
+
`identity_ensemble.py`, `competition_planner.py`).
|
| 14 |
+
**Code:** `/tmp/c27/` (precompute.py, aft_precompute.py, run.py, run_aft20.py);
|
| 15 |
+
per-cell CSVs `/tmp/cv_bgkfcand_c27_*.csv`. No tracked file touched,
|
| 16 |
+
monkeypatch only, no commits.
|
| 17 |
+
|
| 18 |
+
All arms are ORDER-ONLY: blend value-preservation keeps the logbag p42
|
| 19 |
+
multiset, so the count machinery is untouched (swaps 2.26–2.30 vs head 2.27).
|
| 20 |
+
Fold-safety: all fits on fold-train only; pools within fold-train; the
|
| 21 |
+
364-day seasonal lag reads LAST year (legal); frozen constants
|
| 22 |
+
(beta 0.00549 V/degC) are not fits.
|
| 23 |
+
|
| 24 |
+
## Results (paired vs head, 48 all-building scenario totals)
|
| 25 |
+
|
| 26 |
+
| arm | mechanism | SCORE | delta±SE | sig | W/L | wilcoxon | swaps |
|
| 27 |
+
|---|---|---|---|---|---|---|---|
|
| 28 |
+
| champ | parity replica | 1541.3 | +0.0±0.0 | 0.4 | 1W/1L | – | 2.27 |
|
| 29 |
+
| geo05 | geography tilt w=.05 | 1676.5 | **+135.2±38.5** | 3.5 | 7W/26L | .000 | 2.28 |
|
| 30 |
+
| geo10 | geography tilt w=.10 | 1853.5 | **+312.2±60.6** | 5.2 | 6W/37L | .000 | 2.29 |
|
| 31 |
+
| geo20 | geography tilt w=.20 | 1993.1 | **+451.8±65.3** | 6.9 | 5W/41L | .000 | 2.30 |
|
| 32 |
+
| geomult | rank(p42pctl·(250+E_b)) | 1944.2 | **+402.9±68.7** | 5.9 | 2W/36L | .000 | 2.29 |
|
| 33 |
+
| seas_hgb | seasonal feats in gap-HGB | 1585.9 | +44.6±26.5 | 1.7 | 9W/14L | .160 | 2.28 |
|
| 34 |
+
| seas_p05 | seasonal gated post w=.05 | 1541.3 | +0.0±0.0 | 0.4 | 1W/1L | – | 2.27 |
|
| 35 |
+
| seas_p10 | seasonal gated post w=.10 | 1541.3 | −0.0±0.0 | 1.0 | 2W/0L | – | 2.27 |
|
| 36 |
+
| aft10 | FP-lifetime AFT 4th @.10 | 1540.2 | −1.1±0.8 | 1.4 | 6W/5L | .520 | 2.26 |
|
| 37 |
+
| aft20 | FP-lifetime AFT 4th @.20 | 1559.7 | +18.4±15.6 | 1.2 | 13W/12L | .895 | 2.27 |
|
| 38 |
+
| carlw30 | their EB wiener in .30 slot | 1669.7 | **+128.4±43.7** | 2.9 | 14W/27L | .008 | 2.27 |
|
| 39 |
+
| carl4_15 | their FPT residual @.15 | 1540.0 | −1.3±8.0 | 0.2 | 6W/6L | .970 | 2.27 |
|
| 40 |
+
| carl4_20 | their FPT residual @.20 | 1566.0 | +24.6±17.5 | 1.4 | 10W/9L | .595 | 2.27 |
|
| 41 |
+
|
| 42 |
+
## Tier verdict: NOTHING ADOPTS
|
| 43 |
+
|
| 44 |
+
No arm reaches the 1.5-sigma count-flat-tweak bar, let alone the 2-sigma +
|
| 45 |
+
controls bar for new mechanisms. Best arms (aft10 −1.1±0.8, carl4_15
|
| 46 |
+
−1.3±8.0) are washes; four arms are significant LOSSES.
|
| 47 |
+
|
| 48 |
+
## Per-diagnostic notes
|
| 49 |
+
|
| 50 |
+
**Geography-aware ordering tilt (their emergency-cost pricing).**
|
| 51 |
+
Implemented planner-side via the `rank_score` column in `plan_tsroute`
|
| 52 |
+
(top-n SET changes, n itself unchanged). E_b = both depot legs +
|
| 53 |
+
building/room/battery service time + overtime share + daily penalty,
|
| 54 |
+
exactly their `mean_dedicated_trip_hours` geometry. Monotonically
|
| 55 |
+
catastrophic in w (+135 → +452), losses near-uniform across scenarios, so
|
| 56 |
+
the peer's fallback (their 007 gate: apply only when fleet mean
|
| 57 |
+
dedicated-trip cost ≤ 8h) is settled without a run: **all five fold-fleets
|
| 58 |
+
pass the gate** (means 1.9–7.7h), so gated ≡ ungated ≡ rejected. Reading:
|
| 59 |
+
under a fixed count, tilting marginal inclusions toward expensive-to-reach
|
| 60 |
+
buildings evicts true positives; geography does not price OUR misses
|
| 61 |
+
because the planner already routes and times whatever set it is given.
|
| 62 |
+
Their pricing pays off only jointly with their bigger selection set.
|
| 63 |
+
|
| 64 |
+
**Seasonal temperature signal (their one novel idea).** Full construction
|
| 65 |
+
transplanted (health = V − 0.00549·(T−20), 90d drift slope clipped ≤0,
|
| 66 |
+
42d forecast + same-device temp 364d ago re-added, re-smoothed, min,
|
| 67 |
+
gate pmin ≤ 2.50V). Coverage: strict machinery valid on 54% of
|
| 68 |
+
device-origins; the ≤2.50V gate fires on 9.2%. As a gated within-set
|
| 69 |
+
permutation (their assign_multiset delivery) it is a **cost no-op at
|
| 70 |
+
w=.05/.10**: the gated devices are already at the very top of the champion
|
| 71 |
+
order, so re-permuting them changes no plan. As gap-HGB features
|
| 72 |
+
(seas_pmin_rx, seas_dtemp) it is a 1.7-sigma LOSS (+44.6) — the signal the
|
| 73 |
+
gate carries is already saturated by v_corr/tau_projected; what is left is
|
| 74 |
+
noise the HGB overfits. Their novelty does not transfer because our stack
|
| 75 |
+
already prices temperature (v_corr_*) and terminal proximity.
|
| 76 |
+
|
| 77 |
+
**Their EB Wiener (12 weekly increments, leave-building-out pool,
|
| 78 |
+
1.4826·MAD diffusion).** As the .30-slot replacement: 2.9-sigma LOSS
|
| 79 |
+
(+128.4). Our cached per-device MLE (180d window, K=6 shrinkage toward
|
| 80 |
+
population median) is simply a better drift estimator here than their
|
| 81 |
+
12-week median-increment with EB shrinkage toward a fold-train pool.
|
| 82 |
+
As their literal gated 15% rank residual on top of the champion: wash
|
| 83 |
+
(−1.3±8.0); at 20%: negative. Their Wiener is a weaker sibling of a slot
|
| 84 |
+
we already occupy with a stronger implementation.
|
| 85 |
+
|
| 86 |
+
**AFT on first-passage lifetimes (left-truncated log-normal).** Faithful
|
| 87 |
+
implementation confirmed: our fold fits give b0≈0.86–1.22, b1≈0.84–0.89,
|
| 88 |
+
sigma≈0.22–0.24 vs their published train fit b0=0.874, b1=0.889,
|
| 89 |
+
sigma=0.233; 79 event devices among reliable rows (theirs: 76). This is
|
| 90 |
+
NOT our dead AFT-on-observed-EOL — different target, truncation handled.
|
| 91 |
+
Still: −1.1±0.8 at their weight .10 (1.4 sigma, trivially small because the
|
| 92 |
+
gated set again overlaps the already-selected top), and pushing the weight
|
| 93 |
+
to .20 flips it negative (+18.4). Correct sign, no adoptable magnitude.
|
| 94 |
+
|
| 95 |
+
## Is their 1407.63 method or operating point?
|
| 96 |
+
|
| 97 |
+
**Operating point.** Every mechanism in their readable source, transplanted
|
| 98 |
+
at matched swap count onto our order, is a wash or a loss (best −1.3,
|
| 99 |
+
sub-0.5-sigma). Their board profile — 743 swaps / 3349 late-days vs our
|
| 100 |
+
644 / 5009 — says they buy ~99 extra swaps and convert them at ~16.8
|
| 101 |
+
late-days per marginal swap (ours convert at ~6.0 near our cutoff). That
|
| 102 |
+
conversion rate is only reachable with more inclusions on a fleet whose
|
| 103 |
+
tail we demonstrably cannot rank into the top-644; no count-flat ordering
|
| 104 |
+
graft closes it. The appetite axis is CLOSED by user directive, so this is
|
| 105 |
+
a diagnosis, not an action item: their gap is appetite + selection-set
|
| 106 |
+
size, not transferable ordering signal.
|