在本文中,我将介绍一种相对简单的方法,用于在电子商务中启动交叉销售(向客户提供的产品以及购物车中的产品)功能,例如杂货或送餐服务,我们在“Mnogo Lososya”移动应用程序。这是一个基本的协同过滤推荐系统,结合了基于用户和基于项目的方法,可用于各种电子商务项目,特别是那些具有大量 SKU 的项目,以提供广泛的推荐。
Mnogo Lososya 成立于 2018 年,是一家拥有 50 多家幽灵厨房和 250 多家外卖厨房的连锁店,也是一个涵盖多种菜品概念的伞式品牌。我们的独特卖点是 30 分钟送达新鲜烹制的饭菜。我们一直在快速扩张,最近月活跃用户超过 10 万,月总收入超过 1 亿卢布。
我们的大部分订单都是在线完成的,其中三分之一来自我们自己的移动应用程序,另外三分之二来自送货服务。该应用程序是我们产品的重要组成部分,因为它是第一接触点之一,与我们的服务和食品本身一起,有助于提供更好的客户体验。
该解决方案完全基于 Yandex Cloud 服务构建,但也可以基于 AWS 构建,因为它也具有所有必要的服务。为了方便 AWS 用户,我用 AWS 表示法来指定服务,许多 YC 用户也应该清楚这一点。
简化的架构如下所示:
用户通过移动应用程序下订单。在 ERP 系统中,订单被创建和处理。
然后,在每天晚上一次的 ETL 过程中,将订单复制到数据仓库。每个订单都包含有关订购产品的信息以及客户标识符。
SQL 程序计算用户偏好和产品相似性。下面提供了计算的更详细描述。计算在 MongoDB 中产生两个具有以下结构的集合:
用户偏好集合
电话:我们使用“电话”作为用户标识符。
相关菜品
最后更新日期。上次重新计算的日期和时间
文档示例:
产品相似度收集
碟号
相关菜品
lastUpdateDate:上次重新计算的日期和时间
文档示例
我们根据加权销售历史实施用户偏好,近期销售优先。考虑以下任意用户的销售历史:
产品 | 销售量 | 什么时候 | 时间系数(1/月) | 加权销售额 |
---|---|---|---|---|
A | 1个 | 这个月 | 1个 | 1个 |
乙 | 1个 | 这个月 | 1个 | 1个 |
C | 4个 | 1个月前 | 0,5 | 2个 |
A | 4个 | 1个月前 | 0,5 | 2个 |
乙 | 3个 | 4个月前 | 0,25 | 0,75 |
用户购买了产品 B 和产品 C 四次。但是,由于 B 产品的大部分销售发生在四个月前,因此我们优先考虑最近的 C 产品销售。产品按总加权销售额排序,总加权销售额是每个产品的加权销售额之和。
产品 | 总加权销售额 | 秩 |
---|---|---|
A | 3个 | 1个 |
乙 | 1,75 | 3个 |
C | 2个 | 2个 |
上面的示例暗示用户更喜欢产品 A 而不是产品 C,更喜欢产品 C 而不是产品 B。
存在产品对的订单数量用于计算产品相似性。每个月单独计算结果,最近几个月优先。因此,我们对每个产品的相似产品进行排名,并将它们存储在 MongoDB 中,其中产品 ID 是集合的索引。
得到的商品推荐列表结合了用户的喜好和相似的商品,按照某种策略进行排序,即按排名升序排序。因此,我们只是简单地合并所有相关的产品列表并对其进行排序。我们计算重复产品的平均排名。这是一个例子:
我们选择了以下指标来衡量交叉销售效率:
包含交叉销售菜肴的订单的平均订单价值 (AOV)高于不包含交叉销售菜肴的订单的 AOV。订单中所有产品的总和就是订单价值,也就是客户为订单支付的金额。因此,该指标表明客户是否为包含交叉销售菜肴的订单支付了更多费用。这是关键指标,因为 AOV 的增加正是我们对交叉销售的期望。
从交叉销售部分添加的商品占总销售商品的百分比。这是一个次要指标,在很大程度上受所售商品的性质以及交叉销售策略的影响。考虑一家电子产品电子商务商店,它交叉销售低成本补充品(如手提箱和充电线)和购物车中更昂贵的商品(如智能手机和笔记本电脑)。在这种情况下,许多补充品可以交叉销售给一个主要项目,并且该指标可以超过 50%。尽管我们的示例不包括种类繁多的补充品,但该指标展示了交叉销售如何影响最终的购物车结构。
包含交叉销售菜肴的订单百分比。这是另一个次要指标,显示交叉销售的“受欢迎程度”,或者客户购买交叉销售推荐产品的频率。
下面的数据集包含从 2022 年 12 月到 2023 年 1 月在 MnogoLososya 的一个运营城市收集的非个人订单数据。
https://github.com/alexchrn/cross-sell/blob/main/orders.csv
该数据集是从各种来源编译而来的,包括 AppMetrica(添加到购物车事件)和 ERP 系统(订单和付款状态、折扣和付款金额)。
数据集结构:
所以这里是指标值(使用 python 从上述数据集派生)。
从交叉销售部分添加的菜品占总购买菜品的百分比——3.97%
包含交叉销售菜肴的订单百分比 – 10.46%
包含交叉销售菜肴的订单的 AOV 与不包含交叉销售菜肴的订单的 AOV 相比:
可以看出,交叉销售菜肴的订单具有更高的 AOV,相差 565 卢布。此类订单中的平均菜肴数量也更高,考虑到交叉销售的唯一目标是激励顾客将更多菜肴添加到他们的购物车,这是合理的。
565 的差异显着吗?我们可以使用 t 检验来查看这种差异是否是偶然造成的。 Python scripy 库有一个方法可以做到这一点。这是对零假设的检验,即 2 个独立样本具有相同的平均值(预期)值 (1)。
因此,p 值或原假设为真的概率极低,即使在 99% 的显着性水平下我们也拒绝原假设。换句话说,几乎可以肯定,平均订单价值的显着差异并非巧合,交叉销售餐点的订单产生了更多收入。
即使使用简单的协同过滤技术,交叉销售也可以成为提高平均订单价值的有效工具。得益于 AWS 和其他云提供商的无服务器服务,从技术角度来看,它也可以相对容易地实现,如本文所示。
相关资料: