没有为用户-项目协同过滤购买项目的 Dataframe 用户

Dataframe users who did not purchase item for user-item collaborative filtering

我打算使用混合用户-项目协同过滤来构建一个 Top-N 推荐系统 和 TensorFlow Keras

目前我的数据框包括|user_id|article_id|购买

购买总是 TRUE 因为数据集是用户的历史 - 文章购买

此数据集有 800,000 行和 3 列

2 个问题

  1. 我该如何处理才能让 20% purchase = true 和 80% purchase = false 来训练模型?

  2. 20%、80% true:false 比率是否适合此用例?

  1. How do I process it such that I will have 20% purchase = true and 80% purchase = false to train the model?

由于您只有 True 值,这意味着您必须生成 False 值。您所知道的唯一 False 是您的 table 中不存在的 user-item 交互。如果您已知的交互可以表示为稀疏矩阵(意思是,可能的交互的百分比较低,N_ITEMS x N_USER 存在)那么您可以这样做:

  1. 生成随机 user-item 组合
  2. 如果user-item交互存在,表示为True,则重复步骤1。
  3. 如果 user-item 互动不存在,您可以将其视为虚假互动。

现在,要完成您的 20%/80% 部分,只需定义您将从地面实况数据(真值)中获取的样本大小 N,并使用前面的步骤获取 4*N 个假值. 请记住为您的测试和评估步骤保留一些基本真实值

  1. Is a 20%, 80% true:false ratio good for this use case?

在这种情况下,由于您的地面实况数据集中只有 True 值,我认为您能做的最好的事情就是尝试不同的比率。您的真实世界数据仅包含 True 值,但您也可以生成所有 False 值。需要考虑的重要部分是,您在训练时认为 False 的某些值 在您的测试和验证数据 中可能实际上是 True 值。只是不要使用所有地面实况数据,也不要生成可能组合的重要部分。

我认为一个好的开始可以是 50/50,然后尝试 60/40 等等。使用多个指标进行评估,看看它们如何根据 True/False 值的比例发生变化(某些比例可能会更好以达到更高的真阳性率,其他比例会表现更差,等等)。最后,您必须根据对您最重要的指标 select 一种模型和一种训练程序。