Die bessere Wettervorhersage: Die KI Wetter App
Programmiersprache: Python, JavaScript
Genutzte Software: Pytorch, Next.js, Django, Tailwind CSS
Keywords: Wetter, LSTM, Recurrent Neural Network, Neuronales Netz, KI, Sequence Models, Meteorologie, Fullstack, PWA
Inhaltsverzeichnis:
- Die bessere Wettervorhersage: Die KI Wetter App
- Das Setup
- Wie einer Wetter KI aussieht
- Die App mit Front- und Backend
Das Setup
Ein Wetterfrosch, ein Glas und eine kleine Leiter. Das war wahrscheinlich die erste Form einer Wetterstation mit Vorhersage. Heute haben wir riesige Wettermodelle die hunderte Parameter global überwachen und Voraussagen berechnen.
Was soll man daran also noch verbessern können? Ganz einfach: Lokale Live Daten und komplexe Zusammenhänge nutzen um die Voraussagen noch genauer zu machen.
Künstliche Intelligenz kann Muster in den Daten erkennen, die uns vorher komplett unbekannt waren. Daher meine Idee ein neuronales Netz zu trainieren mit allen möglichen Wetterdaten. Die KI lernt dann, welche Parameter genutzt werden können um z.B. die Temperatur vorauszusagen.
Das Ganze kombiniert mit aktuellen Live Daten und einer übersichtlichen, schönen Web-App ist ki-wetter.de .
Hier eine kurze Übersicht:
Wie eine Wetter KI funktioniert
Für gewöhnlich kennt man KI inzwischen vor allem mit Bild und Textdaten - also z.B. ChatGPT und DallE für generative Anwendungen oder Objekterkennung in Bildern wie es Google schon seit Jahren in ihrerer Foto-App nutzt.
Wetterdaten muss man allerdings etwas anders behandeln. Temperatur, Luftdruck, Niederschlag, usw. sind alles numerische Werte. Das ist schon mal eine sehr gute Voraussetzung, denn im Hintergrund werden immer Zahlen verrechnet. Egal ob wir als Input Bilder, Texte oder etwas ausgefallenes wie Proteinsequenzen haben.
Die Herausforderung einer Wetter KI besteht darin, dass es Zeitreihen sind, also z.B. der Temperaturverlauf der letzten 24 Stunden. Es wäre daher gut, wenn unsere KI eine Art Gedächtnis hätte. Dieses Gedächtnis könnte sich typische Muster merken, wie z.B. den Tag-Nacht Verlauf der Temperatur.
Wie so oft ist ein neuronales Netz das Mittel der Wahl, mit dem Unterschied, dass wir hier eine Spezialform benutzen, nämlich RNNs = Recurrent Neural Networks. Dabei wird die Zeitreihe (von z.B. 24 Stunden) Step by Step im neuronalen Netz verarbeitet:
Zuerst werden die Daten von Zeitpunkt 0 im RNN zum Output 0 verarbeitet. Dieser Output 0 wird zusammen mit den Daten von Zeitpunkt 1 zu Output 1. Und Output 1 wird zusammen mit den Daten von Zeitpunkt 2 zu Output 2, usw. Nachdem alle Zeitschritte durch sind, hat man einen letzten Output als Ergebnis.
Mit diesem Ansatz kann man die zeitliche Abhängigkeit in ein neuronales Netz bringen. Aber was ist nun mit dem Gedächtnis? Das RNN weiß ja zum Zeitpunkt t nicht mehr was vor 5 Schritten passiert ist. Um das Problem zu lösen gibt es zwei Möglichkeiten:
LSTMs und GRUs - als hätten wir nicht schon genug Abkürzungen im Machine Learning Bereich gibt es hier nochmal die “Long Short-Term Memory” und “Gated Recurrent Unit”. Beide hier im Detail zu erklären, würde den Rahmen sprengen, daher hier nur einmal die Kurzversion:
Statt “normaler” fully-connected Neuronen, die einfach nur die Inputs mit Gewichten multiplizieren und addieren, haben LSTMs und GRUs einen internen Status (sog. Gates). D.h. es werden Daten von den vorherigen Zeitschritten gespeichert und so baut sich ein Gedächtnis auf.
Damit hätten wir alle Methoden zusammen um effektiv Wetterdaten vorherzusagen. Was jetzt noch fehlt sind eben genau diese Daten. Vom deutschen Wetterdienst gibt es eine riesige Datenbank aller Wetteraufzeichnungen der letzten Jahrzehnte. Als Ausgangspunkt habe ich stündliche und tägliche Daten von 15 versch. Stationen über ganz Deutschland genutzt. Dazu gehören folgende Werte
- Temperatur
- Luftdruck
- Luftfeuchte
- Sonnenscheindauer
- Windgeschwindigkeit
- Windrichtung
- Windböen Geschwindigkeit
- Niederschlag
Auf all diese Zeitreihen wurde ein Windowing angewendet, also von jedem Zeitpunkt N Schritte zurück als Input und M Zeitschritte in die Zukunft als Target Output.
Der so aufgebaute Trainingsverlauf für die 24 Stunden Vorhersage sieht folgendermaßen aus:
Die Komplexität des neuronalen Netzes wurde bewusst nicht zu hoch gewählt, daher konnte das Training über 1000 Epochen laufen ohne wochenlang warten zu müssen. Die durschnittliche Abweichung in der Temperaturvorhersage liegt bei gerade mal 0,5°C und Niederschläge konnten mit fast 97% Genauigkeit vorhergesagt werden.
Bei der 5-Tages Vorhersage ergibt sich ein ähnliches Bild, wobei das Endresultat mit 1,1°C mittlere Abweichung und 95% Genauigkeit, wie zu erwarten, etwas schlechter als die 24h Vorhersage ist.
Die App mit Front- und Backend
Die beste KI nützt nichts wenn sie nicht zugänglich gemacht wird. Und meine Idee war es, dass alle Vorhersagen einfach und übersichtlich auf einer Seite zu sehen sind. Als Input muss der Nutzer nur einen Ort eingeben und im Hintergrund berechnet die KI die Wetterdaten.
Alles was zum “Hintergrund” dazu gehört wurde mit Django implementiert, d.h. es gibt eine einfache API die Anfragen zu einem bestimmten Ort verarbeitet, Wetterdaten abruft, diese durch das neuronale Netz schickt und das Ergebnis zurückliefert.
KI und Backend, also Teil 1 und 2 sind damit eingerichtete und zum Schluss benötigt es auch noch Teil 3: Das Frontend. In diesem Fall wurde das mit Next.js implementiert. Also eine Web-App die erst mal nur leere Diagramme anzeigt. Beim Eingeben und Abschicken des Orts werden dann die Daten vom Backend geliefert und die Diagramme dynamisch erzeugt.
Für die animierten Diagramme habe ich Chart.js benutzt, mit einigen Anpassungen, um das Ganze auch wetterspezifisch zu machen. Zusammen mit Tailwind CSS und Anime.js lassen sich sämtliche visuelle Effekte auf der Seite einfach und schnell erzeugen.
Das Ergebnis gibt es hier zu sehen.
Danke fürs Lesen und bei Fragen, kann man mir gerne per Mail oder Kontaktformular schreiben.