推荐算法对淘宝卖家数据分析的应用

推荐系统,顾名思义就是卖家对买家的个性化推荐。因为电子商务的买家都藏在电脑屏幕的后面,卖家无法对浏览的买家进行针对性的导购,而推荐系统就像是电子商务的导购员,对店铺内的买家进行针对性的推荐。
1.解释几个大家对推荐算法可能有几个误区(我开始时有的)
误区1:推荐系统需要强大的产品知识库支持
         非也,推荐系统在实现方法上有两大分类,一种为基于内容的过滤推荐技术(需要产品特征库的支持)另一种为协同过滤推荐技术(不需要产品特征库支持)。
  基于内容的过滤(Content-based filtering approach)是信息检索领域的重要研究内容。Wiki(维基百科)通过相关特征的属性来定义项目或对象,系统基于用户评价对象的特征学习用户的兴趣,依据用户资料与待预测项目的匹配程度进行推荐,努力向客户推荐与其以前喜欢的产品相似的产品。如新闻组过滤系统News Weeder。
  基于内容过滤的系统其优点是简单、有效。其缺点是特征提取的能力有限,过分细化,纯基于内容的推荐系统不能为客户发现新的感兴趣的资源,只能发现和客户已有兴趣相似的资源。这种方法通常被限制在容易分析内容的商品的推荐,而对于一些较难提取出内容的商品,如音乐CD、电影等就不能产生满意的推荐效果。
  协同过滤推荐技术(Collaborative filtering approach)是目前研究最多、应用最广的电子商务推荐技术。它是基于邻居用户的资料得到对目标用户的推荐,推荐的个性化程度高。利用用户的访问信息,通过用户群的相似性进行产品推荐,不依赖于内容仅依赖于用户之间的相互推荐,避免了内容过滤的不足,保证信息推荐的质量。
协同过滤技术尤其适合应用在文化产品上,例如推荐音乐,电影等。但是协同过滤技术也同样存在着很多局限性:如冷启动问题,如果一个用户没有对任何项目进行过评价,自然不存在评分矩阵,也不能得到推荐;可扩展性问题,面对日益增多的用户,数据量的急剧增加,算法的扩展性问题(即适应系统规模不断扩大的问题)成为制约推荐系统实施的重要因素。
 
误区2:对新增用户进行实时推荐很困难
         淘宝上的商品大部分没有标准的商品属性和商品特征,即使有spu的商品类目(如化妆品等),spu的覆盖率也只到60%左右。所以基于淘宝现有数据的推荐技术应该以协同推荐技术为主,内容推荐技术为辅。
         而协同推荐通常的实现方法是先通过买家的行为对买家进行聚类,找到购物兴趣相似的买家。然后再把购物兴趣相似的买家所喜爱的商品推荐给目标买家。这样推荐的优点是:1.适用于分析难以获得内容属性的资源。2.给用户新奇的推荐,提高每笔转换的交叉销售。
  但这种推荐算法有自身的局限性,首先是冷启动问题,例如:对于一个网上书店来说,新上架的书因为还没有被相当数量的用户购买或者评价的记录,便很少有机会被用户的“最近邻居”筛 选进入推荐集。其次计算用户的相似度时,要将目标用户的历史行为记录与其他每一个用户的记录相比较得出的,所以对于一个现实的推荐系统来说,实时性和扩展 性都存在很大的问题。设想一下,对于一个拥有上百万用户的网站来说,每计算一个用户都将涉及到上百万次的比较,更不要说其中会带来的大量数据库I/O操作的开销。
  为了解决基于用户推荐算法中的问题,第二代基于内容项(Item-based)的协同过滤技术就产生了。与基于用户的技术不同的是,这种方法比较的是内容项与内容项之间的相似度。试想对于一个网店而言,每天的浏览新客可以达到几万(ps大部分店铺90%左右的uv都是新客),而每天新增的宝贝数最多也不会超过1000,所以基于内容项的协同过滤技术,就解决了推新增用户实时推荐困难的问题。
 
2.推荐技术对于卖家应用的思考
         啰嗦了这么多,现在要进入正题了,推荐技术的卖家能有怎样的应用呢?
  推荐系统的本质是买家对宝贝购买的潜在价值的评估。换一个角度来看就可以转化为卖家对买家潜在购买价值的评估,应用于买家的分层与卖家对宝贝潜在价值的评估,应用于对宝贝的筛选。最后的产出的推荐结果,可以应用于卖家对买家的针对性营销和买家的店内浏览路径优化。
