Battery ML Audit

Independent verification of battery SOH & RUL models.

I don't build your model — I audit it against held-out data and physical law, with every number regenerating from a script you keep.

The Problem This Solves

The party that builds a battery SOH/RUL model usually also reports its accuracy. That is a structural conflict of interest — and it is why "98% accuracy" claims so often collapse on a cell the model has never seen. You have to trust a vendor's number, but you have no neutral way to check it.

This audit is the neutral check. I did not build your model, I am not selling you a competing one, and I have no incentive to flatter the result. The only product is an honest verdict on whether the claim survives contact with data it has never seen.

What I Check — Seven Things, Each with a Concrete Output

01

1 · Split Integrity

Was the model validated cell-wise, or did consecutive cycles from one cell leak across train and test? Cycle-wise splits inflate accuracy because the model recognizes the cell instead of predicting.

→ Output: Leakage present (yes/no) + corrected accuracy under a group-aware split
02

2 · Preprocessing-Leakage Trace

Was any scaler or normalization fit on the full dataset before the split, leaking test-cell statistics upstream into training?

→ Output: Every point where a learned transform crosses the split boundary
03

3 · Metric Honesty

Is the reported error the full-set error, or was a hard cell quietly dropped to match a benchmark?

→ Output: Full-set error vs. reported error, with any excluded cells named
04

4 · Physical Consistency

Does the model respect physics — monotonic aging, no impossible capacity "recovery", internal resistance within real bounds — or does it quietly violate conservation?

→ Output: List of physical-law violations, if any
05

5 · Concurrence vs. Prediction

Does a claimed "predictor" actually forecast degradation early enough to act on, or does it only track degradation that is already happening?

→ Output: Whether the feature is genuinely predictive or merely concurrent
06

6 · Uncertainty Quantification

Does the model know how much it doesn't know — calibrated confidence intervals — or does it deliver a single bare number that hides its own error?

→ Output: Whether uncertainty is present, and whether it is actually calibrated
07

7 · Reproducibility Package

Every number I report regenerates from a single script I hand you. If I can't regenerate it, I don't claim it.

→ Output: The regeneration path — you can re-run the entire audit yourself

The Verdict

Supported

Survives held-out data and physical law; the number is the honest number.

Artifact

The effect is leakage, inflation, or curation; the corrected number differs, and I show by how much and why.

Unfalsifiable

The claim cannot be tested as written; I specify what would make it testable.

What I Guarantee

  • Every number in the report regenerates from source. No hand-copied metrics.
  • I state the method, the split, and the limitations of my own analysis.
  • I report negative results plainly. If your model is sound, I say so. If the gap is in my own check, I say that too.

What I Deliberately Do Not

  • An accuracy number. I am not selling a model, so I make no "95%" promise — that is the vendor claim this audit exists to test.
  • That your model will pass. The value is the honest verdict, not a flattering one.

The Credential

I hold my own work to the standard I sell. The public, DOI-archived portfolio is itself a worked example of every check above — applied to my own analyses first, catching my own errors before anyone else could:

Who This Is For

BESS operators, second-life firms, battery startups, and BESS investors / independent engineers who must trust a vendor's SOH/RUL number but have no neutral party to check it. The EU Battery Regulation's digital battery passport (mandatory 2027) is creating a wave of SOH documentation that will need exactly this kind of independent check.