# 大 数据 之 电 商 推荐 系统 #
Arquitectura del sistema de proyectos
Recopilación de datos
- Datos de productos básicos
ID de producto | nombre del producto | Tipos de bienes | URL de la imagen del producto | Etiqueta de producto |
---|---|---|---|---|
ID del Producto | nombre | categorias | URL de la imagen | etiquetas |
- Datos de puntuación
ID de usuario | ID de producto | Calificación de productos básicos | Tiempo de puntuación |
---|---|---|---|
uid | ID del Producto | puntaje | marca de tiempo |
Diseño de estructura de mesa
Análisis estadístico sin conexión
-
Recomendación histórica de productos calientes: el producto con las calificaciones más históricas
SQL: select product_id, count(product_id) as count from ratings group by product_id order by count desc 存储表:rate_more_product 字段:product_id rate_count
-
Productos populares recientes: cuente los productos que los usuarios han calificado con más frecuencia en el último mes.
原则: 先创建一个UDF 将评分时间转换为yyyyMM形式的 SimpleDateFormat 时间格式化 然后对时间进行分组统计 存储表:rate_more_recently_product 字段:product_id rate_count yearmonth
-
Estadísticas de calificación promedio de productos básicos
select product_id,avg(score) as avg_score from ratings group by product_idorder by avg_score desc 存储表:rate_avg_product 字段: product_id avg_score
ALS de recomendación personalizada sin conexión
1. 使用ALS模型对评分数据进行训练
val model = ALS.train(data, rank, iterations, lambda)
搞出最优模型
2. 用户userRDD 与 商品productRDD 做笛卡尔积 求出 userId,productId的RDD
3. model.predict() 预测出一个评分矩阵
4. 以userId groupByKey 以 score 排序后 取TopN
注: 此处附加求出 商品的相似度矩阵
1. model.productFeatures 求出商品的特征向量矩阵
2. 笛卡儿积求出II矩阵 求余玄相似度
3. 过滤出相似度大于0.6的 进行groupByKey
Recomendación en tiempo real
特点:
1. 计算速度快
2. 预测结果可以不是特别精确
3. 预先算出商品相似度,有预先准备好的预测模型
原理:
1. 用户最近一段时间的口味应该是相似的
误区:
1. 评分了一个物品 即做相似推荐 --- 单个物品不能反映该用户的喜好
2. 做了差评 --- 推荐毫无意义
正确姿势:
拿出最近一段时间的用户评分数据 综合考虑评分分值和相似度
diseño de algoritmo:
举例:用户最近的K次评分数据为
ID de usuario | ID de producto | puntaje |
---|---|---|
u1 | A | 5 |
u1 | B | 4 |
u1 | C | 4 |
u1 | D | 2 |
对于商品X的推荐优先级得分公式:
最终得分 = (sim(X,A) * 5 + sim(X,B) * 4 + sim(X,C) * 4 + sim(X,D) * 2) / 4 + lgmax{incount,1} - lgmax{recount,1}
其中,incount为K次评分中大于3分的次数
recount为K次评分中小于3分的次数
注:此处即为 高分多 加奖励 低分多 做惩罚
Otras formas de recomendación fuera de línea
1. 内容推荐 TF-IDF
商品Tags 分词得到特征向量 进行相似度 求解
注: 喜欢了该物品的用户 应该也喜欢 下面这些
您有可能也喜欢下面这些物品
注: 一般在 商品详情页 商品购买页 做推荐
2. 被相似的人喜欢的物品推荐
即 喜欢的人重合度越高 相似度越高
“同现相似度”
同时购买了 两个物品的 的人 的个数
除以
购买两个物品的总人数的