程序可以判断用户当前的状态吗

这类问题统称为implicit feedback。在推荐系统的研究中,是一个已经被人们所关注的子课题了。推荐一篇比较著名的paper:Collaborative Filtering for Implicit Feedback Datasets你根据它引的文章和引它的文章顺藤摸瓜~====次日清晨起来觉得自己说的实在语焉不详,补充两句====你手动点喜欢/不喜欢的时候,产生了一个explicit feedback。这个explicit feedback可能会考虑到的信息有:1. 账号历史/当月/当日点赞频率(看你是否是点赞狂魔或者间歇性点赞狂魔)2. 账号注册日期(新注册的用户倾向多点赞)3. 点赞时间(有的人倾向于早起点赞)4. 歌曲播放计数5. 点赞时刻的歌曲位置etc...你没点的时候,产生了一个implicit feedback。这个implicit feedback可能会考虑到的信息有:1. 账号历史/当月/当日点赞频率2. 账号注册日期3. 当前时间4. 歌曲播放计数5. 前N首歌曲都是哪些歌etc...当然,你说的程序是否最大化最小化,也在这些feature里面如果要想枚举,你可能能列出上百个explicit/implicit feedback features。如果我们拥有无限数据和无限计算资源,那么当然把所有features都考虑进来是最好的。但是我们既没有那么多数据,也没有那么多计算资源——尤其是推荐算法需要经常更新训练模型(每隔一段时间,就把最新的explicit/implicit反馈数据加入模型——顺便说一句,这也正是为什么Netflix challenge之后,冠军算法并没有被用在实际系统里)。算法模型通常会选择一个最经济的点,选择计算上足够便宜,且效果上足够有效的feature。所以你说的这些判断最大化最小化的feature,几乎不可能由于法律等原因没有用。我猜要么大多数在线播放器已经在用这些信息了(想证实的话,需要看前端js代码,或者是上传的数据),要么是用过之后效果不理想,就不再继续使用了。但是相信我,广大feature engineer (a.k.a. big data scientist) 一定不会没有想到这一点。举个例子来说,Pandora会在一段时间之内停止播放,然后问你 are you still there——这是一个很明显的implicit feedback产生的explicit action
■网友
不请自答。这是一个推荐问题中比较基础的部分,已有两个答案其实都答到了,不过他们都在里面掺杂了很多术语,以及一些英文词汇。我来简单一点解释。用户在使用推荐系统的时候是会产生很多行为的,这些行为会作为日志被系统记录下来,记录下来的数据,叫做“用户行为数据”。这些数据会是什么数据呢,比如用户在淘宝上收藏了某个商品,比如用户在FM上喜欢了一首歌,比如用户在门户网站上点击了一个广告,等等等等。用户行为在推荐系统中一般分为两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为,代表用户做出的明确表意的反馈,喜欢了某款商品、对某个电影评了多少分、喜欢了某首音乐。这些行为明确地表达了用户对某一个事物的态度,推荐系统可以“直接”(当然了原始数据会被处理过)地去使用这些数据。显性反馈行为的数据量往往比较小(相对于隐性反馈行为的数据量而言),因为大多数的用户很少去主动地去表达对一件商品(一首歌、一个广告、一部小说、一部电影)的明确态度。而按题主的描述,就是所谓的“监控”,则是对应了隐性反馈行为,即不能明确地反应使用者态度的行为,系统收集到这些数据的时候,需要去“猜”用户的态度。在隐性反馈行为数据里面,比较常见的是网页页面浏览行为数据,比如,用户在一个页面停留的时间、用户点击一个链接的频率,等等。再扩展来看,很多东西都是用户产生的隐性行为数据,比如,用户跳过一首歌的行为、用户把选好的物品从购物车里删去的行为、用户让手机应用停留在后台的时间(是的,用户使用手机的习惯,也是可用的数据)。为什么说这些数据是隐性的,拿用户停留在页面的时间来讲,用户停留在这个页面很长的时间,有可能是他非常喜欢这个页面的内容以致于他认真花费时间看了这个页面的内容,也很有可能是他打开了这个页面就忘了关掉而已,并不能很明确地去表达用户的态度。那么系统收集到隐性反馈行为数据之后,是如何去“猜”用户的,拿FM来举例子,假定随机给用户播放了三首音乐,第一首用户点击了“喜欢”,第二首用户听了一小段然后跳过,第三首用户则点了“不喜欢”。那么系统就会去猜了,这个跳过行为,到底是什么意思呢,是喜欢还是不喜欢呢。这就是题主提到的“判别”了。我们权且说跳过这个行为表示用户“不这么喜欢”,那么用户“不这么喜欢”的程度是怎样呢?假定这个时候要再给用户推荐一首歌曲,第二首歌曲还会不会出现呢(我们假设喜欢的歌曲一定会出现,不喜欢的歌曲肯定不会出现)?最简单的方法就是加权(当然实际的系统中会使用复杂的算法,这里只是便于理解提出的一种方法),假定用户明确表示的“喜欢”权重为1,明确表示的“不喜欢”权重为0,那么用户跳过的歌曲就可以以(已播放时长/歌曲总时长)来表达用户对这首歌曲的态度。如果用户已经播放的时间特别短,可能说明用户刚听前奏已经觉得这首歌难听死了;如果用户差不多快听完了才跳过,可能说明用户只是觉得最后一点太冗长了。题主在问题的最后提到了“监控”的合法性问题。这一点我没有什么了解,就不瞎掺和了。


推荐阅读