真实世界应用案例-连接开发和生产化的策略

真实世界应用案例:连接开发和生产化的策略

原文:towardsdatascience.com/real-world-use-cases-strategies-that-will-bridge-the-gap-between-development-and-productionizing-87765f00c4c4/

由 Dall-e 生成的图像。本文中所有图像和可视化均由作者创建

由 Dall-e 生成的图像。本文中所有图像和可视化均由作者创建

在我的机器学习和数据科学经验中,从开发到生产的过渡是一个关键且具有挑战性的阶段。这个过程通常以迭代步骤展开,逐渐完善产品,直到达到可接受的标准。在这个过程中,我观察到一些常见的陷阱,这些陷阱往往会使生产过程变得缓慢。

本文探讨了这些挑战中的一些,重点关注预发布过程。另一篇文章将更深入地探讨项目的后期生命周期。

我认为迭代周期对于开发过程至关重要,我的目标是优化它,而不是消除它。为了使概念更具体,我将使用Kaggle 欺诈检测数据集(DbCL 许可)作为一个案例研究。对于建模,我将利用TabNetOptuna进行超参数优化。关于这些工具的更深入解释,请参阅我之前的文章

优化损失函数和指标以产生影响

在开始一个新项目时,明确定义最终目标至关重要。例如,在欺诈检测中,定性目标——捕捉欺诈交易——应转化为指导模型构建过程的定量术语。

有一种趋势是默认使用 F1 指标来衡量结果,对于分类问题使用无权重的交叉熵损失函数,BCE 损失。这有很好的理由——这些是非常好的、稳健的选择,用于衡量和训练模型。这种方法即使在数据不平衡的数据集中也有效,如本节后面所示。

为了说明,我们将建立一个使用 BCE 损失(均匀权重)训练的基线模型,并使用 F1 分数进行评估。以下是得到的混淆矩阵。

显示使用权重 0.5 的 BCE 损失训练的模型和 F1 分数评估结果的混淆矩阵

显示使用权重 0.5 的 BCE 损失训练的模型和 F1 分数评估结果的混淆矩阵

模型表现合理,但在检测欺诈交易方面存在困难,漏掉了 13 个案例,同时只标记了一个误报。从商业角度来看,让欺诈交易发生可能比错误地标记一个合法交易更糟糕。调整损失函数和评估指标以符合业务优先级可以导致更合适的模型。

为了引导模型选择优先考虑某些类别,我们调整了 F-beta 指标。查看我们选择模型的指标 F-beta,我们可以进行以下推导。

F-beta 度量推导以获得所需方程的图像。图由作者提供。

F-beta 度量的推导以获得所需方程。图由作者提供。

在这里,一个误报被赋予 beta 平方的误判权重。确定误报和误判之间的最佳平衡是一个微妙的过程,通常与定性业务目标相关。在即将发表的文章中,我们将更深入地探讨如何从更定性的业务目标中推导出 beta。为了演示,我们将使用相当于 200 平方根的权重,这意味着为了防止每个额外的欺诈交易,可以接受 200 个不必要的标记。还值得注意的是,当 FN 和 FP 趋近于零时,无论 beta 的选择如何,该指标都趋近于 1。

对于我们的损失函数,我们类似地选择了 0.995 的权重用于欺诈数据点,0.005 的权重用于非欺诈数据点。

显示使用权重 0.995 进行 BCE 损失训练并使用 F14 分数评估的模型结果的混淆矩阵。

显示使用权重 0.995 进行 BCE 损失训练并使用 F14 分数评估的模型结果的混淆矩阵。

上方显示了在测试集上更新模型的成果。除了基本案例外,我们的第二个模型更倾向于 16 个误报案例,而不是两个误判案例。这种权衡符合我们希望得到的微调。

优先考虑代表性指标而非夸大指标。

在数据科学中,竞争资源是常见的,展示夸大的结果可能很有吸引力。虽然这可能会确保短期内的认可,但通常会导致利益相关者的挫败感和不切实际的期望。

相反,展示准确反映模型当前状态的指标可以促进更好的长期关系和现实的项目规划。这里有一个具体的做法。

相应地分割数据。

将数据集分割以尽可能接近现实世界的场景。如果你的数据有时间维度,请使用它来创建有意义的分割。我在之前的文章中已经讨论过这一点,对于那些想要看到更多示例的人来说。

在 Kaggle 数据集中,我们将假设数据按时间顺序排列在“时间”列中。我们将进行 80%、10%、10%的训练-测试-验证分割。这些集合可以被认为是:你使用训练数据集进行训练,你使用测试数据集优化参数,你从验证数据集中展示指标

注意,在前一节中,我们查看的是测试数据的结果,即我们用于参数优化的数据。现在我们将查看保留的验证数据集。

