推荐的核心主要是内容质量评价和推荐逻辑优化,即如何判断哪些内容是好的内容,如何将好的内容推荐给对应的用户。
内容质量评价
内容质量评价一般关注CTR、CVR、跳失率等指标即可,但在计算的过程中,需要考虑量纲、异常值、1/1问题以及权重。消除量纲影响可以通过归一化或标准化等方法处理;异常值可以通过箱线图法消除,1/1问题一般通过威尔逊方法消除,权重可以通过离散系数法或熵值法就行处理。
归一化方法
将原来的数据都变成或
,通常有以下方法进行数据变换:
-
原始值减去最小值后除以极差,结果在
:
-
原始值减去平均值后除以极差,结果在
:
-
原始值进行对数变换后除以最大值,原始值需要大于0,结果在
:
-
原始值除以最大值,原始值需要大于0,结果在
:
以上方法能够减小指标的标准差,但容易受到异常值影响,我一般选择第4种方法进行处理。
异常值处理
异常值是数据中的相比其他值过大或过小的值,通常用原则及箱线图法来判断异常,需要注意的是用
原则判断,原始数据需要是服从正态分布的。
箱线图的异常值被定义为小于下极限或大于上极限,异常值处理时,通常令大于上极限的值等于上极限,小于下极限的值等于下极限。
威尔逊方法
有两个产品,产品A是3张赞成票,0张反对票,产品B是90张赞成票,10张反对票。请问,谁应该排在前面?
通常会认为:A的赞成率为100%高于B的赞成率90%,所以A应该比B好。但是,赞成率的可信度取决于有多少人投票,如果投票的人太少,结果的可信度就会比较低。这就好像一个人说山上有老虎,你可能不信,但100个人中有90个人说山上有老虎,你可能就信了。所以,当投票人数较低时(也就是1/1问题),要用威尔逊区间法对结果进行修正。python实现如下:
def wilson_score(pos, total, p_z=1.96):
"""
威尔逊得分计算函数
:pos: 赞成数
:total: 总数
:p_z: 正太分布的分位数,通常取1.96
"""
total = max(total,2)
pos_rat = pos * 1. / total * 1. # 正例比率
pos_rat = min(pos_rat,1)
score = (pos_rat + (np.square(p_z) / (2. * total))
- ((p_z / (2. * total)) * np.sqrt(4. * total * (1. - pos_rat) * pos_rat + np.square(p_z)))) / \
(1. + np.square(p_z) / total)
return score
权重问题
主客观权重确定
推荐逻辑优化
目前推荐逻辑一般是对全量用户安质量分降序进行推送,但会出现的问题是往往用户需要A,结果推了大量的B,导致资源的浪费及转化率低。因此,一定要做的是用户需求及偏好的判断(并不一定是精确到特别细),通常是根据用户行为打分来做,但需要考虑用户之前的行为对现在行为的影响会越来越弱,即需要做衰减处理,可以用马尔可夫链方法、移动加权法、艾宾浩斯曲线法。
另外是关联推荐,按物以类聚,人以群分的思路用协同过滤会比较方便,但如果item过多,计算过程比较慢,最好用矩阵计算,或者只精确到类目维度,如不一定非要精确到花王纸尿裤20片装关联雪花啤酒380ml装,但可以精确到纸尿裤关联啤酒(实际上,精确到花王纸尿裤20片装意义也不大,毕竟太稀疏了……)。
推荐方案评价
AB测试
网友评论