京东购物在微信等场景下的算法应用实践

本文根据京东微信手Q业务部马老师在京东\u0026amp;DataFun Talk算法架构系列活动中所分享的《京东购物在微信等场景下的算法应用实践》编辑整理而成,在未改变原意的基础上稍做修改。

此次分享的是以WQ(微信手Q)购物智能推荐系统介绍智能推荐算法在实际中的应用,介绍的WQ购物从海量服务到简单的个性服务到现在的个性化服务发展历程。他从以下四个部分进行了介绍。

首先讲解了WQ个性化推荐有哪些产品、有哪些业务;第二部分讲如何构建WQ推荐平台,如何支持这些业务需求;第三部分简单介绍了用户画像(用户画像、物料画像);最后讲解WQ大数据平台如何搭建。通过这次讲解让大家对推荐系统搭建流程有个初步了解,使大家能够在3-5天时间里通过这种开源框架搭建一个自己的小型推荐系统。

1. WQ个性化推荐

WQ个性化推荐在微信购物界面体现的方方面面,主要有关键词推荐(新用户主要通过上下文信息推荐,准确度不是很高)、素材推荐(入口图、焦点图、品牌特卖)、商品(卖场、秒杀、拼购等)资讯(趣好货、购物圈)以及其他如猜你喜欢、类目入口(由于手机屏幕大小原因,条目不能全部显示,智能通过用户兴趣选择用户感兴趣的条目)栏目馆区等,具体见下图。

\"\"

WQ这些海量个性化推荐业务主要由ABC(AI人工智能、BigData大数据、Cloud云服务)技术支持,主要解决用户体验问题,运营效率问题、业务效果问题。如金手指(热搜词+规则+推荐)的下单转化率提升为200%-400%,随着时间略有波动,热搜词采用插件式接入(加载js插件,依据你页面上下文,类目进行热搜词推荐),简单易用;智能卖场由原先运营人员和商家谈判、选品、上线,周期为两人一周构建卖场,通过ABC基于算法、基于不同规则生成不同智能卖场只需一个人员10分钟就能完成,而且程序自动维护,解决效率问题;入口图(素材)这一方面主要解决用户体验问题,使用户达到所见即所想,打造触动内心的极致体验。

\"\"

除了ABC技术提高推荐转化率,团队发现组织联动在推荐效果也有明显提升,上图是去年8月到11月的推荐效果提升,如果单纯的靠算法优化,效果只能提升30%达到50-60%就是算法极限,但是如果和产品联动效果由30%提升到90%,因此建议在做算法优化是加入产品运营联动。如在穿搭推荐中先前无论如何算法优化,转化率一直很低,最后发现是产品素材质量太差,无法引起用户兴趣。另一方面在智能卖场做数据挖掘、爬虫抓取关联商品,再进行聚类确实能够发现人的行为,但是运营能抓住用户价值点,如果在物料上加入这些价值点,能够明显提升推荐效果。

2. WQ推荐平台

\"\"

WQ推荐系统需要知道解决那些问题:

(1)首先业务需求多,原先想的是一个一个业务对接,但是关键词开发需要人员,资讯开发也需要人员,但是开发人员资源有限,开发压力大,无法应对也无需求;

(2)平台多,接入工作流量大,每个都去对接工作量大;

(3)跨公司问题,数据不是完全共享,安全性能要求高,只能系统对接,因此流量红点压力大;

(4)用户体验问题,只能向前不能倒退

(5)效果问题,增长放缓,只能从技术、算法方面来提升;

(6)用户量大,资源有限等。

\"\"

推荐系统核心是“数据”、“算法”、“系统”,有这三种推荐系统就能运行。具体工作是:首先用户会请求我们的业务系统,之后请求推荐引擎,推荐接入实现业务分流到对应的推荐平台,然后通过推荐算法、模型返回用户所需数据。除此之外还有一个数据的反向上报(行为上报),因为我们的推荐都是基于大数据,如果我们能收集用户的行为越多,对用户的行为就越准,推荐也就越精确。对用户的(点击,搜索,浏览)做DMP(大数据管理平台),让模型训练算法,其响应时间一般是限度控制在300-500毫秒。

