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

【设计一款基于内容的推荐系统的简单思路】简单记录一下推荐系统设计的思路,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

    推荐阅读