京东LBS推荐算法实践

news2024/11/16 3:16:44

1、推荐LBS业务介绍

1.1 业务场景

现有的同城购业务围绕京东即时零售能力搭建了到店、到家两种业务场景。同城业务与现有业务进行互补,利用高频,时效性快的特点,可以有效提升主站复访复购频次,是零售的重要战略方向。

1.2 名词解释

LBS:基于位置的服务(Location Based Services)。

下文LBS商品代指京东小时购商品;LBS推荐代指京东基于地理位置的推荐能力,需要考虑到附近的供给和履约能力。

B2C:直接面向消费者销售产品和服务商业的零售模式。

下文B2C商品代指京东主站商品,包括自营/pop等非小时购商品;B2C推荐指主站主流推荐能力,不需要考虑当前地理位置的供给,而是面向全国用户的推荐模式。

1.3 推荐模式

主要推荐模式集中在一下四种流量场域:

1、附近-商品推feeds推荐;

2、附近-纯门店推荐;

3、附近-门店-商品列表页推荐;

4、主站核心推荐场景lbs商品混排推荐(首页为你推荐、购物车、我的京东等);

附近-商品推feeds附近-纯门店附近-门店-商品列表页首页为你推荐

2、推荐系统设计

目前主站核心场景从支持b2c商品推荐,b2c内容素材/聚合素材推荐拓展到更丰富的业务形式,支持lbs业务逻辑推荐,给用户带来更多元化的体验,同时给线下商家和运营提供了更丰富的流量渗透策略。

目前lbs商品推荐架构和b2c商品推荐架构的推荐流程紧密的耦合在一起,上线lbs商品推荐相关策略,都需要考虑到b2c推荐业务的逻辑无diff,效率低,兼容性差,迭代成本高,不利于后续优化策略的快速迭代。通过对lbs商品推荐的整体链路进行升级,与目前的b2c商品推荐链路进行解耦,提升系统的拓展性,更易维护,提高算法策略接入的效率。b2c商品和lbs商品均具备独立quota空间,推荐链路更加清晰,效果优化空间更大。

3、算法实践

3.1 概述

我们的前端展现形态分为纯商品、纯门店、门店-商品三种形态,且推荐位分布较多,为了减少人力维护成本,同时考虑到LBS推荐模式和传统电商模式的差异,以及流量场域分布和推荐展示形态的区别,我们针对LBS推荐能力进行了单独的设计,抽象出一套推荐模板可以同时解决三种推荐模式,支持跨场景复用。

首先前端请求入参用户当前的经纬度信息,推荐系统从gis系统获取当前可履约的门店信息;推荐系统根据用户个性化信息和门店-商品信息,为用户推荐感兴趣的附近门店-商品。

此时的item粒度为门店+商品粒度,为了同时保证用户对门店和商品兴趣的同时感知,区别于b2c商品的推荐模式,我们将整个系统分为两个阶段。在一阶段对用户感兴趣的门店进行推荐,在二阶段对用户的感兴趣的门店下的商品进行推荐。在两个阶段内完成门店推荐、商品推荐、门店-商品推荐三种模式,三种推荐模式可复用算子达到80+%,覆盖站点从京东主站到小程序,覆盖场景从首页-为你推荐到营销推荐位,总计覆盖核心推荐位30+。

3.2 LBS召回算法实践

3.2.1 背景概述

背景:LBS推荐是基于地理位置的推荐场景,和主站b2c推荐模式有所差异;用户对更多维度的因素敏感,如门店质量,配送距离,配送时效等等;

所以推荐系统需要在召回的时候就考虑到这些体验因素,所以我们将LBS的召回算法设计成两阶段的模式。一阶段根据用户兴趣(user-store兴趣)和门店质量(ka/销量/距离/时效)等因素召回用户感兴趣的高质量/距离近/配送快的门店。在二阶段进行商品召回用于召回用户感兴趣的商品。

同时我们面临着以下几个问题:

冷启问题:我们是新业务+新场景,新品多,新用户多,相比较成熟的b2c场景,lbs场景交互稀疏问题严重;

