为企业建立机器学习模型的5个步骤

204 阅读17分钟

为企业建立机器学习模型的5个步骤

在过去的十年里,机器学习经历了广泛的民主化进程。无数与该主题相关的教程、书籍、讲座和博客文章已经出版。虽然关于如何建立和优化模型的技术方面有很好的记录,但关于开发机器学习模型如何适合商业背景的资源却很少。什么时候使用机器学习是个好主意?如何开始?如何在不破坏产品的情况下长期更新一个模型?

下面,我们将分享从商业角度接近机器学习的五个步骤和辅助技巧。我们在Shopify使用这些步骤和提示来帮助建立和扩展我们的机器学习产品套件。它们可能看起来很简单,但当它们一起使用时,它们提供了一个直接的工作流程,以帮助你生产出真正推动影响力的模型。 构建机器学习模型的指南

1.问问自己现在是否是机器学习的合适时机?

在开始开发任何机器学习模型之前,要问的第一个问题是:我应该在这个时候为机器学习模型投入资源吗?在一个华丽的机器学习算法上花费大量时间是很诱人的。如果该模型旨在为一个应该是 "智能 "的产品提供动力,那就更是如此。下面是两个简单的问题,以评估现在是否是开发机器学习模型的正确时机。

1.这个模型将为一个全新的产品提供动力?

推出一个新产品需要付出巨大的努力,而且往往资源有限。运送第一个版本,了解产品的适应性,弄清用户的参与度,收集反馈,这些都是需要执行的关键活动。选择在这些早期阶段推迟机器学习,可以腾出资源,转而专注于让产品落地。

建议制定建立数据飞轮的计划,以及机器学习如何改进产品的下一步。数据是决定任何机器学习模型成败的关键,有一个坚实的数据收集策略将在未来几年为团队和产品服务。我们建议探索什么会对下线有利,以便从一开始就打好正确的基础,但在后期才使用机器学习。

相反,如果产品已经推出并被证明能够解决用户的痛点,开发机器学习算法可能会改善和扩展它。

2.非机器学习方法的表现如何?

在着手开发机器学习模型之前,我们建议先尝试用简单的启发式方法来解决这个问题。这些方法的表现往往令人惊讶。从这一类解决方案开始的好处是,它们通常更容易和更快地实现,而且如果你决定以后建立一个更复杂的解决方案,可以提供一个很好的基准线来衡量。它们还允许从业者熟悉数据,并对他们试图解决的问题有更深入的了解。

在90%的情况下,你可以使用启发式方法创建一个基线。这里有一些我们最喜欢的用于各种类型的商业问题。

预测对于用时间序列数据进行预测,移动平均数通常是稳健而有效的。
预测流失率使用行为群组分析来确定用户流失点是很难做到的。
计分对于业务实体(例如线索和客户)的评分,基于两到三个加权代理指标的综合指数很容易解释,并且可以快速启动。
推荐引擎推荐整个平台上流行的内容,加上一些随机性以增加探索和内容的多样性,是一个很好的开始。
搜索引擎词根和关键词匹配提供了一个可靠的启发式方法

2.保持简单

在开发第一个模型时,寻求最佳解决方案的兴奋往往导致在早期增加不必要的复杂性:工程上的额外功能或选择最新的流行模型架构当然可以提供一个优势。然而,它们也会增加建立的时间、系统的整体复杂性,以及新的团队成员加入、理解和维护解决方案所需的时间。

另一方面,简单的模型使团队能够迅速建立起整个管道,并消除可能出现的任何意外风险。它们是让系统端到端工作的最快途径。

至少在模型的第一次迭代中,我们建议从最简单的方法开始,注意到这些成本。如果有必要的话,以后可以随时增加复杂度。下面是一些有助于减少复杂性的提示。

从简单的模型开始

简单的模型有助于提高迭代速度,并能更好地理解模型。在可能的情况下,从强大的、可解释的、快速训练的模型开始(浅层决策树、线性或逻辑回归是三个不错的初始选择)。这些模型对于获得利益相关者和非技术合作伙伴的认同特别有价值,因为它们很容易解释。如果这个模型够用,那就好了!否则,你就可以转向更多的模型。否则,你可以在以后转向更复杂的东西。例如,在为我们的销售代表训练一个评分模型时,我们注意到随机森林模型和一个更复杂的集合模型的性能是一样的。我们最终保留了第一个模型,因为它很强大,训练速度快,而且容易解释。

从基本特征集开始

一组基本的特征可以让你快速启动和运行。你可以将大部分特征工程工作推迟到需要时再进行。缩小特征空间也意味着计算任务可以以更快的迭代速度运行。领域专家通常会提供有价值的建议,让你从哪里开始。例如,在Shopify,当建立一个系统来预测一个特定商店的行业时,我们注意到所售产品的重量与行业相关。事实上,家具店往往比服装店(衬衫和裙子)销售更重的产品(床垫和沙发)。从这些我们知道是相关的基本特征开始,使我们能够初步了解性能,而不必深入到建立一个特征集。

