Projet de data engineering

Dégradation de batteries Li-ion : du fichier brut à l'API

Un pipeline complet construit sur les données de 34 cellules de la NASA : ingestion idempotente, PostgreSQL, transformations dbt, analyse de fin de vie, API FastAPI et dashboard.

Instantané du 20 octobre 2026. Les chiffres et les graphiques ci-dessous viennent des vrais résultats du projet, mais aucun serveur ne tourne derrière cette page : pour l'application complète (API et dashboard), le projet se lance en quelques commandes (voir le dépôt).

En chiffres

6 / 22
cellules ont franchi leur seuil de fin de vie
34
cellules étudiées
fichiers MATLAB bruts de la NASA
2 541
décharges valides
sur 2 794 mesurées
9
prévisions publiées
7 refusées car peu fiables
20 décharges
d'erreur moyenne
à 70 % de la vie observée (backtest)

Comment c'est construit

Chaque étape est testée, et la CI GitHub reconstruit toute la chaîne depuis un dépôt vide.

  1. Fichiers NASA (.mat)34 cellules au format MATLAB brut, téléchargées avec vérification d'empreinte.
  2. Ingestion PythonIdempotente : relancer ne duplique rien. Doublons et fichiers corrompus gérés.
  3. PostgreSQL : raw, staging, martsTransformations et tests dbt. Les valeurs douteuses sont marquées, pas supprimées.
  4. Analyse PythonPic de capacité, pente de perte, genou, prévision de fin de vie et backtest.
  5. API FastAPILecture seule, avec un rôle de base dédié. Chaque prévision porte ses réserves.
  6. Dashboard StreamlitNe lit que l'API, jamais la base.

Ce que montrent les données

Graphiques interactifs : survolez les courbes pour lire les valeurs. Chaque graphique a son tableau de données.

Une cellule observée jusqu'à la fin de vie (B0005)

La capacité mesurée (points gris) et sa médiane glissante (bleu) baissent jusqu'à franchir le seuil de fin de vie de la NASA (trait horizontal, 1,4 Ah) à la décharge 125 (point noir). Le losange orange marque un genou détecté à la décharge 27 : la perte s'y accélère.

Voir les données
Rang de déchargeCapacité mesurée (Ah)Médiane glissante (Ah)
11.8561.846
21.8461.841
31.8351.835
41.8351.835
51.8351.835
61.8361.835
71.8351.835
81.8261.826
91.8251.825
101.8251.825
111.8251.825
121.8141.814
131.8141.814
141.8131.813
151.8031.803
161.8021.803
171.8031.803
181.8031.803
191.8031.803
201.8471.836
211.8471.836
221.8361.836
231.8261.826
241.8251.826
251.8261.825
261.8141.815
271.8151.814
281.8141.814
291.8031.814
301.8041.814
311.8521.82
321.8311.82
331.821.82
341.8091.809
351.8051.805
361.7991.799
371.7881.788
381.7831.783
391.7731.773
401.7731.773
411.7681.768
421.7621.768
431.7681.763
441.7631.762
451.7521.752
461.7421.752
471.7361.752
481.7941.767
491.7831.767
501.7671.767
511.7571.757
521.7471.747
531.7421.742
541.7361.736
551.7261.726
561.7161.716
571.7111.711
581.7061.706
591.71.7
601.6951.695
611.6851.685
621.6741.675
631.6751.674
641.6641.664
651.6591.659
661.6541.654
671.6431.643
681.6381.638
691.6331.633
701.6281.628
711.6221.622
721.6111.611
731.6071.607
741.6021.602
751.591.59
761.5861.59
771.5851.586
781.5961.585
791.5751.575
801.5651.565
811.561.56
821.5591.559
831.5551.555
841.5491.549
851.5381.538
861.5281.529
871.5291.528
881.5231.528
891.5171.529
901.6061.548
911.5641.548
921.5481.548
931.5321.532
941.5271.527
951.5171.517
961.5121.512
971.5071.507
981.5021.502
991.4911.491
1001.4861.486
1011.481.486
1021.4751.486
1031.4861.481
1041.4961.481
1051.4811.481
1061.471.47
1071.4541.455
1081.4541.454
1091.4551.454
1101.4491.449
1111.4391.439
1121.4331.433
1131.4331.433
1141.4281.428
1151.4231.423
1161.4171.417
1171.4121.413
1181.4131.413
1191.4081.413
1201.4331.417
1211.4381.417
1221.4171.417
1231.4071.407
1241.4011.401
1251.3971.397
1261.3911.391
1271.3861.386
1281.381.38
1291.3751.375
1301.3711.371
1311.3711.371
1321.3651.371
1331.3751.371
1341.3861.37
1351.371.37
1361.3651.365
1371.3541.355
1381.3551.355
1391.3551.354
1401.3491.349
1411.3441.344
1421.3391.339
1431.3391.339
1441.3341.334
1451.3291.329
1461.3231.323
1471.3181.318
1481.3181.318
1491.3181.318
1501.3241.324
1511.361.329
1521.341.329
1531.3291.329
1541.3241.324
1551.3191.319
1561.3131.313
1571.3131.313
1581.3081.308
1591.3031.303
1601.3031.303
1611.3031.303
1621.2981.298
1631.2981.298
1641.2931.293
1651.2881.293
1661.2871.293
1671.3091.299
1681.3251.309

