4月4日决定利用晚上的时间学推荐算法,以阿里巴巴的大数据推荐算法竞赛为驱动边学边用。
自己是这方面的菜鸟,没打算能进入season 2,只打算借这个比赛熟悉几个推荐算法,时间有限,所以策略是专攻基础推荐算法-协同过滤,这也就成为我学习推荐算法的入门算法。
竞赛的目的:
1)最关键的是,结合具体的题目用高强度的训练、学习来巩固、提高所学知识,同时积累经验
2)找几个朋友组成团队干出一点成绩,并结交志同道合的朋友
3)分析规则、利用规则也有乐趣
Item-CF
协同过滤算法分为UserCF和ItemCF(ICF),前者是基于用户的,后者是基于物品的,后者更适合电商的推荐系统,因为电商的用户多,商品少,计算量小,且推荐理由值得信赖。
我对普通ItemCF做了如下优化:1)相似度的计算利用倒排表,大大降低计算量。2)用户对物品的喜好程度有公式计算,行为类别和时间都会影响喜好程度,而不是1。3)推荐的个数不是固定,而是根据购买力即土豪系数确定的。
但是ICF为什么不适合这个比赛,因为关于商品的信息太少了,相似性只能靠共同行为用户数来计算。
但为什么靠共同行为就不靠谱呢?原因可能是:1)有共同行为的用户有什么特征并不明了,所以用户购买该物品的动机不明确,没办法判断是偶然还是说这个用户群体都有此物品的需求。2)算法只是简单地将4个行为同等看待,点击就等价于购买,明显与实际不符合。
将ICF得到的结果提交之后发现4000多个只命中19个,说明这种规则并不适用于官方给的数据。那反方向想,能得到什么结论呢?用户新购买的产品和已购买产品的相似性(按照ICF计算的相似性)不高。新购买的产品还有其他特征码?该如何利用这些特征?
在4月11日尝试了另一种算法,Slope One,利用物品间被用户喜好偏差的均值来对当前用户没有过行为的物品进行喜好估计,程序很简单,但是效果出奇的差,可能是以下几个原因:1)这种方法计算每个用户对喜好偏差的贡献时假设每个用户都是一样的,但这并不合理,用户之间的购买动机、喜好可能差异很大 2)矩阵太稀疏了,计算出来的偏差没什么可信度。
Logistic
logistic的关键:特征和样本
特征:
4.15~5.15的点击量 4.15~5.15的购买量
5.15~6.15的点击量 5.15~6.15的购买量
6.15~7.15的点击量 6.15~7.15的购买量(如果有这两个特征,那么该模型只是去拟合6.15~7.15的行为,而没法预测7.15~8.15)
样本:
正样本:6.15~7.15的购买行为([用户,品牌],在之前有过行为)
负样本:6.15~7.15有行为但没有购买的(在之前有过行为)
测试集:
7.15~8.15的购买行为数据
希望:利用特征值与经过logistic学习到的系数相乘,再用sigmoid函数映射到与测试集分类相近的值
实际:利用特征值与经过logistic学习到的系数相乘,得到的是与正样本相近的值
正样本对于测试集的购买行为有借鉴意义,这个算法才会生效
按上面那样做的假设是,6.15~7.15的购买行为对于测试集的购买行为有很大的借鉴意义
对于这个比赛,算法是关键,但还是可以利用其他用户行为规则加分,如:
用户可能会周期性买某些商品,而如果非此类商品,那么购买了就不会再买
用户可能会买热销商品
用户放在收藏夹和购物车里的商品很可能会在近期购买
如果某段时间用户对某个商品行为很多的话,就可能购买
最后一周购买力旺盛的人应该多推荐,一直都是土豪的人也要多推荐一些
总的特征:
土豪系数、物品热度、近3天的四个行为、近一周的四个行为、近半月的四个行为、近半个月的有行为天数、近一月的两个行为、近三个月的两个行为、
还有一些小点子:
可以清洗一些在4,5月份出现的只有少量行为的商品
最终购买中有20%是有行为的
很多人用logistic regression(lr)