目录
概
讨论了推荐中一个奇怪的现象.
实验设置
- 对数据集进行 leave-one-out 的分割, 得到 train/test sets;
- 将整个数据集按照年份分成 10 份, 然后某个年份上测试, 该年份包括该年前的数据作为训练集. 比如, Y6, 表示将 Y1-Y6 且在之前 train set 中的数据作为训练集, 而将 Y6 且在 test set 中的作为测试. 这么做保证了测试集的时间尽可能保持在一个比较小的时间段内, 从而尽量避免数据的泄露.
- 作者在 Y6, Y8, Y10 上进行了测试, 不过文中仅报告了 Y10 (因为结论是差不多的).
- 然后本文会将用户分为 loyal user 和 non-loyal user, 然后判断这两种 user 类型的结果.
实验
Interaction-based Loyalty
-
利用训练中每个用户的交互数量作为指标, 对 user 进行降序排列, 排在前 50% 的称为 loyal users, 否则为 non-loyal users.
-
在不同的数据集上, 结果如下:
- 有趣的是, 大部分情况下, non-loyal users 的结果都会比 loyal users 的结果好, 这个是反直觉的, 因为 loyal users 有更多的交互理应获得更容易建模兴趣.
Active Time Period based Loyalty
-
利用训练中每个用户的交互时间跨度作为指标, 对 user 进行降序排列, 排在前 50% 的称为 loyal users, 否则为 non-loyal users.
-
在不同的数据集上, 结果如下:
- 结论是大致相同的, 但是对于 SASRec, TiSASRec 等序列模型, 结果会改善很多, loyal users, non-loyal users 的结果几乎是差不多了.
Recency
-
作者认为, 得出上面反直觉的结论, 是因为真正的影响因素是: 无论是交互多的用户还是跨度大的用户, 他们大抵都会有很多 '过时' 的交互, 从而导致上面的结论.
-
所以, 作者又根据 recency 来区分, 即根据用户的最后一个交互 (测试) 和 他倒数第二个交互的时间间隔进行升序排序, 然后以 \(50^{th}\) percentile 作为阈值, 之前的作为 active users, 之后的作为 inactive users.
-
结果如下:
-
可以发现, 此时 active users 的结果就明显优于 inactive users 了. 这一定程度上反映了作者的猜想.
-
据此, 作者建议我们应该跟关注那些最近的交互而不是一视同仁.
代码
[official]
标签:Enjoy,Do,non,Recommender,users,loyal,user,Time,交互 From: https://www.cnblogs.com/MTandHJ/p/18172121