跨场域兴趣迁移:用户在b2c场景和lbs场景的兴趣表达往往是不一样的,不同场景的兴趣表达往往存在着一定的差异和联系,怎么精准捕捉和表达用户跨场景体现出的兴趣是新场景初期发展的重要工作;

兴趣激发周期短:lbs场景用户决策成本低,转化链路短,高转化场景下更要关注物品相关关系的表达;

我们初期也对以上几个问题进行了简单的探索,通过跨域兴趣探索和优化i2i关联关系简单的验证了我们的想法。

3.2.2 召回算法实践

1、冷启动召回

冷启动召回一般有以下几种方案:

•商圈热门:缺点是和user无关,纯热门item召回,相关性差;这里我们将全局热销/poi热销商品作为兜底召回,用于补充;

•cross domain:是一种基于不同场域(如京东b2c场景/lbs场景)共同用户的行为将不同域的用户映射到同一个向量空间,然后借助其他域的丰富行为提升本域冷启动用户的召回效果。

我们这里主要针对cross domain的方式进行了一些简单探索来优化跨场域用户的冷启体验效果。

1)潜客画像召回:根据用户在b2c场景的相关行为(诸如偏好类目是否为lbs转化优势类目)以及是否对lbs相关场景有前置行为的用户(推荐下浏览过附近/搜索内点击过小时购通栏等),来判断当前用户是否为lbs的潜在转化用户,给这些用户推荐其在b2c偏好下的高转化lbs商品;

2)跨域类目召回:通过对b2c/lbs共现商品进行挖掘,得到b2c到lbs的类目协同关系,根据用户在b2c场景下的偏好类目推荐对应的lbs类目下的商品;

3)跨域i2i召回:结合b2c/lbs的用户的跨场域行为,对lbs商品和b2c商品进行i2i关系挖掘,得到b2c sku到lbs sku的相似相关关系,使用b2c的用户行为为其推荐lbs商品;

4)间接召回:基于b2c召回结果,为用户召回相似相关的lbs商品。

2、i2i直接召回

基于用户在lbs场景的行为直接召回lbs商品,常见方法有如itemCF,swingCF等。

我们针对lbs场景高转化的特点对i2i召回进行了针对性的优化。我们对lbs场景的用户行为进行了分析,发现用户的点击行为体现了商品的相似性(同品比较等),订单行为体现了商品之间的相关关系(搭配购等),但是用户的订单行为往往非常稀疏,且考虑到lbs商品还含有地域属性,直接使用订单行为构建相关的i2i关系得到的结果非常稀疏,召回的下发占比往往比较低。

于是我们把订单的i2i关系抽象为类目-类目,产品词-产品词的的粗粒度相关关系。然后对全站lbs行为进行i2i关系挖掘,得到的结果使用粗粒度相关关系进行过滤,得到了比直接使用定订单行为构建i2i关系更丰富的结果,召回效率也比相似关系的效率更高。

3、向量化召回

i2i vs embed:i2i的相似相关关系表现的更加精准,但是覆盖率低;embed方式新颖性好,覆盖率高,但是关系表达相对不这么精准。

为了解决前文中提到的问题,对用户行为进行预处理,对异常用户和异常表现的商品先进行过滤,防止脏数据对整体数据分布造成影响,行为选取时,优先保留订单行为附近的用户行为(高质量行为),同时历史行为序列进行了session划分,保证行为的连续性和相关性,更能体现出用户决策周期内的集中兴趣,优化i-i的关联关系。

模型方面我们采用了随机游走的graph embedding建模方式,和传统方案差异不大:行为序列挖掘 -> 同构图构建 -> 带权重游走序列采样 -> skip-gram+负采样训练,得到物品的item embedding。

同时这里的用户行为序列的选取也可以参考跨域的思路,使用b2c行为进行补充,进一步解决lbs场域召回稀疏的问题。线上即可以使用i2i的方式进行召回,也可以使用u2i的方式进行召回。相比i2i直接召回,曝光占比更高,效率更高。

4、其他召回通道

还有诸如其他的根据品类兴趣和常购行为的兴趣画像召回,复购、常购召回等。

3.3 排序模型实践

