- 统计所有历史数据中每个商品的评分数,得:RateMoreProducts 数据结构:productId,count
select productId, count(productId) as count from ratings group by productId order by count desc
- 统计每月的商品评分个数,就代表了商品近期的热门度,得:ratingOfMonth、RateMoreRecentlyProducts
select productId, score, changeDate(timestamp) as yearmonth from ratings
select productId, count(productId) as count ,yearmonth from ratingOfMonth group by yearmonth, productId order by yearmonth desc,count desc
changDate :UDF函数,使用 SimpleDateFormat 对 Date 进行格式转化,转化格式为“yyyyMM”
RateMoreRecentlyProducts 数据结构:productId,count,yearmonth
- AverageProducts 数据结构:productId,avg
select productId, avg(score) as avg from ratings group by productId order by avg desc
- 均方根误差(RMSE):均方误差的算术平方根,预测值与真实值之间的误差
- 参数调整 可以通过均方根误差,来多次调整参数值,选择RMSE最小的一组参数值:rank,iterations,lambda
- 怎样找到商品 A 的相似商品?—— 与A有相同标签的商品,喜欢A的人同样喜欢的商品
- 根据 UGC (用户给商品打的标签)的特征提取 —— 利用TF-IDF算法从商品内容标签中提取特征
- 基于商品的用户标签信息,用TF-IDF算法提取特征向量
- 计算特征向量的余弦相似度,从而得到商品的相似列表
- 在实际应用中,一般会在商品详情页、或商品购买页将相似商品推荐出来
- 怎样找到商品 A 的相似商品?—— 与A有相同标签的商品,喜欢A的人同样喜欢的商品
- 根据行为数据的相似度计算—— Item-CF:根据行为数据,找到喜欢了商品A的用户,同时喜欢了哪些商品,喜欢的人重合度越高相似度就越大
- 基于物品的协同过滤(Item-CF),只需通过埋点收集用户的常规行为数据(比如点击、收藏、购买)就可以得到商品间的相似度,在实际项目中应用很广
- 比如:A商品详情页中的推荐:购买了A商品的用户也购买了以下商品…
- “同现相似度”—— 利用行为数据计算不同商品间的相似度
其中:- N i N_i Ni 是购买商品 i i i (或对商品 i i i 评分)的用户列表, N j N_j Nj 是购买商品 j j j 的用户列表
- N i ∩ N j N_i ∩ N_j Ni∩Nj 表示同时购买了商品 i i i 与商品 j j j 的用户总数、 ∣ N i ∣ ∣ N j ∣ sqrt{|N_i||N_j|} ∣Ni∣∣Nj∣ 是对热门商品的惩罚项
- 计算速度要快
- 结果可以不是特别精确
- 有预先设计好的推荐模型
- 基于自定义模型
- 推荐优先级计算基本原理:用户最近一段时间的口味是相似的
- 备选商品推荐优先级:
- 备选商品 【 X , Y , Z 】 【X,Y,Z】 【X,Y,Z】是当前商品 D D D 的商品相似度列表中与商品 D D D 最相似的的前 N N N 个商品
- 备选商品
X
X
X 的推荐优先级分数为:
s i m ( A , X ) × 5 + s i m ( B , X ) × 4 + s i m ( C , X ) × 1 3 + l g 2 − l g 1 cfrac{sim(A,X)×5+sim(B,X)×4+sim(C,X)×1}{3}+lg2-lg1 3sim(A,X)×5+sim(B,X)×4+sim(C,X)×1+lg2−lg1
其中- l g 2 lg2 lg2里的 2 2 2表示用户对商品的评分大于3分的商品数量,
- l g 1 lg1 lg1里的 1 1 1表示用户对商品的评分小于3分的商品数量,
- 分界线 3 3 3分是人为设定的



