前段时间阿里巴巴组织了一个大数据的竞赛,全国高校积极响应,报名者、参与者、提交者众多,最好成绩也一直在刷新当中。初赛选出 Top500 进入复赛,其他人就炮灰了。

虽然是搞图像的,但念在未来图像不太好就业,而大数据是现在及未来的热门,正巧在修习一门《数据挖掘》课程,就把阿里这个题目作为大作业的题目了。

###题目介绍

题目大意是这样的:

给定 4.15-7.15 这四个月的用户数据作为训练数据,大概18万条。然后预测下一个月哪些用户会购买哪些品牌。数据提交到阿里的竞赛平台,阿里会给出准确率、召回率和 F1值。

数据的说明如图:

准确率、召回率就不解释了,大多数预测性的实验都以此作为评价指标。阿里用这两个值计算一个综合的评价指标 F1 作为排名依据。

###思路

从这个题目,可以直观地想到我们机器学习中的Supervised Learning。另外,这是一个推荐问题,由此可以联系到亚马逊、Netflix 的推荐系统,想到 SVD等用户关联和协同过滤方法。此外,还可以发现一些经验规则,比如周期性、重复购买性等等。

协同过滤,一个非常直观的方法是用二部图得到推荐系数,同学用这个来做,效果不错。

我开始用的逻辑回归,但效果不好。现在想想,方法没问题,问题出在了特征的处理和最后推荐结果的选择上。

现在使用的是感知器,由于阿里初赛已经结束,无法提交结果以测试实验效果,只能把有限的本地数据分割成训练集和测试集来做。目前取得的 F1 为 4.3% 。虽然还很低,但至少证明思路是对的。

感知器属于线性分类器,也可以理解为最简单的神经网络。它非常直观,通过训练集,训练出每个特征对应的权值。

具体就不介绍了,可以参考 wikipedia。

###程序

程序代码用 Python 完成。如果去掉注释行、没有使用的函数,总共100行左右。使用了第三方包sklearn

代码已经上传到Github,欢迎讨论和给出建议。代码中做了注释,就不再多做解释了。

Comments