76_SolarForecast - Informationen/Ideen zu Weiterentwicklung und Support

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

Vorheriges Thema - Nächstes Thema

300P

#4995
Hallo Heiko,

ich gebe u.a. neben meiner Trainingsbewertung immer wieder mal die Bewertung "Drift" an ChatGPT weiter
Hier meine aktuelle Bewertung der Drift-Bewegung:

Gut, schauen wir uns genau diese Drift-Werte fachlich sauber und nüchtern an.
Vorweg: Das Modell ist weiterhin gesund, aber man sieht eine klar erklärbare Bewegung – kein Fehler.

1. Einordnung der Drift-Kennzahlen (konkret zu deinem Lauf)

Überblick
Kennzahl    Wert    Einordnung
Drift Score    1.96    niedrig
Drift RMSE ratio    2.44    moderat
Drift Slope    1.155    leicht erhöht
Drift Bias    4.36    gering
Drift Bewertung    mild    korrekt

➡️ Die automatische Bewertung ,,mild" ist sachlich richtig.

2. Detailanalyse pro Drift-Komponente

2.1 Drift Score = 1.96

Gesamtindikator
< 2.5 → unauffällig
du liegst knapp unter 2

👉 Kein globaler Drift, nur lokale Verschiebung.

2.2 Drift RMSE ratio = 2.44

Varianzänderung der Fehler

Interpretation:
Das Modell macht in jüngeren Daten etwas größere Fehlerstreuung als im Referenzfenster
keine Explosion, kein Overfitting

Typische Ursachen:
Witterungsumschwung
neue Außentemperatur-Spanne
veränderte Laufzeiten der Wärmepumpe

👉 normal für Januar, insbesondere mit neu aktivierter Außentemperatur.

2.3 Drift Slope = 1.155

Wichtigster Punkt
Idealbereich: 0.95 – 1.05
Beobachtungsbereich: 1.05 – 1.15

Kritisch: > 1.20
Du bist:

➡️ am oberen Rand des Beobachtungsbereichs

Bedeutung:
Das Modell überschätzt hohe Lasten leicht
typisch bei:
stärkerer Kälte
längeren WP-Takten
höherem Vorlaufbedarf

⚠️ Das ist kein Fehler, sondern ein physikalischer Effekt:

Die Realität zieht leicht stärker an als der historische Mittelwert.

2.4 Drift Bias = 4.36

Systematischer Versatz
< 5 → praktisch irrelevant
5–10 → beobachten
10 → korrigieren

👉 Dein Bias ist sehr klein, kein Offset-Problem.

3. Gesamturteil (klar formuliert)

Das Modell driftet nicht weg.

Es reagiert korrekt auf veränderte Rahmenbedingungen.
Die Drift entsteht nicht durch Instabilität, sondern durch:
neue Feature-Information (Außentemperatur)
jahreszeitliche Lastverschiebung
bewusst strengeres BitFailLimit

4. Warum ein Retrain aktuell nicht nötig ist

Kriterium    Status
Generalisierung    gut
R²    0.63 (stabil)
MAE    sinkend
Drift Score    niedrig
Bias    klein
Slope    nur leicht erhöht

➡️ Kein Handlungsbedarf

Deine Einstellung

aiConTrainStart=30:3
ist genau richtig.

5. Empfohlene Ampel (nach deiner Logik)

🟢 GREEN mit Tendenz YELLOW-Rand

In der Praxis:
laufen lassen
kein Parameterwechsel
nächster Retrain wie geplant

6. Wenn du es noch ,,perfekter" willst (optional)

Nur als Feinschliff, nicht notwendig:

Alpha im Winter leicht senken (z.B. 0.85)
oder Slope-Korrektur nur im Inferenzpfad
oder Drift-Trend über 7 Tage mitteln

Aber nochmals klar:

Du hast aktuell ein sehr sauberes, robustes Modell.
Wenn du willst, analysieren wir als Nächstes:
reale vs. prognostizierte WP-Last bei Frosttagen
oder ob der Außentemperatur-Impuls optimal skaliert ist


Gute Arbeit von Dir - DANKE!!