2.1买家潜在购买价值
  协同推荐技术要实现有效的推荐必须首先获得买家对每个宝贝的兴趣程度。兴趣程度量化后就是对宝贝的评分。但淘宝的数据体系中没有买家对宝贝的直接评分数据(ps:宝贝与描述相符的评分区分度很低)。所以需要将买家对宝贝的行为转化成对宝贝的评分。这个转化的过程可以通过业务赋值,机器学习不断优化的方式获得。
  知道买家对已购买宝贝的评分后,通过推荐技术,预测出他对未购买宝贝的评分。评分高的宝贝越多、价值越高就预示着买家对店铺能够创造的潜在价值越高。量子可以通过产品帮卖家筛选出这些潜在价值高的买家,好让卖家进行临门一脚的主动营销,从而提升成交额。
2.2宝贝潜在销售价值
         和买家潜在价值同样的原理,通过对买家行为的预测,只要积累相对小的多的行为数据的基础上,就可以对卖家新上架没多久的宝贝进行潜在销售数量的预测,预测的结果可以成为帮助卖家进行爆款筛选的工具。
         之前卖家对爆款宝贝的筛选多带有盲目性,以自己的主观为判断依据,稍好的卖家会把几款候选成为爆款的宝贝放在首页的位置上,看每款的自然成交情况。但这样 的方法,一是测试周期长,二是损失了首页的展现的机会成本。所以量子如果可以帮助卖家在宝贝上新后相对短的时间内,给出宝贝筛选的建议将会对卖家有很大的 帮助。
2.3 买家针对性营销工具
         推荐技术的最终产出结果是对买家个性化的推荐宝贝。
  现在卖家做老客户营销的大有人在,但针对性的营销内容大都千篇一律。以至于大部分的营销邮件或旺旺通知都被当成垃圾信息处理,打开率和打开后的点击率非常 的低。但如果针对每个买家的偏好进行针对性的推荐(如在邮件中针对性的推荐上新宝贝),那针对性营销的成功率就会大大提高。客户满意度,回头率也会相应提 升。
2.4 买家店内浏览路径优化
         最后的应用场景来自于量子成为旺铺的前台模块。成为了前台模块就以为着量子可以通过卖家和买家直接的接触。
         想的稍微远一点,如果通过推荐技术可以得到每个买家对宝贝的偏好,并且能根据买家的行为实时的修正对买家偏好的判断,那每个买家所看到的旺铺都将是他的专属旺铺,每个条浏览的路径也可以做到定制话。这样店铺的转化率将大大的提升。
3.slope one算法的hive实现
         最后是推荐技术的实施部分,产品的同学可以忽略,仓库的同学们感兴趣的可以参考^-^。
  Slope one属于现在最适合淘宝数据环境的基于内容项的协同推荐算法。具体原理如下:
用户 对宝贝A的打分 对宝贝B的打分
x 3 4
y 2 4
z 4 ?
   
用户Z对宝贝B的打分可能是多少呢?股票上有个说法是平均值可以掩盖一切异常波动,所以股票上的各个技术指标收拾不同时间段的平均值的曲线图或者柱状图等。同样的,Slope one算法也认为:平均值也可以代替某两个未知个体之间的打分差异,宝贝A对宝贝B的平均很差是:((3 - 4) + (2 - 4)) / 2 = -1.5,也就是说人们对宝贝B的打分一般比宝贝A的打分要高1.5,于是Slope one算法就猜测Z对宝贝B的打分是4 + 1.5 = 5.5
是不是非常的简单?
加权算法
有n个人对宝贝A和宝贝B打分了,R(A->B)表示这n个人对A和对B打分的平均差(A-B),有m个人对宝贝B和宝贝C打分了,R(B->C)表示这m个人对B和对C打分的平均差(B-C),注意都是平均差而不是平方差,现在某个用户对A的打分是ra,对C的打分是rc,那么A对B的打分可能是:
rb = (n * (ra - R(A->B)) + m * (rb + R(B->C)))/(m+n)
实现代码如下:
(1)构建买家商品兴趣评分数据集:存储 的买家行为兴趣矩阵。
主要代码为:
 create table user_auction
