Correlation generally determines the relationship between two variables. The rolling correlation measure the correlation between two-time series data on a rolling window Rolling correlation can be applied to a specific window width to determine short-term correlations.
Calculating Rolling Correlation in Python
Let’s use sales data of two products A and B in the last 60 months to calculate the rolling correlation. Pandas package provides a function called rolling.corr() to calculate the rolling correlation.
Syntax:
data1.rolling(width).corr(data2)
Where,
- data1, data2 – data/column of interest (type series)
- width – Rolling window width (int)
Note: The width of the rolling window should be 3 or greater in order to calculate correlations.
Data Used:
Python3
# import pandas module import pandas as pd # read the data data = pd.read_csv( 'product_sales.csv' ) # display top 10 rows print (data.head( 10 )) # display column names print (data.columns) |
Output:
Example 2:
Here, we used the window width of 6, which shows the successive 6 months rolling correlation. We could see a significant correlation between two products sales any sudden dip or rise in correlation signals an unusual event, that caused the dip.
Python3
data[ 'Product A' ].rolling( 6 ).corr(data[ 'Product B' ]) # formatting the output k = 1 for i, j in enumerate (data[ 'Product A' ].rolling( 6 ).corr(data[ 'Product B' ])): if (i > = 5 and i < 12 ): print (f'The correlation in sales during months\ {k} through {i + 1 } is {j}') i = 0 k + = 1 |
Output:
Now’s let us try the same for 3-month correlation as shown below,
Example 3:
Python3
data[ 'Product A' ].rolling( 3 ).corr(data[ 'Product B' ]) # formatting the output k = 1 for i, j in enumerate (data[ 'Product A' ].rolling( 3 ).corr(data[ 'Product B' ])): if (i > = 3 and i < 12 ): print ( f'The correlation in sales during months {k} \ through {i + 1 } is {j}') i = 0 k + = 1 |
Output: