如何从头开始构建数据科学项目
如何从头开始构建数据科学项目
演示使用柏林租赁价格分析,涵盖如何从网络中提取数据并进行清理,获得更深入的见解,使用外部API设计功能等等。
作者:Zalando的研究工程师Jekaterina Kokatjuhha。
有许多关于数据科学和机器学习的在线课程将指导您完成理论,并为您提供一些代码示例和非常干净的 数据分析 。
但是,为了开始练习数据科学,最好是挑战现实生活中的问题。深入挖掘数据以找到更深入的见解。使用其他数据源执行功能工程并构建独立的机器学习管道。
这篇博文将指导您从头开始构建数据科学项目的主要步骤。它基于 现实生活中的问题 - 柏林租房价格的主要驱动因素是什么?它将提供对这种情况的分析。它还将突出初学者在机器学习方面常犯的常见错误。
以下是将要详细讨论的步骤:
- 找到一个主题
- 从网络中提取数据并清理它
- 获得更深入的见解
- 使用外部API设计功能

寻找主题
通过分析数据可以解决许多问题,但找到您感兴趣的问题总是更好,这会激励您。在搜索主题时,您应该专注于您的偏好和兴趣。
例如,如果您对医疗保健系统感兴趣,您可以从多个角度挑战该主题提供的数据。 “探索ChestXray14数据集:问题” 是如何质疑医疗数据质量的一个例子。另一个例子 - 如果你对音乐感兴趣,你可以尝试 从音频中预测歌曲的类型。
但是,我建议不要只关注你的兴趣,还要倾听你周围的人在谈论什么。困扰他们的是什么?他们抱怨什么?这可能是数据科学项目的另一个好的思想来源。在人们仍在抱怨的情况下,这可能意味着第一次问题没有得到妥善解决。因此,如果您使用数据挑战它,您可以提供更好的解决方案,并对如何感知此主题产生影响。
这可能听起来有点过于抽象,所以让我们想出我是如何想出分析柏林租赁价格的想法的。
“如果我知道这里的租金价格如此之高,我会谈判获得更高的薪水。”
这只是我最近搬到柏林工作的人们所听到的事情之一。大多数新人抱怨他们没想到柏林这么贵,并且没有关于公寓可能价格范围的统计数据。如果他们事先知道这一点,他们本可以在求职过程中要求更高的薪水,或者可以考虑其他选择。
我用谷歌搜索,检查了几个出租公寓网站,并询问了几个人,但找不到任何合理的统计数据或当前市场价格的可视化。这就是我提出这种分析的想法。
我想收集数据,建立一个交互式仪表板,您可以选择不同的选项,如位于柏林米特区的40平方米的公寓,带阳台和设备齐全的厨房,它会告诉您价格范围。仅这一点就可以帮助人们了解柏林的公寓价格。此外,通过应用机器学习,我将能够识别租赁价格的驱动因素并使用不同的机器学习算法进行练习。
从Web中提取数据并进行清理
获取数据
现在您已了解数据科学项目,您可以开始查找数据。有大量令人惊叹的数据存储库,例如 Kaggle, UCI ML存储库 或 数据集搜索引擎,以及 包含数据集的学术论文的网站。或者,您可以使用 网页抓取。
但要谨慎 - 旧数据无处不在。当我在柏林搜索有关租赁价格的信息时,我发现了许多可视化, 但 它们已经陈旧,或者没有指定任何年份。
对于一些统计数据,他们甚至有一个说明,这个价格只适用于50平方米没有家具的2室公寓。但是,如果我正在寻找一间带家具的厨房的小公寓呢?

旧数据无处不在。
因为我只能找到旧的数据,所以我决定 网上搜索 提供出租公寓的网站。Web抓取是一种用于通过自动化过程从网站提取数据的技术。
我的网络抓点博客文章 详细介绍了网页抓取的陷阱和设计模式。
以下是主要发现:
- 在抓取之前,请检查是否有可用的公共API
- 善良!不要通过每秒发送数百个请求来使网站过载
- 保存提取日期。这将解释为什么这很重要。
数据清理
一旦开始获取数据,尽可能早地查看数据非常重要,以便找到任何可能的问题。
在网络抓取租赁数据时,我提供了一些小的检查,例如所有功能的缺失值数量。网站管理员可以更改网站的HTML,这将导致我的程序不再获取数据。
一旦我确保覆盖了网络抓取的所有技术方面,我认为数据几乎是理想的。但是,由于没有那么明显的重复,我最终清理了大约一周的数据。
一旦开始获取数据,尽可能早地查看数据非常重要,以便找到任何可能的问题。例如,如果你网络刮,你可能错过了一些重要的领域。如果在将数据保存到文件中时使用逗号分隔符,并且其中一个字段也包含逗号,则最终可能会有非常好的文件。

