计算隐式推荐的排序错误度量

数据挖掘 推荐系统 阿帕奇火花 评估 pyspark 公制
2022-03-02 20:23:21

我正在阅读Collaborative Filtering for Implicit Feedback Datasets在第 6 页,他们详细介绍了他们的评估策略,他们使用以下公式将其定义为平均预期百分比排名:

rank¯=u,iruitrankuiu,iruit

这与 Datacamp 定义为隐式推荐引擎的适当错误度量的公式相同,只是他们称之为“排名排序错误度量”我在 Spark 中实现系统,所以我定义了一个测试数据集来尝试一下:

test_df = spark.createDataFrame(
  [
    ("A", "Fish", 1, 1),
    ("A", "Dogs", 2, 2),
    ("A", "Cats", 3, 3),
    ("A", "Elephants", 4, 4),
    ("B", "Fish", 1, 1),
    ("B", "Dogs", 2, 2),
    ("B", "Cats", 3, 3),
    ("B", "Elephants", 4, 4)
  ], ["Customer", "Item", "ImplicitRating", "PredictedRating"]
)

rankWindow = Window.partitionBy("Customer").orderBy(desc("PredictedRating"))
test_df\
  .withColumn("RankUI", percent_rank().over(rankWindow))\
  .withColumn("RankUIxRating", col("RankUI") * col("ImplicitRating"))\
  .show()

输出是:

+--------+---------+--------------+---------------+------------------+------------------+
|Customer|     Item|ImplicitRating|PredictedRating|            RankUI|     RankUIxRating|
+--------+---------+--------------+---------------+------------------+------------------+
|       B|Elephants|             4|              4|               0.0|               0.0|
|       B|     Cats|             3|              3|0.3333333333333333|               1.0|
|       B|     Dogs|             2|              2|0.6666666666666666|1.3333333333333333|
|       B|     Fish|             1|              1|               1.0|               1.0|
|       A|Elephants|             4|              4|               0.0|               0.0|
|       A|     Cats|             3|              3|0.3333333333333333|               1.0|
|       A|     Dogs|             2|              2|0.6666666666666666|1.3333333333333333|
|       A|     Fish|             1|              1|               1.0|               1.0|
+--------+---------+--------------+---------------+------------------+------------------+

通过设置预测的“评级”以匹配隐式评级,我在这里有效地建模了一个完美的预测。我的问题是,将这些值代入上面的公式会给我...

rank¯=u,iruitrankuiu,iruit=0.0+1.0+1.33˙+1.0+0.0+1.0+1.33˙+1.04+3+2+1+4+3+2+1=6.66˙20=0.33˙

鉴于该论文明确表示的较低值更好,并且它们的值低至 ~ 8%,我很困惑如何将我在这个实验中的经验.rank¯

我究竟做错了什么?

1个回答

我发现了Datacamp的一个名为“评估隐式评级模型”的视频。它是对使用隐式评级的推荐引擎评估的解释。尽管他们通过将其称为 Rank Ordering Error Metric 来以不同的方式引用该指标,但他们给出的公式与我在我的问题中链接的论文中定义的公式相同。按照视频中的示例并插入示例中的值,我得到了与他们相同的结果。我想这似乎不太直观,但我似乎理解它是如何正常工作的。