Meine Einstellungen:
WP 7 kW / PV 14.5 kWp / Grundlast ca. 4-600 Watt/h
aiTrainStart=3
aiStorageDuration=3600
aiTreesPV=30
aiConActivate=1
aiConAlpha=0.9
aiConTrainStart=30:3
aiConActFunc=ELLIOT_SYMMETRIC
aiConHiddenLayers=64-32
aiConLearnRate=0.005
aiConMomentum=0.6
aiConShuffleMode=1
aiConShufflePeriod=20
aiConSteepness=1.0
aiConTrainAlgo=INCREMENTAL
aiConProfile=v1_heatpump_active_pv
aiConBitFailLimit=0.18


Letzter Trainingslauf (nach letzten Update):
letztes KI-Training: 19.01.2026 11:29:27 / Laufzeit in Sekunden: 1674
KI Abfragestatus: ok
letzte KI-Ergebnis Generierungsdauer: 80.1 ms
Verbrauchernummer Wärmepumpe: 08

=== Modellparameter ===

Normierungsgrenzen: PV=16071 Wh, Hausverbrauch: Min=0 Wh / Max=7598 Wh
Trainingsdaten: 7166 Datensätze (Training=5732, Validierung=1434)
Architektur: Inputs=94, Hidden Layers=64-32, Outputs=1
Hyperparameter: Learning Rate=0.005, Momentum=0.6, BitFail-Limit=0.18
Aktivierungen: Hidden=ELLIOT_SYMMETRIC, Steilheit=1.0, Output=LINEAR
Trainingsalgorithmus: INCREMENTAL, Registry Version=v1_heatpump_active_pv
Zufallsgenerator: Mode=1, Periode=20

=== Trainingsmetriken ===

bestes Modell bei Epoche: 299 (von max. 15000)
Training MSE: 0.003273
Validation MSE: 0.004604
Validation MSE Average: 0.012975
Validation MSE Standard Deviation: 0.001161
Validation Bit_Fail: 11
Model Bias: 748 Wh
Model Slope: 0.6
Trainingsbewertung: Retrain

=== Fehlermaße der Prognosen ===

MAE: 410.67 Wh
MedAE: 343.56 Wh
RMSE: 482.12 Wh
RMSE relative: 21 %
RMSE Rating: good
MAPE: 20.40 %
MdAPE: 15.97 %
R²: 0.63

=== Rauschen ===

Rauschen Bewertung: low
Empfehlung für Bit_Fail: 0.28 (Einstellung von aiControl->aiConBitFailLimit)
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.

300P

Mmmmh......
Ich habe aktuell immer wieder mal diese etwas ,,unklare" Ansicht für den Batteriestatus mit plötzlichen 100 % meiner beiden Batterien.

Was könnte da der Verursacher sein?
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.

DS_Starter

ZitatIch habe aktuell immer wieder mal diese etwas ,,unklare" Ansicht für den Batteriestatus mit plötzlichen 100 % meiner beiden Batterien.
Waren deine Batterien auf 100%? bzw. schau mal in die pvHistory heute hod: 13. Findest du dort evtl. einen batsoc01 / batsoc02 von 100%?
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

