Gemini‐Chat ‐ Crawler‐Daten für LLM vorbereiten - roger-infanger-weibel/cas-hzw-ai-innovation GitHub Wiki
Das ist ein klassisches Problem: Ein 15-Minuten-Intervall über ein halbes Jahr hinweg erzeugt schnell zehntausende Zeilen. Wenn du diese Rohdaten (z. B. als riesige CSV) in ein LLM wirfst, sprengst du nicht nur das Context Window, sondern das Modell verliert sich auch im "Grundrauschen" der Daten, anstatt echte Muster zu erkennen.
LLMs sind hervorragend darin, Trends, Textstrukturen und aggregierte Profile zu verstehen, aber sie sind keine klassischen statistischen Timeseries-Datenbanken.
Hier sind vier effektive Strategien, wie du deine Parkhaus-Daten intelligent verdichtest, ohne die wertvollen Muster für die Vorhersage zu verlieren:
1. Aggregation zu "typischen Profilen" (Der beste Ansatz)
Anstatt jeden einzelnen Tag zu schicken, erstelle statistische Profile. Ein LLM versteht das Konzept von "einem normalen Dienstag" viel besser als 26 einzelne Dienstage in Folge.
- Wochentag-Stunden-Matrix: Berechne den Mittelwert (oder Median) der Belegung für jeden Wochentag pro Stunde. Dadurch schrumpfen deine Daten auf genau 168 Werte ($7 \text{ Tage} \times 24 \text{ Stunden}$).
- Saisonale Profile: Da du Daten ab dem 1.1. hast, kannst du Profile für "Winter" (Jan–März) und "Frühling/Sommer" (Apr–Juni) trennen, um saisonale Trends zu erhalten.
2. Feature Engineering: Daten in Text-Rhythmen übersetzen
LLMs "denken" in Sprache und Mustern. Statt reiner Zahlenreihen kannst du die Daten in eine kompakte, semantische Form bringen.
-
Min/Max-Kompression: Reduziere die 15-Minuten-Schritte auf die wichtigsten Eckpunkte pro Tag.
-
Beispiel-Format:
Mo, 15.06.: Peak 92% um 08:30 | Low 12% um 03:15 | Schnitt 54% -
Ausreisser & Events isolieren: LLMs sind genial darin, externe Faktoren einzubeziehen. Du kannst die Rohdaten komplett weglassen und dem LLM nur die Abweichungen füttern:
-
Beispiel:
Muster-Dienstag: 60% Belegung. Aber am Di, 12.05. (Messe in der Stadt): 98% Belegung von 10-18 Uhr.
3. Datenformate optimieren (Token-Sparen)
Wenn du dennoch Zeitreihen-Daten übergeben willst, spart das richtige Format massig Platz (Tokens). CSV oder JSON sind oft sehr "geschwätzig".
-
Kompaktes Custom-Format: Lass Spaltenüberschriften, Jahreszahlen und Minuten weg, wenn das Intervall fix ist.
-
Statt:
{"timestamp": "2026-06-01 08:00:00", "occupancy_rate": 75} -
Nutze:
01.06.,08:00,75(oder noch kürzer, wenn die Reihenfolge klar ist:75,78,82,85...für einen Tag). -
Veränderungsraten statt Absolutwerte: Wenn sich die Belegung über Stunden nicht ändert, komprimiere sie:
08:00-11:00: 85%.
4. Symbolische Repräsentation (SAX)
In der Datenwissenschaft nutzt man für LLMs gerne die sogenannte Symbolic Aggregate Approximation (SAX). Dabei werden numerische Werte in Buchstaben-Codes übersetzt.
- 0–20% Belegung =
A(leer) - 21–50% Belegung =
B(mäßig) - 51–80% Belegung =
C(voll) - 81–100% Belegung =
D(kritisch)
Ein Tag sieht für das LLM dann aus wie ein Text-String: AAAAABBBCCCCDDDCCCCBBAAAA. LLMs sind extrem gut darin, Muster in solchen "Text-Strings" zu prognostizieren und fortzusetzen.
Empfohlene Vorgehensweise für dein LLM-Prompting:
Gib dem LLM am besten eine Kombination aus statischem Profil und jüngster Historie:
- Die Baseline: "Hier ist die durchschnittliche Belegung eines Standard-Mittwochs:
[Profil-Daten]" - Der Kontext: "Hier sind die Besonderheiten (Feiertage, Events, Wetter) der letzten Wochen."
- Die aktuelle Situation: "Hier sind die realen 15-Minuten-Werte der letzten 48 Stunden:
[Kurze Rohdaten]" - Die Frage: "Wie sieht die Prognose für die nächsten 24 Stunden aus?"
Möchtest du die Daten direkt in Python für das LLM vorbereiten, oder suchst du nach einer bestimmten Prompt-Struktur, wie du die verdichteten Daten am besten übergibst?