76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

Begonnen von DS_Starter, 11 Februar 2024, 14:11:00

Vorheriges Thema - Nächstes Thema

DS_Starter

#4605
Hallo zusammen,

ein wichtiger Schritt in Richtung eines funktionierenden neuronalen Netz für die Verbrauchsvorhersage ist getan.
Mit AI::FANN habe ich ein solches Netz implementiert.

Die Version 2.0.0 befindet sich für interessierte User im contrib. Die Version kann produktiv eingesetzt werden. Das neuronale Netz hat noch keine Auswirkung auf verwendete Verbrauchsprognosen und kann autark getestet werden.

Zur Vorbereitung muß man die FANN (Fast Artificial Neural Network) Library auf dem FHEM Server installieren. Das geht in Linux einfach mit:

suso apt-get update
sudo apt-get install gcc
sudo apt-get install libfann-dev


Für Windows gibt es auch Verfahren. Dazu im Netz einfach mal suchen falls es relevant ist.

Danach muß man noch das Perl Modul AI::FANN installieren. Das geht in FHEM direkt mit dem FHEM Installer Modul bzw. einem solchen Device, oder mit:

sudo cpanm AI::FANN  (wenn cpanm installiert)

oder:

sudo cpan install AI::FANN

Um zu testen, trainiert man sein Model zunächst manuell mit:

set ... aiNeuralNet runConTrain

Damit man im Log das Training verfolgen kann, setzt man ctrlDebug=aiProcess. Im Log gibt es dann Ausschriften wie diese:

