之前看过的一本《pratical recommender systems》的读书笔记,这本书讲了很多网上看不到的,很实际的工程方面的考虑,规则为主,算法为辅。现在网上铺天盖地都是高大上的排序模型,这些都是大公司打出知名度的东西,实际中有几个用到的?推荐成立之初就是规则,现在的算法工程师大多都太飘了,满口的算法模型,各种模型架构的优化,忘记了最初对业务规则的理解,脚踏实地,一直是老板对我说过的最多的话。个人理解,不喜勿喷。

回顾正题,这一章主要讲了如何衡量用户对商品的喜好程度,类似item-cf,ALS,MF这类算法,大多都是要构建这种数据集的,这篇文章讲得很好,作为第一篇整理出来。

推荐系统中最常见的数据就是user-item-rating的打分数据。这里的rating可以是像豆瓣那样的显示反馈(用户手打的分数),也可以是隐式反馈,即根据用户历史行为定义的分数(淘宝的点击收藏加购行为),后者更为常见。

书中的例子定义了三种行为事件event,点击details,点击more details,购买。并且为每种行为定义一个权重,即反映用户对商品的感兴趣程度。

如果将用户购买当做最终的目标,那么隐式反馈的打分函数可以定义如下:


当然,并不是所有的权重都是正的。如果一个行为在有转化的session中发生的次数多于没有转化的session, 那么就可以给一个正的权重。 点击“不喜欢”的按钮,这类权重就是负的,而且权重可以很大。

考虑几个case:

  1. 是否要设置上限?当一个行为发生超过一定的次数,那他还应该加上同样的权重么?比如,看了五次和看了十次的喜好程度会差一倍么?当然不会。所以要对每个行为加上一个cut-off,公式中的#event变为min(#eventn,relevant_maxn)
  2. 当用户看了很多次但还没有转化(导致购买),假如浏览一次的权重是1分,购买是10分,那么看了10次但是没买,那么能说明这个商品和发生购买的商品喜好程度一样么?文中没有详细说明解决办法,在个人实践中,是将商品是否转化打上标签,最后把发生转化的商品总分乘上一个较小的权重,整体提高分数。
  3. 过去的行为和最近的行为对当前的兴趣点反映的程度一样么?很容易理解,要引入时间衰减机制。这也是实际中用的最多的技巧。书中使用一个简单的分数对每个event做时间衰减,这个式子对每一天的衰减水平都是一样的。实际中,大多是用指数衰减来做的,越远的行为衰减的越快,即对原始的分乘上一个指数系数:

exp(-α * days)

其中α是冷却因子,越大y的值变化就越明显;days则是想要衰减的天数。

4、大多数人都会买香蕉,很少人会买榴莲,那么一个人买了榴莲和一个人买了香蕉,哪个更能表现这个人对这个item的喜好?很显然,小众的需求包含更多的信息,这和信息论不谋而合。文中推荐的做法是,可以在计算的商品得分基础上加一个filter,提高那些比较特别的item得分。可以通过类似“term frequency–inverse document frequency(TF-IDF)”方法来找到哪些item是比较special的。如果相同的用户喜欢某些小众的item,那么这个item更能体现用户的个人品味。

TF-IDF很好理解,这是一种统计方法,主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来做文章的标签,区分不同文章。相似的,定义IUF(inverse user frequency):


其中n是所有买过item i的用户数,N是所有的用户数。为什么用log函数呢?因为log函数能够放大变量较小的区域,变量值越大,增长的越缓慢。

放书中的两张图,上图是log函数图像,下图是IUF的图像:


<img src="https://pic3.zhimg.com/v2-e2f5ef32e4976e11b3bdb39fef4d3352_b.jpg" data-caption="" data-size="normal" data-rawwidth="584" data-rawheight="440" class="origin_image zh-lightbox-thumb" width="584" data-original="https://pic3.zhimg.com/v2-e2f5ef32e4976e11b3bdb39fef4d3352_r.jpg"/>

自然的,很少人买了这个item,那么对商品得分的加权会很高,反之很少。

最终的隐式反馈打分的形式为:

>

本书这一章到这里就结尾了,但还有很多实际的case以及可以优化的地方没有讲到。很显然,这里没有对人做个性化的处理,如果我这个人非常偏执,一个东西最少就要浏览5次,这5次相当于别人的2次,那我对商品的打分就明显高于其他人,这时就要考虑做人的归一化。欢迎补充不同的case,以及实际当中的trick。