Une prévision, et ses réserves (B0043)

Pour cette cellule la fin de vie n'est pas encore atteinte : la tendance est prolongée (pointillés) jusqu'au seuil (trait horizontal) et donne une fin de vie vers la décharge 54, intervalle 53 à 55. Cet intervalle est trop étroit : il ne reflète que l'incertitude sur la pente. C'est pourquoi l'API ne livre jamais ce chiffre sans ses réserves.

  • Résultat issu d'heuristiques non calibrées sur une vérité terrain (docs/degradation.md).
  • Extrapolation linéaire : elle prévoit une fin de vie trop tardive si la perte s'accélère et trop précoce si elle ralentit ; le backtest montre les deux cas.
  • L'intervalle ne reflète que l'incertitude sur la pente, pas l'erreur de modèle.
  • Backtest (18 prévisions rejouées sur 6 cellules) : l'intervalle contient la vraie fin de vie dans 5 cas sur 18 (il est donc trop étroit) ; erreur relative moyenne 18 %.
Voir les données
Rang de déchargeCapacité mesurée (Ah)Médiane glissante (Ah)
11.7141.696
21.6961.689
31.6811.681
41.6791.679
51.6691.669
61.6611.661
71.6511.651
81.6421.642
91.6351.635
101.6331.633
111.6261.626
121.6181.618
131.6141.614
141.6061.606
151.6031.603
161.5951.595
171.5881.588
181.581.588
191.5761.588
201.5951.581
211.591.581
221.5811.581
231.571.57
241.5641.564
251.5581.558
261.5541.554
271.551.55
281.5421.543
291.5431.542
301.5311.531
311.5251.525
321.521.52
331.5121.512
341.51.5
351.4921.493
361.4931.492
371.4921.492
381.4851.485
391.4771.481
401.4691.477

Trois cellules, mêmes conditions d'essai

B0005, B0006 et B0018 (24 °C, 2 A) perdent leur capacité à des rythmes différents. L'axe vertical est la capacité rapportée à son pic.

