Italiano

Sblocca la potenza dei dati delle serie temporali con le funzioni finestra. Questa guida illustra concetti essenziali, esempi pratici e tecniche avanzate per l'analisi dei dati.

Analisi delle serie temporali: padroneggiare le funzioni finestra per ottenere informazioni sui dati

I dati delle serie temporali, caratterizzati dalla loro natura sequenziale e dipendente dal tempo, sono onnipresenti in tutti i settori. Dal monitoraggio dei prezzi delle azioni e del traffico del sito web all'analisi delle letture dei sensori e alla previsione delle tendenze di vendita, la capacità di estrarre informazioni significative dai dati delle serie temporali è fondamentale per un processo decisionale informato. Le funzioni finestra forniscono un set di strumenti potente e flessibile per eseguire calcoli su un insieme di righe correlate alla riga corrente in una tabella o in un frame di dati, rendendole indispensabili per l'analisi delle serie temporali.

Comprensione dei dati delle serie temporali

I dati delle serie temporali sono una sequenza di punti dati indicizzati in ordine temporale. I punti dati possono rappresentare varie metriche, come:

L'analisi dei dati delle serie temporali implica l'identificazione di modelli, tendenze e stagionalità, che possono essere utilizzati per prevedere i valori futuri, rilevare anomalie e ottimizzare i processi aziendali.

Introduzione alle funzioni finestra

Le funzioni finestra, note anche come aggregati finestrati o funzioni analitiche, consentono di eseguire calcoli su un insieme di righe correlate alla riga corrente, senza raggruppare le righe in un singolo set di risultati come le tradizionali funzioni aggregate (ad esempio, SUM, AVG, COUNT). Questa capacità è particolarmente utile per l'analisi delle serie temporali, dove spesso è necessario calcolare medie mobili, somme cumulative e altre metriche basate sul tempo.

Una funzione finestra in genere è costituita dai seguenti componenti:

  1. Funzione: il calcolo da eseguire (ad esempio, AVG, SUM, RANK, LAG).
  2. Clausola OVER: definisce la finestra di righe utilizzate per il calcolo.
  3. Clausola PARTITION BY (opzionale): divide i dati in partizioni e la funzione finestra viene applicata a ciascuna partizione in modo indipendente.
  4. Clausola ORDER BY (opzionale): specifica l'ordine delle righe all'interno di ciascuna partizione.
  5. Clausola ROWS/RANGE (opzionale): definisce il frame della finestra, ovvero l'insieme di righe relative alla riga corrente utilizzate per il calcolo.

Concetti chiave e sintassi

1. La clausola OVER()

La clausola OVER() è il cuore di una funzione finestra. Definisce la finestra di righe su cui opererà la funzione. Una semplice clausola OVER() senza argomenti considererà l'intero set di risultati come finestra. Ad esempio:

Esempio SQL:

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

Questa query calcola le vendite medie su tutte le date nella tabella sales_data.

2. PARTITION BY

La clausola PARTITION BY divide i dati in partizioni e la funzione finestra viene applicata separatamente a ciascuna partizione. Questo è utile quando si desidera calcolare le metriche per diversi gruppi all'interno dei dati.

Esempio SQL:

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

Questa query calcola le vendite medie per ciascun prodotto separatamente.

3. ORDER BY

La clausola ORDER BY specifica l'ordine delle righe all'interno di ciascuna partizione. Questo è essenziale per calcolare i totali parziali, le medie mobili e altre metriche basate sul tempo.

Esempio SQL:

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

Questa query calcola la somma cumulativa delle vendite nel tempo.

4. ROWS/RANGE

Le clausole ROWS e RANGE definiscono il frame della finestra, ovvero l'insieme di righe relative alla riga corrente utilizzate per il calcolo. La clausola ROWS specifica il frame della finestra in base al numero di riga fisico, mentre la clausola RANGE specifica il frame della finestra in base ai valori della colonna ORDER BY.

Esempio ROWS:

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

Questa query calcola la media mobile delle vendite negli ultimi 3 giorni (incluso il giorno corrente).

Esempio RANGE:

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

Questa query calcola la media mobile delle vendite negli ultimi 2 giorni (incluso il giorno corrente). Si noti che RANGE richiede una colonna ordinata di tipo dati numerico o data/ora.

Funzioni finestra comuni per l'analisi delle serie temporali

1. Media mobile/scorrevole

La media mobile, nota anche come media scorrevole, è una tecnica ampiamente utilizzata per smussare le fluttuazioni a breve termine nei dati delle serie temporali ed evidenziare le tendenze a lungo termine. Viene calcolata calcolando la media dei valori in un periodo di tempo specificato.

Esempio 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;

Questa query calcola la media mobile a 7 giorni delle vendite.

Esempio Python (utilizzando Pandas):

import pandas as pd

# Supponendo di avere un DataFrame Pandas chiamato 'sales_df' con le colonne 'date' e 'sales'

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

Esempio di applicazione globale: un rivenditore multinazionale potrebbe utilizzare una media mobile di 30 giorni per smussare le fluttuazioni delle vendite giornaliere e identificare le tendenze di vendita sottostanti in diverse regioni.

