今天跟大家唠唠我最近实战的一个项目,标题就叫《稍逊》,为啥叫这名儿?看完你就知道了,有点一言难尽。
事情是这样的,前段时间接了个小私活,帮一个做电商的朋友搞个商品推荐系统。 他那边数据量不大,几万个商品,用户量也不算多,所以想着整个简单点的,快速上线。 我寻思着,这还不简单? 之前也做过类似的,直接抄起家伙就开干。
第一步,当然是数据准备。 从朋友那儿把商品数据和用户行为数据扒拉下来,商品数据包括商品的基本信息,比如名称、价格、类目啥的,用户行为数据就是用户的点击、购买、收藏等等。 先用pandas把数据清洗一遍,把那些脏数据、缺失值啥的都给处理掉,这一步花了点时间,毕竟数据质量不高,各种奇葩的都有。
第二步,特征工程。 我这边的想法是,既然数据量不大,就别搞那些复杂的模型了,直接用简单的协同过滤。 就提取了一些简单的特征,比如:
- 用户购买过的商品类目
- 用户浏览过的商品价格区间
- 商品被点击的次数
- 商品被购买的次数
这些特征提取完,用one-hot编码处理一下,变成数值型的,方便模型计算。
第三步,模型训练。 用的最简单的基于用户的协同过滤算法。 计算用户之间的相似度,然后找到和目标用户最相似的N个用户,把这N个用户购买过的商品推荐给目标用户。 相似度计算用的余弦相似度,简单粗暴。 模型训练过程也没啥好说的,直接调包,sklearn一把梭。
第四步,模型评估。 这一步就有点尴尬了。 评估指标用的常用的召回率和准确率。 结果? 只能说差强人意。 召回率还可以,但是准确率就有点低了,推荐出来的商品,用户不太感兴趣。 我仔细分析了一下原因,主要还是特征太简单了,没法准确捕捉用户的兴趣。
第五步,模型优化。 为了提高准确率,我尝试了一些方法:
- 增加特征:比如商品的标签、描述等等,希望能更细致地描述商品
- 调整相似度计算方法:尝试了其他的相似度计算方法,比如皮尔逊相关系数
- 调整推荐数量:减少推荐商品的数量,希望能提高推荐的质量
但是,效果都不太明显。 准确率提升了一点点,但是还是达不到朋友的要求。 我有点郁闷了,按理说,协同过滤应该还可以,怎么效果这么差?
上线。 虽然效果不太但是时间也差不多了,只能先上线看看效果。 结果,正如我预料的那样,用户反馈一般。 有用户说推荐的商品不感兴趣,也有用户说推荐的商品重复。 我有点灰心了,这回实战,只能用“稍逊”来形容。 虽然完成了任务,但是效果离预期差太远了。
总结一下这回的教训:
- 数据质量很重要:好的数据是模型的基础,数据质量不高,再好的模型也白搭。
- 特征工程是关键:特征工程决定了模型的上限,好的特征可以提升模型的性能。
- 模型选择要合适:根据数据量和业务场景选择合适的模型,不是越复杂的模型越
思考
这回实战虽然不太成功,但也让我学到了很多。 以后再做类似的项目,一定要更加重视数据质量和特征工程。 还有,要多学习一些新的推荐算法,不能总是用老一套。 革命尚未成功,同志仍需努力!
还没有评论,来说两句吧...