当前位置:首页 > 资讯 > 正文

消费者品牌的 SKU 优化

零售商和消费者品牌关注的是确保他们拥有消费者希望在市场上购买的正确产品和服务。 在考虑最大限度地提高销售额时,产品(或产品组合)是购物体验的主要部分。 产品/服务的可用性(即库存)是消费者品牌持续关注的问题。

产品库存(又称 SKU 分类)是一个跨供应链和物流价值链的复杂问题。 在本文中,我们着重讨论从消费品角度优化 SKU 分类以使收益最大化的问题。

可以通过开发算法回答以下问题来解决 SKU 分类优化的难题:

  • 哪些 SKU 在给定市场或商店中表现最好?
  • 哪些 SKU 应根据其性能分配给给定市场或商店?
  • 哪些 SKU 性能较低,应替换为性能较高的 SKU?
  • 关于我们的消费者和市场细分,我们还能获得什么其他见解?

传统上,消费者品牌通过增加 SKU 组合中的 SKU 数量来解决消费者需求问题。 随着 SKU 数量激增和竞争加剧,据估计,90% 的收益归因于组合中仅 10% 的产品 SKU。 通常情况下,80% 的收益源自 20% 的 SKU。 并且该比率是提高盈利能力的候选要素。

传统静态报告方法使用历史数据,这限制了见解。 最佳情况下,决策仍然通过手动制定和实现。 这意味着人为干预和处理时间。 随着 AI 和云计算的进步,我们可以使用高级分析来提供一系列的选择和预测。 这种自动化可改进结果和客户接收速度。

SKU 分类解决方案必须通过将销售数据分割成有意义和详细的比较,来处理数以百万计的 SKU。 该解决方案的目标是使用高级分析来调整产品分类,从而在每个销售点或商店最大程度地提高销售额。 第二个目标是消除缺货和改进分类。 财政目标是销售额增加 5% 到 10%。 为此,认知见解使人能够:

  • 了解 SKU 项目组合性能并管理表现较差的 SKU。
  • 优化 SKU 的分布以减少缺货。
  • 了解新的 SKU 如何支持短期和长期战略。
  • 从现有数据创建可重复、可缩放和可操作的见解。

描述性模型汇总数据点,并了解可能影响产品销售的因素之间的关系。 这些信息可能会增加一些外部数据点,例如位置、天气和人口普查数据。 可视化效果通过解释数据来帮助用户获得见解。 然而,在执行此操作时,仅限于了解在上一个销售周期中发生的情况,也可能是当前周期发生的情况(具体取决于数据刷新的频率)。

在这种情况下,传统数据仓库和报告方法就足以了解,例如,在一段时间内表现最好和最差的 SKU 是什么。

下图显示了历史销售数据的典型报告。 它有几个带有复选框的块来选择筛选结果的条件。 该中心显示了两个条形图,显示了销售额随时间推移的变化。 第一张图显示每周的平均销售额。 第二张图显示每周的销售量。

历史报告有助于了解所发生的情况。 最终,我们希望对可能发生的情况有一个预测。 过去的信息可能对于实现此目的很有用。 例如,我们可以确定季节性趋势。 但不能帮助假设应用场景,例如,对新产品的引入进行建模。 为此,我们必须把注意力转移到为客户行为建模上,因为这是决定销售的最终因素。

让我们从定义我们要查找的内容和拥有的数据开始:

分类优化指的是找到一个要销售的产品子集,使预期收益最大化。 这正是我们所寻求的。

出于财务目的,我们会定期收集交易数据

分类数据可以包含与 SKU 相关的所有内容:以下示例演示了我们所需的内容:

  • SKU 的数量
  • SKU 描述
  • 分配的数量
  • SKU 和购买数量
  • 事件(例如购买)时间戳
  • SKU 价格
  • POS 的 SKU 价格
  • 在任何时间点的每个 SKU 的存货水平

遗憾的是,收集的此类数据不如交易数据可靠。

在本文中,为简单起见,我们将只考虑交易数据和 SKU 数据,而不考虑外部因素。

即便如此,也请注意,给定一组 n 个产品,有 2n 个可能的分类。 这使得优化问题成为一个计算密集型过程。 对于大量产品而言,评估所有可能的组合是不切实际的。 因此,分类通常按类别(例如谷类)、位置和其他条件进行划分,以减少变量数量。 优化模型试图将排列数修剪到一个可行的子集。

问题的关键在于对消费者的行为进行有效建模。 理想情况下,呈现给他们的产品会和他们想要购买的产品相匹配。

预测消费者选择的数学模型已经开发了几十年。 所选的模型将最终确定最适合的实现技术。 因此,我们将进行汇总并提供几个注意事项。