2025.12.06 21:17:06.591 1: SolCast DEBUG> Neural Netwwork Training for Consumption Forecast BlockingCall PID "326440" with Timeout 86400 s started
2025.12.06 21:17:07.178 1: SolCast DEBUG> Neural Network Training started with Params:
training datasets=6708, hidden Neurons=50,25, Epoches=15000, mse_error=0.001, learning rate=0.01000, learning momentum=0.9, Data sharing=chronological split (Train=5366, Test=1341)
2025.12.06 21:17:07.508 1: SolCast DEBUG> Snapshot saved at epoch 7: Train MSE=0.031000, Val MSE=0.004811, Val Bit_Fail=2
2025.12.06 21:17:07.798 1: SolCast DEBUG> Snapshot saved at epoch 14: Train MSE=0.006000, Val MSE=0.004705, Val Bit_Fail=2
2025.12.06 21:17:07.945 1: SolCast DEBUG> Snapshot saved at epoch 17: Train MSE=0.004000, Val MSE=0.004355, Val Bit_Fail=1
2025.12.06 21:17:08.212 1: SolCast DEBUG> Snapshot saved at epoch 23: Train MSE=0.003000, Val MSE=0.003766, Val Bit_Fail=1
2025.12.06 21:17:08.263 1: SolCast DEBUG> Snapshot saved at epoch 24: Train MSE=0.003000, Val MSE=0.003205, Val Bit_Fail=1
2025.12.06 21:17:08.313 1: SolCast DEBUG> Snapshot saved at epoch 25: Train MSE=0.002000, Val MSE=0.003014, Val Bit_Fail=1
2025.12.06 21:17:08.357 1: SolCast DEBUG> Snapshot saved at epoch 26: Train MSE=0.002000, Val MSE=0.002796, Val Bit_Fail=1
2025.12.06 21:17:08.405 1: SolCast DEBUG> Snapshot saved at epoch 27: Train MSE=0.002000, Val MSE=0.002067, Val Bit_Fail=1
2025.12.06 21:17:09.468 1: SolCast DEBUG> Snapshot saved at epoch 52: Train MSE=0.002000, Val MSE=0.002060, Val Bit_Fail=1
2025.12.06 21:17:09.579 1: SolCast DEBUG> Snapshot saved at epoch 54: Train MSE=0.002000, Val MSE=0.002014, Val Bit_Fail=1
2025.12.06 21:17:09.664 1: SolCast DEBUG> Snapshot saved at epoch 56: Train MSE=0.002000, Val MSE=0.001963, Val Bit_Fail=1
2025.12.06 21:17:09.749 1: SolCast DEBUG> Snapshot saved at epoch 58: Train MSE=0.002000, Val MSE=0.001941, Val Bit_Fail=1
2025.12.06 21:17:09.794 1: SolCast DEBUG> Snapshot saved at epoch 59: Train MSE=0.002000, Val MSE=0.001928, Val Bit_Fail=1
2025.12.06 21:17:09.839 1: SolCast DEBUG> Snapshot saved at epoch 60: Train MSE=0.002000, Val MSE=0.001913, Val Bit_Fail=1
2025.12.06 21:17:09.883 1: SolCast DEBUG> Snapshot saved at epoch 61: Train MSE=0.002000, Val MSE=0.001894, Val Bit_Fail=1
2025.12.06 21:17:09.927 1: SolCast DEBUG> Snapshot saved at epoch 62: Train MSE=0.002000, Val MSE=0.001874, Val Bit_Fail=1
2025.12.06 21:17:09.971 1: SolCast DEBUG> Snapshot saved at epoch 63: Train MSE=0.002000, Val MSE=0.001851, Val Bit_Fail=1
2025.12.06 21:17:10.016 1: SolCast DEBUG> Snapshot saved at epoch 64: Train MSE=0.002000, Val MSE=0.001833, Val Bit_Fail=1
2025.12.06 21:17:10.060 1: SolCast DEBUG> Snapshot saved at epoch 65: Train MSE=0.002000, Val MSE=0.001797, Val Bit_Fail=1
2025.12.06 21:17:10.208 1: SolCast DEBUG> Snapshot saved at epoch 68: Train MSE=0.002000, Val MSE=0.001779, Val Bit_Fail=1
2025.12.06 21:17:10.257 1: SolCast DEBUG> Snapshot saved at epoch 69: Train MSE=0.002000, Val MSE=0.001775, Val Bit_Fail=1
2025.12.06 21:17:10.755 1: SolCast DEBUG> Snapshot saved at epoch 80: Train MSE=0.002000, Val MSE=0.001773, Val Bit_Fail=1
2025.12.06 21:17:10.806 1: SolCast DEBUG> Snapshot saved at epoch 81: Train MSE=0.002000, Val MSE=0.001770, Val Bit_Fail=1
2025.12.06 21:17:10.850 1: SolCast DEBUG> Snapshot saved at epoch 82: Train MSE=0.002000, Val MSE=0.001763, Val Bit_Fail=1
2025.12.06 21:17:10.932 1: SolCast DEBUG> Snapshot saved at epoch 84: Train MSE=0.002000, Val MSE=0.001761, Val Bit_Fail=1
2025.12.06 21:17:10.988 1: SolCast DEBUG> Snapshot saved at epoch 85: Train MSE=0.002000, Val MSE=0.001743, Val Bit_Fail=1
2025.12.06 21:17:11.048 1: SolCast DEBUG> Snapshot saved at epoch 86: Train MSE=0.002000, Val MSE=0.001733, Val Bit_Fail=1
2025.12.06 21:17:11.114 1: SolCast DEBUG> Snapshot saved at epoch 87: Train MSE=0.002000, Val MSE=0.001724, Val Bit_Fail=1
2025.12.06 21:17:11.177 1: SolCast DEBUG> Snapshot saved at epoch 88: Train MSE=0.002000, Val MSE=0.001721, Val Bit_Fail=1
2025.12.06 21:17:11.823 1: SolCast DEBUG> Epoche 100: Train MSE=0.002181, Val MSE=0.001893 .... Bit_Fail=5
2025.12.06 21:17:12.637 1: SolCast DEBUG> Snapshot saved at epoch 118: Train MSE=0.002000, Val MSE=0.001715, Val Bit_Fail=1
2025.12.06 21:17:12.735 1: SolCast DEBUG> Snapshot saved at epoch 120: Train MSE=0.001000, Val MSE=0.001700, Val Bit_Fail=1
2025.12.06 21:17:13.883 1: SolCast DEBUG> Snapshot saved at epoch 141: Train MSE=0.001000, Val MSE=0.001688, Val Bit_Fail=1
2025.12.06 21:17:16.929 1: SolCast DEBUG> Epoche 200: Train MSE=0.001378, Val MSE=0.001940 .... Bit_Fail=5
2025.12.06 21:17:18.804 1: SolCast DEBUG> Snapshot saved at epoch 245: Train MSE=0.001000, Val MSE=0.001684, Val Bit_Fail=1
2025.12.06 21:17:18.861 1: SolCast DEBUG> Snapshot saved at epoch 246: Train MSE=0.001000, Val MSE=0.001665, Val Bit_Fail=1
2025.12.06 21:17:21.091 1: SolCast DEBUG> Epoche 300: Train MSE=0.002070, Val MSE=0.002599 .... Bit_Fail=6
2025.12.06 21:17:25.428 1: SolCast DEBUG> Epoche 400: Train MSE=0.001600, Val MSE=0.001980 .... Bit_Fail=5
2025.12.06 21:17:29.813 1: SolCast DEBUG> Epoche 500: Train MSE=0.035005, Val MSE=0.002786 .... Bit_Fail=8
2025.12.06 21:17:34.323 1: SolCast DEBUG> Epoche 600: Train MSE=0.002071, Val MSE=0.004351 .... Bit_Fail=7
2025.12.06 21:17:38.761 1: SolCast DEBUG> Epoche 700: Train MSE=0.007921, Val MSE=0.032519 .... Bit_Fail=27
2025.12.06 21:17:43.032 1: SolCast DEBUG> Epoche 800: Train MSE=0.002365, Val MSE=0.002768 .... Bit_Fail=9
2025.12.06 21:17:47.946 1: SolCast DEBUG> Epoche 900: Train MSE=0.002002, Val MSE=0.002659 .... Bit_Fail=6
2025.12.06 21:17:52.370 1: SolCast DEBUG> Epoche 1000: Train MSE=8.918653, Val MSE=0.005512 .... Bit_Fail=53
2025.12.06 21:17:57.315 1: SolCast DEBUG> Epoche 1100: Train MSE=0.004355, Val MSE=430.838212 .... Bit_Fail=18
2025.12.06 21:18:01.664 1: SolCast DEBUG> Epoche 1200: Train MSE=0.018462, Val MSE=140.060431 .... Bit_Fail=14
2025.12.06 21:18:06.528 1: SolCast DEBUG> Epoche 1300: Train MSE=0.221598, Val MSE=249.383456 .... Bit_Fail=22
2025.12.06 21:18:11.177 1: SolCast DEBUG> Epoche 1400: Train MSE=0.041970, Val MSE=594.477068 .... Bit_Fail=30
2025.12.06 21:18:15.624 1: SolCast DEBUG> Epoche 1500: Train MSE=0.058910, Val MSE=617.049691 .... Bit_Fail=27
2025.12.06 21:18:20.262 1: SolCast DEBUG> Epoche 1600: Train MSE=0.008360, Val MSE=885.589472 .... Bit_Fail=31
2025.12.06 21:18:25.160 1: SolCast DEBUG> Epoche 1700: Train MSE=0.006807, Val MSE=885.227558 .... Bit_Fail=29
2025.12.06 21:18:29.893 1: SolCast DEBUG> Epoche 1800: Train MSE=2.663923, Val MSE=915.590333 .... Bit_Fail=27
2025.12.06 21:18:34.462 1: SolCast DEBUG> Epoche 1900: Train MSE=0.212181, Val MSE=856.785082 .... Bit_Fail=22
2025.12.06 21:18:39.078 1: SolCast DEBUG> Epoche 2000: Train MSE=0.583634, Val MSE=442.416236 .... Bit_Fail=15
2025.12.06 21:18:43.662 1: SolCast DEBUG> Epoche 2100: Train MSE=0.032788, Val MSE=316.984446 .... Bit_Fail=16
2025.12.06 21:18:48.307 1: SolCast DEBUG> Epoche 2200: Train MSE=0.041520, Val MSE=295.451476 .... Bit_Fail=16
2025.12.06 21:18:52.693 1: SolCast DEBUG> Epoche 2300: Train MSE=0.016586, Val MSE=295.108131 .... Bit_Fail=16
2025.12.06 21:18:57.509 1: SolCast DEBUG> Epoche 2400: Train MSE=0.021561, Val MSE=294.800016 .... Bit_Fail=17
2025.12.06 21:19:01.984 1: SolCast DEBUG> Epoche 2500: Train MSE=0.006636, Val MSE=294.777228 .... Bit_Fail=16
2025.12.06 21:19:06.662 1: SolCast DEBUG> Epoche 2600: Train MSE=0.005158, Val MSE=294.522419 .... Bit_Fail=15
2025.12.06 21:19:11.179 1: SolCast DEBUG> Epoche 2700: Train MSE=0.020796, Val MSE=0.025932 .... Bit_Fail=28
2025.12.06 21:19:16.013 1: SolCast DEBUG> Epoche 2800: Train MSE=0.049026, Val MSE=440.109527 .... Bit_Fail=40
2025.12.06 21:19:20.479 1: SolCast DEBUG> Epoche 2900: Train MSE=0.018596, Val MSE=13.773080 .... Bit_Fail=33
2025.12.06 21:19:24.982 1: SolCast DEBUG> Epoche 3000: Train MSE=47.658855, Val MSE=87.796865 .... Bit_Fail=611
2025.12.06 21:19:29.964 1: SolCast DEBUG> Epoche 3100: Train MSE=18.301807, Val MSE=15.492119 .... Bit_Fail=184
2025.12.06 21:19:35.284 1: SolCast DEBUG> Epoche 3200: Train MSE=11.717161, Val MSE=1.571558 .... Bit_Fail=140
2025.12.06 21:19:37.457 1: SolCast DEBUG> Early stopping bei Epoche 3246: Validation MSE=18.081247 (no improvement since 3000 epochs)
2025.12.06 21:19:37.460 1: SolCast DEBUG> Best Forecast Model reloaded with Train MSE=0.001000
2025.12.06 21:19:37.462 1: SolCast DEBUG> Run Validation Test with 20% of Input data ...
2025.12.06 21:19:37.476 1: SolCast DEBUG> Validation finished - Best Training MSE=0.001000, Validation MSE=0.002000, Validation Bit_Fail=1
2025.12.06 21:19:37.480 1: SolCast DEBUG> Neural Netwwork training data successfuly written to file: ./FHEM/FhemUtils/NeuralNet_SolarForecast_SolCast
2025.12.06 21:19:37.653 1: SolCast DEBUG> Neural Netwwork Training BlockingCall PID '326440' finished, state: ok