(
 auction_id string,
 user_id string,
 rating bigint
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '9'
LINES TERMINATED BY '\n'
STORED AS textfile
LOCATION '/group/tbdev/hert/user_auction'
/
insert overwrite table user_auction
select t.auction_id,
t.user_id,
sum(t.repeat)+sum(t.collect)+sum(t.alipay)+sum(t.back) as rating
from
(
   select 
   cast(auction_id as string) as auction_id,
   cast(user_id as string) as  user_id,
   cast(1 as bigint) as repeat,
   cast(0 as bigint) as collect,
   cast(0 as bigint) as alipay,
   cast(0 as bigint) as back
   from  user_auction_pv_h
   where
   dt>='20110402'
   and visittype='item'
   and dt<='20110430'
   and is_repeat=1 and seller_id='43004176'
   union all      
    select
    a.it_item_num_id as auction_id,
    a.inf_user_id as user_id,
    cast(0 as bigint) as repeat,
    cast(3 as bigint) as collect,
    cast(0 as bigint) as alipay,
    cast(0 as bigint) as back
    from
   (select 
   cast(inf_user_id as string) as inf_user_id,
    cast(it_item_num_id as string) as it_item_num_id    
   from  collect_item_info_d
   where it_item_type ='1' and pt=20110330 ) a
   join
   (select      cast(user_id as string) as user_id,
                 cast(auction_id as string) as auction_id
                 from r_auction_auctions
   where pt=20110511000000 and user_id='43004176') b
   on (a.it_item_num_id=b.auction_id)
   union all
   select
   e.auction_id as auction_id,
   e.winner_id as user_id,
   cast(0 as bigint) as repeat,
   cast(0 as bigint) as collect,
   cast(case when e.num=1 then 5 else 0 end as bigint) as alipay ,
   cast(case when e.num>1 then 25 else 0 end as bigint) as back
   from
   (
      select d.auction_id, d.winner_id, sum(d.fee) as fee, count(d.auction_id) as num
      from
      ( select cast(winner_id as string) as winner_id ,pt,cast(auction_id as string) as auction_id,
      sum(total_fee) as fee from alipay_details
      where ( pt>='20110301000000' and pt<='20110330000000' and  seller_id='43004176')
      group by winner_id,auction_id,pt) d
   group by d.winner_id,d.auction_id ) e
) t group by t.auction_id, t.user_id
 
 
建立数据集:
auction_id1为目标商品ID,auction_id2为参考商品ID,Freg为置信区间权重,diff为平均评分差。
create table freq_diff ( 
    auction_id1 string, 
    auction_id2 string, 
    freq     double, 
    diff     double 
)
ROW FORMAT DELIMITED
 FIELDS TERMINATED BY '9'
 LINES TERMINATED BY '\n'
 STORED AS textfile
 LOCATION '/group/tbdev/hert/freq_diff'; 
主要代码:
insert overwrite table freq_diff 
select 
u1.auction_id, u2.auction_id, count(1), sum(u1.rating - u2.rating)/count(1) 
from 
user_auction u1  
join  
user_auction u2 ON u1.user_id = u2.user_id  
where u1.auction_id > u2.auction_id 
group by u1.auction_id, u2.auction_id;
(3)构建买家行为数据集,这个是预测结果的输入量。相对不同买家进行预测,只需在买predict数据集中,更换买家id即可。
建立数据集:
create table predict( 
  auction_id string, 
  rate float) 
ROW FORMAT DELIMITED
 FIELDS TERMINATED BY '9'
 LINES TERMINATED BY '\n'
 STORED AS textfile
 LOCATION '/group/tbdev/hert/predict'; 
主要代码:
insert overwrite table predict 
select auction_id, rating from user_auction where user_id=10468;
 


建立数据集:
create table result( 
    auction_id STRING, 
    rate     DOUBLE 
)
ROW FORMAT DELIMITED
 FIELDS TERMINATED BY '9'
 LINES TERMINATED BY '\n'
 STORED AS textfile
 LOCATION '/group/tbdev/hert/result'; 
 
主要代码:
insert overwrite table result
select
    auction_id1  as auction_id, 
    sum(freq*(diff + rate))/sum(freq)  as rate 
from 
    predict p  
JOIN freq_diff fd ON fd.auction_id2 = p.auction_id 
GROUP BY auction_id1 ;


------来源: http://blog.sina.com.cn/s/blog_6f73683d0100rtjz.html
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值