参数模型通过使用具有有限参数集的函数来粗略估计客户行为。 我们估计了一组最适合我们所处理数据的参数。 其中最早且众所周知的一个参数是多项逻辑回归(又名 MNL、多类 logit 或 softmax 回归)。 它用于计算分类问题中几种可能结果的概率。 在这种情况下,可以使用 MNL 来计算:

消费者 (c) 在特定时间 (t) 选择一个产品 (i) 的概率,指定分类 (a) 中该类别的一组产品,并向客户 (v) 提供一个已知实用程序。

我们还假设产品的实用程序可以是其功能函数。 外部信息也可以包括在实用程序的度量值中(例如,伞在下雨时更有用)。

由于 MNL 在估计参数和评估结果时易于处理,我们通常将其作为其他模型的基准。 换而言之,如果你做的比 MNL 差,你的算法就没有用处。

已有几个模型是从 MNL 派生的,但不在本文讨论范围内。

提供了 R 和 Python 编程语言库。 对于 R,你可能会使用 glm(和派生词)。 对于 Python,可以使用 scikit-learn、biogeme 和 larch。 这些库提供了指定 MNL 问题的工具,以及在各类平台上寻找解决方案的并行求解程序。

最近,我们提议通过在 GPU 上实现 MNL 模型来计算具有多个参数的复杂模型,否则这些模型将难以处理。

采用 softmax 输出层的神经网络在大型多类问题上得到了有效的应用。 这些网络产生一个输出向量,表示一系列不同结果的概率分布。 与其他实现相比,它们的定型速度较慢,但可以处理大量的类和参数。

虽然广受欢迎,但 MNL 对人类行为的一些重要假设可能会限制其有效性。 具体而言,它假设某人在两个选项之间选择的相对概率独立于后面集合中引入的其他备选方案。 这在大多数情况下是不切实际的。

例如,如果你同时喜欢产品 A 和产品 B,那么二者的选择概率均为 50%。 让我们向组合引入产品 C。 你仍然有 50% 的概率选择产品 A,但现在你的偏好是 25% 的概率选择产品 B,25% 的概率选择产品 C。相对概率发生了变化。

此外,由于缺货或形形色色的产品分类(也就是说,当你没有明确的想法,并在货架上随便挑选一件商品),MNL 和派生模型将没有简单的方法来应对替代商品。

设计非参数模型的目的是应对替代商品,并减少对客户行为的约束。

他们引入了排名的概念,其中消费者在分类中表达对产品的严格偏好。 因此,他们的购买行为可以通过按照偏好的降序顺序对产品进行排序来建模。

分类优化问题可以表示为收益最大化:

显示分类优化问题公式的图示。

  • ri 表示产品 i 的收益。
  • 如果产品 i 被选在第 k 位,yik 为 1。 否则为 0。
  • λk 是客户根据排名 k 做出选择的概率。
  • 如果产品包含在分类中,xi 为 1。 否则为 0。
  • K 是排名数。
  • n 是产品数量。

在此类公式中,问题可以被视为混合整数优化。

设想如果有 n 个产品,可能的排名的最大数量(包括不选择选项)为阶乘:(n+1)!

公式中的约束允许对可取选项进行相对有效的修剪。 例如仅选择最可取的选项并设置为 1, 其余选项都设置为 0 你可以想象,考虑到可取的备选选项的数量,实现的可伸缩性将至关重要。

我们前面提到过销售数据随时可用。 我们想要使用这些数据来指导我们的分类优化模型。 具体而言,我们想要查找我们的概率分布 λ。

从销售点系统获得的销售数据包括带有时间戳的交易,以及在相应的时间和地点向客户展示的一组产品。 借此,我们可以构造实际销售额向量,其元素 vi,m 表示在给定分类 Sm 下将商品 i 销售给客户的概率

我们还可以构造一个矩阵:

显示矩阵的图示。

鉴于我们的销售数据变成了另一个优化问题,查找我们的概率分布 λ。 我们希望查找一个向量 λ 来最大程度减少我们的销售估计错误:

minλ |Λλ - v|

请注意,计算也可以表示为回归,为此,可以使用诸如多变量决策树这样的模型。

从上面的公式可以看出,优化模型是数据驱动和计算密集型模型。

Microsoft 合作伙伴(如 Neal Analytics)已经开发了可靠的体系结构来满足这些条件。 请参阅 SKU 分类优化。 我们将使用这些体系结构作为示例,并提供几点注意事项。

  • 首先,它们依赖可靠、可伸缩的数据管道为模型馈送数据,并依赖可靠、可伸缩的执行基础结构来运行模型。
  • 其次,规划人员可以通过仪表板轻松使用这些结果。

