~ 本周作业:分析豆瓣「喜欢这本书的人也喜欢」模块,根据调研分析方法,来评估推荐策略的合理性,以及设计改进方案。
这次的作业有点难度,看起来很简单,但在实际写「需求理想态」、「调研目标」、「抽样维度」时,发现自己并没有真正理解需求和方法概念。
作业
题目
工作目标
对「豆瓣-喜欢这本书的人也喜欢」模块的推荐策略做「问题优化」的调研分析
用户需求分析
以《运营之光》为例,用户搜这本书,行为背后的动机可能是:
- 需要解决问题:如工作需要,是一个互联网 + 运营经理或产品经理,需要该书指导工作方法论
- 不需要解决问题:如个人在这个领域的兴趣、或朋友推荐等;
满足上述需求,需要以下信息对推荐策略进行输入->计算->输出:
- 用户的基本特征:
- 基本信息标签:性别、生日、定位地点等(在统计数据下预测)
- 用户行为标签:根据用户所关注的话题、其他用户、豆列等;以及对书籍的收藏、读过、喜欢等行为,计算出来的标签
- 书籍的基本特征:
- 基本信息标签:书名、作者、副标题、出版社、简介等
- 其他用户对该书产生的行为标签:评分、评价、笔记、被收藏的分类、被豆瓣成员标记的常用标签等
计算方式:
- 根据用户、书籍的基本特征,根据推荐算法对输入特征的关系进行计算(如协同推荐算法)
- 计算推荐关系后,根据「喜欢」程度进行排序并显示给用户…
定义需求理想态
- 需求说明:在用户当前搜索的书籍页面,向用户推荐他可能喜欢的书籍。
- 推荐书籍达到「用户喜欢」的标准:
- (1)推荐的书籍总数(如:10本)中,对单本的「喜欢」超过50%(>5本);
- (2)对单本「喜欢」:推荐的书籍进行点击,产生「喜欢」行为操作,包括:
- (a)加入购书单/收藏夹/想读/豆列等显式反馈,即有任意一个操作,则通过
- (b)对该推荐书籍的评分/写笔记/写评价/分享等隐式反馈,根据多个维度来计算「喜欢」程度,加权大于0.6则通过,分值越高则在推荐书籍中的排序越前。
- 对笔记详情、评价内容进行情感指数计算,分值大于0则通过(负数为负面评价、正数为喜欢,0为无感)
- 评分的分值:对本书评分 > 6分(总分10)则通过
- 计算在该推荐书籍的页面的停留时长,超过20s则通过
- 继续产生其他行为操作:如点击看别人评论并点击「有用」,
~ 上面的具体值只是一个参考,为了给出明确的、量化的评估标准
抽样的分析维度
确定调研目标→确定抽样对象→选择抽样方法→确定抽样数量→样本分析标注→整理汇总问题
(1)调研目标
要考虑覆盖率情况,所以不能只调研系统给用户推荐的所有书籍
,还有哪些是用户可能喜欢的书籍但是没有被推荐的书籍:思路如下
根据上图的思路:
调研目标:抽取当前用户可能喜欢的所有书籍
如何得出该部分数据:
- 共同搜索过某本书籍的所有用户,取每个用户对该书籍的行为片段(session),来判断是否喜欢
- 抽取「共同搜索过」该本书籍的全部用户的所有「喜欢」的书籍数据,–>分析当前书籍与被推荐书籍的标签相关度、多样性等;(统计推荐书籍在全书籍中的覆盖率)
(2)确定抽样对象
筛选规则:
核心指标未达到理想态、可以代表全体用户的行为的最小时间窗口内的全量数据。
核心指标:(这个指标怎么计算呢?)
- 指标1:预测准确度
- 指标2:分类准确度:准确率、召回率
- 指标3:覆盖率
- 指标4:丰富度/多样性
- 指标5:新鲜度/时效性
未达到理想态的不同情况
- 复杂情况:根据用户与该推荐书籍的关系,来计算上述各指标的得分,加权得出用户对被推荐书籍的「喜欢」程度值。如:
- 基于基本特征的-用户关系:两个用户的基本特征的重合,则根据特征数量和类别,对用户群体进行聚类或计算相关性;
- 基于喜欢相同书籍的-用户关系:同时喜欢了相同书籍的多个用户,根据喜欢书籍的重合数量,对进行聚类或计算相关性;
- 基于被同一用户喜欢的-书籍关系:同一用户喜欢了该书籍以外的其他书籍,根据书籍标签计算?
- 基于基本特征的-书籍关系:两本书籍的基本特征的重合,则根据特征数量和类别,对书籍进行聚类或计算相关性;
- 简单情况:根据用户对该推荐书籍的后续点击行为,计算用户的「喜欢」程度。
样本类型:(分析维度)
在该全量数据的某时间戳下,筛选用户的行为片段:
- 未点击任何「也喜欢」模块的推荐书籍的行为数据
- 点击了「也喜欢」模块的推荐书籍,但是未产生后续「喜欢」行为的数据
(3)选择抽样方法
简单随机抽样。
- 选择分类:根据豆瓣的6大分类,在每个分类下的第一个标签,选择第一本书;(6本)
- 选择热门:前12个热门分类的第一本书,去重;得出(9本)
豆瓣分类:各标签下1本,共6本。文学–小说(5094620)、流行–漫画(1243779)、文化–历史(1966282)、生活–爱情(841687) 、经管–经济学(404222)、科技–科普(546704);
热门标签:前12个热门标签下选1本,去重得出9本:日本、外国文学、文学、中国、心理学、随笔、哲学、中国文学、推理
注意:
- 抽样的数据不要找冷门书籍,也不要按照个人熟悉的偏好,因为个人偏好可能不代表大众场景,可以看热门分类、评价人数最多的书籍
- 根据产品的定位和面向的用户群体,豆瓣属于是「文艺青年」而非学术科技的社区,所以选择科研、学术类书籍不具备该群体代表性
(4)确定抽样数量
策略相对程度已经没有影响面>5%的显著问题,接下来要看影响面1~5%量级的问题:
为了使1%问题的case数量至少达到5,那抽样数量最少要500。或者在1k的量级、即代表单个问题的case在至少为10个左右,此时得到的问题影响面数据才有较高的置信度。
(5)样本分析标注
标注维度:
- 书籍属性标签:被推荐书籍属性与当前书籍属性的相关度与多样性
- 用户关联度:被推荐书籍和当前用户的属性的关联度
由于无法获取用户行为session数据与书籍关联度匹配(自己在豆瓣留下的痕迹太少),只能选择以第一条「书籍标签相似性和多样性」来分析。
数据如下:
因为时间很赶,就只摘了2本,后续有时间再继续摘来分析。
标注方式:
对书籍的豆瓣标签、豆列、作者、做出标记,计算书籍的相关程度。以及搜索用户的个性匹配相关程度。
(6)整理汇总问题
选择的分析框架是用户行为片段分析。
思考过程
不知道如何定义理想态、以及调研目标、还有如何计算相关评估指标,各种懵逼。
如何定义理想态?
也就是如何定义产品功能的理想指标?也看了下俞军的知乎回答:什么是用户体验?如何评价用户体验的好坏? - 俞军
那么,对于推荐策略来说,如何认为推荐的策略有效?–「喜欢这本书的人也喜欢」模块下给用户推荐的书籍,用户点进去产生了一系列「喜欢」的行为。
- (1)从用户行为角度来说,如何衡量用户对推荐的「喜欢」程度?
- 是以点击率作为理想态的衡量指标?
- 还是以点击后的「收藏」或「想读」的行为作为衡量指标?
如何计算覆盖率(找出被覆盖分母:)
要考虑覆盖率情况,所以不能只调研系统给用户推荐的所有书籍
,还有哪些是用户可能喜欢的书籍但是没有被推荐?根据什么标准来衡量用户推荐的成功率?–> 被当前用户点击后操作且「喜欢」?
如何找出「用户喜欢的所有书籍」作为推荐书籍的覆盖率的除数?
还是说可以直接除以所有书籍数量?感觉数学不好,脑子想不动了。还是假设了几种可能性:
- a:「搜索」过同一本书的所有用户,取他们喜欢的所有书籍的交集。
- b:「喜欢」过同一本书的 – 所有用户的 – 所有喜欢的书籍
-
c:和「搜索」过同一本书的所有基本信息相近的用户群体,所有他们喜欢的书籍
- (2)从书籍的属性角度来说,如何衡量书籍标签的相关度?用户喜欢度与书籍属性之间的关系?
- 被推荐书籍与当前搜索书籍的所有标签的计算相关度作为衡量指标?那么如果收录的标签有遗漏怎么办?
- (3)衡量指标的方式有准确率和召回率两种
- 准确率等于
用户点击的被推荐书籍的数量 / 已推荐的书籍总数量
,或用户点击书籍后再继续点击了'收藏'或'想读'的数量/推荐的书籍总数量
- 那么召回率如何计算呢?
用户点击的被推荐书籍的数量 / 所有应该被推荐的书籍(喜欢这本书的用户也同样喜欢的其他的书籍)
,如何制定分母的从所有书籍中筛选出来的规则?如:是「运营」相关所有书、还是和互联网相关所有书? - 覆盖率和召回率 是一个东西吗?我的理解:覆盖率 =
已推荐的书籍总数量/所有应该被推荐的书籍(喜欢这本书的用户也同样喜欢的其他的书籍)
- 准确率等于
……带着这些疑惑,翻看了几遍视频,后来决定放弃写作业之前,突然想到了刚买的《内容算法》,找到了一点思路。然后找了下论文,先不管怎么实现吧,反正能继续写作业就OK了。。
没法下手,直接查了资料
内容算法
在《内容算法》的「推荐算法:物以类聚,人以群分」里提到:
基于内容属性推荐的好处在于,只依赖物品本身的特征而不依赖用户的行为,让新的物品、冷僻的物品都能得到展示的机会。其存在的问题在于,推荐质量的优劣完全依赖于特征构建的完备性,但特征构建本身是一项系统的工程,存在一定成本。
如果标签词粒度不够细,不能够全面描述书的内容(比如每本书的标签词只有三个),就很难计算出置信的相似度,达不到足够好的推荐效果。
为了在推荐中更好地引入受众反馈因素,提出了基于用户行为的“协同过滤”概念。
把用户的消费行为作为特征,以此进行用户相似性或物品相似性的计算,进行信息匹配,是协同过滤(Collaborative Filtering)的基础。
协同推荐可以分为三个子类:基于物品(Item-based)的协同、基于用户(User-based)的协同和基于模型(Model-based)的协同。
- 基于用户的协同就契合了上面的例子,其基础思路分为两步:第一步,找到那些与你在某一方面口味相似的人群;第二步,将这一人群喜欢的新东西推荐给你。
- 基于物品的协同,其推荐的基础思路是:先确定你喜欢什么物品,再找到与之相似的物品推荐给你。只是物品与物品间的相似度不是从内容属性的角度衡量的,而是从用户反馈的角度衡量的。
- 基于模型的协同,是用用户的喜好信息来训练算法模型,实时预测用户可能的点击率。
协同推荐是目前应用最为广泛的推荐机制,其基于用户行为的特点使我们不需要对物品或信息进行完整的标签化分析和建模,从而实现了领域无关,可以很好地发现用户的潜在兴趣偏好。
但考虑到协同过滤的方式依赖历史数据,新的用户和新的物品会存在冷启动的问题。
相关论文
然后查了相关论文:
没来得及看,只看了基于模型的协同:
下面参考:基于深度学习的协同过滤模型研究_余冲.caj
评价指标:
winter 教练答疑
Q1:理想态 => 具体量化的衡量标准
理想态就是把我们想要达到的目标,抽象成为最直观可以量化的目标
这个是你对理想态的描述,这个想法是对的,但是缺乏量化的标准。所以其实就是比较模糊的,这样子是没有办法落实的。
用户对推荐的书籍进行点击产生了喜欢操作,这个太模糊了。
- 假设有两个用户用这个功能,一个喜欢了,一个没喜欢,那这算是达到理想态了吗?
- 再比如说,推荐的书籍我记得是有十本之多,用户对其中的五本喜欢了,另外五本没喜欢,这算是达到理想态了吗?
我当初定义的理想态是这样的:对那些有点开操作的注册用户来说,点开了所有推荐书籍的80%以上,并进行了喜欢类的操作;如果用户已经读过推荐书籍,那么用户对该书籍的评价不低于三星。
这个并不是豆瓣的实际策略,只是我个人的一个结论,你也不一定要这样定义。我想说的主要意思是,这个理想态的定义是明确的,量化的,上线之后必须有一个明确的标准来判断我们是不是达到了理想态。
统计覆盖率?
我理解的定义:
- 第一种是根据用户的反馈点击来计算;
- 第二种是根据标签的相关性和多样性等指标权值来计算;但是这两种计算是混合的还是分开算的?还是只有第一种指标呢?在真实情景中,假设这本书用户喜欢,但是没有点开呢?
教练答疑:
互联网产品往往是一个面向大多数人的选择,所以你不能只把眼光放在一个人,一本书上,而是一个比例
没有点开也有很多种情况:1、用户看过这本书;2、用户可能这时候不想点开任何一本书,他没有做“点开”的这个操作
对第二种情况我个人觉得暂时不需要纳入统计,因为可能用户这时候就是一本都不想点
主要是把你想要达到的那个目标,做出合理的量化标准来。比如说我哥们做toB的在线教育,他们的目标就是今年有X家机构用他们的产品,这就是一个可以量化的指标,达到还是没达到,一下子就能判断出来。
我:当时我们的指标是超竞品准确率!
教练:
嗯,这也是量化呀。主要就是,到底达到了还是没达到,有一个判断标准能一眼判断出来。这个才是课程想要教你的核心思想。至于说具体哪个行业怎么制定标准,那各行各业各种产品都不同,就需要你用这个思想结合你自己的经验去制定。
我:
所以,这次作业其实不用很纠结真实的理想态是否合理,先来一个具体的指标,然后再不断改或者前进增加更多的指标衡量。
教练:
是这样的,合理与否这个其实并不重要,因为你也不会恰好就是要做一个豆瓣读书推荐出来,重要的是建立起这种思想
- updated,180515(根据教练点评,迭代)
- created,180510(思考过程+论文重点摘要)