WQ推荐系统平台架构如下所示,依据架构依据相关开源软件能够3-5天搭建一个推荐系统。首先业务层,主要是有哪些业务;其次是接入层,我们有第三方接入引擎,还要做分流,都要做A/B text;接入后要做推荐引擎,我们分为三层:为召回策略(添加条件,选择最相关)、打分排序、重排策略;引擎打分需要模型,这一块为计算层。再然后是数据层,这块主要是用户画像和物料画像以及数据分析等;最底层是基础平台,来支持我们做推荐,算法训练,我们的实时用的是Spark,离线用的是Hadoop,用CM做集成,用Sklearn/TensorFlow做离线分析,对于大账号推送用全站数据(京东大数据平台)比WQ效果要好。除此之外比较重要的一个是数据上报,最开始用的是自己研发的用C/C++实现,后来需要与业界对标,采用Flume和Kafka。集群时间是分钟级,但是用户画像是毫秒级,用户画像是基于用户行为而不是数据库。

\"\"

在平台接入时,需要简单、通用、快速、开放为目标。将业务抽象为物料,统一格式,业务只需要实现物料上报、请求服务、行为上报三步。对于算法选择前期配置就能快速上线,选择快速上线算法是热度和IOR算法。智能接入:由于平台多,通过物料、用户、平台判断哪个平台转化效率高,就将平台流量多分给推荐平台,达到整体最优,对于模型选择各自去训练,然后选择、融合。

\"\"

\"\"

接入之后就是推荐引擎,常见的有召回策略、打分策略、重排策略。召回策略如下所示,所谓个性化召回就是画像打上的那些标签,是偏向某个类目还是某个品牌偏好等做召回,关联规则前键召回是根据用户前面的行为来关联后续感兴趣的商品;打分就是和模型结合;重排也有很多算法,例如特征加权就是用户有什么偏好给他提前。重排主要是基于个人,模型是基于群体特征,重排命中也能很好提升效率,EE策略主要改善体验问题,我们发现如果一个人行为很少,进来之后什么都不点,如果模型在5-10分钟未更新,推荐的就是一直是这个,如果特别偏门,群体又比较小,模型就没有影响,个人就需要推荐一些新的东西,EE策略就是以一定概率来显示推荐而不是单纯以排名推荐,我们用的是汤姆森算法。

\"\"

接下来讲一下模型,我们的推荐模型就是解决GMV(成交)最大化、CTR * CVR最大化、CTR最大化(首页、中间页引流,最容易,点击转化率)核心是“他点的”/“他看的”。这个模型还有一个瞬息系约束,一方面就是EE策略,另一个就是某一类商品在一定时间不能超过多少,保证用户体验。在评价推荐效果方面,如果直接做到下单,其中很多因素不可控,这时考虑CTR * CVR模型,提升转化率,主要考虑物料、用户以及上下文场景。

\"\"

接下来就是机器学习过程,主要有环境搭建、收集数据、分析数据、准备数据、训练算法、测试算法、应用算法。这个过程很简单,但是我们要解决冷启动问题、假曝光问题(这个主要是产品预加载,在用户还未看数据就显示,这种就是假曝光)异常数据清洗问题(爬虫、刷单)、正负样本问题、数据稀疏问题等问题。在推荐过程中数据是基础中的基础,下面是数据处理中常用的方法。

\"\"

在算法里面对我们比较受益的是机器学习军规,做C++或前端时有雅虎军规、effective C++这些都有很规则性的东西告诉你怎么做。在机器学中有一个机器学习军规,其实在ML中首要的是工程问题,其次才是算法问题。我们把数据做好了效果也就好了,如果大神能做95分,我们做好了这些也有80分。

\"\"

而用户体验方面,一个是要准,另一个是要新。新就是EE算法,准就是位置偏见,例如冷启动时你把某一个商品放在前面,那么他的转化率一直高;这种就不能他分值高就一直在前面,这种情况就要看不同商品在此位置时的转化率,这个就是位置偏见。

