一:
推荐系统任务:联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产中的双赢。
长尾理论:传统80/20(%80销售额来自于20%热门商品)原则在互联网加入下受到挑战。长尾商品销售额是个不容小觑的数字,也许会超过热门商品带来的销售额。热门商品代表绝大多数用户需求,而长尾商品代表一小部分用户个性化需求。因此要发掘长尾以提高销售,就必须充分研究用户兴趣。
社会化推荐:通过社交关系来获得推荐。
基于内容的推荐:例如通过演员获取电影。
基于协同过滤:通过排行榜。
个性化推荐成功两个条件:①存在信息过载②用户大部分时候没有特别明确的需求。
推荐系统评测:什么是好的推荐系统?一个推荐系统一般有三个参与方:用户,物品提供者,提供推荐系统的网址。首先推荐系统要满足用户需求,给用户推荐他们感兴趣的物品;其次推荐系统要让各个物品能够被推荐给感兴趣的用户,而不是只推荐几个热门的物品;推荐系统本身能够收集高质量的用户反馈,不断完善推荐质量。因此评测一个推荐系统,需要同时考虑三方利益,一个好的推荐系统能够令三方共赢。
推荐系统实验方法:
1离线方法:从实际系统日志中提取数据,划分训练集测试集训练模型。
优点:不需要有对实际系统控制权,不需要用户参与,速度快,可测试大量算法
缺点:无法计算商业上关心指标。离线实验指标和商业指标存在差距。
2:用户调查:即直接询问用户。优点:可用获取很多体现用户主观感受指标,缺点招募用户代价较大很难组织大规模测试用户,因此测试结果统计意义不大。
3:在线实验:推荐系统上线做AB测试,将它和旧的算法进行比较。(用户分组,不同组采用不同算法).
优点:公平获取不同算法实际在线时性能指标包括商业上关注指标。
缺点:周期长,必须进行长期的实验才能得到比较靠谱的结果。
评测标准:
1.用户满意度
用户调查或者在线实验获得。
2.预测准确度
在离线数据集,划分训练集和测试集,通过在训练集上建立用户行为和兴趣模型,预测用户在测试集上行为,并计算预测行为和测试集上实际行为重合度作为预测准确度。
①:评分预测:一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算
RMSE:
MAE:
import math
def RMSE(records):
return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records]))/float(len(records))
def MAE(records):
return sum([math.fabs(rui-pui) for u,i,rui,pui in records])/float(len(records))
②:TopN推荐:网站提供推荐服务时,一般是给用户一个个性化的推荐列表,这个推荐叫做TopN推荐。预测准确度通过准确率和召回率度量。 令R(u)是根据用户在训练集上的行为给用户做出推荐列表,而T(u)是用户在测试集上的行为列表。 召回率定义:
准确率定义为:
T(u)是实际的行为列表,R(u)是预测的行为列表。
def PrecisionRecall(test,N):
hit=0
n_recall=0
n_precision=0
'''
test.items():user,items测试集中对应用户和对该用户的实际行为列表
rank是该用户预测的行为列表。
'''
for user,items in test.items():
rank=Recommend(user,N)
hit+=len(rank&items)
n_recall+=len(items)
n_precision+=N
return [hit/(1.0*n_recall),hit/(1.0*n_precision)]
3:覆盖率
描述一个推荐系统对物品长尾的发掘能力;定义为推荐系统能推荐出来的物品占总物品集合的比例。
但上面定义过于粗略。覆盖率为100%的推荐系统可以有无数的物品流行度分布。为了更好的发掘长尾能力,需要统计推荐列表中不同物品出现次数的分布。因此可以通过研究物品在推荐列表中出现次数分布描述发掘长尾的能力。有两个指标可以用来定义覆盖率。 ①:信息熵: 这里p(i)表示物品i流行度除以所有物品流行度之和。
②:基尼系数(Gini Index):