Ein erfogreiches Training wird auch in der Grafik signalisiert. Die Qualität des trainierten Netzes und weitere Informationen darüber kann man aufrufen mit:

get ... valDecTree aiNeuralNetConState


Man erhält dann eine Übersicht wie nachfolgend die neben den Netz KPI's auch Erläuterungen zu den Kennzahlen liefert und wie diese zu bewerten sind.

Informationen zum neuronalen Netz der Verbrauchsvorhersage
letztes KI-Training: 06.12.2025 21:36:40 / Laufzeit in Sekunden: 88.63
letzte KI-Ergebnis Generierungsdauer: 0.02 ms

=== Modellparameter ===

Trainingsdaten: 7344 (Training=5875, Validierung=1469)
Architektur: Inputs=16, Hidden Layers=50-25, Outputs=1
Hyperparameter: LR=0.010, Momentum=0.9, BitFail-Limit=0.35
Aktivierungen: Hidden=Sigmoid, Output=Linear

=== Trainingsmetriken ===

bestes Modell bei Epoche: 61 (von max. 15000)
Training MSE: 0.001
Validation MSE: 0.002
Validation Bit_Fail: 3

=== Fehlermaße der Prognosen ===

MAE: 219.36 Wh
MedAE: 120.61 Wh
RMSE: 0.042
MAPE: 26.838 %
MdAPE: 19.028 %
R²: 0.157


 Erläuterung der Kennzahlen
Train MSE / Validation MSE → wie gut das Netz trainiert und generalisiert. Daumenregel:
   MSE < 0.01 → sehr gut
   MSE 0.01–0.05 → brauchbar
   MSE > 0.1 → schwach
   Interpretation Verhältnis Train MSE zu Validation MSE:
      Validation ≈ Train → gute Generalisierung
      Validation deutlich größer → Überfitting
      Validation kleiner → Validierungsdaten sind einfacher oder Split begünstigt

Validation Bit_Fail → Anzahl der Ausreißer

MAE (Mean Absolute Error) → mittlere absolute Abweichung in Wh. Richtwerte bei typischem Verbrauch 500–1500 Wh:
   < 100 Wh → sehr gut
   100–300 Wh → brauchbar
   > 300 Wh → schwach

MedAE (Median Absolute Error) → Median der absoluten Fehler in Wh (toleriert einzelne Ausreißer besser)
   < 100 Wh → sehr gut
   100–200 Wh → gut
   200–300 Wh → mittelmäßig
   > 300 Wh → schwach

