【问题标题】:how to find similar users based on items purchsed如何根据购买的商品找到相似的用户
【发布时间】:2018-07-26 02:11:51
【问题描述】:

我有用户和用户购买的产品,用户给的产品似乎没有评分。吹的是样本数据

数据:

user    products
A   111, 333, 444
B   333, 444, 555
C   555, 111, 333
D   222,333, 333,333
E   111,333,444,555
F   222,555,111

我们可以根据以上数据找到相似的客户吗?我正在尝试使用 1 来购买产品,如果不是如下所示,则使用 0。

    111 222 333 444 555
A   1   0   1   1   0
B   0   0   1   1   1
C   1   0   1   0   1
D   0   1   1   0   0
E   1   0   1   1   1
F   1   1   0   0   1

使用上面的矩阵,我如何找到相似的客户。期待以下格式的输出。

user Id     similar customers
A   E, B, C
B   E, A, F
C   A, E
E   A, B, C
F   B, D

【问题讨论】:

    标签: machine-learning recommendation-engine svd cosine-similarity recommender-systems


    【解决方案1】:
    from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
    from sklearn.metrics.pairwise import cosine_similarity
    
    df = df.set_index('user')
    
    cvect = CountVectorizer()
    
    cs = pd.DataFrame(cosine_similarity(cvect.fit_transform(df['products'])),
                      columns=df.index, index=df.index)
    
    np.fill_diagonal(cs.values, 0)
    
    threshold = 0.66
    
    df['similar'] = cs[cs > threshold].apply(lambda row: row.dropna().index.tolist(), axis=1)
    

    结果:

    In [300]: df
    Out[300]:
                  products       similar
    user
    A        111, 333, 444     [B, C, E]
    B        333, 444, 555     [A, C, E]
    C        555, 111, 333  [A, B, E, F]
    D     222,333, 333,333            []
    E      111,333,444,555     [A, B, C]
    F          222,555,111           [C]
    

    【讨论】:

    • 我已经这样做了...我想根据以上数据找到类似的客户
    • @pylearner,请提供可重现的样本数据集和您想要的数据集
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2019-01-12
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多