【发布时间】:2013-05-29 11:26:04
【问题描述】:
我有以下格式的客户和功能列表:
UserID, Feature1, Feature2, Feature3, Feature4
所以我有一个列表——称为“客户”——它看起来像这样:
[
['975676924', '1345207523', '-1953633084', '-2041119774', '587903155'],
['1619201613', '-1384105381', '1433106581', '1445361759', '587903155'],
['-1470352544', '-1068707556', '-1002282042', '-563691616', '587903155'],
['-1958275692', '-739953679', '69580355', '-481818422', '587903155'],
['1619201613', '-739953679', '-1002282042', '-481818422', '587903155']
]
每一行都是具有特定特征的交易。每行中的第一个元素是执行该交易的用户 ID(客户)。因此,Customers[1] 给出了第二行,Customers[1][0] 给出了该行的用户 ID (1619201613)。
用户 ID 可以在其他行(新交易)中重复,因为重复的客户将被附加到列表中。因此,例如,请注意 Customers[4][0] 提供相同的用户 ID (1619201613),但 Customers[4] 的功能与 Customers[1] 的功能不同——即,客户回来购买了不同的产品具有不同的功能。
所以这里的核心问题是:我如何有效地计算我列表中每两个不同客户之间的相似度?
我认为这个问题实际上应该分为两个不同的问题/任务:
将不同的 UserID 组合在一起。所以第一个问题是:如何有效地将单个 UserID 的所有不同特征组合在一起,例如,
Customers[1]和Customers[4]被放入一个新行(新列表?),形式如下:['1619201613', '-1384105381', '1433106581', '1445361759', '587903155', '-739953679', '-1002282042', '-481818422']通过交易发现客户的相似性。所以第二个问题是:我如何有效地评估
[0,1]中的相似函数,它告诉我两个不同的客户是否对相同的东西感兴趣?
PS。一些附加说明:
- 特征的顺序无关紧要,因为它们是经过散列的并且是唯一标识的。
- 特征的基数也无关紧要,即,我们不在乎相同的特征是否针对相同的 UserID 出现两次或三次。
- 整个事情的最终结果是能够获得一个客户网络,其中 UserID 是节点,它们之间的边由相似度得分加权。
- 我更喜欢余弦相似度或 Jaccard 索引,但对替代方案持开放态度。
- 我需要速度和可扩展性,即使这会在一定程度上牺牲一些准确性。
- 我已经彻底检查了以前的问题 - 例如,以下问题不相关:Calculating the similarity of two lists; Python Checking Multiple Lists For Similarities; How to compute the similarity between lists of features?
【问题讨论】:
-
对于一个完整的问题,您应该显示您当前的尝试
-
我无法进行第一次尝试,jamylak。我对 Python 比较陌生,我在这种情况下使用它,以便扩展到数十万用户并将它们作为网络处理(然后使用我更熟悉的 NetworkX)。
标签: python list machine-learning similarity