RMSE (Root Mean Squared Error) → mittlere quadratische Abweichung in Wh
   Interpretation: wie groß Fehler im Mittel sind, mit Betonung auf Ausreißer
   Richtwerte:
   < 0.01 → sehr gut
   0.01–0.03 → gut
   0.03–0.05 → mittelmäßig / akzeptabel
   > 0.05 → schwach

MAPE (Mean Absolute Percentage Error) → relative Abweichung in %
   Richtwerte:
   < 10 % → sehr gut - Modell liegt fast immer sehr nah an den echten Werten
   10–20 % → gut - Prognosen sind solide, kleine Abweichungen sind normal
   20–30 % → mittelmäßig / akzeptabel - Modell ist brauchbar, aber nicht präzise – für grobe Trends ok
   > 30 % → schwach - Modell verfehlt die Werte deutlich, oft durch Ausreißer oder fehlende Features
   ⚠️ Vorsicht: bei kleinen Werten (<200 Wh) kann MAPE stark verzerren → MdAPE heranziehen

MdAPE (Median Absolute Percentage Error) → Median der prozentualen Fehler in % (robuster gegenüber kleinen Werten)
   Richtwerte:
   < 10 % → sehr gut
   10–20 % → gut
   20–30 % → mittelmäßig
   > 30 % → schwach

R² (Bestimmtheitsmaß) → Maß für die Erklärungskraft des Modells. Je näher R² an 1 liegt, desto besser.
   R² = 1.0 → perfekte Vorhersage, alle Punkte liegen exakt auf der Regressionslinie
   R² > 0.8 → sehr gut - Modell erfasst den Großteil der Streuung → sehr zuverlässige Prognosen
   R² = 0.6 – 0.8 → brauchbar - Modell erklärt einen soliden Teil der Varianz → brauchbar für viele Anwendungen
   R² = 0.5–0.6 → mäßig / grenzwertig - Modell liegt knapp über ,,zufällig" → Muster erkannt, Prognosen nur eingeschränkt nützlich
   R² < 0.5 → schwach - Modell erklärt weniger als die Hälfte der Varianz → deutlicher Verbesserungsbedarf
   R² = 0.0 → Modell erklärt gar nichts, es ist nicht besser als der Mittelwert der Daten
   R² < 0.0 → Modell ist schlechter als einfach immer den Mittelwert vorherzusagen
   ⚠️ R² ist sehr empfindlich gegenüber Ausreißern und Varianz in den Daten.

Man kann diese Kennzahlen auch sehr gut einer KI seiner Wahl (z.B. MS Copilot) übergeben und sie bewerten lassen.

Wichtiger ist natürlich das reale Ergebnis der Prognose.
Um Prognosewerte zu sehen, schaltet man ctrlDebug=aiData oder ctrlDebug=aiData,aiProcess ein und sieht dann im Log:

