Ein Thema, das mich schon lange umgetrieben hat ist, wie präzise mittlerweile eigentlich die Vorhersagen von Wetterdiensten sind. Liegen die Prognosen regelmäßig 10 Grad daneben oder funktionieren die Modelle mittlerweile ganz gut? Um das herauszufinden, habe ich im Mai 2021 angefangen, systematisch Vorhersagedaten eines Online-Wetterdienstes zu speichern und zu visualisieren. Zeit also für eine Auswertung!
Schritt 1: Eine geeignete Quelle finden
Leider ist es gar nicht so leicht, überhaupt an verfügbare Wetterdaten zu kommen. Der DWD wäre natürlich super, allerdings stellt der natürlich keine öffentliche API bereit. Regelmäßig die Website zu crawlen war mir zu aufwendig. Bisher hatte ich ansonsten Weather Underground genutzt, die hatten jedoch kurz vorher den kostenlosen API-Service eingestellt (mittlerweile gibt es die aber wieder!). Daher entschied ich mich für OpenWeather, einen Wetterdienst aus UK, der eine kostenlose API zur Verfügung stellt, die immerhin Daten für die nächsten 5 Tage im 3-Stunden-Raster liefert.
Schritt 2: Daten abrufen und speichern
Die nächste Frage war die der Speicherung: Speichere ich jeden Abruf der Daten mit dem Zeitstempel der Erhebung ab, sodass ich für Abfragezeitpunkt X einen Wert für X+3h, X+6h usw. habe oder ordne ich die abgerufenen Werte gleich dem Zeitpunkt zu, für den die Prognose bestimmt war? Ersteres wäre einfacher zu speichern, zweiteres einfacher auszuwerten. Praktischerweise ermöglicht InfluxDB als Zeitreihendatenbank die Möglichkeit, recht unkompliziert einen Wert zu einem Zeitpunkt zu speichern, auch wenn der Zeitpunkt bereits in der Datenbank existiert. Unter MariaDB hingegen hätte der erste Vorhersagepunkt eine Zeile anlegen müssen, die dann von allen weiteren Vorhersagen lediglich aktualisiert wird. (Alternative wäre sonst noch ein Schema mit Primärschlüssel aus Zeitpunkt und Vorhersagezeit gewesen, aber das hätte Berechnungen unnötig kompliziert gemacht).
Zuletzt hatte ich InfluxDB irgendwann auf MariaDB migriert, dort gibt es jetzt ein wunderschönes Schema aus 410 Spalten:
Zum Befüllen der DB entschied ich mich für einen kleinen Flow in Node Red:
Soweit, so gut – Daten fließen. Mittlerweile sind es in MariaDB knapp 117.000 Einträge und damit knapp 50 Millionen Datenpunkte geworden.
Schritt 3: Erste Visualisierungen
Neugierig wie Nachbars Lumpi war der nächste Schritt, die Daten erstmalig einem Grafana-Dashboard zuzuführen. Hier zahlte es sich aus, die Zugehörigkeit der Datenpunkte gleich dem Zeitpunkt zuzuordnen, für den die jeweilige Prognose gedacht war. Ansonsten hätte jede Zeitreihe um jeweils eine bestimmte Zeit verschoben werden müssen.
Et voila – erste Erkenntnis: so absurd sieht das gar nicht aus! Um die Zeitreihen voneinander unterscheiden zu können, habe ich sie umso dunkler eingefärbt, je weiter sie in der Zukunft liegen. Im Screenshot ist die aktuelle Zeit mittig zu sehen, sodass die Prognosen nach rechts immer weiter auslaufen, bis zuletzt nur die dunkelste Linie 120 Stunden in die Zukunft reicht. Die tatsächliche Temperatur (allerdings auch nur vom Wetterdienst ermittelt) ist grün eingefärbt.
In Summe lassen sich so die Jahreszeiten seit Beginn der Erhebung auch ganz gut erkennen:
Schön, aber wie präzise ist es denn nun?? Ergebnis: Wechselhaft, aber erstaunlich präzise!
Natürlich sind immer wieder mal Schwankungen erkennbar – im großen und ganzen sind die Abweichungen aber meistens in der ersten Nachkommastelle. Was aber sehr von der aktuellen Wetterlage abhängt. Andere Zeiten sehen dann doch ganz anders aus:
Um die Frage nach der Güte bewerten zu können, braucht es also eine weitere Analyse!
Schritt 4: Auswertung
Für eine genauere Auswertung habe ich die Daten von 2024 genommen und als Matrix dargestellt: Auf der Y-Achse ist die Zeit im 3h-Rhythmus zu sehen, in der 1. Spalte der jeweilige Ist-Wert. Nach rechts dann fortlaufend die Prognose bis zur +120h-Prognose in der letzten Spalte (andersherum wäre vllt. intuitiver gewesen, naja…)
Neue Datensätze wandern in dieser Darstellung als Diagonale ins System. Der Datensatz für den 04.01.2024 0:00 Uhr bringt den Ist-Wert für 0:00 Uhr in der 1. Spalte mit sowie in der 2. Spalte den Vorhersagewert für 3 Uhr, in der 3. Spalte den Vorhersagewert für 6 Uhr, in der 4. Spalte die Vorhersage für 9 Uhr usw. Das führt dazu, dass Wechsel des Vorhersagemodells beim Wetterdienst als gut erkennbare Diagonale sichtbar werden. So wie im dargestellten Ausschnitt am 02.01.2024 9:00 Uhr, wo fast alle Prognosewerte in die Zukunft um fast 5 Grad herabgestuft wurden, was an der klaren Kante zwischen Hell- und Dunkelblau erkennbar ist.
Die vollständige Visualisierung der Temperaturdaten 2024 ist hier zu finden. (bzw. hier als PDF)
Neben der reinen Darstellung der absoluten Werte lässt sich damit auch das Delta zwischen Vorhersage und Ist-Wert visualisieren, um Abweichungen besser erkennen zu können:
Die eben erwähnte Änderung der Vorhersage taucht hier als rötlicher Bereich auf, da er gegenüber dem tatsächlichen Ist-Wert deutlich überhöht war.
Die vollständige Visualisierung der Temperaturdaten 2024 als Differenz ist hier zu finden. (bzw. hier als PDF)
Neben der direkt erkennbaren deutlichen Korrektur der Wetterdaten sind nun ein paar spannende Muster erkennbar, eine völlige Verschätzung bis zum letzten Wert z.B.:
Regelmäßig lassen sich auch „Wellenmuster“ erkennen:
Was bedeutet das? Die Prognosen der Nächte war hier Mitte Mai offenbar größtenteils präzise während die Vorhersagen tagsüber deutlich zu gering ausgefallen sind. Hier hatte es tagsüber regelmäßig bereits 24°C während die Prognosen – offenbar über mehrere Tage – jeweils bis 12h vorher noch von 17-18°C ausgingen.
Im gleichen Screenshot ebenfalls erkennbar ist, dass ab +9h offenbar ein anderes Prognosemodell genutzt wird, wodurch in den Spalten 2 bis 4 jeweils deutlich andere Farbschattierungen auftreten. Aber noch mehr: Durchgehend durch das gesamte Jahr scheinen die Prognosen +6h und +9h jeweils „nach unten verschmiert“ zu sein. Heißt: Der Prognosewert von +9h würde eigentlich besser zu +6h passen und der von +6h besser zu +3h. Warum es dazu kommt, lässt sich nur mutmaßen…
Betrachtet man die Varianz der Vorhersagen über das ganze Jahr, bestätigt sich diese Anomalie:
Je dichter die Prognose rückt, desto geringer wird die Varianz – mit Ausnahme der Prognosen für +6h und +9h, in denen die Genauigkeit gegenüber +12h sogar wieder sinkt!
Mit Blick auf das ganze Jahr wäre auch noch interessant, wie groß die Abweichungen im Schnitt sind:
Gauß wäre begeistert (aber wenig überrascht): Die Präzision aller Vorhersagewerte bildet eine klassische Normalverteilung: Die mit Abstand meisten Werte sind entweder sehr präzise oder liegen bis ein Grad unter der Realität. Abweichungen über -2°C bzw. +1°C werden hingegen recht selten.
Schritt 5: Zusammenfassung und Ausblick
Zusammenfassend lässt sich sagen:
- Die Prognosedaten von OpenWeatherMap sind erstaunlich gut – für einen kostenlosen Online-Wetterdienst enorm brauchbar und in den meisten Fällen sehr präzise!
- Wenn Vorhersagen abweichen, dann meistens durchgehend in eine Richtung. Dass eine Vorhersage erst zu niedrig und dann zu hoch ist (oder andersherum) kommt quasi nicht vor.
- In bestimmten Wetterlagen ist die Prognose über Tage hinweg ähnlich zu hoch/zu niedrig.
- OpenWeatherMap scheint für bestimmte Horizonte unterschiedliche Modelle zu nutzen – die zu deutlich anderen Ergebnissen kommen, wodurch die Vorhersagen für +6h und +9h durchschnittlich deutlich schlechter sind als die früheren Prognosen.
So viel für dieses Mal – neben der Temperatur habe ich auch Bewölkung, Luftfeuchtigkeit, Luftdruck, Niederschlag, Windrichtung und Windgeschwindigkeit mit erhoben, die nun natürlich auch auf ihre Auswertung warten – stay tuned!
Möchtest du einen tieferen Blick in die Daten werfen? Hier findest du die Rohdaten dazu. Und falls du die anderen 50 Mio. Datenpunkte auswerten möchtest, freue ich mich jederzeit über Post von dir! 🙂
Ferdi
19. Januar 2025Wow, da steckt viel Arbeit drin! Sehr interessant, und super Plots 📊.