充分利用现成的解决方案

对于某些任务(特别是与图像、视频、音频或文本有关的任务),使用深度学习来获得良好的结果是至关重要的。在这种情况下,预先训练好的、现成的模型有助于快速、轻松地建立一个强大的解决方案。例如,对于文本处理,一个预先训练好的单词嵌入模型,并将其输入到逻辑回归分类器中,对于最初的发布可能就足够了。如果有需要的话,可以在随后的迭代中根据目标语料库对嵌入进行微调。

3.优化前的测量

我们遇到的一个常见陷阱是过早开始优化机器学习模型。虽然确实有数以千计的参数和超参数需要调整(关于模型架构、目标函数类的选择、输入特征等),但过快地跳到这个阶段会适得其反。在深入研究之前,回答以下两个问题有助于确保你的系统被设置为成功。

1.如何衡量模型的增量影响?

基准对于机器学习模型的发展至关重要。它们允许对性能进行比较。创建一个基准有两个步骤,而第二个步骤经常被遗忘。

选择一个性能指标

该指标应与企业的主要目标一致。做到这一点的最好方法之一是建立对价值含义的理解。例如,98%的准确率在业务范围内意味着什么?在欺诈检测系统的情况下,准确率将是一个糟糕的指标选择,98%的准确率将表明性能不佳,因为欺诈的情况通常很少。在另一种情况下,98%的准确率可能意味着在一个合理的指标上表现出色。

出于比较的目的,性能指标的基线值可以由最初的非机器学习方法提供,正如在 "问自己现在是否是机器学习的正确时机 "一节中所讨论的。

将性能指标与对业务的影响联系起来

设计一个策略来衡量性能改进对业务的影响。例如,如果第一步选择的指标是准确性,第二步选择的策略应该允许量化每个百分点的增长对产品用户的影响。从0.8到0.85的增加是改变了行业的游戏规则,还是对用户来说几乎没有什么影响?这些额外的0.05分是否值得增加时间和复杂性?了解这种权衡是决定如何优化模型的关键,并推动决策,如继续或停止在特定模型中投入时间和资源。

2.你能解释模型所做的权衡吗?

当一个模型表现良好时,我们很容易过早庆祝,并对机器学习是一个具有神奇性能的不透明盒子的想法感到舒服。根据经验,在大约95%的情况下,神奇的性能实际上是系统中某个问题的症状。性能指标选择不当,数据泄露,或未捕获的平衡问题,只是可能出错的几个例子。

能够理解模型性能背后的权衡,将使你能够及早发现任何问题,并避免在优化一个有问题的系统上浪费时间和计算周期。做到这一点的一个方法是调查模型的输出,而不仅仅是其性能指标。

分类系统在一个分类系统中,混淆矩阵是什么样子的?类的平衡是否有意义?
回归模型拟合回归模型时,残差的分布是什么样子的?是否有任何明显的偏差?
计分系统对于一个评分系统,分数的分布是什么样子的?它们是否都是朝着尺度的一端分组的?

订单数据集
预测准确率 98

实际情况
订单是欺诈性的订单不是欺诈性的
预测订单是欺诈性的00
订单不是欺诈性的201,000

准确率为98%的模型输出实例。虽然98%看起来像是一场胜利,但有两个问题在起作用。

  1. 该模型一直在预测 "订单不是欺诈性的"。
  2. 准确度不是衡量模型性能的合适指标。

在这种状态下对模型进行优化是没有意义的,首先需要固定这个指标。

一旦性能指标被设定并与商业影响挂钩,优化各种参数就变得简单了:当优化不能推动任何增量的商业影响时就停止。同样,通过能够解释一个模型背后的权衡,那些原本被表面上的出色表现所掩盖的错误就有可能被及早发现。

4.4.有一个模型迭代的计划

机器学习模型会随着时间的推移而发展。它们可以按照设定的频率重新训练。它们的架构可以被更新,以增加它们的预测能力,或者随着业务的发展,功能可以被添加和删除。当更新机器学习模型时,新模型的推出通常是一个关键部分。我们必须了解我们相对于基线的性能,而且性能不应该有退步。下面是一些帮助我们有效做到这一点的技巧。

设置管道基础设施以比较模型