ILLUSION与现实
有几个重复的来源:
- 重复的公寓,因为他们已经在线一段时间
- 代理商有输入错误,例如租赁价格或公寓的楼层。他们会在一段时间后纠正它们,或者发布一个包含更正值和其他描述修改的全新广告
- 同一套公寓在一个月后改变了一些价格(增加和减少)
虽然第一个案例的副本很容易通过他们的ID识别,但第二个案例的重复案件非常复杂。原因是代理机构可能会略微更改说明,修改错误的价格,并将其作为新广告发布,以便ID也是新的。
我必须提出许多基于逻辑的规则来过滤旧版本的广告。一旦我能够确定这些公寓将是实际的重复,但稍作修改,我可以按提取日期对它们进行排序,将最新的公寓作为最新的。
此外,一些代理商会在一个月后增加或减少同一套房的价格。有人告诉我,如果没有人想要这套公寓,价格会下降。相反,有人告诉我,如果有这么多请求,代理商会提高价格。这些听起来很好解释。
获得更深入的见解
现在我们已准备就绪,我们可以开始分析数据了。我知道数据科学家喜欢seaborn和ggplot2,以及许多静态可视化,他们可以从中获得一些见解。
但是, 交互式仪表板可以帮助您和其他利益相关者找到有用的见解。有许多令人惊讶的易用工具,例如 Tableau 和 Microstrategy。
我花了不到30分钟创建一个交互式仪表板,人们可以选择所有重要组件,看看价格会如何变化。

柏林租赁价格的交互式仪表板:可以选择所有可能的配置并查看相应的价格分布。(数据日期:Winder 2017/18)
一个相当简单的 仪表板 已经可以为新移民提供 柏林价格的见解 ,并且可以成为出租公寓网站的良好 用户驱动因素。
从这个数据可视化中你可以看到2.5个房间的价格分布属于2个房间公寓的分布。这样做的原因是2.5间客房的大部分公寓都不在市中心,这当然会降低价格。

柏林的价格分布和公寓数量。
这些数据是在2017/18冬季收集的,也将过时。但是,我的观点是,租赁网站可以经常更新其统计数据和可视化,以便为此问题提供更多透明度。
使用外部API设计功能
可视化可帮助您识别这些机器学习算法可能使用的重要属性或“功能”。如果您使用的功能非常缺乏信息,任何算法都会产生错误的预测。凭借非常强大的功能,即使是非常简单的算法也能产生相当不错的结果。
在租赁价格项目中,价格是一个连续变量,因此这是一个典型的回归问题。获取所有提取的信息后,我收集了以下功能,以便能够预测租赁价格。

这些是用于预测出租公寓价格的大部分功能。
但是,有一个问题是有问题的,即地址。有6.6K公寓和大约4.4K不同粒度的唯一地址。大约有200个独特的邮政编码可以转换成虚拟变量,但是特定位置的非常宝贵的信息将会丢失。

地址的不同粒度:街道与门牌号码,街道与隐藏的门牌号码,只有一个邮政编码。
当您获得新地址时,您会怎么做?
你要么google它在哪里或如何到达那里。
通过使用外部API遵循给出的四个附加功能,可以计算公寓的地址:
- 火车前往S-Bahn Friedrichstrasse(中央火车站)的持续时间
- 开车到U-Bahn Stadtmitte(市中心)
- 到最近的地铁站步行的时间
- 距离公寓一公里的地铁站数量
这四项功能显着提升了性能。
Bio:Jekaterina Kokatjuhha是Zalando的研究工程师,专注于欺诈预测的可扩展机器学习。

浙公网安备 33010602011771号