为pyspark ALS隐式推荐准备产品购买数据



我正在尝试构建一个产品推荐器。我使用的是pyspark-ml推荐的ALS矩阵分解模型。我有类似下面示例数据的数据,其中我有客户和产品id以及客户购买产品的次数(prch_cnt(。我正试着训练这个模型以获得隐含的偏好。我想知道的是,在将prch_cnt提供给模型之前,我是否需要对其进行规范化。因此,例如,下面cutomer_id=5和product_id=1的prch_cnt应该是prch_cnt=3/(3+1+1(,还是prch_cnt=3就可以了?我的理解是,对于评级等显性数据,每个产品的值范围通常是固定的(比如1到5颗星(,否则你必须将其标准化。我想知道是否也需要固定的可能值范围或匹配的量表?

数据:

+------------+--------+-------------------+
|customer_id |prch_cnt|product_id         |
+------------+--------+-------------------+
|5           |3.0     |1                  |
|5           |1.0     |2                  |
|5           |1.0     |2                  |
|7           |10.0    |1                  |
|7           |1.0     |2                  |
|9           |150.0   |2                  |
+------------+--------+-------------------+

代码:

from pyspark.ml.recommendation import ALS

als = ALS(implicitPrefs=True,
nonnegative = True,
userCol="customer_id",
itemCol="product_id",
ratingCol="prch_cnt",
coldStartStrategy="drop")
model = als.fit(training)

# top 5 customer recs
userRecs = model.recommendForAllUsers(5)

如果评级列中没有固定值(显式或隐式(,您将以相同的方式获得预测值。

示例:

最初我的评分是0,1,2,3,所以我得到了预测值(-1.686,2.,3.(最大3

但后来我改变了我的评分值,包括了5分和10分,所以现在我的预测值达到了6

-------+------+-----------+
|movieId|userId| prediction|
+-------+------+-----------+
|     29|     3|    6.34046|
|     94|     3|  4.3311176|
|     26|     3|  3.6043417|
|      2|     3|  3.0270371|
|     46|     3|  2.3173037|
|      0|     3|  2.3090997|
|     86|     3|  1.1750394|
|     56|     3|  1.1681526|
|     76|     3|  0.6635845|
|     79|     3| 0.17606063|
|     14|     3| -0.2127747|
|     91|     3|  -0.587868|
|     66|     3|-0.72813153|
|     37|     3| -1.1676543|
|     70|     3|   -1.21106|
|     52|     3| -1.3105489|
|      8|     3| -1.6253037|
|      7|     3| -1.7214308|
+-------+------+-----------+

我希望它能消除你的疑虑。

最新更新