Como calcular a correlação cruzada em python
A correlação cruzada é uma forma de medir o grau de similaridade entre uma série temporal e uma versão defasada de outra série temporal.
Esse tipo de correlação é útil para calcular porque pode nos dizer se os valores em uma série temporal são preditivos de valores futuros em outra série temporal. Em outras palavras, pode nos dizer se uma série temporal é um indicador avançado para outra série temporal.
Este tipo de correlação é usado em muitos campos diferentes, incluindo:
Empresas: os gastos com marketing são frequentemente considerados um indicador importante das receitas futuras dos negócios. Por exemplo, se uma empresa gasta uma quantia excepcionalmente alta de dinheiro em marketing em um trimestre, a receita total deverá ser alta x trimestres depois.
Economia: O Índice de Confiança do Consumidor (ICC) é considerado um indicador importante do produto interno bruto (PIB) de um país. Por exemplo, se o ICC for elevado num determinado mês, o PIB provavelmente será superior x meses depois.
O exemplo a seguir mostra como calcular a correlação cruzada entre duas séries temporais em Python.
Exemplo: como calcular a correlação cruzada em Python
Digamos que temos a seguinte série temporal em Python que mostra o gasto total com marketing (em milhares) de uma determinada empresa, bem como a receita total (em milhares) por 12 meses consecutivos:
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])
Podemos calcular a correlação cruzada para cada defasagem entre as duas séries temporais usando a função ccf() do pacote statsmodels da seguinte forma:
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 ])
Veja como interpretar esta saída:
- A correlação cruzada no atraso 0 é 0,771 .
- A correlação cruzada no atraso 1 é 0,462 .
- A correlação cruzada no atraso 2 é 0,194 .
- A correlação cruzada no atraso 3 é -0,061 .
E assim por diante.
Observe que a correlação entre as duas séries temporais torna-se cada vez menos positiva à medida que o número de defasagens aumenta. Isso nos diz que os gastos com marketing em um determinado mês são bastante preditivos da receita um ou dois meses depois, mas não são preditivos da receita além de dois meses.
Isso faz sentido intuitivamente: esperaríamos que altos gastos com marketing em um determinado mês fossem preditivos de um aumento na receita nos próximos dois meses, mas não necessariamente um aumento na receita daqui a vários meses.
Recursos adicionais
Como calcular a autocorrelação em Python
Como calcular a correlação parcial em Python
Como calcular a correlação ponto-bisserial em Python