Как найти корреляцию между 2 переменными, но пересечь другую временную шкалу («лаговая корреляция») - PullRequest
1 голос
/ 14 мая 2019

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

(Потому что я думаю, что продажи item01 в день могут повлиять на продажи item02~99 на d+30)

dataframe выглядит следующим образом.

.    Item01  Item02  Item03 Item04  ... 

day1   120     130     140    200    ...

day2   200     200     150    119    ...

day3   162     110     180    220    ...

day4   170     130     160    190    ...

...    ...     ...     ...    ...    ...

Я изучил способы использования .corr() в панде dataframe, но я хочу найти перекрестную временную корреляцию.

следуетЯ просто делаю свою собственную функцию регрессии?

Большое спасибо

df_sales = pd.DataFrame(dic_sales)

corr = df_sales.corr(method = 'pearson')

corr val

.            item01 Item02 ...

item01(d+30)  0.75   0.46  ...

item02(d+30)  0.44   0.84  ...

...           ...    ...

1 Ответ

0 голосов
/ 14 мая 2019

Создайте новые столбцы, сдвинутые по времени на 30-дневный период задержки, а затем запустите метод corr для этих столбцов.

df_shifted = df_sales.shift(periods=30)
df_shifted.columns = ['Item01_30','Item02_30','Item03_30','Item04_30']

сместит все записи на 30 строк и оставит значения NaN в наблюдениях 0-29.Затем добавьте 30 значений NaN в конец исходного кадра данных:

empty_row = pd.Series([Nan,Nan,Nan,Nan], index=['Item01','Item02','Item03','Item04'])
for i in range(30):
    df_sales = df_sales.append(empty_row)

Затем объедините df_shifted и df_sales в один кадр данных:

frames = [df_sales, df_shifted]
df_sales_with_shift = pd.concat(frames, axis=1)

Запустите метод corr только для строк, которыене имеют значений NaN:

df_sales_with_shift[30:len(df_sales_with_shift.index)-30].corr(method ='pearson')

Это потребует от вас сокращения набора данных на количество периодов времени, которые вы выбираете для смещения, поэтому в зависимости от размера выборки вам может потребоваться позаботиться о том, чтобыне выбирайте слишком длинный период времени.

...