Uwolnij moc danych szeregów czasowych dzięki funkcjom okienkowym. Ten przewodnik obejmuje kluczowe koncepcje, praktyczne przykłady i zaawansowane techniki analizy danych.
Analiza szeregów czasowych: Opanowanie funkcji okienkowych dla wglądu w dane
Dane szeregów czasowych, charakteryzujące się sekwencyjną naturą i zależnością od czasu, są wszechobecne w różnych branżach. Od śledzenia cen akcji i monitorowania ruchu na stronach internetowych, po analizę odczytów z czujników i prognozowanie trendów sprzedaży, zdolność do wydobywania znaczących wniosków z danych szeregów czasowych jest kluczowa dla podejmowania świadomych decyzji. Funkcje okienkowe zapewniają potężny i elastyczny zestaw narzędzi do wykonywania obliczeń na zbiorze wierszy powiązanych z bieżącym wierszem w tabeli lub ramce danych, co czyni je nieodzownymi w analizie szeregów czasowych.
Zrozumienie danych szeregów czasowych
Dane szeregów czasowych to sekwencja punktów danych indeksowanych w porządku chronologicznym. Punkty danych mogą reprezentować różne metryki, takie jak:
- Dane finansowe: Ceny akcji, kursy walut, wolumeny obrotu
- Dane sprzedażowe: Dzienne, tygodniowe lub miesięczne dane sprzedaży różnych produktów
- Dane z czujników: Odczyty temperatury, pomiary ciśnienia, poziomy wilgotności
- Dane ruchu internetowego: Odwiedziny strony, wyświetlenia stron, współczynniki odrzuceń
- Dane zużycia energii: Godzinowe lub dzienne zużycie energii elektrycznej
Analiza danych szeregów czasowych obejmuje identyfikację wzorców, trendów i sezonowości, które mogą być wykorzystane do prognozowania przyszłych wartości, wykrywania anomalii i optymalizacji procesów biznesowych.
Wprowadzenie do funkcji okienkowych
Funkcje okienkowe, znane również jako agregaty okienkowe lub funkcje analityczne, pozwalają na wykonywanie obliczeń na zbiorze wierszy powiązanych z bieżącym wierszem, bez grupowania wierszy w pojedynczy zestaw wyników, jak tradycyjne funkcje agregujące (np. SUM, AVG, COUNT). Ta możliwość jest szczególnie przydatna w analizie szeregów czasowych, gdzie często trzeba obliczać średnie kroczące, sumy skumulowane i inne metryki oparte na czasie.
Funkcja okienkowa zazwyczaj składa się z następujących elementów:
- Funkcja: Obliczenie do wykonania (np. AVG, SUM, RANK, LAG).
- Klauzula OVER: Definiuje okno wierszy używane do obliczeń.
- Klauzula PARTITION BY (opcjonalnie): Dzieli dane na partycje, a funkcja okienkowa jest stosowana do każdej partycji niezależnie.
- Klauzula ORDER BY (opcjonalnie): Określa kolejność wierszy w każdej partycji.
- Klauzula ROWS/RANGE (opcjonalnie): Definiuje ramę okna, czyli zestaw wierszy względem bieżącego wiersza używany do obliczeń.
Kluczowe koncepcje i składnia
1. Klauzula OVER()
Klauzula OVER()
jest sercem funkcji okienkowej. Definiuje ona okno wierszy, na których funkcja będzie działać. Prosta klauzula OVER()
bez argumentów uzna cały zestaw wyników za okno. Na przykład:
Przykład SQL:
SELECT
date,
sales,
AVG(sales) OVER()
FROM
sales_data;
To zapytanie oblicza średnią sprzedaż dla wszystkich dat w tabeli sales_data
.
2. PARTITION BY
Klauzula PARTITION BY
dzieli dane na partycje, a funkcja okienkowa jest stosowana do każdej partycji osobno. Jest to przydatne, gdy chcesz obliczyć metryki dla różnych grup w ramach swoich danych.
Przykład SQL:
SELECT
date,
product_id,
sales,
AVG(sales) OVER (PARTITION BY product_id)
FROM
sales_data;
To zapytanie oblicza średnią sprzedaż dla każdego produktu osobno.
3. ORDER BY
Klauzula ORDER BY
określa kolejność wierszy w każdej partycji. Jest to niezbędne do obliczania sum skumulowanych, średnich kroczących i innych metryk opartych na czasie.
Przykład SQL:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date)
FROM
sales_data;
To zapytanie oblicza sumę skumulowaną sprzedaży w czasie.
4. ROWS/RANGE
Klauzule ROWS
i RANGE
definiują ramę okna, czyli zestaw wierszy względem bieżącego wiersza używany do obliczeń. Klauzula ROWS
określa ramę okna na podstawie fizycznego numeru wiersza, podczas gdy klauzula RANGE
określa ramę okna na podstawie wartości kolumny ORDER BY
.
Przykład ROWS:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
sales_data;
To zapytanie oblicza średnią kroczącą sprzedaży z ostatnich 3 dni (łącznie z bieżącym dniem).
Przykład RANGE:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
sales_data;
To zapytanie oblicza średnią kroczącą sprzedaży z ostatnich 2 dni (łącznie z bieżącym dniem). Należy zauważyć, że `RANGE` wymaga uporządkowanej kolumny typu numerycznego lub daty/czasu.
Częste funkcje okienkowe dla analizy szeregów czasowych
1. Średnia krocząca
Średnia krocząca, znana również jako średnia ruchoma, jest szeroko stosowaną techniką wygładzania krótkoterminowych fluktuacji w danych szeregów czasowych i podkreślania długoterminowych trendów. Oblicza się ją poprzez uśrednianie wartości w określonym oknie czasowym.
Przykład SQL:
SELECT
date,
sales,
AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
sales_data;
To zapytanie oblicza 7-dniową średnią kroczącą sprzedaży.
Przykład w języku Python (z użyciem Pandas):
import pandas as pd
# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'
sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()
Przykład zastosowania globalnego: Wielonarodowy sprzedawca detaliczny może wykorzystać 30-dniową średnią kroczącą do wygładzenia codziennych fluktuacji sprzedaży i identyfikacji podstawowych trendów sprzedaży w różnych regionach.
2. Suma skumulowana
Suma skumulowana, znana również jako suma narastająca, oblicza sumę wartości do bieżącego wiersza. Jest przydatna do śledzenia całkowitej zgromadzonej wartości w czasie.
Przykład SQL:
SELECT
date,
sales,
SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
sales_data;
To zapytanie oblicza sumę skumulowaną sprzedaży w czasie.
Przykład w języku Python (z użyciem Pandas):
import pandas as pd
# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'
sales_df['cumulative_sales'] = sales_df['sales'].cumsum()
Przykład zastosowania globalnego: Międzynarodowa firma e-commerce może wykorzystać sumę skumulowaną sprzedaży do śledzenia całkowitego przychodu wygenerowanego z wprowadzenia nowego produktu na rynek w różnych regionach.
3. LEAD i LAG
Funkcje LEAD
i LAG
pozwalają na dostęp do danych z kolejnych lub poprzednich wierszy, odpowiednio. Są one przydatne do obliczania zmian okres do okresu, identyfikowania trendów i porównywania wartości w różnych okresach.
Przykład SQL:
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;
To zapytanie oblicza różnicę sprzedaży w porównaniu do poprzedniego dnia. Funkcja `LAG(sales, 1, 0)` pobiera wartość sprzedaży z poprzedniego wiersza (przesunięcie 1), a jeśli nie ma poprzedniego wiersza (np. pierwszy wiersz), zwraca 0 (wartość domyślną).
Przykład w języku Python (z użyciem Pandas):
import pandas as pd
# Zakładając, że masz ramkę danych Pandas o nazwie 'sales_df' z kolumnami 'date' i 'sales'
sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['previous_day_sales'].fillna(0)
Przykład zastosowania globalnego: Globalna linia lotnicza może wykorzystywać funkcje lead i lag do porównywania sprzedaży biletów na tę samą trasę w różnych tygodniach i identyfikowania potencjalnych wahań popytu.
4. RANK i DENSE RANK
Funkcje RANK()
i DENSE_RANK()
przypisują rangę każdemu wierszowi w partycji na podstawie określonej kolejności. RANK()
przypisuje rangi z lukami (np. 1, 2, 2, 4), podczas gdy DENSE_RANK()
przypisuje rangi bez luk (np. 1, 2, 2, 3).
Przykład SQL:
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;
To zapytanie szereguje wartości sprzedaży w kolejności malejącej.
Przykład zastosowania globalnego: Globalny rynek internetowy może używać funkcji rangowania do identyfikowania najlepiej sprzedających się produktów w każdym kraju lub regionie.
Zaawansowane techniki i zastosowania
1. Łączenie funkcji okienkowych
Funkcje okienkowe można łączyć w celu wykonywania bardziej złożonych obliczeń. Na przykład, można obliczyć średnią kroczącą sumy skumulowanej.
Przykład SQL:
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. Używanie funkcji okienkowych z agregacją warunkową
Można używać funkcji okienkowych w połączeniu z agregacją warunkową (np. za pomocą instrukcji CASE
) do wykonywania obliczeń na podstawie określonych warunków.
Przykład SQL:
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;
To zapytanie oblicza średnią kroczącą sprzedaży tylko dla dni, w których sprzedaż była większa niż 100.
3. Dekompozycja szeregów czasowych
Funkcje okienkowe mogą być używane do dekompozycji szeregu czasowego na jego składowe: trend, sezonowość i resztę. Obejmuje to obliczanie średnich kroczących w celu oszacowania trendu, identyfikację wzorców sezonowych, a następnie odjęcie składowych trendu i sezonowości w celu uzyskania reszt.
4. Wykrywanie anomalii
Funkcje okienkowe mogą być używane do wykrywania anomalii w danych szeregów czasowych poprzez obliczanie średnich kroczących i odchyleń standardowych. Punkty danych, które mieszczą się poza określonym zakresem (np. +/- 3 odchylenia standardowe od średniej kroczącej), mogą być oznaczone jako anomalie.
Praktyczne przykłady w różnych branżach
1. Finanse
- Analiza cen akcji: Obliczanie średnich kroczących cen akcji w celu identyfikacji trendów i potencjalnych sygnałów kupna/sprzedaży.
- Zarządzanie ryzykiem: Obliczanie kroczących odchyleń standardowych zwrotów z portfela w celu oceny zmienności i ryzyka.
- Wykrywanie oszustw: Identyfikacja nietypowych wzorców transakcji poprzez porównanie bieżących kwot transakcji z historycznymi średnimi.
2. Handel detaliczny
- Prognozowanie sprzedaży: Wykorzystanie średnich kroczących i danych o sprzedaży skumulowanej do prognozowania przyszłych trendów sprzedaży.
- Zarządzanie zapasami: Optymalizacja poziomu zapasów poprzez analizę historycznych danych sprzedaży i identyfikację wzorców sezonowych.
- Segmentacja klientów: Segmentacja klientów na podstawie ich historii zakupów w czasie.
3. Produkcja
- Konserwacja predykcyjna: Wykorzystanie danych z czujników z urządzeń do przewidywania potencjalnych awarii i proaktywnego planowania konserwacji.
- Kontrola jakości: Monitorowanie procesów produkcyjnych i identyfikacja odchyleń od oczekiwanej wydajności.
- Optymalizacja procesów: Analiza danych produkcyjnych w celu identyfikacji wąskich gardeł i optymalizacji procesów produkcyjnych.
4. Opieka zdrowotna
- Monitorowanie pacjentów: Monitorowanie parametrów życiowych pacjentów w czasie i wykrywanie anomalii, które mogą wskazywać na problem zdrowotny.
- Wykrywanie epidemii: Śledzenie rozprzestrzeniania się chorób i identyfikacja potencjalnych ognisk.
- Alokacja zasobów opieki zdrowotnej: Alokacja zasobów na podstawie potrzeb pacjentów i historycznego zapotrzebowania.
Wybór odpowiedniego narzędzia
Funkcje okienkowe są dostępne w różnych narzędziach do przetwarzania danych i językach programowania, w tym:
- SQL: Większość nowoczesnych relacyjnych systemów zarządzania bazami danych (RDBMS) obsługuje funkcje okienkowe, w tym PostgreSQL, MySQL (wersja 8.0+), SQL Server, Oracle i Amazon Redshift.
- Python: Biblioteka Pandas zapewnia doskonałe wsparcie dla funkcji okienkowych za pomocą metod
rolling()
iexpanding()
. - Spark: API SQL i DataFrame Apache Spark również obsługują funkcje okienkowe.
Wybór narzędzia zależy od Twoich specyficznych potrzeb i wiedzy technicznej. SQL jest dobrze przystosowany do danych przechowywanych w bazach danych relacyjnych, podczas gdy Python i Spark są bardziej elastyczne w przetwarzaniu dużych zbiorów danych i przeprowadzaniu złożonych analiz.
Najlepsze praktyki
- Zrozum dane: Przed zastosowaniem funkcji okienkowych dokładnie poznaj charakterystykę swoich danych szeregów czasowych, w tym ich częstotliwość, sezonowość i potencjalne wartości odstające.
- Wybierz odpowiedni rozmiar okna: Wybór rozmiaru okna zależy od wykonywanej analizy. Mniejszy rozmiar okna będzie bardziej wrażliwy na krótkoterminowe fluktuacje, podczas gdy większy rozmiar okna wygładzi dane i podkreśli długoterminowe trendy.
- Rozważ przypadki brzegowe: Bądź świadomy sposobu, w jaki funkcje okienkowe obsługują przypadki brzegowe, takie jak brakujące dane lub początek i koniec szeregu czasowego. Użyj odpowiednich wartości domyślnych lub technik filtrowania, aby obsłużyć te przypadki.
- Optymalizuj wydajność: Funkcje okienkowe mogą być kosztowne obliczeniowo, zwłaszcza w przypadku dużych zbiorów danych. Optymalizuj swoje zapytania i kod, aby poprawić wydajność, na przykład używając odpowiednich indeksów i strategii partycjonowania.
- Dokumentuj swój kod: Jasno dokumentuj swój kod i zapytania, aby wyjaśnić cel i logikę funkcji okienkowych. Ułatwi to innym zrozumienie i utrzymanie Twojego kodu.
Wniosek
Funkcje okienkowe to potężne narzędzie do analizy szeregów czasowych, umożliwiające obliczanie średnich kroczących, sum skumulowanych, wartości przesuniętych i innych metryk opartych na czasie. Opanowując funkcje okienkowe, możesz uzyskać cenne wnioski z danych szeregów czasowych i podejmować bardziej świadome decyzje. Niezależnie od tego, czy analizujesz dane finansowe, dane sprzedażowe, dane z czujników, czy dane o ruchu na stronie internetowej, funkcje okienkowe mogą pomóc Ci zidentyfikować wzorce, trendy i anomalie, które byłyby trudne do wykrycia za pomocą tradycyjnych technik agregacji. Rozumiejąc kluczowe koncepcje i składnię funkcji okienkowych oraz przestrzegając najlepszych praktyk, możesz efektywnie wykorzystywać je do rozwiązywania szerokiego zakresu rzeczywistych problemów w różnych branżach.