2025.12.06 22:32:58.313 1: SolCast DEBUG> Neural Network - hod: 23 -> consumption forecast: 702 Wh, legacy value: 652
2025.12.06 22:32:58.313 1: SolCast DEBUG> Neural Network - hod: 24 -> consumption forecast: 684 Wh, legacy value: 614
2025.12.06 22:32:58.313 1: SolCast DEBUG> Neural Network - hod: 1 -> consumption forecast: 562 Wh, legacy value: 556
2025.12.06 22:32:58.314 1: SolCast DEBUG> Neural Network - hod: 2 -> consumption forecast: 564 Wh, legacy value: 493
2025.12.06 22:32:58.314 1: SolCast DEBUG> Neural Network - hod: 3 -> consumption forecast: 547 Wh, legacy value: 470
2025.12.06 22:32:58.314 1: SolCast DEBUG> Neural Network - hod: 4 -> consumption forecast: 539 Wh, legacy value: 469
2025.12.06 22:32:58.315 1: SolCast DEBUG> Neural Network - hod: 5 -> consumption forecast: 595 Wh, legacy value: 480
2025.12.06 22:32:58.315 1: SolCast DEBUG> Neural Network - hod: 6 -> consumption forecast: 643 Wh, legacy value: 512
2025.12.06 22:32:58.316 1: SolCast DEBUG> Neural Network - hod: 7 -> consumption forecast: 699 Wh, legacy value: 528
2025.12.06 22:32:58.316 1: SolCast DEBUG> Neural Network - hod: 8 -> consumption forecast: 760 Wh, legacy value: 884
2025.12.06 22:32:58.316 1: SolCast DEBUG> Neural Network - hod: 9 -> consumption forecast: 830 Wh, legacy value: 730
2025.12.06 22:32:58.317 1: SolCast DEBUG> Neural Network - hod: 10 -> consumption forecast: 800 Wh, legacy value: 861
2025.12.06 22:32:58.317 1: SolCast DEBUG> Neural Network - hod: 11 -> consumption forecast: 984 Wh, legacy value: 1112
2025.12.06 22:32:58.317 1: SolCast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1099 Wh, legacy value: 818
2025.12.06 22:32:58.318 1: SolCast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1042 Wh, legacy value: 840
2025.12.06 22:32:58.318 1: SolCast DEBUG> Neural Network - hod: 14 -> consumption forecast: 913 Wh, legacy value: 812
2025.12.06 22:32:58.318 1: SolCast DEBUG> Neural Network - hod: 15 -> consumption forecast: 849 Wh, legacy value: 623
2025.12.06 22:32:58.319 1: SolCast DEBUG> Neural Network - hod: 16 -> consumption forecast: 801 Wh, legacy value: 834
2025.12.06 22:32:58.319 1: SolCast DEBUG> Neural Network - hod: 17 -> consumption forecast: 758 Wh, legacy value: 590
2025.12.06 22:32:58.319 1: SolCast DEBUG> Neural Network - hod: 18 -> consumption forecast: 881 Wh, legacy value: 699
2025.12.06 22:32:58.320 1: SolCast DEBUG> Neural Network - hod: 19 -> consumption forecast: 839 Wh, legacy value: 622
2025.12.06 22:32:58.320 1: SolCast DEBUG> Neural Network - hod: 20 -> consumption forecast: 796 Wh, legacy value: 653
2025.12.06 22:32:58.320 1: SolCast DEBUG> Neural Network - hod: 21 -> consumption forecast: 759 Wh, legacy value: 688
2025.12.06 22:32:58.321 1: SolCast DEBUG> Neural Network - hod: 22 -> consumption forecast: 729 Wh, legacy value: 666
2025.12.06 22:32:58.321 1: SolCast DEBUG> Neural Network - hod: 23 -> consumption forecast: 705 Wh, legacy value: 652
2025.12.06 22:32:58.321 1: SolCast DEBUG> Neural Network - hod: 24 -> consumption forecast: 689 Wh, legacy value: 614
2025.12.06 22:32:58.322 1: SolCast DEBUG> Neural Network - hod: 1 -> consumption forecast: 583 Wh, legacy value: 556
2025.12.06 22:32:58.322 1: SolCast DEBUG> Neural Network - hod: 2 -> consumption forecast: 574 Wh, legacy value: 493
2025.12.06 22:32:58.323 1: SolCast DEBUG> Neural Network - hod: 3 -> consumption forecast: 574 Wh, legacy value: 470
2025.12.06 22:32:58.323 1: SolCast DEBUG> Neural Network - hod: 4 -> consumption forecast: 585 Wh, legacy value: 469
2025.12.06 22:32:58.323 1: SolCast DEBUG> Neural Network - hod: 5 -> consumption forecast: 610 Wh, legacy value: 480
2025.12.06 22:32:58.324 1: SolCast DEBUG> Neural Network - hod: 6 -> consumption forecast: 648 Wh, legacy value: 512
2025.12.06 22:32:58.324 1: SolCast DEBUG> Neural Network - hod: 7 -> consumption forecast: 699 Wh, legacy value: 528
2025.12.06 22:32:58.324 1: SolCast DEBUG> Neural Network - hod: 8 -> consumption forecast: 757 Wh, legacy value: 884
2025.12.06 22:32:58.325 1: SolCast DEBUG> Neural Network - hod: 9 -> consumption forecast: 829 Wh, legacy value: 730
2025.12.06 22:32:58.325 1: SolCast DEBUG> Neural Network - hod: 10 -> consumption forecast: 796 Wh, legacy value: 861
2025.12.06 22:32:58.325 1: SolCast DEBUG> Neural Network - hod: 11 -> consumption forecast: 991 Wh, legacy value: 1112
2025.12.06 22:32:58.326 1: SolCast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1095 Wh, legacy value: 818
2025.12.06 22:32:58.326 1: SolCast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1041 Wh, legacy value: 840
2025.12.06 22:32:58.326 1: SolCast DEBUG> Neural Network - hod: 14 -> consumption forecast: 880 Wh, legacy value: 812
2025.12.06 22:32:58.327 1: SolCast DEBUG> Neural Network - hod: 15 -> consumption forecast: 844 Wh, legacy value: 623
2025.12.06 22:32:58.327 1: SolCast DEBUG> Neural Network - hod: 16 -> consumption forecast: 796 Wh, legacy value: 834
2025.12.06 22:32:58.328 1: SolCast DEBUG> Neural Network - hod: 17 -> consumption forecast: 756 Wh, legacy value: 590
2025.12.06 22:32:58.328 1: SolCast DEBUG> Neural Network - hod: 18 -> consumption forecast: 879 Wh, legacy value: 699
2025.12.06 22:32:58.328 1: SolCast DEBUG> Neural Network - hod: 19 -> consumption forecast: 836 Wh, legacy value: 622
2025.12.06 22:32:58.329 1: SolCast DEBUG> Neural Network - hod: 20 -> consumption forecast: 795 Wh, legacy value: 653
2025.12.06 22:32:58.329 1: SolCast DEBUG> Neural Network - hod: 21 -> consumption forecast: 757 Wh, legacy value: 688
2025.12.06 22:32:58.329 1: SolCast DEBUG> Neural Network - hod: 22 -> consumption forecast: 728 Wh, legacy value: 666
2025.12.06 22:32:58.330 1: SolCast DEBUG> Neural Network - hod: 23 -> consumption forecast: 705 Wh, legacy value: 652
2025.12.06 22:32:58.330 1: SolCast DEBUG> Neural Network - hod: 24 -> consumption forecast: 681 Wh, legacy value: 614


Der Wert "consumption forecast" ist die Prognose der KI, Der Wert "legacy value" ist die Prognose von meiner herkömmliche Routine zum Vergleich. Wie gesagt, die Ergebnisse der Verbrauchs-KI werden nur in das Log geschrieben und haben sonst keine Verknüpfung im Modul.

Es gibt eine ganze Reihe von Einstellmöglichkeiten für das Setup des neuronalen Netzes. Ich habe zunächst ein funktionierendes Setup implementiert. Der User kann die Laufparameter aktuell nicht modifizieren. Aber das werde ich bereitstellen in einer der nächsten Schritte.

Wer im Code agieren will, findet die Parameter ab Zeile 21330 bis 21341.

Meine bisherigen Erkenntnisse / Erfahrungen mit AI::FANN sind sehr positiv. Wahrscheinlich werde ich später auch die PV-Prognose darauf umstellen und so AI:DecisionTree mit einer "echten" KI ablösen.

Wer mag, kann nun mit Tests und Ideen mitwirken. Sollte es sich als günstig erweisen, mache ich einen separaten Thread nur für diese NN-Entwicklungsthema auf.

