v3/models.json
| 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 | |