Deutsch

Entfesseln Sie das Potenzial von Zeitreihendaten mit Fensterfunktionen. Dieser Leitfaden behandelt wesentliche Konzepte und praktische Beispiele.

Zeitreihenanalyse: Fensterfunktionen für Dateneinblicke meistern

Zeitreihendaten, die durch ihre sequenzielle und zeitabhängige Natur gekennzeichnet sind, sind branchenübergreifend allgegenwärtig. Von der Verfolgung von Aktienkursen und der Überwachung des Website-Traffics bis hin zur Analyse von Sensormesswerten und der Vorhersage von Verkaufstrends ist die Fähigkeit, aussagekräftige Einblicke aus Zeitreihendaten zu gewinnen, für eine fundierte Entscheidungsfindung von entscheidender Bedeutung. Fensterfunktionen bieten ein leistungsstarkes und flexibles Werkzeugset zur Durchführung von Berechnungen über eine Reihe von Zeilen, die mit der aktuellen Zeile in einer Tabelle oder einem Datenrahmen in Beziehung stehen, was sie für die Zeitreihenanalyse unverzichtbar macht.

Verständnis von Zeitreihendaten

Zeitreihendaten sind eine Sequenz von Datenpunkten, die in zeitlicher Reihenfolge indiziert sind. Die Datenpunkte können verschiedene Metriken darstellen, wie zum Beispiel:

Die Analyse von Zeitreihendaten umfasst die Identifizierung von Mustern, Trends und Saisonalität, die zur Vorhersage zukünftiger Werte, zur Erkennung von Anomalien und zur Optimierung von Geschäftsprozessen verwendet werden können.

Einführung in Fensterfunktionen

Fensterfunktionen, auch als 'windowed aggregates' oder analytische Funktionen bekannt, ermöglichen es Ihnen, Berechnungen auf einer Gruppe von Zeilen durchzuführen, die sich auf die aktuelle Zeile beziehen, ohne die Zeilen wie bei herkömmlichen Aggregatfunktionen (z. B. SUM, AVG, COUNT) zu einem einzigen Ergebnissatz zu gruppieren. Diese Fähigkeit ist besonders nützlich für die Zeitreihenanalyse, bei der Sie häufig gleitende Durchschnitte, kumulative Summen und andere zeitbasierte Metriken berechnen müssen.

Eine Fensterfunktion besteht typischerweise aus den folgenden Komponenten:

  1. Funktion: Die durchzuführende Berechnung (z. B. AVG, SUM, RANK, LAG).
  2. OVER-Klausel: Definiert das Fenster von Zeilen, das für die Berechnung verwendet wird.
  3. PARTITION BY-Klausel (optional): Teilt die Daten in Partitionen auf, und die Fensterfunktion wird auf jede Partition unabhängig angewendet.
  4. ORDER BY-Klausel (optional): Gibt die Reihenfolge der Zeilen innerhalb jeder Partition an.
  5. ROWS/RANGE-Klausel (optional): Definiert den Fensterrahmen, d. h. die Menge der Zeilen relativ zur aktuellen Zeile, die für die Berechnung verwendet wird.

Schlüsselkonzepte und Syntax

1. Die OVER()-Klausel

Die OVER()-Klausel ist das Herzstück einer Fensterfunktion. Sie definiert das Fenster von Zeilen, auf das die Funktion angewendet wird. Eine einfache OVER()-Klausel ohne Argumente betrachtet den gesamten Ergebnissatz als Fenster. Zum Beispiel:

SQL-Beispiel:

SELECT
  date,
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

Diese Abfrage berechnet den durchschnittlichen Umsatz über alle Daten in der sales_data-Tabelle.

2. PARTITION BY

Die PARTITION BY-Klausel teilt die Daten in Partitionen auf, und die Fensterfunktion wird auf jede Partition separat angewendet. Dies ist nützlich, wenn Sie Metriken für verschiedene Gruppen innerhalb Ihrer Daten berechnen möchten.

SQL-Beispiel:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

Diese Abfrage berechnet den durchschnittlichen Umsatz für jedes Produkt separat.

3. ORDER BY

