数据科学快速成为整个行业中开发人员和管理人员的关键技能,它似乎也非常有趣。但它相当复杂——工程分析选项有许多,你很难知道自己做得对不对或者哪里是陷阱。在该系列文章中,我们将探讨如何利用数据科学——从已经采用并成功实施数据科学的人那里,了解哪里需要数据科学哪里不需要以及如何让它成为你的资产。
这篇文章是“理解数据科学”系列文章的第一部分。你可以通过 RSS 进行订阅,以便接收更新通知。
本文要点
- 数据科学是一组跨学科技术的统称,它可以从数据中提取出有用的观点、预测或知识。
- 要成功实施数据科学项目,其中一个最大的决定因素是选择并定义好需要解决的问题。
- 现在有许多很好的开源数据科学程序库,大多数是用 Python、Java 或 C++ 编写的。
- 为了实际地解决问题,业务上下文会设定一个任何预测模型都需要满足的阈值。
- 交叉验证是一种不错的完整性检查方法,可以保证你使用了一个合理的模型,当投入生产环境时不会出现不好的情况。
企业越来越意识到,有许多最紧迫的问题,只要稍微运用一点数据科学就可以解决。几年前,你可能曾经扬言,用一段非常短的 shell 脚本替换掉某个人,现在,你可以使用一个非常小的预测模型替换掉更多的人。
如果你阅读 InfoQ,那么你很可能是一位高级软件开发人员或架构师,你习惯于处理数据,但目前可能并没有做多少数据科学方面的工作。我希望让你相信,数据科学是一个值得探索的领域,因为它是一项有趣的技术挑战,同时也能让你对所服务的组织产生重大的影响。
数据科学是一组跨学科技术的总称,它可以从数据中提取出有用的观点、预测或知识——需要统计、编程、数据挖掘和机器学习等要素。它出现在各个领域,有些确实是复杂伤神,但也有一些要平凡普通许多。数据科学是消费互联网背后的魔法力量,如 Amazon 的图书推荐或 LinkedIn 的“你可能认识”。它也是一些新生事物的基础,如自动驾驶汽车就使用这些技术来学习如何安全地驾驶。它还支撑着一些日常的实用应用程序,像超市忠诚计划,如 Tesco 的 Clubcard,它可以计算出应该给你发送什么消费券。
这些应用程序背后的理论已经存在了几十年了。但是,也只是在过去的十年中,随着按小时计费的廉价云服务器、无所不在的数据收集、分布式存储和处理、经过实战测试的机器学习程序库等的出现,将数据科学应用于日常业务已经成为一个不错的实践选择。这是一个使用新的数据科学解决旧的业务问题的激动人心的时代。
不过,业务问题的定义经常模糊、复杂,而且还有成功的条件和依赖关系,就是说,只有特定类型的模型或达到了一定的准确率(对实际正确的样本作出正向预测的比例)和召回率(模型找到的真“正”的样本的比例)水平才可以解决它们。本文将介绍其中一些最常见的挑战及最佳的应对方法供技术人员参考,以便他们可以最大限度地利用数据。
问题选择
决定成功的其中一个最重要的因素是选择并定义好要解决的问题。那么,在这个领域里,“好”是指什么?它是指:
- 解决方案有足够的影响力,可以证明你的工作成果;
- 相关数据以可用的格式存储——平面文件或 CSV 一般就可以,专用格式或复杂的结构会更有效;
- 有大量的数据需要处理——正如 Peter Norvig 评价谷歌的那句名言“我们并没有更好的算法,我们只是有更多的数据”;
- 来自“业务”的专家同事们有兴趣并愿意参与到数据科学过程——如果你身边有具有丰富业务经验的同事,帮你选出最有用的数据源,告诉你实体在数据中的位置,并构建出良好的特性输入你的算法,就可以避免进入许多死胡同。
基础知识指南
数据科学是一个统称,但有几个具体的技术分类:
- 人工智能是一个最宽泛的术语。它是指过去 60 年里人们使用计算机复制人类智力各个方面的多次尝试;这可以包含所有类型的学习和推断系统,使用了许多不同类型的方法。
- 机器学习是人工智能的一个子集,在数据科学家的工具箱中居于主要地位。它是一个包含许多不同方法的技术集,可以使用算法在数据集中发现模式,并作出预测。
- 深度学习是机器学习的一个分支,它使用深度图方法(例如神经网络)。与其他大多数机器学习方法相比,深度学习方法更像“大脑”——那是说,它们非常强大,但计算也非常密集,结果很难解释。最近,它们变得越来越流行,因为新的程序库及更强大更廉价的硬件让它们更可承受也更可用。
工具选择
当前有许多开源数据科学程序库,大多数是用 Python、Java 或 C++ 编写的。特别是去年,有用的深度学习工具(尤其是谷歌的 TensorFlow )呈现爆发式增长,可以用于复杂的、超大规模的机器学习,如图像识别,并且 AI 领域取得了一些令人印象深刻的成果。尽管这些工具很酷,但对于大多数应用程序而言,开始的时候选择一个更简单的模型(比如使用 scikit-learn,这是一个流行的 Python 程序库,它所包含的工具适用于最常见的数据挖掘和数据分析任务)和建模技术(比如简单的逻辑回归)才是明智的选择——在数据科学的世界里,要加倍运用 YAGNI 原则。简单的模型理解和调试起来都要容易许多,而且一般来说,与选择一个更复杂的程序库相比,更多的数据和更好的特性选择对你而言要有利得多,当你需要对模型进行优化时,前者更可能让你陷入困境。 Cross Validated 是数据科学领域的 StackOverflow ,非常有用,从中可以找到不错的代码片段。
成功条件
为了实际地解决问题,业务上下文会设定一个任何预测模型都需要满足的阈值。下面几个方面是你需要重点考虑的。
准确率和召回率:任何预测模型都有准确率和召回率这两个指标。第一步非常重要,就是要弄清楚模型的准确率和召回率达到什么水平才能解决问题。例如,你可能需要通过建模计算出你们公司的哪些客户考虑转向另一个供应商。如果你所拥有的资源只能对少数流失风险最高的客户施加影响,则需要高准确率。那样,你就可以确保不把资源浪费在留住那些本身就没有真得考虑要换个供应商的客户身上。不过,如果可以采取一些成本不高的行动留住客户,那么你可能会优先考虑高召回率——那样你可以留住每个可能离开的客户。
输出验证:对于任何预测模型,你都需要针对一份或多份“保留(holdbacks)”数据进行验证,以便检查这个模型随着时间推移是否一直有效,避免那个可能是数据科学业务里最难处理的问题——过度拟合。如果你只使用一个数据集构建模型,那么总是存在一个风险,就是你构建出了一个可以完美描述现有数据的模型,而当你引入一些新东西,该模型就失效了——你可以使用模型构建过程中专门保留下来的数据对模型进行交叉验证来避免这种情况——而类似 scikit-learn 这样的程序库对这类功能提供了很好的支持。交叉验证是一种不错的完整性检查方法,可以保证你使用了一个合理的模型,当投入生产环境时不会出现不好的情况——你很可能会找到一种规范的测试机制。
性能:运行模型解决问题所需的机器时间和资源的数量要符合实际。当数据集扩展到更大的规模时,有些模型类型的性能会比其他类型高出许多。例如,我们最近研究从简单的“潜在狄氏配置(Latent Dirichlet Allocation, LDA )”切换到相当不错的新程序库 lda2vec ,用于文本主题检测——这无疑会提供更好的输出结果,但运行时间也从几分钟变成了好几天。一般来说,越复杂的学习模型,如神经网络和深度学习技术,提供的输出结果越准确,但训练和运行所需要的资源都比简单的模型多,而这种时间成本可能超出了更好的输出结果所带来的益处(虽然你也许能够减少一些运行时间,例如减少训练迭代次数或者在建模之前从数据中删除低价值的特征)。还有一个问题值得考虑,业务人们可能想要知道系统的工作原理,但与类似决策树这样的简单模型相比,类似神经网络这样的“学习”模型很难给他们解释。
关于作者
Francine Bennett是 Mastodon C 的联合创始人兼 CEO。Mastodon C 是一个敏捷大数据专家团队,他们提供以开源的 Hadoop 和 Cassandra 为基础的技术以及可以帮助大型组织挖掘数据潜能的技术和分析技能。Bennett 是一名公认的分析应用程序和“数据科学”技术专家。她是英国皇家学会的特邀发言人,同时也为英国内阁办公室提供关于如何更好地使用数据的建议。她拥有数学 & 哲学一等学位,此前曾在谷歌担任分析主管。她还是 DataKind UK 的理事。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论