\"\"

3. WQ用户画像

接下来简单介绍下用户画像,做推荐时你首先要知道用户是谁,如果你只用cookie Mapping的话效果太差,这个我们是和微信合作,我们是拿到open ID的,如果有微信场景可以参考这种方式;其次用户是什么用户,这就是用户画像;再者用户还是那个用户么(可能前一秒和下一秒不是同一个用户)因此要注意更新。画像主要解决身份问题,还有就是WQ数据和自己收集数据以及全站数据,这些数据整个融合而做的一个用户画像。

\"\"

用户画像的系统架构首先是一个内外部数据的融合,然后是做采集(分析、清洗、格式化然后做一些画像计算)这里用到很多算法,如统计算法等。

\"\"

\"\"

4. WQ大数据平台

大数据平台主要解决实时问题、系统复杂问题、业务支持(支持ML算法等)下面是系统需要的达到的目标。

\"\"

接下来讲一下大数据生态,最开始时是并行计算(最原始的那种命令行并行计算)然后就是Hadoop(MapReduce和HDFS开始也是简单UI)在Hadoop V2就有了HBase之后就是更快的Spark(Hive、Flume、Kafka),下面是整个大数据生态。

\"\"

最后讲一下大数据采集,对于我们做账务,事务型的数据不能丢,可以慢不能丢,所以可以异地多活(主要是做一个异地防或多级防的备份),这个需要看具体业务需求。

\"\"

本文来自京东微信手Q业务部马老师在 DataFun 社区的演讲,由 DataFun 编辑整理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

va_list/va_start/va_end的使用