模型的建立和推出是反复进行的。我们建议投资建立一个管道,以同时训练和实验评估两个或多个版本的模型。根据不同的情况,有几种评估新模型的方法。两个很好的方法是:

  • 如果有可能在不浮现生产中的输出的情况下运行一个实验(例如,对于一个分类器,你可以访问标签),有一个暂存流程就足够了。例如,我们在 "保持简单 "一节中提到的商店行业分类器的案例中就是这样做的。在我们觉得有足够的信心将其推广到生产中之前,该模型的一个主要更新在暂存流程中运行了几周。在可能的情况下,运行一个离线实验是最好的,因为如果有性能下降,它们不会影响用户。
  • 在大多数情况下,在线A/B测试效果很好。通过让一组随机的用户接触我们新版本的模型,我们可以清楚地看到它相对于基线的影响。举例来说,对于一个推荐系统,我们的关键指标是用户参与度,我们要评估与看到基线推荐的用户相比,接触到我们新版本模型的用户的参与度如何,以了解是否有显著的改善。

确保比较是公平的

这些变化是否会影响指标的报告方式?举个例子,在一个分类问题中,如果模型变体被评估的集合和生产的集合之间的类平衡是不同的,那么比较可能是不公平的。同样地,如果我们改变了正在使用的数据集,我们可能无法使用相同的人群来评估我们的生产模型和我们的变体模型。如果有偏见,我们会尝试改变评价的方式来消除它。在某些情况下,可能需要调整或重新权衡指标,以使比较公平。

考虑性能指标可能存在的差异

变体模型的一次运行可能不足以了解它的影响。模型的性能可能由于许多因素而变化,如随机参数初始化或数据如何在训练和测试之间分割。随着时间的推移,在不同的运行之间,根据超参数的微小差异,验证其性能。如果性能不一致,这可能是更大问题的征兆(我们将在下一节讨论这些问题!)。另外,验证性能是否在人群中的关键部分一致。如果这是个问题,可能值得重新权衡指标,以优先考虑关键部分。

比较框架是否引入了偏见?

重要的是,在优化时要意识到过度拟合的风险,并在制定比较策略时要考虑到这一点。例如,使用一个固定的测试数据集会导致你针对这些特定的例子来优化你的模型。将交叉验证、改变测试数据集、使用保留、正则化、以及在涉及随机初始化时运行多个测试等做法纳入比较策略,有助于缓解这些问题。

5.考虑模型随时间变化的稳定性

一个很少被讨论的方面是预测的稳定性,因为一个模型随着时间的推移而演变。假设该模型每个季度都被重新训练,而且性能在稳步提高。如果我们的衡量标准是好的,这就意味着性能在整体上有所提高。然而,个别受试者的预测可能会发生变化,即使是在整体性能提高的情况下。这可能会导致一部分用户对产品产生负面的体验,而团队并没有预见到这一点。

作为一个例子,考虑这样一个情况:一个模型被用来决定一个用户是否有资格获得资助,并且这个资格被暴露给用户。如果用户看到他们的状态波动,这可能会产生挫折感,并破坏对产品的信任。在这种情况下,我们可能更喜欢稳定,而不是边际的性能改进。我们甚至可以选择将稳定性纳入我们的模型性能指标。 第一季度的模型,第二季度的模型。总体准确度提高了,但8个样本中的2个转到了不同的类别

意识到这种影响并测量它是第一道防线。其原因因环境不同而不同。这个问题可能与某种形式的过度拟合有关,尽管不一定。下面是我们的检查表,以帮助防止这种情况:

  • 理解改变模型的成本:考虑改进的性能与改变的预测的影响之间的权衡,以及需要做的工作来管理。避免对模型进行重大改变,除非性能的改善证明了成本的合理性。
  • 优先选择浅层模型而不是深层模型:例如在一个分类问题中,训练数据集的变化比浅层模型更有可能使深层模型在局部位置更新其决策边界。只有在性能收益合理的情况下才使用深度模型。
  • 校准模型的输出:特别是对于分类和排名系统。校准可以突出分布的变化并减少它们。
  • 检查目标函数 条件和正则化:一个条件差的模型的决策边界会发生巨大的变化,即使训练条件只发生微小的变化。

能使你的机器学习项目成功或失败的五个因素

简而言之,在商业环境中构建利用机器学习的产品和工具时,有很多因素需要考虑。仔细考虑这些因素可以决定你的机器学习项目的成功与否。总而言之,要始终记得:

  1. 问自己现在是否是机器学习的正确时机?当发布一个新产品时,最好从一个基线解决方案开始,然后用机器学习来改进它。
  2. 保持简单!简单的模型和功能集通常更容易迭代,也更容易理解,这两点对于机器学习产品的第一个版本都很关键。
  3. 先测量再优化:确保你了解你的性能指标的来龙去脉,以及它如何影响业务目标。对你的模型所做的权衡有充分的了解。
  4. 有一个计划来迭代模型:期待对模型进行迭代改进,并计划如何在新的模型版本和现有版本之间进行良好的比较。
  5. 考虑模型随时间变化的稳定性:了解稳定性对用户的影响,并在你迭代解决方案时考虑到这一点。