微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以有效的方式计算一百万对的相关性

如何解决以有效的方式计算一百万对的相关性

如何在合理的时间内计算两个产品价格的两个时间序列的相关性? 我有一组产品长度为 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 函数计算相关性)。为此,我创建了一个列表,其中包含名为 list_products 的所有可能的索引组合 (35M)。

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 天时间。有没有更有效的方法来实现它?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。