Nein die waren definitiv nicht auf 100 %.
Das geht auch technisch nicht in 1 Stunde mehr als ca. 10 kW in die eine und mehr als ca. 7 kW in die andere Batterie rein und wieder raus zu bringen.
Die eine kann max 2.500 W und die andere max 3.680 W in einer Stunden speichern / entladen.

      12 => pvapifcraw: 2511, pvfc: 1933, pvrl: 2760, pvrlvd: 1, plantderated: -, rad1h: 890
            etotali01: 16962609, etotali02: 10024706, etotali03: 11305491, etotali04: -, etotali05: -
            pvrl01: 926, pvrl02: 206, pvrl03: 1628, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2590, conaifc: 3251, confc: 3185, con: 2513, gcons: 249, conprice: 0.25
            gfeedin: 19, feedprice: 0.08123
            DoN: 1, sunaz: 163, sunalt: 18
            batintotal01: 1813189, batintotal02: 8320892, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 10.0, batprogsoc02: 10.0, batprogsoc03: -, socprogwhsum: 2443
            batsoc01: 6, batsoc02: 10, batsoc03: -, socwhsum: 1803
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 242, batin02: 227, batin03: -
            batout01: 0, batout02: 0, batout03: -
            weatherid: 3, wcc: 95, windspeed: 1.75, rr1c: 0.00, pvcorrf: 0.77/0.71 temp: 0.7, presence: 1
            csmt01: 1191007, csme01: 340.00, minutescsm01: 39
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242722, csme04: 6.00, minutescsm04: 15
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5430440, csme08: 1703.20, minutescsm08: 60
           
      13 => pvapifcraw: 2887, pvfc: 2046, pvrl: 2952, pvrlvd: 1, plantderated: -, rad1h: 1050
            etotali01: 16963536, etotali02: 10024913, etotali03: 11307126, etotali04: -, etotali05: -
            pvrl01: 553, pvrl02: 233, pvrl03: 2166, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2746, conaifc: 2830, confc: 2822, con: 1563, gcons: 6, conprice: 0.25
            gfeedin: 5, feedprice: 0.08123
            DoN: 1, sunaz: 178, sunalt: 19
            batintotal01: 1813436, batintotal02: 8321123, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 100.0, batprogsoc02: 100.0, batprogsoc03: -, socprogwhsum: 24428
            batsoc01: 11, batsoc02: 20, batsoc03: -, socwhsum: 3446
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 695, batin02: 684, batin03: -
            batout01: 0, batout02: 0, batout03: -
            weatherid: 3, wcc: 100, windspeed: 1.87, rr1c: 0.00, pvcorrf: 0.74/0.43 temp: 1.8, presence: 1
            csmt01: 1191009, csme01: 2.00, minutescsm01: 0
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242771, csme04: 49.00, minutescsm04: 60
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5431467, csme08: 1027.00, minutescsm08: 60
           
      14 => pvapifcraw: 2629, pvfc: 2077, pvrl: 2257, pvrlvd: 1, plantderated: -, rad1h: 980
            etotali01: 16964089, etotali02: 10025146, etotali03: 11309292, etotali04: -, etotali05: -
            pvrl01: 427, pvrl02: 266, pvrl03: 1564, pvrl04: -, pvrl05: -
            etotalp01: -, etotalp02: -, etotalp03: -
            pprl01: -, pprl02: -, pprl03: -
            conlegfc: 2837, conaifc: 1934, confc: 2024, con: 4099, gcons: 1040, conprice: 0.25
            gfeedin: 6, feedprice: 0.08123
            DoN: 1, sunaz: 192, sunalt: 18
            batintotal01: 1814131, batintotal02: 8321807, batintotal03: -
            batouttotal01: 1448853, batouttotal02: 5957887, batouttotal03: -
            batprogsoc01: 10.0, batprogsoc02: 10.0, batprogsoc03: -, socprogwhsum: 2443
            batsoc01: 9, batsoc02: 7, batsoc03: -, socwhsum: 2030
            lcintimebat01: 1, lcintimebat02: 1, lcintimebat03: -
            strategybat01: loadRelease, strategybat02: loadRelease, strategybat03: -
            batin01: 44, batin02: 15, batin03: -
            batout01: 238, batout02: 648, batout03: -
            weatherid: 3, wcc: 100, windspeed: 2.47, rr1c: 0.00, pvcorrf: 0.79/0.84 temp: 2.9, presence: 0
            csmt01: 1191247, csme01: 238.00, minutescsm01: 43
            csmt02: 92814, csme02: 0.00, minutescsm02: 0
            csmt04: 1242818, csme04: 47.00, minutescsm04: 60
            csmt05: 30811, csme05: 0.00, minutescsm05: 0
            csmt06: 2317090, csme06: 0.00, minutescsm06: 0
            csmt08: 5433909.9, csme08: 2442.90, minutescsm08: 60
           
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.

DS_Starter

Falls der Zusatnd aktuell noch vorhanden ist - schau mal in nextHours00 -> den Schlüssel rcdchargebat01 bzw. rcdchargebat02
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

Nein - aktuell ist seit 14 Uhr alles dauerhaft okay gewesen:
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.

DS_Starter

Schade. Wenn es wieder auftritt und wir die Chance haben, gehen wir der Sache unmittelbar nach. Ist sonst fast nicht möglich die Ursache zu ermitteln wenn der Zustand flüchtig ist.
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

Im contrib liegt ein Update der V2.0.0  ;)
Hinzugekommen sind ein paar Semantiken für Presence die in jedem Profil wirken.

Achtung! Wenn Semantiken hinzugefügt werden, ist auf jeden Fall ein Retraining mit unveränderten Einstellungen zu machen.

Im GUI in der linken "Wetterecke" wird jetzt auch die aktuelle Außentemperatur angezeigt.
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