Die ORDER BY-Klausel gibt die Reihenfolge der Zeilen innerhalb jeder Partition an. Dies ist unerlässlich für die Berechnung von laufenden Summen, gleitenden Durchschnitten und anderen zeitbasierten Metriken.

SQL-Beispiel:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

Diese Abfrage berechnet die kumulative Summe der Umsätze im Zeitverlauf.

4. ROWS/RANGE

Die Klauseln ROWS und RANGE definieren den Fensterrahmen, also die Menge der Zeilen relativ zur aktuellen Zeile, die für die Berechnung verwendet wird. Die ROWS-Klausel gibt den Fensterrahmen basierend auf der physischen Zeilennummer an, während die RANGE-Klausel den Fensterrahmen basierend auf den Werten der ORDER BY-Spalte angibt.

ROWS-Beispiel:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Diese Abfrage berechnet den gleitenden Durchschnitt des Umsatzes der letzten 3 Tage (einschließlich des aktuellen Tages).

RANGE-Beispiel:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Diese Abfrage berechnet den gleitenden Durchschnitt des Umsatzes der letzten 2 Tage (einschließlich des aktuellen Tages). Beachten Sie, dass `RANGE` eine geordnete Spalte erfordert, die einen numerischen oder Datums-/Zeitdatentyp aufweist.

Gängige Fensterfunktionen für die Zeitreihenanalyse

1. Gleitender Durchschnitt

Der gleitende Durchschnitt ist eine weit verbreitete Technik, um kurzfristige Schwankungen in Zeitreihendaten zu glätten und längerfristige Trends hervorzuheben. Er wird berechnet, indem die Werte über ein bestimmtes Zeitfenster gemittelt werden.

SQL-Beispiel:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

Diese Abfrage berechnet den 7-Tage-gleitenden Durchschnitt des Umsatzes.

Python-Beispiel (mit Pandas):

import pandas as pd

# Angenommen, Sie haben einen Pandas DataFrame namens 'sales_df' mit den Spalten 'date' und 'sales'

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Beispiel für eine globale Anwendung: Ein multinationaler Einzelhändler könnte einen 30-Tage-gleitenden Durchschnitt verwenden, um tägliche Umsatzschwankungen auszugleichen und zugrunde liegende Verkaufstrends in verschiedenen Regionen zu identifizieren.

2. Kumulative Summe

Die kumulative Summe, auch als laufende Summe bekannt, berechnet die Summe der Werte bis zur aktuellen Zeile. Sie ist nützlich, um den über die Zeit angesammelten Gesamtwert zu verfolgen.

SQL-Beispiel:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

Diese Abfrage berechnet die kumulative Summe der Umsätze im Zeitverlauf.

Python-Beispiel (mit Pandas):

import pandas as pd

# Angenommen, Sie haben einen Pandas DataFrame namens 'sales_df' mit den Spalten 'date' und 'sales'

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Beispiel für eine globale Anwendung: Ein internationales E-Commerce-Unternehmen kann die kumulativen Umsätze verwenden, um den Gesamtumsatz zu verfolgen, der durch die Einführung eines neuen Produkts in verschiedenen Märkten generiert wird.

3. LEAD und LAG

Die Funktionen LEAD und LAG ermöglichen den Zugriff auf Daten aus nachfolgenden bzw. vorhergehenden Zeilen. Sie sind nützlich zur Berechnung von Periodenveränderungen, zur Identifizierung von Trends und zum Vergleich von Werten über verschiedene Zeiträume hinweg.

SQL-Beispiel:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

Diese Abfrage berechnet die Umsatzdifferenz im Vergleich zum Vortag. Die Funktion `LAG(sales, 1, 0)` ruft den Umsatzwert aus der vorherigen Zeile ab (Offset 1), und wenn keine vorherige Zeile vorhanden ist (z. B. die erste Zeile), gibt sie 0 zurück (der Standardwert).

Python-Beispiel (mit Pandas):

import pandas as pd

# Angenommen, Sie haben einen Pandas DataFrame namens 'sales_df' mit den Spalten 'date' und 'sales'

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

Beispiel für eine globale Anwendung: Eine globale Fluggesellschaft kann Lead- und Lag-Funktionen verwenden, um Ticketverkäufe für dieselbe Strecke über verschiedene Wochen zu vergleichen und potenzielle Nachfrageschwankungen zu identifizieren.