图 2 显示一个示例体系结构。 它包括四个主要块:捕获、处理、建模和操作化。 每个块均包含主要流程。 捕获包括数据预处理;处理包括存储数据功能;建模包括定型机器学习模型功能;操作化包括存储数据和报告选项(如仪表板)。

图 2:SKU 优化的体系结构(由 Neal Analytics 提供)

该体系结构强调了为模型定型和操作建立数据管道的重要性。 我们使用 Azure 数据工厂编排管道中的活动,它是一项托管的提取、转换和加载 (ETL) 服务,可用于设计和运行集成工作流。

Azure 数据工厂是一项托管服务,其组件称为活动,用于使用和/或生成数据集。

活动可以拆分为:

  • 数据移动(例如从源复制到目标)
  • 数据转换(例如使用 SQL 查询聚合或运行存储过程)

数据工厂服务可以计划、监视和管理将一组活动链接在一起的工作流。 此完整工作流被称为管道

在捕获阶段,我们可以使用数据工厂的复制活动将来自各种源(本地和云中)的数据传输到 Azure SQL 数据仓库。 如何执行此操作的示例在文档中提供:

  • 向/从 Azure SQL DW 复制数据
  • 将数据载入 Azure SQL DW

下图显示了管道定义。 它由三个成排的大小相等的块组成。 前两个块是用箭头连接的数据集和活动,指示数据流。 第三个块标记为管道,并指向前两个块以指示封装。

显示管道的示意图,该管道由数据集以及使用和生成数据集的活动组成。

图 3:Azure 数据工厂的基本概念

Neal Analytics 解决方案使用的数据格式的示例可以在 Microsoft 商业市场页面找到。 该解决方案包含以下数据集:

  • 每个商店和 SKU 组合的销售历史数据
  • 商店和消费者记录
  • SKU 代码和说明
  • 捕获产品特性(例如大小和材质)的 SKU 属性。 这些通常用于在参数化模型中区分产品变体。

如果数据源没有以特定格式表示,数据工厂将提供一系列转换活动。

在处理阶段,SQL 数据仓库是主要存储引擎。 你可将此类转换活动表示为 SQL 存储过程,后者可以作为管道的一部分自动调用。 本文档提供了以下详细说明:

  • 使用 SQL 存储过程转换数据

请注意,数据工厂不会限制你使用 SQL 数据仓库和 SQL 存储过程。 事实上,它与多个平台集成。 例如,可改用 Databricks 和运行 Python 脚本来进行转换。 这是一个优势,因为你可以在下面的建模阶段使用一个平台来存储、转换和定型机器学习算法。

有几种工具可以帮助你实现参数和非参数模型。 你的选择取决于你的可伸缩性和性能要求。

Azure 机器学习工作室是原型制作的一个极佳工具。 它提供了一种在图形环境中使用代码模块(在 R 或 Python 中)或使用预定义的 ML 组件(例如多类分类器和提升的决策树回归)构建和运行定型工作流的简单方法。 它还使你能够轻松将一个定型模型作为 Web 服务发布以供进一步使用,从而生成一个 REST 接口。

但是,它可以处理的数据大小目前限制在 10 GB,每个组件可用的核心数量限制在 2 个。

如果需要进一步扩展,但仍然希望使用通用机器学习算法的一些快速、并行的 Microsoft 实现(如多项逻辑回归),可以考虑在 Azure Data Science VM 上运行 Microsoft ML Server。

对于非常大的数据量 (TB),最好选择一个存储和计算元素可在其中进行以下操作的平台:

  • 独立缩放,以便在不定型模型时限制成本。
  • 将计算分布到多个内核。
  • 在靠近存储的位置运行计算,以限制数据移动。

Azure HDInsight 和 Databricks 都满足这些要求。 此外,它们都是 Azure 数据工厂编辑器中支持的执行平台。 在工作流中集成任何一个平台都非常简单。

ML Server 及其库可以部署在 HDInsight 之上,但要充分利用平台功能,可以使用 SparkML、Python 中的 Microsoft ML Spark 库或其他专业线性编程求解程序(如 TFoCS、Spark-LP 或 SolveDF)来实现所选的 ML 算法。

然后,启动定型过程将变成从数据工厂工作流调用相应的 pySpark 脚本或笔记本的问题。 在图形编辑器中完全支持此功能。 有关详细信息,请参阅使用 Azure 数据工厂中的 Databricks Notebook 活动运行 Databricks Notebook。

下图显示了通过 Azure 门户访问的数据工厂用户界面。 它包括工作流中各种流程的块。

图 4:包含 Databricks 笔记本活动的数据工厂管道示例

此外请注意,在我们的库存优化解决方案中,我们提出了一个基于容器的求解程序实现,它通过 Azure Batch 进行缩放。 使用专业优化库(如 pyomo),可以使用 Python 编程语言来表达优化问题,然后调用独立求解程序(如 bonmin(开源)或 gurobi(商业版))来查找解决方案。

库存优化文档处理的是与分类优化不同的问题(订单数量),而 Azure 中求解程序的实现同样适用。

虽然比目前所建议的操作要复杂,但该技术可实现最大的可伸缩性,这主要受你所能提供的核心数量的限制。

定型模型后,运行它通常需要与用于部署的基础结构所不同的基础结构。 为了使其易于使用,可以其部署为带有 REST 接口的 Web 服务。 Azure 机器学习工作室和 ML Server 都将创建此类服务的过程自动化。 对于 ML Server,Microsoft 提供了用于部署支持基础结构的模板。 请参阅相关文档。

下图显示了部署的体系结构。 它包括运行 R 语言和 Python 的服务器表示形式。 两个服务器都与执行计算的 Web 节点的子部分通信。 一个大数据存储连接到计算块。

显示 Machine Learning Server 的示意图。R 语言和 Python 服务器通过负载均衡器访问 Web 和计算节点。

图 5:ML 服务器部署示例

在 HDInsight 或 Databricks 上创建的模型依赖于 Spark 环境(库、并行功能等)。 可以考虑在群集上运行这些模型。 此处提供了相关指导。 这样做的优点是,操作模型本身可以通过数据工厂管道活动调用,以便进行计分。

要使用容器,可以打包模型并将其部署到 Azure Kubernetes 服务。 原型需要使用 Azure Data Science VM。 还必须在 VM 上安装 Azure ML 命令行工具。

部署完毕后,该模型可以处理财务事务工作流和存货读数,以生成最佳分类预测。 以此生成的数据可以存储回 Azure SQL 数据仓库,以供进一步分析。 具体而言,将有可能研究各种 SKU 的历史性能,找出最佳创收者和亏损者。 然后,你可以将这些数据与模型建议的分类进行比较,并评估性能以及重新定型的必要性。

Power BI 提供了一种方法来分析和显示过程中生成的数据。

下图显示了典型的 Power BI 仪表板。 它包括两个显示 SKU 存货信息的图表。

处理敏感数据的解决方案包括财务记录、存货水平和价格信息。 此类敏感数据必须受到保护。 可通过以下方式减轻对数据安全和隐私的顾虑:

  • 可以使用 Azure Integration Runtime 在本地运行一些 Azure 数据工厂管道。 在运行时向/从本地源执行数据移动活动。 它还将调度在本地执行的活动。
  • 可以开发一个自定义活动以匿名化要传输到 Azure 的数据,并在本地运行该活动。
  • 所有提到的服务都支持传输和静态加密。 如果选择使用 Azure Data Lake 存储数据,则默认启用加密。 如果使用 Azure SQL 数据仓库,则可以启用透明数据加密 (TDE)。
  • 所有提到的服务,除了机器学习工作室之外,都支持与 Microsoft Entra ID 集成以进行身份验证和授权。 如果编写自己的代码,则必须将该集成构建到你的应用程序中。

有关一般数据保护条例(欧盟的一项数据保护和隐私法律)的详细信息,请参阅我们的合规性页面。

本文介绍了以下技术:

  • Azure Batch
  • Microsoft Entra ID
  • Azure 数据工厂
  • HDInsight
  • Databricks
  • 数据科学虚拟机
  • Azure Kubernetes 服务
  • Microsoft Power BI

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

  • Scott Seely | 软件架构师

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

  • 什么是 Azure 数据工厂?
  • Azure 数据工厂中的集成运行时
  • 什么是 Azure Synapse Analytics 中的专用 SQL 池(之前称为 SQL DW)?
  • Microsoft 机器学习工作室(经典版)
  • 什么是 Machine Learning Server
  • Pyomo 优化建模语言
  • Bonmin 求解程序
  • 适用于 Spark 的 TFoCS 求解程序

相关零售指南:

  • 零售行业解决方案
  • 将电子商务解决方案迁移到 Azure
  • 在零售业中使用 Azure Cosmos DB 进行视觉搜索

相关体系结构:

  • 构建可缩放的电子商务 Web 应用
  • 用于电子商务的智能产品搜索引擎
  • Azure Kubernetes 服务中的 Magento 电子商务平台

有话要说...