@Wolle02 ... das Thema mit der Circular Bereinigung schaue ich mit die kommenden Tage an.

Edit: Während der Beschätigung mit dem NN ist mir klar geworden, dass man für ein gutes Training (z.B. die Prognose wann ein EV geladen werden könnte) der KI Features bereitstellen muß/sollte, die einen Bezug zu diesem Event herstellen. Ein bestimmter Tag oder ähnliche Zeitindikatoren sind zu schwach und haben keinen wirklichen Bezug. Ein starker Indikator könnte der Ladezustand der EV-Batterie sein. Dazu müsste ich einen solchen Schlüssel für die Definition einen Consumers vom Typ BEV bereitstellen. Vielleicht fallen euch noch weitere Indikatoren ein, die einen Bezug zum Ladeverhalten eines BEV haben und die vom Modul konsumiert werden können.

LG,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

klaus.schauer

Zitat von: DS_Starter am 06 Dezember 2025, 22:45:59ein wichtiger Schritt in Richtung eines funktionierenden neuronalen Netz für die Verbrauchsvorhersage ist getan.
Mit AI::FANN habe ich ein solches Netz implementiert.

Edit: Während der Beschätigung mit dem NN ist mir klar geworden, dass man für ein gutes Training (z.B. die Prognose wann ein EV geladen werden könnte) der KI Features bereitstellen muß/sollte, die einen Bezug zu diesem Event herstellen. Ein bestimmter Tag oder ähnliche Zeitindikatoren sind zu schwach und haben keinen wirklichen Bezug. Ein starker Indikator könnte der Ladezustand der EV-Batterie sein.
Dies gilt sicherlich auch für die Prognosen bei Raumheizungen. Neben dem deterministisch berechneten Energiebedarf / h und dem tatsächlichen Wert wären wahrscheinlich auch die Eingangsgrößen der Berechnung und ggf. auch die Sonneneinstrahlung hilfreich. Um dies zu beurteilen, fehlt mir allerdings die Kenntnis.

klaus.schauer

Zitat von: DS_Starter am 05 Dezember 2025, 21:03:59Hallo klaus.schauer,
ZitatDie EPEX Spot Day-Ahead Preise werden täglich abgerufen und für den aktuellen Tag und den Folgetag in Internals gespeichert, um diese in Prognoseverfahren ggf. zu berücksichtigen.
Die Abrufroutinen kannst du gern mitteilen. Den Börsenpreis hatte ich vor über https://api.energy-charts.info/price?bzn=DE-LU zu implementieren. Die Alternativen würde ich vergleichen.
ZitatAugenblickich hole ich mir die Prognosen zur Windgeschwindigkeit über das Modul DWD_OpenData. Könnte man die stündlichen Prognosen zur Windgeschwindigkeit (FF-Werte) auch intern in inSolarForecast (valCurrent, nextHours) zusätzlich zur Temperatur ablegen?
Wenn diese Werte hilfreich sind, nehme ich sie mit auf. Das ist kein Problem.
Ich verwende die gleiche Quelle, gebe aber noch den Zeitraum mit: https://api.energy-charts.info/price?country=DE-LU&start=<todayDate>&end=<tomorrowDate>. Beide Varianten liefern wohl die gleichen Ergebnisse.

Falls Du die Windgeschwindigkeit (FF-Werte) mit einbauen würdest, würde ich meine Routinen entsprechend anpassen und dann hier als kompletten Satz zur Verfügung stellen. Ist ja nicht so eilig.

DS_Starter

ZitatDies gilt sicherlich auch für die Prognosen bei Raumheizungen. Neben dem deterministisch berechneten Energiebedarf / h und dem tatsächlichen Wert wären wahrscheinlich auch die Eingangsgrößen der Berechnung und ggf. auch die Sonneneinstrahlung hilfreich.

Ja die Solardaten sind kein Problem. Wichtig ist, dass man für das Training und die Auswertung für die Prognose die gleichen Features benutzen muss. Also zb. reale Pv Erzeugung für das Training und als Ersatz die Solarprognose als Eingangswert bei der Verbrauchsprognose. Gleiches würde auch für den Energiebedarf gelten, also der reale Energieverbrauch der WP im Training und der deterministischen Prognose. ... wenn dieses Feature benutzen will.
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

300P

Die neue Funktion "funktioniert bei mir"  ;D
- verstehen = derzeitig noch 0......  :o  :-X  :'(  O:-)

(Beim NN-Training gibt es einige Minuten 26 % mehr CPU-Auslastung - RPI4)

nformationen zum neuronalen Netz der Verbrauchsvorhersage

letztes KI-Training: 07.12.2025 10:08:48 / Laufzeit in Sekunden: 312.28
letzte KI-Ergebnis Generierungsdauer: 0.12 ms

=== Modellparameter ===

Trainingsdaten: 6163 (Training=4930, Validierung=1233)
Architektur: Inputs=16, Hidden Layers=50-25, Outputs=1
Hyperparameter: LR=0.010, Momentum=0.9, BitFail-Limit=0.35
Aktivierungen: Hidden=Sigmoid, Output=Linear

=== Trainingsmetriken ===

bestes Modell bei Epoche: 11 (von max. 15000)
Training MSE: 0.004
Validation MSE: 0.002
Validation Bit_Fail: 0

=== Fehlermaße der Prognosen ===

MAE: 621.29 Wh
MedAE: 564.48 Wh
RMSE: 0.041
MAPE: 40.472 %
MdAPE: 32.710 %
R²: 0.013