4. Rank und Dense Rank

Die Funktionen RANK() und DENSE_RANK() weisen jeder Zeile innerhalb einer Partition basierend auf der angegebenen Reihenfolge einen Rang zu. RANK() vergibt Ränge mit Lücken (z. B. 1, 2, 2, 4), während DENSE_RANK() Ränge ohne Lücken vergibt (z. B. 1, 2, 2, 3).

SQL-Beispiel:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

Diese Abfrage rangiert die Umsatzwerte in absteigender Reihenfolge.

Beispiel für eine globale Anwendung: Ein globaler Online-Marktplatz kann Ranking-Funktionen verwenden, um die meistverkauften Produkte in jedem Land oder jeder Region zu identifizieren.

Fortgeschrittene Techniken und Anwendungen

1. Kombination von Fensterfunktionen

Fensterfunktionen können kombiniert werden, um komplexere Berechnungen durchzuführen. Sie können beispielsweise den gleitenden Durchschnitt der kumulativen Summe berechnen.

SQL-Beispiel:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. Verwendung von Fensterfunktionen mit bedingter Aggregation

Sie können Fensterfunktionen in Verbindung mit bedingter Aggregation (z. B. unter Verwendung von CASE-Anweisungen) verwenden, um Berechnungen auf der Grundlage bestimmter Bedingungen durchzuführen.

SQL-Beispiel:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

Diese Abfrage berechnet den gleitenden Durchschnitt des Umsatzes nur für Tage, an denen der Umsatz größer als 100 ist.

3. Zeitreihenzerlegung

Fensterfunktionen können verwendet werden, um eine Zeitreihe in ihre Trend-, Saison- und Restkomponenten zu zerlegen. Dies beinhaltet die Berechnung gleitender Durchschnitte zur Schätzung des Trends, die Identifizierung saisonaler Muster und das anschließende Subtrahieren der Trend- und Saisonkomponenten, um die Residuen zu erhalten.

4. Anomalieerkennung

Fensterfunktionen können zur Erkennung von Anomalien in Zeitreihendaten verwendet werden, indem gleitende Durchschnitte und Standardabweichungen berechnet werden. Datenpunkte, die außerhalb eines bestimmten Bereichs liegen (z. B. +/- 3 Standardabweichungen vom gleitenden Durchschnitt), können als Anomalien gekennzeichnet werden.

Praktische Beispiele aus verschiedenen Branchen

1. Finanzwesen

2. Einzelhandel

3. Fertigung

4. Gesundheitswesen

Die Wahl des richtigen Werkzeugs

Fensterfunktionen sind in verschiedenen Datenverarbeitungswerkzeugen und Programmiersprachen verfügbar, darunter:

Die Wahl des Werkzeugs hängt von Ihren spezifischen Anforderungen und Ihrer technischen Expertise ab. SQL eignet sich gut für Daten, die in relationalen Datenbanken gespeichert sind, während Python und Spark flexibler für die Verarbeitung großer Datensätze und die Durchführung komplexer Analysen sind.

Best Practices

Fazit

Fensterfunktionen sind ein mächtiges Werkzeug für die Zeitreihenanalyse, das es Ihnen ermöglicht, gleitende Durchschnitte, kumulative Summen, Lead-/Lag-Werte und andere zeitbasierte Metriken zu berechnen. Indem Sie Fensterfunktionen meistern, können Sie wertvolle Einblicke aus Ihren Zeitreihendaten gewinnen und fundiertere Entscheidungen treffen. Ob Sie Finanzdaten, Verkaufsdaten, Sensordaten oder Web-Traffic-Daten analysieren, Fensterfunktionen können Ihnen helfen, Muster, Trends und Anomalien zu identifizieren, die mit herkömmlichen Aggregationstechniken schwer zu erkennen wären. Durch das Verständnis der Schlüsselkonzepte und der Syntax von Fensterfunktionen sowie die Einhaltung von Best Practices können Sie diese effektiv nutzen, um eine Vielzahl von realen Problemen in verschiedenen Branchen zu lösen.