2. Somma cumulativa

La somma cumulativa, nota anche come totale parziale, calcola la somma dei valori fino alla riga corrente. È utile per tenere traccia del valore totale accumulato nel tempo.

Esempio SQL:

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

Questa query calcola la somma cumulativa delle vendite nel tempo.

Esempio Python (utilizzando Pandas):

import pandas as pd

# Supponendo di avere un DataFrame Pandas chiamato 'sales_df' con le colonne 'date' e 'sales'

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

Esempio di applicazione globale: una società di e-commerce internazionale può utilizzare le vendite cumulative per tenere traccia delle entrate totali generate dal lancio di un nuovo prodotto in diversi mercati.

3. Lead e Lag

Le funzioni LEAD e LAG consentono di accedere ai dati dalle righe successive o precedenti, rispettivamente. Sono utili per calcolare le variazioni periodiche, identificare le tendenze e confrontare i valori tra diversi periodi di tempo.

Esempio 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;

Questa query calcola la differenza di vendite rispetto al giorno precedente. La funzione LAG(sales, 1, 0) recupera il valore delle vendite dalla riga precedente (offset 1) e, se non è presente alcuna riga precedente (ad esempio, la prima riga), restituisce 0 (il valore predefinito).

Esempio Python (utilizzando Pandas):

import pandas as pd

# Supponendo di avere un DataFrame Pandas chiamato 'sales_df' con le colonne 'date' e '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)

Esempio di applicazione globale: una compagnia aerea globale può utilizzare le funzioni lead e lag per confrontare le vendite di biglietti per la stessa tratta in diverse settimane e identificare potenziali fluttuazioni della domanda.

4. Rank e Dense Rank

Le funzioni RANK() e DENSE_RANK() assegnano un rango a ciascuna riga all'interno di una partizione in base all'ordinamento specificato. RANK() assegna ranghi con lacune (ad esempio, 1, 2, 2, 4), mentre DENSE_RANK() assegna ranghi senza lacune (ad esempio, 1, 2, 2, 3).

Esempio 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;

Questa query classifica i valori delle vendite in ordine decrescente.

Esempio di applicazione globale: un marketplace online globale può utilizzare le funzioni di classificazione per identificare i prodotti più venduti in ciascun paese o regione.

Tecniche e applicazioni avanzate

1. Combinazione di funzioni finestra

Le funzioni finestra possono essere combinate per eseguire calcoli più complessi. Ad esempio, è possibile calcolare la media mobile della somma cumulativa.

Esempio 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. Utilizzo di funzioni finestra con aggregazione condizionale

È possibile utilizzare le funzioni finestra in combinazione con l'aggregazione condizionale (ad esempio, utilizzando istruzioni CASE) per eseguire calcoli basati su condizioni specifiche.

Esempio 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;

Questa query calcola la media mobile delle vendite solo per i giorni in cui le vendite sono superiori a 100.

3. Decomposizione delle serie temporali

Le funzioni finestra possono essere utilizzate per scomporre una serie temporale nelle sue componenti di tendenza, stagionalità e residua. Ciò implica il calcolo delle medie mobili per stimare la tendenza, l'identificazione dei modelli stagionali e quindi la sottrazione delle componenti di tendenza e stagionali per ottenere i residui.

4. Rilevamento di anomalie

Le funzioni finestra possono essere utilizzate per rilevare anomalie nei dati delle serie temporali calcolando le medie mobili e le deviazioni standard. I punti dati che rientrano al di fuori di un determinato intervallo (ad esempio, +/- 3 deviazioni standard dalla media mobile) possono essere contrassegnati come anomalie.

Esempi pratici in tutti i settori

1. Finanza

2. Vendita al dettaglio

3. Produzione

4. Assistenza sanitaria

Scelta dello strumento giusto

Le funzioni finestra sono disponibili in vari strumenti di elaborazione dati e linguaggi di programmazione, tra cui:

La scelta dello strumento dipende dalle esigenze specifiche e dalle competenze tecniche. SQL è adatto per i dati archiviati in database relazionali, mentre Python e Spark sono più flessibili per l'elaborazione di set di dati di grandi dimensioni e l'esecuzione di analisi complesse.

Best practice

Conclusione

Le funzioni finestra sono uno strumento potente per l'analisi delle serie temporali, che consente di calcolare medie mobili, somme cumulative, valori lead/lag e altre metriche basate sul tempo. Padroneggiando le funzioni finestra, è possibile sbloccare informazioni preziose dai dati delle serie temporali e prendere decisioni più informate. Che si tratti di analizzare dati finanziari, dati di vendita, dati di sensori o dati di traffico web, le funzioni finestra possono aiutarti a identificare modelli, tendenze e anomalie che sarebbero difficili da rilevare utilizzando le tradizionali tecniche di aggregazione. Comprendendo i concetti chiave e la sintassi delle funzioni finestra e seguendo le best practice, è possibile sfruttarle efficacemente per risolvere un'ampia gamma di problemi del mondo reale in vari settori.