Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 16: dataset semantics verified (2451-device fleet, end_time = admin snapshot; no model change)
Thibaut Forest+1: Claude Opus 5 (1M context)
2de326a
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 15: swap-truncation/ghost/quarantine all rejected by panel; label 'noise' is the label process
Thibaut Forest+1: Claude Opus 5 (1M context)
e3fa964
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 14: building day-splitting (sd7) + censoring-aware pricing adopted
Thibaut Forest+1: Claude Opus 5 (1M context)
2ba75d6
Panel 1679.2 vs 1702.0, sd7 selected in 100% of random and blocked
splits; censoring-aware curves -32 on TRUNC=30 counterfactual, inert on
covered windows. Hazard-WHEN and park_mobility rejected. All-48 Docker
metric 2146.9 (was 2175.4).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 13: gap/heat/room-cascade plunger hypotheses all rejected by panel
Thibaut Forest+1: Claude Opus 5 (1M context)
2662738
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Panel 1702.0 vs 1715.8, 63% random-split selection, never beaten in a
decided blocked split. All-48 Docker metric 2175.4 (was 2202). Includes
user's phase-10 CohortGate + merged-block protocol write-up.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Silent-death campaign closed: precursor found (volatility) but unactionable
Thibaut Forest+1: Claude Opus 5 (1M context)
cedc5cb
Precursor screen on the blind zone (11,599 healthy-voltage pairs, 24 deaths):
30d voltage range/std carry AUC 0.83/0.81 before the plunge starts; diurnal
drift, beta drift, reading-rate, low-side outliers ~ chance. Both deployment
mechanisms fail CV: as global features (test 1438.7 vs champion 1397.5) the
signal dilutes; as a scale-free blind-zone ordering override (SilentFix) it
is inert at safe weights and harmful at active ones. Root cause quantified:
0.2% blind-zone prevalence makes precursor precision a few percent, so every
action loses in expectation against the 0.5/10 penalty arithmetic. Champion
unchanged (dev 2073.9 / test 1397.5). Features and SilentFix kept in code as
documented-rejected; ceiling moves only with new information.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Classifier-family sweep: RF/ExtraTrees/MLP + rank-hybrid all rejected by CV
Thibaut Forest+1: Claude Opus 5 (1M context)
fbe4c36
RandomForest (default/deep/class-balanced), ExtraTrees, and a small MLP all
lose 170-820 dev points to bagged logistic. RF ranks better at some origins
(AUC 0.94 vs 0.85 at s_23) but its compressed probabilities break topsum's
count; a rank_rf hybrid preserving logbag's probability scale while using
mean-rank ordering still loses (+92). Champion unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Phase 7: full coordinate sweep finds nothing - champion is a local optimum
Thibaut Forest+1: Claude Opus 5 (1M context)
30e8503
~25 knob values across forecast (C, bags, day-model GBR, recency weighting,
training-set variants incl. discrete hazard and determined labels, blends)
and optimization (emergency-day anchor, search budget, tspig/tspig2
routing-aware inclusion). Acceptance rule (>=60 dev AND >=10/16 origins)
adopted nothing; best was bags=30 at -9.4. dthaz statistically tied using a
different likelihood. Champion unchanged: logbag/tsroute/a0.8, dev 2073.9,
test 1398, public 1767.87 (rank 2). EXPERIMENTS.md updated with phases 5-7,
public LB readings, and full champion spec. Also wires SklearnRUL variant
specs (bags/dtrees/ddepth/q6) and per-config search knobs into the harness.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Explore voltage-silent deaths: cohort clock rejected by CV, champion unchanged
Thibaut Forest+1: Claude Opus 5 (1M context)
b636dfd
Silent deaths are fast plungers (same 2.40V crossing, ~3-week collapse), not a
separate mechanism. Candidates tested on the silent subpopulation:
- spatial clustering: AUC ~0.52, dead
- mean temperature: AUC 0.64, too weak
- install-cohort clock: AUC 0.906 in isolation (batch explains ~90% of
lifetime variance) but degrades dev CV in every encoding (2074 -> 2279 raw,
2433 overdue-neutral) due to 14%/54% coverage; kept in features.py as
documented-rejected, excluded from FEATURES.
Champion reproduces exactly after revert: dev 2073.9 (logbag/tsroute/a0.8).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Revert alpha to 0.8: local CV sweep rejects the leaderboard-motivated 1.15
Thibaut Forest+1: Claude Opus 5 (1M context)
c9e7e41
Dev sweep 0.7-1.3: minimum at 0.8 (2074; 1.15 scores 2219, losing on 12/16
origins). Test block confirms from the existing ledger (0.8: 1398 vs
1.15: 1516). Late_swap saturates ~1100 for alpha >= 1.15 while early keeps
climbing - remaining misses are voltage-silent deaths, not an inclusion
problem. Selection stays on local CV, not public feedback.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Raise inclusion alpha to 1.15 based on public leaderboard evidence
Thibaut Forest+1: Claude Opus 5 (1M context)
82d9553
Both public readings show late/early ratio ~8 for us vs ~1 for every top
team: the public fleet rewards more insurance swaps than the local test
block. alpha=1.15 reproduces the leader timing profile locally
(late 722 / early 550 vs 851/312 at 0.8). Clean A/B vs fc9c286: adaptive
pipeline identical, one constant changed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Uses the 30-minute runtime budget instead of a static pickle:
- submit.py: refits the model at every scenario origin on the target split's
own history pooled with packaged train features, with labels self-masked to
windows closed before each origin (assertion-enforced; never reads future
eol_times). Time-budget + mid-split deadline guards fall back to the static
pickle per split.
- logbag model: 15-fold bagged logistic (dev 2126 -> 2074, test 1440 -> 1398)
- stronger routing search: merge moves + restarts, and within-day visits now
sorted by building/room (the evaluator pays repeated building changes for
interleaved rows)
- tau_projected feature: master-curve inversion minus staleness, targeting
devices that go dark and keep discharging (test 1476 -> 1439)
- synthetic training origins every 4 days back to Feb-2025 (2.7x positives)
Walk-forward: dev 2074, test 1398, honest all-48 train metric 2202 with
mobility+limits at 242 vs current leaderboard leader's 280.
Runtime: 2…
Logistic RUL model with adaptive top-sum planner (walk-forward CV selected)
Thibaut Forest+1: Claude Opus 5 (1M context)
b89e779
- features.py: cached (device, origin) feature table; leak-free per-origin slicing
- models_cv.py: walk-forward CV harness; logistic/GBM/AFT/rank models,
threshold/topsum/batching planners; dev s_8-s_23, test s_24-s_41
- planner.py: final TopSumPlanner (logistic p42, N = 0.8 * sum(p42),
q05 day placement, building batching); refit on all closed windows
- harness.py: baseline comparisons (defer-all, lowest-voltage-k, oracle)
- best.pickle trained inside the competition Docker image (sklearn 1.7.2)
to avoid version skew; verified via script.py + metric in the image
Test-block walk-forward mean total_cost 1368 (voltage-15 2034, defer 2512,
oracle 186); train split via official metric: 2150 vs 8673 for the example.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
BatterySwapAI submission 001: test
Thibaut Forest
6d45918
Duplicate from batteryswapaichallenge/BatterySwapAI2026-Example