2025.12.07 10:21:32 1: Forecast DEBUG> Start Neural Network consumption result check
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 11 -> consumption forecast: 1799 Wh, legacy value: 2237
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1807 Wh, legacy value: 2148
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1807 Wh, legacy value: 2926
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 14 -> consumption forecast: 1809 Wh, legacy value: 2669
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 15 -> consumption forecast: 1810 Wh, legacy value: 2665
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 16 -> consumption forecast: 1810 Wh, legacy value: 2759
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 17 -> consumption forecast: 1808 Wh, legacy value: 2274
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 18 -> consumption forecast: 1722 Wh, legacy value: 2590
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 19 -> consumption forecast: 1720 Wh, legacy value: 2322
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 20 -> consumption forecast: 1718 Wh, legacy value: 2122
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 21 -> consumption forecast: 1716 Wh, legacy value: 2343
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 22 -> consumption forecast: 1714 Wh, legacy value: 2017
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 23 -> consumption forecast: 1713 Wh, legacy value: 2066
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 24 -> consumption forecast: 1712 Wh, legacy value: 2058
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 1 -> consumption forecast: 1737 Wh, legacy value: 1761
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 2 -> consumption forecast: 1735 Wh, legacy value: 1730
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 3 -> consumption forecast: 1734 Wh, legacy value: 1980
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 4 -> consumption forecast: 1734 Wh, legacy value: 1673
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 5 -> consumption forecast: 1734 Wh, legacy value: 2782
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 6 -> consumption forecast: 1733 Wh, legacy value: 1895
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 7 -> consumption forecast: 1733 Wh, legacy value: 2430
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 8 -> consumption forecast: 1733 Wh, legacy value: 1697
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 9 -> consumption forecast: 1733 Wh, legacy value: 2167
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 10 -> consumption forecast: 1795 Wh, legacy value: 2331
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 11 -> consumption forecast: 1796 Wh, legacy value: 2237
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1800 Wh, legacy value: 2148
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1804 Wh, legacy value: 2926
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 14 -> consumption forecast: 1805 Wh, legacy value: 2669
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 15 -> consumption forecast: 1806 Wh, legacy value: 2665
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 16 -> consumption forecast: 1805 Wh, legacy value: 2759
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 17 -> consumption forecast: 1802 Wh, legacy value: 2274
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 18 -> consumption forecast: 1721 Wh, legacy value: 2590
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 19 -> consumption forecast: 1719 Wh, legacy value: 2322
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 20 -> consumption forecast: 1717 Wh, legacy value: 2122
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 21 -> consumption forecast: 1716 Wh, legacy value: 2343
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 22 -> consumption forecast: 1714 Wh, legacy value: 2017
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 23 -> consumption forecast: 1713 Wh, legacy value: 2066
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 24 -> consumption forecast: 1712 Wh, legacy value: 2058
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 1 -> consumption forecast: 1737 Wh, legacy value: 1761
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 2 -> consumption forecast: 1735 Wh, legacy value: 1730
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 3 -> consumption forecast: 1735 Wh, legacy value: 1980
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 4 -> consumption forecast: 1734 Wh, legacy value: 1673
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 5 -> consumption forecast: 1734 Wh, legacy value: 2782
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 6 -> consumption forecast: 1733 Wh, legacy value: 1895
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 7 -> consumption forecast: 1733 Wh, legacy value: 2430
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 8 -> consumption forecast: 1733 Wh, legacy value: 1697
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 9 -> consumption forecast: 1733 Wh, legacy value: 2167
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 10 -> consumption forecast: 1792 Wh, legacy value: 2331
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 11 -> consumption forecast: 1797 Wh, legacy value: 2237
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1803 Wh, legacy value: 2148
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1806 Wh, legacy value: 2926
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 14 -> consumption forecast: 1807 Wh, legacy value: 2669
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 15 -> consumption forecast: 1808 Wh, legacy value: 2665
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 16 -> consumption forecast: 1807 Wh, legacy value: 2759
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 17 -> consumption forecast: 1805 Wh, legacy value: 2274
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 18 -> consumption forecast: 1721 Wh, legacy value: 2590
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 19 -> consumption forecast: 1719 Wh, legacy value: 2322
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 20 -> consumption forecast: 1717 Wh, legacy value: 2122
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 21 -> consumption forecast: 1716 Wh, legacy value: 2343
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 22 -> consumption forecast: 1715 Wh, legacy value: 2017
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 23 -> consumption forecast: 1713 Wh, legacy value: 2066
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 24 -> consumption forecast: 1712 Wh, legacy value: 2058
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast|DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP|ESP32-Digitizer-AI_on_the_Edge|ESP32CAM usw.

Parallix

Bug report:

