点击上方关注,All in AI中国

关于机器学习那些事儿:我们从企业学到哪些经验教训?

纯学术的机器学习(ML)模型的训练与建立端到端数据科学解决方案与实际企业问题之间存在巨大差异。本文总结了我们团队与来自不同行业的数十家企业客户(包括制造业、金融服务业、零售业、娱乐业和医疗保健业等)合作两年后所吸取的经验教训。企业面临的最常见的ML问题是什么?除了训练ML模型,还有什么?如何解决数据准备问题?如何扩展到大型数据集?为什么特征工程如此重要?如何从生产中的模型转变为功能完备的系统?如果在开源中提供每种数据科学工具,我是否需要一个数据科学平台?这些都是将要解决的一些问题,通过特定的行业示例揭示一些挑战、陷阱和最佳实践。

0.ML不仅是训练模型

我意识到这是一种普遍存在的误解。当我采访有抱负的数据科学家时,我通常会问:

“假设你有一个具有某些特征的数据集,目的是预测某个变量,你会做什么?”

令我沮丧的是,他们的答案往往是这样的:

“我将数据集拆分为训练/测试,运行Logistic回归、随机森林、SVM、深度学习、XGBoost ......(以及一些闻所未闻的算法),然后计算精度、召回率、F1得分,...(以及一些闻所未闻的指标),最终选择最佳模型”。

但是,我问他们:

“你有没看过这些数据?如果您缺少值,该怎么办?如果您的错误值/错误数据怎么办?您如何映射分类变量?你是如何做特色工程的?”

在本文中,我将介绍成功创建端到端机器学习系统所需的七个步骤,包括数据收集、数据管理、数据探索、特征提取、模型训练、评估和部署。

1.给我一些数据!

关于机器学习那些事儿:我们从企业学到哪些经验教训?

作为数据科学家,数据显然是我们的主要资源。但有时,获取数据也具有挑战性,数据科学团队可能需要数周甚至数月才能获得正确的数据资产。一些挑战是:

  • 访问:大多数企业数据都非常敏感,尤其是在与政府、医疗保健和金融行业打交道时。在共享数据资产方面,保密协议(NDAs)是标准程序。
  • 数据分散:在一个组织中,数据分散在各个单位的情况很常见,通常需要来自不同方的批准。
  • 专业知识:访问数据通常是不够的,因为可能有这么多来源,只有主题专家(SME)知道如何导航数据湖并为数据科学团队提供正确的数据资产。中小企业也可能成为数据科学项目的瓶颈,因为它们通常会被核心企业运营所淹没。
  • 隐私:混淆和匿名化已经成为各自的研究领域,在处理敏感数据时势在必行。
  • 标签:具有可用的基础事实或标签通常很有用,因为它允许应用各种监督学习算法。但是,在某些情况下,标记数据可能过于昂贵,或者由于法律限制,标签可能无法使用。在这些情况下,诸如聚类之类的无监督方法很有用。
  • 数据生成器:当数据或标签不可用时的另一种方法是模拟它们。在实现数据生成器时,获得有关数据模式、数值变量的概率分布以及名义变量的类别分布的信息非常有用。如果数据是非结构化的,Tumblr是标记图像的重要来源,而Twitter可能是自由文本的重要来源。 Kaggle还在许多领域和行业提供各种数据集和解决方案。

2.大数据往往不是那么大

这是一个有争议的问题,尤其是在大数据供应商过去十年所做的大肆宣传之后,强调了对可扩展性和性能的需求。尽管如此,我们需要区分原始数据(即,可能与手头问题无关的所有部分)和特征集(即ML算法的输入矩阵)。从原始数据转到功能集的过程称为数据准备,通常包括:

  1. 丢弃无效/不完整/脏数据,根据我们的经验,这些数据可能达到记录的一半。
  2. 聚合一个或多个数据集,包括联接和组聚合器等操作。
  3. 特征选择/提取,例如,移除可能不相关的特征,例如唯一ID,并应用其他降维技术,例如主成分分析(PCA)。
  4. 使用稀疏数据表示或特征哈希来减少具有许多零值的数据集的内存占用。
