0%

推荐系统:非个性化推荐方法

推荐系统概述

推荐系统的分析框架

Domain:News, Information,Products, Matchmaking,Sequences(travel route)
Purposes:Build a community of users/customers around products or content
Recommendation Context:Select the right time for recommendation
Whose Opinion:Expert,Ordinary folks,People like you
Personalization Level:Non-Personalized,Demographic(user group),Personalization
Privacy and Trustworthiness:Who knows what about me(information security),Is the recommendation honest(business rule)
Interface:Input (Explicit,Implicit) ,Output (Predictions,Recommendations,Filtering)
Recommendation Algorithms:Non-Personalized Summary Statistics,Content-based Filtering,Collaborative Filtering(UUCF,IICF,Dimensionality Reduction),Hybrid

打分的两种表现形式

明确打分:Explicit Rating

Explicit Rating 一般包括以下两种打分机制:

  1. 1,2,3,4,5,even half star. 此类打分通常适用于一些长期的物品,例如美团、豆瓣、携程等
  2. vote up/down. 此类打分通常适用于一些短期的物品,例如网易新闻,知乎,StackOverflow等

Explicit Rating也面临着一些问题:

隐含打分:Implicit Rating

因为用户打分的数量往往是远远低于用户所浏览的物品的数量,而用户的浏览和行为同样也可以作为一种评价指标,隐含打分在不同的适用场景有着不同的表现形式。

  1. Click, Save, Purchase, Follow. 此类二元打分数据时最基础的隐含打分的表现形式,也是使用最为普遍的一种打分方式
  2. Dwell time on items. 此类打分通常适用于电影/音乐/文章等完整时间较长的物品

Implicit Rating同样也面临着一些问题:

非个性化推荐

非个性化推荐:Non-Personalized Recommendation

典型案例:The Story of Zagat

Zagat 是一个关于纽约市餐厅和酒店打分的网站,打分范围 $Rating={0,1,2,3}$,最后把所有的打分取平均作为该餐厅的得分,是非个性化推荐史上有名的案例。但是 Zagat 也有着很多的缺点:

Self-selection bias:我们希望采集到的样本都是随机的,所有违反随机性的行为都会产生误差(bias)。违反随机性的非常重要的来源便是所谓的Self-selection,简单来说,自选择性偏差就是指数据收集过程中因样本选择的非随机性而导致得到的结论存在偏差。在这个问题中,因为打分源自于最近的顾客,一个顾客会因为喜欢一个酒店而经常光顾,此类顾客往往也就更倾向于给这个酒店打出一个较高的分数,这就是样本自选择,显然违反了随机性,得到的结果也就会有一定的偏差。
Increased diversity of raters:用户的期望不同也就导致了打分的失衡,例如一个用户对一个经济型酒店的期望是星级酒店发服务,那他将会给这个酒店打出一个较低的分数。

阻尼平均:Damped Means

考虑如下两种物品的比较:
$Item A: {5, 5, 4, 5, 5, 5}$
$Item B: {5}$
如果把打分视为变量,则变量长度不同;如果取平均打分,$Item B$ 只有一个打分,不具备普遍性。

$$source = \frac {\sum_u r_{ui} + k\mu} {n+k} $$

其中,$k$ 是一个参数,$\mu$ 是系统中所有物品的平均分,$n$ 是此类物品的评分数,$r_{ui}$ 表示用户 $u$ 在物品 $i$ 上的打分。这个式子的直观性理解就是给打分较少的物品加上一个系统打分的均值,类似于狄利克雷平滑中的变量补齐。

置信区间:Confidence Interval

置信区间越窄,越倾向于推荐打分接近于系统平均值的物品,推荐越保守
置信区间越宽,越倾向于推荐打分偏离于系统平均值的物品,推荐越激进,在会有更好的物品被推荐的同时也有着推荐出较差物品的风险

产品关联推荐

产品关联推荐:Product Association Recommendation 是一种类似于频繁集挖掘的非个性化推荐算法,主要基于上下文感知(context-aware)。例如购买了香蕉之后,售货员可能会向你推荐苹果。

关联计算:Computing the Association

计算购买 $X$ 的人同时买了 $Y$ 的比例:
$$\frac {XandY} {X}$$
存在的问题:当 $Y$ 是一个很热门的物品时(例如香蕉、纯净水),无论 $X$ 是什么,该比例都会很大,这样就违背了多样化推荐的初衷。

因果关系:Causal Effect

$X$:购买了 $X$,$!X$:没有购买 $X$,$Y$:购买了 $Y$

最简单的计算方法:
$$P(Y|X)-P(Y|!X) \;or\; \frac {P(Y|X)} {P(Y|!X)}$$
$P(Y|X)$ 代表由 $X$ 导致 $Y$ 的概率,$P(Y|!X)$ 表示 $!X$ 导致 $Y$ 的概率,式子的值越大,说明由 $X$ 导致 $Y$ 的概率越大,即 $X$ 和 $Y$ 越相关。

修改后的计算方法:
$$ \large \frac {\frac {XandY} {X}} {\frac {!XandY} {!X}}$$

上式更关注 $X$ 和 $Y$ 的变化而导致的 $lift$ 值的提升,即将人群分成两组,买过 $X$ 和没买过 $X$,比较和 $Y$ 的关联性。

当 $X$ 是凤尾鱼酱,$Y$ 是香蕉的时候,$X$ 和 $Y$ 的相关度很小,则会有 $ \frac {\frac {95} {100}} {\frac {99905} {99900}} = 1$,而当 $X$ 是凤尾鱼酱,$Y$ 是蒜泥的时候,$X$ 和 $Y$ 的相关度较大,于是有 $ \frac {\frac {50} {100}} {\frac {450} {99900}} = 111$。所以两个物品的相关度越小,其 $lift$ 值越接近与 $1$,相关度越大,其值越大于 $1$,这也就解决了 $Y$ 是畅销产品时带来的影响。

联合概率:Association

$$\frac{P(X)\; and \; (Y)}{P(X)\;*\;P(Y)}$$

这种方法也可以理解为 $X$ 和 $Y$ 的互信息,存在的问题是无法度量 $X$ 和$Y$ 的因果关系,例如不能解决是因为买了凤尾鱼酱才买蒜泥还是因为买了蒜泥才买凤尾鱼酱的问题。

时间敏感排序

时间敏感排序:Time Sensitive Ranking 一般适用于新闻等具有时效性的物品的推荐系统,因为旧新闻是不有趣的,即使有很多好评。

Reddit的时移推荐

对投票数取 $log$ ,相当于削弱后期投票的作用,也就相当于增强实时投票的影响力。因为对一个旧新闻,如果因为一个用户点赞就把它推荐到前面肯定是不合理的。

基于内容的改进

HackNews的时移推荐

通过调节 $P$ 的值,可以使获利更高的物品更容易被推荐,这是一种商业层面上的考虑(business rule)。

参考文献:
[1] 罗平,《网络数据挖掘》,中国科学院大学2017年秋季研究生课程