Gestern haben meine zwei Hausspeicher beide den in SF eingestellten maxSoC erreicht. Beim eingestellten careCycle=14 hätte demnach heute in special_daysUntilBatteryCare_XX eine 13 stehen müssen. Tatsächlich finde ich heute aber:  special_daysUntilBatteryCare_01=12 und special_daysUntilBatteryCare_01=11. Offenbar ein Fehler in SF.
FHEM: Debian/Testing BananaPro - AVM: 7490 (7.60) und 7591 (8.20) - Goodwe: GW25K-ET (DSP V10 / ARM V12) - Trina TSM 405: (#East, #South, #West) = (12,16,12) - BYD: 2 x HVS 7.7 (BMS V3.31-B, BMU V3.26-B) - EnOcean - Z-Wave - FS20/HMS

DS_Starter

Nabend,

ZitatDie neue Funktion "funktioniert bei mir"  ;D
(Beim NN-Training gibt es einige Minuten 26 % mehr CPU-Auslastung - RPI4)
Die CPU Auslastung ist normal. Das NN Training findet in einem Nebenprozess statt der sich einen CPU Kern schnappt und ihn ordentlich (nahe 100%) auslastet. Bei einer 4 Core Maschine wird man in Summe 25% mehr Auslastung sehen. Da passiert ordentlich etwas.

Deine Werte

2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 11 -> consumption forecast: 1799 Wh, legacy value: 2237
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 12 -> consumption forecast: 1807 Wh, legacy value: 2148
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 13 -> consumption forecast: 1807 Wh, legacy value: 2926
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 14 -> consumption forecast: 1809 Wh, legacy value: 2669
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 15 -> consumption forecast: 1810 Wh, legacy value: 2665
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 16 -> consumption forecast: 1810 Wh, legacy value: 2759
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 17 -> consumption forecast: 1808 Wh, legacy value: 2274
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 18 -> consumption forecast: 1722 Wh, legacy value: 2590
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 19 -> consumption forecast: 1720 Wh, legacy value: 2322
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 20 -> consumption forecast: 1718 Wh, legacy value: 2122
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 21 -> consumption forecast: 1716 Wh, legacy value: 2343
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 22 -> consumption forecast: 1714 Wh, legacy value: 2017
2025.12.07 10:21:32 1: Forecast DEBUG> Neural Network - hod: 23 -> consumption forecast: 1713 Wh, legacy value: 2066

sehen zunächst mal nicht schlecht aus, wobei sie tendentiell immer kleiner als der legacy Wert sind. Jetzt müsstest du mal vergleichen wie nah die beiden Prognosen der Realität kommen. Insgesamt scheinst du ja einen recht ausgewogenen Verbrauch über die Zeit zu haben. Dazu passt auch Validation Bit_Fail: 0 -> keine Ausreißer.

Etwas unschön sind die Fehlermaße:

MAE: 621.29 Wh
MedAE: 564.48 Wh
RMSE: 0.041
MAPE: 40.472 %
MdAPE: 32.710 %
R²: 0.013

Sie deuten allesamt auf eine schwache Prognosequalität hin. Ich habe diese Werte durch eine KI selbst analysieren lassen und sie kommt auf gleiches Ergebnis:

🔍 Interpretation anhand der Prognosewerte
* Dein Netz gibt fast konstante Werte um 1710–1810 Wh aus.
* Die Legacy‑Werte schwanken stark (1673 bis 2926 Wh).
* Das Modell glättet die Zeitreihe, erkennt aber die Peaks (z. B. 2782, 2926 Wh) nicht → dadurch entstehen große Fehler.

Beispiel:
* hod 13: Forecast 1807 Wh vs. Legacy 2926 Wh → Abweichung ~1100 Wh.
* hod 5: Forecast 1734 Wh vs. Legacy 2782 Wh → Abweichung ~1050 Wh.

* Diese großen Abweichungen erklären die hohen MAE/MedAE/MAPE und das niedrige R².

🎯 Fazit
* Das Modell ist stabil, aber zu glatt. Es liefert konstante Werte und verfehlt die Varianz.
* Kennzahlen zeigen schwache Prognosequalität. Besonders R² und MAPE sind klare Indikatoren.
* Praktisch: Für Grundlast‑Schätzung ok, für Peak‑Forecasting unbrauchbar.

✅ Handlungsempfehlungen
* Feature‑Engineering: Peaks brauchen zusätzliche Eingangsgrößen (z. B. Wetter, Geräte‑Lastprofile, Tagessegmente).
* Architektur: Mehr Kapazität oder andere Aktivierungsfunktionen (z. B. ReLU statt Sigmoid) können helfen, Varianz abzubilden.
* Loss‑Funktion: Statt MSE evtl. Huber‑Loss oder gewichtete Fehler, um Peaks stärker zu berücksichtigen.
* Segmentierte Modelle: Ein Modell für Grundlast, ein Modell für Peaks → kombinieren.

Die Handlungsempfehlungen zielen darauf ab, dass ich im Modul entsprechende Einstellungsmöglichkeiten vorsehen werde damit der User sein Modell anpassen kann um optimierte Ergebnisse zu erzielen.
Die Fehlermaße können auch von einer nicht optimalen Trainingsmethodik kommen, da momentan die Traings- und Validierungsdatensätze chronologisch aufgeteilt werden und man ggf. durch ein shuffling besser den Übergang in das Winterhalbjahr ralisiert weil du z.B. jetzt eine WP im Betrieb hast, die die Trainingsdatensätze:

Trainingsdaten: 6163 (Training=4930, Validierung=1233)

nicht erfassen -> die 4930 Trainingsdatensätze liegen vor dem Winterhalbjahr (wenn sie 1 Jahr abbilden) ohne shuffling. Einstellungsmöglichkeiten werden kommen. Auch die Trainingsmethodik wird noch verfeinert.
Der Realitätscheck wäre interessant.
Mit den Inputs=16 sind bereits viele Featuredaten (auch Wetter) enthalten.

LG,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

@Parallix,

ZitatGestern haben meine zwei Hausspeicher beide den in SF eingestellten maxSoC erreicht. Beim eingestellten careCycle=14 hätte demnach heute in special_daysUntilBatteryCare_XX eine 13 stehen müssen. Tatsächlich finde ich heute aber:  special_daysUntilBatteryCare_01=12 und special_daysUntilBatteryCare_01=11.
Möglich wäre ein Bug. Allerdings eher unwahrscheinlich. Wenn gestern maxSoC erreicht wurde, kommt es auf die Tageszeit an wann er erreicht wurde. Durch das verwendete "flooring" wird der Tag des Erreichens des maxSoC bereits als erster verbrauchter careCycle-Tag gewertet wenn maxSoC wieder nach unten verlassen wurde. D.h. heute ist "12" dann u.U. richtig. Der Wert "11" ist natürlich nicht richtig unter diesen Rahmenbedingungen, den ich mir momentan aber nicht erklären kann.
Ich habe die entsprechende Logik etwas angepasst um "flooring" im Falle eines längeren Erreichens von maxSoC nicht so wie beobachtet wirken zu lassen.

Die V im contrib ist upgedatet.

LG,
Heiko

Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter