微信号:pythonbuluo

介绍:最专业的Python社区,有每日推送,免费电子书,真人辅导,资源下载,各类工具.我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动

导致机器学习项目失败的7个原因

2019-04-09 08:10 Python程序员

机器学习正在改变这个世界。然而,并非每一个机器学习项目都能够取得成功。根据在机器学习领域多年的经验,我们总结出了几个常见的导致机器学习项目失败的原因。了解这些问题,以及它们如何产生,将有助于你更好地评估下一个机器学习项目的可行性,最重要的是,这也有助于让项目的实际效果达到你的团队的期望。

    1、不良的数据

    2、选定错误的目标:解释型 VS 预测型

    3、混淆相关性和因果关系

    4、不做探究就进行优化

    5、意料之外的数据偏差

    6、未明确项目终点

    7、选择错误的模型训练周期

1、不良的数据

获得良好的数据对于机器学习来说是至关重要的。这要求数据必须满足整洁性、易得性和相关性的要求。

整洁性要求数据必须是完整的(比如:没有丢失时间数据)、正确的(检验数据的准确性,并在必要的时候进行修正)以及统一的(对于涉及到的所有时间或者事件,其数据格式是一致的)。项目中应该包含现在和将来能够手动或者自动检测数据整洁性的内部流程或者工具。

易得性要求不论是在特定的探究中还是在大规模的模型训练中,都能够快速地获得数据。探究所需的数据应该由一个地方(数据池,数据仓库,或者类似的数据平台)提供,数据科学家能够自由地查询而不需要担心干扰实时系统。这通常需要通过构建一个专门设计的分析数据库来实现。(详见OLAP)

相关性要求在机器学习中所使用的数据必须与项目是相关的。举个例子,如果你想要利用机器学习来了解顾客,你需要获得的数据就不只是顾客的姓名和电子邮箱了,还需要其他的一些信息。如果机器学习的目标是来结果进行预测,那么你的模型训练数据应该包括很多种达到这种结果的范例。

如果你的数据不符合上述要求,那么你的机器学习项目极有可能失败。在确定机器学习的项目的规模之前,请先确保你完全了解了你的数据。


2、选定错误的目标:解释型 VS 预测型

机器学习模型的选择存在一个基本的权衡:要么是优先向人们解释事件规律,要么是预测事件结果。你所选择的目标的类型将会极大地影响到项目的开发过程。

如果一个机器学习的目标是去探知真实世界的规律,或者如果存在限定如何决策的严苛要求,那么你的模型能够对它所研究的事件给出强有力的解释将会比生成极其准确的预测更为重要。所以这就意味着数据转换,以及你的模型的选择,都必须足够精简。

如果你的目标是提供最佳的结果预测,那么将会使用到跟上述不同的工具集。比如,对反馈给模型的数据进行复杂的变换,将有助于凸显那些相对更加重要的差异。你也可以使用复杂的模型,比如神经网络,它的运作更像是一个“黑匣子”。

对于特定的项目,必须尽早地决定其目标类型是解释型还是预测型。错误的目标将会迫使你的团队从头开始一个新的项目。值得注意的是,此时进行的项目将变成探究如何从预测性模型中获得更好的解释,或者如何从解释型模型中得到更准确的预测。

3、混淆相关性和因果关系

相关性并不是因果关系。在应用从机器学习中得到的结果时,必须牢记《Statistics 101》一书中的这句口号。利用机器学习可以发现数据的相关性,但这并不是直接的因果关系。

举个例子,模型可能会得出经常浏览你的网站中常见问题解答页面的人更有可能购买你的产品的结论。但这并不意味这你需要立刻进行一次大规模的营销活动,目的是将所有人都直接引导到常见问题解答页面。在这个例子中,一个很普通的因素,比如顾客对产品的兴趣,更有可能导致这种问题。相反,在顾客浏览过程中,常见问题解答页面中的信息可能并没有及时地提供给顾客,所以你应该尝试让常见问题解答页面的链接更加醒目。

在根据机器学习得出的结果做出战略性经营决策时,有必要通过试验来确实其因果关系。在上述例子中,你可以改变相关因素让一小部分顾客获得不同的感受(比如更加醒目的常见问题解答页面链接),从中观察这个因素是如何影响顾客的购买行为。在这种情况下,机器学习的强大之处在于能够从大量的数据当中找到事件之间的相关性,从而指导实验的进行,来获得全新的和更好的理解。


4、不做探究就进行优化

当你要对机器学习的输出结果进行部署时,建立能够不断验证并持续改进的模型是至关重要的。如果缺乏这一点,你的机器学习项目将无法适应现实世界的变化,这很可能导致部署的项目变成一个“瞎子”。

