推荐系统的时间训练测试拆分

数据挖掘 机器学习 训练 推荐系统 矩阵分解
2022-03-12 03:05:38

在评估协同过滤推荐系统时,按时间分割数据是可行的。但是,通过这样做,一些用户可能只出现在训练集或测试集中。例如,考虑以下示例:

user  year
0     2020
0     2020
0     2021
1     2021
1     2021
1     2021
2     2020
2     2021
2     2021

如果我们决定按年份划分,以便 2020 年之后的评级将在测试集中,那么:

Train           
user  year
0     2020
0     2020
2     2020

Test
user  year
0     2021
1     2021
1     2021
1     2021
2     2021
2     2021

这意味着用户 1 根本不会在训练集中。当使用矩阵分解/潜在模型时,由于用户 1 不在训练集中,当我们将潜在因子UV相乘得到预测评分矩阵时,用户 1 根本不会在其中,因此我们不会能够预测用户 1 的评分。这也适用于项目,尽管此处未显示。

如何处理?是否只是简单地从测试集中删除不在训练集中的用户?这不会导致大量数据浪费吗?

1个回答

我之前所做的,以及在我的领域(零售)中运作良好的,是首先了解您的用户/评分频率的分布。更具体地说,假设您想要一个包含 10% 观察结果的测试集,然后计算出阈值 (n),如果您将所有用户与至少 n 次交互以及他们最近的交互,那么您最终会得到具有 10% 的数据点。

在您的情况下,可能有一部分用户至少有 5 次交互(评分),然后采用这些用户完成的最新交互,并将其用作您的测试集(使用多于或少于 5 次来更改测试集的大小)。这样,您的测试集中不存在不属于您的训练集的用户,尽管交互很少的用户不会在测试集中表示。这种训练/测试偏差也可能造成问题,但我发现无法为这些用户提供建议会造成更大的问题。