Как рассчитать скользящую корреляцию в Pandas (с примерами)


Скользящие корреляции — это корреляции между двумя временными рядами в скользящем окне. Одним из преимуществ этого типа корреляции является то, что вы можете визуализировать корреляцию между двумя временными рядами во времени.

В этом руководстве объясняется, как рассчитать и визуализировать скользящие корреляции для кадра данных pandas в Python.

Как рассчитать скользящие корреляции в Pandas

Предположим, у нас есть следующий фрейм данных, который отображает общее количество продуктов, проданных для двух разных продуктов ( x и y ) за 15-месячный период:

import pandas as pd
import numpy as np

#create DataFrame
df = pd.DataFrame({'month': np.arange (1, 16),
 'x': [13, 15, 16, 15, 17, 20, 22, 24, 25, 26, 23, 24, 23, 22, 20],
 'y': [22, 24, 23, 27, 26, 26, 27, 30, 33, 32, 27, 25, 28, 26, 28]})

#view first six rows
df.head ()

 month x y
1 1 13 22
2 2 15 24
3 3 16 23
4 4 15 27
5 5 17 26
6 6 20 26

Чтобы вычислить скользящую корреляцию в pandas, мы можем использовать функцию roll.corr() .

Эта функция использует следующий синтаксис:

df['x'].rolling(width).corr(df['y'])

куда:

  • df: имя фрейма данных
  • ширина: целое число, указывающее ширину окна для скользящей корреляции.
  • x, y: имена двух столбцов для расчета скользящей корреляции между

Вот как использовать эту функцию для расчета 3-месячной скользящей корреляции продаж между продуктом x и продуктом y :

#calculate 3-month rolling correlation between sales for *x* and *y*
df['x']. rolling (3).corr(df['y'])

0 NaN
1 NaN
2 0.654654
3 -0.693375
4 -0.240192
5 -0.802955
6 0.802955
7 0.960769
8 0.981981
9 0.654654
10 0.882498
11 0.817057
12 -0.944911
13 -0.327327
14 -0.188982
dtype: float64

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 3 месяца. Например:

  • Корреляция в продажах с 1 по 3 месяц составила 0,654654 .
  • Корреляция в продажах со 2-го по 4-й месяцы составила -0,693375.
  • Корреляция в продажах с 3-го по 5-й месяцы составила -0,240192.

И так далее.

Мы можем легко изменить эту формулу, чтобы рассчитать скользящую корреляцию для другого периода времени. Например, в следующем коде показано, как рассчитать скользящую корреляцию продаж за 6 месяцев между двумя продуктами:

#calculate 6-month rolling correlation between sales for *x* and *y*
df['x']. rolling (6).corr(df['y']) 
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 0.558742
6 0.485855
7 0.693103
8 0.756476
9 0.895929
10 0.906772
11 0.715542
12 0.717374
13 0.768447
14 0.454148
dtype: float64

Эта функция возвращает корреляцию между продажами двух продуктов за предыдущие 6 месяцев. Например:

  • Корреляция в продажах с 1 по 6 месяц составила 0,558742 .
  • Корреляция в продажах со 2-го по 7-й месяц составила 0,485855.
  • Корреляция в продажах с 3 по 8 месяцы составила 0,693103.

И так далее.

Заметки

Вот несколько замечаний по функциям, используемым в этих примерах:

  • Ширина (т. е. скользящее окно) должна быть 3 или больше для расчета корреляций.
  • Полную документацию по функции roll.corr() можно найти здесь .

Дополнительные ресурсы

Как рассчитать скользящую корреляцию в R
Как рассчитать скользящую корреляцию в Excel