关于机器学习那些事儿:我们从企业学到哪些经验教训?

在完成所有数据准备步骤之后,不难发现最终的特征集 - 它将是机器学习模型的输入 - 将会小得多;并且,看到R或scikit-learn等内存框架足以训练模型的情况并不少见。如果功能集非常庞大,那么像Apache Spark这样的大数据工具会派上用场,但它们可能只有一组有限的算法集可用。

3.脏数据!

关于机器学习那些事儿:我们从企业学到哪些经验教训?

数据通常很“脏”

是的,我最好告诉你一些你不知道的事情,可能怎么强调都不为过。数据很脏,在我们的大部分活动中,客户都很自豪和兴奋地谈论他们的数据湖,他们的数据湖是多么美丽,以及他们迫不及待地想要从中获得多少洞见。因此,作为数据科学家,这成为了我们脑海中的画面:

关于机器学习那些事儿:我们从企业学到哪些经验教训?

尽管如此,当他们实际分享他们的数据时,实际上看起来更像是这样的:

关于机器学习那些事儿:我们从企业学到哪些经验教训?

这就是Apache Spark等可扩展框架的关键所在,因为所有数据管理转换都需要对整个原始数据执行。一些典型的策展任务是:

  • 异常值检测:负时间、浮点邮政编码或信用评分为零只是无效数据的几个示例。在训练模型时,不纠正此值可能会引入高偏差。
  • 缺失/不正确的值估算:解决错误/缺失值的明显方法是简单地丢弃它们。替代方案是插补,即通过相应属性的均值、中值或模式替换缺失/不正确的值。另一种选择是插值,即构建模型以预测具有缺失值的属性。最后,领域知识也可用于估算。假设我们正在处理患者数据,并且有一个属性表明患者是否患有癌症。如果缺少此类信息,可以查看预约数据集并查明患者是否与肿瘤科医生有过预约。
  • 虚拟编码和特征哈希:这些对于将分类数据转换为数字非常有用,特别是对于基于系数的算法。假设存在指示美国状态的属性状态(例如,FL,CA,AZ)。将FL映射到1,将CA映射到2,将AZ映射到3会引入秩序和大小,这意味着AZ将大于FL,CA将是FL的两倍。单热编码(也称为虚拟编码)通过将分类列映射到多个二进制列来解决此问题,每个列对应一个类别值。
  • 缩放:当特征处于不同尺度时,基于系数的算法会经历偏差。假设年龄在[0,100]内的年份给出,而工资在[0,1000]内以美元给出。优化算法可以为工资分配更多权重,因为它具有更高的绝对值。因此,通常建议标准化,常用方法包括z评分或标准化(当数据正常时)和最小 - 最大特征缩放。
  • 分箱:将实值列映射到不同的类别可能很有用,例如,将回归问题转换为分类问题。假设您有兴趣以分钟为单位预测航班的到达延误。另一种方法是预测航班是早到、准时还是晚,为每个类别都定义范围。

4.这一切都与特征工程有关

关于机器学习那些事儿:我们从企业学到哪些经验教训?

简而言之,特征是ML算法将从中学习的特征。正如预期的那样,嘈杂或不相关的特征会影响模型的权重,因此拥有良好的特征至关重要。特征工程的一些策略是:

  • 定义您想要预测的内容。每个实例代表什么?一个客户?交易?病人?一张票?确保特征集的每一行对应一个实例。
  • 避免使用唯一ID。它们不仅在大多数情况下无关紧要,而且会导致严重的过度拟合,尤其是在应用XGBoost等算法时。
  • 使用领域知识来推导有助于衡量成功/失败的新特征。住院次数可能是患者风险的指标;过去一个月的外汇交易总额可能是欺诈的一个指标;所要求的申请贷款额与年收入之比可能是信贷风险的指标。
  • 使用自然语言处理技术从非结构化自由文本中派生特征。一些例子是LDA、TF-IDF、word2vec和doc2vec。
  • 如果存在非常多的特征,则使用降维,例如,PCA和t-SNE。