va_list 键入以保存有关变量参数的信息 va_start 初始化变量参数列表 初始化ap以检索参数paramN后面的附加参数。 调用va_start的函数在返回之前也应调用va_end。 参数不能是引用类型,也不能是与传递没有参数的参数时产生的类型不兼容的类型。 /* va_start examp…

docker save 与 docker export 的区别

缘起 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 docker save和docker export都能导出镜像包,咋看起来区别似乎不大。本文就针对这个问题,试图搞清楚docker…

这5种员工,千万不能重用

一、道德品质存在缺陷之人不能用。 (小人不能用) 当今社会,我们在评论一个人的好坏时,首先看到的是他的道德素养。这方面界定这个人的为人本质。一个道德本质不行、差的人,我们统称为小人。小人的本质表现为&#xff…

docker:安装mysql多个

Docker 容器镜像删除 docker commit了一个镜像之后想删除旧的镜像,出现以下报错 Error response from daemon: conflict: unable to delete 6f8214d56bfc (cannot be forced) - image has dependent child images 解决思路: docker save保存容器 docker …

PS图片后期之超简易造光调色方法

技法是死的,而人是活的,说的简单一点就是我们要学会开拓一下思维,调色的方法并不是只有【可选颜色】而已。 在修片之前,我们先要学会分析,在拍摄这一组照片时我希望有一种夕阳的光穿透晒在脸庞的感觉,而左边…

onvif发送订阅规则

发送消息的主要内容: 1、初始化请求 2、填充要发送的数据 3、发送并接受返回的数据 4、解析数据 5、清理缓存 正文 1、初始化onvif请求 定义一个onvif请求req 定义一个onvif标签tag 临时资源*tmpValue 临时结果tmpresult 主机ip acHostIp[16] ip地址 acLocalAddr…

在 idea 中为类和方法自动生成注释

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 项目规范中有一项常见的要求,在类级和方法级注释里写上创建者和创建时间,在方法级注释里写上创建者和维护者&…

《PWA实战:面向下一代的Progressive Web APP》读书笔记

前言 之前自己根据网上的教程学习写了几个PWA的小Demo,觉得PWA很有意思,想要更多的了解一下PWA,所以读了这本书。这本书是MANNIN出版社出的,所以书里的代码都有非常棒的注释,因此这篇笔记不会展开讲代码,而…

2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换

为什么要使用进制数 数据在计算机中的表示&#xff0c;最终以二进制的形式存在 , 就是各种 <黑客帝国>电影中那些 0101010… 的数字 ; 我们操作计算机 , 实际 就是 使用 程序 和 软件 在 计算机上 各种读写数据, 如果我们直接操作二进制的话 , 面对这么长的数进行思考或…

如何战胜浮躁

浮躁是当下年轻人的通病&#xff0c;因为各种压力或心智不够成熟等原因&#xff0c;导致在生活工作当中经常处于一种情绪无法自如控制的状态。这种浮躁的状态不仅影响到正常的工作生活&#xff0c;长时间的话还会影响到身体健康。本篇就来分享一些如何战胜浮躁的方法&#xff0…

wireshark的使用方法(转)

https://www.cr173.com/html/20128_all.html

python脚本调用外部程序的若干种方式以及利弊

脚本执行外部程序的常用几种方式&#xff1a; # os.popen(path)# subprocess.run(cmd,shellTrue)# subprocess.check_call(cmd,shell True)# os.system(command)# win32api.ShellExecute(0, open, path, , , 0) os.popen(path) 和 os.system(command) 这两种执行的效果是差不多…

解决: Your ApplicationContext is unlikely to start due to a @ComponentScan of the default

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 用 springboot 搭一个小应用 报错&#xff1a; Your ApplicationContext is unlikely to start due to a ComponentScan of the defaul…

藏经阁计划发布一年,阿里知识引擎有哪些技术突破?

为什么80%的码农都做不了架构师&#xff1f;>>> 阿里妹导读&#xff1a;2018年4月阿里巴巴业务平台事业部——知识图谱团队联合清华大学、浙江大学、中科院自动化所、中科院软件所、苏州大学等五家机构&#xff0c;联合发布藏经阁&#xff08;知识引擎&#xff09;…

45度做人 90度做事 180度为人 360度处事

面对社会复杂的关系和瞬时而变的人情世故&#xff0c;许多人会感叹活得太累。其实&#xff0c;只要我们保持平和的心态&#xff0c;不去计较人生的成败&#xff0c;始终保持一颗感恩的心&#xff0c;同样可以活得轻松自在&#xff0c;活出人生的精彩!以度量人的处事原则&#x…

SDK 和 API 的区别是什么

SDK 就是 Software Development Kit 的缩写&#xff0c;翻译过来——软件开发工具包。这是一个覆盖面相当广泛的名词&#xff0c;可以这么说&#xff1a;辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做SDK。SDK被开发出来是为了减少程序员工作量的。比如——有公司…

解决413 Request Entity Too Large

解决413 Request Entity Too Large 修改nginx配置 这是最简单的一个做法&#xff0c;着报错原因是nginx不允许上传配置过大的文件&#xff0c;那么件把nginx的上传大小配置调高就好。1、打开nginx主配置文件nginx.conf&#xff0c;一般在/usr/local/nginx/conf/nginx.conf这个位…

解决 springboot 启动报错 -- Cannot determine embedded database driver class for database type NONE

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 问题描述 我只是新建一个全新的 springboot 工程&#xff0c;什么都没有写的情况下启动报错如题&#xff1a; Cannot determine em…

Luogu P3731 [HAOI2017]新型城市化

题目显然可以转化为求每一条边对二分图最大独立集的贡献&#xff0c;二分图最大独立集\(\)点数\(-\)最大匹配数&#xff0c;我们就有了\(50pts\)做法。 正解的做法是在原图上跑\(Tarjan\)&#xff0c;最开始我想复杂了&#xff0c;后来才意识到&#xff0c;只要存在这样一个强连…

【数据结构算法】快排/归并/堆排序 c++

一个用来了解数据结构算法&#xff08;各种排序&#xff0c;列表&#xff0c;树等&#xff09;很友好的网站&#xff1a; https://visualgo.net/en 该题目来自于牛客&#xff1a;算法篇-排序问题 快排&#xff08;必备&#xff09;归并&#xff08;体会分治&#xff09;堆(自…