Classifiers trained on the labelled sessions you imported, and tested only on sessions they never saw. A label is called predictable only when a model clearly beats guessing.
From the unified training dataset (1000 rows) and the Arduino bench log (run 2). Regression metrics on data the model never saw. Reproduce with npm run model:degradation.
All 1000 rows are derived from the charging sessions; 35 lose more power than they consume (degradation clipped at 100 %). There is no independently measured degradation label.
| Features | Test split | Baseline MAE | Ridge MAE | Ridge RMSE | Ridge R² |
|---|---|---|---|---|---|
| Loss and consumption (the target's own inputs)Is the target just a formula of two columns? | Held-out stations (5-fold, grouped) | 17.08 pts | 0.07 pts | 0.11 pts | 1 |
| Latest 20 % in time | 16.38 pts | 0.07 pts | 0.1 pts | 1 | |
| All session measurements except power lossCan degradation be predicted without measuring the loss? | Held-out stations (5-fold, grouped) | 17.08 pts | 12.53 pts | 16.4 pts | 0.547 |
| Latest 20 % in time | 16.38 pts | 12.05 pts | 15.38 pts | 0.549 | |
| …and without current or power (which sit in the target's denominator)Does anything else carry information about degradation? | Held-out stations (5-fold, grouped) | 17.08 pts | 18.29 pts | 24.46 pts | -0.007 |
| Latest 20 % in time | 16.38 pts | 18.25 pts | 23.45 pts | -0.048 |
Baseline = median of the training rows. Stations are never split between training and test.
Degradation = 100.11 − 100.23 × (V ÷ V_ref), with V_ref measured per connector (C1 3.455 V, C2 3.067 V, C3 3.193 V). On sweeps it never saw the error is 0.09 points (MAE), against 2.28 for one voltage line shared by all connectors. On a connector it never saw — given only that connector's first sweep — it errs by 0.09–0.12 points, against 1.05–4.52 for the shared line. It converts a bench voltage into the bench's degradation index; it says nothing about how fast a real connector wears.
| Model | Held-out sweeps (MAE) | Unseen connector (MAE) |
|---|---|---|
| One voltage line for all connectors | 2.28 pts | 1.05–4.52 pts |
| A separate voltage line per connector | 0.09 pts | needs that connector's full history |
| Relative voltage V ÷ V_ref (deployed) | 0.09 pts | 0.09–0.12 pts |
Held-out sweeps: every sweep of every connector left out in turn. Unseen connector: trained on the other two; the relative model gets only the unseen connector's first sweep (commissioning) to set its V_ref and is tested on the rest. Open-circuit readings (0 V = 100 % by definition) are excluded.
It accepts bench voltages only (≤ 5 V); real-charger voltages are refused. Try it on the Arduino bench page.
Sessions stored
1,000
With labels
1,000
Chargers
57
Time span
01 Jan 2024 – 11 Jan 2024
Label: reduced_power_loss_category · Low, Medium, High · 1,000 sessions
Can reduced power loss category be predicted from the session's recorded values?
Reduced power loss category can be predicted: 91.7% accuracy on unseen data versus 37.4% for always guessing the most common class. Almost all of the signal is in power loss — the learned cut points 1.88 and 3.67 reproduce the label as well as a model using every column (91.9%).
Always predicts the most common class. Any useful model must beat this.
Finds the single measurement and cut points that best separate the classes. Fully explainable.
Uses every numeric column and the area/charging-mode categories together.
| true ↓ / predicted → | Low | Medium | High |
|---|---|---|---|
| Low | 358 | 12 | 0 |
| Medium | 22 | 324 | 28 |
| High | 0 | 21 | 235 |
Green diagonal = correct. Summed over all five held-out folds.
power loss ≤ 1.88 → Low; 1.88 < power loss ≤ 3.67 → Medium; power loss > 3.67 → High. Each dot below is one session; the dashed lines are the learned cut points.
What this is useful for: categorising new sessions consistently from their measured power loss. In this dataset the label is almost a fixed function of that one measurement, so the high accuracy means the labelling rule was recovered — not that EVOLT can forecast it. The follow-up test below checks whether it can be anticipated without the measurement.
Enter the measured values; the stored model classifies it and shows the rule it applied.
| Class | Sessions | Precision | Recall | F1 |
|---|---|---|---|---|
| Low | 370 | 94.2% | 96.8% | 0.955 |
| Medium | 374 | 90.8% | 86.6% | 0.886 |
| High | 256 | 89.4% | 91.8% | 0.906 |
Inputs (19): Battery capacity, Charging cost, Charging power, Charging time, Current flow, Grid stability score, Num chargers, Optimized charging power, Power consumed, Power loss, Predicted power demand, Voltage fluctuation, Voltage level, Area=Rural, Area=Suburban, Area=Urban, Mode=Conventional, Mode=Fast, Mode=V2G. Identifier columns are excluded. Trained 26 Oct 2026, 16:45 UTC.
Follow-up test: reduced_power_loss_category · Low, Medium, High · 1,000 sessions · without power_loss
Can reduced power loss category be anticipated without measuring power loss?
Without power loss, the best model reaches 37.0% on unseen sessions — no better than always guessing the most common class (37.4%). The other recorded conditions carry no usable signal, so power loss has to be measured.
Always predicts the most common class. Any useful model must beat this.
Finds the single measurement and cut points that best separate the classes. Fully explainable.
Uses every numeric column and the area/charging-mode categories together.
Label: voltage_stability_category · Excellent, Moderate, Poor · 1,000 sessions
Can voltage stability category be predicted from the session's recorded values?
Voltage stability category could not be predicted from this data. The best model reached 41.5% on unseen data, not meaningfully better than always guessing the most common class (40.4%). The label appears unrelated to the recorded measurements, so EVOLT offers no prediction for it.
Always predicts the most common class. Any useful model must beat this.
Finds the single measurement and cut points that best separate the classes. Fully explainable.
Uses every numeric column and the area/charging-mode categories together.
npm run model:train.| true ↓ / predicted → | Low | Medium | High |
|---|---|---|---|
| Low | 159 | 206 | 5 |
| Medium | 163 | 209 | 2 |
| High | 97 | 157 | 2 |
Green diagonal = correct. Summed over all five held-out folds.
| Class | Sessions | Precision | Recall | F1 |
|---|---|---|---|---|
| Low | 370 | 37.9% | 43.0% | 0.403 |
| Medium | 374 | 36.5% | 55.9% | 0.442 |
| High | 256 | 22.2% | 0.8% | 0.015 |
Inputs (18): Battery capacity, Charging cost, Charging power, Charging time, Current flow, Grid stability score, Num chargers, Optimized charging power, Power consumed, Predicted power demand, Voltage fluctuation, Voltage level, Area=Rural, Area=Suburban, Area=Urban, Mode=Conventional, Mode=Fast, Mode=V2G. Identifier columns are excluded. Trained 26 Oct 2026, 16:45 UTC.
| true ↓ / predicted → | Excellent | Moderate | Poor |
|---|---|---|---|
| Excellent | 88 | 261 | 2 |
| Moderate | 76 | 325 | 3 |
| Poor | 51 | 192 | 2 |
Green diagonal = correct. Summed over all five held-out folds.
| Class | Sessions | Precision | Recall | F1 |
|---|---|---|---|---|
| Excellent | 351 | 40.9% | 25.1% | 0.311 |
| Moderate | 404 | 41.8% | 80.4% | 0.550 |
| Poor | 245 | 28.6% | 0.8% | 0.016 |
Inputs (19): Battery capacity, Charging cost, Charging power, Charging time, Current flow, Grid stability score, Num chargers, Optimized charging power, Power consumed, Power loss, Predicted power demand, Voltage fluctuation, Voltage level, Area=Rural, Area=Suburban, Area=Urban, Mode=Conventional, Mode=Fast, Mode=V2G. Identifier columns are excluded. Trained 26 Oct 2026, 16:45 UTC.