加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 03:53:05 所属栏目:大数据 来源:网络整理
导读:推荐系统,顾名思义就是卖家对买家的个性化推荐。因为电子商务的买家都藏在电脑屏幕的后面,卖家无法对浏览的买家进行针对性的导购,而推荐系统就像是电子商务的导购员,对店铺内的买家进行针对性的推荐。 1.解释几个大家对推荐算法可能有几个误区(我开始时
推荐系统,顾名思义就是卖家对买家的个性化推荐。因为电子商务的买家都藏在电脑屏幕的后面,卖家无法对浏览的买家进行针对性的导购,而推荐系统就像是电子商务的导购员,对店铺内的买家进行针对性的推荐。 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(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读