推荐系统简介

推荐系统解决的问题:
对于信息消费者:从大量信息中提取自己感兴趣的信息
对于信息生产者:让自己生产的信息脱颖而出

推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。其和搜索引擎是互补关系,搜索引擎满足主动查找,推荐系统被动查找

推荐系统组成:前台展示+后台日志系统+推荐算法系统

亚马逊的推荐系统为最佳,最大优势
We have 6.2 million customers, we should have 6.2 million stores. There should be the optimum store for each and every customer.

个性化推荐成功的条件:
一是存在信息过载,若能容易找到信息则推荐系统就显得多余
二是用户大部分时候没有特别明确的需求,否则通过搜索引擎就可以

社交网络的推荐系统:
一是利用用户的社交网络信息对用户进行个性化的物品推荐
二是信息流的会话推荐
三是给用户推荐好友

Facebook最宝贵的数据有两个:社交网络关系,用户偏好信息(有API)

投放广告技术:
上下文广告:分析用户正在浏览的网页内容,投放和网页内容相关的广告
搜索广告:判断用户的搜索目的,投放和用户目的相关的广告
个性化展示广告:兴趣展示

广告投放人群:
国家:所有地区、按省、城市
人数统计:年龄、性别
兴趣:手机标准等等
(提供网站用户的详细统计)

预测准确度是推荐系统领域的重要指标(没有之一)
但是好的推荐西永不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不容易发现的东西。

所以指标包括准确度、覆盖度、新颖度、惊喜度、信任度、透明度等

推荐系统试验方法:
①离线实验:
步骤:
通过日至系统获得用户行为数据,并按照一定格式生成一个标准的数据集
将数据及按照一定的规则分恒训练集和测试集
在训练集上训练用户兴趣模型,在测试集上预测
通过事先定义的离线指标测评算法在测试集上的测试结果
缺点:
和商业指标存在差距,无法计算商业上关心的指标
②用户调查
不能大规模实验、很难做到双盲实验
③在线实验
在完成离线实验和必要的用户调查后,可以将推荐系统上线做AB测试,通过一定的规则将用户分成几组,并对不同组的用户采用不同的算法,然后统计不同组用户的各种不同评测指标http://www.abtests.com/

测评指标:
①用户满意度:
只能通过用户调查、在线实验获得
调查问卷、点击率、停留时间、转化率等
②预测准确度:
评分预测:RMSE、MAE
TopN推荐:预测准确率 = 准确率 / 召回率
③覆盖率:
推荐物品占总物品集合的比例(消除马太效应)
④多样性
用户80%看A,20%看B,则推荐列表中8个推荐A,2个推荐B
⑤新颖性和惊喜性区别
新颖性:越不受关注可能越有新颖性
惊喜性:和用户历史兴趣不相似但却让用户觉得满意
⑥健壮性
防止注入式攻击

提高推荐系统的信任度:
①增加推荐系统的透明度,即提供推荐解释
②考虑用户的社将网络信息,利用用户的好友信息给用户做推荐

利用用户行为数据

协同过滤算法:用户不断和网站互动,是自己的推荐列表能够不断过滤掉自己不感兴趣的物品
行为包括:网页浏览、购买、点击、评分和评论等

用户行为的统一表示:

  • User id 用户的唯一标识
  • Item id 行为对象的唯一标识
  • Behavior type 行为种类,购买浏览等
  • Context 行为上下文,时间地点等
  • Behavior weight 行为权重
  • Brhavior content 行为内容

基于邻域的方法:
基于用户的协同过滤算法:
推荐和他兴趣相似的其他用户喜欢的物品
基于物品的协同过滤算法:
推荐和他之前喜欢的物品相似的物品

基于邻域的算法:
①基于用户的协同过滤:
(1)找到和目标用户兴趣相似的用户集合
(2)找到这个集合中的用户喜欢的。且目标用户没有听说过的物品推荐给目标用户

步骤一关键就是计算两个用户兴趣相似度,给定用户u , v,令N(u)表示u曾经有过正反馈的物品集合,令N(v)为v曾有过正反馈物品集合,通过Jaccard公式计算相似度:

W = |N(u)∩N(v)| / |N(u)∪N(v)|

用户相似度改进:

W = [ ∑i∈N(u)∩N(v) 1 / ㏒(1+| N(i) | )] / sqrt(| N(u) || N(v) |)

改进的User-IIF算法:

def UserSimilarity(train):
    # build inverse table for item_users
    item_users = dict()
    for u, items in train.items():
        for i in items.keys():
            if i not in item_users:
                item_users[i] = set()
            item_users[i].add(u)

    #calculate co-rated items between UserSimilarity
    C = dict()
    N = dict()
    for i, users in item_users.items():
        for u in users:
            N(u) += 1
            for v in users:
                if u == v:
                    continue
                C[u][v] += 1 / math.log(1 + len(users))

    #calculate finial similarity matrix W
    W = dict()
    for u, related_users in C.items():
        for v, cuv in related_users.items():
            W[u][v] = cuv / math.sqrt(N[u] * N[v])
    return W

②基于物品的协同过滤算法:ItemCF-IUF
基于用户的算法会随着用户数量的增加计算困难,而物品则不会
即通过计算用户行为记录计算物品之间的相似度

算法步骤:
(1)计算物品之间的相似度
(2)根据物品的相似度和用户的历史行为给用户生成列表

def itemSimilarity(train):
    #calculate co=rated users between itemSimilarity
    C = dict()
    N = dict()
    for u, items in train.items():
        for i in users:
            N[i] += 1
            for j in users:
                if i == j:
                    continue
                C[i][j] += 1 / math.log(1 + len(items) * 1.0)

    #calculate finial similarity matrix W
    W = dict()
    for i, related_items in C.items():
        for j, cij in related_items.items():
            W[u][v] = cij / math.sqrt(N[i] * N[j])
    return W

物品相似度归一化:

Wij’ = wij / max(j) wij

可以提高推荐的多样性

UserCF更加社会化,用于新闻等更新较快的网站中
ItemCF更加个性化。用于图书,电子商务,电影网站等用户兴趣持久的网站中,用户个性化需求强烈

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值