Voir les données
CelluleRang de déchargeCapacité lissée (Ah)SOH / pic
B000511.8461.006
B000521.8411.0
B000531.8350.994
B000541.8350.994
B000551.8350.994
B000561.8350.994
B000571.8350.994
B000581.8260.989
B000591.8250.988
B0005101.8250.988
B0005111.8250.988
B0005121.8140.983
B0005131.8140.982
B0005141.8130.982
B0005151.8030.976
B0005161.8030.976
B0005171.8030.976
B0005181.8030.977
B0005191.8030.976
B0005201.8361.0
B0005211.8361.001
B0005221.8360.995
B0005231.8260.989
B0005241.8260.989
B0005251.8250.989
B0005261.8150.983
B0005271.8140.983
B0005281.8140.982
B0005291.8140.976
B0005301.8140.977
B0005311.821.003
B0005321.820.992
B0005331.820.986
B0005341.8090.98
B0005351.8050.977
B0005361.7990.975
B0005371.7880.969
B0005381.7830.966
B0005391.7730.96
B0005401.7730.96
B0005411.7680.958
B0005421.7680.954
B0005431.7630.957
B0005441.7620.955
B0005451.7520.949
B0005461.7520.943
B0005471.7520.94
B0005481.7670.971
B0005491.7670.966
B0005501.7670.957
B0005511.7570.952
B0005521.7470.946
B0005531.7420.943
B0005541.7360.94
B0005551.7260.935
B0005561.7160.929
B0005571.7110.926
B0005581.7060.924
B0005591.70.921
B0005601.6950.918
B0005611.6850.913
B0005621.6750.907
B0005631.6740.907
B0005641.6640.901
B0005651.6590.899
B0005661.6540.896
B0005671.6430.89
B0005681.6380.887
B0005691.6330.884
B0005701.6280.882
B0005711.6220.879
B0005721.6110.873
B0005731.6070.87
B0005741.6020.867
B0005751.590.861
B0005761.590.859
B0005771.5860.858
B0005781.5850.864
B0005791.5750.853
B0005801.5650.848
B0005811.560.845
B0005821.5590.845
B0005831.5550.842
B0005841.5490.839
B0005851.5380.833
B0005861.5290.828
B0005871.5280.828
B0005881.5280.825
B0005891.5290.822
B0005901.5480.87
B0005911.5480.847
B0005921.5480.838
B0005931.5320.83
B0005941.5270.827
B0005951.5170.822
B0005961.5120.819
B0005971.5070.816
B0005981.5020.813
B0005991.4910.807
B00051001.4860.805
B00051011.4860.802
B00051021.4860.799
B00051031.4810.805
B00051041.4810.81
B00051051.4810.802
B00051061.470.796
B00051071.4550.787
B00051081.4540.788
B00051091.4540.788
B00051101.4490.785
B00051111.4390.779
B00051121.4330.776
B00051131.4330.776
B00051141.4280.773
B00051151.4230.771
B00051161.4170.768
B00051171.4130.765
B00051181.4130.765
B00051191.4130.762
B00051201.4170.776
B00051211.4170.779
B00051221.4170.768
B00051231.4070.762
B00051241.4010.759
B00051251.3970.756
B00051261.3910.754
B00051271.3860.751
B00051281.380.748
B00051291.3750.745
B00051301.3710.742
B00051311.3710.742
B00051321.3710.739
B00051331.3710.745
B00051341.370.751
B00051351.370.742
B00051361.3650.739
B00051371.3550.734
B00051381.3550.734
B00051391.3540.734
B00051401.3490.731
B00051411.3440.728
B00051421.3390.725
B00051431.3390.725
B00051441.3340.723
B00051451.3290.72
B00051461.3230.717
B00051471.3180.714
B00051481.3180.714
B00051491.3180.714
B00051501.3240.717
B00051511.3290.737
B00051521.3290.726
B00051531.3290.72
B00051541.3240.717
B00051551.3190.714
B00051561.3130.711
B00051571.3130.711
B00051581.3080.708
B00051591.3030.706
B00051601.3030.706
B00051611.3030.706
B00051621.2980.703
B00051631.2980.703
B00051641.2930.701
B00051651.2930.698
B00051661.2930.697
B00051671.2990.709
B00051681.3090.718
B000612.0251.005
B000622.0191.0
B000632.0130.994
B000642.0130.994
B000652.0130.988
B000662.0130.994
B000672.0010.994
B000681.9690.972
B000691.9680.972
B0006101.9570.966
B0006111.9460.961
B0006121.9350.955
B0006131.9230.95
B0006141.9120.944
B0006151.9010.939
B0006161.8890.933
B0006171.8780.927
B0006181.8780.922
B0006191.8780.922
B0006201.9460.978
B0006211.9460.967
B0006221.9460.961
B0006231.9460.95
B0006241.9240.961
B0006251.9010.939
B0006261.8790.928
B0006271.8680.923
B0006281.8570.916
B0006291.8570.911
B0006301.8570.917
B0006311.8570.95
B0006321.8570.929
B0006331.8550.916
B0006341.8390.908
B0006351.8190.898
B0006361.8130.895
B0006371.7970.887
B0006381.7810.879
B0006391.7710.875
B0006401.760.869
B0006411.7550.864
B0006421.7550.859
B0006431.750.866
B0006441.7390.872
B0006451.7340.856
B0006461.7340.846
B0006471.7340.841
B0006481.7760.901
B0006491.7760.893
B0006501.7760.877
B0006511.7450.862
B0006521.7290.854
B0006531.7080.843
B0006541.6980.838
B0006551.6820.831
B0006561.6710.825
B0006571.6610.82
B0006581.6510.815
B0006591.640.81
B0006601.6290.804
B0006611.6090.794
B0006621.6040.792
B0006631.5990.79
B0006641.5880.784
B0006651.5830.782
B0006661.5670.774
B0006671.5610.771
B0006681.5510.766
B0006691.5410.761
B0006701.530.753
B0006711.5250.756
B0006721.5250.753
B0006731.5150.748
B0006741.5090.745
B0006751.5040.743
B0006761.5040.737
B0006771.5040.735
B0006781.4940.756
B0006791.4890.743
B0006801.4890.735
B0006811.4780.73
B0006821.4780.73
B0006831.4730.727
B0006841.4680.725
B0006851.4520.717
B0006861.4520.717
B0006871.4470.715
B0006881.4470.714
B0006891.4470.712
B0006901.5150.787
B0006911.5150.764
B0006921.5150.748
B0006931.4990.74
B0006941.4830.732
B0006951.4730.727
B0006961.4630.722
B0006971.4520.717
B0006981.4470.714
B0006991.4410.712
B00061001.4310.707
B00061011.4260.704
B00061021.4260.701
B00061031.4260.702
B00061041.4210.717
B00061051.4210.707
B00061061.4150.699
B00061071.410.696
B00061081.4050.694
B00061091.3950.689
B00061101.3950.689
B00061111.3890.686
B00061121.3840.683
B00061131.3790.678
B00061141.3740.681
B00061151.3740.678
B00061161.3680.676
B00061171.3630.673
B00061181.3630.671
B00061191.3630.668
B00061201.3790.683
B00061211.3790.694
B00061221.3790.681
B00061231.3680.676
B00061241.3570.67
B00061251.3520.668
B00061261.3470.665
B00061271.3370.66
B00061281.3310.657
B00061291.3260.655
B00061301.3220.653
B00061311.3210.652
B00061321.3210.65
B00061331.3210.652
B00061341.3210.665
B00061351.3210.655
B00061361.310.647
B00061371.3050.645
B00061381.30.642
B00061391.30.642
B00061401.290.637
B00061411.2790.632
B00061421.2790.632
B00061431.2740.629
B00061441.2740.629
B00061451.2640.624
B00061461.2580.621
B00061471.2530.619
B00061481.2530.619
B00061491.2530.616
B00061501.2530.619
B00061511.2530.637
B00061521.2530.624
B00061531.2480.616
B00061541.2320.608
B00061551.2270.606
B00061561.2220.603
B00061571.2110.598
B00061581.2060.595
B00061591.2010.593
B00061601.1910.588
B00061611.1850.585
B00061621.180.583
B00061631.1750.58
B00061641.1640.57
B00061651.1640.575
B00061661.1640.572
B00061671.170.58
B00061681.1750.585
B001811.8431.006
B001821.8411.0
B001831.840.998
B001841.8330.993
B001851.8310.994
B001861.8290.992
B001871.8210.988
B001881.8210.985
B001891.8150.979
B0018101.8120.989
B0018111.8050.983
B0018121.8050.979
B0018131.7910.972
B0018141.7830.968
B0018151.7810.966
B0018161.7710.961
B0018171.7690.96
B0018181.7540.951
B0018191.7460.947
B0018201.7380.943
B0018211.7320.939
B0018221.7110.927
B0018231.7110.929
B0018241.7110.926
B0018251.7220.949
B0018261.7220.94
B0018271.7220.934
B0018281.7120.929
B0018291.6990.922
B0018301.6940.919
B0018311.6820.912
B0018321.6770.91
B0018331.6660.904
B0018341.6570.899
B0018351.6480.894
B0018361.6390.889
B0018371.6280.883
B0018381.6280.88
B0018391.6280.876
B0018401.6320.909
B0018411.6320.895
B0018421.6320.886
B0018431.6160.877
B0018441.6160.874
B0018451.6160.866
B0018461.6960.937
B0018471.6960.931
B0018481.6960.92
B0018491.6780.91
B0018501.6660.901
B0018511.6610.904
B0018521.6470.893
B0018531.6260.882
B0018541.6260.875
B0018551.6260.871
B0018561.6130.908
B0018571.6130.89
B0018581.6130.875
B0018591.5920.864
B0018601.5870.861
B0018611.580.857
B0018621.5640.849
B0018631.5560.844
B0018641.540.836
B0018651.5320.831
B0018661.5320.831
B0018671.5220.826
B0018681.5070.817
B0018691.5070.815
B0018701.5070.812
B0018711.5010.832
B0018721.5010.827
B0018731.5010.814
B0018741.4920.81
B0018751.4830.805
B0018761.4810.803
B0018771.4740.799
B0018781.4680.796
B0018791.4580.791
B0018801.4530.786
B0018811.4480.788
B0018821.4430.783
B0018831.4390.781
B0018841.4390.775
B0018851.4390.773
B0018861.4430.797
B0018871.4430.788
B0018881.4430.783
B0018891.4430.775
B0018901.4280.768
B0018911.4280.789
B0018921.420.775
B0018931.420.77
B0018941.4160.768
B0018951.4080.763
B0018961.4060.764
B0018971.3970.758
B0018981.3940.756
B0018991.3890.754
B00181001.3850.748
B00181011.3790.751
B00181021.3730.743
B00181031.370.745
B00181041.370.742
B00181051.3730.736
B00181061.4380.792
B00181071.4380.787
B00181081.4380.78
B00181091.4280.775
B00181101.4150.768
B00181111.4140.767
B00181121.3990.759
B00181131.3950.757
B00181141.390.754
B00181151.3880.752
B00181161.3860.753
B00181171.3760.747
B00181181.3650.74
B00181191.3650.737
B00181201.3650.73
B00181211.3930.774
B00181221.3930.763
B00181231.3930.756
B00181241.3880.753
B00181251.380.743
B00181261.370.749
B00181271.3690.743
B00181281.3630.739
B00181291.3630.74
B00181301.3550.733
B00181311.3530.735
B00181321.3520.728

Quelle confiance accorder aux prévisions ?

On rejoue la prévision comme si l'on n'avait observé qu'une part de la vie, puis on la compare à la vraie fin de vie : 5 intervalles sur 18 contiennent la vérité, sur seulement 6 cellules. Au-dessus de la diagonale, la fin de vie est prévue trop tard ; en dessous, trop tôt.

Voir les données
CellulePart observéePrévuRéelÉcart (décharges)Intervalle contient le réel
B000550%200125+75non
B000650%106109-3oui
B001850%9397-4oui
B003350%138179-41non
B003450%222150+72non
B004550%3150-19non
B000570%136125+11non
B000670%94109-15non
B001870%10097+3oui
B003370%135179-44non
B003470%118150-32non
B004570%3750-13non
B000590%127125+2oui
B000690%98109-11non
B001890%9597-2oui
B003390%163179-16non
B003490%129150-21non
B004590%4350-7non

Ce que ce projet n'affirme pas

Pratiques mises en œuvre