【问题标题】:Extract recommendations for user from pivot table从数据透视表中提取用户推荐
【发布时间】:2020-03-05 21:26:43
【问题描述】:

我有一个如下数据透视表,其中包含用户/商品的购买数量,如下所示:

originalName  Red t-shirt      Black t-shirt  ...     Orange sweater     Pink sweater
customer                                ...                                       
165                NaN             NaN  ...                  NaN               NaN
265                NaN             1.0  ...                  NaN               NaN
288                NaN             NaN  ...                  NaN               NaN
368                1.0             NaN  ...                  NaN               2.0
396                NaN             NaN  ...                  3.0               NaN

如果我输入一个项目,我编写了通过使用皮尔逊相关性获取相关项目的方法

def get_related_items(name, M, num):
    number_of_orders = []
    for title in M.columns:
        if title == name:
            continue
        cor = pearson(M[name], M[title])
        if np.isnan(cor):
            continue
        else:
            number_of_orders.append((title, cor))

    number_of_orders.sort(key=lambda tup: tup[1], reverse=True)
    return number_of_orders[:num]

我不确定为特定客户获取推荐商品列表的逻辑应该是什么。

我该如何评估呢?

谢谢!

【问题讨论】:

  • 你想得到什么?最适合特定客户的商品?
  • @sygneto 是的,这就是我想要得到的

标签: pandas dataframe recommendation-engine


【解决方案1】:
import pandas as pd
import numpy as np
df=pd.DataFrame({'customer':[165,265,288,268,296],
                'R_shirt':[np.nan,1.0,np.nan,1.0,np.nan],
                'B_shirt':[np.nan,np.nan,2.0,np.nan,np.nan],
                'X_shirt':[5.0,np.nan,2.0,np.nan,np.nan],
                'Y_shirt':[3.0,np.nan,2.0,3.0,np.nan]
                 })
print(df)
   customer  R_shirt  B_shirt  X_shirt  Y_shirt
0       165      NaN      NaN      5.0      3.0
1       265      1.0      NaN      NaN      NaN
2       288      NaN      2.0      2.0      2.0
3       268      1.0      NaN      NaN      3.0
4       296      NaN      NaN      NaN      NaN
df['customer']=df['customer'].astype(str)
df=df.pivot_table(columns='customer')
customer = '165'
print(df)
customer  165  265  268  288
B_shirt   NaN  NaN  NaN  2.0
R_shirt   NaN  1.0  1.0  NaN
X_shirt   5.0  NaN  NaN  2.0
Y_shirt   3.0  NaN  3.0  2.0
best_for_customer=df[customer][df[customer]!=np.nan].to_frame().sort_values(by=customer,ascending=False).dropna()
print(best_for_customer)
         165
X_shirt  5.0
Y_shirt  3.0

变量customer 是您要检查的客户名称

【讨论】:

  • 这看起来只是在获取客户已经购买的所有商品?我的目标是根据与其他客户的相似度输出客户感兴趣的商品
【解决方案2】:

用户对给定项目的预期评分将是​​其他用户对该项目的评分的加权平均值,其中权重将是您计算的 Pearson 系数。然后您可以选择期望评分最高的项目并推荐它。

【讨论】:

  • 你能用一些代码示例来解释一下吗?我发现我可以重新排列这个枢轴,所以我使用M1 = df.pivot_table(index=['originalName'], columns=['customer'], values='number_of_orders')
  • en.wikipedia.org/wiki/Collaborative_filtering查看基于内存的方法
猜你喜欢
  • 2021-02-20
  • 2017-07-07
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多