设计一款基于内容的推荐系统的简单思路

简单记录一下推荐系统设计的思路,SQL不是最终的SQL,只是提供一种思路。关于推荐总得无非是基于用户推荐和基于推荐内容推荐这两种

一、基于用户的个性化推荐

千人千面

方法1,依据用户浏览内容属性直接推荐(《类似最直接的关键词搜索结果》)

当前用户的历史记录表

  • {运动鞋, 李宁, 价格220, 男}
  • {运动鞋, 匹克, 价格240, 男}
  • {运动鞋, 匹克, 价格200, 男}

推荐产品策略

SELECT * FROM t_goods WHERE cat_name = "运动鞋" AND 品牌 IN ("李宁","匹克") AND price BETWEEN 200 AND 240 AND gender = "男" 

方法2,分析用户行为生成标签(《你可能还喜欢》)

用户历史记录表

  • {运动鞋, 李宁, 价格220, 男}
  • {运动鞋, 匹克, 价格240, 男}
  • {运动鞋, 匹克, 价格200, 男}

1.分析用户历史为用户贴标签
用户标签

  • 男性
  • 国产爱好者
  • 中等收入人群
  • 年轻

2.查询推荐内容前,兑换成商品标签
商品标签

  • 男鞋
  • 国产牌子
  • 中等价位
  • 年轻款

推荐产品策略

SELECT * FROM t_goods_tags WHERE tags_name IN (
    男鞋,国产牌子,中等价位,年轻款,
)

方法3,找出有同样兴趣的群体(《其他用户浏览并还买了》)

用户历史记录表

  • {运动鞋, 李宁, 价格220, 男}
  • {运动鞋, 匹克, 价格240, 男}
  • {运动鞋, 匹克, 价格200, 男}

1.找出有同样浏览记录的人群

SELECT user_id FROM t_goods_history WHERE goods_id IN (
1,2,3
) 

结果:

  • 男B
  • 男C

2.找出该些用户的其他浏览记录,然后推荐出去

SELECT * FROM t_goods_history WHERE user_id IN (
    "男B","男C"
) ADN goods_id NOT IN (1,2,3)

二、基于物品内容的推荐

适用于用户首次进来无历史行为

方法1,简单依据商品的属性推荐同款

用户当前访问的商品

  • {运动鞋, 李宁, 价格220, 男}

找出同款产品的推荐产品策略

SELECT * FROM t_goods WHERE cat_name = "运动鞋" AND 品牌 IN ("李宁")  AND gender = "男" 

方法2,依据相似性推荐

用户当前访问的商品

  • {运动鞋, 匹克, 价格240, 男}

1.转换成当前商品的标签

  • 分类:运动鞋
  • 品牌档次:大众
  • 品牌类型:国产
  • 价格:中等
  • 款式:男
  • 年龄段:年轻款

2.选择数据库中中热门在售产品进行批量打分。分数越高,与该商品越相似。并把每个商品的打分结果存进t_goods_socre表
譬如:

if($goodsTags['款式']== '年轻款'){
    $score += 10;
}

if($goodsTags['上市时间'] == '跟该商品上市时间差不多几年'){
    $score += 5;
}

.....

3.推荐产品策略如下

SELECT * FROM t_goods_socre WHERE goods_id = 1 order by score desc limit 10

你可能感兴趣的:(设计一款基于内容的推荐系统的简单思路)