5.异常检测无处不在

关于机器学习那些事儿:我们从企业学到哪些经验教训?

如果我在企业中选择一个最常见的ML用例,那将是异常检测。无论我们是指欺诈检测、制造测试、客户流失、患者风险、客户违约、系统崩溃预测等,问题始终是:我们能否在大海捞针中找到针头?这就引出了我们的下一个主题,它与不平衡的数据集有关。

一些常见的异常检测算法是:

  1. 自动编码器
  2. 一类分类算法,如一类SVM
  3. 置信区间
  4. 聚类
  5. 使用过采样和欠采样进行分类

6.数据往往不平衡

关于机器学习那些事儿:我们从企业学到哪些经验教训?

数据不平衡

假设您有一个标有信用卡交易的数据集。这些交易的0.1%被证明是欺诈性的,而其中99.9%是良好的正常交易。如果我们创建一个模型,表明从来没有欺诈,猜猜是什么?该模型将在99.9%的案例中给出正确答案,因此其准确率将为99.9%!通过考虑精度和召回等不同指标,可以避免这种常见的准确性谬误。这些是根据真阳性(TP),真阴性(TN),假阳性(FP)和假阴性(FN)来定义的:

TP =正确预测为正数的实例总数

TN =正确预测为负数的实例总数

FP =错误预测为正数的实例总数

FN =错误预测为负数的实例总数

在典型的异常检测场景中,我们的目标是最小化假阴性 - 例如,忽略欺诈性交易,不识别有缺陷的芯片,或者将病人诊断为健康 - 同时不会产生大量的假阳性。

精度= TP /(TP + FP)

召回= TP /(TP + FN)

注意精度会惩罚FP,而召回惩罚FN。一个从未预测欺诈的模型将具有零召回和未定义的精度。相反,总是预测欺诈的模型将具有100%的召回率,但由于大量的假阳性,其精确度非常低。

我强烈反对在异常检测中使用接收器操作特性(ROC)曲线。这是因为ROC曲线依赖的假阳性率(FPR)受到数据集中负面实例(即FP + TN)数量的严重偏差,即使存在大量的FP,导致可能很小的FPR。

FPR = FP /(FP + TN)

相反,错误发现率(FDR)有助于更好地理解FP在异常检测模型中的影响:

FDR = 1 - 精度= FP /(TP + FP)

7.不要预测。告诉我为什么!

我遇到过几个项目,其目标不是创建一个模型来实时进行预测,而是解释一个假设或分析哪些因素解释某种行为 - 这是为了采取一些盐,鉴于大多数机器学习算法都是基于相关性而非因果关系。一些例子是:

  • 哪些因素会使患者陷入高风险?
  • 哪种药物对血液检测结果的影响最大?
  • 哪个保险计划参数值最大化?
  • 客户的哪些特征使他更容易犯罪?
  • churner的概况是什么?

解决这些问题的一种方法是计算特征重要性,该特征重要性由随机森林、决策树和XGBoost等算法给出。此外,LIME或SHAP等算法有助于解释模型和预测,即使它们来自神经网络或其他“黑盒”模型。

8.调整超参数

机器学习算法具有参数和超参数。它们的不同之处在于前者是由算法直接估计的 - 例如,回归系数或神经网络的权重 - 而后者不是由使用者设定,而是需要由用户设置 - 例如,随机森林、神经网络中的正则化方法,或支持向量机(SVM)分类器的核函数。

为ML模型设置正确的超参数值可以产生巨大的差异。例如,SVM的线性内核将无法对不可线性分离的数据进行分类。如果最大深度或分割数量设置得太高,则基于树的分类器可能过度拟合,或者如果它们的最大特征数量设置得太低则可能不合适。

