首页 > 解决方案 > 以有效的方式计算一百万对的相关性

问题描述

我如何在合理的时间内计算两个产品价格的两个时间序列的相关性?我有一套产品长度为 8485。可能的组合大约是 3600 万对。每个产品都是一个带有时间戳索引(以天为单位)和价格值的熊猫系列。数据时间约为1年。

比如某产品的数据是这样的:

            price
2020-01-01  200  
2020-01-02  250
...         ...
2021-02-01  600  

我将数据保存在具有产品 id 的元组中:

products = tuple((id_products, series_products)) = ((111, series_product_111), (222, series_product_222), ...)
len(products) = 8485

我需要在嵌套循环中对每种产品的价格进行最大互相关(我使用 pandas shift 函数来交叉数据,使用 pandas corr 函数来计算相关性)。为此,我创建了一个包含所有可能的索引组合 (35M) 的列表,称为 list_products。

list_products= [(i,j) for i in range(len(products)) for j in range(len(products)) if i<j]

另一方面,时间序列有不同的大小,所以为了计算相同时间长度的相关性,我创建了一个名为 -subset_datatime- 的函数

correlation = list()
for i,j in list_products:
    series_1, series_2 = subset_datatime(products[i][1], products[j][1])
    
    correlation.append([ series1.corr(series2.shift(t)) for t in range(-10,10)], 
                         products[i][0],
                         products[j][0]))

不幸的是,这在我的计算机上最多可能需要 3 天。有没有更有效的方法来实现它?

标签: pythonpandastime-seriescorrelationcoding-efficiency

解决方案


推荐阅读