排序准备方面,由于历史遗留原因,目前无论是用户在lbs场域的行为,还是lbs商品画像都有所缺失。于是第一步,我们首先对基础数据进行了维护:1)统一了全站lbs行为接入口径:通过门店pv和商详的pv埋点,捕捉全站lbs行为;2)建立了user-sku和user-store的用户画像和lbs商品画像。

排序特征方面:在复用了b2c商品的部分精排特征的基础上,构建了lbs场景的特有特征,如lbs场景用户行为序列,lbs场景商品/门店反馈特征,以及配送时效,配送费,配送距离等context类特征。

模型优化方面:引入了用户在b2c场景的用户行为,同时引入了b2c训练样本做样本增强。

模型结构方面:在模型输入的方面分为和b2c共享的部分,以及lbs独立特征输入的部分,异构b2c/lbs用户行为序列提取多场域用户兴趣,与B2C场景进行多场景联合优化。上线时进行拆图,仅使用lbs task tower进行打分。

4、总结

lbs推荐能力作为创新业务,我们通过模板化推荐能力,快速承接推荐位30+,支持三种推荐模式,初期快速的助力了全渠道的业务发展。

后续针对业务理解,经过对LBS推荐链路的独立拆分,以及召回和精排迭代优化。在首页-为你推荐上,lbs商品曝光UV占比相对Q3提升 488% ,CTR相对Q3提升159.52%。同时带动整体大盘指标提升,首页整体浏览深度显著提升0.39%,推荐整体uctr显著提升0.79%,推荐人均三级类目点击数显著提升0.76%,推荐外页uctr显著提升0.37%。

后续我们将继续结合场景特点和业务理解,逐渐完善优化LBS流量分发能力,更好服务商家和用户,提升京东LBS推荐能力 

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

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

相关文章

运行vue项目显示找不到vue-cli

直接下载ruoyi源码到本地,启动ruoyi-ui的时候报错: 原来是电脑没配置nodejs。 所以先去官网下载nodejs,然后安装完之后,在命令行窗口输入: 显示安装成功。 但还没有结束,还要配置npm的全局模块的存放路径…

Apache Doris 巨大飞跃:存算分离新架构

作者:马如悦 Apache Doris 创始人 历史上,数据分析需求的不断提升(更大的数据规模、更快的处理速度、更低的使用成本)和计算基础设施的不断进化(从专用的高端硬件、到低成本的商用硬件、到云计算服务)&…

高忆管理:k线分析股票走势?

K线是一种经典的技术剖析工具,经过制作股票价格的收盘、开盘、最高和最低价,形成实体和影线,以反映股票价格的动摇和趋势。本文将从多个角度剖析K线剖析股票走势的重要性及使用。 1. 提醒价格趋势 K线图能够清晰显现股票价格走势的趋势&…

性能测试必须掌握的知识点:并发和并行以及CPU的状态和核心参数

性能测试一定绕不开并发和并行,而并发和并行又离不开CPU,本文就来带大家深入理解一下究竟什么是并发和并行以及CPU的状态和核心参数。 并发和并行 通常情况下,CPU 有几个核,就可以并行执行几个进程(线程)…

00 - RAP 开发环境配置

文章目录 [1] Eclipse - ADT[2] BTP / S4HC[3] Add ABAP Env. Service[4] Conn. to BTP [1] Eclipse - ADT 关于如何安装配置,参见文章: Install ABAP Development Tools (ADT) and abapGit Plugin Eclipse Eclipse - ADT Eclipse - abapGit Plugin [2] BTP / S4…

Linux 安装软件 - yum工具

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行…

大龄青年的浙大MBA读书梦——提面优秀190+的上岸经验分享

时间如白驹过隙,三十年的岁月也转瞬即逝,回首过往这三十年的人生路,没有大起大落,一直都是相对比较平稳。但这几年疫情原因,公司效益不好,不仅我们公司整个行业也都在裁员,为了让自己更具备竞争…

Camtasia2023喀秋莎中文版视频编辑软件

Camtasia专业的 屏幕录制和视频剪辑软件 3000多万专业人士在全球范围内使用Camtasia展示产品,教授课程,培训他人,以更快的速度和更吸引人的方式进行沟通和屏幕分享。使您在Windows和Mac上进行录屏和剪辑创作专业外观的视频变得更为简单。 喀秋…

