机器学习:我从企业学到的经验教训

机器学习:我从企业学到的经验教训

首页冒险解谜金属围棋猎枪英雄更新时间:2024-05-11

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

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

0.ML不仅是训练模型

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

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

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

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

但是,我问他们:

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

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

1.给我一些数据!

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

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

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

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

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

3.脏数据!

数据通常很“脏”

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

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

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

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

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

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.不要预测。告诉我为什么!

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

解决这些问题的一种方法是计算特征重要性,该特征重要性由随机森林、决策树和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.无代码建模:适用于统计人员,主题专家,甚至是不编码但希望直观地构建模型的高管。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved