纯粹在学术上构建机器学习模型与为企业(例如制造、金融服务、零售、娱乐、医疗保健)提供端到端数据科学解决方案之间存在巨大差异。在机器学习方面,企业最常面临的问题是什么?除了训练机器学习模型,我们还能做什么?如何准备资料?如何扩展数据集?为什么特征工程如此重要?如何将模型应用到生产实践中,如何成为一个完全可行的系统?如果所有的数据科学工具都可以从开源软件中获取,那么数据科学平台还存在吗?本文将回答上述部分问题,揭示当前机器学习中遇到的挑战和困难。通过具体行业案例进一步提出最佳解决方案。机器学习不仅仅是训练模型许多数据科学家对机器学习仍然存在一个普遍的误解。“假设给你一个具有某些特征的数据集,需要推测其中一个变量,你会怎么做?”很多数据科学家会这样回答:“我会把数据集拆分成训练/测试部分,运行LogisticRegression、RandomForest、SVM、DeepLearning、XGBoost程序……然后计算accuracy、recall、F1score……最后选出最好的模型。”然而,有些问题却被忽略了:“这个过程你有没有看过数据本身?如果你漏掉了一些值怎么办?如果你得到错误的值或坏数据怎么办?你如何设置分类变量?你如何做特征工程?”成功创建端到端机器学习系统的七个必要步骤,包括数据收集、数据管理、数据探索、特征提取、模型训练、评估和部署。给我数据!作为数据科学家,主要资源显然是数据。但有时数据收集本身有其自身的困难。数据科学团队可能需要花费数周甚至数月的时间来获取合适的数据集。困难包括:访问:大多数企业数据都是敏感的,尤其是与政府、医疗保健、数据共享,签署保密协议是常规流程数据分散:数据分散在一个组织内的不同部门之间是很常见的,要获得整体数据,需要所有部门的同意专业指导:访问数据往往是不够的,由于获取的数据量很大,需要领域专家指导团队从h中选择合适的数据集巨大的数据库。有时,专家的缺席会成为项目瓶颈,因为核心业务运营不堪重负。隐私:混淆和匿名化已成为两个独立的研究领域,在处理敏感数据时尤为重要。标签:了解实际情况或标签通常很有帮助,因为这可以让团队应用很多可以监控的学习算法。但是,有时由于法律限制,标记数据成本高昂或团队无法使用。在这些情况下,可以应用数据聚类等不可监控的方案。数据生成器:如果数据或标记不可用,可以模拟它们。除了了解数值变量的似然分布和名义变量的类别分布之外,了解数据的结构有助于使用数据生成器。如果数据结构比较分散,可以使用Tumblr平台,上面有很多tagged图片。此外,Twitter提供了大量的自由文本,Kaggle有特定领域和行业相关的数据集和解决方案。大数据并不大近十年来,大数据供应商一直在极力宣传,强调对大数据规模和功能的需求,掀起了一股大数据热潮。因此,“大数据不算大”的观点引起了更大的争议。然而,我们需要清楚地区分原始数据(包括对手头问题没有贡献的数据)和特征集(机器学习算法的输入矩阵)。将原始数据处理成特征集的过程称为数据处理,包括以下步骤:丢弃无效/不完整/脏数据。根据我们的经验,此类数据可以占所有数据的一半。聚合一个或多个数据集,包括数据连接和类似组的聚合等操作。特征选择/提取。例如,删除可能不相关的特征(如唯一标识符),并应用其他降维技术(如主成分分析)。使用稀疏数据表示或函数哈希来减少具有许多零值的数据集的内存占用。完成数据准备后,不难发现最终的特征集——也就是机器学习模型的输入内容——要比初始的小很多;另一种常见情况是R或scikit-learn等记忆框架足以训练模型。如果特征集的规模仍然很大,可以使用ApacheSpark等大数据工具,虽然算法的选择有限。脏数据!脏数据很常见人们当然希望学习一些尚未理解的东西,但这非常重要:脏数据很常见。在企业合作中,很多客户常常为自己的数据湖建设感到自豪,比如数据湖有多壮观,能从中汲取多少洞察。所以,作为数据科学家,我们脑海中的画面是这样的:但当客户拿出实际数据时更像是这样:在这种情况下,ApacheSpark等大型框架就显得更加重要,因为所有数据监督的过程并且需要对所有原始数据完成转换。以下是几个典型的监管示例:异常检测:负年龄、浮点邮政编码和零值信用评分都是无效数据,不纠正这些值会在训练模型时产生严重的偏差。Missing/wrongvaluepadding:显然,处理错误/缺失值最常见的方法是丢弃它们。另一种选择是填充。例如,用对应特征的均值、中值或众数替换缺失值/错误值。另一种方法是插值法,比如在缺失值的情况下建立模型来预测特征。此外,领域知识也可以用于填充。例如,在处理患者数据时,一个特征是推断患者是否患有癌症。如果缺少此类信息,可以查阅访谈数据以确定患者是否看过肿瘤科医生。虚拟编码和函数哈希:这两种方法在将分类数据转换为数值方面非常有效,尤其是在基于系数的算法中。例如,一个特征是StateName,它显示美国各州的名称(例如FL、CA、AZ)。将FL编码为1,将CA编码为2,将AZ编码为3显示顺序和权重。这意味着AZ将大于FL,而CA将是FL的两倍。one-hotencoding——也称为dummyencoding——提供了一种解决方案,将类别列映射为多个双列,其中一个是类别值。归一化:如果有不同层次的特征,与系数相关的算法就会有偏差。例如,特征年龄以[0,100]范围内的年表示,而工资以[0,100,000]范围内的美元表示。优化算法可能更关注工资,因为它们的绝对数量级更大。因此,更推荐归一化算法和其他常用方法,如Z值估计、归一化(如果数据正常)和min-max特征归一化。Binning:将实值列映射到不同类别非常有效,例如将回归问题转换为分类问题。假设您要估计航班延误进港的分钟数。一种选择是猜测航班是否会提前、准时或晚点到达,并确定每个类别的取值范围。特征工程无处不在总结起来,特征就是机器学习算法需要学习的特征。正如人们所预料的那样,嘈杂或不相关的数据会影响模型的质量,因此具有良好的表征至关重要。以下是可用于特征工程的一些策略:确定要预测的内容。每个实例代表什么?顾客?交易?病人?账单?确保特征集的每一行都对应一个实例。避免使用唯一标识符。它们不仅在大多数时候不起作用,还会导致严重的过度拟合,尤其是在使用像XGBoost这样的算法时。应用领域知识来派生有助于衡量成功/失败的新功能。可从就诊次数推断医患风险;从上个月的跨境交易总额可以推断出欺诈的可能性;信用风险可以从贷款申请金额与年收入的比率来推断。使用自然语言处理技术从分散的自由文本中获取特征。如LDA、TF-IDF、word2vec和doc2vec。在存在大量特征的情况下,可以采用主成分分析、t分布域嵌入算法等降维方法。异常检测无处不在如果您要选择企业机器学习最常见的用例之一,那就是异常检测。无论您是在研究欺诈检测、生产测试、客户流失、医患风险、客户不诚实还是系统崩溃预测,问题始终是:我们能否大海捞针?这就引出了另一个与不平衡数据集相关的话题。下面是一些用于异常检测的常用算法:Autoencoders一类分类算法,例如一类支持向量机。置信区间使用过采样和欠采样的聚类分类不平衡数据很常见不平衡数据假设您有一个标有信用卡交易的数据集。0.1%的交易为虚假信息,其余99.9%为正常交易。如果你要创建一个从来没有虚假交易的模型会发生什么?该模型会在99.9%的时间内给出正确答案,因此准确率为99.9%。这种常见的精度谬误可以通过考虑不同的指标(例如精度和召回率)来避免。这些由术语真阳性(TP,真阳性)、真阴性(TN,真阴性)、假阳性(FP,假阳性)、假阴性(FN,假阴性)表示:真阳性=所有实例都正确推断为阳性真阴性=所有实例都被正确推断为阴性假阳性=所有实例都被错误推断为阳性假阴性=所有实例都被错误推断为阴性许多误报的例子。Precision=TruePositives/(TruePositives+FalsePositives)Recall=TruePositives/(TruePositives+FalseNegatives)需要注意的是precision不利于falsepositives,recall也不利于falsenegatives。从不推断虚假信息的模型具有零召回率和未知精度。相反,一个总是推断错误信息的模型具有100%的召回率和非常低的精度——这是由于大量的误报实例。强烈建议不要使用接受者操作特征(FPR)曲线进行异常检测。因为假阳性率——FPR的基础——很大程度上取决于数据集中负例的数量(例如,假阳性+真阴性),因此尽管有大量假阳性实例,但FPR仍然很小。ReceiverOperatingCharacteristicCurve=FalsePositives/(FalsePositives+TrueNegatives)相反,FalseDiscoveryRate(FDR)有助于更好地理解误报实例对异常检测模型的影响:FalseDiscoveryRate=1–Precision=FalsePositives/(TruePositives+FalsePositives)停止预测,解释原因!有些项目的目的不是创建实时预测模型,而是解释假设或分析哪些因素可以解释特定行为,因为大多数机器学习算法都是基于相关性而非因果关系。以下是一些示例:哪些因素导致患者的风险增加?哪些药物对验血结果影响最大?哪些保险计划参数值最大化利益?不诚实的客户有哪些特征?流失客户的特征是什么?解决这类问题的一种可行方法是计算特征重要性,这可以从随机森林、决策树和XGBoot等算法中获得。或者,LIME或SHAP等算法有助于解释模型和预测,即使它们源自神经网络或其他“黑匣子”模型。调整超参数机器学习算法有两种类型的参数,参数和超参数。不同的是,前者是通过算法直接估计出来的——比如回归系数或者神经网络的权重——而后者则不然,必须由用户手动设置——比如总次数森林中的树木、神经网络的正则化方法或支持向量机的核函数。为机器学习模型设置正确的超参数值非常重要。例如,SVM的线性核无法对不可线性分离的数据进行分类。再举一个例子,如果最大深度和分割数设置得太高,树分类器可能会过拟合;虽然最大特征数设置得太低,但可能无法充分适应。寻找超参数的最优值是一个极其复杂的优化问题。以下是一些建议:了解您的超参数优先级。在森林中,最相关的参数可能是树木的数量和最大深度。然而,对于深度学习,优先级可能是学习率和层数。使用搜索技术:网格搜索和随机搜索。后者优先。使用交叉验证:单独设立一个测试组,将其余数据分成k层并迭代k次,每一层都进行验证(例如调整超参数),其余的进行训练学习。最后,计算所有层次结构的平均质量度量。深度学习:灵丹妙药?近年来,深度学习一直是学术研究和产业发展的热点。TensorFlow、Keras和Caffe等框架使复杂的神经网络能够通过高级应用程序编程接口(API)快速部署。应用无数,包括计算机视觉、聊天机器人、自动驾驶汽车、机器翻译,甚至游戏——同时击败世界顶级围棋高手和电脑棋手!深度学习最重要的前提之一是数据增加后继续学习的能力,这在大数据时代尤其有效(见下图)。这种持续学习能力,结合图形处理单元等最近的硬件发展,已经能够执行大型深度学习作业。以前,由于资源限制,这是明确禁止的。那么,这是否意味着深度学习是解决所有机器学习问题的灵丹妙药呢?并不真地。原因如下:简单性:神经网络模型的结果高度依赖于它的结构和超参数。在大多数情况下,要正确调整模型,您需要网络构建方面的专业知识。此外,试错步骤在这里非常重要。可解释性:如前所述,相当多的实际案例不仅需要做出预测,还需要解释预测背后的原因:贷款申请为什么被拒绝?保单价格为何上涨?尽管基于树和基于系数的算法可以说明神经网络不能。质量:根据经验,对于大多数结构化数据集,神经网络模型的质量不一定优于RandomForests和XGBoot。深度学习的优势在处理分散数据(如图像、文本、音频)时更加突出。底线:不要用霰弹枪射苍蝇。RandomForests和XGBoot等机器学习算法已经足以解决大多数结构化和监控问题,而且这些算法也更容易调整、应用和解释。深度学习在散乱数据问题和强化学习中的作用不言而喻。不要泄露数据在处理预测航班到达延误的项目时,如果使用数据集中的所有可用特征,模型的准确率可以达到99%。但是,希望您会意识到您可能会使用出发延误来推断到达延误。这是典型的数据泄露案例。如果我们在预测时使用任何不可用或未知的功能,就会造成数据泄露。大家小心!当一切都可以在开源软件中找到时,平台有什么用?构建机器学习模型从未像现在这样容易。几行R或Python代码就足以构建模型,甚至还有大量在线资源和课程可用于训练复杂的神经网络。如今,ApacheSpark对数据准备非常有帮助,它甚至可以规范化大型数据集。此外,docker和plumber等工具通过超文本传输??协议(HTTP)简化了机器学习模型的部署。似乎完全依靠开源平台资源,就可以搭建一个端到端的机器学习系统。就概念证明而言,情况可能确实如此。一个大学生完全可以依靠开源代码来完成毕业论文。但对于企业来说,事情并没有那么简单。毕竟开源软件也有很多缺陷。以下是企业选择大数据科学平台的几大理由:开源集成:几分钟即可启动运行,支持多环境,版本更新信息透明。团队协作:轻松共享数据集、数据链接、代码、模型、环境和部署。治理和安全:不仅管理数据,还管理所有分析资产。模型管理、部署和重新确定模型偏差:检测并纠正存在性别或年龄偏差的模型。辅助数据管理:使用可视化工具解决数据科学中最棘手的问题。图形处理单元:快速部署和配置TensorFlow等深度学习框架以获得最佳性能。无代码建模:专为不会编码但希望构建可视化模型的统计学家、项目专家和经理而设计。