验证数据集的混淆矩阵,beta 值为 1,无加权损失。图片由作者提供

验证数据集的混淆矩阵,beta 值为 1,无加权损失。图片由作者提供。

验证数据集的混淆矩阵,beta 值为 14,加权损失。图片由作者提供

验证数据集的混淆矩阵,beta 值为 14,加权损失。图片由作者提供。

我们观察到,对于我们的基线模型和加权模型,召回率分别从 75%下降到 68%,从 79%下降到 72%。这是预期的,因为测试集在模型选择过程中进行了优化。然而,验证集提供了一个更真实的评估。

注意模型的不确定性。

就像在人工决策中一样,一些数据点比其他数据点更难评估。从建模的角度来看,可能也会出现相同的现象。解决这种不确定性可以促进模型部署的顺利进行。对于这个业务目的——我们是否必须对所有的数据点进行分类?我们是否必须给出一个点估计,或者一个范围就足够了?最初应专注于有限的、高置信度的预测。

这有两种可能的场景及其相应的解决方案。

分类。

如果任务是分类,考虑在输出上实施一个阈值。这样,只有模型确信的标签才会被输出。否则,模型将完成任务,但不会标记数据。我在这篇文章中深入探讨了这一点文章

回归。

对于分类情况中的阈值处理,回归的对应做法是引入一个置信区间,而不是提供一个点估计。置信区间的宽度由业务用例决定,但当然,这种权衡是在预测准确性和预测确定性之间进行的。这个话题在之前的文章中进行了进一步的讨论。

模型可解释性

在可能的情况下,应优先考虑纳入模型可解释性。虽然可解释性的概念是模型无关的,但其实现可能因模型类型而异。

模型可解释性的重要性有两方面。首先,是建立信任。机器学习在一些领域仍然面临怀疑。透明度通过使模型的行为可理解并使决策有理可依来帮助减少这种怀疑。

第二点是检测过拟合。如果模型的决策过程与领域知识不一致,这可能表明对噪声训练数据过度拟合。这样的模型在暴露于生产中的新数据时可能会面临泛化能力差的风险。相反,可解释性可以提供令人惊讶的见解,从而增强专业知识。

对于我们的用例,我们将评估特征重要性以更清晰地了解模型的行为。特征重要性分数表明,平均而言,单个特征对模型预测的贡献有多大。

图片

这是数据集特征上的标准化分数,表明它们平均用于确定类标签的程度。

将数据集视为未匿名化。我在一些项目中分析特征重要性时,已经提供了关于营销有效性的见解,并揭示了技术系统(如预测性维护项目期间)的关键预测因子。然而,领域专家(SMEs)最常见的反应往往是令人放心的,“是的,这些值对我们来说是有意义的。”

探索各种模型解释技术及其实现的深入文章即将推出。

准备生产系统中的数据和标签漂移

一个常见但风险较高的假设是数据标签分布将在一段时间内保持稳定。根据我的经验,这个假设很少成立,除非在某些高度控制的工程技术应用中。数据漂移——特征或标签分布随时间的变化——是一种自然现象。我们不应抵制它,而应接受它并将其纳入我们的系统设计。

我们可能考虑的一些事情是尝试构建一个更能适应变化的模型,或者我们可以建立一个监控系统以监测漂移并计算其后果。并制定何时以及为何重新训练模型的计划。一篇深入探讨漂移检测和建模策略的文章即将推出,也将涵盖数据和标签漂移的解释以及重新训练和监控策略。

对于我们的示例,我们将使用 Python 库 Deepchecks 来分析 Kaggle 数据集中的特征漂移。具体来说,我们将检查具有最高 Kolmogorov-Smirnov(KS)分数的特征,这表明最大的漂移。我们观察训练集和测试集之间的漂移。

图片图片图片图片图片

虽然很难准确预测数据在未来会如何变化,但我们有信心它会变化。为这种不可避免性进行规划对于维护稳健和可靠的机器学习系统至关重要。

摘要

桥接机器学习开发与生产之间的差距并非易事——这是一段充满陷阱和学习机会的迭代旅程。本文深入探讨了关键的预生产阶段,重点关注优化指标、处理模型不确定性,并通过可解释性确保透明度。通过将技术选择与业务优先级对齐,我们探讨了调整损失函数、应用置信阈值和监控数据漂移等策略。毕竟,一个模型的好坏取决于其适应能力——类似于人类的适应性。

感谢您花时间探索这个主题。

我希望这篇文章提供了有价值的见解和灵感。如果您有任何评论或问题,请随时联系。您也可以在LinkedIn上与我联系。

posted @ 2026-03-29 09:49  布客飞龙III  阅读(1)  评论(0)    收藏  举报