奥里奥(Auriau)、文森特(Vincent)、阿里·奥瓦德(Ali Aouad)、安托万·德西尔(Antoine Désir)和埃马纽埃尔·马勒贝(Emmanuel Malherbe)。《Choice-Learn:基于机器学习视角的运营场景大规模选择建模》。《开源软件杂志》第9卷,第101期(2024年):第6899页。
引言
离散选择模型旨在预测个体从一组备选方案(称为“产品组合”)中做出的选择决策。其典型的应用场景包括预测通勤者的交通方式选择或消费者的购买行为。当某些备选方案不可用,或其特征在不同情境下发生变化时,选择模型能够处理产品组合的变化。这种适应不同情境的能力使得这些模型可作为优化问题的输入,包括产品组合规划或定价。
Choice-Learn 为从业者和学术研究人员提供了一套模块化的选择建模工具,用于处理选择数据,并据此构建、估计和应用选择模型。 如图 1 所示,该库分为两个使用层级。较高层级旨在实现快速简便的部署,较低层级则支持更高级的参数化操作。这种结构借鉴了 Keras 的不同端点设计(Chollet 等,2015),从而提供了用户友好的界面。Choice-Learn 的设计目标如下:
主要贡献总结如表1和表2所示。



需求说明
数据和模型的可扩展性
Choice-Learn 的数据管理依赖于 NumPy(Harris 等,2020),旨在限制内存占用。它最大限度地减少了商品或客户特征的重复,并将完整数据结构的连接操作推迟到处理数据批次时进行。 该包引入了 FeaturesStorage 对象(如图 2 所示),允许仅通过 ID 引用特征值。在批处理过程中,这些值会即时替换到 ID 占位符中。例如,超市的特征(如面积或位置)通常是静态的。因此,它们可以存储在辅助数据结构中,而在主数据集中,记录选择的商店仅通过其 ID 进行引用。
该包基于 TensorFlow(Abadi 等,2015)进行模型估计,支持使用 L-BFGS(Nocedal & Wright,2006)等快速准牛顿优化算法,以及专用于处理批量数据的各种梯度下降优化器(Kingma & Ba,2017;Tieleman & Hinton,2012)。 该包还支持 GPU 加速,这有助于显著节省时间。最后,TensorFlow 的核心架构通过 TFLite 和 TFServing 等部署与服务工具,确保了其在生产环境(例如商品推荐软件)中的高效运行。

灵活应用:从通用型到定制规格
遵循随机效用最大化原则(McFadden & Train, 2000)的选择模型将备选方案 𝑖 ∈ 𝒜 的效用定义为确定性部分 𝑈 (𝑖) 与随机误差 𝜖𝑖 的和。 若假设各项 (𝜖𝑖)𝑖∈𝒜 相互独立且服从甘贝尔分布,则选择备选方案 𝑖 的概率可表示为对所有可用备选方案 𝑗 ∈ 𝒜 进行的软最大似然归一化:

选择建模者的任务是根据具体情境构建一个合适的效用函数 𝑈 (.)。在 Choice-Learn 中,用户可以对预定义模型进行参数化,也可以自由指定自定义效用函数。要声明自定义模型,需要继承 ChoiceModel 类,并按照文档中的说明重写 compute_batch_utility 方法。
传统随机效用模型与基于机器学习的模型库
传统的参数化选择模型,包括条件对数几率模型(Conditional Logit,Train 等,1987),通常将效用函数规定为线性形式。这虽然提供了可解释的系数,但限制了模型的预测能力。 近期研究提出利用神经网络方法(Aouad & Désir, 2022;Han et al., 2022)和基于树的模型(Aouad et al., 2023;Salvadé & Hillel, 2024)来估计更复杂的模型。 尽管现有的选择理论库(Bierlaire, 2023; Brathwaite & Walker, 2018; Du et al., 2023)通常未设计为集成此类基于机器学习的方法,Choice-Learn 提出了一个同时包含这两类模型的集合。
下游业务:品类与定价优化
Choice-Learn 为下游操作提供了额外的工具,这些工具通常未集成在选择建模库中。特别是,商品组合优化是一个常见的应用场景,它利用选择模型来确定应向客户提供的最优备选方案子集,以最大化特定目标,例如预期收入、转化率或社会福利。该框架涵盖了多种应用,例如商品组合规划、陈列位置优化和定价。 我们提供了基于 (Méndez-Díaz et al., 2014) 中描述的混合整数规划模型的实现方案,并支持在 Gurobi(Gurobi Optimization, LLC, 2023)和 OR-Tools(Perron & Furnon, 2024)之间选择求解器。
内存使用:一个案例研究
我们在图 3(a) 中给出了内存使用量的数值示例,以展示 FeaturesStorage 的效率。我们考虑数据集中重复出现的一个特征,例如位置的一热编码,其表示形式为形状为 (#locations, #locations) 的矩阵,其中每一行对应
一个位置。
我们在 Expedia 数据集(Ben Hamner 等,2013)上对比了四种数据处理方法:pandas.DataFrames(pandas 开发团队,2020)的长格式和宽格式,这两种格式均被用于选择建模包 Torch-Choice 和 Choice-Learn 中。图 3 (b) 展示了
不同样本规模下的结果。
最后,在图3(c)和(d)中,我们观察到在实体零售领域的专有数据集上内存使用效率的提升,该数据集汇总了克罗地亚Konzum超市超过40亿笔购买记录。聚焦于咖啡子类别,该数据集针对每笔购买记录,明确了可供选购的产品、其价格,以及超市的一热编码表示。


博客