找到超参数的最佳值是一个非常复杂的优化问题。以下是一些建议:

  1. 了解超参数的优先级。在随机森林中,树木的数量和最大深度可能是最相关的,而对于深度学习,可以优先考虑学习速率和层数。
  2. 使用搜索策略:网格搜索或随机搜索。后者是优选的。
  3. 使用交叉验证:设置单独的测试集,将剩余数据分成k个折叠,并使用每个折叠迭代k次以进行验证(即,调整超参数),剩余的用于训练。最后,计算所有折叠的平均质量指标。

9.深度学习:灵丹妙药?

在过去几年中,深度学习一直是研究和产业发展的重点。 TensorFlow、Keras和Caffe等框架现在可以通过高级API快速实现复杂的神经网络。应用程序是无数的,包括计算机视觉、聊天机器人、自动驾驶汽车、机器翻译,甚至游戏 - 击败世界上最顶尖的围棋和国际象棋电脑

深度学习背后的主要前提之一是它能够随着数据量的增加继续学习,这在大数据时代尤其有用(见下图)。这与硬件(即GPU)的最新发展相结合,允许执行由于资源限制而过去禁止的大型深度学习作业。

关于机器学习那些事儿:我们从企业学到哪些经验教训?

那么......这是否意味着DL始终是解决任何机器学习问题的方法?并不是的。原因如下:

简单

神经网络模型的结果非常依赖于网络的体系结构和超参数。在大多数情况下,您需要一些网络架构方面的专业知识才能正确调整模型。在这方面还有一个重要的试错的组成部分。

可解释性

正如我们之前看到的,许多用例不仅需要预测,还需要解释预测背后的原因:为什么贷款被拒绝?或者为什么保险单价格会上涨?虽然基于树和基于系数的算法直接允许可解释性,但神经网络不是这种情况。在本文中,介绍了一些解释深度学习模型的技巧。

质量

根据我们的经验,对于大多数结构化数据集,神经网络模型的质量不一定比Random Forests和XGBoost的质量更好。 DL擅长的地方实际上是涉及非结构化数据时,即图像、文本或音频。底线:不要用猎枪杀死一只苍蝇。诸如Random Forest和XGBoost之类的ML算法足以应对大多数结构化监督问题,也更容易调整、运行和解释。让DL在非结构化数据问题或强化学习中说话。

10.不要让数据泄露

在研究预测航班到达延迟的项目时,我意识到当我使用数据集中的所有可用功能时,我的模型突然达到了99%的准确率。我遗憾地意识到我使用出发延迟作为到达延迟的预测因子。这是数据泄漏的典型示例,当用于创建模型的任何特征在预测时不可用或未知时,就会发生数据泄漏。

关于机器学习那些事儿:我们从企业学到哪些经验教训?

11.开源给了我一切。为什么我需要一个平台?

构建机器学习模型从未如此简单。几行R或Python代码就足以满足这种需求,并且有大量的资源和教程可以在线训练复杂的神经网络。现在,对于数据准备,Apache Spark非常有用,甚至可以扩展到大型数据集。最后,像docker和plumbr这样的工具可以通过HTTP请求简化机器学习模型的部署。所以看起来人们可以构建纯粹使用开源堆栈的端到端ML系统。

这对于建立概念的证明是成立的。一个正在写论文的研究生肯定会受到开源的保护。然而,对于企业来说,情况有点不同。

关于机器学习那些事儿:我们从企业学到哪些经验教训?

别误会我的意思。我自己也是开源的忠实粉丝,因为有很多很棒的工具,但与此同时,也存在很多差距。这些是企业选择数据科学平台的部分原因:

A.开源集成:在几分钟内启动并运行,支持多种环境,以及透明的版本更新。

协作:轻松共享数据集、数据连接、代码、模型、环境和部署。

C.治理和安全:不仅包括数据,还包括所有分析资产。

d.模型管理、部署和再训练。

F.模型偏见:检测并纠正受性别或年龄而产生偏见的模型。

E.辅助数据管理:处理用于解决数据科学中最痛苦的任务的可视化工具。

G. GPU:立即供应和配置以实现深度学习框架的最佳性能,例如TensorFlow。

H.无代码建模:适用于统计人员,主题专家,甚至是不编码但希望直观地构建模型的高管。

相关文章