我正在尝试为电子商务构建一个模型,以预测通过在线营销渠道(例如Google购物)产生的单次点击的收入。点击目标是产品详情页面,因此我的训练数据包括产品详情,如:价格、交货时间、类别、制造商。每个历史点击都附带相应的收入。问题是超过95%的点击收入为零。
历史数据看起来像这样:
click_id | manufacturer | category | delivery_time | price | revenue
1 |man1 | cat1 | 24 | 100 | 0
2 |man1 | cat1 | 24 | 100 | 0
3 |man1 | cat1 | 24 | 100 | 0
4 |man1 | cat1 | 24 | 100 | 120
5 |man2 | cat2 | 48 | 200 | 0
如您所见,两个数据点可能具有完全相同的特征,但目标变量(收入)的值却大不相同。例如,前四个数据点具有相同的特征,只有第四个有收入。理想情况下,我的模型在测试具有相同特征的示例时,应该预测这四个点击的平均收入(即30)。
我的问题是在尝试应用模型之前关于数据表示的。我认为我有两个选择:
- 直接对点击数据应用回归(如上例),希望回归能正确处理。在这种情况下,回归误差在最后会相当大,因此很难判断模型的实际效果如何。
- 尝试将多个数据点(点击)分组为单个点以避免一些零值——将所有具有相同特征的数据点分组,并将目标(收入)变量计算为SUM(revenue)/COUNT(clicks)。采用这种方法,我仍然在收入中看到很多零(仅有少数点击的产品),有时会有成千上万的点击只提供一个数据点——这似乎不太合理。
如何处理这个问题?
回答:
由于95%的数据收入为零,您可能需要对记录进行一些处理,比如抽样。按照目前的构建方式,您的模型可以100%的时间预测“无”,仍然有95%的准确率。您需要在模型中做出关于希望有什么类型的错误的设计选择。您是希望它“尽可能准确”,即尽可能少地错过记录,还是尽可能少地错过收入记录,或者避免将实际上没有收入的记录错误地分类为有收入的记录(如果您有兴趣,可以阅读更多关于第一类和第二类错误的信息)
您可以做出几个高层次的选择:
1) 您可以对数据进行过度抽样。如果您有很多记录,并且希望确保捕捉到产生收入的特征,您可以复制这些记录,或者进行记录工程,创建与那些产生收入的记录非常相似的“假”记录。这将增加您的模型能够捕捉到驱动收入的因素的可能性,并且在应用于真实数据时会过度倾向于重视这些特征
2) 您可以使用模型来预测概率,然后调整您的概率。例如,您可以查看您的模型,并认为任何大于25%的可能性产生收入的都实际是一个“正面”案例
3) 您可以尝试首先对数据进行聚类,如您上面提到的,然后尝试在“总和”值上运行分类算法,而不是在单个记录上。
4) 是否有一些细分市场的命中率超过5%?也许可以针对这些子集构建模型。
这些都是模型设计选择,没有对错之分——这取决于您试图实现什么目标。
根据您的回应编辑回归可能会受到异常值的显著影响,所以我建议在尝试使用回归来预测美元金额时要小心。很可能您的大多数变量会有较小的系数,而截距将反映平均支出。您还应该注意交互项。例如,如果您是男性,您更有可能购买,如果您在25-30岁之间,您也更有可能购买,但同时是男性和25-30岁会有更大的影响。
我提到分类的原因是您可以尝试进行分类,看看谁可能购买,然后再应用美元金额。这种方法可以防止您对每笔交易都得到几乎相同的很小的金额。