在构建依照某项操作自动进行决策的模型(例如产品推荐引擎)时,你必须明白这不是简单地将你所谓的“最佳”模型应用于所有用户,而是应该向部分用户推荐一组不同的产品,从中探索实现产品推荐功能的其他方法。如果缺少了这个过程,即便是最好的模型,迟早也会做出错误的决策,这都是因为它停止了学习。

对于解释型模型,应该保证数据始终是动态变化的,这样才能不断地验证所得到的解释的正确性,同时生成新的结果。举个例子,如果之前所使用的机器学习项目发现了一种更好的方式来向你的用户推荐产品,那么就应该留出一部分营销预算来尝试这种新的方式,从而确保当前的策略仍然是有效的。

如果你只是不断地优化机器学习的输出结果,那么项目将因为模型缺乏学习而失败。

5、意料之外的数据偏差

机器学习模型的核心就是以自动化方式来探索数据中所蕴含的结构规律和运作模式。自动化是非常强大的,但也有可能导致一些意外风险。

比如,早期开发的用于辨别己方坦克和敌方坦克的图像识别防御系统,在实验阶段被寄予了厚望,但是最终还是在实际应用中败下阵来。所有用于模型训练的己方坦克图像都是在白天拍摄的,但是最终该模型所能区分的只是白天和晚上,而不是己方坦克和敌方坦克。因为模型训练是自动实现的,所以模型并没有意识到自己所识别的对象是错误的。

亚马逊开发的用于人才招聘的机器学习项目最近宣布失败,因为该模型是利用含有偏差的数据训练得到的。该模型尝试通过对简历进行过滤筛选,从中找到最合适的候选人。但是由于模型是利用以往的招聘信息进行训练的,这些数据中存在明显的性别歧视,导致在筛选过程中将女性候选人排除在外。

在机器学习算法中,真实世界中的规律都通过训练模型所用到的数据反映出来。必须要确保你所使用的数据尽可能正确地反映了现实世界,否则的话,整个项目就很可能无法投入使用。

6、未明确项目终点

数据科学和机器学习项目并不可能真正地“完成”。但为了保证其实用性,任何项目都必须要有终点。开发人员总是会找到方法来提高模型预测结果的准确性或者让模型得出的结论更加令人信服,但是这也会相应地消耗额外的人力资源、计算资源以及对应的商业成本。明确制定项目的开发计划是很有必要的,这样你才能知道,对于特定的项目如何判断项目消耗资源的多少。

目前存在有大量的机器学习算法,而且每天都会有许多新的算法产生,这些算法甚至会有各种各样的实现方式和使用方法。如果你不拿出充足的时间去研究各种不同的模型,那么你将可能错过更适用于你的数据和事件的模型。换个角度,你不可能永远重复地研究如何提高指标的百分点来改进模型。此外,有时得到的数据很可能只是随机噪声,这些数据并不能作为决策依据。综上所述,必须要限制一个项目中所投入的资源的数量,因为这些资源也可以用到其他地方。

我们在Retina所做的工作就是去实践从敏捷软件开发过程中所获得的经验,即不断强调项目终止节点,直到项目结束。我们的想法是从一开始便限制项目所使用的资源,然后反复地从模型中得到结果并根据效果来决定是否需要继续添加更加复杂的内容。这就确保了尽快实现目标,同时也避免了消耗大量资源在遥不可及的目标上。


7、选择错误的模型训练周期

机器学习的模型通过数据来感知和理解真实世界。但是世界是不断变化的,你必须在开发过程中考虑世界变化的速率。

如果模型是在很短的时间内进行训练,那么该模型将无法应对一些不常发生的情况。比如,模型可能会忽略圣诞假期对于顾客购买行为的影响。

但是如果模型训练时间过长,那么模型可能会试图去理解过去的世界是怎样的,而不会去关注未来的世界将如何发展。比如,你可能无意中模拟了一场发生在10年前的大衰退期间的行为。

适当的模型训练周期,必须保证在模型训练周期内能够挖掘到你所需的变化规律,所以最终还是需要根据实际情况来确定。模型训练周期的确定应该由机器学习开发团队和基于某些探究分析应用模型结果的人来共同完成。不要等到机器学习项目已经结束了才来考虑模型训练周期。


英文原文:https://retina.ai/blog/7-ways-machine-learning-projects-fail/

 
Python程序员 更多文章 做测试的工资是不是永远都赶不上开发? 为什么Fastly喜欢QUIC和HTTP\/3 Python并发:线程和锁 如何将Django Admin制作成一个轻量级的仪表控制界面——在Djongo Admin界面中添加数据汇总 Python异步IO实现全过程
猜您喜欢 Go 性能优化技巧 3\/10 为什么我们经常做无用功 | 开源思维 美团酒旅实时数据规则引擎应用实践 Java 日期时间处理 思考,快与慢(P67)