PT swap cell脚本分享

swap cell驱动相同,footprint相同的情况下,大小是一样的,甚至不需要重新抽RC。 这里分享一下,pt size cell时只swap cell的脚本: define_user_attribute -class lib_cell -type string cell_area proc define_cell_ar…

ConcurrentHashMap源码详解

本文已收录于专栏 《Java》 目录 概念说明数据结构线程安全HashMap示例运行结果ConcurrentHashMap示例运行结果 涉及技术Synchronized概念特性 CAS(Compare And Swap)概念原理代码演示没有使用CAS的代码运行结果使用CAS的代码运行结果 总结提升 概念说明 ConcurrentHashMap是Ja…

vue3自定义dialog createApp setup语法组件使用element

目录 index.vue <template><el-dialogcenterv-model"isVisible"width"650px":title"title":append-to-body"true"><div id"dialogMap_container"></div><template #footer><span class&q…

7月31日每日两题

第一题:再解炸弹人 小哼最近爱上了“炸弹人”游戏。你还记得在小霸王游戏机上的炸弹人吗?用放置炸弹的方法来消灭敌人。需将画面上的敌人全部消灭后,并找到隐藏在墙里的暗门才能过关。 现在有一个特殊的关卡如下。你只有一枚炸弹,但是这枚炸弹威力超强(杀伤距离超长,可…

【LeetCode】143.重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

Michael.W基于Foundry精读Openzeppelin第16期——SignedSafeMath.sol

Michael.W基于Foundry精读Openzeppelin第16期——SignedSafeMath.sol 0. 版本0.1 SignedSafeMath.sol 1. 目标合约2. 代码精读2.1 mul(int256 a, int256 b)2.2 div(int256 a, int256 b)2.3 sub(int256 a, int256 b)2.4 add(int256 a, int256 b) 0. 版本 [openzeppelin]&#x…

试试这三款音频转换格式软件,看看可不可以转换mp3?

你是不是不知道音频转换格式有什么用呢&#xff1f;为什么要音频转换呢&#xff1f; 其实音频转换格式的原因是&#xff1a; ①兼容性问题&#xff1a;不同的设备支持不同的音频格式&#xff0c;如果你想在不同设备之间共享音频文件的话&#xff0c;那么需要将文件转换另一种…

Android HTTP使用(详细版)

前言 在面试过程中,HTTP 被提问的概率还是比较高的。 小林我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的,通过问答 + 图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP 协议。 HTTP 基本概念 Get 与 Post HTTP 特性…

Spring AOP 中的代理对象是怎么创建出来的?

文章目录 1. AOP 用法2. 原理分析2.1 doCreateBean2.2 postProcessAfterInitialization2.3 getAdvicesAndAdvisorsForBean2.3.1 findCandidateAdvisors2.3.2 findAdvisorsThatCanApply2.3.3 extendAdvisors 2.4 createProxy 今天和小伙伴们聊一聊 Spring AOP 中的代理对象是怎么…

将number输入框改写成只能输入数字的输入框

去掉 type”number” 末尾的箭头 场景代码 场景 在很多场景下&#xff0c;输入框是会被要求限制只能输入数字&#xff0c;不能输入文字或者符号的。通常我们会使用input事件 正则表达式 去实现这个功能&#xff0c;但今天提供另一种css的方法&#xff0c;将 type”number” 的…

面试总结-Redis篇章(九)——Redis主从复制、主从数据同步原理

Redis其他面试问题 主从复制单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离主节点主要进行客户端的写操作&#xff0c;从节点进行客户端的读操作&#xff0c;因为Redis一直都是读多写少&…

iTOP-RK3568开发板Windows 安装 RKTool 驱动

在烧写镜像之前首先需要安装 RKTool 驱动。 RKTool 驱动在网盘资料“iTOP-3568 开发板\01_【iTOP-RK3568 开发板】基础资料 \02_iTOP-RK3568 开发板烧写工具及驱动”路径下。 驱动如下图所示&#xff1a; 解压缩后&#xff0c;进入文件夹&#xff0c;如下图所示&#xff1a;…