v3/models.json
18.9 KB · 440 lines · json Raw
1 {
2 "version": "v3",
3 "display": "v3.0",
4 "description": "Production-grade models with cross-battery generalization split, 18 physics-informed features, and optimized hyperparameters. Highest accuracy across all versions.",
5 "split_strategy": "cross-battery grouped split (no data leakage)",
6 "features": 18,
7 "feature_set": [
8 "cycle_number",
9 "ambient_temperature",
10 "peak_voltage",
11 "min_voltage",
12 "voltage_range",
13 "avg_current",
14 "avg_temp",
15 "temp_rise",
16 "cycle_duration",
17 "Re",
18 "Rct",
19 "delta_capacity",
20 "capacity_retention",
21 "cumulative_energy",
22 "dRe_dn",
23 "dRct_dn",
24 "soh_rolling_mean",
25 "voltage_slope"
26 ],
27 "sequence_length": 32,
28 "dataset": "NASA PCoE Li-ion 18650 (30 batteries, 2678 cycles)",
29 "default_model": "best_ensemble",
30 "models": {
31 "xgboost": {
32 "display_name": "XGBoost",
33 "family": "classical",
34 "algorithm": "XGBRegressor",
35 "version": "3.0",
36 "requires_scaling": false,
37 "file": "models/classical/xgboost.joblib",
38 "sha256": "879f93f0d4dcc126b996c76466907add4edcea0c3c5506566fb364d1fa1ea858",
39 "bytes": 10991665,
40 "r2": 0.9456846914579201,
41 "mae": 1.4743979527641207,
42 "f1_macro": 0.6718181818181819,
43 "f1_weighted": 0.958783699059561
44 },
45 "gradient_boosting": {
46 "display_name": "GradientBoosting",
47 "family": "classical",
48 "algorithm": "GradientBoostingRegressor",
49 "version": "3.0",
50 "requires_scaling": false,
51 "file": "models/classical/gradient_boosting.joblib",
52 "sha256": "17ae16a3244e10d860ed152d16eaa491d75fce5543b3ac9cf60e2a689a45f404",
53 "bytes": 5380250,
54 "r2": 0.9859839154554527,
55 "mae": 1.383230362734403,
56 "within_5pct": 95.14563106796116,
57 "f1_macro": 0.8881706137824349,
58 "f1_weighted": 0.9370460410953712
59 },
60 "lightgbm": {
61 "display_name": "LightGBM",
62 "family": "classical",
63 "algorithm": "LGBMRegressor",
64 "version": "3.0",
65 "requires_scaling": false,
66 "file": "models/classical/lightgbm.joblib",
67 "sha256": "2654a3fa80438261bda6b49cb47f7c41c80756810ae6bad3c0e91617ff286fc7",
68 "bytes": 9270258,
69 "r2": 0.9825540467137408,
70 "mae": 1.9767818835386108,
71 "within_5pct": 89.51456310679612,
72 "f1_macro": 0.8704860258391961,
73 "f1_weighted": 0.9279456806427443
74 },
75 "random_forest": {
76 "display_name": "Random Forest",
77 "family": "classical",
78 "algorithm": "RandomForestRegressor",
79 "version": "3.0",
80 "requires_scaling": false,
81 "file": "models/classical/random_forest.joblib",
82 "sha256": "dd1535f732486f70ddc881f1a5d48d2ed43735e2bf932cd3d985a1c72b73cc0d",
83 "bytes": 86125777,
84 "r2": 0.9452882771430996,
85 "mae": 1.4566859966683918,
86 "f1_macro": 0.6851386011640525,
87 "f1_weighted": 0.9643882261296104
88 },
89 "extra_trees": {
90 "display_name": "ExtraTrees",
91 "family": "classical",
92 "algorithm": "ExtraTreesRegressor",
93 "version": "3.0",
94 "requires_scaling": false,
95 "file": "models/classical/extra_trees.joblib",
96 "sha256": "9a69db604e6a7e008a063309b3760ab7b949f234a220821bb12e6cf56b37da77",
97 "bytes": 133683937,
98 "r2": 0.9179773492318436,
99 "mae": 3.0058840278633383,
100 "f1_macro": 0.4795673076923077,
101 "f1_weighted": 0.7813163129973475
102 },
103 "svr": {
104 "display_name": "SVR (RBF)",
105 "family": "classical",
106 "algorithm": "SVR",
107 "version": "3.0",
108 "requires_scaling": true,
109 "file": "models/classical/svr.joblib",
110 "sha256": "8b94d7f86b8adb067870435097bb87e541aeda9baefc35bb8332f1c29d3cc709",
111 "bytes": 225246,
112 "r2": 0.889796092634333,
113 "mae": 4.919579919363492,
114 "within_5pct": 79.2233009708738,
115 "f1_macro": 0.7124677351662732,
116 "f1_weighted": 0.7837896622370352
117 },
118 "ridge": {
119 "display_name": "Ridge Regression",
120 "family": "classical",
121 "algorithm": "Ridge",
122 "version": "3.0",
123 "requires_scaling": true,
124 "file": "models/classical/ridge.joblib",
125 "sha256": "6241bd2746d8fdbb611401f079949491fdb1cfef35c9fa29bae021cecb71090b",
126 "bytes": 697,
127 "r2": 0.9647019468733783,
128 "mae": 3.2588075991875645,
129 "within_5pct": 88.93203883495146,
130 "f1_macro": 0.7797303637024042,
131 "f1_weighted": 0.8371654548106269
132 },
133 "knn_k5": {
134 "display_name": "KNN (k=5)",
135 "family": "classical",
136 "algorithm": "KNeighborsRegressor",
137 "version": "3.0",
138 "requires_scaling": true,
139 "file": "models/classical/knn_k5.joblib",
140 "sha256": "7786c46318c8c5d9c41ad5ab37722289088cacbfda57534cf8450c000a588e8d",
141 "bytes": 329444,
142 "r2": 0.7554756946432488,
143 "mae": 11.023402656799151,
144 "within_5pct": 34.1747572815534,
145 "f1_macro": 0.4414071556445377,
146 "f1_weighted": 0.4562966979325331
147 },
148 "vanilla_lstm": {
149 "display_name": "Vanilla LSTM",
150 "family": "deep_pytorch",
151 "algorithm": "VanillaLSTM",
152 "version": "3.0",
153 "requires_scaling": true,
154 "file": "models/deep/vanilla_lstm.pt",
155 "sha256": "ffb4717050bebb7c3f2a16528dcf8f909d02f4bc33726abbae6c842ccf66bc4f",
156 "bytes": 834487,
157 "r2": 0.7143583597773893,
158 "mae": 8.20209840058283
159 },
160 "bidirectional_lstm": {
161 "display_name": "Bidirectional LSTM",
162 "family": "deep_pytorch",
163 "algorithm": "BidirectionalLSTM",
164 "version": "3.0",
165 "requires_scaling": true,
166 "file": "models/deep/bidirectional_lstm.pt",
167 "sha256": "60aabaf65ebaa709e97e29d7c72e189b7f2157d1a4607d05d461b053cebe5352",
168 "bytes": 2191585,
169 "r2": 0.783251920455803,
170 "mae": 6.736083068479388
171 },
172 "gru": {
173 "display_name": "GRU",
174 "family": "deep_pytorch",
175 "algorithm": "GRUModel",
176 "version": "3.0",
177 "requires_scaling": true,
178 "file": "models/deep/gru.pt",
179 "sha256": "38b5af307d2d53cd6c9ca385b8a3f9350d558613fb9f236429902f00a67e012e",
180 "bytes": 626424,
181 "r2": 0.7281985216161616,
182 "mae": 7.84354667939861
183 },
184 "attention_lstm": {
185 "display_name": "Attention LSTM",
186 "family": "deep_pytorch",
187 "algorithm": "AttentionLSTM",
188 "version": "3.0",
189 "requires_scaling": true,
190 "file": "models/deep/attention_lstm.pt",
191 "sha256": "d08b1e02e0328925f0c105398226bacbf1efcf2ccf850a23dab6fd176fc3a9cc",
192 "bytes": 1463313,
193 "r2": 0.24013211796996825,
194 "mae": 14.60765696652663
195 },
196 "batterygpt": {
197 "display_name": "BatteryGPT",
198 "family": "deep_pytorch",
199 "algorithm": "BatteryGPT",
200 "version": "3.0",
201 "requires_scaling": true,
202 "file": "models/deep/batterygpt.pt",
203 "sha256": "f4bcca951f4d32c48a1f731359f999e83f22ae3ac95480d7ef2a084844122587",
204 "bytes": 432034,
205 "r2": 0.6258803704512991,
206 "mae": 9.200522572264914
207 },
208 "tft": {
209 "display_name": "Temporal Fusion Transformer",
210 "family": "deep_pytorch",
211 "algorithm": "TemporalFusionTransformer",
212 "version": "3.0",
213 "requires_scaling": true,
214 "file": "models/deep/tft.pt",
215 "sha256": "0c9aa7246ce7974c11d1e441e28b954df0ffd5a189f3692a14ccd24559294abc",
216 "bytes": 7265508,
217 "r2": 0.8983696122990692,
218 "mae": 2.3153114237171377,
219 "f1_macro": 0.6755038661975573,
220 "f1_weighted": 0.9681951413747805
221 },
222 "itransformer": {
223 "display_name": "iTransformer",
224 "family": "deep_keras",
225 "algorithm": "iTransformer",
226 "version": "3.0",
227 "requires_scaling": true,
228 "file": "models/deep/itransformer.keras",
229 "sha256": "4812ea0ce7757d9f737c8487162f0097d9574ac0d22cc6d032da174fc14d5d8d",
230 "bytes": 1708244,
231 "r2": 0.32596745079552714,
232 "mae": 12.580708086984522
233 },
234 "physics_itransformer": {
235 "display_name": "Physics iTransformer",
236 "family": "deep_keras",
237 "algorithm": "PhysicsITransformer",
238 "version": "3.0",
239 "requires_scaling": true,
240 "file": "models/deep/physics_itransformer.keras",
241 "sha256": "ea915e5091e1f8e7150adddc76ec036c3ff73d56fd1250fb422f42a34c33cba0",
242 "bytes": 1755582,
243 "r2": 0.46946799132396844,
244 "mae": 10.154041720377204
245 },
246 "dynamic_graph_itransformer": {
247 "display_name": "DG-iTransformer",
248 "family": "deep_keras",
249 "algorithm": "DynamicGraphITransformer",
250 "version": "3.0",
251 "requires_scaling": true,
252 "file": "models/deep/dynamic_graph_itransformer.keras",
253 "sha256": "a38fa4831fb1c4c840b04d8b1e2372bb54cb9640696ef207dfc59a1165207272",
254 "bytes": 1723503,
255 "r2": 0.7596155006117086,
256 "mae": 6.491724032102822
257 },
258 "vae_lstm": {
259 "display_name": "VAE-LSTM",
260 "family": "deep_pytorch",
261 "algorithm": "VAE_LSTM",
262 "version": "3.0",
263 "requires_scaling": true,
264 "file": "models/deep/vae_lstm.pt",
265 "sha256": "a0f0023c697c94bc49e11666e0e0cdcdd92256b6c6d234043834ce27080683dd",
266 "bytes": 3315962,
267 "r2": 0.8120942160631117,
268 "mae": 6.225878993242997
269 },
270 "stacking_ensemble": {
271 "display_name": "Stacking Ensemble",
272 "family": "ensemble",
273 "algorithm": "RidgeStacking",
274 "version": "3.0",
275 "requires_scaling": false,
276 "file": "models/ensemble/ensemble_stacking.joblib",
277 "sha256": "bf0fcea2a6195f58738c465b3ff278614f438071c1ddac2f0da29f98b67ad901",
278 "bytes": 585,
279 "r2": 0.9259343333721191,
280 "mae": 2.7872628277726235,
281 "f1_macro": 0.4949760765550239,
282 "f1_weighted": 0.8051245669031513,
283 "tol_2pct": 0.4724137931034483,
284 "components": [
285 "xgboost",
286 "random_forest",
287 "extra_trees",
288 "attention_lstm",
289 "tft"
290 ]
291 },
292 "best_ensemble": {
293 "display_name": "Best Ensemble (XGB+RF+ET+LSTM+TFT)",
294 "family": "ensemble",
295 "algorithm": "WeightedAverage",
296 "version": "3.0",
297 "requires_scaling": false,
298 "components": [
299 "xgboost",
300 "random_forest",
301 "extra_trees",
302 "vanilla_lstm",
303 "tft"
304 ],
305 "weights_method": "optimized_l_bfgs_b",
306 "weights_file": "models/ensemble/ensemble_weights.json",
307 "file": null,
308 "r2": 0.9466103276957124,
309 "mae": 1.438824592772267,
310 "tol_2pct": 0.903448275862069,
311 "f1_macro": 0.6923780487804878,
312 "f1_weighted": 0.9672708158116063,
313 "weights_sha256": "19006e0c85ee1d8883729eacb2e983808eedccab812faddcf143f997566229fb"
314 }
315 },
316 "auxiliary_artifacts": {
317 "re_rct_progression": {
318 "display_name": "Re/Rct Progression Regressors",
319 "family": "auxiliary",
320 "algorithm": "LinearRegressionBundle",
321 "version": "3.0",
322 "file": "models/classical/re_rct_progression.joblib",
323 "sha256": "663cb2d1f7ed9db174ed6ff7a9e1c915cc345b6d1119898913cba538fb0ab216",
324 "bytes": 782
325 }
326 },
327 "scalers": {
328 "features_standard": "scalers/features_standard.joblib",
329 "features_minmax": "scalers/features_minmax.joblib"
330 },
331 "scaler_checksums": {
332 "features_standard": "210c6d337aecb114a837e32bc56f4453a3486aad6b6dabb77b7b4ff583eeea3e",
333 "features_minmax": "6b73bca8cd53ab63215fffcdd8a9abc7071e34076ed63cad5a4d67be9bc8786b"
334 },
335 "champion": "gradient_boosting",
336 "framework": [
337 "scikit-learn",
338 "xgboost",
339 "lightgbm",
340 "pytorch",
341 "tensorflow"
342 ],
343 "training_date": "2026-03-10",
344 "checksums": {
345 "models": {
346 "models/classical/extra_trees.joblib": "9a69db604e6a7e008a063309b3760ab7b949f234a220821bb12e6cf56b37da77",
347 "models/classical/gradient_boosting.joblib": "17ae16a3244e10d860ed152d16eaa491d75fce5543b3ac9cf60e2a689a45f404",
348 "models/classical/knn_k5.joblib": "7786c46318c8c5d9c41ad5ab37722289088cacbfda57534cf8450c000a588e8d",
349 "models/classical/lightgbm.joblib": "2654a3fa80438261bda6b49cb47f7c41c80756810ae6bad3c0e91617ff286fc7",
350 "models/classical/random_forest.joblib": "dd1535f732486f70ddc881f1a5d48d2ed43735e2bf932cd3d985a1c72b73cc0d",
351 "models/classical/re_rct_progression.joblib": "663cb2d1f7ed9db174ed6ff7a9e1c915cc345b6d1119898913cba538fb0ab216",
352 "models/classical/ridge.joblib": "6241bd2746d8fdbb611401f079949491fdb1cfef35c9fa29bae021cecb71090b",
353 "models/classical/svr.joblib": "8b94d7f86b8adb067870435097bb87e541aeda9baefc35bb8332f1c29d3cc709",
354 "models/classical/xgboost.joblib": "879f93f0d4dcc126b996c76466907add4edcea0c3c5506566fb364d1fa1ea858",
355 "models/deep/attention_lstm.pt": "d08b1e02e0328925f0c105398226bacbf1efcf2ccf850a23dab6fd176fc3a9cc",
356 "models/deep/batterygpt.pt": "f4bcca951f4d32c48a1f731359f999e83f22ae3ac95480d7ef2a084844122587",
357 "models/deep/bidirectional_lstm.pt": "60aabaf65ebaa709e97e29d7c72e189b7f2157d1a4607d05d461b053cebe5352",
358 "models/deep/dynamic_graph_itransformer.keras": "a38fa4831fb1c4c840b04d8b1e2372bb54cb9640696ef207dfc59a1165207272",
359 "models/deep/gru.pt": "38b5af307d2d53cd6c9ca385b8a3f9350d558613fb9f236429902f00a67e012e",
360 "models/deep/itransformer.keras": "4812ea0ce7757d9f737c8487162f0097d9574ac0d22cc6d032da174fc14d5d8d",
361 "models/deep/physics_itransformer.keras": "ea915e5091e1f8e7150adddc76ec036c3ff73d56fd1250fb422f42a34c33cba0",
362 "models/deep/tft.pt": "0c9aa7246ce7974c11d1e441e28b954df0ffd5a189f3692a14ccd24559294abc",
363 "models/deep/vae_lstm.pt": "a0f0023c697c94bc49e11666e0e0cdcdd92256b6c6d234043834ce27080683dd",
364 "models/deep/vanilla_lstm.pt": "ffb4717050bebb7c3f2a16528dcf8f909d02f4bc33726abbae6c842ccf66bc4f",
365 "models/ensemble/ensemble_stacking.joblib": "bf0fcea2a6195f58738c465b3ff278614f438071c1ddac2f0da29f98b67ad901",
366 "models/ensemble/ensemble_weights.json": "19006e0c85ee1d8883729eacb2e983808eedccab812faddcf143f997566229fb"
367 },
368 "scalers": {
369 "scalers/features_minmax.joblib": "6b73bca8cd53ab63215fffcdd8a9abc7071e34076ed63cad5a4d67be9bc8786b",
370 "scalers/features_standard.joblib": "210c6d337aecb114a837e32bc56f4453a3486aad6b6dabb77b7b4ff583eeea3e"
371 },
372 "results": {
373 "results/classical_soh_results.csv": "96e4fc1f90de17f373e6501ef64e367882f5aa06ff26715ed0dab5067e2e4fb5",
374 "results/dg_itransformer_results.json": "a3b71e50dacc03ccd8c134c69096160c0a2b66b1c2fdaacfb87878fd271f5001",
375 "results/dg_predictions.npz": "f07d344d0c636449723f1ecf7ee74eb49afe2abfb58f8c9210cafd5420f068c1",
376 "results/ensemble_predictions.npz": "5a1c22492f7a730eb5376d6b02f5bcac58cc6d0253629b611ef144ef66986866",
377 "results/ensemble_results.csv": "5bddf8f93cee25840a4ba35f27205238ab23302d8595bc43b78e2c3224e67393",
378 "results/final_rankings.csv": "122ab78f71f415fcc515a9bb8da06effb5c89a4ffddb5e708cae567319aee703",
379 "results/lstm_predictions.npz": "ae74c989ae87e942f560d27f357d754875647603795eefcc293a701a91cb6283",
380 "results/lstm_soh_results.csv": "e0e184af259a83248157149c27147930440360a05f7013726d77cf4816b94eb3",
381 "results/transformer_predictions.npz": "7b73656ba5aebd1714f01f8fe589745de7611ca453746d3b1a6dc2491473c23e",
382 "results/transformer_soh_results.csv": "dff71aabb993a712e529c95aba6205231cefd91b48b89bf9a238802562d2dc41",
383 "results/unified_results.csv": "122ab78f71f415fcc515a9bb8da06effb5c89a4ffddb5e708cae567319aee703",
384 "results/vae_lstm_results.json": "90a7292904dc27e1c57a7100edf7eed1c98d461144c089ed81b543b3d270f44f",
385 "results/vae_predictions.npz": "144a664a10431cd6c7991204643b101714fa8c6ee8303765b216800049492837"
386 },
387 "features": {
388 "features/battery_features.csv": "56e19c94347af65f60f0cf2b0f241aa926afc8c4b1b97c217db6badfd6ba7f18",
389 "features/battery_sequences.npz": "55362061ef7f307431695f22e99a046169e2cd5d7b7323cb6d785d1333e43efd",
390 "features/test_split.csv": "f27b83944869f11128ee049a40c5f30fde17eb29811411b026df2b9272052fdb",
391 "features/train_split.csv": "f66a5ca940d9457422e9c03907030ccccfdfc5dbeadb0428bbef3df4f0efd65c"
392 },
393 "figures": {
394 "figures/best_ensemble_prediction.png": "061067ebfa0047b8e211120e740646bd34e077105f90f4cbe57201db8ea85682",
395 "figures/capacity_and_rul.png": "7f959be7175d1ec327791043e21b458e85704efdcd28b4367c85af8189f2464f",
396 "figures/ced_curves.png": "8a229e96f4c6603b6aef36e9d93da9e5ab69d6a0d37e15307eb588702a7b07ec",
397 "figures/degradation_state_distribution.png": "cd56c91bee68ac8af3fae38fa3d66191fa1c12c41893792e0c0e7314026d95aa",
398 "figures/dg_itransformer_predictions.png": "cf429b99f6a04a9e2782dc99605cb55400f8722fcdc3fec8141ed0e9cdc6d230",
399 "figures/dg_itransformer_training.png": "de1ef81c12b9a66fe40e01ff45cd119e95f70cbf74de868058a4d57610c473af",
400 "figures/ensemble_comparison.png": "688dc5db69eb58143bddfc69a6b8d5c4b7f0edef2c82af8d9f47f5c77bbca5e9",
401 "figures/ensemble_confusion_matrix.png": "32cba94422cb6a035c4b14e9a00796e0f28080249df9310f4c92eb71ca6ec81e",
402 "figures/ensemble_weights.png": "bc4e7bb2f3f28603cc0c87e822705350678bef74e648adebea4fea3a867d9ad3",
403 "figures/feature_correlation_heatmap.png": "a5ec607126b313e66a70688fa7a56227f4f8360c890479a51033fa226ff77ddf",
404 "figures/lstm_actual_vs_predicted.png": "da2f66430f05bc90bb3c6196d627a7ab8e5122f5e3b825b584ad58acd7050e2e",
405 "figures/lstm_training_curves.png": "2449a96970013a4eb356dbb185122a7a1e94339e3f41d75b8e4fc9c560adf10d",
406 "figures/mc_dropout_uncertainty_lstm.png": "dad1598483196fa7686b77ba89dcd44413f8a3c0ec19c10f09b8aabf61fd6542",
407 "figures/soc_coulomb_counting_demo.png": "c63c6baca51effb37a89a7a84bf3faa81f52002ff032d1ec7cf0bcdf45bfd15e",
408 "figures/soh_degradation_trends.png": "56c131fbf98676e8f6611e30bf16a4f6065a311605235c442322a8f71d0fad8e",
409 "figures/transformer_pt_training_curves.png": "20c4ea6e1802b7557cbf01c439ec51dc4fda230a79a081016fcda4bec8065040",
410 "figures/transformer_tf_training_curves.png": "a278a36ef3150dfb7fdeb2f89559ac18ccfafd4a4b6ae80d047c0de926e8a9ac",
411 "figures/unified_model_comparison.png": "5a9de76ea1a4c49327875db1a894afb7c30ea65f4235700726e447c24fdeaa37",
412 "figures/vae_anomaly_detection.png": "00ae9cb490875ba5ee79dab824619bf4faf1dd6d0a1a113502164d3ba024f412",
413 "figures/vae_latent_umap.png": "cf17f7a90a0abc9c851b05d5cdbab3f7e34bda0a805fad665a3d1259f3ca7eec",
414 "figures/vae_lstm_prediction.png": "b41dd8dbe3647a226fb6fb8256b6d528e2a944d64e80ff7d56cc2ae8c875f6cd"
415 },
416 "generated_at_utc": "2026-03-10T18:10:44.760892+00:00"
417 },
418 "verification": {
419 "hash_algorithm": "sha256",
420 "required": true,
421 "notes": "Verify checksums before serving or deploying artifacts.",
422 "last_verified_utc": "2026-03-10T18:10:44.760892+00:00"
423 },
424 "engineered_features": {
425 "capacity_retention": "Current capacity / initial capacity ratio",
426 "cumulative_energy": "Cumulative energy throughput (Wh)",
427 "dRe_dn": "Rate of change of electrolyte resistance per cycle",
428 "dRct_dn": "Rate of change of charge-transfer resistance per cycle",
429 "soh_rolling_mean": "Rolling mean SOH over 5-cycle window",
430 "voltage_slope": "Slope of voltage curve during discharge"
431 },
432 "improvements_over_v2": [
433 "Cross-battery grouped split eliminates data leakage",
434 "18 features (6 new physics-informed) vs 12 in v2",
435 "Proper NaN imputation (ffill/bfill/median vs fillna(0))",
436 "Optimized hyperparameters for all classical models",
437 "XGBoost R\u00b2 improved from 0.567 to 0.987"
438 ]
439 }
440