当然了,最能提高算法性能的并不是说你把所有的case都考虑到,而是一定要做好数据的清洗和训练数据的定义,这才是提高算法性能的王道,本人是深有体会,写了一个超复杂的打分策略,结果没有把原始数据清理好,人家一个简单的策略就把我完爆…

《推荐系统实战》读书笔记——在隐式反馈系统中如何给商品打分相关推荐

  1. Spring4实战读书笔记

    Spring4实战读书笔记 首先,我们需要明白,为什么我们需要引入Spring,也就是说Spring的好处.个人觉得主要是在于两方面解耦和对bean的管理. 第一部分:Spring核心 共分为四个章节 ...

  2. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...

  3. 推荐系统实践读书笔记-08评分预测问题

    推荐系统实践读书笔记-08评分预测问题 本书到目前为止都是在讨论TopN推荐,即给定一个用户,如何给他生成一个长度为N的推荐列表,使该推荐列表能够尽量满足用户的兴趣和需求.本书之所以如此重视TopN推 ...

  4. 推荐系统实践读书笔记-02利用用户行为数据

    推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...

  5. Apache Kafka实战读书笔记(推荐指数:☆☆☆☆☆)

    Apache Kafka实战读书笔记(推荐指数:☆☆☆☆☆) 认识AK 快速入门 安装和启动 小案例 消息引擎系统 消息引擎范型 AK的概要设计 吞吐量/延时 消息持久化 负载均衡和故障转移: 伸缩性 ...

  6. Go语言实战读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> Go语言实战读书笔记 第二章 通道(channel).映射(map)和切片(slice)是引用类型.引用类型的对象需要使用ma ...

  7. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  8. 机器学习实战---读书笔记: 第11章 使用Apriori算法进行关联分析---2---从频繁项集中挖掘关联规则

    #!/usr/bin/env python # encoding: utf-8''' <<机器学习实战>> 读书笔记 第11章 使用Apriori算法进行关联分析---从频繁项 ...

  9. 推荐系统实践读书笔记-01好的推荐系统

    推荐系统实践读书笔记-01好的推荐系统 在研究如何设计推荐系统前,了解什么是好的推荐系统至关重要.只有了解了优秀推荐系统的特征,我们才能在设计推荐系统时根据实际情况进行取舍.本章分3个步骤来回答这个问 ...

最新文章

  1. js、PHP将分数字符串转换为小数
  2. 360p4虚拟服务器,360安全路由p4c常见的问题以及解决方法介绍
  3. android 访问公共文件夹权限_手机应用获取了储存权限后,可以访问你整个文件吗?...
  4. Sentinel限流规则
  5. 目前8岁女儿上的课程
  6. 嵌入式系统Linux内核开发学习指导框图
  7. Flink 生态:Pulsar Connector 机制剖析
  8. linux多线程编程介绍
  9. 神经网络加速器设计研究:寒武纪DaDianNao论文阅读
  10. 【网络信息安全】电子邮件安全
  11. 什么叫特立独行,其实不过是活在自己的节奏里
  12. Navicat 15.0.27 激活时弹出No All Pattern Found File Already Patched?(已解决)
  13. 苹果手机换电池对手机有影响吗_你知道你的手机电池多久换一次吗?
  14. python培训骗局
  15. worldpress 添加网站关键词和描述
  16. LightOJ1197 Help Hanzo(欧拉筛+区间素数)
  17. 《2022中国RPA采购指南》报告正式发布
  18. JS中click事件
  19. OSChina 周三乱弹 ——美女 你钱掉了
  20. PMON学习记录3:PMON启动流程

热门文章

  1. 喜迎国庆中秋,双节快乐!
  2. 域渗透基础_域渗透实战下gpo策略利用
  3. 无法将maven 编译部署src/main/java下的资源文件
  4. 如何在ASP.Net Core中使用辅助服务
  5. 解决Mac苹果电脑没有声音,喇叭会显示为灰色禁用状态
  6. 计算机视觉中的数学方法——1平面射影几何——1射影平面+2二次曲线
  7. 基于飞凌i.MX6Q-C核心板搭建3D相机
  8. 品牌机Windows10重置功能WinRE失效处理方法
  9. 【供应链案例】屈臣氏是如何优化供应链系统的
  10. -- 27、 查询出只有两门课程的全部学生的学号和姓名(不重点)(自己做出)