1 如何做敏捷数据科学项目?
几天前,我读了Shay Palachy和Ori Cohen关于敏捷数据科学项目管理的两篇很棒的文章。这些文章讨论了数据科学项目的不同阶段,以及它们与常规软件项目有何不同。这些文章启发我写下自己对敏捷数据科学的看法,这些看法关注研究方法,而不是整个项目阶段。
敏捷数据科学研究非常困难,当您不确定您的问题是否可以解决时,如何进行时间评估呢?在查看数据之前,您如何计划您的输出?您可能做不到
。敏捷数据科学需要很多调整,在这篇文章中,我将分享一些最适合我的敏捷数据科学研究的最佳实践。
设定项目目标
每个机器学习项目都应该从定义项目的目标开始。
我们必须定义什么是一个好的结果,以便知道什么时候停止研究和继续下一个问题。此阶段通常由业务利益相关者完成。
目标由3个问题定义:
-
我们正在优化的KPI是什么?
这可能是项目中最重要的问题,KPI必须可以通过测试集来衡量,但也要与业务KPI尽可能相关。
-
评估方法是什么?
测试集的大小是多少? 我们需要时间序列分组/组拆分吗? 我们需要在线测试吗?
-
有价值KPI的最小值是什么?
有时机器学习模型将取代一些简单的启发式算法,即使65%的准确率对业务也是非常有价值的。 我们需要定义什么是成功。
总是与基线模型进行比较
什么是好的表现是一个非常难的问题,它很大程度上取决于问题的困难程度和业务需求。
我的建议是通过构建一个简单的基线模型来开始建模,它可以是一个简单的机器学习模型,使用基本特征,甚至是一个业务规则(启发式),就像重要类别中的平均标签一样。 通过这种方式,我们可以比较基线来衡量我们的效能,并监控我们在任务中的改进。
从简单的模型开始
迭代是敏捷开发的核心特征之一。
在数据科学项目中,我们不会像工程团队那样迭代特征,我们会迭代模型。从具有少量特征的简单模型开始并使其迭代地变得越来越复杂以具有许多优点。当模型足够好并且节省时间和复杂性时,您可以随时停止。 您确切知道您所做的每项更改如何影响模型性能,这为您的下一次实验提供了直觉,也许最重要的是,通过迭代增加复杂性,您可以更轻松,更快地调试模型中的错误和数据泄漏。
计划子目标
计划研究项目很难,因为它们有很大的不确定性。
根据我的经验,最好使用子目标来规划您的项目,例如,数据探索,数据清理,数据集构建,特征工程和建模是研究的一小部分,您可以至少在几周内制定计划。
这些子目标可以在没有最终模型的情况下自行创造价值。 例如,在数据探索之后,数据科学家可以为业务人员提供可操作的见解,数据集清理和构建可以帮助其他数据科学家和分析师立即做自己的项目。
快速失败
快速失败可能是我最重要的一点,可能是最难做到的。
在每次迭代中,您必须问自己,模型性能达到最低有价值KPI的概率是多少? 我认为迭代地使模型更复杂真的有助于这一部分。 添加更多功能并尝试更多模型通常会带来渐进式改进。 如果您的模型性能为70%且您的最低有价值KPI为90%,那么您可能无法实现这一目标,因此,您需要停止项目并转向下一个问题或更改一些极端的内容,例如更改标签或标记更多的数据。 我并不是说你不应该试图解决非常困难的问题,只要确保你没有浪费时间在可能无法实现项目目标的方法上。
尽快转向生产
我的最后建议是尽可能早地将模型部署到生产环境中,或者在模型有价值之后稍微部署一下。
我知道也许你的最终模型会有完全不同的特征,很多工作都会被浪费掉。 但是,首先,你的模型给出了价值,为什么要等待? 其次,更重要的是,在很多情况下,生产有自己的限制,一些特征在生产系统上不可用,有些特征有不同的格式,可能你的模型是减速或使用大量的RAM等,及早解决这些问题,可以节省大量不切实际的建模时间。
作者:yonatan hadar
原文链接:
https://towardsdatascience.com/my-best-tips-for-agile-data-science-research-b40365cc979d
数据人网
1 如何做好数据科学项目?有哪些注意点?
使用柏林租赁价格分析的实例,包括如何从网络中抽取数据并进行清洗,获得更深入的见解,以及使用外部API设计特征等等。
有许多关于数据科学和机器学习的在线课程将指导您完成理论,并为您提供一些代码示例和对非常干净数据的分析。
然而,
为了开始实践数据科学,最好是挑战现实生活中的问题
。深入研究数据以便发现更深层次的见解。利用附加的数据源进行特征工程,构建独立的机器学习管道。
本文将指导您从头开始构建数据科学项目的主要步骤。 它基于现实生活中的问题 -
柏林租赁价格的主要驱动因素是什么?
它将提供对这种情况的分析。 它还将强调初学者在机器学习方面常犯的错误。
以下是将要详细讨论的步骤:
-
找到一个主题
-
从网络中提取数据并清理它
-
获得更深入的见解
-
使用外部API做特征工程
找一个话题
有很多问题可以通过分析数据来解决,但最好是找到一个你感兴趣的问题,这将激励你。
在搜索主题时,你一定要专注于你的喜好和兴趣。
例如,如果您对医疗健康感兴趣,您可以从多个角度对该主题提供的数据提出质疑。“
探索ChestXray14数据集:问题
”是一个如何质疑医疗数据质量的例子。另一个例子-如果你对音乐感兴趣,你可以试着
从它的音频预测歌曲的类型
。
然而,
我建议你不仅要专注于你的兴趣,还要倾听你周围的人在谈论什么。他们的困扰是什么?他们的抱怨是什么?
他们在抱怨什么?这可能是数据科学项目的另一个好的想法来源。在那些人们仍在抱怨的情况下,这可能意味着问题在第一时间没有得到妥善解决。因此,如果您用数据挑战它,您可以提供更好的解决方案,并对如何理解这个主题产生影响。
这听起来可能有点太抽象了,所以让我们来看看我是如何想出这个分析柏林房租价格的主意的。
“如果我早知道这里的租金这么高,我就会为更高的薪水而谈判了。”
这只是我从最近搬到柏林工作的人那里听到的事情之一。大多数新来的人都抱怨说,他们没想到柏林的房价会这么贵,也没有关于这套公寓可能价格区间的统计数据。如果他们事先知道这一点,他们就可以在求职过程中要求更高的薪水,或者可以考虑其他选择。
我在谷歌上搜索了几家出租公寓的网站,问了几个人,但找不到任何可信的统计数据或当前市场价格的数据可视化。这就是我提出这个分析的想法的原因。
我想收集数据,建立一个互动仪表盘,你可以选择不同的选项,比如在柏林Mitte的一套40平方米的公寓,有阳台和配备齐全的厨房,它会显示价格范围。仅此一点,就能帮助人们了解柏林的房价。另外,通过机器学习,我可以识别租金的驱动因素,并运用不同的机器学习算法进行训练。
从web中提取数据并进行清理
获得数据
现在您已经对您的数据科学项目有了一个想法,您可以开始寻找数据了
。有大量令人惊叹的数据存储库,如
Kaggle
、
UCI ML存储库
或
数据集搜索引擎
,以及包含有数据集的
学术论文的网站
。或者,您可以使用
web抓取
。
但要小心——旧数据无处不在。当我在柏林搜索租房价格的信息时,我发现了很多可视化的东西,
但是
它们都是旧的,或者没有具体的年份。
对于一些统计数据,他们甚至有一条告示说,这个价格只适用于一套50平方米的两室公寓,没有家具。但如果我想找一间带家具的小公寓呢?
由于我只能找到旧数据,我决定在网上抓取提供出租公寓的网站。Web抓取是一种通过自动化过程从网站中提取数据的技术。
我的web抓取
博客文章详细介绍了web抓取的陷阱和设计模式。
以下是主要发现:
-
在抓取之前,检查是否有可用的公共API
-
请善良!不要以每秒发送数百个请求的方式使网站超载
-
保存提取发生的日期。我们将解释为什么这很重要
数据清洗
一旦您开始获取数据,尽早查看它以发现任何可能的问题是非常重要的。
在web抓取租赁数据时,我包含了一些小检查,比如所有特征缺失值的数量。网站管理员可以改变网站的HTML,这将导致我的程序不再获得数据。
一旦我确保web抓取的所有技术方面都得到覆盖,我认为数据几乎是理想的。然而,我花了大约一周的时间来清洗数据。
一旦您开始获取数据,尽早查看它以发现任何可能的问题是非常重要的。例如,如果您web抓取,您可能会错过一些重要的字段。如果您在将数据保存到文件中时使用逗号分隔符,并且其中一个字段还包含逗号,那么您的文件可能无法很好地分隔。
幻想与现实
有几个重复的来源:
虽然第一种情况下的重复很容易通过ID识别,但是第二种情况下的重复非常复杂。原因是中介可以稍微更改描述,修改错误的价格,并将其作为新广告发布,以便ID也是新的。
我必须提出许多基于逻辑的规则来过滤旧版本的广告。 一旦我能够确定这些公寓将是实际的重复,但稍微做了修改,我可以按提取日期对它们进行排序,将最近的公寓作为最新的。
此外,一些中介会在一个月后增加或减少同一套房的价格。 有人告诉我,如果没有人想要这套公寓,价格会下降。 相反,有人告诉我,如果有很多人想要这套公寓,那么中介就会提高价格。 这些听起来很好解释。
获得更深入的见解
现在我们已经准备好了一切,可以开始分析数据了。我知道数据科学家喜欢seaborn和ggplot2,以及许多静态可视化,他们可以从中获得一些见解。
然而,交互式仪表板可以帮助您和其他受众找到有用的见解。有很多简单易用的工具,如
Tableau
和
Microstrategy
。
我花了不到30分钟的时间创建了一个交互式仪表板,在这里可以选择所有重要的组件,并查看价格将如何变化。
柏林出租价格交互仪表盘:可以选择所有可能的配置,查看相应的价格分布。(数据日期:Winder 2017/18)
一个相当简单的仪表盘已经可以为新来者提供柏林房价的洞察,也可以成为出租公寓网站的良好用户驱动程序。
从这个数据可视化中你可以看到2.5个房间的价格分布属于2个房间公寓的分布。 这样做的原因是2.5间客房的大部分公寓都不在市中心,这当然会降低价格。
柏林公寓的价格分布和数量。
这些数据是在2017/18年冬天收集的,也会过时。然而,我的观点是,出租网站可以经常更新他们的统计数据和可视化,以为这个问题提供更多的透明度。
使用外部API做特征工程
可视化可帮助您识别这些机器学习算法可能使用的重要属性或“特征”。 如果您使用的特征非常缺乏信息,则任何算法都会产生错误的预测。 凭借非常强大的特征,即使是非常简单的算法也能产生相当不错的结果。
在租赁价格项目中,价格是一个连续变量,因此这是一个典型的回归问题。 获取所有提取的信息后,我收集了以下特征,以便能够预测租赁价格。