Come calcolare la correlazione incrociata in python
La correlazione incrociata è un modo per misurare il grado di somiglianza tra una serie temporale e una versione ritardata di un’altra serie temporale.
Questo tipo di correlazione è utile da calcolare perché può dirci se i valori in una serie temporale sono predittivi dei valori futuri in un’altra serie temporale. In altre parole, può dirci se una serie temporale è un indicatore anticipatore per un’altra serie temporale.
Questo tipo di correlazione viene utilizzato in molti campi diversi, tra cui:
Imprese: le spese di marketing sono spesso considerate un indicatore importante delle future entrate aziendali. Ad esempio, se un’azienda spende una somma di denaro insolitamente elevata per il marketing in un trimestre, i ricavi totali dovrebbero essere elevati x trimestri successivi.
Economia: l’indice della fiducia dei consumatori (CCI) è considerato un indicatore anticipatore del prodotto interno lordo (PIL) di un paese. Ad esempio, se il CCI è elevato in un dato mese, è probabile che il PIL sarà più alto x mesi dopo.
L’esempio seguente mostra come calcolare la correlazione incrociata tra due serie temporali in Python.
Esempio: come calcolare la correlazione incrociata in Python
Supponiamo di avere la seguente serie temporale in Python che mostra la spesa totale di marketing (in migliaia) per una determinata azienda e le entrate totali (in migliaia) per 12 mesi consecutivi:
import numpy as np #define data marketing = n.p. array ([3, 4, 5, 5, 7, 9, 13, 15, 12, 10, 8, 8]) income = np. array ([21, 19, 22, 24, 25, 29, 30, 34, 37, 40, 35, 30])
Possiamo calcolare la correlazione incrociata per ogni ritardo tra le due serie temporali utilizzando la funzione ccf() dal pacchetto statsmodels come segue:
import statsmodels. api as sm
#calculate cross correlation
sm. tsa . stattools . ccf (marketing, revenue, adjusted= False )
array([ 0.77109358, 0.46238654, 0.19352232, -0.06066296, -0.28159595,
-0.44531104, -0.49159463, -0.35783655, -0.15697476, -0.03430078,
0.01587722, 0.0070399 ])
Ecco come interpretare questo output:
- La correlazione incrociata al ritardo 0 è 0,771 .
- La correlazione incrociata al ritardo 1 è 0,462 .
- La correlazione incrociata al ritardo 2 è 0,194 .
- La correlazione incrociata al ritardo 3 è -0,061 .
E così via.
Si noti che la correlazione tra le due serie temporali diventa sempre meno positiva all’aumentare del numero di ritardi. Ciò ci dice che la spesa di marketing in un dato mese è abbastanza predittiva delle entrate uno o due mesi dopo, ma non è predittiva delle entrate oltre i due mesi.
Ciò ha un senso intuitivo: ci aspetteremmo che un’elevata spesa di marketing in un dato mese sia predittiva di un aumento delle entrate nei prossimi due mesi, ma non necessariamente un aumento delle entrate tra diversi mesi.
Risorse addizionali
Come calcolare l’autocorrelazione in Python
Come calcolare la correlazione parziale in Python
Come calcolare la correlazione punto-biseriale in Python