TowardsDataScience-博客中文翻译-2019-十八-
TowardsDataScience 博客中文翻译 2019(十八)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
仓库中的数据或 Hadoop 中的数据:什么适合您的业务,为什么?
原文:https://towardsdatascience.com/data-in-warehouses-or-data-in-hadoop-whats-suitable-for-your-business-and-why-6a6c9a8ef4b0?source=collection_archive---------11-----------------------
大数据是 IT 行业最受欢迎的创新,它席卷了整个世界。部分原因是由于 Hadoop 和相关的大数据技术正以指数速度增长。Hadoop 在大数据领域发展的一个主要原因是它能够为程序员提供并行处理的能力。但是最近像“Hadoop 会取代数据仓库吗?”或者“MapReduce 之死”已经在网络上浮出水面,从而为大数据程序员带来了不同轮的辩论。随着我们在 2019 年年中向前迈进,围绕 Hadoop 的宣传似乎仍在增加,许多期望和兴奋以物联网的形式出现。
为了消除那些支持 Hadoop 的人的任何困惑,我们将在这里调查一些事实,并回答一些在互联网上被问到的最受欢迎的问题,如:
- Hadoop 会取代数据仓库吗?
- 如果有了大数据,还需要仓库吗?
- 传统仓库时代现在死了吗?
但是,在我们深入研究上下文之前,让我们澄清对云的任何疑问,并正确了解这些术语。
什么是数据仓库?
数据仓库是一种数据存储或数据仓库的体系结构,它使用了不同于标准操作数据库的设计。与操作数据库不同,数据仓库旨在提供长期的数据。因此,数据聚合被触发,交易量成为一种权衡。
数据仓库是用来做什么的?
大多数企业利用数据仓库来分析他们的业务数据。当他们的分析需求与操作数据库性能发生冲突时,通常需要他们。大多数操作数据库不能运行复杂的查询,因为它需要数据库进入一个临时的固定状态。这就是数据仓库发挥作用的地方。数据仓库可以完成大部分分析工作,这使得事务数据库有足够的时间关注事务。
数据仓库的另一个最佳好处是它能够分析来自多个来源的数据。它能够通过利用 ETL(提取、传输和加载)过程来协商存储模式中的差异。ETL 被定义为从不同的 RDBMS 源系统中提取数据,然后转换数据(如应用计算、连接等)的过程。)并最终将数据加载到数据仓库系统中。
Hadoop 是什么?
Hadoop 拥有与 MPP 数据仓库相似的架构,但有一些明显的不同。与定义并行架构的数据仓库不同,hadoop 的架构由跨 Hadoop 集群松散耦合的处理器组成。每个集群可以处理不同的数据源。数据目录、数据操作引擎和存储引擎等组件可以独立工作,以 Hadoop 作为收集点。
Hadoop 服务于什么目的?
Hadoop 已经成为大数据技术的宠儿,因为它拥有处理大量半结构化和非结构化数据的能力。以下是 Hadoop 的一些使用案例示例:
- 大规模企业— Hadoop 可用于需要服务器集群的大规模企业项目,在这些项目中,编程技能和专业数据管理技能有限,实施成本高昂。
- 大型数据集— Hadoop 可用于建立高可扩展性并节省管理 Pb 或 TB 级数据集的资金和时间。
- 单独的数据源— 需要来自单独数据源的数据的大数据应用,往往要处理 Hadoop 集群;所以 Hadoop 在应用开发中起着非常重要的作用。
传统仓储的问题
传统的数据仓库无法控制复杂的层次数据类型和其他非结构化数据类型。随着可扩展性的需要,成本因素成为数据仓库无法解决的问题。
此外,DWH 不能保存缺少明确模式的数据,因为它遵循模式写入机制。这就是 Hadoop 发挥作用的地方,因为它更喜欢读模式。数据仓库通常需要花费大量时间对数据建模,考虑到业务模型,这是不可行的。
Hadoop 会取代数据仓库吗?
毫无疑问,Hadoop 生态系统一直在快速高效地进化。如果 Hadoop 很快能够处理所有类型的任务关键型工作负载,从而消除对数据仓库的需求,我们不会感到惊讶。然而,Hadoop 和数据仓库都将在业务中存在更长一段时间。组织可以依靠其现有的数据仓库,并引入 Hadoop 功能来满足业务需求并利用应用程序开发的力量。
基于数据的滚动预测
原文:https://towardsdatascience.com/data-informed-rolling-forecasts-5dce48edb683?source=collection_archive---------18-----------------------
在初创企业中利用数据科学工具与财务部门合作,并推动以产品为导向的增长。
Credit: Periscope Data. BI dashboard with dynamic filters.
注:这篇文章最初发表在我的博客上,是我在 FloSports 担任产品副总裁时写的。目标是展示正确的数据科学工具和对基本业务驱动因素的理解如何支持产品和财务之间的协作,以加速产品导向的增长。在最初出版时,我们是一家 B 系列运动技术公司,在其生命周期的各个阶段拥有近 25 种不同的运动。
我在 FloSports 倡导的一项新举措是我所谓的“数据通知滚动预测”。在这篇文章中,我将从宏观层面介绍这是如何实现的,以及潜望镜数据如何在帮助我们实现调步仪表板方面发挥宝贵的作用——只需要有限的工程时间。
以下是我完成这项工作所必需的材料清单:
- 了解您的业务和经济模式的关键驱动因素
- 一个可查询的数据库(我们的报告仓库位于 Redshift 上)来进行历史基准测试
- 促进数据库查询和提取的商业智能工具
- 自下而上的财务模型模板,理想情况下基于场景和案例(例如,仅从现有业务相对于现有业务的增长加上完成业务的高概率),该模板基于#2 的历史实际情况,并预测下一季度的预期结果
- 商业智能工具,有助于创建进度控制面板
第 1 部分:了解关键驱动因素和基准测试
当我刚到 FloSports 的时候,我的第一个行动项目之一是了解我们现有的 KPIs 这包括从理解什么,为什么,以及如何跟踪度量的一切。我们从头构建了一个数据仓库,我们将 ETL 到新红移仓库中的初始数据源是我们的 Stripe 支付数据。为此,我们采访了一位数据科学顾问。鉴于他参与帮助我们准备 B 轮融资,他对我们的业务很熟悉。作为该流程的一部分,在不涉及太多细节的情况下,我们制定了所有现有订阅计划的内容,以及我们的订阅者展示的计划和运动。在此基础上,我们定义了我们的用户类型和计划间隔。例如,我们根据支付的类型,结合用户在我们公司的生命周期中所处的阶段,制定了不同的用户类型。例如:
- 新功能:用户首次为某项运动的订阅付费
- 重新激活:在先前取消之前已经是订户的订户返回并为特定运动的订阅付费
- 循环:用户为他/她的特定体育项目订阅支付循环费用
聚合事实表。鉴于我们的运动和计划产品的范围,查询可能会变得相当复杂,特别是对于有多年历史和来自新老用户的大量活动的运动。鉴于此,我们最常见的报告用例通常被转换成聚合事实表。这些通常结合了两个、三个或更多不同的数据源。我们为关键性能指标构建了聚合事实表,包括订阅者瀑布(月粒度)和支付(日粒度)。利用这些数据丰富的事实表和 Periscope Data 等灵活的 BI 工具,我们能够创建一个可按运动项目过滤的历史基准仪表板。我们将此提供给相关的业务涉众,他们可以基于选择的过滤器请求数据,并下载 CSV 以加载到财务模型中。
第 2 部分:构建自下而上的财务模型模板
鉴于我们有 25 个运动项目的现实,我为每个运动项目建立自下而上的财务预测模型的主要目标之一是使模型具有动态性和灵活性。这有助于有限的,如果有的话,为每个运动重新布线的模型,因为模型灵活的不同的发射日期和历史表现,例如,子保留,为每个运动。
一些运动已经存在好几年了,而另一些只有几个月的历史数据。我没有按照一项运动的历史来构建每一个模型,也没有每个季度都需要重新构建每一个模型,而是花了大量的前期时间来弄清楚如何最好地调整模型。我们通过所有 15+工作表动态反馈的示例包括:
- 订户群组保留瀑布
- 所有历史队列的加权平均保留曲线,根据衰减率预测未来流失
- 历史计划选择组合,例如,每月/每年%
- 随着时间的推移,订阅者螺旋上升—开始加上新的较少搅动等于结束(每月谷物);(也有助于 MRR 的计划提供和运动)
- 基于历史分组及其预计经常性付款的季度每周预测;我们将这些预测的经常性付款与预测的新的和重新激活的用户付款相结合
模型的灵活性通常是通过确定哪些输入驱动因素需要动态公式来实现的;在本例中,输入如垂直发布月、上个月的实际值和季度开始日期允许我将模型与每项运动的独特方面区分开来。这也让我可以根据每项运动的历史来定制模型,只需最少的手动重新布线。
Example Control Sheet with Dynamic Drivers by Business Unit (sport in our case).
对于那些熟悉金融建模的人来说,你知道你可以利用场景和案例来对各种潜在的结果敏感化。一个例子是,“如果我们在季度的第二个月完成一笔大的配股交易会怎么样”,而我们所有的关键输入,例如每月价格,保持不变。为了说明这种可能性,我们将使用 Excel 中的 offset 函数创建一个场景,允许我们选择是否希望这种潜在结果的影响改变某些输入,然后流过模型。除此之外,我们可以将“大型新活动”场景与“牛市”案例结合起来→“如果我们结束了大型活动,并且由于这项运动的现场活动时间表更加强劲,该季度的年度混合百分比比我们以往看到的高 500 个基点,会怎么样?”
虽然每项运动都有一个单独的模型,但我在每个模型中添加了一个工作表,该工作表以行(周)和列(指标)的形式汇总了各种工作表中的所有关键报告指标,然后可以作为一个可查询的平面表→将所有这些模型的表合并到一个 CSV 中,作为我们调整仪表板的数据源。通过这样做,我们实现了以下目标:
- 反映季度目标的可视化效果(可下载数据);业务用户更容易看到全面的目标和每个目标的驱动因素
- 一个进度控制面板,提供关于运动进度与预测进度的洞察,包括净收入、注册、订户和流失。
第 3 部分:利用正确的 BI 工具,即潜望镜数据 FTW
我以前写过关于潜望镜的数据缓存的文章,事实证明它在这种情况下非常有用。我们在几个方面使用了 Periscope 的数据缓存。例如,我们实现了跨数据库连接——一个数据源在 MySQL 中,另一个在 Postgres 中,第三个来自平面 CSV 文件。通过组合这些不同的来源,我们创建了一个强大的、不需要数据工程的仪表板。这个仪表板满足了我们的一个 sports 的用户属性报告请求,所需时间大约是整合我们专有的 ETL 工作流所需时间的 1/20。
Periscope 的缓存也有助于我们快速构建新数据源的概念证明(POC ),并接收来自业务利益相关者的反馈;我们总是在请求数据工程将新的数据源添加到我们的 ETL 工作流之前构建这些。此外,对于不太熟悉请求他们的当前状态数据流程成为我们的 ETL 和 BI 报告流程的一部分的业务用户,Periscope 的缓存为我们提供了一种低开销的方式来证明他们的报告想法。在对概念验证进行迭代,然后确保需求准备就绪之后,这提高了工程人员理解如何对数据建模以及如何将新的源合并到我们的整个仓库工作流和模式中的效率。
我们使用 Periscope 构建的季度仪表板是一个高度可定制的业务用户报告工具,可以显示每日、每周、每月和每季度的进度可视化和表格。这为版权收购团队、营销人员、管理层和数据分析师团队提供了关于我们在哪些方面超出或落后于季度绩效目标的可见性,此外,我们使用仪表板的报告来触发需要额外调查的领域。一些例子包括:
- 一个事件超出其注册预测 1.5 倍;我们是否通过现场活动漏斗看到了更好的转化?在影响访问者转化为付费用户方面,哪些内容看起来效果不错?
- 我们看到了比预期更高的保留率;这项运动做得好的地方是什么,它是否可以转移到其他运动中,我们如何做得更多?
Q2 2017 仪表板注册步调的净化图:
Example of Pacing Dashboard tracking overall signups relative to forecast and trend by week intra-quarter.
我喜欢这种工作,因为它结合了我的金融建模背景和数据分析。同样令人欣慰的是,在定义和验证业务逻辑以及获得正确的数据策略方面所做的努力确实可以支持产品导向的增长。Periscope Data 的工作人员是一路走来的好伙伴,最终是这种高度迭代、低开销方法成为可能的原因!
如果你喜欢这篇文章,如果你能点击“拍手”图标让我知道并帮助增加我的作品的发行量,那将是非常棒的。
你也可以在推特上联系我, @kevinboller ,我的个人博客可以在这里找到。感谢阅读!
数据不是新的石油
原文:https://towardsdatascience.com/data-is-not-the-new-oil-721f5109851b?source=collection_archive---------24-----------------------
从类比到迷因再到教条的转变是持久的,也是有缺陷的。
Photo by Brandon Glass on Unsplash
走进任何与数据有关的会议,你可能会听到这样的话:“知识是最大的商品”,“最有价值的资源是数据”,“数据是新的石油。”
数据是新油。我们都听说过。可能会不假思索地点点头。但是是吗?数据是新的石油吗?这个比喻站得住脚吗,还是仅仅是人们说的一句话?就我个人而言,我认为这不是一个好的类比——这两者是截然不同的,而且最终是截然不同的。
其起源的类比可能意味着指出石油对其时代具有革命性的影响,同时代的数据也是如此。但是人们越来越自由地引用这个类比。即使是从未开采过自然资源的公司也可以毫无歉意地宣称他们的“数据是新的石油”。
道格拉斯·霍夫施塔特,著名的哲学家和《T4》一书的作者,称这个类比是一个天真的类比。这些是“非专业人员倾向于将其科学概念的概念建立在其上的那种类比”。[……]获得的[概念]得益于吸引人的、有益的、但往往过于简单的类比。”*
霍夫施塔特继续指出,它们可能很容易记住,但它们的弱点源于这样一个事实,即在特定的背景下,它们具有误导性。“天真的类比就像滑雪者优雅地滑下整洁的斜坡,但却完全迷失在粉末中。总之,天真的类比在许多情况下都很有效,但在其他情况下,它们可能会导致荒谬的结论或彻底的死胡同。”**这就是我们目前所目睹的:类比将我们引入歧途。这让我们相信,像“数据分析师”和“数据科学家”这样的职位只是数据的精炼厂,因为这也是我们处理石油的方式。这不是真的。一点也不。
数据无油
这种类比最明显的缺陷是,收集数字行为数据(几乎)是零成本的。对于油基产品,如汽油,57%以上的成本发生在提取原油的过程中。你在加油站支付的费用中,大约有 60%是在从地球表面提取石油时发生的。从来没有人投入这么多的整个项目预算来获取一些数据。
运输和分销也对石油的最终价格构成了巨大的成本。另一方面,数据可以自由传输,基本上可以免费无限期存储。
数据等同于石油等天然资源的想法导致我们大量投资于数据湖(理解为沼泽)并盲目收集信息。因为人们认为,如果我们有原始资源,创造最终产品是很容易的。这个类比让我们相信,在某种意义上,数据有内在的价值。
数据收集、获取和存储已经变得普遍和丰富;事实证明,创造价值要困难得多。事实证明,数据没有内在价值。当数据被应用于解决一个特定的问题时,价值就被创造出来了——这也是成本产生的地方——当一个原始资源变成有用的最终产品时。
值提取
问任何一个数据专家,他们都会同意 60%以上的工作都是与数据争论。从不同的来源获取正确的数据、清理、重组、工程特性等。行为本身除了为其所支持的任务增加价值之外,并没有增加额外的价值。
每个算法、每个模型和每个分析都需要精心准备和清理的数据。即使在考虑最小可行产品时,所有者也不得不在提取任何价值之前预先承担大量“成本”。被清除和未被使用的数据通常没有什么价值(同样,与石油不同,石油是一种副产品,可以用来制造柏油路面或塑料)。
因此,值提取是错误的术语;来自数据的价值需要被创造。
边际成本和 r 资源枯竭
数据的收集、存储和传输的边际成本为零。一个单位的增加不会带来很大的成本。分析的所有成本基本上都是前期的。这同样适用于生产就绪的数据产品:每一个额外的产品或客户评分都不是一项成本。
与越来越稀缺的典型资源不同,数据变得越来越丰富。稀缺资源的内在价值会增加。他们的需求超过了供给。在过去的几十年里,随着天然气和石油相关产品价格的不断上涨,我们已经见证了这一点。
数据不真实;数据过于丰富,并且不断增加。成本不在于找到或存储它的内容。事实上,成本在于提炼数据和从“原始资源”中创造价值。
另一个差异是数据需要验证和核实;每个管道都需要反复研究同样的问题。石油则不然,我们完善炼油厂和分销管道,使系统发挥最佳功能。
结论
“数据是新的石油”这个迷因的延续让我们无意识地得出更多关于相似性的推论,而不是严格意义上的。
坚持和传播相似性这一天真概念的问题在于,它与“数据科学”和“分析”是数据之上的简单功能(类似于从原油中制造汽油)这一普遍概念有关。然而,真正花费成本和时间的是产品的创造。不在于开采原始资源,而在于创造有意义的最终产品。
石油总是有用的。
数据不会。
表面和本质:类比作为思维的燃料和火焰*,道格拉斯·霍夫施塔特,第 31 页
**同上,第 389 页
数据不是新的石油
原文:https://towardsdatascience.com/data-is-not-the-new-oil-bdb31f61bc2d?source=collection_archive---------7-----------------------
关于处理数据的现实
如果您在数据科学或相关领域工作,您可能以前听过这句话:
“数据是新的石油。”
这句话可以追溯到 2006 年,被数学家 Clive Humby归功于,但最近在《经济学人》发表了题为“世界上最有价值的资源不再是石油,而是数据”的 2017 年报告后,它得到了更多的关注。
Photo credit: Zbynek Burival, Unsplash
这听起来很令人兴奋。但真的是这样吗?
鉴于科技公司在数据驱动下取得的成功,将数据等同于石油乍一看可能有道理,但一旦你深入挖掘(这是一句双关语),这种类比就站不住脚了。
石油的问题是,一旦石油公司在地下找到它,他们或多或少知道要把石油转化为利润必须遵循哪些步骤:钻探、提炼、提炼、销售。这与你处理数据时面临的现实相去甚远:在处理数据时,如何将数据转化为利润还远未明朗。
处理数据
如果您在经营一家企业,并且想要对您的数据做任何事情,您需要做的第一件事就是创建存储和查询该数据所需的基础架构。数据不存在于电子表格中。
让我们假设你运行一个旅游预订网站。每当有人搜索、预订旅行、点击广告或以任何其他方式与网站上的内容互动时,就会产生数据。为了捕获所有这些数据,你需要雇用数据工程师,并建立类似于 Hadoop 集群 的东西,允许弹性数据存储和快速查询。这是你需要预先做的一笔大投资。
理解数据
让我们假设这些都是你做的。数据库会告诉你哪个用户什么时候点击了什么,他们预订了什么航班,他们预订了什么酒店,他们要去哪里旅行,以及他们什么时候去。也许您甚至有包含人口统计信息的用户配置文件:用户住在哪里,他们的年龄,等等。极其丰富的数据集。
但是你如何处理这些数据呢?
嗯,你需要雇用数据科学家来找出将数据转化为商业见解的方法,这反过来可能会产生利润。这样,你就有机会获得投资回报。
进入数据科学
数据非常嘈杂。数据科学家接受培训,通过从以下角度观察数据来理解有噪声的数据:
什么 假设 关于数据产生的过程我能做什么?我怎样才能 检验 那个假设对数据的影响?从我的假设检验中我能推断出什么样的 洞见 ?
注意工作流程是如何从一个关于业务流程的想法开始的,然后才是数据——这是因为数据噪音太大,无法提供内在价值。数据科学家的工作流程很少从数据本身开始。
Photo credit: Abigail Lynn, Unsplash
一个例子
下面是一个数据科学家可能会对上述旅游预订网站数据做些什么的例子。我的假设是,如果用户对自己的旅游偏好有所个性化,他们更有可能点击第三方广告。例如,我可以向之前预订了夏威夷之旅的千禧一代展示冲浪学校的广告。我如何检验我的假设?
首先,我需要在规模上实现这样一个个性化广告系统,这将需要大量的工程工作。第二,一旦我有了这样一个系统并开始运行,我将需要进行类似于 A/B 测试 的测试,以确定新系统是否真的提高了广告点击率。只有在 A/B 测试成功的情况下,我才展示了利用数据为企业创造利润的方法。
旅游预订网站还能通过其他方式从用户数据中获利吗?大概有几十种方法,但是你需要投入时间、研究、人力资源(数据科学家、数据工程师、软件工程师)、技术资源去找到它们。这一过程包含许多未知因素、研究和实验,因此从根本上不同于提炼、精炼和出售石油的过程,后者的步骤要清晰得多。
Photo credit: NASA, Unsplash
数据和恐怖
最后,当您构建任何利用您的数据资产的系统时,比如个性化系统,您必须非常小心,不要太令人毛骨悚然。令人毛骨悚然包括任何形式的让人感觉太侵扰的个性化。令人毛骨悚然的目标选择(双关语)的一个众所周知的例子是 Target 的怀孕检测模型。
塔吉特提出了以下假设:孕妇更有可能购买某些物品,如产前维生素和孕妇装。塔吉特的想法是这样的:如果我们可以建立一种算法来找到这些客户,并向他们发送婴儿用品的优惠券,如尿布,他们更有可能在婴儿出生后让塔吉特成为他们的一站式杂货店。
正如《纽约时报》报道的那样,在塔吉特百货开始使用这种模式一年后,一名男子走进明尼阿波利斯郊外的塔吉特百货,愤怒地要求与经理谈话。他是这样说的:
“我女儿收到了这封信!她还在上高中,你就给她寄婴儿服装和婴儿床的优惠券?你是想鼓励她怀孕吗?”
结果,他的女儿怀孕了,塔吉特比他先知道。数据驱动的个性化出现了令人毛骨悚然的错误。
Netflix has learned the importance of personalization. (Photo credit: Charles, Unsplash)
总结:数据不是新的石油
处理数据的过程是混乱的,需要仔细的计划、工程和研究,并且包含许多未知和陷阱。最重要的是,人们并不总是清楚如何利用数据,因为数据本身太嘈杂,无法提供价值。把数据等同于石油,就是忽略了这个杂乱而复杂的现实。
话虽如此,我们今天看到的最强大的数据应用之一可以说是个性化,它推动了亚马逊、脸书、谷歌、网飞、Spotify 等科技公司的成功。这些公司已经了解到个性化产品比通用产品更成功。其他行业,如银行业或保险业,也在学习:我们生活在一个越来越多的数字产品变得个性化的世界。
最后,石油的现实是,它的供应和使用都是有限的。有数据的现实恰恰相反:只要有人类在身边,我们总会创造出更多的数据。
数据是新的石油,即使在石油和天然气行业也是如此
原文:https://towardsdatascience.com/data-is-the-new-oil-even-in-the-oil-and-gas-industry-a3daa58d743d?source=collection_archive---------7-----------------------
来自 2019 年 SPE 数据科学大会的见解
数据科学和机器学习一直是互联网、金融、营销等行业重大转变的背后力量。石油和天然气行业也不例外,在 21 世纪初就很快熟悉了这一概念,并将其应用于上游、中游和下游行业,以获取宝贵的见解。因此,对业内公司来说,精确的数据仍然是一笔宝贵的资产。克莱夫·亨比(Clive Humby)曾著名地将数据比作新的石油,指出其内在价值在精炼后闪闪发光。
“数据是新的石油。它很有价值,但如果不提炼,就不能真正使用。它必须转化为气体、塑料、化学物质等,以创造一个有价值的实体,推动盈利活动;因此,必须对数据进行分解和分析,使其具有价值。”
—克莱夫·亨比
在德克萨斯州休斯顿石油工程师协会(SPE)数据分析小组组织的 2019 年数据科学大会上,精炼数据和精炼油之间的比较有了新的意义。数据科学大会于 2019 年 4 月 4 日举行,425 名专业人士满座,抓住了人工智能传播带来的兴奋感,并在整个 O&G 行业组织了数据分析。
SPE 数据分析小组负责人 Suri Bhat 介绍了第二届年度 DSC 的主题:“用先进的数据科学解决方案改造 G 行业的上游”,并强调了将人工智能融入石油和天然气行业的重要性,因为每个石油生产商都要处理数 Pb 的数据。根据 2017 年世界经济论坛报告,从 2016 年到 2025 年,数字化转型将产生价值 1.7 万亿美元的价值,从而减少 120 万吨碳排放。
“数字化转型给该行业带来的估计价值约为 1.7 万亿美元,从而减少 120 万吨碳排放。”
售罄的会议有一个良好的技术和商业演示的组合,学生/行业海报会议,公司展台展示他们的服务,以及大量的网络机会。
断层和测井解释中的深度学习
每个演讲者都单独展示了人工智能目前被广泛应用的项目。与上游石油工业相关的作业与资源勘探和评估、油田开发、钻井和完井、油藏管理以及生产和设施作业有关。地球科学和勘探领域正在积极利用机器学习进行自动测井解释和勘探。
Typical Log Data (obtained from source)
一个特定的行业项目使用贝叶斯状态空间模型和蒙特卡罗模拟处理实时地层解释。另一个项目利用人工智能通过神经网络进行故障解释。无监督学习以前也曾用于测井解释。地震测井中缺失的三维数据为进一步解释模拟合成数据带来了独特的挑战。利用真实数据和合成数据,从而减少实现地学结论所需的时间。粒度预测也正在使用卷积神经网络进行分析,该网络具有来自微电阻率测井和多个其他输入的数据。
使用神经网络的实时扭矩和阻力计算
在钻井中,需要分析上下文数据(以每日钻井日志报告的形式)和结构化视觉数据(通过测井获得并在电子钻井记录仪中捕获)。由于钻井作业的时间限制性质,需要做出实时决策。为此,公司正在使用神经网络,并分析钻机状态以实现实时数据可视化,并预测钻井关键性能指标。现在,通过估计钻柱和井筒之间的摩擦系数和法向接触力,可以使用人工智能实时计算任意给定井中钻柱上的扭矩和阻力。
另一个运营商正在利用泵冲洗的历史数据,并在冲洗发生时向钻机运营商实施智能手机警报系统。井底钻具组合(BHA)承受各种应力,尤其是在水平井段,在给定操作参数(钻井角度、方向和深度目标、预期钻进速度)、地层特性(岩石的磨损性和能力、井内压力状态)和钻井参数(钻柱重量、应用的 RPM 范围、扭矩和预期的冲击模式)的情况下,拥有正确的钻具组合非常重要。人工智能目前正被用来实时选择正确的 BHA。
预测油井生产剖面的特征提取模型
油气生产优化分析涉及时间序列预测和递归神经网络。主要的 KPI 包括石油产量和气油比的预测。一个特殊项目使用特征提取模型,使用计算井底压力,节流器,井口温度和邻近油井数据来预测每日石油产量。裂缝参数也被用于产量递减曲线预测。另一个项目利用深度学习和神经网络对抽油杆示功图进行模式识别。油井中断引起的产量变化也可以使用中断时间序列建模(ITS) 进行建模。
Dynamometer Cards (obtained from Sage Technologies, Inc.)
解决双头怪物:使用人工智能和数据民主化证明合理的投资回报
在主要石油生产商正在解决的主要问题中,说服高层管理人员相信人工智能的长期好处被证明是最具挑战性的。这部分是因为 O&G 行业的扩张性经营规模减缓了新技术的采用。每个部门内部产生的数据量是惊人的,而这还只是上游行业!在平面文件、非结构化数据、空间和时间数据、可视化地震和测井数据、四维和五维数据方面,数据类型也有很大差异。数据科学技术的引入将通过基准和统计分析、人工智能、机器学习、优化、空间和时间分析提高其价值。然而,让每个人都参与进来是一个挑战。高层管理需要更可靠的概念验证研究来增加业务价值。一位高管评论说,由于行业现状,80%的数据科学和机器学习项目最终都没有实施。剩下的 20%确实提供了商业价值,其中 85%的时间和资源花在正确定义问题上,剩下的是纯粹的数据科学。
数据使用和分析方面的企业标准的管理和传播已经开始,会议使最佳做法得以分享。
尽管在扭转石油和天然气行业的巨大趋势方面存在这些挑战,但是已经采取了许多战略计划来简化和标准化数据科学流程。一家特定的运营公司已经开始通过规范性指导和技术监督来支持公民数据科学家,并在公司内部更加关注人工智能技能的发展。企业标准的管理和传播已经开始,会议使最佳做法得以分享。然而,合作和创新是关键,需要促进来自更大行业和外部的公开对话。AlphaX Decision Sciences 的首席执行官萨米·哈伦(Sammy Haroon)对人工智能技术和 T2 产业进行了比较。他强调开源是人工智能成功和采用速度的关键,并谈到这个领域更需要数据民主化。
机会是广阔的
除了演讲嘉宾和专题小组成员的丰富内容,上游行业很少有数据公司展示他们的服务。互动海报展示环节不仅吸引了来自美国各地的学生和行业专业人士,还吸引了来自巴基斯坦和挪威的学生和专业人士!强调了人工智能在行业中的一些突出应用:使用计算机视觉和神经网络的崩落检测分析,使用机器学习的渗透率预测,工作流描述和数据争论程序,以应用数据分析改进钻井作业,时间序列压裂数据用于预测完井事件,以及使用人工智能从勘探和生产文件中提取和构建数据,等等。
人工智能在石油和天然气领域的发展是不可避免的,为这些工作雇用合适的人对公司的成功至关重要。2019 年 SPE 数据科学大会为与会者提供了一个宝贵的机会,让他们能够成功地交流和了解这些行业关注的问题,并相应地制定解决方案。跨职能的数据科学家需要接受这样的培训,机会是巨大的。套用一位高管在大会上的话:“这个领域的数据是一笔宝贵的资产,数据科学家和机器学习专家将留在这里。”
数据对于 21 世纪就像混凝土对于 20 世纪一样
原文:https://towardsdatascience.com/data-is-to-the-21st-century-what-concrete-was-to-the-20th-6d6432120fbf?source=collection_archive---------29-----------------------
Photo by Joel Filipe on Unsplash
那些在 20 世纪建造大城市中心的人是在大量新技术的推动下做到这一点的。电力、汽车、混凝土和电梯都推动了新的生活方式,使城市和郊区与之前的城市和郊区有了根本的不同。
新的生活空间是围绕汽车的优势而建立的,它们伸向更高的天空,它们使人们能够通过电力将生活从传统的时钟中解放出来。这对人类心理产生了深远的影响——我们的文化发生了转变,我们的工作生活变得不同,我们的期望也发生了变化。随着新技术(喷气式飞机、计算机)继续驱动我们生活的物理布局,我们将自己塑造成新的世界,并不断变化。
在 21 世纪,我们已经可以看到,驱动技术集群(越来越快的电信网络、传感器、自动化、机器人和人工智能)正在创造新的数字世界结构,人类将按照这种结构塑造自己。我们现在选择花费时间的结构是由数据构建的。这包括痴迷的 Instagrammer 或在线游戏玩家,以及等待下一份零工经济工作的工人和通过虚拟现实会议系统合作的专业人士。
随着算法的进一步推出和数据聚合的大规模回归,我们将发现越来越多的生活被缓和、改变和影响,就像“软件吞噬世界”一样。曾经,企业通过闪亮的实体形象来定义自己——零售商店骄傲地站在大街上——现在,推动企业成功的是数据驱动的 UX 个性化。精心制作的反馈回路确保用户被温和地拉拢到最佳路径。优步的司机评级、Twitter 上的点赞和转发、Apple watch 上的健康数据,都是数据驱动的个性化反馈的例子,我们下意识地根据这些反馈塑造自己。
语言上的相似之处令人着迷。我们谈论建造建筑物的建筑师和工程师——现在用同样的词语来描述那些建造我们新的软件家园的人。
与此同时,流向位置良好的土地的巨大经济回报现在流向了战略数据集。开采水泥的艰难任务现在有了血汗工厂的数据标签。风险资本家和企业家捕捉金融想象力的方式曾经是房地产大亨可以做到的。
Charlie Chaplin being data processed
这对我们意味着什么?如果我们将要生活在一系列的算法中,那么我们将改变我们的生活来匹配它们。我们的祖先对汽车做了同样的事情——新交通工具的经济利益意味着社会让个人屈从于新的范式。乱穿马路成了一种犯罪。行人知道他们的位置。我们仍然接受每年数百万人死亡,因为这种交换似乎是值得的。
我们将为我们将要生活的新数据结构做同样的事情。总的来说,我们的生活会变得更好——就像 20 世纪是 19 世纪的进步一样(有一些明显的军事技术驱动的例外,也可能与我们即将到来的时代相似)。
但是我们将生活在数字建筑中。随着 AR 和 VR 的起飞,它们将变得越来越真实。重要的聚会将在我们曾经拥有会议室的虚拟现实中举行。娱乐将把我们拖入沉浸式的互动世界,有些人将挣扎着浮出水面。购物将在网上自动完成。
相比之下,我们周围的建筑会显得越来越单调、沉闷和空旷。直到,在某个阶段,本世纪中叶对“真实”的渴望将把这一切带回到焦点…
数据湖和 SQL???
原文:https://towardsdatascience.com/data-lakes-and-sql-49084512dd70?source=collection_archive---------9-----------------------
不是悖论。SQL 正被用于分析和转换数据湖中的大量数据。
随着数据量越来越大,推动因素是更新的技术和模式变化。与此同时,SQL 仍然是主流。在这里,我将探讨 SQL 如何用于数据湖和新的数据生态系统。
TL;灾难恢复版本:随着数据和复杂性的增长,SQL 比以往任何时候都更适合分析和转换数据湖中的数据。
SQL Code — Photo by Caspar Camille Rubin on Unsplash
记得 NoSQL 吗?
NoSQL 数据库出现了,承诺了巨大的可伸缩性和简单性。
如果我们必须高速处理种类繁多、数量庞大的大量数据,我们被告知 NoSQL 是唯一的出路。供应商一直在喋喋不休地谈论 SQL 和中间件代码之间的阻抗不匹配。
我们现在发现大多数 NoSQL 供应商在多年贬低连接之后引入了 SQL 层。一些供应商引入了 SQL 的方言,使事情变得更糟。
看起来,在 NoSQL 引入这个 SQL 层是因为害怕像 Google Spanner 这样的新一代数据库,以及提供 JSON、XML 作为一级数据类型的数据库供应商。
Hadoop 呢?
Hadoop 为开发人员提供了 map-reduce 接口,带来了一些巨大的进步,但也带来了许多恐慌。(参见— MapReduce:一个重大的退步— DeWitt 和 Stonebraker )。
使用 map-reduce 在 Hadoop 上进行数据处理,还有很多不足之处。性能调优、处理数据不对称、获得最佳吞吐量,所有这些都需要修改太多的裸机代码。
尝试了多种受 SQL 启发的方法
- Apache Pig:类似 SQL 的语法,FOREACH 代替 FROM,GENERATE 代替 SELECT
- Hive:类似 MySQL 的 SQL-in-Hadoop 语法,将 SQL 转换为 map-reduce
- Drill、Impala、Presto 和 Pivotal 的 HAWQ:Hadoop 上的 SQL,绕过 map-reduce
- Spark SQL:Spark 上的 SQL
- Apache Phoenix:h base 上的 SQL
- Hadoop 作为现有数据库的外部表:Oracle 大数据 SQL、Teradata SQL-H
在经历了许多“大数据年”以及一些 Hadoop 合并和破产之后,我们现在看到了这些技术的幸存者。Hadoop 技术现在更多地存在于云中,而不是本地。现在在组织中很少看到完整的 Cloudera 或 HortonWorks 堆栈。取而代之的是,一些精选的技术蓬勃发展,现在在云数据栈中广泛使用。
数据湖上的 SQL
Stonebraker 很久以前就指出,数据库的性能问题和可伸缩性与 SQL 关系不大,更多的是与数据库本身的设计有关(NoSQL 的讨论与 SQL 无关)。
SQL 的最大优势是它提供了熟悉性和分析数据的表现力。SQL 的健壮性来自关系代数和集合论的基础。
有了数据湖,这就是我们看到的技术。
- Hive metastore 是最受欢迎的数据目录。
- 在 SQL 层中,Presto 作为查询层胜出,并在 Amazon Athena、Google Cloud DataProc、Qubole 中广泛使用。
- Spark 和 Spark SQL 也被广泛使用。
- Hadoop 文件系统(HDFS)用得不多,云存储(Azure Blob、谷歌云存储、AWS S3)更受欢迎,有 CSV、Avro 和 Parquet 文件格式。
云数据仓库和数据湖
原始文件系统上存储的经济性鼓励了数据湖的创建。SQL 用于分析这些数据。
亚马逊红移光谱可以查询 S3 数据。
Snowflake DB 可以使用 VARIANT 列在数据库内部存储 XML、JSON 或 ORC 数据,还可以使用外部表指向 S3 中的数据。
Google BigQuery 和 Azure SQL 数据仓库也支持外部表。
SQL 和 ELT(提取负载转换)
数据处理的 ELT(提取-加载-转换)范式将数据转换步骤放在了最后。首先从源系统中提取并加载到数据库中。
RBAR(逐行处理)的旧的 ETL 方式与关系数据库执行的基于集合的处理形成了直接对比,而基于集合的处理构成了 SQL 的基础。
在 ELT 中,我们现在从源数据库中提取数据,并将其放入数据湖中。
SQL 转换在云数据仓库中或使用 Presto 完成,转换后的数据被加载到目标表中。
通过 GoldenGate、AWS DMS 或使用 Workato/Jitterbit/StitchData 之类的工具或 Kafka 之类的健壮事件管道的涓涓细流都被输入到数据湖或数据仓库中。源系统和装载区之间的转换最小。然后使用 SQL 将这些数据转换并加载到仓库和分析层。
这个 ELT 工具链使用 DAG(有向无环图)工具,如 Apache AirFlow 和无服务器函数,而不是旧的 ETL 工具链的类似 AutoSys 的调度程序。
DBT 是另一个正在转型领域流行的工具。像 FiveTran 和 Matillion 这样的云数据处理工具也使用 SQL 和 ELT。Domo 对 SQL 进行排序以创建转换管道。Looker 基于 LookML 生成 SQL。
参考
- 德威特博士和斯通布雷克博士(2008 年)。MapReduce:一大退步。数据库列, 1 ,23。
- 斯通布雷克,M. (2009 年)。“NoSQL”的讨论与 SQL 无关。ACM 的通信。
机器学习中的数据泄漏
原文:https://towardsdatascience.com/data-leakage-in-machine-learning-10bdd3eec742?source=collection_archive---------10-----------------------
如何防止降低模型质量和/或导致不一致结果的问题
https://media.giphy.com/media/EHcpe9guGONCU/giphy.gif
介绍
当训练机器学习模型时,我们通常会瞄准在某些指标上得分最高的模型,例如准确性。自然地,当我们训练一个在我们的验证或测试数据集上表现很好的模型时,我们选择它作为一个表现良好的模型,并生产/最终确定它。
但是,您是否遇到过这样的情况:一个模型在测试期间表现良好,但在实际使用中却无法达到相同的性能水平?例如,您的模型在测试期间是否达到了 99%的准确性,但是一旦它被生产出来并作用于真实数据,它就无法达到那个性能水平?
测试性能和真实性能之间的这种差异通常可以用一种叫做数据泄漏的现象来解释。
数据泄露
数据泄漏是指机器学习模型的创建者犯下的错误,其中他们意外地在测试和训练数据集之间共享信息。通常,当将数据集划分为测试集和训练集时,目标是确保两者之间没有数据共享。这是因为测试集的目的是模拟真实世界中看不见的数据。然而,当评估一个模型时,我们确实可以完全访问我们的训练集和测试集,所以由我们来确保训练集中没有数据出现在测试集中。
数据泄漏通常会导致测试集的性能达到不切实际的高水平,因为模型是基于它在训练集中已经看到的数据(在某种程度上)运行的。该模型有效地记忆训练集数据,并且能够容易地正确输出那些测试数据集示例的标签/值。显然,这并不理想,因为它误导了评估模型的人。当这种模型用于真正看不见的数据时,性能会比预期的低得多。
数据泄露的原因
现在我将提到一些数据泄漏的常见原因。在训练你自己的模型时,避免这些情况是很重要的。一般来说,您应该避免对您的训练集做任何涉及测试集知识的事情。
预处理
人们犯的一个很常见的错误是在机器学习的数据预处理步骤中泄露信息。重要的是,这些转换只知道训练集,即使它们也应用于测试集。例如,如果您决定将运行 PCA 作为预处理步骤,那么您应该只让 PCA 模型适合训练集。然后,要将它应用到您的测试集,您只需在测试集上调用它的transform
方法(在 scikit-learn 模型的情况下)。相反,如果您在整个数据集上安装您的预处理器,您将从测试集中泄漏信息,因为预处理模型的参数将与测试集的知识相适应。
复制
另一个错误是数据重复,当您的数据集来自嘈杂的真实数据时,这种错误尤其常见。当数据集包含几个具有相同或接近相同数据的点时,会出现这种情况。例如,如果您的数据集包含消息平台上的用户消息,重复的消息可能对应于向许多用户发送相同消息的垃圾邮件发送者。在这种情况下,您可能会遇到数据泄漏,这仅仅是因为您的训练集和测试集可能包含相同的数据点,即使它们可能对应于不同的观察值。这可以通过在分割成训练集和测试集之前消除数据集的重复来解决。您可以通过删除完全重复的内容,或者使用模糊匹配方法(例如通过编辑文本数据的距离)来删除近似匹配的内容。
时态数据(隐式泄漏)
即使您没有明确地泄漏信息,如果您的测试和训练集之间存在依赖关系,您仍然可能会遇到数据泄漏。一个常见的例子是时间数据,即时间是一个相关因素的数据,如时序数据。考虑下面的玩具例子:你的训练集由两个数据点 A 和 C 组成,你的训练集由一个数据点 B 组成。现在,假设这些数据点的时间顺序是 A → B → C 。在这里,我们很可能通过创建训练集和测试集的方式造成了数据泄漏。通过在点 C 上的训练和在点 B 上的测试,我们创建了一个不切实际的情况,在这种情况下,我们根据相对于测试集时间点的未来知识来训练我们的模型。因此,我们已经泄露了信息,因为在现实世界的场景中,我们的模型显然不知道未来。为了解决这个问题,您应该确保您的测试序列分割也是跨时间分割的。因此,训练集中的所有内容都应该出现在测试集中的所有内容之前。这将创建一个更加真实的训练环境,并允许您正确地评估您的模型,就像它正在处理输入的真实世界数据一样。
数据日志:数据的统一抽象
原文:https://towardsdatascience.com/data-logs-datas-unifying-abstraction-1c38403a24c7?source=collection_archive---------28-----------------------
Photo by Alice Donovan Rouse on Unsplash
日志是按时间排序的记录序列。它被配置为允许越来越多的记录被附加到末尾:
日志记录了所有的事情。计算环境中有各种各样的日志:
服务器日志很重要。他们跟踪访问互联网内容和应用的设备。
当您的设备访问一个网站时,托管该网站的服务器会从您的设备获取并保留一系列详细信息,包括设备访问了哪些资源(网页)、设备访问这些资源的时间以及访问这些资源的设备的 IP 地址。
这些日志的标准被称为“通用日志格式”,如下所示:
这可能看起来不多,但从这些日志中,您可以推断出访问资源的设备的配置文件,它如何浏览您的网站,将它们与特定的地理位置联系起来,等等。
这是一个名为“点击流数据”的用户跟踪日志集合。对于脸书、网飞和优步等面向消费者的技术公司而言,点击流日志是它们的命脉。早在 2010 年,脸书就在收集这些数据,并使用 Flume(Hadoop 的开源日志流解决方案)来收集这些数据,并将其传输到各种系统进行分析。每个公司都用日志做东西:优步、Airbnb、网飞,以及几乎每一个电子商务公司。
到目前为止,收集最多日志的组织会胜出,因为从表面上看,研究这些日志可以让他们了解用户在什么时候做了什么,并调整网站以允许用户做更多的事情。
完成更多购买。完成更多的 MOOC 课程。
将免费用户转化为付费用户。
想办法让更多的用户点击“喜欢”按钮。
然后,这些组织可以撰写漂亮的博客文章,介绍他们为收集这些日志而构建的所有数据工程平台,以及他们能够在这些平台上进行分析的数据科学。
真正的幕后赢家是参与处理日志数据的组织。例如,杰伊的公司,为 Kafka 提供支持,Kafka 是一种流处理解决方案,在过去五年左右的时间里真正起飞。但是还有数百家公司专门研究点击流处理工具链的每一个组成部分。围绕收集、存储和分析日志数据的需求,整个行业已经发展起来。看看今年的数据就知道了。
所有这些(日志收集、数据科学、工具货币化)对于收集日志的组织和构建工具来收集日志的公司来说都非常令人惊讶,直到最近发生了一些事情。
首先,剑桥分析公司丑闻——不知何故做了不可思议的事,至少改变了部分反对脸书的主流情绪。这意味着媒体最近报道了越来越多关于科技巨头的负面文章,这反过来又导致了立法者的负面抱怨。例如,就在两年前,看到任何人谈论拆分科技巨头都令人难以置信,更不用说作为总统平台的积极组成部分了。
其次,GDPR 登陆了——在欧洲,这是一件大事。谷歌已经因为违反它被罚款了。较小的公司举步维艰。第三方广告和跟踪已关闭。
在美国,除了在人们的收件箱里乱丢通知之外,GDPR 并没有产生太大的影响。但是 CCPA 会。CCPA 是加利福尼亚州的隐私法,将于明年 1 月生效。
该法案是目前各州颁布的最强的隐私立法,在隐私数据方面给予消费者更多的权力。随着各种主要科技巨头总部设在加利福尼亚州,包括谷歌和脸书(这两家公司最近都遭受了数据泄露), AB 375 准备对数据隐私产生深远的影响。 AB 375 将于 2020 年 1 月 1 日全面生效。
届时,在加州运营的公司基本上必须能够完全告知消费者他们在收集什么,并允许他们通过删除所有数据来选择退出。这意味着删除成千上万的日志,并弄清楚如何重新搭建日志收集系统的平台,以便能够删除数据。
CCPA 的天才之处在于,如果一个大型组织在加州运营,那么它很可能在其他各州也有运营。天哪,很难在州/辖区级别分离混合的日志数据,这意味着要么公司将迁移其总部,要么必须遵守 CCPA 对其所有数据的更严格的法规。
日志是个有趣的东西——一方面,它们非常有用。另一方面,因为它们被设计成指数级增长,永远不会减少,而且它们似乎无处不在,就像你无法摆脱的面包屑。跟踪、存储、清理、绑定到其他数据,以及同样重要的用于数据科学目的的采样,都是一个巨大的麻烦。
CCPA 本质上给这个日志存储和分析系统带来了压力。
在我看来,我们将要看到的结果是,收集更多的日志是不好的。保留的越多,要删除的就越多。你就越需要回馈给顾客。GDPR 揭露的这类违规行为的责任就越大。
公司和工程师仍然在谈论收集和分析日志的复杂方法,黑客新闻充满了围绕分布式流收集和分析系统的讨论。但是,主流媒体开始谈论一些其他的东西——日志收集如何在社交上影响我们,以及如何解散从事这种日志收集的科技公司。
日志还不是一种责任形式,但很快就会成为。正是这一点,比任何复杂的流架构都更值得公司认真思考。
这里的问题(从我作为一名付费数据科学家的角度来看)是——这对数据科学意味着什么?迄今为止,数据科学的迅猛发展一直基于解码日志以获取用户行为的艺术。这是否意味着数据科学以及支持它的工具生态系统正在消失?
我不这么认为,但我认为数据科学在未来五到十年的发展将与前十年有根本的不同。
如果数据科学的第一个十年是关于收集和分析一切,那么第二个十年将是关于如何对收集和分析的数据进行深思熟虑和有选择性的处理。*
我想在这里提两个思路作为起点。采样的艺术,以及删除和隐藏用户数据的艺术。
首先是抽样——早在 2000 年,Jakob Nielsen 就在一篇令人惊讶的、非常被低估的文章中谈到了为什么只需要五个用户来执行测试。乍一看,这似乎有些疯狂。你怎么可能推断出脸书的 10 亿用户,在地理、经济和种族上的多样性,会在网站上做什么呢?我不知道五个是否足够,但这篇文章背后的指导原则是,一旦用户超过一定数量,你收集的数据只是额外的噪音,这是正确的。真正的挑战将是如何收集足够的数据,使其在统计上有效,而不是多收集一个日志。
其次,删除和隐藏数据的能力将变得更加重要——我还没有看到任何关于如何正确配置系统以增量方式删除数据的讨论。但是这将变得非常重要,因为,如果你从不收集它,你就永远不能放弃这些数据。Snapchat 的想法是正确的,我(乐观地)期待更多短暂的数据收集工具出现。
我实际上看到更多的是围绕类似于差分隐私的讨论,或者在使用用户数据进行统计分析时隐藏用户数据的做法——在谷歌(谷歌在这方面有很大的既得利益)正在真正起飞。差分隐私本质上是将白噪声——虚假数据——添加到真实数据集中,直到真实数据在统计上仍然有效,但你无法从中推断出任何一个真实用户。
随着 CCPA 的到来和组织开始处理日志问题,请继续关注。
数据管理策略:简介
原文:https://towardsdatascience.com/data-management-strategy-d3ce6db599c1?source=collection_archive---------7-----------------------
你想知道的关于它和它的主要演员的一切
Picture from Unsplash
介绍
这一系列文章的目标是清楚地了解实施数据管理计划的好处、需求和挑战。
数据管理项目将是横向的,并将联系组织的不同部门。一个主要的挑战是让所有的业务信息都可用。
需要指出的是,数据管理方法关注的是应该做什么,而不是如何做。数据管理经理管理这些变化,但他们不是执行这些变化的人。
即便如此,他们在这种类型的项目中,尤其是在数据治理中,将会扮演非常重要的角色。他们应该行动起来,并被视为推动数字化之旅的领导者
在本系列结束时,您将能够理解与数据管理相关的主要概念,即:
- 政府
- 体系结构
- 质量
- 安全性
- 建模
- 主数据
在这些概念中,我们将从以下角度探讨基本观点:
- 相关人员(组织)
- 流程(活动)
- 技术(技术解决方案在每个阶段必须具备的最低要求)
在第一篇文章中,我们将重点关注开发结构良好的数据管理策略背后的一般概念和动机,这是组织内数字化之旅的关键组成部分。
为什么是数据管理?
近年来,所有组织中的数据都出现了巨大的增长。数据已经成为许多公司竞争力、生产力、增长和创新的基础。脸书、亚马逊、Spotify 和网飞是我们可以思考的几个例子,由于其数据战略,它们已经彻底改变了这个行业。
公司运营系统中不断增长的数据量以及互联网、社交媒体和多媒体的出现,正在引发一场对客户及其偏好和需求的知识的革命。以及深入了解公司的内部流程,因为我们现在能够清楚地跟踪和监控哪些部分表现良好,更重要的是,哪些部分表现不佳。
如此庞大的数据量将我们置于一个特殊的环境中,在这个环境中,数据管理成为一个基本部分,因为数据已经成为公司的资产。
目前,数据管理是组织中的优先事项,并且为了满足公司的战略目标,拥有高质量的公司信息数据变得比以往任何时候都更加必要。
数据管理意味着整个公司在数据定义和管理方面的策略、角色、流程和职责的定义。有效的数据治理模型需要一个完整的结构来促进技术和业务之间的协作。
了解数据治理在所有组织中的重要性及其对业务信息整体愿景的影响非常重要。
此外,了解在定义有效的数据治理时要考虑的关键因素,以及了解实现数据治理技术的技术和方法方面也是至关重要的。
数据管理的目标是通过数据治理增加组织数据的价值。
新知识领域
在过去的几年里,我们经历了与数据科学相关的技术的兴起,其中一些是:
数据工程
数据工程的重点是建立适当的基础设施,以促进组织内部的数据流动,并使这些数据准备成为有用的格式。
数据分析
数据分析侧重于从数据中发现有用的信息。数据科学的这一分支涉及对数据的描述和诊断分析,解释发生了什么以及为什么会发生。它还涉及数据可视化方面(这是一个完全独立的领域)
机器学习
机器学习是专注于让计算机从数据中学习的科学(和艺术)。他们通过学习导致特定结果的过去数据的特定特征之间的相关性来做到这一点,因此当向他们提供新数据时,他们可以做出准确的预测。
深度学习
深度学习是机器学习的一个子领域,专注于复制智能生物用于学习的学习机制。他们通过用简单的概念解构复杂的概念来做到这一点,因此,以一种分层的方式学习。使用人工神经网络来实现这一点。
由于已经获得的技术和实时数据处理能力,这些知识领域已经改变了游戏规则。我们在更短的时间内从更多的来源获得了更多的数据。此外,计算能力的民主化使我们能够跟上这些数据的处理,这要归功于亚马逊网络服务、谷歌云平台和 Azure(仅举几例)等技术。
基础设施开发不再是不可能完成的任务,新的挑战是从这些数据中获取价值。定义生成哪些模型来从中提取商业价值。
数据可以从社交网络、传感器、移动设备中提取…为了让这些经过处理的信息对我们有利,我们必须开发分析技术和数据管理,以提供公司信息的 360 度视角。
这将通过我们组织中的数据治理计划来实现。
谁将领导这项倡议?
Gartner 的一项调查发现了组织中的一个新人物,即 CDO 或首席数据官。
这种 CDO 是变革的代理,旨在提高数据的价值。数据的存在是为了提取商业价值和改进决策。这些角色属于组织和创新的最高管理层。CDO 将负责所有数据治理,并为组织的数字化转型做好准备,这将涉及数据的集成,以前这些数据是分散的。
CDO 的任务是:
- 定义数据治理
- 让整个组织做好准备并参与进来,以拓展数据文化。
CDO 将通过确保数据是高质量信息的来源并执行所有决策以使信息可信来协助决策。
尽管目前他们的角色还没有完全定义,但是在几年后,不应用数据治理技术的组织将会很少,并且肯定会比那些应用它们的组织处于明显的劣势。
什么是数据管理?
它是定义有效的方法,以便信息在我们需要它的地方,在我们需要它的时候,并且具有我们需要的特征。
数据治理是管理层和 IT 部门的共同责任。
数据治理需要持续的改进和发展。为此,它使用了最佳实践框架。
企业数据管理是关于有效管理整个数据生命周期。我们从捕获、存储、转换、不同系统之间的移动以及数据的用途来说。
定义数据治理模型对公司来说是必要的,这是客户所期望的,也是政府所要求的。这是一个必须解决的需要。
这是一个循环过程,需要不断确保数据的质量。
DAMA 框架
这是管理数据管理的拟议参考框架。DAMA 是一个监督 DM 结构的国际组织。这是数据管理良好实践的汇编。它确定了成功数据管理的 11 项功能
Source: DAMA International
- 数据架构
- 数据建模和设计
- 数据存储和操作
- 数据安全
- 数据集成和互操作性
- 文档和内容管理
- 主数据和参考
- 数据仓库和商业智能
- [计]元数据
- 数据质量
这些功能将被浓缩为以下几个,以便有一个更加实用和灵活的方法:
Figure by Author
数据管理策略中使用了哪些技术?
数据管理计划中使用的技术选择将根据每个组织的特定需求和基础架构而有所不同。然而,一些最常见和最常用的技术是:
- 数据库 : Oracle Database 12c 和 PostgreSQL
- 建模:使用 SQL Developer 的数据建模器
- 数据质量 : Talend 准备和 Trifacta 牧马人
- 数据集成 : Oracle 数据集成器和 Talend 数据集成
在接下来的文章中,我们将深入其中的每一个领域,了解谁是主要参与者,以及在数据管理之旅的每一步中使用的最佳实践和技术。
你可以在下面找到该系列文章的链接。
数据管理策略:第 1 部分—数据治理&元数据管理
数据管理策略:第 2 部分—数据质量&数据架构
数据管理策略:第 3 部分——数据集成、数据安全和主数据
最后的话
如果你喜欢这篇文章,那么你可以看看我关于数据科学和机器学习的其他文章 这里 。
如果你想了解更多关于机器学习、数据科学和人工智能的知识 请关注我的 Medium ,敬请关注我的下一篇帖子!
数据管理策略:第 1 部分
原文:https://towardsdatascience.com/data-management-strategy-part-1-146c7e93fbbb?source=collection_archive---------5-----------------------
数据治理和元数据管理
Picture from Unsplash
介绍
这是一系列文章的第 1 部分,这些文章涉及在一个有抱负的数字组织中执行和实施成功的数据管理策略。
你可以在这里找到这个系列的介绍。
在本文中,我们将关注以下主题:
- 数据治理
- 元数据管理
这些是每个数据管理计划的关键方面,我们将深入讨论每一个方面。具体来说,我们将从以下几个方面来探讨这些问题:
- 相关人员(组织)
- 流程(活动)
- 技术(技术解决方案在每个阶段必须具备的最低要求)
所以,事不宜迟,让我们投入进去吧!
数据治理
数据治理是数据管理策略中最基本的功能,因为它是其他功能的中心和领导者。
这里,我们应该区分两个经常被误解的概念:
- 数据治理负责定义数据管理策略
- 数据管理是执行既定策略
虽然数据治理是一个技术性较低的功能,但它可以利用元数据和建模工具的力量来定义数据管理的某些方面。这些工具将用于更好地理解将要使用的数据和数据流的整体架构。
根据 DAMA 的说法,数据治理指的是对组织内使用的数据的可用性、可用性、完整性和安全性的一般管理。
数据治理包括:
- 管理机构(理事会)
- 一套标准和政策
- 实施这些标准和政策的计划。
数据治理计划在整个组织中建立流程,以在系统和应用程序中提供标准,例如术语定义和一致的业务规则。
它确定参与需求定义的合适人员,并建立数据标准和数据使用的定义。
数据治理确保在整个组织中定义和应用相同的数据标准和策略。
数据管理的一般原则
为了确保整个企业符合定义的标准,必须建立一个数据治理组织。
数据治理的组织涉及多个级别的业务和技术角色的组合:
- 发起人:为数据治理工作提供领导和资金
- 数据管理委员会:鼓励控制和流程的采用和实施
- 角色:为数据
标准建立角色并明确定义职责;明确定义并发布的标准和政策 - 监督:建立跟踪、审计和报告符合标准和政策的过程。
- 变更控制:建立评估、批准和沟通标准和政策变更的过程。
- 高管支持:确保高管参与并与数据治理计划保持一致。
数据治理流程
Figure by Author
1.数据治理组织的建立
- 确定数据治理计划的执行发起人
- 建立数据治理委员会
- 让数据治理计划的主要利益相关者(数据所有者、管理者、保管者、架构师)参与进来
2.定义标准和数据策略
- 定义数据标准
- 定义数据策略
3.数据标准和政策合规性
- 在整个组织中应用标准和数据策略
4.定义标准和数据策略
- 定期执行审计和控制操作
- 数据治理控制性能的监控和测量。
数据治理的技术工具
元数据支持和数据质量支持工具用于实现数据治理。市场上很少有被认为是特定的工具。
数据治理的一个重要功能是设计可用于实现数据标准和策略的工作流。
另一个重要功能是设计仪表板,用于监控和控制数据治理活动。
Figure by Author
[计]元数据
元数据管理是成功的数据管理策略的另一个关键功能。在彻底讨论之前,让我们先介绍一下元数据的概念及其不同类型:
元数据基本概念:
根据维基百科的定义,元数据是“提供关于其他数据的信息的数据信息”。换句话说,它是关于数据的数据,提供关于该数据的一个或多个方面的信息的数据。
元数据用于总结有助于跟踪和使用数据的基本信息。
作为一个例子,我们可以考虑一个数字图像。它的元数据可以是图像的大小、分辨率、存储位置、生成时间等等。
元数据概念中有两个基本组成部分:数据元素(DE)和关键数据元素(CDE)。
数据元素
数据元素(DE)是由一组属性组成的数据的原子单位:
- 定义
- 识别
- 表现
- 允许值
关键数据元素(CDE)
关键数据元素是对特定业务领域或业务流程的成功至关重要的数据元素。
数据元素成为关键的标准是什么?
- 业务数据对于组织的负责人来说至关重要。
- 关键业务流程数据及其组成部分,例如联系客户。
- 高级业务报告中使用的关键数据。
- 公司重要事物的唯一标识符,如客户 ID。
元数据管理
它涉及管理关于其他数据的数据,如数据模型和结构,而不是内容。它包括管理关于不同模型的数据结构及其关联的信息,例如:
- 词汇表中的商业术语
- 数据逻辑模型或数据库表和列中的属性,以及它们的关联
有业务和技术元数据,下图总结了它们的特征:
Picture by Author
业务元数据
它们从业务使用的角度描述数据元素,包括诸如带有术语和定义、同义词、首字母缩写词、业务规则和职责的业务术语表等信息。我们所说的业务元数据是指:
- 商业术语表和分类
- 商业规则
- 责任
元数据管理中的角色
有几个角色参与其中:
- 业务所有者:最终负责数据的定义、质量和数据价值。他们负责确认数据的使用符合一般数据策略。(数据治理)。他们还负责驱动活动和
数据管理流程。 - 数据管理员:或 Data Stewart 负责数据的运营监控、与整个组织内各领域专家的互动,以及确定标准化、测量和监控数据质量的
方法。它负责确认已经定义了数据标准。并且已经实施了流程和实践 - 技术负责人:是技术专家,最终负责确保来自系统的数据按照定义的数据标准进行管理和使用。包括遵守商业规则、政策和程序。
- 数据保管人:是负责系统中数据安全管理的技术专家。它负责确认定义的数据标准得到应用。
技术元数据
它们从技术角度描述数据元素,包括逻辑数据模型、源和目标系统、表和字段结构以及系统依赖关系等信息。
操作元数据告知应用程序的轴心:频率、记录帐户、分析的组件和用于审计目的的其他统计数据。
CDE 标准报
技术和业务元数据代表 CDE 标准,这意味着关键数据元素从技术和业务角度得到了充分描述。
CDE 标准也被称为 CDE 的 360 度视角。通过获得 CDE 的 360°视图,为整个组织的数据管理提供了最佳条件,这是数据管理的最终目标。
一旦做到这一点,就有可能回答如下问题:
- CDE 的定义是什么?
- 谁拥有 CDE 的生意?
- CDE 存放在哪里?
- 在哪些报告中使用了 CDE?
- CDE 的最终来源是什么系统?
元数据管理流程
Figure by Author
元数据流程活动涵盖了 DM 中现有人员、流程和技术视角内的流程视角。
1。——辨认 CDE 的
它包括通过与利益相关者的访谈来分析业务需求和确定最相关的 CDE 的活动。
2。-收集 CDE的业务元数据
对于相关的 CDE 定义业务术语,同义词、首字母缩写词、定义和分类法也定义了业务规则,并负责任地确定这些规则。
3。-收集 CDE的技术元数据
对于相关的 CDE,确定数据系统中的 CDE 表示,确定数据源和数据谱系。
4。-创建 CDE 标准(360°视角)
为了让 CDE 创建业务和技术元数据之间的关联,验证 CDE 数据标准。
5。-应用 CDE 标准
确保符合 CDE 标准,以确保管理每个 CDE 并由定义的标准(数据治理)使用。
系统开发的生命周期
指计划、创建、测试和部署信息的过程。
重要的是,来自系统开发生命周期的元数据必须得到定义,并成为元数据功能流程的一部分。
Figure by Author
元数据的技术工具
最低技术要求是:
- 建立和部署集中式元数据存储库的能力。
- 能够通过词汇表的层次结构定义一致的术语、有效定义、有效值和数据域。
- 能够通过数据建模工具、商业智能工具和 ETL 从最流行的数据库管理系统(Oracle、SQLServer、NoSQL)中提取元数据。
- 能够管理来自多个来源和技术的元数据版本。
Figure by Author
结论
这是数据管理策略系列的第 1 部分,在下一篇文章中,我们将讨论数据质量和数据架构的功能。
如果到目前为止你已经喜欢这个系列,不要错过这里的介绍并且不要忘记留下掌声,所以这将激励我继续制作内容并且它将到达更多的人:)
如果你喜欢这个帖子,你可以看看我关于数据科学和机器学习的其他帖子 这里 。
如果你想了解更多关于机器学习、数据科学和人工智能的知识 请在 Medium 上关注我,敬请关注我的下一篇帖子!
数据管理策略:第 3 部分
原文:https://towardsdatascience.com/data-management-strategy-part-3-f1ba544be2dc?source=collection_archive---------13-----------------------
数据集成、安全性和主数据
Picture from Unsplash
介绍
这是一系列文章的第 3 部分,这些文章涉及在一个有抱负的数字组织中执行和实施成功的数据管理策略。
你可以在这里找到这个系列的介绍。
在本文中,我们将关注以下主题:
- 数据集成
- 数据安全
- 主数据
这些是每个数据管理计划的关键方面,我们将深入讨论每一个方面。具体来说,我们将从以下几个方面来探讨这些问题:
- 相关人员(组织)
- 流程(活动)
- 技术(技术解决方案在每个阶段必须具备的最低要求)
所以,没有进一步的行动,让我们投入进去吧!
数据集成
数据集成是指将数据从源数据系统转移到目标数据系统的过程和技术。在这个过程中,数据被转换成信息以满足业务需求。
这些数据必须可以在需要时从任何来源获得,并具有所需的功能。
数据集成场景— ETL
ETL(提取、转换和加载)指的是数据集成方法,其中数据从源系统中提取,然后经过转换过程,最后加载到目标系统中。
典型的 ETL 场景通常用在数据仓库系统中。
Figure by Author
数据集成场景— ELT
EL-T(提取、加载和转换)指的是数据集成方法,其中数据从源系统中提取,然后不经转换就加载到目标系统中。数据转换稍后在目标系统中执行。ELT 场景是大数据/Hadoop 系统的典型场景。
传统 ETL 架构
- 性能下降
- 成本更高
- 转换硬件
Figure by Author
ODI — ELT 架构
- 更好的性能
- 单负载
- 没有额外的硬件成本
数据集成中的批处理与实时
一批
- 在批处理中,在一次执行中收集一大组事务并处理数据。
- 由于数据量很大,所以必须在资源不太忙的时候执行这个过程(这个步骤通常在晚上进行)。
- 批处理会延迟对数据的访问,需要密切监控,并且数据可能在一段时间内不可用。
- 由于数据访问的延迟,在处理完成之前,知识会丢失。
- 批处理过程中出现的问题会延迟整个过程,因此您需要人员支持来监控它的运行。
实时
- 实时处理按需处理小组事务。
- 实时处理的优势在于,它可以用更少的资源提供对数据运行的即时访问,并提高正常运行时间。
- 借助实时数据集成,您可以在交易发生时了解自己的业务。
- 如果出现错误,可以立即处理。
- 实时处理设计更加复杂。
- 虽然实时处理系统需要更多的努力来设计和实现,但对企业的好处是巨大的。
数据集成角色
数据集成专家主要负责执行与数据集成相关的活动。他们将与业务负责人、数据经理、技术负责人、数据保管人、MDM 专家和数据架构师密切合作。
他的主要职责涉及数据集成应用程序的设计和实现,包括映射规范的定义、数据集成作业的设计和实现…
Figure by Author
数据集成工具
对每个数据集成技术工具的最低要求是:
- 能够执行批处理和实时处理。
- 能够执行数据更改检测(识别修改的记录)。
- 能够执行结构化和非结构化数据的强大转换。
- 整体错误处理操作的能力。
Figure by Author
主数据和参考数据
主数据
主数据指的是在整个组织内符合和共享的数据。例如:客户数据、员工、产品…
参考数据
参考数据是主数据的子集,指的是定义其他数据字段可以使用的一组允许值的数据。例如:国家代码、工业活动分类…
这些数据的功能保证了这些数据的集中管理,这些数据由不同的部门共享。
主数据管理
每个成功的主数据管理都有 3 个关键步骤:
- 识别可能匹配的记录
- 主数据管理应用业务规则来组合和合并记录
- 主数据管理人员创建具有可信属性的主记录
参考数据管理
每个成功的主数据管理都有 3 个关键步骤:
- 参考数据管理确定要搜索的记录
- 参考数据管理为搜索提供参考表
- 参考数据管理根据业务标准更新记录
区分主数据和参考数据的标准是:
Table by Author
主数据和参考数据管理角色
主数据管理(MDM)专家是负责执行与主数据和参考数据管理相关的活动的主要角色。尽管这是一个特定于主数据和参考数据管理的角色,但主数据管理专家与业务所有者、数据管理员、技术所有者和数据保管者密切合作。
MDM 专家的主要职责与 MDM 产品的设计和实现相关(例如,定义 MDM 中的属性、创建 MDM 映射文档等)。
Figure by Author
主数据和参考工具
每个主数据和参考工具必须具备的最低要求是:
- 支持多个领域,如客户、产品、位置和帐户。
- 有效管理领域之间的关系,例如从客户到产品。
- 主数据实体的分类、分组和层次结构。
- 识别重复数据及其级联消除的强大算法。
- 能够根据组织要求轻松配置关键数据元素以识别数据匹配。
- 通过创建单个数据记录或黄金记录,能够配置业务规则以使信息尽可能保持最新。
Figure by Author
数据安全
数据安全(数据保护或数据隐私),是指保护机密信息免受内部和外部未经授权的访问所必需的流程、政策和技术。
机密信息的示例:医疗保健号、出生日期、种族、信用卡号、销售计划…
数据治理指的是如何构建内容的规则。
数据安全指的是如何保护和使用内容的规则。
敏感信息与非敏感信息
非敏感信息
- 公共信息:已经在公共领域的信息(例如,性犯罪者登记和选民登记档案)。
- 常规业务信息:不受任何特殊保护的业务信息,通常可以与公司内外的任何人共享。
敏感信息
- 个人和私人信息:指属于私人的信息,但此人可能出于个人或业务原因选择与他人共享(例如,ss 号码)。
- 商业机密信息:披露后可能影响公司的信息(销售和营销计划)。
- 机密信息:通常是指许多国家政府强制实施的特殊安全法规中的机密信息。
数据安全流程
每个成功的数据安全流程的四个建议步骤是:
- 定义数据安全政策
确定与数据隐私相关的要求,定义数据保护政策,定义数据安全实施指南。
2。提供技术支持
实施适当的技术工具以支持数据保护政策的实施
3。实施数据安全政策
并对人员进行适当培训
4。监督和控制数据安全策略的应用
确保数据保护策略中定义的标准适用于整个组织
数据安全角色
It 是负责实施数据保护策略的关键角色。虽然这一职能专门针对数据安全,但数据隐私官将与所有其他数据管理职能密切合作。
主要职责包括:
- 制定和实施数据安全政策
- 就所有个人数据的处理提供信息和指导。
- 为员工制定“最佳实践”指南。
- 向员工提供培训
- 处理、协调和回应所有信息请求
Figure by Author
数据安全的技术工具
电子邮件保护
- 入站邮件过滤
- 自动过滤和删除垃圾邮件
- B2B 通信的附件和加密分析
杀毒
- 为员工提供互联网接入
- 可在网络中的所有计算机上执行
防火墙
- 提高组织中计算机网络安全性的硬件系统
加密 Wi-Fi
- 如果公司中有 Wi-Fi 网络配置,则必须对网络进行加密,只有授权人员才能使用访问代码进行访问。
云中的数据存储
- 在云端保存和处理文档
- 启用云安全工具,让多个用户能够更轻松地从移动设备或远程位置访问文档和文件。
安全网络访问
- 保护和访问组织中的互联网
- 保护服务器和系统免受黑客攻击非常重要。
结论
这是关于如何在组织中实施成功的数据管理策略的最后一篇文章。如果你喜欢这篇文章,不要错过这里的介绍。
如果你喜欢这篇文章,那么你可以看看我关于数据科学和机器学习的其他文章 这里 。
如果你想了解更多关于机器学习、数据科学和人工智能的知识 请关注我的 Medium ,敬请关注我的下一篇帖子!
数据管理策略:第 2 部分
原文:https://towardsdatascience.com/data-mangement-strategy-part-2-fe23192a0eca?source=collection_archive---------18-----------------------
数据质量和架构
Picture from Unsplash
介绍
这是与在一个有抱负的数字组织中实施和实现成功的数据管理策略相关的系列文章的第 2 部分。
你可以在这里找到这个系列的介绍。
在本文中,我们将关注以下主题:
- 数据质量
- 数据架构
- 数据集成
这些是每个数据管理计划的关键方面,我们将深入讨论每一个方面。具体来说,我们将从以下几个方面来探讨这些问题:
- 相关人员(组织)
- 流程(活动)
- 技术(技术解决方案在每个阶段必须具备的最低要求)
所以,没有进一步的行动,让我们投入进去吧!
数据质量
实现数据质量不是一件容易的事情,特别是当数据来自多个来源、采用不同的技术格式和处于非常不同的环境中时。这是当前大多数组织的现实。
在我们需要的地方、时间和方式拥有它们通常是一个挑战。此外,数据通常是“脏的”:充满错误、遗漏或干扰。这些错误可能意味着信息和电信项目以及公司数据开发的失败。
不幸的是,这个数据层是一个经常被忽视或忽略的关键组件。确保组织中数据的质量、完整性和准确性应该是任何数据管理战略的主要目标之一,因为这是实现战略目标的一个关键因素。
糟糕的数据质量会带来实实在在的经济影响。数据的提取、转换和加载过程(ETL)可能会占用数据项目开发时间的 80%。此外,拥有不能准确代表现实的数据,意味着基于这些数据开发的任何应用程序实际上都是无用的。
出于所有这些原因,理解数据策略这一方面的至关重要性至关重要。你的数据质量就是你从中获得的一切的质量。
数据质量管理
数据质量管理指的是组织使用的方法、政策和流程,以确保公司内系统和数据流中数据的以下一些关键属性。
应对每个关键数据元素或 CDE 提出以下问题,以满足数据质量要求:
- 准确吗?→准确性
- 是否有效?→有效性
- 是最新的吗?→当前
- 完成了吗?→完整性
- 是独一无二的吗?→单一性
- 符合吗?→一致性
并非所有数据质量维度都适用于所有关键数据元素或 CDE(例如,出生日期将定义有效性和完整性维度的数据质量)。
数据质量维度
为了深入探索前面的数据维度,我们应该更全面地定义它们。
数据质量维度指的是可以评估并用于衡量数据质量的数据方面或属性。有 6 个关键维度:
精度
这意味着数据准确地代表了真实世界。例如:拼写错误。
有效期
这意味着数据符合其定义的辛塔克斯(格式、类型和范围)。例如:不正确的客户性别和类型值。
电流
从时间的角度来看,数据代表现实。它们是最新的可用信息。例如:7 月 1 日发生的客户地址变更,并在 7 月 15 日引入系统。
完整性
这意味着就业务重要性而言,数据是完整的。例如:缺少邮政编码的客户地址。
单一性
数据被正确识别并只登记一次。例如:唯一的客户用不同的 id 在数据库中注册了两次。
一致性
数据在整个数据集中以相同的方式表示。例如:删除客户的帐号,但有一个采购订单与该帐户相关联。
数据质量规则
它们是业务规则,目标是确保数据维度在准确性、有效性、完整性、唯一性和一致性方面的合规性。
让我们看一个客户的 CDE 出生日期的例子:
Figure by Author
数据质量过程
Figure by Author
定义 DQ 要求
- 执行数据分析以帮助发现数据频率和格式。
- 可以使用专门的工具或查询语言对数据源(SQL)进行数据分析。
- 数据质量问题可能在分析过程中被发现,但是分析的目的是发现用于数据质量评估的信息。
DQ 评价
- 为准确性、有效性、完整性等定义数据质量规则。以及质量阈值。
- 通过遵守现有数据集中的数据质量规则来执行数据质量评估。
- 识别数据质量问题并更新问题记录。
DQ 问题求解
- 对于在数据质量评估期间发现的问题,执行根本原因分析(RCA)以确定问题的根本原因。
- 通过消除问题的根本原因来解决问题。
- 如有必要,审查数据策略和程序。
DQ 监控
定义和开发数据质量 KPI 仪表板,以执行数据的跟踪和监控。
数据质量的主要角色
数据质量分析师代表数据质量的关键角色,负责执行与数据质量流程相关的活动。
虽然它是唯一的特定数据质量角色,但它将与业务所有者、数据管理者、技术所有者和数据保管者密切合作。
除其他外,其职能包括定义数据质量规则、分析结果、分析、评价、调查数据质量问题的原因等。
Figure by Author
确保数据质量的技术工具
最低要求是:
- 能够执行数据分析,包括数据集的统计分析。
- 能够为关键数据的质量控制定义和执行数据质量规则。
- 存储数据质量评估和结果的能力。
- 执行解决和发现问题过程的能力。
- 能够创建和可视化数据质量记分卡。
Figure by Author
数据架构
数据架构指的是模型、策略、规则或标准,这些模型、策略、规则或标准控制着收集什么数据,如何在组织的系统中存储、组织和使用这些数据。它涵盖了每个功能如何适应整体数据管理框架。
Figure by Author
数据架构角色
数据架构师主要负责设计数据架构。尽管这个角色特定于数据架构,但是数据架构师将与所有其他数据管理角色密切合作。
这个角色的主要职责包括跨数据架构层设计和优化数据架构。
数据架构师还提出支持企业架构和数据管理功能所需的技术。
Figure by Author
结论
这就是数据管理策略系列的第 2 部分。我们将在下一篇文章中继续探索更多关于数据架构和主要数据集成工具的内容。
如果你已经喜欢这个系列,不要错过这里的介绍。
如果你喜欢这篇帖子,那么你可以看看我在数据科学和机器学习方面的其他帖子。
如果你想了解更多关于机器学习、数据科学和人工智能的知识 在 Medium 上关注我 ,敬请关注我的下一篇帖子!
熊猫机器学习的数据处理
原文:https://towardsdatascience.com/data-manipulation-for-machine-learning-with-pandas-ab23e79ba5de?source=collection_archive---------7-----------------------
熊猫提供的用于机器学习项目的一些数据工具的介绍
Photo by Michael Fenton on Unsplash
python 熊猫库是一个开源项目,提供了各种易于使用的数据操作和分析工具。在实际建立任何模型之前,任何机器学习项目都必须花费大量时间来准备数据,分析基本趋势和模式。在接下来的文章中,我想简单介绍一下 pandas 中的各种工具,这些工具用于在开始建模之前处理、清理、转换和分析数据。
在整篇文章中,我将使用来自 drivendata.org 的数据集这里。这也可以从克利夫兰心脏病数据库下载。训练数据包括两个单独的 csv 文件,一个包含关于许多患者的特征,第二个包含二进制标签“heart_disease_present ”,其表示患者是否患有心脏病。
导入数据
Pandas 提供了从各种来源读取数据的工具。因为我使用的数据集是一个 csv 文件,所以我将使用 read_csv 函数。这个函数有大量的选项用于解析数据。对于大多数文件来说,默认选项很好——这里就是这种情况。
import pandas as pdtrain_values = pd.read_csv('train_values.csv')
train_labels = pd.read_csv('train_labels.csv')
为了分析数据,我需要将 train_values 和 train_labels 合并到一个数据帧中。Pandas 提供了一个合并功能,可以连接列或索引上的数据帧。在下面的代码中,我使用 patient_id 执行内部合并,将正确的值与正确的标签连接起来。
train = pd.merge(train_values, train_labels, left_on='patient_id', right_on='patient_id', how='inner')
缺失数据
Pandas 提供了许多处理缺失数据的功能。首先,我们可以使用isna()
函数来了解我们的数据中有多少缺失值。
它的基本功能是查看每一行和每一列中的每一个值,如果缺少就返回True
,如果没有就返回false
。因此,我们可以编写一个函数,返回每一列中缺失值的分数。
train.apply(lambda x: sum(x.isna()/len(train)))
在该数据集中,实际上不存在任何缺失值。但是,如果有,我们可以使用DataFrame.fillna()
替换为另一个值,或者使用DataFrame.dropna()
删除包含缺失值的行。
使用fillna()
时,你有很多选择。您可以用静态值替换,该值可以是字符串或数字。您也可以用平均值之类的计算来替换。根据数据类型和丢失值的数量,很可能必须对不同的列使用不同的策略。在下面的代码中,我演示了如何使用其他一些方便的熊猫函数,select_dtypes
和DataFrame.columns
,只用平均值填充数值。
train[train.select_dtypes(include=['int64', 'float64']).columns] = train[train.select_dtypes(include=['int64', 'float64']).columns].apply(lambda x:x.fillna(x.mean()))
可视化数据
在熊猫身上绘图并不特别,但是如果你想从数据中快速识别一些趋势,这通常是最有效的方法。
基本的绘图功能只是在系列或数据帧上调用plt.plot()
。pandas 中的绘图引用了 matplotlib API,因此您需要首先导入 matplotlib 来访问它。该功能支持许多不同的可视化类型,包括线形图、条形图、直方图、箱线图和散点图。pandas 中的绘图功能真正有用的地方是当您将它与其他数据聚合功能结合使用时。下面我举几个例子。
将value_counts()
与柱状图选项结合使用,可快速显示分类特征。在下面的代码中,我用这种方法查看了 thal(流向心脏的血液量)的分布。
import matplotlib.pyplot as plt
% matplotlib inlinetrain['thal'].value_counts().plot.bar()
使用 groupby 函数,我们可以通过峰值运动 st 段斜率来绘制平均静息血压。
train.groupby("slope_of_peak_exercise_st_segment")['resting_blood_pressure'].mean().plot(kind='bar')
Pandas 数据透视表也可以用来提供聚合数据的可视化。在这里,我比较了胸痛类型的平均血清胆固醇毫克每分升,以及与心脏病的关系。
import numpy as nppd.pivot_table(train, index='chest_pain_type', columns= 'heart_disease_present', values= "serum_cholesterol_mg_per_dl", aggfunc=np.mean).plot(kind= 'bar')
特征转换
Pandas 还有许多功能,可用于您可能需要进行的大多数功能转换。
例如,最常用的机器学习库要求数据是数值型的。因此,有必要转换任何非数字特征,一般来说,最好的方法是使用热编码。熊猫对此有一种方法叫做get_dummies
。该函数在应用于一列数据时,会将每个唯一值转换为一个新的二进制列。
train = train.drop('patient_id', axis=1)
train = pd.get_dummies(train, columns=train.select_dtypes('object').columns)
可能需要为机器学习转换特征的另一种方式是宁滨。这个数据集中的一个例子是年龄特征。将年龄分组到模型要学习的范围(或箱)中可能更有意义。熊猫还有一个功能pd.cut
可以用来做这个。
bins = [0, 30, 40, 50, 60, 70, 100]
train['age_group'] = pd.cut(train['age'], bins)
train['age_group'].value_counts().plot(kind='bar')
这只是对 pandas 中用于机器学习项目早期阶段的一些功能的介绍。数据操作和分析以及熊猫图书馆本身还有很多方面。这通常是一个非常耗时的阶段,我发现 pandas 提供了各种各样的功能和工具,可以帮助提高这个过程的效率。
R 中的数据操作
原文:https://towardsdatascience.com/data-manipulation-in-r-5540ed13ac5f?source=collection_archive---------21-----------------------
查看 R 中操作数据的主要函数,例如如何对数据框进行子集化、创建新变量、记录分类变量和重命名变量
Photo by Campaign Creators
介绍
并非所有数据框都像您预期的那样整洁。因此,在将数据集导入 RStudio 后,大多数情况下,您需要在执行任何统计分析之前准备好数据集。当数据质量很差时,数据处理有时甚至会比实际分析花费更长的时间。
数据操作包括广泛的工具和技术。我们在这里详细介绍了您在 r 中的项目最有可能需要的操作。如果您发现其他数据操作很重要,以便我可以添加它们,请不要犹豫让我知道(例如作为本文结尾的评论)。
在本文中,我们展示了在 r 中操作数据的主要函数。我们首先在向量、因子和列表上说明这些函数。然后我们举例说明在 r 中操作数据帧和日期/时间的主要函数。
向量
串联
我们可以用c()
连接(即组合)数字或字符串:
c(2, 4, -1)## [1] 2 4 -1c(1, 5 / 6, 2^3, -0.05)## [1] 1.0000000 0.8333333 8.0000000 -0.0500000
请注意,默认情况下,R 显示 7 位小数。可以用options(digits = 2)
(两位小数)修改。
也可以创建一系列连续的整数:
1:10## [1] 1 2 3 4 5 6 7 8 9 10# is the same than
c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)## [1] 1 2 3 4 5 6 7 8 9 10# or
c(1:10)## [1] 1 2 3 4 5 6 7 8 9 10
seq()
和rep()
seq()
允许制作一个由序列定义的向量。您可以选择增量:
seq(from = 2, to = 5, by = 0.5)## [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0
或者它的长度:
seq(from = 2, to = 5, length.out = 7)## [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0
另一方面,rep()
创建一个向量,它是数字或字符串的重复:
rep(1, times = 3)## [1] 1 1 1rep(c("A", "B", "C"), times = c(3, 1, 2))## [1] "A" "A" "A" "B" "C" "C"
您也可以创建一个数字和字符串重复的向量:
rep(c("A", 2, "C"), times = c(3, 1, 2))## [1] "A" "A" "A" "2" "C" "C"
但是在这种情况下,数字 2 也将被视为一个字符串(而不是一个数字),因为向量中至少有一个字符串。
分配
在 R 中有三种分配对象的方法:
<-
=
assign()
# 1st method
x <- c(2.1, 5, -4, 1, 5)
x## [1] 2.1 5.0 -4.0 1.0 5.0# 2nd method
x2 <- c(2.1, 5, -4, 1, 5)
x2## [1] 2.1 5.0 -4.0 1.0 5.0# 3rd method (less common)
assign("x3", c(2.1, 5, -4, 1, 5))
x3## [1] 2.1 5.0 -4.0 1.0 5.0
也可以将一个向量指定给另一个向量,例如:
y <- c(x, 10, 1 / 4)
y## [1] 2.10 5.00 -4.00 1.00 5.00 10.00 0.25
向量的元素
我们可以通过在方括号中指定向量的位置来选择向量的一个或多个元素:
# select one element
x[3]## [1] -4# select more than one element with c()
x[c(1, 3, 4)]## [1] 2.1 -4.0 1.0
注意,在 R 中,索引的编号从 1 开始(不像其他编程语言那样从 0 开始),所以x[1]
给出了向量x
的第一个元素。
我们也可以使用布尔值(即TRUE
或FALSE
)来选择向量的一些元素。该方法仅选择与TRUE
相对应的元素:
x[c(TRUE, FALSE, TRUE, TRUE, FALSE)]## [1] 2.1 -4.0 1.0
或者我们可以把元素撤回来:
x[-c(2, 4)]## [1] 2.1 -4.0 5.0
类型和长度
向量的主要类型有数字、逻辑和字符。关于每种类型的更多细节,参见 R 中不同的数据类型。
class()
给出矢量类型:
x <- c(2.1, 5, -4, 1, 5, 0)
class(x)## [1] "numeric"y <- c(x, "Hello")
class(y)## [1] "character"
正如您在上面看到的,只有当 vector 的所有元素都是数字时,它的类才会是数字。只要一个元素是一个字符,向量的类就是一个字符。
z <- c(TRUE, FALSE, FALSE)
class(z)## [1] "logical"
length()
给出一个向量的长度:
length(x)## [1] 6
所以要选择一个向量的最后一个元素(以动态的方式),我们可以使用length()
和[]
的组合:
x[length(x)]## [1] 0
寻找向量类型
我们可以用is.type
函数族找到向量的类型:
is.numeric(x)## [1] TRUEis.logical(x)## [1] FALSEis.character(x)## [1] FALSE
或者用更通用的方式使用is()
功能:
is(x)## [1] "numeric" "vector"
类型和长度的修改
我们可以用as.numeric()
、as.logical()
和as.character()
功能改变矢量的类型:
x_character <- as.character(x)
x_character## [1] "2.1" "5" "-4" "1" "5" "0"is.character(x_character)## [1] TRUEx_logical <- as.logical(x)
x_logical## [1] TRUE TRUE TRUE TRUE TRUE FALSEis.logical(x_logical)## [1] TRUE
也可以改变它的长度:
length(x) <- 4
x## [1] 2.1 5.0 -4.0 1.0
如你所见,向量的第一个元素是守恒的,而所有其他元素都被移除了。在本例中,第一个 4 是因为我们指定了长度 4。
数值运算符
基本数值运算符如+
、-
、*
、/
和^
可以应用于向量:
x <- c(2.1, 5, -4, 1)
y <- c(0, -7, 1, 1 / 4)x + y## [1] 2.10 -2.00 -3.00 1.25x * y## [1] 0.00 -35.00 -4.00 0.25x^y## [1] 1.00e+00 1.28e-05 -4.00e+00 1.00e+00
也可以计算矢量的最小、最大、和、积、累积和以及累积积:
min(x)## [1] -4max(x)## [1] 5sum(x)## [1] 4.1prod(x)## [1] -42cumsum(x)## [1] 2.1 7.1 3.1 4.1cumprod(x)## [1] 2.1 10.5 -42.0 -42.0
也可以应用以下数学运算:
sqrt()
(平方根)cos()
(余弦)sin()
(正弦)tan()
(相切)log()
(对数)log10()
(以 10 为底的对数)exp()
(指数型)abs()
(绝对值)
cos(x)## [1] -0.5048461 0.2836622 -0.6536436 0.5403023exp(x)## [1] 8.16616991 148.41315910 0.01831564 2.71828183
如果需要四舍五入,可以使用round()
、floor()
和ceiling()
功能:
round(cos(x), digits = 3) # 3 decimals## [1] -0.505 0.284 -0.654 0.540floor(cos(x)) # largest integer not greater than x## [1] -1 0 -1 0ceiling(cos(x)) # smallest integer not less than x## [1] 0 1 0 1
逻辑运算符
R 中最常见的逻辑运算符是:
- 否定:
!
- 比较:
<
、<=
、>=
、>
、==
(相等)、!=
(不同) - 还有:
&
- 或者:
|
x## [1] 2.1 5.0 -4.0 1.0x <= c(1, 6, 3, 4)## [1] FALSE TRUE TRUE TRUEx <= 1## [1] FALSE FALSE TRUE TRUE(x == 1 | x > 4)## [1] FALSE TRUE FALSE TRUE!(x == 1 | x > 4)## [1] TRUE FALSE TRUE FALSE
all()
和any()
顾名思义,如果所有元素都满足条件,all()
将返回TRUE
,而如果 vector 的任何元素都满足条件,any()
将返回TRUE
:
x## [1] 2.1 5.0 -4.0 1.0x <= 1## [1] FALSE FALSE TRUE TRUEall(x <= 1)## [1] FALSEany(x <= 1)## [1] TRUE
字符串向量上的操作
您可以将至少两个向量粘贴在一起:
code <- paste(c("BE", "BE", "FR", "EN", "BE"), 1:5, sep = "/")
code## [1] "BE/1" "BE/2" "FR/3" "EN/4" "BE/5"
参数sep
代表separator
,允许指定用于分隔每个字符串的字符或符号。
如果不想指定分隔符,可以使用sep = ""
或paste0()
功能:
paste(c("BE", "BE", "FR", "EN", "BE"), 1:5, sep = "")## [1] "BE1" "BE2" "FR3" "EN4" "BE5"paste0(c("BE", "BE", "FR", "EN", "BE"), 1:5)## [1] "BE1" "BE2" "FR3" "EN4" "BE5"
要找到包含给定字符串的元素的位置,使用grep()
函数:
grep("BE", code)## [1] 1 2 5
为了根据开始和结束位置提取字符串,我们可以使用substr()
函数:
substr(code,
start = 1,
stop = 3
) # extract characters 1 to 3## [1] "BE/" "BE/" "FR/" "EN/" "BE/"
使用sub()
功能,用另一个字符串替换向量中存在的字符串:
sub(
pattern = "BE", # find BE
replacement = "BEL", # replace it with BEL
code
)## [1] "BEL/1" "BEL/2" "FR/3" "EN/4" "BEL/5"
使用strsplit()
功能根据特定符号分割字符串:
strsplit(c("Rafael Nadal", "Roger Federer", "Novak Djokovic"),
split = " "
)## [[1]]
## [1] "Rafael" "Nadal"
##
## [[2]]
## [1] "Roger" "Federer"
##
## [[3]]
## [1] "Novak" "Djokovic"strsplit(code,
split = "/"
)## [[1]]
## [1] "BE" "1"
##
## [[2]]
## [1] "BE" "2"
##
## [[3]]
## [1] "FR" "3"
##
## [[4]]
## [1] "EN" "4"
##
## [[5]]
## [1] "BE" "5"
要将字符向量转换为大写和小写:
toupper(c("Rafael Nadal", "Roger Federer", "Novak Djokovic"))## [1] "RAFAEL NADAL" "ROGER FEDERER" "NOVAK DJOKOVIC"tolower(c("Rafael Nadal", "Roger Federer", "Novak Djokovic"))## [1] "rafael nadal" "roger federer" "novak djokovic"
顺序和向量
我们可以从最小到最大或者从最大到最小对向量的元素进行排序:
x <- c(2.1, 5, -4, 1, 1)
sort(x) # smallest to largest## [1] -4.0 1.0 1.0 2.1 5.0sort(x, decreasing = TRUE) # largest to smallest## [1] 5.0 2.1 1.0 1.0 -4.0
order()
给出应用于向量的排列,以便对其元素进行排序:
order(x)## [1] 3 4 5 1 2
可以看到,向量的第三个元素最小,第二个元素最大。这由输出开始时的 3 和输出结束时的 2 表示。
像sort()
一样,也可以添加decreasing = TRUE
参数:
order(x, decreasing = TRUE)## [1] 2 1 4 5 3
在这种情况下,输出中的 2 表示向量的第二个元素最大,而 3 表示第三个元素最小。
rank()
给出了元素的等级:
rank(x)## [1] 4.0 5.0 1.0 2.5 2.5
向量的最后两个元素的秩为 2.5,因为它们是相等的,并且它们在第一个秩之后但在第四个秩之前。
我们也可以颠倒元素(从最后一个到第一个):
x## [1] 2.1 5.0 -4.0 1.0 1.0rev(x)## [1] 1.0 1.0 -4.0 5.0 2.1
因素
R中的因子是具有一系列级别的向量,也称为类别。因素对于定性数据很有用,如性别、公民身份、眼睛颜色等。
创造因素
我们用factor()
函数创建因子(不要忘记c()
):
f1 <- factor(c("T1", "T3", "T1", "T2"))
f1## [1] T1 T3 T1 T2
## Levels: T1 T2 T3
我们当然可以从现有的向量中创建一个因子:
v <- c(1, 1, 0, 1, 0)
v2 <- factor(v,
levels = c(0, 1),
labels = c("bad", "good")
)
v2## [1] good good bad good bad
## Levels: bad good
我们还可以通过添加ordered = TRUE
参数来指定级别的顺序:
v2 <- factor(v,
levels = c(0, 1),
labels = c("bad", "good"),
ordered = TRUE
)
v2## [1] good good bad good bad
## Levels: bad < good
请注意,级别的顺序将遵循在labels
参数中指定的顺序。
性能
要了解级别的名称:
levels(f1)## [1] "T1" "T2" "T3"
对于级别数:
nlevels(f1)## [1] 3
在 R 中,第一级始终是参考级。该参考水平可通过relevel()
进行修改:
relevel(f1, ref = "T3")## [1] T1 T3 T1 T2
## Levels: T3 T1 T2
您会看到“T3”现在是第一个,因此也是参考电平。更改参考级别会影响它们在统计分析中的显示或处理顺序。例如,将箱线图与不同的参考电平进行比较。
处理
要了解每个级别的频率:
table(f1)## f1
## T1 T2 T3
## 2 1 1# or
summary(f1)## T1 T2 T3
## 2 1 1
请注意,相对频率(即比例)可通过组合prop.table()
和table()
或summary()
找到:
prop.table(table(f1))## f1
## T1 T2 T3
## 0.50 0.25 0.25# or
prop.table(summary(f1))## T1 T2 T3
## 0.50 0.25 0.25
记住,一个因子在 R 中被编码为一个数字向量,即使它看起来像一个字符向量。我们可以用as.numeric()
函数将一个因子转换成它的等值数字:
f1## [1] T1 T3 T1 T2
## Levels: T1 T2 T3as.numeric(f1)## [1] 1 3 1 2
用as.factor()
或factor()
函数可以将数值向量转换成因子:
num <- 1:4
fac <- as.factor(num)
fac## [1] 1 2 3 4
## Levels: 1 2 3 4fac2 <- factor(num)
fac2## [1] 1 2 3 4
## Levels: 1 2 3 4
factor()
的优点是可以为每个级别指定一个名称:
fac2 <- factor(num,
labels = c("bad", "neutral", "good", "very good")
)
fac2## [1] bad neutral good very good
## Levels: bad neutral good very good
列表
列表是一个向量,它的元素可以有不同的性质:向量、列表、因子、数字或字符等。
创建列表
功能list()
允许创建列表:
tahiti <- list(
plane = c("Airbus", "Boeing"),
departure = c("Brussels", "Milan", "Paris"),
duration = c(15, 11, 14)
)
tahiti## $plane
## [1] "Airbus" "Boeing"
##
## $departure
## [1] "Brussels" "Milan" "Paris"
##
## $duration
## [1] 15 11 14
处理
有几种方法可以从列表中提取元素:
tahiti$departure## [1] "Brussels" "Milan" "Paris"# or
tahiti$de## [1] "Brussels" "Milan" "Paris"# or
tahiti[[2]]## [1] "Brussels" "Milan" "Paris"# or
tahiti[["departure"]]## [1] "Brussels" "Milan" "Paris"tahiti[[2]][c(1, 2)]## [1] "Brussels" "Milan"
要将列表转换为向量:
v <- unlist(tahiti)
v## plane1 plane2 departure1 departure2 departure3 duration1 duration2
## "Airbus" "Boeing" "Brussels" "Milan" "Paris" "15" "11"
## duration3
## "14"is.vector(v)## [1] TRUE
获取对象的详细信息
attributes()
给出元素的名称(它可以用在每个 R 对象上):
attributes(tahiti)## $names
## [1] "plane" "departure" "duration"
str()
给出关于元素的简短描述(也可用于每个 R 对象):
str(tahiti)## List of 3
## $ plane : chr [1:2] "Airbus" "Boeing"
## $ departure: chr [1:3] "Brussels" "Milan" "Paris"
## $ duration : num [1:3] 15 11 14
数据帧
R 中每个导入的文件都是一个数据帧(至少如果你不使用包将你的数据导入 R )。数据框是列表和矩阵的混合:它具有矩阵的形状,但是列可以有不同的类。
记住,数据帧的黄金标准是:
- 列代表变量
- 线对应于观察值和
- 每个值必须有自己的单元格
Structure of a data frame. Source: R for Data Science by Hadley Wickham & Garrett Grolemund
在本文中,我们使用数据框架cars
来说明主要的数据操作技术。请注意,数据框是默认安装在 RStudio 中的(因此您不需要导入它),我在整篇文章中使用通用名称dat
作为数据框的名称(参见此处的为什么我总是使用通用名称而不是更具体的名称)。
以下是整个数据框:
dat <- cars # rename the cars data frame with a generic name
dat # display the entire data frame## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
## 7 10 18
## 8 10 26
## 9 10 34
## 10 11 17
## 11 11 28
## 12 12 14
## 13 12 20
## 14 12 24
## 15 12 28
## 16 13 26
## 17 13 34
## 18 13 34
## 19 13 46
## 20 14 26
## 21 14 36
## 22 14 60
## 23 14 80
## 24 15 20
## 25 15 26
## 26 15 54
## 27 16 32
## 28 16 40
## 29 17 32
## 30 17 40
## 31 17 50
## 32 18 42
## 33 18 56
## 34 18 76
## 35 18 84
## 36 19 36
## 37 19 46
## 38 19 68
## 39 20 32
## 40 20 48
## 41 20 52
## 42 20 56
## 43 20 64
## 44 22 66
## 45 23 54
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
该数据帧有 50 个带有 2 个变量的观察值(speed
和distance
)。
您可以分别使用nrow()
和ncol()
检查观察值和变量的数量,或者使用dim()
同时检查两者:
nrow(dat) # number of rows/observations## [1] 50ncol(dat) # number of columns/variables## [1] 2dim(dat) # dimension: number of rows and number of columns## [1] 50 2
行名和列名
在操作数据框之前,了解行和列的名称很有意思:
dimnames(dat)## [[1]]
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
## [46] "46" "47" "48" "49" "50"
##
## [[2]]
## [1] "speed" "dist"
要只知道列名:
names(dat)## [1] "speed" "dist"# or
colnames(dat)## [1] "speed" "dist"
并且只知道行名:
rownames(dat)## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45"
## [46] "46" "47" "48" "49" "50"
子集 a 数据帧
首次或最后一次观察
- 要仅保留前 10 个观察值:
head(dat, n = 10)## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
## 7 10 18
## 8 10 26
## 9 10 34
## 10 11 17
- 要仅保留最后 5 次观察:
tail(dat, n = 5)## speed dist
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
随机观察样本
- 要抽取 4 个观察值的样本而不替换:
library(dplyr)
sample_n(dat, 4, replace = FALSE)## speed dist
## 1 7 22
## 2 8 16
## 3 20 48
## 4 10 18
基于行号或列号
如果您知道要保留哪些观察结果或列,则可以使用行号或列号对数据框进行分组。我们用几个例子来说明这一点:
- 保留第三次观察的所有变量:
dat[3, ]
- 为所有观察值保留第二个变量:
dat[, 2]
- 您可以混合使用上述两种方法,只保留第 3 次观察的第 2 个变量:
dat[3, 2]## [1] 4
- 保持几次观察;例如观察结果 1 至 5、所有变量的第 10 和第 15 个观察结果:
dat[c(1:5, 10, 15), ] # do not forget c()## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 10 11 17
## 15 12 28
- 删除观察结果 5 至 45:
dat[-c(5:45), ]## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
- 提示:如果只保留最后一次观察,请用
nrow()
代替行号:
dat[nrow(dat), ] # nrow() gives the number of rows## speed dist
## 50 25 85
这样,无论观察多少次,你都会选择最后一次。使用一段代码而不是特定值的技术是为了避免“硬编码”。通常不建议硬编码(除非您想要指定一个您确信永远不会改变的参数),因为如果您的数据框改变了,您将需要手动编辑您的代码。
正如您现在可能已经知道的,您可以通过运行dataset_name[row_number, column_number]
来选择数据集的观测值和/或变量。当行(列)号为空时,选择整个行(列)。
请注意,上述所有示例也适用于矩阵:
mat <- matrix(c(-1, 2, 0, 3), ncol = 2, nrow = 2)
mat## [,1] [,2]
## [1,] -1 0
## [2,] 2 3mat[1, 2]## [1] 0
基于变量名
要根据名称而不是列号选择数据集中的一个变量,请使用dataset_name$variable_name
:
dat$speed## [1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
## [26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
如果您打算修改数据库的结构,强烈建议使用第二种方法访问数据框中的变量,而不是第一种方法。事实上,如果在数据框中添加或删除一列,编号将会改变。因此,变量通常是通过其名称而不是位置(列号)来引用的。此外,更容易理解和解释写有变量名的代码(用一个简洁但清晰的名字调用变量的另一个原因)。我仍然使用列号的原因只有一个;如果变量名称预期会改变,而数据帧的结构不会改变。
为了选择变量,也可以使用强大的dplyr
包中的select()
命令(由于head()
命令,为了简洁起见,仅显示前 6 个观察结果):
head(select(dat, speed))## speed
## 1 4
## 2 4
## 3 7
## 4 7
## 5 8
## 6 9
这等同于删除距离变量:
head(select(dat, -dist))## speed
## 1 4
## 2 4
## 3 7
## 4 7
## 5 8
## 6 9
基于一个或多个标准
您也可以根据一个或多个标准对数据框进行子集化,而不是根据行/列号或变量名对数据框进行子集化:
- 只保留速度大于 20 的观察值。第一个参数引用数据框的名称,而第二个参数引用子集标准:
subset(dat, dat$speed > 20)## speed dist
## 44 22 66
## 45 23 54
## 46 24 70
## 47 24 92
## 48 24 93
## 49 24 120
## 50 25 85
- 仅保留距离小于或等于 50 且速度等于 10 的观测值。注意平等标准的
==
(而非=
):
subset(dat, dat$dist <= 50 & dat$speed == 10)## speed dist
## 7 10 18
## 8 10 26
## 9 10 34
- 使用
|
只保留距离小于 20 或速度等于 10 的观测值;
subset(dat, dat$dist < 20 | dat$speed == 10)## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 5 8 16
## 6 9 10
## 7 10 18
## 8 10 26
## 9 10 34
## 10 11 17
## 12 12 14
- 要过滤掉一些观察结果,使用
!=
。例如,保持速度不等于 24 和距离不等于 120 的观察值(由于tail()
命令,为了简洁起见,只显示最后 6 个观察值):
tail(subset(dat, dat$speed != 24 & dat$dist != 120))## speed dist
## 41 20 52
## 42 20 56
## 43 20 64
## 44 22 66
## 45 23 54
## 50 25 85
注意,也可以用split()
对数据帧进行子集化:
split(dat, dat$factor_variable)
上述代码会将您的数据框分割成几个数据框,每个数据框对应因子变量的一个级别。
创建一个新变量
通常,可以通过基于初始数据框中的其他变量创建新变量来增强数据框,或者通过手动添加新变量来增强数据框。
在这个例子中,我们创建了两个新变量;一个是速度乘以距离(我们称之为speed_dist
),另一个是速度的分类(我们称之为speed_cat
)。然后,我们用 4 个变量显示这个新数据框的前 6 个观察值:
# create new variable speed_dist
dat$speed_dist <- dat$speed * dat$dist# create new variable speed_cat
# with ifelse(): if dat$speed > 7, then speed_cat is "high speed", otherwise it is "low_speed"
dat$speed_cat <- factor(ifelse(dat$speed > 7,
"high speed", "low speed"
))# display first 6 observations
head(dat) # 6 is the default in head()## speed dist speed_dist speed_cat
## 1 4 2 8 low speed
## 2 4 10 40 low speed
## 3 7 4 28 low speed
## 4 7 22 154 low speed
## 5 8 16 128 high speed
## 6 9 10 90 high speed
注意,在编程中,字符串通常用引号括起来(如"character string"
),R 也不例外。
将连续变量转换为分类变量
将连续变量转换为分类变量(也称为定性变量):
dat$speed_quali <- cut(dat$speed,
breaks = c(0, 12, 15, 19, 26), # cut points
right = FALSE # closed on the left, open on the right
)dat[c(1:2, 23:24, 49:50), ] # display some observations## speed dist speed_dist speed_cat speed_quali
## 1 4 2 8 low speed [0,12)
## 2 4 10 40 low speed [0,12)
## 23 14 80 1120 high speed [12,15)
## 24 15 20 300 high speed [15,19)
## 49 24 120 2880 high speed [19,26)
## 50 25 85 2125 high speed [19,26)
例如,当年龄(连续变量)被转换为代表不同年龄组的定性变量时,这种转换通常在年龄上进行。
行中的总和与平均值
在使用李克特量表(除其他外,用于心理学)的调查中,通常情况下,我们需要根据多个问题计算每个受访者的分数。分数通常是所有感兴趣问题的平均值或总和。
这可以通过rowMeans()
和rowSums()
来完成。例如,让我们计算变量speed
、dist
和speed_dist
的平均值和总和(当然,变量必须是数字,因为总和和平均值不能在定性变量上计算!)并将它们存储在变量mean_score
和total_score
下:
dat$mean_score <- rowMeans(dat[, 1:3]) # variables speed, dist and speed_dist correspond to variables 1 to 3
dat$total_score <- rowSums(dat[, 1:3])head(dat)## speed dist speed_dist speed_cat speed_quali mean_score total_score
## 1 4 2 8 low speed [0,12) 4.666667 14
## 2 4 10 40 low speed [0,12) 18.000000 54
## 3 7 4 28 low speed [0,12) 13.000000 39
## 4 7 22 154 low speed [0,12) 61.000000 183
## 5 8 16 128 high speed [0,12) 50.666667 152
## 6 9 10 90 high speed [0,12) 36.333333 109
列中的总和与平均值
也可以用colMeans()
和colSums()
按列计算平均值和总和:
colMeans(dat[, 1:3])## speed dist speed_dist
## 15.40 42.98 769.64colSums(dat[, 1:3])## speed dist speed_dist
## 770 2149 38482
这相当于:
mean(dat$speed)## [1] 15.4sum(dat$speed)## [1] 770
但是它允许一次对几个变量进行处理。
分类变量和标签管理
对于分类变量,使用因子格式并命名变量的不同级别是一个很好的实践。
- 对于本例,让我们根据距离创建另一个名为
dist_cat
的新变量,然后将其格式从数字改为因子(同时还指定级别的标签):
# create new variable dist_cat
dat$dist_cat <- ifelse(dat$dist < 15,
1, 2
)# change from numeric to factor and specify the labels
dat$dist_cat <- factor(dat$dist_cat,
levels = c(1, 2),
labels = c("small distance", "big distance") # follow the order of the levels
)head(dat)## speed dist speed_dist speed_cat speed_quali mean_score total_score
## 1 4 2 8 low speed [0,12) 4.666667 14
## 2 4 10 40 low speed [0,12) 18.000000 54
## 3 7 4 28 low speed [0,12) 13.000000 39
## 4 7 22 154 low speed [0,12) 61.000000 183
## 5 8 16 128 high speed [0,12) 50.666667 152
## 6 9 10 90 high speed [0,12) 36.333333 109
## dist_cat
## 1 small distance
## 2 small distance
## 3 small distance
## 4 big distance
## 5 big distance
## 6 small distance
- 要检查变量的格式:
class(dat$dist_cat)## [1] "factor"# or
str(dat$dist_cat)## Factor w/ 2 levels "small distance",..: 1 1 1 2 2 1 2 2 2 2 ...
如果您只需要格式化有限数量的变量,这就足够了。但是,如果您需要对大量的分类变量执行此操作,那么多次编写相同的代码很快就会变得非常耗时。正如您所想象的,使用within()
命令格式化许多变量而不必逐个为每个变量编写完整的代码是可能的:
dat <- within(dat, {
speed_cat <- factor(speed_cat, labels = c(
"high speed",
"low speed"
))
dist_cat <- factor(dist_cat, labels = c(
"small distance",
"big distance"
))
})head(dat)## speed dist speed_dist speed_cat speed_quali mean_score total_score
## 1 4 2 8 low speed [0,12) 4.666667 14
## 2 4 10 40 low speed [0,12) 18.000000 54
## 3 7 4 28 low speed [0,12) 13.000000 39
## 4 7 22 154 low speed [0,12) 61.000000 183
## 5 8 16 128 high speed [0,12) 50.666667 152
## 6 9 10 90 high speed [0,12) 36.333333 109
## dist_cat
## 1 small distance
## 2 small distance
## 3 small distance
## 4 big distance
## 5 big distance
## 6 small distancestr(dat)## 'data.frame': 50 obs. of 8 variables:
## $ speed : num 4 4 7 7 8 9 10 10 10 11 ...
## $ dist : num 2 10 4 22 16 10 18 26 34 17 ...
## $ speed_dist : num 8 40 28 154 128 90 180 260 340 187 ...
## $ speed_cat : Factor w/ 2 levels "high speed","low speed": 2 2 2 2 1 1 1 1 1 1 ...
## $ speed_quali: Factor w/ 4 levels "[0,12)","[12,15)",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ mean_score : num 4.67 18 13 61 50.67 ...
## $ total_score: num 14 54 39 183 152 109 208 296 384 215 ...
## $ dist_cat : Factor w/ 2 levels "small distance",..: 1 1 1 2 2 1 2 2 2 2 ...
或者,如果您想在不改变标签的情况下将几个数值变量转换成分类变量,最好使用transform()
函数。我们用来自[{ggplot2}](https://statsandr.com/blog/graphics-in-r-with-ggplot2/)
包的mpg
数据帧来说明该功能:
library(ggplot2)
mpg <- transform(mpg,
cyl = factor(cyl),
drv = factor(drv),
fl = factor(fl),
class = factor(class)
)
记录分类变量
如果您对当前标签不满意,可以对分类变量的标签进行重新编码。在本例中,我们将标签更改如下:
- “小距离”变成“短距离”
- “大距离”变成了“大距离”
dat$dist_cat <- recode(dat$dist_cat,
"small distance" = "short distance",
"big distance" = "large distance"
)head(dat)## speed dist speed_dist speed_cat speed_quali mean_score total_score
## 1 4 2 8 low speed [0,12) 4.666667 14
## 2 4 10 40 low speed [0,12) 18.000000 54
## 3 7 4 28 low speed [0,12) 13.000000 39
## 4 7 22 154 low speed [0,12) 61.000000 183
## 5 8 16 128 high speed [0,12) 50.666667 152
## 6 9 10 90 high speed [0,12) 36.333333 109
## dist_cat
## 1 short distance
## 2 short distance
## 3 short distance
## 4 large distance
## 5 large distance
## 6 short distance
更改参考水平
对于某些分析,您可能想要更改级别的顺序。例如,如果您正在分析关于对照组和治疗组的数据,您可能希望将对照组设置为参考组。默认情况下,级别按字母顺序排序,如果从数值更改为因子,则按其数值排序。
- 要检查级别的当前顺序(第一个级别为参考级别):
levels(dat$dist_cat)## [1] "short distance" "large distance"
在这种情况下,“短距离”是第一个级别,它是参考级别。这是第一个级别,因为在创建变量时,它最初被设置为等于 1 的值。
- 要更改参考电平:
dat$dist_cat <- relevel(dat$dist_cat, ref = "large distance")levels(dat$dist_cat)## [1] "large distance" "short distance"
大距离现在是第一级,因此也是参考级。
重命名变量名
要重命名变量名,如下所示:
- 距离→距离
- 速度 _ 距离→速度 _ 距离
- 距离 _ 猫→距离 _ 猫
使用dplyr
包中的rename()
命令:
dat <- rename(dat,
distance = dist,
speed_distance = speed_dist,
distance_cat = dist_cat
)names(dat) # display variable names## [1] "speed" "distance" "speed_distance" "speed_cat"
## [5] "speed_quali" "mean_score" "total_score" "distance_cat"
手动创建数据框
尽管大多数分析是在导入的数据框上执行的,但也可以直接在 R:
# Create the data frame named dat with 2 variables
dat <- data.frame(
"variable1" = c(6, 12, NA, 3), # presence of 1 missing value (NA)
"variable2" = c(3, 7, 9, 1)
)# Print the data frame
dat## variable1 variable2
## 1 6 3
## 2 12 7
## 3 NA 9
## 4 3 1
合并两个数据帧
默认情况下,合并是在公共变量(同名的变量)上完成的。但是,如果它们没有相同的名称,仍然可以通过指定名称来合并这两个数据框:
dat1 <- data.frame(
person = c(1:4),
treatment = c("T1", "T2")
)dat1## person treatment
## 1 1 T1
## 2 2 T2
## 3 3 T1
## 4 4 T2dat2 <- data.frame(
patient = c(1:4),
age = c(56, 23, 32, 19),
gender = c("M", "F", "F", "M")
)dat2## patient age gender
## 1 1 56 M
## 2 2 23 F
## 3 3 32 F
## 4 4 19 M
我们想通过主题编号来合并两个数据帧,但是这个编号在第一个数据帧中被称为person
,在第二个数据帧中被称为patient
,所以我们需要指出它:
merge(
x = dat1, y = dat2,
by.x = "person", by.y = "patient",
all = TRUE
)## person treatment age gender
## 1 1 T1 56 M
## 2 2 T2 23 F
## 3 3 T1 32 F
## 4 4 T2 19 M
从另一个数据框添加新观测值
为了从另一个数据框中添加新的观测值,这两个数据框需要具有相同的列名(但它们的顺序可以不同):
dat1## person treatment
## 1 1 T1
## 2 2 T2
## 3 3 T1
## 4 4 T2dat3 <- data.frame(
person = 5:8,
treatment = c("T3")
)dat3## person treatment
## 1 5 T3
## 2 6 T3
## 3 7 T3
## 4 8 T3rbind(dat1, dat3) # r stands for row, so we bind data frames by row## person treatment
## 1 1 T1
## 2 2 T2
## 3 3 T1
## 4 4 T2
## 5 5 T3
## 6 6 T3
## 7 7 T3
## 8 8 T3
如您所见,数据帧dat1
的末尾添加了 5 至 8 人的数据(因为rbind()
函数中dat1
在dat3
之前)。
从另一个数据框添加新变量
也可以使用cbind()
功能向数据帧添加新变量。与rbind()
不同,列名不必相同,因为它们是相邻添加的:
dat2## patient age gender
## 1 1 56 M
## 2 2 23 F
## 3 3 32 F
## 4 4 19 Mdat3## person treatment
## 1 5 T3
## 2 6 T3
## 3 7 T3
## 4 8 T3cbind(dat2, dat3) # c stands for column, so we bind data frames by column## patient age gender person treatment
## 1 1 56 M 5 T3
## 2 2 23 F 6 T3
## 3 3 32 F 7 T3
## 4 4 19 M 8 T3
如果只想添加另一个数据框中的特定变量:
dat_cbind <- cbind(dat2, dat3$treatment)dat_cbind## patient age gender dat3$treatment
## 1 1 56 M T3
## 2 2 23 F T3
## 3 3 32 F T3
## 4 4 19 M T3names(dat_cbind)[4] <- "treatment"dat_cbind## patient age gender treatment
## 1 1 56 M T3
## 2 2 23 F T3
## 3 3 32 F T3
## 4 4 19 M T3
或者更简单地用data.frame()
功能:
data.frame(dat2,
treatment = dat3$treatment
)## patient age gender treatment
## 1 1 56 M T3
## 2 2 23 F T3
## 3 3 32 F T3
## 4 4 19 M T3
缺少值
缺失值(在 RStudio 中用 NA 表示,表示“不适用”)对于许多分析来说通常是有问题的,因为包括缺失值的许多计算结果都有缺失值。
例如,具有至少一个 NA 的系列或变量的平均值将给出 NA 结果。上一节创建的数据帧dat
用于本例:
dat## variable1 variable2
## 1 6 3
## 2 12 7
## 3 NA 9
## 4 3 1mean(dat$variable1)## [1] NA
na.omit()
函数避免 NA 结果,就像没有丢失值一样:
mean(na.omit(dat$variable1))## [1] 7
此外,大多数基本函数都包含一个处理缺失值的参数:
mean(dat$variable1, na.rm = TRUE)## [1] 7
is.na()
表示某个元素是否为缺失值:
is.na(dat)## variable1 variable2
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] TRUE FALSE
## [4,] FALSE FALSE
请注意,字符串形式的“NA”不会被视为缺失值:
y <- c("NA", "2")is.na(y)## [1] FALSE FALSE
要检查矢量或数据帧中是否至少有一个值缺失:
anyNA(dat$variable2) # check for NA in variable2## [1] FALSEanyNA(dat) # check for NA in the whole data frame## [1] TRUE# or
any(is.na(dat)) # check for NA in the whole data frame## [1] TRUE
尽管如此,对于某些类型的分析来说,使用 NAs 的数据帧仍然存在问题。有几种方法可以去除或估算缺失值。
删除 NAs
一个简单的解决方案是删除至少包含一个缺失值的所有观察值(即行)。这是通过仅保留完整案例的观察结果来实现的:
dat_complete <- dat[complete.cases(dat), ]
dat_complete## variable1 variable2
## 1 6 3
## 2 12 7
## 4 3 1
删除有缺失值的观测值时要小心,尤其是缺失值不是“随机缺失”的情况。这并不是因为删除它们是可能的(也是容易的),而是因为您应该在所有情况下都这样做。然而,这超出了本文的范围。
估算 NAs
除了删除至少有一个 NA 的观测值之外,还可以对它们进行估算,也就是说,用变量的中值或众数等值来替换它们。这可以通过包imputeMissings
中的命令impute()
轻松完成:
library(imputeMissings)dat_imputed <- impute(dat) # default method is median/mode
dat_imputed## variable1 variable2
## 1 6 3
## 2 12 7
## 3 6 9
## 4 3 1
当使用中值/众数方法(默认)时,字符向量和因子用众数估算。数字和整数向量用中位数估算。再次,小心使用插补。其他软件包提供更先进的插补技术。然而,我们保持这篇文章简单明了,因为高级插补超出了 r。
规模
缩放(也称为标准化)当一个数据帧的变量具有不同的单位时,变量通常用在主成分分析(PCA) 1 之前。请记住,缩放变量意味着它将计算该变量的平均值和标准差。然后,通过减去该变量的平均值并除以该变量的标准偏差来“缩放”该变量的每个值(即每行)。形式上:
其中 xbar 和 s 分别是变量的平均值和标准差。
使用scale()
缩放 R 中的一个或多个变量:
dat_scaled <- scale(dat_imputed)head(dat_scaled)## variable1 variable2
## [1,] -0.1986799 -0.5477226
## [2,] 1.3907590 0.5477226
## [3,] -0.1986799 1.0954451
## [4,] -0.9933993 -1.0954451
日期和时间
日期
在 R 中,默认的日期格式遵循 ISO 8601 国际标准的规则,该标准将一天表示为“2001–02–13”(yyyy-mm-DD)。 2
日期可以由字符串或数字定义。比如 2016 年 10 月 1 日:
as.Date("01/10/16", format = "%d/%m/%y")## [1] "2016-10-01"as.Date(274, origin = "2016-01-01") # there are 274 days between the origin and October 1st, 2016## [1] "2016-10-01"
英国泰晤士报(1785 年创刊)
日期和时间向量的示例:
dates <- c("02/27/92", "02/27/99", "01/14/92")
times <- c("23:03:20", "22:29:56", "01:03:30")x <- paste(dates, times)
x## [1] "02/27/92 23:03:20" "02/27/99 22:29:56" "01/14/92 01:03:30"strptime(x,
format = "%m/%d/%y %H:%M:%S"
)## [1] "1992-02-27 23:03:20 CET" "1999-02-27 22:29:56 CET"
## [3] "1992-01-14 01:03:30 CET"
找到更多关于如何用help(strptime)
表达日期和时间格式的信息。
从枣中提取
我们可以提取:
- 平日
- 月份
- 四分之一
- 年
y <- strptime(x,
format = "%m/%d/%y %H:%M:%S"
)y## [1] "1992-02-27 23:03:20 CET" "1999-02-27 22:29:56 CET"
## [3] "1992-01-14 01:03:30 CET"weekdays(y, abbreviate = FALSE)## [1] "Thursday" "Saturday" "Tuesday"months(y, abbreviate = FALSE)## [1] "February" "February" "January"quarters(y, abbreviate = FALSE)## [1] "Q1" "Q1" "Q1"format(y, "%Y") # 4-digit year## [1] "1992" "1999" "1992"format(y, "%y") # 2-digit year## [1] "92" "99" "92"
导出和保存
如果复制粘贴还不够,您可以用save()
保存一个 R 格式的对象:
save(dat, file = "dat.Rdata")
或者使用write.table()
或write.csv()
:
write.table(dat, "filename", row = FALSE, sep = "\t", quote = FALSE)
如果您需要将每个结果发送到一个文件而不是控制台:
sink("filename")
(别忘了用sink()
阻止它。)
寻求帮助
您总能找到一些关于以下方面的帮助:
- 一个功能:
?function
或help(function)
- 一包:
help(package = packagename)
- 一个概念:
help.search("concept")
还是apropos("concept")
否则,谷歌就是你最好的朋友!
感谢阅读。我希望这篇文章能帮助你在 RStudio 中操作数据。现在您已经知道了如何将数据帧导入 R 以及如何操作它,下一步可能是学习如何在 R 中执行描述性统计。如果您正在使用 R 寻找更高级的统计分析,请参阅所有关于 R 的文章。
和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。
- 主成分分析(PCA)是一种用于探索性数据分析的有用技术,允许更好地可视化具有大量变量的数据框架中存在的变化。当有许多变量时,数据不容易用原始格式表示出来。为了应对这种情况,PCA 采用具有许多变量的数据帧,并通过将原始变量转换成较少数量的“主成分”来简化它。第一个维度包含数据框中的最大方差,依此类推,维度之间不相关。请注意,PCA 是对数量变量进行的。 ↩︎
- 请注意,每个软件的日期格式不尽相同!例如,Excel 使用不同的格式。 ↩︎
相关文章
- R 中的数据类型
- 如何在 RStudio 中导入 Excel 文件?
- 如何安装 R 和 RStudio?
- 手工假设检验
- R 中的方差分析
原载于 2019 年 12 月 24 日https://statsandr.com。
用 dplyr 实现 R 中的数据操作
原文:https://towardsdatascience.com/data-manipulation-in-r-with-dplyr-3095e0867f75?source=collection_archive---------28-----------------------
面对现实吧!在从数据到洞察的旅程中,我们的大部分时间和精力都花在了数据操作和清理上。如果您使用 R 作为数据分析工作流的一部分,那么 dplyr 包就是一个救命稻草。 Dplyr 的创建是为了利用编码的速度和简单性的优势实现高效的数据操作。
使用“动词”函数和链接(管道操作符)可以更容易地执行复杂的数据操作步骤。在本文中,我们将研究 dplyr 中的主要函数及其用法。在深入细节之前,让我们先来看一个简单的例子,突出显示 dplyr 的功能。为了说明这一点,我们使用了“hflights”数据集,其中包括 2011 年从德克萨斯州休斯顿出发的所有航班的数据。
假设您想要对数据执行以下操作—
- 步骤 1:过滤从 IAH 机场始发的航班
- 第二步:统计每个航空公司的总航班数和延误航班数
- 步骤 3:将其转换为千分之一延迟(DPH)度量
- 第四步:按 DPH 降序排列结果
dresult<-d%>%
filter(Origin == "IAH")%>%
mutate(FDelayed = if_else(DepDelay>0,TRUE,FALSE,missing=NULL))%>%
group_by(UniqueCarrier)%>%
summarise(No=n(),NumDelayed=sum(FDelayed,na.rm=TRUE))%>%
mutate(DPH=100*(NumDelayed/No))%>%
arrange(desc(DPH))
如您所见,这 5 行代码很快就给了我们想要的答案。现在让我们后退一步,看看每个主要的功能。
切片功能
slice()函数将根据“行位置”处理采样或过滤行。它将执行与内置 head()函数类似的功能,但允许更大的灵活性,因为您可以指定数据集中任意行的范围。
d1 <- slice(hflights,1:10)*slice(hflights, -1, -10)*
slice()
Q uicktip:使用负数“排除”行。示例:排除前 10 行,保留数据集中的其余行。
选择功能
select()函数将优化您的列选择。您还可以在 select 函数中更改列名。也可以在 select 函数中重命名列。也可以通过在列名前使用“-”来删除列。
d2 <- select(d,CarrierName=UniqueCarrier,FlightNum,DepDelay,ArrDelay)
select()
滤波函数
filter()函数类似于 SQL 的“where”子句。它返回符合给定过滤标准的行的子集。逻辑和布尔运算符包括(,!=,==,|,&,is.na(),!is.na(),%in%)可以用在 filter 语句中。
d3 <- filter(d,Origin == "IAH" & DepDelay>0 & UniqueCarrier=="UA")
变异函数
mutate()函数基于现有变量在数据框中创建新变量。与 base R 不同,如果您在同一个 mutate()中创建多个变量,任何先前创建的变量都可以引用它上面的变量。
d4 <- mutate(d, totalTaxing = TaxiIn+TaxiOut)
Quicktip : mutate()添加新变量并保留现有变量,而 transmute()添加新变量并删除现有变量
分组依据和汇总功能
group_by()函数用于对一列中具有相似值的行进行分组。这通常与 sum()、average()、median()等聚合函数一起使用。Summarize()函数将多个值压缩成一个值。
d6 <- d%>%
group_by(UniqueCarrier)%>%
summarise(TotalFlights=n())
常用的汇总函数包括以下几种—
排列功能
arrange()函数将根据列值对数据框中的行进行排序。这类似于 SQL 中的“order by”。
d5 <- arrange(d4,desc(ArrDelay))
到目前为止,我们已经单独研究了每个函数。对于 R 和 dplyr,“管道”的概念是一个游戏改变者!
将命令“管道化”在一起可以创建简洁的 R 代码,这使得编写起来更容易,也更容易理解。
它是如何工作的?每个“转换”(过滤、变异、选择等)的结果集将被传递给它下面的下一个“管道”函数;避免了将来自每个步骤的数据保存到新的或现有的数据框中的需要。
起初有点混乱,但是只要稍加练习,您将很快掌握 dplyr 最有用的组件。你可能会发现,你写的每一个 R 脚本/笔记本,用 dplyr 都会更好。您的 R 数据处理将更加简洁、易于理解,开发时间也将大大缩短。
所以,下一次您想在 R 中执行数据操作时, dplyr 是最好的选择!
本文由 Suraj Thatte 和@Rucha Jogaikar 共同撰写。
已应用数据网格
原文:https://towardsdatascience.com/data-mesh-applied-21bed87876f2?source=collection_archive---------0-----------------------
逐步从单一数据湖转移到分散的 21 世纪数据网格。
(另查看后续文章: 三种数据网孔 )
Left: data lakes with central access, on the right: user accessing data from teams domain teams providing a great data product. (all images by the author)
21 世纪的数据格局是什么样的?ThoughtWorks 的扎马克·德格哈尼(Zhamak Deghani)给出了一个美丽的、对我来说令人惊讶的答案:这是一种去中心化的模式,与我们目前在几乎任何公司看到的模式都非常不同。答案叫做“数据网格”。
如果您像我一样感受到您公司当前数据架构的痛苦,那么您希望迁移到数据网格。但是怎么做呢?这就是我在这篇文章中探索的。
但是首先,简单回顾一下数据网格。
Twitter 数据网格摘要
现代软件开发需要一种去中心化的数据方法。数据生成团队必须将数据视为产品;他们需要为它服务;分析团队和软件团队需要改变!
更长的摘要
DDD ,微服务& DevOps 在过去十年中改变了我们开发软件的方式。然而,分析部门的数据却赶不上这一速度。为了在一个采用现代开发方法的公司中加快基于数据的决策,分析软件团队需要改变。
(1)软件团队必须将数据视为产品,他们为其他所有人服务,包括分析团队
(2)分析团队必须以此为基础,停止囤积数据,而是按需获取数据
(3)分析团队必须开始将他们的数据湖/数据仓库也视为数据产品。
如果这个简短的总结吸引了你,让我带你看看如何从你当前的起点实际到达一个数据网格。我们将走过一个例子,途中经过遗留的巨石、数据湖和数据仓库。我们一步一步地从我们的“旧”系统转移到这个新系统。
Sid note:称数据湖为“古老”对您来说可能有点奇怪,对我来说也是如此。时任 Pentaho 首席技术官/创始人的詹姆斯·迪克森(James Dixon)仅在 10 年前就提出了数据湖的概念。然而,围绕数据湖的核心转变,即软件、DevOps、DDD、微服务也是在过去十年才出现的。因此,我们确实需要迎头赶上,因为在这些趋势根本改变我们开发软件的方式之前,中央全能数据湖是一个老问题的答案。此外,无所不能的数据湖并不是 Dixon 最初想象的那样。
我们从一个电子商务企业的典型微服务架构的例子开始。
- 我们展示了这个例子如何使用数据湖/数据仓库架构(A 点),
- 然后与数据网格体系结构进行比较(C 点)
- 然后以那个例子为例,但是添加一个“数据湖作为数据节点”(B),因为这确实是我们从 A 到 c 的方式。
- 我们考虑应该启动我们从 A 到 c 的迁移的难点。
- 我们从 A -> B -> C 一步一步来。
- 我们考虑先移动哪些部分的细节。
- 我们考虑可能出现的问题以及如何处理它们。
- 我们考虑解决这个问题的另一种方法。
采用数据网格架构的电子商务微服务架构
E-commerce business modeled with three operational microservices.
这是一个基本的微服务架构,有两个域,一个是包含客户 API 和 CRM 系统的“客户域”,另一个是包含订单 API 的“订单域”。这些服务是运营服务,他们运营电子商务网站。这些 API 允许您在 order API 上创建订单,在 CRM 系统中的 customer API leads 上创建客户,检查信用额度等等。它们可能是 REST APIs,结合一些事件流,一些发布-订阅系统,具体的实现并不重要。
Sid note:对我们来说,订单和客户是不同的领域。这意味着这些领域的语言可能不同。从团队 2(订单团队)看到的“客户”只有一个含义,即由 customer_id 标识的人,他刚刚在网站上购买了一些东西。在团队 1 中,意义可能有所不同。他们可能会认为客户是 CRM 系统中的一个实体,它可以将状态从一个单纯的“领导”更改为“购买”客户,只有第二个客户是团队 2 方已知的。
团队 1 拥有客户领域。他们对这个领域了如指掌。他们知道什么是销售线索,从销售线索到实际客户的过渡状态如何等等。另一方面,团队 2 了解订单领域的一切。他们知道取消的订单是否可以恢复,网站上的订单漏斗是什么样子,等等。团队可能对其他领域有所了解,但不是所有的细节。他们不拥有他们。
这两个领域都会产生大量的副产品数据。组织中的许多人需要这些数据。让我们来看看其中的一些:
- 数据工程师:既需要订单&客户数据做一些转换,生成 OLAP 立方体基础数据,模块化数据;他还需要数据来测试&理解它,然后再开始他的转换工作。
- 的营销人员:每天都需要按项目类别查看订单,以扩展他们的活动。
- 数据科学家:正在构建推荐系统,因此需要所有最新的订单数据来训练他的系统。
- 管理层:想要总体增长的汇总概览。
满足这些需求的数据湖/数据仓库解决方案将如下所示。
数据工程师的核心团队很可能通过 ETL 工具或流解决方案提供所有数据。他们将有一个中央数据湖或数据仓库,以及一个用于营销和管理的 BI 前端。
数据科学家可能直接从数据湖中获取数据,这可能是他们访问数据的最简单方式。
这种架构可能会带来哪些问题?
- 这种架构在数据工程团队中产生了一个中心瓶颈
- 它可能会导致领域知识在通过其中心枢纽的途中丢失,
- 并使所有这些不同的、异构的需求的优先级排序变得困难。
到目前为止一切顺利。数据网格方法怎么样?
这是一个具有数据网格架构的电子商务网站。
Green: new data-APIs. Bottom: Mgmt with straight BI tool access, marketing with data form data-API, left: data scientist with data from data-API
什么变了?首先,数据科学家和营销人员可以从源域访问数据!但是还有更多。
注意:数据网格架构的关键是获取数据。可发现、可寻址、可信任、自描述、可互操作&安全。
下面我提几点。
让我们一步一步地了解这些要点
- 客户域:客户域获得了两个新的只读“数据 API”。可能只有一个或两个 API,这对本例来说并不重要。在这两种情况下,客户域将确保从 CRM 系统和客户 API 中链接“客户”的概念。
- 订单域:订单域获得了一个新的数据 API,order-data-API。
- 客户数据 API 数据示例:客户数据 API 可能有多个端点:
所有客户/: 为每行一个“客户”提供数据。
stats/ :提供统计数据,如“客户数:1000,销售线索数:4000;客户电话:1,500,SME 中的客户联系人:500,SME 中的客户:600”
更多端点。
- 订单数据 API 数据的例子:订单数据 API 可能有多个端点;
allOrderItems/: 每行提供一个订单行项目。
allBuckets/: 每行提供一个存储桶,这是订单项目的集合。
stats/: 提供“订单:100 万,2019 年订单:60 万平均桶量:30 美元”等统计数据;stats 端点可能接受日期范围、年份等参数
- 数据 API 是只读的。其他人不是。* Data APIs 将数据作为他们的产品,非常完美。您可以将 SLA 绑定到它们,检查它们的使用情况。API 被建模为它们自己的 API,我们不会滥用订单 API 作为数据 API。因此,我们可以分别关注不同的用户。
- *-data-API 可以以任何合理的形式实现,例如:
-作为位于 AWS S3 存储桶中的 CSV/parquet 文件(端点由子文件夹分隔,API 由顶级文件夹分隔)(可寻址)
-通过 JSON/ JSON 行作为 REST APIs
-通过中央数据库和模式。(是的,我明白“中央”并不是“分散的”)
- 模式位于数据旁边。(自述)。
- CRM 系统可以同时被视为操作 API 和数据 API,但是你真的想要包装它以符合你设定的标准。否则,您将失去数据网格体系结构的任何好处。
- 所有的数据 API 应该有相同的格式。这使得消费变得非常容易!(互操作&安全)
- 通过 Confluence 页面或任何更高级的表单或数据目录可以发现数据 API,我们知道哪个团队拥有该数据,并可以在下游使用它。(可发现的
- 有一个新域名。数据工程师刚刚获得了他自己的商业智能建模数据领域。他知道他只为一个利益相关者服务。这个领域被包装成一个服务,只为一个利益相关者服务。通过这种方式,数据工程师可以集中精力,并适当地对建模数据的管理需求进行优先级排序。
- 营销团队可以直接从数据源访问他们的“按类别排序的订单数据”,因为它是特定于领域的。
- BI 系统来源于数据库,我们将其包装为数据服务。为什么?因为我们只为管理层服务,他们只想要模型化和连接的数据,而我们无法从 API 中获得这些数据,这很好。总体增长听起来像是一个实体,与其中一个领域无关,而是跨领域的。
让我们来看看数据用户的要求和变化
- 数据工程师:数据工程师已经从数据 API 接收了大部分建模数据。这意味着,没有领域知识丢失。他有 SLA 来查看并确切地知道他将得到什么。他可以轻松地使用一种用于两种 data-* API 的标准 API 以任何方式组合数据,并将其放入自己的数据服务中。他确切地知道应该向谁索取某个特定的数据,并且所有的数据都记录在同一个地方。
- 营销人员:可以直接从订单来源获取他们需要的数据,即使数据工程师数据服务部门不会(目前不会)?)提供该信息。因此,如果他们想要更改数据,他们可以直接去找有领域知识的人。如果他们想加入“漏斗数据”,他们可以问真正知道那是什么的团队!
- 数据科学家:可以直接进入 order-data-API,该 API 经过测试&对他将一直进行的大量读取具有 SLA。数据在一秒钟内就存在了,不需要侵入数据库,这是我不止一次看到的。它已经可以生产了,可以马上集成到推荐系统中。数据科学家很容易实现他们的 CD4ML 版本。
- 管理层:仍然通过他们的商业智能系统获得他们的汇总视图。但是根据领域的不同,可能的改变可以在三个地方实现,而不仅仅是一个地方。中央数据团队不再是瓶颈。
数据团队仍然在那里,但是可能的负载被适当地分配给分散的参与者,无论如何这些参与者更适合这项工作。但是,数据团队也有自己的服务。那看起来会是什么样子呢?让我们看看数据湖是如何融入数据网格的&可能的棘手问题。如果你从一个状态开始,会有一个重要的过渡状态。
我们的数据湖,只是另一个节点
有三种情况 a,现在不一定是中央,数据湖或数据仓库仍然有意义:
- 如果我们想要结合两个数据域来建模中间的东西,这不能发生在一个域中,而应该发生在一个新的域中。
- 如果我们想整合市场数据等外部数据。外部数据通常不符合我们的标准,所以我们需要以某种方式包装它们。
- 如果我们从 A 点转移到 C 点,我们不仅会丢掉数据湖,还会降低它的复杂性。
痛点
什么时候应该考虑迁移到数据网格?首先,如果你对你的结构满意,如果你对你的公司使用数据做决策的方式满意,那就不要。但是,如果您感到以下任何痛苦,解决方案就是数据网格。
- 如果你有领域复杂性和微服务 / 领域驱动设计,你可能会觉得事情太“复杂”了,一个中央团队无法立刻提供这些数据。
- 如果是这样的话,您会认为将数据导入数据仓库的成本很高,因此您会拒绝导入对个人用户有价值的数据源。这些应该单独提供,并且是“作为数据网格节点划分出来”的完美候选。
- 你还没有形成数据->信息->洞察力->决策->行动返回数据的闭环。
- 你的数据->数据速度在连续智能周期中是以周&月计量的,而不是天或小时。
- 你已经在将“数据转换尽可能地靠近数据用户”;这是我们目前正在做的事情,通常这是数据->信息->洞察力->决策->行动->数据管道出现瓶颈的迹象。这可以被认为是一个中间阶段,详见最后一段。
从单一数据湖到数据网
让我们现实一点。数据仓库或数据湖,以及负责导入和建模数据的中央分析团队。一个遗留的整体,团队从那里导入数据,没有 API,可能有直接的数据库访问和大量的 ETL 作业、表等。也许我们在新的领域有了一些新的微服务…让我们保持简单但通用。
S IDENOTE:我喜欢 Michael Feathers 对遗留代码的定义:没有测试的代码。这就是我的意思,庞大,丑陋,不愉快的代码,没有人喜欢与它一起工作。
记住,我们的目标是一步一步地获取所有的数据。
步骤 1:(可寻址数据)重新路由数据湖数据&更改 BI 工具访问。
所有的数据目前都是通过数据湖消费和服务的。如果我们想改变这一点,我们首先需要转动那里的大开关,同时为未来的迁移固定可寻址性的标准化。
为此,让我们尝试使用 S3 桶。因此,我们将标准化定义为:
示例:{name}-data-service 可通过以下方式访问:
-S3://same thinghere/data-services/{ name }
具体来说,所有服务都至少有一个端点,即默认的数据端点。其他端点是子文件夹,如:
-S3://same thinghere/data-services/{ name }/default
-S3://same thinghere/data-services/{ name }/{ endpoint 1 }
-S3://same thinghere/data-services/{ name }/{ endpoint 2 }
模式版本位于:
-S3://same thinghere/data-services/{ name }/schemata/v 1 . 1 . 1 . datetos???
我们使用“vX”格式的语义版本。Y.Z ",日期精确到秒。
数据文件以“vX.Y.Z.datapart01???",每个文件限 1000 行,方便消费。
我们将数据湖重新路由到它的新“地址”,并更改 BI 工具访问。
S3://same thinghere/data-services/data-lake/default
S3://same thinghere/data-services/data-lake/growth data
S3://same thinghere/data-services/data-lake/modeled data
???
这对组织的其他人来说没有任何改变,我们需要给他们访问权限。
第二步:(可发现性)创建一个空间来寻找我们的新数据-来源。*
我们可以通过在我们的知识管理系统(即 confluence/您的内部 wiki……)中创建一个页面来实现最简单的可发现性。
好的,现在除了现在使用数据湖的人之外,新的人可以找到数据。现在,我们可以开始向我们的数据网格添加节点,我们可以选择任何一种方式,通过推出一种全新的微服务,或者通过打破那些令人讨厌的旧传统碎片之一。
我们先考虑微服务案例。
第三步:推出新的微服务。
推出服务的目的是将所有权交给创建数据的领域团队,这样,例如,您可以将分析团队中的某个人加入负责的领域团队。暂且以“订单团队”为例。
我们创建新的 order-data-API。确定一组基本的 SLA,并确保遵守您为数据湖设定的标准。我们现在有两种数据服务:
S3://same thinghere/data-services/data-lake/default
S3://same thinghere/data-services/data-lake/growth data
S3://same thinghere/data-services/data-lake/modeled data
S3://same thinghere/data-services/order-data/default
S3://same thinghere/data-services/order-data/allorderitems
S3://same thinghere/data-services/order-data/stats
将新服务放入发现工具中。
第二种选择是让中央分析团队创建这个数据服务,在这种情况下,所有权仍然存在。但至少我们把服务分开了。
第四步:拿出一件遗产。
遗留系统通常没有崭新的微服务好用。通常,您会有一些数据库表,您甚至不知道从这些表中获取数据,从一些服务器或任何其他形式的遗留系统中获取一些 CSV,这些系统没有良好的文档记录和标准化的接口。
这没关系。你可以暂时保持这种状态。您已经有了某种将数据导入到数据仓库或数据湖的方法,所以将其分离出来,并将其表示为数据服务。
例如,您可以从:
源数据库— ETL 工具→数据湖中的原始数据→数据湖中的转换数据
总结前两个阶段,并使用标准化:
(源数据库— ETL 工具→数据湖中的原始数据→ S3 桶)=新数据服务
(新数据服务的 S3 桶)— ETL 工具→将数据导入数据湖→转换数据湖中的数据
这样,当您转移服务时,领域团队只需要切换主干,依赖用户已经可以切换到使用数据的新方式,甚至在领域团队取得所有权之前。
步骤 5:(可发现性)切换可发现性& BI 工具源。
现在开始将你的数据服务推向普通受众,以获得快速反馈,让营销团队找到你突破的来源。然后将 BI 工具切换到两个数据服务,而不是一个。
然后,您可以考虑关闭 data-lake-service 中对订单数据的支持。
第六步:转移所有权。
如果您在这里,那么恭喜您,您已经突破了中央数据湖的第一部分,现在您需要确保,在新功能请求进入这些服务之前,所有权也已转移。您可以通过以下方式做到这一点:
- 通过将一些人和服务一起迁移到领域团队
- 也许可以为新服务建立一个新团队
- 通过简单地将服务迁移到领域团队
第七步:继续。
包,包,包,爆发越来越多的服务。优雅地推出旧的部分并用新的 API 替换它们。开始收集分布式服务的新功能请求。
现在,您的中央数据湖将变得非常小,只包含连接和建模的数据,如果您开始转移人员,您的数据团队也将如此。
第八步:(TSIS)让它可信、自描述、可互操作且安全。
构建公共数据平台。这可能意味着每个人都可以将文件放在正确位置的库,或者任何其他更复杂的工具集。无论团队中有什么重复,你都可以将其中的大部分集中起来。例如,如果您很快注意到 AWS S3 文件不容易被营销和销售人员访问,您可能会决定从 S3 转换到可以通过 EXCEL 等访问的中央数据库。
在这种情况下,您会希望有一个库,通过简单的升级来实现这种转换,而不会给团队带来太多麻烦。例如,在 AWS 设置中,您可以创建一个带有通用“数据-服务-发货人”的 lambda 函数,它负责:
- 获取版本化模式,并将它们映射到中央数据库中的数据库模式。**
- 将数据发送到数据库中适当的模式中。**
这样,领域团队除了升级他们的“库”之外,几乎没有其他工作。其他选项可能包括创建一个通用的 REST API,您可以用信号通知数据及其位置,并让 API 处理其余部分,如转换 CSV、parquet 等。转换成单一格式。
我先选择哪部分数据爆发?
因此,就像微服务一样,一旦你感到某种“痛苦”,从整体开始的最佳方式是分解零件。但是我们先从哪一部分开始呢?这是一个基于三点考虑的判断:
- 成本:数据爆发有多难?
- 好处:数据多久改变一次?
- 好处:数据对您的业务有多重要?
好处间接表明,你将能够收集多少真实数据服务的用例,因为改变数据意味着数据服务的改变,而数据的重要性意味着许多人将希望从该数据服务中获得洞察力。
如果你权衡这些事情,你会得出不同的结论。例如,在我们的例子中,客户域可能是一个很好的起点,因为这样的数据很可能会经常改变。然而,有时它没有订单数据重要,另一方面,订单数据可能很难分解,这取决于您已经在订单数据之上放置了多少个 ETL 作业。
如果你有一个开始的地方,在你的道路上仍然有垫脚石。
垫脚石
目前,作为副产品提供数据的团队没有动力去恰当地保护这些数据,主要是因为没有来自这些数据的潜在“利益相关者/消费者”的直接反馈。
这是必须改变的事情,你必须把它作为一个核心部分来对待。这可能就是为什么 Zhamak Deghani 建议您采用特定的用例,确定用户,并组建一个新的团队来专门负责特定的用户。另一方面,我不明白为什么当前的订单团队不能担当这个角色。没错,这种转变有点困难,但对公司必须花费的资源来说更容易,而且可能更容易销售。
如果您无法让数据生成团队加入这一行列,您有两种选择:
- 创建一个新团队,并采用一个用例
- 使用您现有的中心团队来承担这一角色,并收集数据。检查对数据服务的需求及其创造的价值,然后决定将它推向何处。
最后,让我们探索一下这种架构的可能替代方案。
有替代方案吗?
我试图提出一个替代方案,但意识到它更像是一个不同实现的矩阵。
数据网格的关键概念是分散所有权,我们可以说,因为领域团队通常认为他们的数据是副产品,他们并不真正拥有它。因此,数据湖是原始数据的集中所有权。
如果我们现在区分原始数据和转换数据,我们可以看到四种可能的不同数据架构。我们还可以看到从数据湖转移到数据网格的 2-3 种不同方式。
Ownership of raw & transformed data can both be central or decentralized. This produces four quadrants with a variety of solutions.
我们上面描述了从“数据湖”到“B 点”然后到完整数据网格的移动。
然而,第二种选择是首先实现分散的“转换数据的所有权”,然后可能考虑迁移到完整的数据网格。
分散的转换数据所有权会是什么样子?
- 数据湖仍然可以导入所有“原始数据”
- 然后,接近决策者的有数据知识的用户可以访问原始数据,并在本地桌面 ETL 解决方案中进行转换。
- 原始数据也可以被推送到分散的数据仓库中,在那里离用户更近的“某人”可以对数据进行基本的 ETL。
- 当然,每个部门都可以有自己的小数据团队为该部门做 ETL。
区别在哪里?在这种情况下,您可以收集大量需求,并细化各部门对数据的确切用例。像市场营销这样的部门通常更接近领域,然后是中间的数据团队,所以你会在“领域语言”问题上获得一些优势,但不是全部。您还将保持原始数据消费的中心瓶颈,并且不将“数据作为产品”推给领域团队。我认为这两者在未来都是必要的。****
对如何建立伟大的数据公司、伟大的数据密集型产品、成为伟大的数据团队感兴趣,还是对如何利用开源构建伟大的东西感兴趣?然后考虑加入我的 免费简讯《三个数据点周四》 。它已经成为数据初创企业、风投和数据领导者值得信赖的资源。
结尾
我试着写一篇比扎马克·德格哈尼更短的帖子,但似乎没有成功。我只能在以下四个地方找到关于数据网格体系结构的信息:
- 扎马克·德加尼斯的文章位于马丁·福勒的网站
- Zhamak 出现在 ThoughtWorks 播客第 30 集中,其中他们还提到了“将转型推向最终用户”的概念
- 数据工程播客第 90 集,以数据网格为特色
- 以数据网格为特色的软件工程每周播客
数据头脑:Emily Fay——open door 的数据科学家
原文:https://towardsdatascience.com/data-minds-emily-fay-data-scientist-at-opendoor-50be07f5d7ca?source=collection_archive---------14-----------------------
Data Minds 是一个介绍从事数据工作的专业人士的系列。你将有机会了解他们的故事,典型的一天是什么样子的,以及他们给别人的建议。
最近筹集了 3 亿美元(38 亿美元估值), Opendoor 是在线房屋销售市场领域的领先公司之一。总部位于旧金山的该公司还提供许多有趣的数据科学问题供研究。Emily Fay 已经在 Opendoor 担任了两年多的数据科学家。在投身科技之前,她参加了洞察数据科学项目,并在斯坦福大学完成了地球物理学博士学位。在这篇文章中,我们讨论了她从学术界到技术的转变,洞察计划的价值,创建和阅读文档的重要性,以及她给其他人的一般性建议。
冲出学术界
在女王大学完成地质工程本科学位后,Emily 继续在斯坦福大学攻读地球物理学博士学位。在斯坦福大学期间,她最终做了大量的编码工作,从可视化数据到编写脚本来帮助数据处理。原来,编码部分是她发现自己最喜欢的博士部分。
因此,尽管她申请了博士后职位,但她开始考虑适合博士的科技职位,比如数据科学。然而,在查看数据科学职位的一些应用程序要求时,她对一长串技术技能感到害怕。为了帮助实现向技术领域的飞跃,她决定加入 Insight data science fellowship,这是一个面向希望将自己重塑为数据科学家的博士的计划。
这对她来说是个完美的选择。通过 Insight 提供的认真的面试准备,Emily 能够自信地处理技术面试。拥有一个结构化的学习环境和与同龄人一起练习的机会也是一个很大的帮助。Insight 还提供了在不太正式的场合与公司会面和互动的机会。这使得获得对公司工作和文化的坦诚想法变得容易得多。最重要的是,Insight 提供了一个与她相似的个人网络(博士希望转向科技)。结果,她结交了很多和自己有相似职业轨迹的密友。除了她自己的同辈,Insight 还有 200 多家公司的校友,从 Airbnb 和亚马逊到 NBC 和 Reddit。进入这个网络并获得他们的建议是一个无价的资源。
多亏了面试准备和网络,Emily 得以面试各种各样的公司。在结合了直觉和定量分析之后,她选择了 Opendoor,比如根据地点、文化和工作类型对她的选择进行排序。
开放的数据科学
在最初的几周,她花了很多时间阅读代码库,弄清楚事情是如何工作的,以及它们是如何联系在一起的。她还尽可能多地了解业务和当前项目,阅读共享文档,并与公司的同事交谈。她使用的一种技术是在电脑上添加代码片段的便笺,以及命令行的快捷方式。一旦她记住了一个特别的便条,她就会用一个新的代替它。这使她能够快速掌握工具,从而加快对代码库的理解。Opendoor 还给她分配了一个代码伙伴,她广泛使用这个伙伴来填补知识空白。第一年,她对进行代码评审感到不舒服。但是在花了足够多的时间阅读编码实践并为代码库做出贡献后,她在坚持自己的观点时感觉自信多了。每个人对代码审查都有自己的观点,但是对她来说,重要的是要达到她可以对事情有不同的观点并且能够支持它们的程度。
她的日常工作包括为各种商业应用开发原型和生产机器学习模型,建立数据管道,开发指标,以及为商业利益相关者进行特别分析。因此,考虑到她工作的多样性,任何一周或一月看起来都可能与前几周或前几月大不相同。她工作中的共同主题是了解问题并建立领域专业知识。后者是有机发生的,但是确保阅读文档、内部通讯、在全体会议上集中注意力、与利益相关者交谈以及监控空闲渠道都是建立领域专业知识的好方法。这也意味着在你的学习中要积极主动,当你有不明白的地方要向相关的人寻求帮助。
Emily 还参与了公司的数据宣传工作。这既包括构建内部工具来帮助非技术同事与数据交互,也包括创建全面的文档。通过这样做,她能够通过参考书面文档来减少许多常见问题。一个普遍的规则是,如果你被问了三次同一个问题的变体,最好把它记录下来。Opendoor 还举办分享会,数据科学家有机会展示他们的工作,并从同事那里获得反馈。
给别人的建议
由于数据科学领域如此广阔,期望能够记住所有东西是不现实的。因此,Emily 支持知道如何有效地导航资源的重要性,例如 StackOverflow 和各种类型的文档(从编程库到公司特定的文档)。她还建议在开始一个项目之前花时间深入了解一个问题。确保项目的愿景和期望一致是避免未来出现问题的好方法。期望也可能改变,所以在整个项目中重新审视它们是个好主意。你能做的最糟糕的事情就是建造一些没有人最终会使用的东西。
就与你的经理打交道的相关建议而言,最好将他们视为一种资源,而不是一个正在检查你的人。最优秀的经理对公司其他部门正在发生的事情以及你的工作如何融入大局有很好的高层次的看法。因此,他们更有可能知道你应该与谁交谈,以便继续取得进展,此外还有助于事情的发生,例如获取数据。另一个要点是对你的职业发展负责。这意味着理解你的角色的期望,并找出你可以改进的地方。公司通常有季度/年度评估的标准,所以了解这些标准和你的进展情况是个好主意。当评估来临时,你不应该感到惊讶,所以确保采取积极主动的步骤来征求反馈。
另一个重要的建议是认识到机器学习何时可能不是解决特定问题的好方法。通常情况下,解决一个问题只需要相对简单的逻辑规则。能够让人类做出更好的决定,可以胜过过度设计的机器学习算法。
最后,如果你正在寻找与数据相关的工作,知道你申请的是什么是很好的。很多时候,公司可能有一个数据科学职位,在另一家公司被称为机器学习工程师。因此,花时间阅读要求并与招聘人员交谈以避免面试中的任何困惑是很重要的。她还提到要对与数据科学相关的角色保持开放的心态。有更多的数据工程角色,你学到的技能通常可以转化为数据科学家的技能。
数据头脑:Evan Chow——Snapchat 的数据科学家
原文:https://towardsdatascience.com/data-minds-evan-chow-data-scientist-at-snapchat-1bad17861ff8?source=collection_archive---------18-----------------------
《数据思维》是一个系列,介绍处理数据的专业人士。在这个系列中,你将了解他们的日常故事,以及给别人的建议
Snapchat 拥有超过 3 亿月活跃用户、和每天创建的 30 亿张快照,是一家拥有巨大数据宝库的公司。这种类型的数据可以进行各种有趣的分析,对于那些有社会科学背景的人来说尤其有趣。 Evan Chow 就是这样一个人,拥有普林斯顿大学经济学、统计学和机器学习的本科背景。他已经在 Snapchat 担任了两年的数据科学家,他的工作包括因果推理、应用计量经济学、定量社会科学研究和异常检测。
在这篇文章中,我们将探讨 Evan 是如何用技术技能增加他的社会科学背景的,他在 Snapchat 所做的工作类型,以及 T 形模型对你职业生涯的重要性。
成为博学者
与埃文交谈,很明显他对艺术和科学都有广泛的兴趣。在大学期间,他着迷于使用经济模型来模拟行为,这使他专攻经济学和统计学。同时,他知道开发编程技能的重要性。因此,他利用暑假在科技公司实习,并在学年中学习计算机科学课程。
他在数据科学领域起步于各种项目,从机器翻译工具到爵士音乐的自动生成器。他第一次接触行业数据科学是在 Paypal 实习,当时是大二和大三之间。在那里,他接触了广泛的工具和技术,从时间序列预测到设置仪表板以及学习 R 和 ggplot。这一经历让他看到了数据科学在现实世界中的真实面貌。这也让他有了一个至今仍挥之不去的见解。当他的导师解释自给自足的可视化的重要性时,他向他展示了俄罗斯拿破仑的可视化。这个例子帮助他了解了一个伟大的自给自足的可视化是什么样子的,并为他未来的工作提供了信息。
有了这次技术实习,他对计算机科学产生了新的兴趣。利用这种兴趣,他继续在技术上成长,并在 Salesforce 获得了一份定量软件工程实习。在这次实习中,他有机会与一个安全团队合作,建立一种算法来检测大型网络日志中的异常。这个夏天包括深入机器学习,在那里他能够从各种导师那里获得进一步的指导。根据导师的反馈,他了解到不要局限于自己的工作,保持大局观念的重要性。
在两次技术实习后,Evan 觉得他的大四应该献给他的初恋——经济学。他的论文包括调查艺术品拍卖,特别是锚定偏差如何影响拍卖价格。这个问题让他从纯技术中解脱出来,并让他专注于一个新领域的计量经济学建模。与拍卖行的专家交谈并了解价格是如何确定的,被证明是一项极具智力挑战的研究。这项工作很重要,经历了许多曲折,持续了他整个高三。当他的研究遇到暂时的死胡同时,这种扩展的研究继续培养坚持下去的勇气。
当大学时光即将结束时,一名招聘人员在一次招聘会上发现了埃文的简历,于是他有机会面试优步。这让他得到了一份工作,并搬到了旧金山,在那里他开始了他的第一份工作,成为一个定量团队的软件工程师。他的工作重点是调度优化、排名、预测、基础设施和分析。从一个学术环境过渡,他遇到了许多隐藏和存储的部落知识。在他能够阅读教科书和研究论文来获得他需要的信息之前,在优步,他更依赖于与领域专家的对话来帮助他理解和提取有用的见解。这第一份工作也让他很好地了解了系统是如何构建的,以及对全职工作的期望。在优步工作了一年后,他在 Snapchat 抓住机会回到了经济学和统计学的根基。
Snapchat 的数据科学
埃文在 2017 年年中加入 Snapchat,就在他们 3 月份 IPO 后不久。虽然优步有更明显的创收途径,但 Snapchat 作为一个靠广告创收的社交网络更为间接。更加强调理解用户,将行为建模与工程相结合。这非常适合他,因为这让他能够结合他在大学里培养的各种兴趣。
在转变为这个角色的过程中,他的主要关注点是获取领域专业知识,以便对决策者更有用。除了通过小项目获得速赢,他还通过与同事和利益相关者的交谈获得了这一点。对他来说,直接处理数据是获得领域专业知识的最快途径。幸运的是,Snapchat 中不缺少来自各个小组的问题,他的经理会帮助他区分优先顺序。
他的工作很大一部分是帮助人们做出最佳决策,并了解决策的影响。因此,确定因果关系是一个很大的焦点,它包括运行实验和准实验方法,以及模拟来估计内部和外部因素的因果影响。他关注的另一个领域是异常检测,例如理解来自手机的奇怪行为或错误。
他生产的产品类型也可以不同。偶尔,它可能是一个幻灯片,总结了他的工作,并有助于通知即时决定。其他时候,它可能是一个有助于内部知识的白皮书,并且从长远来看可能是有用的。这就需要同时兼顾既能在当前季度实现成果的项目,又能进行更长期的研究项目。
给别人的建议
在给别人的建议方面,埃文提出了五点:
- 了解人们在问什么非常重要,这样你就可以澄清并确保你没有回答错误的问题。理解数据源,不做没有根据的假设,对于避免做错误的事情是至关重要的。
- 建模时,在进入更复杂的模型之前,先建立一个简单的基线。通常基线可能足以解决问题,或者至少给你一些东西来比较你未来的工作。
- 与他人交谈并阅读文献,以确保你不是在多此一举。有可能有人已经解决了你的问题,尽管可能是在不同的环境中。
- 确保测试你的模型的健壮性。观察不同的条件和敏感性可能会让你放弃那些不能很好概括的过度设计的模型。一旦投入生产,拥有一种验证模型并运行敏感性分析的方法可以增强对其性能的信心。
- 数据科学是一个包含大量学科的领域。因此,选择一两个领域并在那里发展深厚的专业知识是很重要的。这个建议被“T 型”模型的概念完美地捕捉到了,在这个模型中,你既有一系列广泛主题的广度,也有一两个主题的深度。
数据头脑:Jai bans al——红牛的数据科学家
原文:https://towardsdatascience.com/data-minds-jai-bansal-data-scientist-at-red-bull-afdb141a0e26?source=collection_archive---------23-----------------------
Data Minds 是一个介绍从事数据工作的专业人士的系列。在这个系列中,你将了解他们的故事,他们的日常生活,以及给别人的建议和忠告。
红牛在全球所有能量饮料公司中的市场份额最高,仅在 2018 年就售出了 67.9 亿罐。可以想象,这意味着他们产生了大量的数据。从司机上传以验证交付的图像,到业务运营的数据。 Jai Bansal 在过去的两年半时间里一直在红牛担任数据科学家,之前曾在一家初创公司工作过两年。在这篇文章中,我们讨论了他是如何进入数据科学的,在一个数据文化处于萌芽状态的公司是什么样的,花 50%的时间学习的重要性,以及给其他希望进入数据科学的人的一般提示。
从经济学到数据科学
当 Jai 2010 年在南加州大学攻读经济学硕士学位时,数据科学这个术语还没有流行起来。这个术语是两年前(2008 年)由领英和脸书的早期数据科学负责人 DJ Patil 和 Jeff Hammerbacher 创造的。
在学校时,杰有广泛的兴趣。他知道自己喜欢数学,有 r 方面的经验。但除此之外,他不具备你今天可能会期望的实用数据科学技能。当他在校外找到第一份工作时,这种情况很快就改变了。当时,他知道自己不想继续在学术界工作,所以他在一家初创公司找到了一个与数据相关的职位,并进行了面试。他意识到,与其等待“完美”的角色,不如开始工作,获取行业经验,宜早不宜迟。
被迫学习所有有效的行业工具,他很快发现自己在用消防水管喝水。虽然在这家初创公司工作并不总是最好的经历,但它确实让他磨练了自己,获得了宝贵的经验。他确保积极主动地接受公司的各种项目,让自己获得日后职业生涯所需的广泛接触。
在那里呆了两年后,他意识到是时候改变了。他面试并加入了红牛,成为他们在北美首批为数不多的数据科学家之一。
红牛的数据科学
由于红牛的数据科学团队仍处于早期阶段,从创业环境中转型并不困难。新生的数据文化给了团队很多机会变得灵活和有经验。
他有机会参与的一些早期项目从修补卷积神经网络到建立预测模型以帮助部门更有效地进行规划。
杰最早学到的一课就是解决正确的问题。他分享说,在项目上花费太多时间而没有得到利益相关者的反馈或认可,往往会导致资源的巨大浪费。他提倡一种精益创业的方法,在投入额外的时间到项目中之前快速迭代并获得反馈。
Jai 的另一项工作是与关键部门合作,寻找和选择相关项目。找出企业利益相关者的动机(提示:削减成本、增加收入和增加利润),以及与他们合作确定值得追求的战略目标,是他工作的一大部分。在具有早期数据文化的公司中尤其如此,利益相关者可能不总是立即看到数据科学家的价值。Jai 还致力于公司内部的数据传播工作。他负责他们的 R analytics 培训,并为一份内部通讯撰稿。
根据项目和所处的阶段,他花 70%的时间编写代码,另外 30%的时间做推广或展示他的成果。然后进一步细分为 30%的特别请求(类似于 SQL 查询),40%的个人项目,以及 30%与团队中其他数据科学家的团队项目。他根据项目用 SQL、R 或 Python 编码。
给别人的建议
Jai 给希望进入数据科学的人的最大建议是热爱学习,并确保你总是在工作中学习。数据科学是一个不断变化的领域,因此跟上最新发展非常重要。他的个人目标是把 50%的工作时间花在推动他学习的项目上,另外 50%花在他以前做过的重复性工作上。与你的经理一起工作,制定一个长期的学习计划是另一个很好的建议,可以确保你对自己的未来发展进行投资。
除此之外,杰强调了非技术技能的重要性。能够与非技术利益相关者有效沟通对建立信任大有帮助。没有什么比被技术术语搞得不知所措更让人听不进去了。也就是说,花时间教育你的利益相关者也很重要。解释你的预测模型的潜在概念的能力可能是降低人们采用它的阻力的一个很好的方法。
最后,请务必记住,您和您的数据科学团队是一个更大整体的一部分。将业务放在第一位,理解利益相关者的痛苦,将有助于创造一个信任和协作的环境。虽然在深度学习模型上工作可能更能激发智力,但事实上,从更简单的模型开始并以此为基础进行构建可能更有用。
用于可持续数据管理的数据挖掘
原文:https://towardsdatascience.com/data-mining-for-sustainable-data-management-659e7c7ea41e?source=collection_archive---------19-----------------------
在当今快速发展的技术世界中,当智能手机、平板电脑、个人电脑已经成为人类生活不可分割的一部分时,实现信息和数据的力量是最重要的理念。如今,我们生活在“信息时代”,数据量呈爆炸式增长;过去两年中创建的数据比人类历史上所有的数据都要多。数据分析和数据挖掘背后的巨大潜力,未来必须吸收数据挖掘技术的实施,以实现可持续的数据管理。
数据正以前所未有的速度增长,到 2020 年,地球上每个人每秒将产生大约 1.7 兆字节的新信息。
然而,目前只有不到 0.5%的数据被分析和使用。数据挖掘处于以下两个方面的交汇点:
数据挖掘
数据挖掘是数据科学领域中的一个总括术语,是对大型数据集进行排序以识别其中的模式并建立相互关系来通过数据分析解决问题的过程。数据挖掘是在大型数据集中发现有趣的、意想不到的或有价值的结构。
- 统计学:对数据关系的数值研究
- 人工智能:由软件和/或机器显示的类似人类的智能
- 机器学习:可以从数据中学习以预测未来趋势的算法
对数据挖掘的需求
数据挖掘捕获大量数据,以便识别这些数据的洞察力和洞察力。在目前的情况下,数据行业的需求正在迅速扩大。非常重要的是,不要错过我们分析数据并将其转化为有意义的信息。
到 2020 年,我们累积的数字世界中现有的数据超过 4.4 吉字节,将增长到 44 吉字节或 44 万亿吉字节。
这些数据的可持续管理极其重要。每个数据集对它的分析都非常重要,可以预见商业趋势、预测销售、预测成本等。
数据挖掘的重要性
仅非结构化数据就占数字世界的 90%。但是更多的信息并不一定意味着更多的知识。数据挖掘允许:
- 浏览数据中所有混乱和重复的噪音
- 理解什么是相关的,然后充分利用这些信息来评估可能的结果
- 加快做出明智决策的步伐
随着数据挖掘技术不断发展以跟上无限可用数据的步伐,数据需要可持续的治理。
可持续数据管理
数据治理是关于如何更好地控制和管理数据以实现战略、改善结果和降低风险。它可以被认为是既满足了当代人的需求,又不损害后代人满足自身需求的能力。成功的数据管理组织在各个层面创造了关于其数据的价值、效用和相关性的机构意识和知识。数据挖掘是数据分析的基石,有助于开发能够发现数百万条记录之间联系的模型。
用于可持续数据管理的数据挖掘
作为一门综合学科,数据挖掘代表了在不同分析能力中使用的各种方法或技术,这些分析能力解决了组织的各种需求,提出了不同类型的问题,并使用不同级别的人工输入或规则来做出决策。遵循以下程序:
- 需求收集: 数据挖掘项目从需求收集和理解开始。需求范围是从业务角度定义的。一旦定义了范围,我们就进入下一阶段
- 数据挖掘: 在这里,根据项目的需求,对数据进行收集、评估和挖掘。了解问题和挑战,并将其转化为元数据。在这一步中,数据挖掘统计用于识别和转换数据模式
- 数据准备 : 将数据转换成对建模步骤有意义的信息。ETL 过程——提取、转换和加载可以在此步骤中使用。他们还负责创建新的数据属性。这里,使用各种工具以结构化格式呈现数据,而不改变数据集的含义
- 建模: 为这一步准备好最好的工具,因为这在数据的完整处理中起着至关重要的作用。应用所有建模方法以适当的方式过滤数据。建模和评估是相互关联的步骤,同时进行以检查参数。一旦最终建模完成,最终结果就是经过质量验证的
- 评价: 这是建模成功后的过滤过程。如果对结果不满意,则再次将其转移到模型中。根据最终的结果,再次检查需求,以确保没有未分析的点被遗漏。采矿专家在最后判断完整的结果。
- 部署: 这是完整流程的最后阶段。以电子表格或图表的形式向供应商提供数据
在数据被分类之后,用于最终数据表示建模的不同技术可以被分类为:
描述性建模
预测建模
规范建模
A .描述性建模:
它将发现并关注历史数据中共享的相似性或分组,以确定成功或失败背后的原因。示例:根据产品偏好或情感对客户进行分类。
B 。预测建模:
这种建模更深入地对未来的事件进行分类或估计未知的结果,例如,使用信用评分来确定个人偿还贷款的可能性。预测建模还有助于发现客户流失、活动响应或信用违约等情况
C .规定性建模:
随着来自 web、评论字段、书籍、电子邮件、pdf、音频和其他文本来源的非结构化数据的增长,文本挖掘作为数据挖掘的相关学科的采用已经显著增长。迫切需要成功地解析、过滤和转换由此获得的非结构化数据,以便将其包括在预测模型中,从而提高预测精度。规范建模着眼于内部和外部变量和约束,以推荐一个或多个行动方案。
数据挖掘不应被视为一个独立的实体,因为预处理(数据准备、数据探索)和后处理(模型验证、评分、模型性能监控)在该过程中同样重要。
应用领域
用于可持续数据管理的数据挖掘服务可用于以下功能:
- 研究和调查
- 信息采集
- 客户意见
- 数据扫描
- 信息提取
- 数据预处理
- Web 数据
- 对手分析
- 新闻
- 在线研究
- 更新数据
- 销售预测
- 商业趋势
- 客户细分
使用数据挖掘进行可持续数据管理将:
- 通过可持续的实践减少不受管理的数据增长的后果
- 通过统一数据保护降低数据存储成本
- 借助全球数据可见性降低数据丢失或被盗的风险
- 通过全面的企业数据治理确保法规遵从性
- 拥抱更清洁的数字环境,创造更清洁的自然环境
结论
在这个技术趋势的世界里,数据挖掘是一个快速发展的行业。每个人都需要以适当的方式和正确的方法管理数据,以便获得有用和准确的信息。
数据挖掘现在就在这里,我们需要向下挖掘并到达矿!
我希望这篇文章能有所帮助!快乐阅读!干杯!
数据模型—分类评估指标简介
原文:https://towardsdatascience.com/data-models-introduction-to-classification-evaluation-metrics-7862ba451da4?source=collection_archive---------24-----------------------
很多时候,当人们想到建模数据时,他们会直接想到回归模型,以根据收集的数据生成某些目标变量的预测。然而,分类模型对于基于数据生成预测也非常有用,只是方式不同。回归模型用于预测连续分布的目标变量,这些变量有无数个结果。回归问题的示例包括预测待售房屋的价格、预测给定日期的温度以及预测 NBA 球员在下一场比赛中的得分。在分类数据模型中,我们试图预测的目标变量具有离散分布,该分布具有有限数量的结果。分类问题的例子包括预测哪个候选人将赢得选举,以及预测一周中哪一天的销售额最高。在这篇文章的剩余部分,我将关注二元分类模型,它预测两个可能结果中最可能的结果。
分类预测评价指标
在回归数据模型中,模型的性能是通过使用某种度量(如均方误差和决定系数)将观察值与预测值进行比较来确定的。使用一组独特的度量标准来评估分类模型的性能,每个度量标准都是根据问题的上下文来选择使用的。此外,使用预测评估度量来计算分类度量,预测评估度量只能在预测离散目标变量时考虑。
真阴性(TN):预测一个事实上是负面的负面结果。
【假阴性】(FN):预测一个事实上并不消极的消极结果。
真阳性(TP):预测一个事实上是积极的积极结果。
假阳性(FP):预测一个实际上并不积极的积极结果。
这些值的标准表示形式是混淆矩阵,它表示真阴性、假阴性、真阳性和假阳性预测的数量。
Confusion matrix representation from Towards Data Science.
分类模型绩效评估指标
二元分类问题的一个经典例子是预测某人是否怀孕。在这种情况下,您可以将一个人怀孕定义为积极结果,将一个人没有怀孕定义为消极结果。确定哪种情况是积极的还是消极的取决于评估模型预测的人,这需要在评估模型之前明确指定。继续以怀孕为例,如果某人确实怀孕了,而您的分类模型预测他们没有怀孕,则该预测将被视为假阴性。此外,如果某人实际上没有怀孕,而您的分类模型预测他们怀孕了,则该预测将被视为假阳性。真正的正面和负面预测是在正确预测某人是否怀孕的情况下。要使用一个数字来总结分类模型的性能,有许多可用的指标。
准确率:有多少结果预测正确?
误分类率:有多少结果预测错误?
灵敏度/回忆:模型预测为阳性的结果有多少实际上是阳性的?
Note that sensitivity and recall are synonyms in this context.
特异性:模型预测为阴性的结果有多少实际上是阴性的?
精度:模型正确预测了多少正面结果?
将所有这些放在一起
根据您试图解决的分类问题的上下文,优化模型的最重要的性能评估指标可能会有所不同。在怀孕的例子中,预测某人没有怀孕,而实际上他们已经怀孕了,这比预测某人怀孕了而实际上他们并没有怀孕,这是一个更严重的错误。在度量标准中,这意味着导致假阳性的严重性不如导致假阴性的严重性。如果有人在怀孕时不认为自己怀孕了,他们可能会从事对胎儿有害的活动。因此,响应这种特定分类问题的模型构建应该以最小化假阴性为目标进行优化。最小化假阴性的分类性能度量是灵敏度,因此应该优化模型以产生尽可能低的灵敏度。在创建二元分类模型时使用这些度量将极大地提高模型相对于手头问题的质量。
〠 ❤︎ ✔︎趋势 YouTuBe 视频统计中熊猫的数据预处理
原文:https://towardsdatascience.com/data-pre-processing-with-pandas-on-trending-youtube-video-statistics-︎-︎-c7ce698fbdcb?source=collection_archive---------22-----------------------
本文的目的是提供一个标准化的数据预处理解决方案,可以应用于任何类型的数据集。您将学习如何将数据从最初的原始形式转换为另一种格式,以便为探索性分析和机器学习模型准备数据。
数据概述
- 这个数据集是来自美国的热门 YouTube 视频的每日记录。
- 数据包括视频标题、频道标题、发布时间、标签、视图、喜欢和不喜欢、描述和评论计数等。
- 数据集的形状是 16580 行* 16 列。
数据预处理路线图
数据预处理源代码
数据集的基本观点
# A quick look at the dataset. Return 5 random rows.
df.sample(5)
# Return data types
df.dtypes
# Dimensions of dataset
df.shape
# Statistical summary
df.describe()
df_summary = df.describe(include="all")
df_summary
- “top”是最常出现的项目
- “频率”是热门项目显示的次数
- “NaN”表示无法对该类数据进行计算
# Unique value: value counts of a specific column
df['category_id'].value_counts()
上图显示了“category_id”列中的唯一值。值“24”的计数是 3911。
# Look at a specific field
df.iloc[23,5]
# Look at selected columns
columnWeCareAbout=['title','views','likes','dislikes','comment_count']
df[columnWeCareAbout].sample(5)
识别和处理丢失的数据
# Use heatmap to check missing data
sns.heatmap(df_summary.isnull(), yticklabels=False, cbar=False, cmap='viridis')
# See counts of missing value
for c in df_summary.columns:
print(c,np.sum(df_summary[c].isnull()))
# Replace missing data
df_summary['views'].fillna(df_summary['views'].mean(), inplace=True)
以上代码用平均值填充缺失的数据。你可以在实际案例中考虑插值、中值或其他方法。
# Drop a column most value are missing
df_summary.drop(['thumbnail_link'], axis=1, inplace=True)sns.heatmap(df_summary.isnull(), yticklabels=False, cbar=False, cmap='viridis')
No missing value detected
数据格式编排
# Change data type if needed
df['left_publish_time'] = pd.to_datetime(df['left_publish_time'], format='%Y-%m-%dT%H:%M:%S')
Change type from object to datetime
# Unit conversion# conversion factor
conv_fac = 0.621371# calculate miles
miles = kilometers * conv_fac
数据标准化
# Number in different range which influence the result differently
df[['views','likes','dislikes','comment_count']].head()
# Simple feature scaling
df['views'] = df['views'] / df['views'].max()
df[['views','likes','dislikes','comment_count']].head()
New values in column “views”
# Min-max
df['likes'] = (df['likes'] - df['likes'].min()) / (df['likes'].max() - df['likes'].min())
df[['views','likes','dislikes','comment_count']].head()
Normalized value in column “likes”
# Z-score
df['dislikes'] = (df['dislikes'] - df['dislikes'].mean()) / df['dislikes'].std()
df['comment_count'] = (df['comment_count'] - df['comment_count'].mean()) / df['comment_count'].std()df[['views','likes','dislikes','comment_count']].head()
扔掉
- 将值分组到箱中
- 将数值转换成分类变量
- “喜欢”是数字,我们希望将其转换为“低”、“中”、“高”,以更好地表示视频的受欢迎程度
binwidth = int(max(df['likes'])-min(df['likes']))/3
binwidth
bins = range(min(df['likes']), max(df['likes']),binwidth)
group_names = ['Low','Medium','High']
df['likes-binned'] = pd.cut(df['likes'], bins, labels=group_names)
df['likes-binned']
Visualizing binned data
一键编码
- 为每个独特的类别添加虚拟变量
- 在每个类别中分配 0 或 1
- 将分类变量转换为数值
df['category_id'].sample(5)
category = pd.get_dummies(df['category_id'], drop_first=True)
category.head()
# Add dummy values into data frame
df = pd.concat([df, category], axis=1)
df.sample(5)
应用 IF 条件
# Add a column base on the conditions# df.loc[df.column_name condition, 'new column name'] = 'value if condition is met'df.loc[ df['likes'] > 1000 | df['views'] > 10000, 'popularity'] = 'Yes'
df.loc[ df['likes'] <= 1000 & df['views'] <= 10000, 'popularity'] = 'No'
恭喜你。您完成了一篇冗长的文章,现在您知道了一个标准化的数据预处理解决方案,可以应用于任何类型的数据集。你的数据科学家难题又多了一块!源数据可以在这个链接找到。
测验:为什么我们需要数据标准化?
下一步:探索性数据分析(EDA ),熊猫对 YouTuBe 视频统计数据进行趋势分析
机器学习的数据准备:清洗、转换和特征工程
原文:https://towardsdatascience.com/data-preparation-for-machine-learning-cleansing-transformation-feature-engineering-d2334079b06d?source=collection_archive---------5-----------------------
数据准备阶段的目的是将数据转换为机器学习的最佳格式,这包括三个阶段:数据清理、数据转换和特征工程。高质量的数据比使用复杂的算法更重要,因此这是非常重要的一步,不应该跳过。
数据清理
在数据理解活动中,您研究了您的数据并检测到不完整或不正确的值。在此阶段,您需要解决这些问题,活动包括:
- 处理缺失值
- 处理异常值
- 纠正错别字
- 分组稀疏类
- 删除重复项
主要考虑事项
缺失值
大多数机器学习模型要求所有特征都是完整的,因此,必须处理缺失值。最简单的解决方案是删除所有缺少值的行,但重要信息可能会丢失或引入偏差。
在数据探索阶段,您应该已经探索了丢失数据的可能原因,以帮助指导是否可以删除这些数据点。或者,你可以估算这个值;为缺失的数据提供适当的替代。常见的插补使用平均值、中间值或众数。对于分类数据,可以创建新的类别(例如“未知”)。更复杂的解决方案包括使用 K-最近邻(KNN)或链式方程多元插补(MICE)。
离群值
如果您在数据探索期间的异常值调查只发现了可能是错误的低频异常值,则这些异常值可以被视为缺失数据,并被移除或替换。从数据集中移除异常值的过程称为修剪或截断。
如果您认为删除或更改异常值会丢失重要信息,您可能希望保留它们,并使用机器学习算法和对异常值稳健的优化度量。
异常值可以用类似于缺失数据的技术来代替,例如用平均值、众数或中位数。更复杂的技术包括 Winsorizing(用最小和最大百分位数替换极值)和离散化(宁滨),即将连续变量分成离散的组。
分组稀疏类
分类特征通常具有大量不同的值,其中一些值出现的频率很低。当数据以自由文本的形式输入并且容易出现输入错误时,这种情况尤其常见。
在数据转换阶段,我们将讨论如何将分类数据转换为机器学习模型可以读取的格式。然而,这通常涉及为该类别中的每个不同的值创建一个新的特性;如果每个分类特征都有许多不同的值,这种转换会产生许多附加特征。
许多机器学习算法可能会因为太多的特征而陷入困境,这被称为维数灾难。为了解决这一问题,您可能希望对质量相似的值进行分组。这很可能是与主题专家合作的手工工作。尽管对于拼写错误或大小写不一致的情况,可以使用模式或模糊匹配工具。
数据转换
收集数据仅仅是为了进行预测是很少见的。因此,您可用的数据可能格式不正确,或者可能需要转换以使其更有用。数据转换活动和技术包括:
- 分类编码
- 处理扭曲的数据
- 偏差缓解
- 缩放比例
- 秩变换
- 幂函数
主要考虑事项
分类编码
标签编码将分类变量转换成机器可读的数字表示。
首先要明白的是,无论你的类别是有序的,类都是有顺序的。例如,教育水平有一个顺序,硕士学位的排名高于学士学位。为了保持这种关系,您将希望根据它们的相关大小对它们进行排序,并将它们的排序作为模型的输入。
如果类别不是有序的,你可以对你的类别进行一次热编码;这将为每个唯一值创建一个新列。例如,如果您有一个婚姻状态特征,带有“单身”、“已婚”、“离婚”或“未公开”,这将变成四个不同的列。具有“单一”状态的观察将在“单一”列中有一个 1,在其余三列中有零。
对于神经网络或处理文本数据,您可能希望使用嵌入,这些是数据的矢量表示。与权重类似,嵌入是在模型训练期间学习的。这允许模型学习数据的丰富表示。
处理偏斜数据
统计技术通常假设正态性;如果您使用的是线性回归或神经网络等回归算法,那么在转换具有偏态分布的变量时,您可能会看到很大的改进。
为了近似更对称的分布,您可以使用根(即平方根、立方根)、对数(即以 e 为底或以 10 为底)、倒数(即正或负)或 Box-Cox 变换。
缩放
缩放是一种将数据转换到特定范围的方法。这在使用回归算法和使用欧几里德距离的算法(例如 KNN 或 K-Means)时非常重要,因为它们对要素之间的大小和范围变化非常敏感。
缩放的目标是将数据集中每个数值特征的值更改为一个通用的比例。通过这样做,不同特征的变化变得更具可比性。缩放可以通过归一化(最小-最大缩放)或 z 分数标准化来完成。
偏差缓解
如果您发现数据中存在偏差,您可以使用各种预处理技术来减轻这种情况。这些通常会用更公平的模型来代替当前的值或标签。
预处理偏差减轻算法的例子是重新加权、优化预处理、学习公平表示和不同影响去除器。
特征工程
特征工程是基于关于当前特征和所需任务的知识来创建新特征的过程。要完成这一步,对数据有一个清晰的理解是很重要的,这可能需要你和一个主题专家一起工作。这项活动可能还需要您寻找新的数据源。两项关键活动是:
- 特征提取,以及
- 捕捉特征关系
特征抽出
您可能会发现数据中的列在当前状态下没有用,可能是因为它们太细了。例如,时间戳不太可能有助于发现趋势,而一天中的时间或一周中的某一天可能有助于发现趋势。
在文本分析中,特征提取涉及从原始文本串创建结构化(柱状)文本串。这可以简单地创建具有值 1 或 0 的新列,指示是否提到了特定短语,或者可以为每个单词(单词袋)创建列,并且它们的值是它们的频率的表示(TF 或 TF-IDF)。
捕捉特征关系
不要期望模型找到两个特征之间的关系,它们可以被显式地调用。然后,你可以帮助你的算法专注于你或你的主题专家所知道的重要的东西。
导出关系的可能方法包括计算和、差、积或商。例如,机器学习模型可能不容易找到两个地址的经度和纬度值之间的联系,但通过提供两者之间的距离,您可以更好地使它能够导出模式。
数据科学的数据预处理和探索性数据分析(EDA ):应对 Taarifa 挑战
原文:https://towardsdatascience.com/data-preprocessing-and-eda-for-data-science-50ba6ea65c0a?source=collection_archive---------7-----------------------
我们如何使用不同的数据预处理和探索性数据分析(EDA)技术为预测建模准备数据?
介绍
数据预处理和探索性数据分析(EDA) 是任何数据科学项目必不可少的任务。在本文中,我们将查看一个样本数据集,挑战并应用一些数据预处理和 EDA 技术。
请注意,数据预处理和 EDA 是不同的术语,但有许多重叠的子任务,通常可以互换使用。
数据集和原始代码可以通过这个 GitHub 链接访问。
挑战
我将在这篇文章中使用的挑战来自Drivendata.org。你可以把它想象成一场挑战社会影响的游戏。你仍然可以获得同样的奖金和格式良好的数据集,额外的好处是你将对世界产生积极的影响!
我们在本文中使用的特殊挑战称为“ 向上泵:数据挖掘地下水位 ”面临的挑战是创建一个模型,该模型将预测特定水泵(“water point”)的状况,因为它有许多属性。
This is a water pump, or a water point. Each data point we’re looking at in this article corresponds to an actual waterpoint in Tanzania. Photo credits to Taarifa
数据由 Taarifa 提供,这是一个开源 API,收集这些数据并呈现给世界。如果你对他们的工作和他们的数据点代表什么感兴趣,一定要去看看他们的网站(还有 GitHub !)
This is what the Taarifa API looks like. Don’t worry; we’re not going to do anything about it today.
数据
这些数据集描述了超过 74,000 个数据点,代表了 Taarifa 数据目录中的一个水点。59,400 个数据点(整个数据集的 80%)在训练组中,而 14,850 个数据点(20%)在测试组中。
训练数据点有 40 个特征,一个特征是其当前功能的标签。所有数据点都有一个特征,那就是水点的 ID。
有三个数据集,两个用于训练组,一个用于测试组。
train_values is a dataset of 59400 data points of 40 features train_labels is a dataset of 59400 data points of 2 features test_values is a dataset of 14850 data points of 40 features
输出类别
训练数据集带有三个标签:“功能性”、“功能性-需要修复”和“非功能性”。标签显示了该供水点的状况。我们的工作是预测测试数据集中的水点的状况。
如上所示,“功能性”占训练数据集的 54.3%,“功能性-需要修复”占 7.3%,“非功能性”占 38.4%。输出似乎有点不平衡,但我们还不确定这种不平衡是否会很明显。我们将在建模部分回到这个问题。
组合数据
为了有效地预处理数据,并将预处理措施应用于所有数据点,我们组合了训练和测试数据集。
# 'status_group' column is assigned the status of each waterpoint, 'test' if unknown (i.e. the waterpoint belongs to the test dataset)
train_values['status_group']=train_labels.status_group
test_values['status_group']=['test']*test_values.shape[0]# 'train' column discerns if the waterpoint belongs to the training group or the testing group
train_values['train']=[True]*train_values.shape[0]
test_values['train']=[False]*test_values.shape[0]df = pd.concat([train_values,test_values])
You can see how we now have a “status_group” and “train” columns. You can view the first five rows of your dataset using the df.head() function
In a similar manner, you can view the last five rows of the dataset using the df.tail() function. You can see that the status_group is ‘test’ for the testing dataset, denoted by the feature train = False.
EDA/数据预处理
现在我们有了一个合并的数据集,我们可以在它上面做一些 EDA 魔术。
删除缺少太多值的要素
任何数据集中的首要任务之一就是找出是否有缺失值。由于该数据集的要素数量超出了我们的预期,我们将删除缺失值过多的要素。让我们看看每个要素有多少个缺失值。
nulls = df.isnull().sum()# this will show only features that have nonzero missing values
nulls[nulls!=0]
Number of missing values for features that have missing values
似乎有相当多的特征缺少数据点!让我们看看它们在整个数据集中所占的百分比。
nulls_percentage = nulls[nulls!=0]/df.shape[0]*100
print('the percentages of null values per feature:\n')
print(round(nulls_percentage,2))
The percentage of missing values in each feature
看起来具有任何缺失值的特征具有大量的缺失值。对于' scheme_name ',它几乎丢失了一半的数据!因此,如果要素包含任何缺失值,则消除整个要素是安全的。我们可以通过在 dropna 函数中标记 how =‘any’来注意到这一点。
features_original = df.shape[1]
df.dropna(axis='columns',how='any',inplace=True)
features_reduced = df.shape[1]
print('number of features reduced from %d to %d'%(features_original,features_reduced))
识别数字但分类的特征
识别分类特征的一个不太好的方法是检查它的值是否是非数字的。但是有一些特征的类别是数值。这意味着数值的大小没有内在的意义,即特征是分类的而不是顺序的(即有顺序)。
很多时候,我们不能确定一个数字特征是有序的还是分类的。我们不得不询问那些实际给数据点分配数字的人,看看他们是否有内在的意义。
但是通过观察每个特征出现了多少个“唯一的”数字,我们可以猜测一个数字特征是否是绝对的。
df.select_dtypes(include='number').nunique()
The number of unique values per numerical feature
在这里,我们可以看到有五个要素的唯一值数量异常少。这表明这些数值实际上代表分类值。
查看数据集文档,我们发现五个特征中的三个:‘num _ private’,‘region _ code’,‘district _ code’是地理代码,其数值与我们的挑战无关。让我们将它们转换成字符串,以便在接下来的章节中使用它们。
df['num_private'] = df.num_private.astype(str)
df['region_code'] = df.region_code.astype(str)
df['district_code'] = df.district_code.astype(str)
删除类别过多的分类要素
****分类特征与太多的分类通常对预测模型没有用。让我们来看看每个分类特征有多少个类别。
uniques = df.select_dtypes(exclude='number').nunique()
uniques
The number of unique values per nonnumerical feature
我们有一些特征,它们的类别数量不足以证明它们是一个“分类”变量。假设我们有超过 74,000 个数据点,一个有超过 740 个类别的的特性,平均每个类别的将少于 100 个数据点。让我们来看看哪些功能有超过 740 个独特的类别。****
uniques[uniques>740]
Features with more than 740 unique values
只有两个功能有超过 740 个类别:“wpt_name”和“ward”我们可以简单地用熊猫拖放功能来拖放它们。
df.drop(columns=['wpt_name','ward'],inplace=True)
移除值太少的分类要素
我们还有很多功能。我们希望减少分类特征,因为一旦我们应用一键编码,它们将会增加特征的数量。
另一种类型的分类特征通常是无用的特征,其类别很少出现。让我们找到这样的特征。
在上一节中,我们删除了每个类别的“平均”数据点少于 100 个数据点的特性。这里,我们将删除每个类别的“最小”数据点小于 100 的特征。****
thresh = 100for col in df.select_dtypes(exclude='number').columns:
value_counts = df[col].value_counts()
if value_counts.min(axis=0) < thresh:
df.drop(columns=col,inplace=True)
有 10 个特征的每个类别的最小数据点少于 100。让我们快速回顾一下,看看保留了哪些非数字特性,以及每个特性有多少个类别:
df.select_dtypes(exclude='number').nunique()
The number of categories per categorical feature left in our dataset
丢弃不相关的特征(并绘制相关热图)
好的,让我们快速检查一下我们还剩下哪些功能:
print('total number of features: %d\n'%(df.shape[1]))
df.dtypes
The features left in our dataset
老实说,当我们还没有运行任何模型(并看到它们的结果)时,我们不能十分确定哪些特性将是“不相关的”。当特征的组合,而不是单个特征,可能是找到正确分类方案的关键时,尤其如此。
让我们看看是否有“完全不相关”的功能,当删除时,可能不会影响其他功能。这仍然不能保证这个特性和其他特性结合起来就没有用,但是可以指引我们找到一些有希望的。
就像在,让我们画一些相关热图!
请注意,我们现在只能绘制数字特征的关联热图。有一种方法可以绘制分类变量的相关热图,但这种方法要麻烦得多。
import seaborn as snssns.heatmap(df.corr(), cmap='RdBu',center=0)
plt.show()
Correlation heat map for numerical features.
似乎有一些功能相对于其他功能来说没有价值。我们先把特征排序一下,看看是哪些。
sns.clustermap(df.corr(), cmap='RdBu',center=0)
The cluster map of the correlations of numerical features
因此特征‘amount _ TSH’和‘id’似乎与其他特征相对不相关,可以安全地忽略。注意,‘amount _ TSH’是‘水点可用的水量’,而‘id’是,你知道,水点的 ID。这两个似乎都不是特别有价值,所以让我们把它们扔掉吧。
看看类别的数量,我们还看到特征‘recorded _ by’是只有一个类别的分类特征。那肯定是没用的,所以我们也可以把那个去掉。
还要认识到,特性“train”只是为了跟踪数据集分组,所以我们不必关心这个。
df.drop(columns = ['amount_tsh','id','recorded_by'],inplace=True)
一键编码
既然我们认为剩下的所有特性都是“有价值”的,我们可以继续进行一次性编码了!请记住,这将增加数据集的要素总数。
columns_categorical = ['basin','region','extraction_type_group','extraction_type_class','management','management_group','payment','payment_type','quality_group','quantity','quantity_group','source_type','source_class']df = pd.get_dummies(df,columns=columns_categorical)
在一次性编码之后,我们看到我们的特征数量从 20 增加到了 114。****
普通格式
最后要做的一件事是为“status_group”特性提供普通性。虽然这是一个绝对的特征,但它也有规律可循。即有一个顺序关系功能>功能需要修复>非功能。一种快速而肮脏的方法是用数字值替换字符串值。
Pandas 确实支持类别类型系列的内部订购功能,但它确实有点麻烦,所以我们在这里不做了。但严格来说,用熊猫给出的条例法更准确,尤其是类别之间的“距离”可能不相等的时候。通过给出数字,我们可以说“功能性”和“功能性需求修复”之间的差异与“功能性需求修复”和“非功能性”之间的差异是一样的。
status_group_dict = {'functional':2,'functional needs repair':1,'non functional':0}
df.status_group = df.status_group.replace(status_group_dict)
就是这样!现在,我们有了一个格式优美的数据集,我们现在可以将它放入一些模型中,以生成一些预测。如果你只是对数据预处理和 EDA 感兴趣,你可以在这里结束。如果你想看看这个清理过的数据集如何用于预测建模和多类分类,你可以点击查看的那篇文章。
你必须知道的数据预处理和模型比较技术
原文:https://towardsdatascience.com/data-preprocessing-and-model-comparison-techniques-you-must-know-1347edb319e7?source=collection_archive---------6-----------------------
成人人口普查收入—根据人口普查数据预测收入是否超过 5 万美元/年
Photo by Stephen Dawson on Unsplash
众所周知,在做数据科学项目时,永远不仅仅是在数据上拟合模型,获得模型性能。实际上,就好的项目而言,更多的是探索数据、清理、预处理数据,并最终比较几个模型的性能以获得最佳的一个。
在这篇文章中,我将使用来自 UCI 机器学习库的美国人口普查数据,并介绍整个过程。在这个过程的最后,我们将解决以下几个问题:
- 构建一个能准确预测个人收入是否超过 5 万美元的模型。
- 造成高收入和低收入的关键因素是什么?
- 按性别或种族划分,这些普查属性是否存在显著差异?
- 基于人口普查数据的任何底层集群(组)?
探索数据
加载必要的 Python 库和人口普查数据
评估缺失数据
快速检查列或行中是否有任何巨大的缺失值,这可能会极大地影响后面的分析。
处理未知/缺失数据
上面的结果显示数据集中没有“null”值。但是根据提供的数据注释,未知数据被转换为“?”。因此,接下来,我们将转换'?'敬 NaNs。
因为丢失了数据?在一个小卷中,这里我选择只删除标记为“?”的未知数据给你。但是如果丢失的数据量很大,就需要考虑用更先进的方法来输入 NaNs。
在数据集中,列级别的最大缺失百分比是 5%,大多数列都足够完整。因此,这里我将删除 NaN 值,而不是手动输入。
探索数据分析
我们的目标是确定一个人的收入是否超过 5 万英镑,所以首先,要了解收入在数据集中的分布情况。对数据集的粗略调查将确定每个群体中有多少人,并告诉我们这些人的收入超过 50,000 美元的百分比。
在这里,我将生成一些变量来帮助分析,如下所示:
-记录总数
-年收入超过 5 万美元的人数
-年收入不超过 5 万美元的人数
-年收入超过 5 万美元的人数百分比
注意:
由于在 EDA 过程中,我们不需要测试数据,我将在这一部分中合并训练和测试数据,以便获得更好和更普遍的数据分布
从上面的图表中,我们可以看到 50000 人的大部分是处于职业生涯中期的人,而且 50000 人中男性比女性多一点,尤其是在 50 岁左右。
我们可以看到收入超过 50000 的人的前三个最大的群体是行政管理人员、专业教授和销售人员。
由于种族在数据集中有点不平衡,白人占了 50K '组的大部分。而在每场比赛中,'<50K’ population is much larger than ‘> 50K '。
然后我们快速看一下教育和收入水平的关系。我们可以看到最大的群体是单身汉,其次是高材生和一些大学生。移动丢失的值后:
Total number of records: 45222
Individuals making more than $50,000: 11208
Individuals making at most $50,000: 34014
Percentage of individuals making more than $50,000: 24.78%
准备数据
在数据可以用作机器学习算法的输入之前,通常必须对其进行清理、格式化和重构。在处理完丢失的条目后,必须调整某些特性的某些品质。这种预处理可以极大地帮助几乎所有学习算法的结果和预测能力。
变换倾斜的连续要素
偏斜度可能违反模型假设,或者可能损害特征重要性的解释。因此,这里我将对倾斜的数据应用对数变换。
如图所示,在“资本收益”和“资本损失”特征中似乎存在偏斜。使用定量结果来确认我是否需要转换这两个变量的偏度。
标准化数字特征
除了对高度倾斜的要素执行变换之外,这里还将对数字要素执行某种类型的缩放。对数据进行缩放不会改变每个特征的分布形状(如上面的“资本收益”或“资本损失”);但是,对于依赖于数值大小的模型,缩放输入属性是很有用的,例如 k-最近邻和回归系数准备中使用的距离测量。
数据预处理
每个记录都有几个非数字的特征。通常,学习算法期望输入是数字,这需要转换非数字特征(称为分类变量)。这里通过使用**一键编码* *方案来转换分类变量。
此外,与非数字特性一样,我需要将非数字目标标签“income”转换为数字值,以便学习算法能够工作。由于这个标签只有两个可能的类别(“<=50K” and “> 50K”),我们可以简单地将这两个类别分别编码为‘0’和‘1’。因此,我们将
- 使用“sklearn.OneHotEncoder”对“features_log_minmax_transform”数据执行一步到位编码。
—注意:由于测试数据是独立的,如果测试数据中有看不见的类别会使模型失败,这里使用 sklearn。OneHotEncoder 而不是 pd.get_dummies() - 将目标标签“income_raw”转换为数字条目。将带有“<=50K” to
0
and records with “> 50K”的记录设置为“1”。
评估模型性能
在这一节中,我将研究五种不同的算法,并确定哪种算法最适合数据建模。这些算法中的四个将是监督学习器,第五个算法被称为朴素预测器。
朴素预测器
生成一个简单的预测器来显示没有任何智能的基础模型是什么样子。也就是说,如果我们选择一个总是预测个人收入超过 50,000 美元的模型,那么该模型在这个数据集上的准确性和 F 值会是多少?这里假设我们考虑更多的是正确预测收入超过 50K 的个人。
因此,模型准确预测那些收入超过 50,000 美元的人的能力比模型回忆那些人的能力更重要。我们可以使用 F-beta 分数作为同时考虑精确度和召回率的指标:
监督学习模型
除了基准模型之外,我将选择其他四个模型作为建立预测模型的候选模型:逻辑回归、随机森林、集成方法(AdaBoost)和支持向量机(SVM)。
- 逻辑回归
- 随机森林
- 集成方法— AdaBoost
- 支持向量机(SVM)
创建培训和预测渠道
为了更有效地正确评估上面选择的每个模型的性能,创建一个训练和预测管道很有帮助,它可以使用各种大小的训练数据快速有效地训练模型,并对测试数据执行预测。
流水线将:
—使学习者适应采样的训练数据,并记录训练时间。
—对测试数据“X_test”以及前 300 个训练点“X_train[:300]”进行预测。
—记录总的预测时间。
—计算训练子集和测试集的准确度分数。
—计算训练子集和测试集的 F 值。
初始模型评估
改善结果
接下来,我将从四个监督学习模型中选择最佳模型用于测试数据。然后,我将在整个训练集(“X_train”和“y_train ”)上对模型进行网格搜索优化,以提高未调整模型的 F 值。
根据上面的模型性能图,尽管随机森林在训练集上表现最佳,但 AdaBoost 分类器最终在测试数据上预测最佳。虽然 AdaBoost 分类器的精度与其他模型的性能非常相似,但当模型应用于整个数据集时,AdaBoost 的 F-score 在训练和测试数据上都更好。此外,与花费更多时间来训练和预测的支持向量分类器相比,AdaBoost 更快。在二进制分类方面,AdaBoost 在这种情况下也会有很好的表现。
模型调整
微调选择的模型。使用网格搜索(GridSearchCV
)。为此使用整个训练集。
优化后的模型对测试数据的准确率为 0.8701,F 值为 0.7518。这两个分数都比未优化的模型好。此外,优化模型的性能比基准测试好得多
特征重要性
通常,在对数据集(如这里的人口普查数据)执行监督学习时,了解哪些特征提供最强的预测能力是很有用的。在这种情况下,这意味着我们希望确定少量最强有力地预测一个人最多挣 50,000 美元还是超过 50,000 美元的特征。
这里将选择一个具有“feature_importance_”属性的 scikit-learn 分类器(例如 adaboost、random forests)。使该分类器适合训练集,并使用该属性来确定人口普查数据集的前 5 个最重要的特征。
从结果来看,特征重要性把“资本损失”作为最重要的特征。这可能是因为更大的资本损失意味着这个人必须有足够的钱来投资。“年龄”排在第二位,这可能是因为年龄越大,给捐赠者的薪水就越高。“每周工作时间”和“性 _ 女性”排在第四和第五位,这可能是因为这不是确定的情况。这是真的,因为也许这个人工作时间更长,但单位工资更低。
从上面的可视化中,我们看到前五个最重要的特征占数据中所有特征重要性的一半以上。这暗示我们可以尝试减少特征空间并简化模型学习所需的信息。下面的代码单元将使用前面找到的相同的优化模型,并在仅具有前五个重要特性的相同训练集上对其进行训练。
如上图所示,如果我只使用重要的特性,这个模型的性能会差一点。准确率低了 5%,f 值低了 7%,所以在这种情况下,我仍然会选择使用所有特征来构建模型,除非拟合模型的时间很重要。
要更详细地了解我的分析,请随意查看我对应的 GitHub 库:
https://github.com/JcFreya/Adult-Census-Income
数据预处理——艺术还是科学
原文:https://towardsdatascience.com/data-preprocessing-art-or-science-7d13ae5663fa?source=collection_archive---------23-----------------------
缺失值插补
数据预处理(第 1 部分)
大多数人都说任何分析模型的核心是模型构建,但我宁愿说它的数据预处理,而不是模型构建。一个人只能建立模型,一旦他/她处理了数据或干净的数据。所有可用的原始数据都是不完整的,在做任何进一步的分析之前需要清理,因为有一种说法是,如果输入是错误的,输出只会产生误导。
数据预处理是在执行任何任务之前清理数据以使其更有意义的过程,因此,它成为任何分析任务(无论是描述性分析还是预测性分析)的重要组成部分。
如何进行数据预处理:
无用或多余的字段
缺少值
极端值
数据转换
让我们用示例数据信息来详细讨论这些。
Sample data for Personal Laon user prediction
- 冗余字段:在开始任何种类的预处理或数据分析之前,必须非常仔细地观察数据。深入数据预处理之前要检查的事项:
a)如果发现重复记录,需要删除。
b)需要检查数据格式,有时你需要考虑几个变量到文本中,但那可能会变成数字。
c)寻找相关变量,如果发现高度相关或完全相关的变量,那么保留两个变量就变得多余,因此可以删除一个变量。堆图,相关矩阵用于检查这一点。
- 缺失值:数据集经常会有一些数据缺失的变量,我们不知道如何处理这些缺失值。一个简单的方法是删除这样的行或列。但是不知道这样做是否正确,因为数据集可能很小,删除这些值可能会丢失最重要的信息。
事实上,Gallit Shmueli、Nitin Patel 和 Peter Bruce 指出,如果 30 个变量的数据集中有 5%的数据值缺失,并且缺失值均匀分布在整个数据中,则几乎 80%的记录至少会有一个缺失值,因此通过简单地删除有缺失数据的行,我们会剩下 20%的数据,因此删除数据始终不是一个解决方案。
现在的解决方案是用一些值替换缺失值,这叫做“缺失值插补”。以下是将 wrt 值输入数据类型的几种方法。
2.1) 用某个常数或零替换缺失值:一种处理缺失值的方法是用某个常数或零替换缺失值,但这样做,你创建了一个新的类或变量,你可以确定它是否存在,因此这不是估算缺失值的好方法。
Replace missing value with some random value
因此,如果我们在婚姻状况中输入一些随机 1,那么它是一个单独的类别,没有任何解释,对于连续变量也是一样,它不会给出太多信息。
2.2) 当变量为连续变量时,替换缺失值:有多种方法可以对连续变量的数据进行插补。下面列出了其中的一些。
a) 带均值/中值 :您可以通过相应变量的均值/中值估算您的缺失值。这种方法的优点是,它是一种更快的估算数据的方法,当您有小数据集时工作得相当好,但是建模完全是关于数据的可变性,数据点彼此之间有多远或多近,所以如果您用平均值或模式估算数据,它会失去数据的可变性,可能工作得不好。此外,它不能用于分类变量。
Mean Imputation
同样,可以进行中位数插补。
b) 从分布 中随机选择值:另一种输入连续变量的方法是从该变量的观测分布中随机选择值。这种方法的好处是,与均值/中值替换法相比,中心和扩散的度量更接近原始值。
Replace missing value with the random value from distribution
在这种情况下,如果您看到,根据随机值,第二次记录的房屋贷款金额的合格性为 8000,而客户没有抵押财产,因此该值没有意义,因此使用该方法时需要非常小心,因为这不会在插补时考虑其他变量。
c) 线性回归: 另一种估算连续数据的方法是通过线性回归。在这种情况下,您要进行插补的变量成为您的目标变量,而 rest 成为您的响应变量(我们在此过程中不考虑实际的目标变量,因为它会在以后的建模中产生偏差)。一旦我们创建了这样的数据,逐步过程就被用于开发线性回归,并且在回归参数被估计之后,缺失值的预测就实现了。
现在,如果您必须估计一个记录的两个/多个变量,那么我们将使用以下方法:
第一步:建立回归模型来估算第一个变量,不要将第二个变量作为预测变量。
第二步:构建一个回归模型来估算第二个变量,包括第一步中找到的第二个变量的值。
2.3) 当变量为分类变量时,替换缺失值:有多种方法可以估算连续变量的数据。下面列出了其中的一些。
a) 带模式: 分类变量可使用该变量内的模式(频率最高的值)进行估算。这是为分类变量估算值的最简单方法,但这一过程可能会在数据中产生偏差,因为您将在变量内所有缺失的空间中估算相同的值。
在这个变量中,大部分缺失值变成了已婚值,如果大部分数据变成了两类中的一类,那么这个变量可能会提供更多的信息。
b) 使用决策树或逻辑回归: 为分类变量估算缺失数据的另一种方法是通过决策树。同样,在这种情况下,您要进行插补的变量成为您的目标变量,而 rest 成为您的预测变量(我们在此过程中不考虑实际的目标变量,因为它会在以后的建模中产生偏差)。一旦我们创建了这样的数据,您就可以运行 CART 算法来寻找规则,并在此基础上对分类变量进行插补。
比方说,在我们的案例中,我们想要估算婚姻状况,那么我们将考虑这样的数据,其中婚姻状况成为目标变量,其余的其他变量成为预测变量。此外,丢失的值行将从变量中删除。
New data for Decision tree imputation
因此,决策树将为您提供规则,如年龄> 35 岁,工作=管理,信用违约=否,那么 96%的数据是已婚的,4%是单身的。因此,缺失的值可以通过查看其他变量的信息来替换,准确率为 96%。
c) 用 K 近邻替换缺失值(KNN): KNN 是最常用的估算缺失值的方法之一。它既可以用于连续变量,也可以用于分类变量。KNN 算法对相似性度量起作用,例如欧几里德距离、余弦距离、汉明距离、等。KKN 的基本方法是试图在所有的观察值中找出最近邻来进行距离度量的插补。具有最低距离值的观察值被认为是邻居,然后取 K 个邻居的平均值来估算缺失值,以使其更加精确。k 可以取任何值作为前 3 个邻居、5 个邻居等等。
在下面的例子中,我们有 4 个客户 id 和 3 个变量(这里,为了便于解释,我考虑了一个唯一的连续变量,以便使用欧几里德距离来寻找距离,否则也可以使用分类变量。
Sample data for Decision Tree imputation
因此,已经计算了三个客户中的每一个客户到 C1 的距离,对于距离计算来说,缺失数据的变量将被丢弃,而剩余的变量将被取出,该距离将从每个邻居开始计算。我们可以看到,客户 4 与客户 1 的距离最短,因此客户 4 和客户 1 被视为彼此最近的邻居,因此可以估算值。此外,我们可以取 5 个最近的邻居,而不是取一个最近的邻居,并且可以估算平均值。
现在,有两种策略来识别谁将充当观察的邻居,然后执行最近邻居计算:一种是完全案例策略,另一种是不完全案例策略。
- 完整案例策略:案例可以充当邻居当且仅当它包含所有属性。在我们的案例中,完全案例战略将把 C1 视为邻国。
- 不完整事例策略:当且仅当事例包含要估算的事例具有值的所有属性的值以及要估算的属性的值时,事例才能充当邻居。就我们而言,C1、C2 和 C4 可以成为邻居。
但是必须意识到,当数据太大时,这个过程是非常耗时的。
因此,缺失值可以通过多种技术和方法进行插补,插补方法没有对错之分,只是哪种方法最适合您的数据集,并能给出最准确的结果。没有办法替换丢失空间中的精确数据,但是可以尝试替换多少相近的值。
以上是关于数据预处理的第 1 部分,我已经谈到了数据冗余和缺失值插补,在数据预处理的第 2 部分,我将讨论异常值和数据转换。
数据预处理:概念
原文:https://towardsdatascience.com/data-preprocessing-concepts-fa946d11c825?source=collection_archive---------1-----------------------
Photo by Michael Dziedzic on Unsplash
机器学习
在当今世界,数据被真正视为一种资源。根据世界经济论坛,到 2025 年,全球每天将产生约 463 的数据!但所有这些数据都足够适合机器学习算法使用吗?我们如何决定?在本文中,我们将探讨数据预处理的主题——转换数据,使其成为机器可读的…
本文的目的是介绍数据预处理中使用的概念,这是机器学习过程中的一个主要步骤。让我们从定义它是什么开始。
什么是数据预处理?
当我们谈到数据时,我们通常会想到一些包含大量行和列的大型数据集。虽然这是一种可能的情况,但并不总是如此——数据可能有许多不同的形式:结构化的表格、图像、音频文件、视频等..
机器不理解自由文本、图像或视频数据,它们理解 1 和 0。因此,如果我们放上所有图像的幻灯片,并期望我们的机器学习模型仅仅通过它来训练,这可能还不够好!
在任何机器学习过程中,数据预处理都是对数据进行转换或编码的步骤,以使其达到机器可以轻松解析的状态。换句话说,数据的特征现在可以很容易地被算法解释。
机器学习中的特性
数据集可以被看作是数据对象的集合,数据对象通常也被称为记录、点、向量、模式、事件、案例、样本、观察或实体。
数据对象由许多特征描述,这些特征捕捉对象的基本特征,如物理对象的质量或事件发生的时间等..特性通常被称为变量、特征、字段、属性或维度。
根据维基百科,
特征是被观察现象的一个单独的可测量的属性或特征
例如,颜色、里程和功率可以被认为是汽车的特征。我们在处理数据时会遇到不同类型的特征。
Statistical Data Types | Image by Author
功能可以是:
- 分类:其值取自一组定义的值的特征。例如,一周中的天数:{星期一,星期二,星期三,星期四,星期五,星期六,星期天}是一个类别,因为它的值总是取自这个集合。另一个例子是布尔集合:
- 数值:取值连续或整数值的特征。它们用数字来表示,并拥有数字的大部分性质。例如,你一天走的步数,或者你开车的速度。
Feature Types | Image by Author
现在我们已经讨论了基础知识,让我们从数据预处理的步骤开始。请记住,并不是所有的步骤都适用于每个问题,它高度依赖于我们正在处理的数据,因此对于您的数据集,可能只需要几个步骤。一般来说,它们是:
- 数据质量评估
- 特征聚合
- 特征采样
- 降维
- 特征编码
数据质量评估
因为数据通常来自多个来源,这些来源通常不太可靠,并且格式也不尽相同,所以在处理机器学习问题时,我们一半以上的时间都花在了处理数据质量问题上。期望数据完美是不现实的。可能由于人为错误、测量设备的限制或数据收集过程中的缺陷而出现问题。让我们来看看其中的一些问题和处理方法:
1.缺失值 :
数据集中缺失值是很常见的。这可能发生在数据收集期间,或者可能是由于某些数据验证规则,但无论如何,必须考虑缺失值。
- 消除有缺失数据的行:
简单且有时有效的策略。如果许多对象缺少值,则失败。如果一个特征有大部分缺失值,那么该特征本身也可以被消除。 - 估计缺失值:
如果只有合理百分比的值缺失,那么我们也可以运行简单的插值方法来填充这些值。然而,处理缺失值的最常见方法是用各自特征的平均值、中值或众数来填充它们。
Photo by Firmbee.com on Unsplash
2.不一致的值 :
我们知道数据可以包含不一致的值。最有可能的是,我们已经在某个时候面临这个问题。例如,“地址”字段包含“电话号码”。这可能是由于人为错误,或者可能是从手写表单扫描时信息被误读。
- 因此,总是建议执行数据评估,例如了解要素的数据类型,以及它是否对所有数据对象都相同。
3.重复值 :
数据集可能包含彼此重复的数据对象。这可能发生在同一个人不止一次提交表单的时候。术语“重复数据删除”通常指处理重复数据的过程。
- 在大多数情况下,当运行机器学习算法时,重复项被删除,从而不会给该特定数据对象带来优势或偏差。
特征聚合
执行特征聚合以获取聚合值,从而更好地观察数据。考虑交易数据,假设我们有一个产品的日常交易,记录了该产品一年中在不同商店位置的每日销售。将交易汇总到单个商店范围的每月或每年的交易将有助于我们减少特定商店每天发生的数百或数千笔交易,从而减少数据对象的数量。
- 这导致内存消耗和处理时间的减少
- 聚合为我们提供了数据的高级视图,因为组或聚合的行为比单个数据对象更稳定
Aggregation from Monthly to Yearly | Image by Author
特征采样
抽样是选择我们正在分析的数据集子集的一种非常常见的方法。在大多数情况下,考虑到内存和时间的限制,使用完整的数据集可能会变得过于昂贵。使用采样算法可以帮助我们减少数据集的大小,从而可以使用更好但更昂贵的机器学习算法。
这里的关键原则是,采样应该以这样的方式进行,即生成的样本应该具有与原始数据集大致相同的属性,这意味着样本具有代表性。这包括选择正确的样本量和采样策略。
简单随机抽样表明选择任何特定实体的概率相等。它也有两个主要变化:
- 无替换采样:当每个项目被选中时,它将从构成总数据集的所有对象集中删除。
- 替换采样:项目被选中后,不会从总数据集中删除。这意味着他们可以不止一次被选中。
Data Sampling | Image by IStock
虽然简单随机抽样提供了两种很好的抽样技术,但是当数据集包含的对象类型在比例上变化很大时,它可能无法输出一个有代表性的样本。当样本需要正确表示所有对象类型时,这可能会导致问题,例如,当我们有一个不平衡的数据集时。
不平衡数据集是指一个类的实例数量明显高于另一个类,从而导致不平衡并产生更少的类。
在样本中充分代表稀有类是至关重要的。在这些情况下,我们可以使用另一种抽样技术,称为分层抽样,它从预定义的对象组开始。分层抽样也有不同的版本,最简单的版本建议从所有组中抽取相同数量的对象,即使这些组的大小不同。欲了解更多关于采样的信息,请查看由团队 AV 撰写的这篇文章。
[## 8 种抽样技术的数据科学家指南
概述抽样是一个流行的统计概念-了解它是如何工作的在这篇文章中,我们还将讨论八…
www.analyticsvidhya.com](https://www.analyticsvidhya.com/blog/2019/09/data-scientists-guide-8-types-of-sampling-techniques/)
降维
大多数真实世界的数据集都有大量的要素。例如,考虑一个图像处理问题,我们可能要处理数千个特征,也称为维度。顾名思义,降维旨在减少特征的数量——但不仅仅是通过从特征集中选择一个特征样本,这是另一回事——特征子集选择或简单的特征选择。
从概念上讲,维度是指数据集所在的几何平面的数量,它可能很高,以至于无法用笔和纸来可视化。这种平面的数量越多,数据集的复杂性就越大。
维度的诅咒 这是指随着数据维度的增加,数据分析任务通常会变得更加困难。随着维度的增加,数据所占据的平面数量增加,从而给数据增加了越来越多的稀疏性,这很难建模和可视化。
Representation of components in different spaces | Image by NYC DS Academy
2D 说,降维本质上是将数据集映射到一个更低维度的空间,这个空间很可能是一些现在可以可视化的平面。用于此目的的技术的基本目标是通过创建由旧特征组合而成的新特征来降低数据集的维度。换句话说,高维特征空间被映射到低维特征空间。主成分分析和奇异值分解是两种被广泛接受的技术。
降维的几个主要好处是:
- 如果数据集的维度较低,数据分析算法会工作得更好。这主要是因为现在已经消除了不相关的特征和噪声。
- 建立在低维数据之上的模型更容易理解和解释。
- 数据现在也变得更容易可视化了!为了可视化的目的,特征总是可以成对或成组出现,如果特征集不是很大,这更有意义。
特征编码
如前所述,数据预处理的整个目的是编码数据,以便使其达到机器现在可以理解的状态。
特征编码基本上是对数据执行转换,以便它可以容易地被接受为机器学习算法的输入,同时仍然保留其原始含义。
执行特征编码时,需要遵循一些通用规范或规则。对于连续变量:
- Nominal :可以进行任何一对一的映射,并保留其含义。例如,像在一键编码中的值的排列。
- 序数:值的保序变化。借助于一个新的函数,小、中、大的概念可以得到同样好的表示,即<new _ value = f(old _ value)>——例如,{0,1,2}或者可能是{1,2,3}。
One-hot encoding of the data | Image by Author
对于数值变量:
- 区间:简单的数学变换,如使用等式<new _ value = a * old _ value+b>,a 和 b 为常数。例如,单位的零值大小不同的华氏温标和摄氏温标可以用这种方式编码。
- 比率:这些变量可以缩放到任何特定的度量,当然,同时仍然保持其值的意义和比率。在这种情况下,简单的数学转换也可以工作,比如转换< new_value = a*old_value >。因为,长度可以用米或英尺来计量,货币可以用不同的货币来兑换。
训练/验证/测试分割
完成特征编码后,我们的数据集就可以用于令人兴奋的机器学习算法了!
但是在我们开始决定应该使用哪种算法之前,总是建议将数据集分成 2 部分,有时是 3 部分。机器学习算法,或任何这方面的算法,必须首先根据可用的数据分布进行训练,然后进行验证和测试,然后才能部署来处理现实世界的数据。
训练数据:这是你的机器学习算法实际训练建立模型的部分。模型试图学习数据集及其各种特征和复杂性,这也提出了过拟合 v/s 欠拟合的问题。
验证数据:这是数据集的一部分,用于验证我们的各种模型拟合。简而言之,我们使用验证数据来选择和改进我们的模型超参数。该模型不学习验证集,而是使用它来达到超参数的更好状态。
测试数据:这部分数据集用来测试我们的模型假设。在模型和超参数确定之前,它是不可触及的,也是不可见的,只有在模型应用于测试数据之后,它才能获得在真实数据上部署时性能的准确度量。
Data Split into parts | Image by Author
拆分比率:数据按照拆分比率进行拆分,拆分比率高度依赖于我们正在构建的模型类型和数据集本身。如果我们的数据集和模型需要大量的训练,那么我们会使用更大的数据块来进行训练(通常是这样),例如,对文本数据、图像数据或视频数据的训练通常涉及数千个特征!
如果模型有很多可以调整的超参数,那么为验证集保留更高百分比的数据是明智的。超参数数量较少的模型易于调整和更新,因此我们可以保持一个较小的验证集。
像机器学习中的许多其他事情一样,分割比率高度依赖于我们试图解决的问题,并且必须在考虑关于模型和手头数据集的所有各种细节之后决定。
在本文中,我想对数据预处理的概念做一个扎实的介绍,这是任何机器学习过程中的一个关键步骤。我希望这对你有用。
如果有任何反馈请在评论里告诉我!
如果你想看到更多这样的文章,请前往数据科学门户网站
[## 数据科学门户
大家好,欢迎来到数据科学门户。这个空间致力于学习和理解所有令人兴奋的…
thedatascienceportal.com](https://thedatascienceportal.com/)
感谢阅读!
数据挖掘和机器学习中的数据预处理
原文:https://towardsdatascience.com/data-preprocessing-in-data-mining-machine-learning-79a9662e2eb?source=collection_archive---------3-----------------------
有了详细的概念…
Video version of the story, if you are into that sort of thing | Part 1
Video version of the story, if you are into that sort of thing | Part 2
在 我之前的一个帖子 中,我讲过数据挖掘中的 接近度的度量&机器学习 。这个就继续那个,如果还没看的话,这里看一下以便对我在文章中要讲的话题和概念有一个恰当的把握。
数据预处理是指使数据更适合数据挖掘的步骤。用于数据预处理的步骤通常分为两类:
- 为分析选择数据对象和属性。
- 创建/更改属性。
请容忍我的概念部分,我知道这可能有点无聊,但如果你有强大的基础,那么没有什么可以阻止你成为一名伟大的数据科学家或机器学习工程师。
在本次讨论中,我们将讨论以下数据预处理方法:
- 聚合
- 抽样
- 降维
- 特征子集选择
- 特征创建
- 离散化和二值化
- 变量变换
什么是聚合?
→简单来说,它是指将两个或多个属性(或对象)组合成一个属性(或对象)。
聚合 的用途如下:
→ 数据缩减:减少对象或属性的数量。这导致更小的数据集,因此需要更少的内存和处理时间,因此,聚合可以允许使用更昂贵的数据挖掘算法。
→ 规模的变化:通过提供数据的高级视图而不是低级视图,聚合可以充当范围或规模的变化。举个例子,
- 聚集成地区、州、国家等的城市。
- 天数累计成周、月和年。
→ 更“稳定”的数据:聚合数据往往可变性更小。
什么是采样?
→抽样是选择要分析的数据对象子集的常用方法。
→取样的关键是使用具有代表性的样品。如果样本具有与原始数据集大致相同的(感兴趣的)属性,则该样本具有代表性。如果数据对象的均值(平均值)是感兴趣的属性,那么如果样本的均值接近原始数据的均值,则样本是有代表性的。
取样类型
- ****简单随机抽样:
→选择任何特定项目的概率相等
→ 无替换抽样:当每一项被选中时,就从总体中删除。
→ 替换抽样:当对象被选作样本时,它们不会从总体中删除。在替换取样中,同一物体可以被多次拾取。
- ****分层抽样:把数据分成几个分区,然后从每个分区抽取随机样本。
- 渐进采样:**恰当的样本量可能难以确定,因此有时会使用自适应或渐进采样方案。这些方法从小样本开始,然后增加样本量,直到获得足够大的样本。
什么是降维?
→降维一词通常是指那些通过创建旧属性组合而成的新属性来降低数据集维度的技术。
- 目的:
→避免维数灾难。要了解这方面的更多信息,请访问我之前的一篇详细解释它的文章。
→减少数据挖掘算法所需的时间和内存。
→使数据更容易可视化。
→可能有助于消除不相关的特征或减少噪音。
- 技法:
→ 主成分分析
→ 奇异值分解
这里提到的技术非常广泛,可以在本文中讨论。你可以在网上了解更多。我在这两个网站上都添加了 YouTube 链接,如果你想看这些视频并学习的话。
什么是特征子集选择?
→这是通过仅使用可用特征的子集来降低数据维数的另一种方法。虽然这种方法似乎会丢失信息,但如果存在冗余和不相关的特征,情况就不是这样了。
- 冗余功能:
→复制一个或多个其他属性中包含的大部分或全部信息。示例:产品的购买价格和支付的销售税金额。
- 无关特性:
→不包含对手头的数据挖掘任务有用的信息。例子:学生的 ID 通常与预测学生 GPA 的任务无关。
虽然通过使用常识或领域知识可以立即消除一些不相关和冗余的属性,但是选择最佳的特征子集通常需要系统的方法。选择功能的理想方法是尝试将所有可能的功能子集作为感兴趣的数据挖掘算法的输入,然后选择产生最佳结果的子集。
有三种标准的特征选择方法: 嵌入、过滤和包装。
嵌入式方法
特征选择作为数据挖掘算法的一部分自然发生。具体来说,在数据挖掘算法的操作过程中,算法本身决定使用哪些属性,忽略哪些属性。
过滤方法
使用一些独立于数据挖掘任务的方法,在运行数据挖掘算法之前选择特征。例如,我们可能选择那些成对相关性尽可能低的属性集。
包装方法
这些方法使用目标数据挖掘算法作为黑盒,以类似于上述理想算法的方式找到属性的最佳子集,但是通常不枚举所有可能的子集。
特征子集选择过程的流程图
Introduction to Data Mining — Pang-Ning Tan, Michael Steinbach, Vipin Kumar
什么是特征创建?
→它包括创建新属性,这些属性可以比原始属性更有效地捕获数据集中的重要信息。
三种通用方法:
- 特征提取
→从原始数据中创建一组新的特征称为特征提取。考虑一组照片,其中每张照片根据是否包含人脸来分类。原始数据是一组像素,因此不适合许多类型的分类算法。然而,如果数据被处理以提供更高级的特征,例如与人脸的存在高度相关的某些类型的边缘和区域的存在或不存在,那么一组更广泛的分类技术可以被应用于这个问题。
→这种方法具有高度的领域特异性。
- 特征构造
→有时原始数据集中的特征具有必要的信息,但其形式不适合数据挖掘算法。在这种情况下,由原始特征构建的一个或多个新特征可能比原始特征更有用。
→示例:用质量除以体积得到密度
- 将数据映射到新空间
→完全不同的数据视图可以揭示重要而有趣的特征。例如,考虑通常包含周期性模式的时间序列数据。如果只有一个周期模式并且没有太多噪声,那么该模式很容易被检测到。另一方面,如果存在许多周期性模式,并且存在大量噪声,则这些模式很难被检测到。然而,这种模式通常可以通过对时间序列应用傅立叶变换来检测,以便改变到频率信息明确的表示。
什么是离散化和二值化?
[数]离散化
→离散化是将连续属性转化为有序属性的过程。
→潜在的无限数量的值被映射到少数类别中。
→分类中常用离散化。
→如果自变量和因变量都只有几个值,许多分类算法效果最好。
二值化
→二进制化将连续或分类属性映射成一个或多个二进制变量
→通常用于关联分析
→通常将连续属性转换为分类属性,然后将分类属性转换为一组二元属性
→关联分析需要不对称的二元属性
→示例:眼睛颜色和高度测量为{低、中、高}
一个分类属性到三个二元属性的转换
Introduction to Data Mining — Pang-Ning Tan, Michael Steinbach, Vipin Kumar
一个分类属性到五个非对称二进制属性的转换
Introduction to Data Mining — Pang-Ning Tan, Michael Steinbach, Vipin Kumar
什么是变量变换?
→属性转换是一种将给定属性的整组值映射到一组新的替换值的功能,这样每个旧值都可以用一个新值来标识
****→简单函数:幂(x,k),对数(x),幂(e,x),|x|
****→标准化:指的是根据出现频率、平均值、方差、范围调整属性间差异的各种技术 →标准化:在统计学中,指的是减去平均值并除以标准差。
我们对数据预处理的讨论到此结束。
这个帖子的后续是这里。
** [## Python 中的数据预处理
对于机器学习与工作代码的例子…
towardsdatascience.com](/data-preprocessing-in-python-b52b652e37d5)**
我将免费赠送一本关于一致性的电子书。在这里获得你的免费电子书。
如果你喜欢阅读这样的故事,那么你应该 在你的收件箱 中收到我的帖子,如果你想支持我成为一名作家,可以考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你注册使用我的链接,我会赚一小笔佣金,不需要你额外付费。
** [## 加入我的推荐链接-塔伦古普塔
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
tarun-gupta.medium.com](https://tarun-gupta.medium.com/membership)
感谢阅读。如果你喜欢这篇文章,可以去看看我关于数据挖掘和机器学习的其他文章。
[## Python 中的数据预处理
对于机器学习与工作代码的例子…
towardsdatascience.com](/data-preprocessing-in-python-b52b652e37d5) [## 数据挖掘和机器学习中的相似性度量
在分析过程中执行数据转换
towardsdatascience.com](/measures-of-proximity-in-data-mining-machine-learning-e9baaed1aafb) [## 评估数据质量
对于数据挖掘和机器学习算法…
towardsdatascience.com](/assessing-the-quality-of-data-e5e996a1681b) [## 数据科学、数据挖掘和机器学习中的数据集类型
以及它们的一般特征…
towardsdatascience.com](/types-of-data-sets-in-data-science-data-mining-machine-learning-eb47c80af7a) [## 数据挖掘之旅
数据导论
towardsdatascience.com](/journey-into-data-mining-3b5ccfa5343)**
Python 中的数据预处理
原文:https://towardsdatascience.com/data-preprocessing-in-python-b52b652e37d5?source=collection_archive---------1-----------------------
对于机器学习与工作代码的例子…
Video version of the story, if you are into that sort of thing
在 我之前的一个帖子 中,我概念性的讲过数据挖掘 中的数据预处理&机器学习 。这个就继续那个,如果还没看的话,这里看一下以便对我在文章中要讲的话题和概念有一个恰当的把握。
D 数据预处理是指使数据更适合数据挖掘的步骤。用于数据预处理的步骤通常分为两类:
- 为分析选择数据对象和属性。
- 创建/更改属性。
在这篇文章中,我将介绍如何使用 Python 实现数据预处理方法。我将逐一介绍以下内容:
- 导入库
- 导入数据集
- 缺失数据的处理
- 分类数据的处理
- 将数据集分为训练数据集和测试数据集
- 特征缩放
F 对于这个数据预处理脚本,我将使用 Anaconda Navigator 特别是 Spyder 来编写下面的代码。如果第一次打开 Anaconda Navigator 时还没有安装 Spyder,那么可以使用用户界面轻松安装它。
如果你以前没有用 Python 编程,我建议你学习一些 Python 的基础知识,然后从这里开始。但是,如果您知道如何阅读 Python 代码,那么您就可以开始了。继续我们的脚本,我们将从第一步开始。
导入库
**# librariesimport numpy as np # used for handling numbers
import pandas as pd # used for handling the datasetfrom sklearn.impute import SimpleImputer # used for handling missing datafrom sklearn.preprocessing import LabelEncoder, OneHotEncoder # used for encoding categorical datafrom sklearn.model_selection import train_test_split # used for splitting training and testing datafrom sklearn.preprocessing import StandardScaler # used for feature scaling**
如果在 Spyder 中选择并运行上述代码,您应该会在 IPython 控制台中看到类似的输出。
如果您看到任何导入错误,尝试使用如下的pip
命令显式安装这些包。
**pip install <package-name>**
导入数据集
首先,让我们看一下我们将在这个特定示例中使用的数据集。你可以在这里找到数据集。
为了将这个数据集导入到我们的脚本中,我们显然要使用 pandas,如下所示。
**dataset = pd.read_csv('Data.csv') # to import the dataset into a
variable# Splitting the attributes into independent and dependent attributes
X = dataset.iloc[:, :-1].values # attributes to determine dependent variable / Class
Y = dataset.iloc[:, -1].values # dependent variable / Class**
当您运行这段代码时,如果您确保脚本和 Data.csv 在同一个文件夹中,您应该不会看到任何错误。成功执行后,您可以在 Spyder UI 中移动到变量资源管理器,您将看到以下三个变量。
当您双击这些变量时,您应该会看到类似的内容。
****
如果您在查看这些数据变量时遇到任何错误,请尝试将 Spyder 升级到 Spyder 版本 4。
缺失数据的处理
我将在下面的帖子中详细讲述丢失数据的处理。
** [## 评估数据质量
对于数据挖掘和机器学习算法…
towardsdatascience.com](/assessing-the-quality-of-data-e5e996a1681b)
第一个想法是删除观测数据中缺失数据的线。但这可能非常危险,因为想象一下这个数据集包含了至关重要的信息。删除一个观察是非常危险的。所以我们需要想出一个更好的办法来处理这个问题。另一个处理缺失数据最常见的方法是取列的平均值。
如果您注意到在我们的数据集中,我们有两个值丢失,一个是第 7 行数据中的年龄列,另一个是第 5 行数据中的收入列。应该在数据分析期间处理缺失值。因此,我们做如下。
# handling the missing data and replace missing values with nan from numpy and replace with mean of all the other values
imputer = SimpleImputer(missing_values=np.nan, strategy='mean') imputer = imputer.fit(X[:, 1:])
X[:, 1:] = imputer.transform(X[:, 1:])
执行完这段代码后,独立变量 X 将转换成以下形式。
这里您可以看到,丢失的值已被相应列的平均值所替换。**
分类数据的处理
在这个数据集中,我们可以看到我们有两个分类变量。我们有地区变量和在线购物者变量。这两个变量是分类变量,因为它们包含类别。该区域包含三个类别。它是 印度、美国&巴西 并且在线购物者变量包含两个类别。 是 和 否 这就是为什么它们被称为分类变量。
你可以猜测,由于机器学习模型是基于数学方程的,你可以直观地理解,如果我们在方程中的分类变量中保留文本,会导致一些问题,因为我们只希望方程中有数字。这就是为什么我们需要对分类变量进行编码。那就是把我们这里的文本编码成数字。为此,我们使用下面的代码片段。
**# encode categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
onehotencoder = OneHotEncoder(categorical_features=[0])
X = onehotencoder.fit_transform(X).toarray()labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)**
执行完这段代码后,自变量 X 和因变量 Y 将转换成以下形式。
在这里,您可以看到区域变量现在由一个 3 位二进制变量组成。最左边的位代表 印度, 第二位代表 巴西 ,最后一位代表 美国。 如果该位为 1 ,则表示该国家的数据,否则表示该国家的数据。对于网购者变量, 1 代表是,而 0 代表号****
将数据集分为训练数据集和测试数据集
任何机器学习算法都需要进行准确性测试。为此,我们将数据集分为两部分:训练集和测试集。顾名思义,我们使用训练集使算法学习数据中存在的行为,并通过在测试集上测试来检查算法的正确性。在 Python 中,我们是这样做的:
**# splitting the dataset into training set and test set
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)**
这里,我们假设训练集是原始数据集的 80%,测试集是原始数据集的 20%。这通常是它们被分割的比例。但是,您有时会遇到 70-30%或 75-25%的比例分割。但是,你不想对半分。这会导致 模型过拟合。 这个话题太庞大,无法在同一个帖子里涵盖。我将在以后的文章中介绍它。目前,我们将按 80-20%的比例进行分配。
拆分后,我们的训练集和测试集是这样的。
****
特征缩放
我在下面的帖中详细讲变量变换(特征缩放)。
** [## 数据挖掘和机器学习中的数据预处理
有了详细的概念…
towardsdatascience.com](/data-preprocessing-in-data-mining-machine-learning-79a9662e2eb)
如你所见,我们有年龄和收入这两个包含数字的列。你会注意到变量不在同一个范围内,因为年龄从 32 岁到 55 岁,薪水从 57.6 K 到 99.6 K。
因为工资变量中的年龄变量没有相同的比例。这将导致您的机械模型出现一些问题。这是为什么?这是因为你的机器模型很多机器模型都是基于所谓的欧几里德距离。
我们使用特征缩放将不同的尺度转换为标准尺度,以使机器学习算法更容易。我们在 Python 中这样做,如下所示:
# feature scaling
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
这段代码执行后,我们的训练自变量 X 和我们的测试自变量 X 和T43 看起来是这样的。
这些数据现在可以输入到机器学习算法中。
这篇关于 Python 中数据预处理的文章到此结束。**
附注:首先,你应该收到我的邮件。 做到这里 !
其次,如果你自己喜欢体验媒介,可以考虑通过报名成为会员 来支持我和其他成千上万的作家 。它每个月只需要 5 美元,它极大地支持了我们,作家,而且你也有机会通过你的写作赚钱。自从我开始工作以来, 我每个月都挣 50 多美元。通过这个链接 报名 ,你就直接用你的一部分费用支持我,不会多花你多少钱。如果你这样做了,万分感谢!
感谢阅读。如果你喜欢这个,你可以在下面的故事中找到我的其他数据科学文章:
**[## 你好,美女!
不要害羞,读吧!
tarun-gupta.medium.com](https://tarun-gupta.medium.com/hello-beautiful-a8be3d07f556)**
组织内部的数据革命
原文:https://towardsdatascience.com/data-revolution-inside-organizations-bf54ed427ef5?source=collection_archive---------25-----------------------
如何为将永远改变商业格局的变化做好准备
介绍
全球范围内对海量数据的访问改变了商业格局。竞争营销依赖于知道如何管理、处理和分析这些数据。本文描述了组织从收集数据到最大限度地利用数据需要采取的途径。
当今的组织正在经历一个围绕其技术系统的具有挑战性的转型过程。可能存储和处理企业数据的静态软件平台在当前的网络环境中不再可持续。企业需要尖端技术来实时收集大数据,分析这些数据,然后获取所需的信息,以在当今的市场中保持竞争力。
“数据革命是一场运动,聚焦于产生,捕捉,开发 数据到改进的方式就是用到促进 改变。数据 革命 需要一个人类 元素帮助塑造未来麦克米伦词典
机器学习在数据革命中发挥了重要作用。高端开发人员设计技术系统,通过重复训练自己执行越来越复杂的分析,并产生越来越有意义的见解。
迪克夫金字塔
DIKW Pyramid
也被称为知识金字塔、信息层级和其他名称,DIKW(数据、信息、知识、智慧)金字塔将数据转化为智慧的步骤可视化。更全面的指南可以在下面的文章中找到。
数据转换
敏捷预测平台通过以下主要方式转换数据:
- 存储、管理和结构化数据访问— 该功能是 DIKW 金字塔的第一步数据。在这个阶段,数据转换不提供信息,它们只是改变信息的形式以便于处理。
- 了解数据 —第二步信息引出第三步知识。
- 做出预测——第三步的知识,当被人类解读时,通向第四步的智慧。
数据—存储、管理和组织对数据的访问
行业领先的软件平台从多个来源获取多种形式的数据,将其处理为可用的形式,并存储在安全的云仓库中。人的因素伴随着您的业务需要做出的关于整体数据管理的决策。来自敏捷工作的专业开发团队的建议至关重要。
养什么?
当你设计和维护一个系统时,决定收集和保留什么数据可能是你的公司将做出的最有影响力的决策选择。
你可能会根据当前的信息和你的预期增长提前做出决定,但你可能是错的。即使是最好的预测系统也无法准确描绘出你公司的未来。以这种方式设计会创建一个僵化的软件平台,它装载了比您需要的更多的数据,并且不能收集和处理您将来可能需要的数据类型。
相反,您需要一个从一开始就构建的平台,以便随着您的业务扩展其数据管理功能。你需要一个团队,让你作为合作伙伴参与开发过程。然后,您不断变化的需求和新想法可以融入您的平台的每一步。
在哪里?
考虑潜在可用的大量且不断增加的数据、高度敏感的业务和客户数据,以及日益复杂的网络犯罪。对于安全、可靠的大数据存储和管理,只有一个选择,那就是云上的。
您可能认为您需要雇用一名数据基础设施工程师来定制您的数据管理系统,但是您没有。像亚马逊 AWS、谷歌 BigData 和微软 MySQL 这样的顶级行业云数据管理系统旨在满足大多数企业的需求。务实一点,在简单和定制之间权衡最佳取舍。
我的建议是选择简单。
怎么会?
要决定如何管理数据以及谁可以访问和控制数据,请考虑以下策略:
- 标准化。使用预先确定的方法和工具,以设定的格式收集和管理所有来源的数据。这种管理设计提供了经济、效率、速度和一致性。
- 定制。根据数据的来源和类型,使用不同的方法、工具和格式收集和管理数据。这种设计支持需要复杂性和多样性的数据操作。
- 中央集权。所有数据都在一个地方存储和管理,并使用相同的工具进行处理。集中化非常适合大型企业,因为它是处理大量数据的快速、经济且一致的解决方案。
- 放权。数据在不同的地方以不同的方式收集和处理。分散化适用于拥有本地分支机构的企业,以及需要快速访问和响应本地数据源的其他小型或个性化企业。
- 上下文依赖。根据情况或其他因素或影响对数据进行解释和处理。定制的和分散的数据管理系统通常包含上下文依赖。
谁啊。
负责标准化数据定义和决定如何管理数据的人需要做出一些重大决策。?这些决策者是你的领导团队、技术团队,还是两者都是?为了选择最佳策略,您可以创建一个数据委员会,由了解您业务的不同方面以及哪种技术最能满足您的需求的人员组成。这些决策对您企业的技术健康至关重要。
如果您的平台无法运行,错误的设计选择会导致技术债务和收入损失。对于是创建一个集中的还是分散的系统,没有正确或错误的答案。不一定非此即彼。为了满足各种业务部门和功能的需求,大型企业通常会使用不同的数据操作策略组合来设计单独的系统。
信息和知识—了解您的数据
有了合适的平台之后,你就可以开始理解你的数据以及它的意义了。这一步是 DIKW 金字塔的第三层——知识。从数据中获取知识的一些常见方法是可视化和机器学习技术,如聚类和预测系统。
形象化
Big Data Visualization
随着大量和各种类型的新数据不断出现,如果组织想要保持可持续性和竞争力,就必须具备相应的可视化数据的能力。数据可视化领域是一个涵盖广泛的学科,包括复杂的分析和显示结构。仪表盘可以带来很大的不同。
为了从数据中获取知识,需要对数据进行简单的解释和探索。带有预建查询和可视化的仪表板可以减少理解和查看数据时的摩擦。您在构建有洞察力的仪表板上花费的精力和资源是值得的。您可以使用众多用户友好的商业智能工具之一来帮助您创建自己的可共享可视化和分析,从而使这一过程变得更加简单。一些例子有查蒂奥、格拉夫纳和克利普弗利奥。
集群化
集群化的机器学习技术是分析数据和检测模式的极其强大的工具。聚类算法创建相似对象的集合。这些算法是无监督学习的例子,它对给定输入的概率密度进行建模。因为无监督学习算法没有偏见,所以它们是检测数据集中模式的最佳工具之一。
关于监督和非监督学习的更多信息可以在我下面的文章中找到。
这些示例是您可能从集群化中获得的知识类型:
- 我们的客户来自东海岸还是西海岸?
- 他们买的是更时尚的衣服还是休闲的?
有了这些知识,我们对客户有了更好的了解。但是,只有当我们能够将知识应用于商业决策时,它才有用。在某些时候,我们需要可操作的见解。
那么下一步是什么?你如何从这里继续前进?机器学习预测是一种将我们的知识转化为更深入的见解的方法,我们可以将这些见解转化为可操作的计划。
做预测
Predictions inform Decisions
试图给一篇文章定价是预测系统的一个经典问题。你真的在试图预测用户的行为:
- 顾客会买你的产品吗?
- 他们愿意在这上面花多少钱?
- 结合潜在销售额的价格会给你在生产和营销成本上的投资带来回报吗?
根据从数据中获得的知识,机器学习预测可以为您的定价问题提供可行的答案。一个例子是预测的算法
预测技术可以应用于影响组织的许多领域。在监督学习中,我们为我们的算法提供了一组正确的值来运行,从而从中进行训练。这些基于监督学习的预测示例可以在重要的业务领域产生可操作的知识:
- 股票营销算法。股票市场算法的目标是让系统从对过去市场数据的分析中学习如何预测未来趋势。
- 年龄段和购买产品的概率。在这种情况下,将针对不同年龄段的购买模式分析数据。根据过去的数据,系统预测未来的购买概率。
- 诈骗。人类审查过去的交易是否为欺诈。预测系统将具有相似特征的交易标记为潜在欺诈。
您可以通过对过去的数据运行监督学习算法来测试它的准确性。然后,您可以使用测试结果产生的新数据来提高其算法的未来性能。
非平稳性
在我们不断变化的世界中,过去的数据通常不代表未来。今天的公司存在于一个动态的环境中。记住这一点将有助于任何组织根据他们所依赖的过去的数据做出更好的决策。
当我们试图进行基于数据的预测时,我们首先需要识别非静态和静态数据集。这些示例显示了对数据的一些静态和非静态影响:
静止不动。季节性是购买活动中的一个重要因素。过去顾客在黑色星期五和圣诞节等固定假日的行为可以预测未来的行为。
非平稳。经济起伏是非平稳变化,通常无法准确预测。
可解释性
组织需要能够解释算法产生的数据。一个平台可能有很多关于过去行为的信息。但是要创建一个预测,我们需要了解哪些数据集与我们提出的问题相关。哪些因素重要?每个因素有多重要?
当您研究您的业务指标时,您可能会看到基于过去数据的相关性。但是相关性并不一定表明因果关系。举个例子,你可能会发现你的大多数买家都是女性。你对这一发现的解释可能是你的网站对女性比男性更有吸引力。但这种假设可能是一种危险的营销决策方式。每当你以肤浅或有偏见的方式解读数据时,它可能会显示一种相关性,而这实际上并不是问题的根源。
我们的大脑很容易混淆相关性和因果关系。这个网站有一些“虚假相关性”的例子,我也写了一篇关于“因果关系与相关性”的文章。这种类型的认知偏差是一个巨大的问题,影响到从微小的决策到医学研究的一切。事实上,几十年来,这种错误的想法一直支配着健康建议。
智慧——从预测到决策
在我们获得机器学习预测之后,我们移动到 DIKW 金字塔的顶端。关于如何应用这些预测的决定需要智慧,并且必须由人类做出。一个公司的价值观、使命和商业敏锐度都必须基于人类对预测的分析来指导行动和投资。正确或错误的决策不仅会影响企业的成功机会,还会影响外部因素,如客户、社会问题和环境。
参考
斯坦福大学(2019)。“通过预测建模将数据转化为洞察力”课程。
丹尼·华莱士(2007 年)。"知识管理:历史和跨学科主题."图书馆无限量。第 1-14 页。ISBN 978–1–59158–502–2。
安东尼·菲格罗亚(2019)。“相关性不是因果关系”。https://towards data science . com/correlation-is-not-causality-AE 05d 03 C1 f 53
安东尼·菲格罗亚(2019)。“DIKW 金字塔”。https://towards data science . com/root strap-dikw-model-32 cef 9 AE 6 DFB
安东尼·菲格罗亚(2019)。《数据去神秘化—机器学习》https://towardsdatascience . com/Data-de 神秘化—机器学习-3b40ec435ff2
数据样本和错误可视化技术
原文:https://towardsdatascience.com/data-samples-and-error-visualization-techniques-832c4a7fbcb2?source=collection_archive---------17-----------------------
为什么在构建数据可视化时,我们应该选择有代表性的样本,并考虑到误差。不确定条形图和不确定排名列表的简要概述。
填充我们的可视化的数据样本的类型会给我们的结果增加不确定性。一些常见的数据显示方式,如条形图和饼图,比其他方式更能让人们理解这种不确定性。本文探讨了如何理解我们的数据样本,并创建最合适的图形来可视化它们所代表的内容。
一般来说,数据科学的目标是理解数据并生成预测模型,以帮助我们做出更好的决策。有关数据可视化的更全面概述,请参见“数据可视化和真实艺术”
了解您的数据集
在数据分析中,我们经常处理小样本,而不是全部数据。完整的数据集可能会因为计算的简化而减少,或者因为只有一个更复杂的数据世界的小子集可用。在这种情况下,数据科学家通常会创建忽略样本真实性质的可视化效果。有时他们甚至没有意识到他们的数据集只是一个样本。
当我们基于小数据集创建分析时,需要考虑不确定性。但在许多情况下,这种情况不会发生,因为包含不确定性和统计复杂性会导致更复杂的过程,从而降低整体分析的速度。但是每当我们优先考虑快速迭代和探索而不是统计准确性时,我们需要意识到我们正在这样做。
视觉数据分析和不确定性:一个古老的二分法
没有多少标准的可视化技术以直观的方式拥抱不确定性,并使不确定性范围易于理解。图 1 中的例子用概率可视化演示了这个问题。
Figure 1
不确定性问题
比较条形图中两个条形的高度是微不足道的。但是很难计算几乎重叠的不确定区域的概率。即使是受过统计学训练的专家在解释置信区间时也会出错。
不确定性必须用不同的心态来计算。我们需要问的不是 A 是否大于 B,而是 A 大于 B 的概率是多少。这种模糊逻辑包含了现实生活中的不确定性。数据可视化应该符合这种范式。
根据“不确定性下的判断:启发式和偏见”,人们在分析不确定数据时往往会做出错误的决定(Tversky 和 Kahneman 1974)。我们的大脑没有以直观的方式处理概率数据的能力。为了解开这个问题,我们首先需要清楚地想象两件基本的事情:
- 置信区间
- 样本大小信息
如何可视化不确定性
我们都熟悉的经典可视化并不是创造不确定性的深刻展示的好方法。好的可视化不仅仅是从表格或文件中复制数据。它以可视化格式显示相关数据,揭示趋势或关系。当洞察力被成功可视化时,观众会“啊哈!”瞬间。
即使是专家也很难在阅读置信水平以外的任务中使用置信区间。尽管这很复杂,但对不确定性的正确描述有助于我们理解决策过程的风险和价值。
实际例子
当我们处理样本时,我们只能估计数据的总体情况。例如,基于样本的数据集的预期平均值、总和或计数。我们可以推断出这个期望值的分布。根据“带控制的交互式数据分析”,我们可以使用中心极限定理根据这些估计量来估计误差界限(Hellerstein et al. 1999)。
图 2 中的图表基于一个大型销售数据集的样本。置信区间为 95%。所以我们预计 1995 年的平均销售额在 49,000 英镑到 51,300 英镑之间。
Figure 2
这些任务通常在数据分析的探索阶段完成:
- 求最小值和最大值。
- 对值进行排序。
- 比较值。
在常规图表中,如果没有不确定性,这些任务就像比较值或检查 A 条是否大于 b 条一样简单。然而,当我们接受不确定性和概率分布时,就没那么简单了。在这些情况下,我们需要根据给定的分布进行统计推断。同样,处理这种模糊逻辑需要改变思维方式。也就是我们不能问某个事实是不是真的。我们只能估计一个事实是真实的可能性。
接下来,我们将探索两种可视化技术:不确定性条形图和排序列表。
不确定性条形图
在“面向样本的任务驱动可视化:让用户做出更好、更自信的决定”中,作者讨论了基于不确定条形图的五个任务(Ferreira 等人,2014 年):
- 比较一对杠。
- 求最大值或最小值。
- 将值与常数进行比较。
- 将值与范围进行比较。
图 3 比较了白色条和其他条:深蓝色表示肯定低于,深红色表示肯定高于。
Figure 3
图 4 显示了最大值和最小值。这两个饼图显示了任何给定棒线可能是最大值或最小值的概率。
Figure 4
图 5 比较了一个条形和一个固定值。在这种情况下,很容易计算图表高于或低于固定值的概率。
Figure 5
在图 6 中,深色的可能在范围内,浅色的在范围外。
Figure 6
不确定排名列表
常规排序列表代表排序后的元素。它们通常只显示一大组变化中顶部的几个小节。例如,我们可能希望可视化服务器日志中最常发生的前五个事件。为了获得这些信息,我们需要对所有的值进行排序并截断列表。当可能值的数量太大而无法显示时,这种方法非常有效。
它们在不稳定的环境中非常有用,在这种环境中,新值会随着时间的推移变得更加相关。这种列表类型趋于稳定,但支持快速变化。
不确定排名榜有偏序。我们确信有些项目会比其他项目更大。但是我们可能不确定其他的成对关系。在他们的可视化文章(Ferreira 等人,2014 年)中,作者探讨了基于排序列表的两个任务:
- 确定哪些项目可能会落在给定的等级上。
- 确定哪些项目可能落在给定的一对排名之间。
Ferreira 等人(2014 年)还设计了两步算法来计算不确定性:
1-作为一种启发式方法,中心极限定理被用来根据我们到目前为止看到的项目的计数、标准偏差和移动平均值来估计置信区间。使用这种技术,作者为图表上的每个聚集创建一个分布。
2-蒙特卡罗方法 用于计算概率,依赖于计算出的分布。
每个任务由一个谓词表示。也就是说,D1 很可能比 D2 更强大。Ferreira 等人(2014 年)从每个分布中反复抽取样本,并根据样本评估谓词。他们重复这个过程大约 10,000 次。事件的概率是谓词为真的迭代的分数。这种计算方法只计算近似概率。但是如果我们运行它很多次,它会产生精确的近似值。
图 7 是用分级列表而不是条形图显示的相同数据的表示。
Figure 7
我们可以通过使用这种可视化来完成这两项任务:
1-确定在给定等级下哪个项目可能会下降(图 8 中的前 3 位)。
Figure 8
2.确定哪些项目可能落在给定的一对排名之间(图 9)。
Figure 9
高度、宽度和颜色与该物品落入该箱的概率成比例。几乎可以肯定,1992 年和 1993 年会落在前三项。1994 年和 1995 年瓜分剩下的。
用户测试后的结论
Ferreira 等人(2014)的研究表明,条形图可以带来更直观、更深刻的分析。因此用户在解释数据时不太可能出错。然而,使用特定于任务的注释来增强条形图可能会帮助用户对他们的样本做出更好的决策。
参考
n .费雷拉、d .费希尔和 A.C .柯尼希(2014 年 4 月)。"面向样本的任务驱动可视化:允许用户做出更好、更自信的决策."可用此处。
Figueroa,A. (2019)“数据可视化和真实艺术”.走向数据科学。可用这里。
Hellerstein,j .,Avnur,r .,Chou,a .,Olston,c .,Raman,v .,Roth,t .,Hidber,c .,和 Haas,1999 年 8 月)。"交互式数据分析与控制." IEEE 计算机,32(8),51- 59。此处可用。
Olston 和 j . Mack inlay(2002 年 7 月)。"可视化具有有限不确定性的数据." IEEE Symp。关于信息可视化 (INFOVIS 2002) 。第 37-40 页。此处可用。
特沃斯基和卡尼曼(1974 年 9 月)。"不确定性下的判断:试探法和偏见."理科,185。1124–1131.此处可用。
数据科学:酝酿 10 年
原文:https://towardsdatascience.com/data-science-10-years-into-the-making-ad1c5be12a32?source=collection_archive---------25-----------------------
我们是如何到达这里的?
Photo by Jonas Verstuyft on Unsplash
距离我上次写文章已经过去一个多月了,当时我正为读研做着充分的准备。没关系,我回到了正轨,并计划保持我的常规剂量的知识和发现。所以,让我们开始吧!
我正在阅读关于数据科学的文章,并看到了一组令人惊叹的文章,这些文章可能有助于我们理解什么是数据科学。
谷歌首席执行官埃里克·施密特在 2010 年评论说,每两天,我们就产生相当于从文明开始到 2003 年所有数据的数据。— TechCrunch
数据量约为 5 艾字节(10 的 18 次方)。今天,我们已经超越了自己,因为我们今天所做的一切(就像我们一天中的大部分时间在网上冲浪)都留下了大量的数据。这些数据非常有用,因为它包含的信息可以帮助我们回答问题,帮助检测疾病,并帮助的司机在通勤期间保持注意力集中。可能性是无限的。以至于出现了一个新的工程师/科学家阶层,叫做数据科学家。
让我们深潜一下!
数据
Photo by Pietro Jeng on Unsplash
可以通过多种方式和多种形式收集数据。你访问的地点,你浏览的网站,城市的温度变化,指数,地理分布等等。最令人着迷的是,所有这些数据都有潜力挖掘出丰富的信息。
在一篇文章中,经济学家阐述了数据的价值是如何超越石油的价值的。
早在 2010 年,谷歌和其他公司就已经意识到数据的价值。谷歌使用数据分析进行多种语言的文本转换,因为数据是这么说的。2011 年, LinkedIn 开发了“你可能认识的人”功能,将他们的点击率提高了 30%。他们通过分析数据来做到这一点,比如一个人的背景,比如他们在哪个学校学习,他们在哪里工作等等。他们还使用了三角形闭合方法,即如果一个人认识乔并且也认识戴安娜,那么乔和戴安娜很有可能也认识对方。此外,在许多项目中,这些数据导致更快地找到问题的解决方案,而准确性只有轻微的损失。
但是数据收集、数据处理、分析等等,比表面上看起来要多得多。有时数据没有引用每个值所代表的内容,有时数据是一个 HTML 页面,可能需要提取,有时没有首先存储或检索数据的结构。即使你能找到一些方法来获得数据,这些值也可能会丢失,甚至更糟…是错误的。数据格式可能需要特殊的程序来读取或使用。要从数据中获取价值,需要正确有效地克服许多障碍。
为了解决这些问题并真正获得洞察力,数据科学应运而生。
数据科学
Photo by Alex Kondratiev on Unsplash
数据科学是一门收集数据、处理数据、然后分析数据以得出商业见解的艺术,这些见解可以向非技术人员解释。就像上图一样,数据科学是许多事物(如果你可以称之为化学)的并置,如计算机科学、数学、统计学、数据挖掘、图形设计和人机交互。
数据科学家是数据黑客、分析师、沟通者和可信顾问的混合体。——哈佛商业评论
然而,技巧是深远的。数据科学家需要了解像 R(现在还有 Python)这样的语言来处理数据和进行数据争论。为了处理大数据,他们需要知道如何使用 Hadoop 或基于它的技术。云计算技能对于在多个集群/服务器上分配密集的数据争论过程至关重要。此外,图形设计和良好沟通等技能是数据科学家成功的关键。这些可以让他/她清楚地解释为什么事情会发生的洞察力和可能的原因。这些技能使数据科学家(以及像我一样有抱负的科学家)能够在我们的数据中找到模式。现在,这是强大的!!我们现在可以做很多事情,包括数据收集、处理、存储、修改、分析、建模等等。
虽然许多人相信并实践机器学习作为数据科学家的一部分,但这实际上是不正确的。一旦你进入学术界,开始处理自己的数据,数据本身就成了一个问题。如何收集数据?收藏什么?如果这是一种新的方法,保留什么,丢弃什么?可能需要哪些元数据?数据质量好吗?这些问题有助于我们思考这样一个事实,即数据科学家扮演着许多角色,从问题识别到数据收集和争论,再到得出真知灼见。
在实践和理论中,没有正确的答案。正如乔治·博克斯所说,“所有的模型都是错误的,但有些是有用的”。数据科学是一门艺术,在这门艺术中,你要不断尝试,直到找到足够准确的结果。数据及其处理都是与问题相关的,不能标准化。
我们现在在哪里?
Photo by Aron Visuals on Unsplash
我们都处于数据科学的中心。是的,你,我和其他所有人。我们浏览的网站,我们访问的地点,我们购买的东西,我们患有的疾病——都有助于数据。这些数据让数据科学家可以做很酷的事情。
数据科学的领域已经发展得非常广泛。有像 Kaggle 这样的网站,让全球各地的用户体验数据科学,竞争并赢得奖金,以及向成千上万的其他人学习。公司已经开始公开一些服务,允许数据科学家随心所欲地使用它们,比如 GitHub API 和其他服务。
我们现在可以检测欺诈,制造自动驾驶汽车,识别疾病,在猫和狗之间分类(如果你真的想,相信我,这很有趣)等等。可能的应用范围是无限的。最棒的是,数据科学不再局限于任何特定领域。在他/她自己的领域拥有专业知识的人可以使用数据科学来增加价值。你可能是生物学家、物理学家、计算机工程师或数学家,但你仍然可以从事数据科学,让这个世界变得更美好。
然而,这对数据科学来说并不都是好事。有时,如果未获得适当授权,数据收集会被视为侵犯隐私。这是一件大事,因为你真的不想被跟踪。在这种情况下,必须采取适当的措施。《一般数据保护条例》( GDPR)是一部法规性法律,基本上规定欧盟的任何居民都可以要求在欧盟运营的任何公司删除他/她的记录。这样的法律允许个人过自己的生活,而不用担心他们的隐私。
结论
数据科学是一个美丽的领域,在过去的几年里发展很快。我们今天正在做令人惊叹的事情,并计划在未来继续这样做。虽然这个角色看起来很紧张,但是看到你的工作产生巨大的影响真的很有趣。
参考资料:
[1]数据洪流使科学方法变得过时(【https://www.wired.com/2008/06/pb-theory/】T2
[2]未来职业:数据科学家(https://Mashable . com/2012/01/13/Career-of-the-Future-Data-Scientist-infograph/)
[3]数据科学家:你没听说过的最热工作(https://www . AOL . com/2011/08/10/Data-Scientist-The-hot-Job-You-have-heated-Of-heated-Of-heated/)
[4] LinkedIn 的 Daniel Tunkelang 在《什么是数据科学家?(https://www . Forbes . com/sites/danwoods/2011/10/24/linkedins-Daniel-tunkelang-on-what-is-a-data-scientist/# 8 efda a11 cc 13)
【5】什么是数据科学?(【https://www.oreilly.com/radar/what-is-data-science/】T4)
[6]数据科学家的崛起(https://flowing Data . com/2009/06/04/Rise-of-the-Data-Scientist/)
[7]数据科学家:21 世纪最性感的工作(https://HBR . org/2012/10/Data-Scientist-21 世纪最性感的工作)
[8]谢尔盖·布林寻找治疗帕金森病的方法(https://www.wired.com/2010/06/ff-sergeys-search/)
[9]十大数据科学应用(https://www.edureka.co/blog/data-science-applications/)
请分享你的想法、观点和建议。我很乐意收到你的来信。也可以通过 LinkedIn 联系我。
数据科学基础课程
原文:https://towardsdatascience.com/data-science-101-99e34bea86c?source=collection_archive---------11-----------------------
Photo by Franki Chamaki on Unsplash
数据科学简介:迷路就从这里开始。
什么是数据科学?
好吧,如果你刚刚从 10 年的昏迷中醒来,不知道什么是数据科学,不要担心,还有时间。很多年前,统计学家有一些很好的想法来分析数据并从中获得洞察力,但他们缺乏计算能力,所以他们的手被束缚住了。直到有一天,计算机设法赶上了那些家伙,并使他们所有的梦想成真。突然间,我们不仅拥有了历史上前所未有的可用数据,而且我们还拥有了强大的机器来对这些数据进行繁重的计算,让统计学家可以尝试所有这些新算法。数据科学是统计学和计算机科学联姻的产物。换句话说,它是利用计算机能力从数据集中提取有用模式的科学。
它是用来做什么的?
数据科学如今如此受欢迎的原因之一是正在出现的可能应用的数量。
营销和销售
数据科学在营销中的一个典型用例是产品推荐。当你在亚马逊上查看一款产品时,他们告诉你还有另一款你可能喜欢的产品,这种推荐背后有一种算法,根据其他也看到该产品的客户实际购买的东西,认为你会喜欢这些产品。
金融
银行使用数据科学方法最常见的方式是进行信用风险分析:过去,当有人要求贷款时,银行家通常会仔细查看他们的财务记录,以决定是否贷款。如今,有复杂的统计模型不断更新,并给出了良好的违约概率估计,使整个过程更快、更可靠。
卫生保健
说到数据科学,医疗保健是最有前途的行业之一。智能手表等联网可穿戴设备产生了大量数据,包括消耗的卡路里、行走的英里数和心跳。其中一个可能的应用是跟踪变量,这些变量可以帮助解释一些疾病,如果你表现出可能表明健康问题的行为,甚至会提醒你去看医生。
它回答了什么问题?
我们可以将数据科学任务分为两大类:监督学习和非监督学习
Illustration of a linear regression for one explanatory variable. (Image by author)
监督学习
监督学习包括我们有目标变量的所有任务,也就是说,我们已经知道我们想要预测的数据中的一些特征。例如,如果我们想要根据房价的特征(例如房间和楼层的数量)来解释房价,或者如果我们想要预测客户停止使用我们服务的可能性。
无监督学习
这些是当我们不确定要问的问题时的任务。一个典型的例子是聚类任务,当我们只想在数据中找到模式,而不一定与某个特定变量相关(例如,客户细分)。
谁做的?
除了统计学和计算机科学所需的知识,数据科学还需要商业意识:如果不适用于该领域,无论你的算法有多好,它们都是无用的。与数据打交道的人通常分为三类,这取决于他们更关注这三个专业领域中的哪一个:
数据分析师
有时也被称为业务分析师,这个人知道如何与不直接处理数据的人交谈。他通常负责将业务需求转化为数据需求(并将数据洞察转化为业务建议)。他对主要的数据科学算法有全面的了解,并且通常在数据可视化方面有很好的技能。
数据工程师
这个人确保从所有来源收集数据,几乎无缝地集成到公司的技术环境中,并且开发的所有算法都又好又快。他们几乎总是来自技术背景,有时不得不创建专用工具来显示数据流程,尤其是如果他们要与公司的其他利益相关者共享。
数据科学家
从名字就能猜到,这家伙对大多数算法的运行方式有着更深刻的理解,以及哪种算法最适合每种情况。他们可能比数据分析师和数据工程师更了解统计学,但对业务或流程工业化的来龙去脉了解较少。一些公司更愿意聘用博士来担任这个职位,但情况并非总是如此。
它要去哪里?
在接下来的几年里,我们将会看到许多不同领域的进步。通过使用数据,城市将能够更好地管理它们的交通、能源消耗,甚至警察单位的分配。通过使用可穿戴设备,我们将能够更好地锻炼、饮食和睡眠。可能还有很多我们没有想到的其他可能性。
但是,我们也会发现,并不是所有的事情都可以用数据来改善,我们很快就会发现这个极限在哪里。在每一个人类活动或自然现象中,总会有一个重要的随机成分,永远不会被任何机器学习算法跟踪,无论它有多复杂。
这种数据驱动的文化也可能导致一些重要的行为变化。人们开始意识到他们的个人生活有多少被大公司和政府跟踪,而且大多数人似乎并不喜欢这样。这可能会导致人们自愿降级他们的技术设备,使用工具来阻止数据收集,甚至减少他们的整体技术使用。政府已经意识到这些问题,当涉及到人们的隐私时,世界各地的监管越来越严格。让我们看看未来几年这将如何塑造社会(黑镜系列对这些可能性提供了有趣的见解)。
怎么做?
如果你想了解更多,我推荐麻省理工学院出版社的基础知识系列书籍《数据科学》,作者是约翰·d·凯莱赫和布伦丹·蒂尔尼。这是对这个主题的一个很好的介绍,不用太专业,可以帮助你了解数据科学是否真的适合你。
接下来是福斯特·普洛沃斯特和汤姆·福塞特的《商业数据科学》。这本书更侧重于商业应用,深入算法的细节。它将让你真正很好地掌握数据驱动的决策所带来的所有可能性。
然后,一旦你掌握了基础知识,就该真正学习了:你几乎肯定需要学习编码(如果你还不知道的话)。你应该关注的主要语言是 SQL 和 R 或者 Python。第一个用于查询数据库,以正确的形式提取您需要的数据。另外两个用于应用算法和创建图。r 的创建侧重于统计学,而 Python 是一种更通用的编程语言。首先,从两者中选择一个来集中精力,如果需要的话,以后再学习另一个。
开始练习技能的一个好方法是Kaggle.com,在那里你可以玩玩具数据集并参加真正的比赛。这将有助于你检验你的知识,也有助于你建立自己的投资组合。然而,请记住,最终,您将需要处理现实生活中的案例,这是一种不同的情况。
结论
既然你已经知道了一些数据科学的术语,你就可以去做你自己的研究了。可用资源的数量几乎是无穷无尽的,每天都有新的信息出现,所以要确保你总是了解最新的方法和可能性。
数据科学:先决条件之旅
原文:https://towardsdatascience.com/data-science-a-tour-of-prerequisites-7738c7c900aa?source=collection_archive---------19-----------------------
介绍
自从 2012 年那篇文章在《哈佛商业评论》上发表以来,《数据科学》杂志受到了极大的关注。但除了媒体的虚假描述,这一领域实际上显示出了拥有合适技能、资源和基础设施的公司,或者愿意投资收购它们的公司的巨大潜力。因此,许多有相关经验的年长从业者改变了职业,而年轻学生则改变了方向,希望毕业后能在数据和分析就业市场上取得成功。但是,大多数有抱负的数据科学家在旅程开始时面临的问题是:你实际上如何开始?
接触像数据科学这样一个巨大且高度技术性的领域可能会让人感到不知所措。因此,本文档旨在为感兴趣的各方提供关于该主题的一般信息,并指导他们在深入研究数据科学本身之前获取必要的知识。许多人在没有必要的背景知识的情况下就直接进入主题,结果却很快因困难而沮丧,缺乏继续前进的动力。因此,必须先花时间复习几个必需的模块,以确保后续的数据科学概念易于理解和消化。
值得注意的是,本文并不是要教你数据科学,也不是要教你数据科学的先决条件。相反,这应该被看作是一篇参考文章,在这篇文章中,我收集了在我的经历中发现有用的相关资源,并描述了它们中的每一个,以解释为什么你可能需要它们。因此,这是我个人经验的反映,绝不是掌握数据科学的“正确途径”。然而,我将在这里分享的东西似乎在过去已经帮助指导了许多人,我想把它提供给所有可能从中受益的人。这篇文章的目的是帮助指导你度过最初的学习阶段,防止你浪费时间过滤关于这个主题的大量现有资源。
关于我
B 在继续之前,我想我应该先分享一些关于我自己的信息,我的经历,以及为什么我可能知道一些对你有帮助的事情。但是如果你只是想得到如何开始的答案,那么请随意跳过这一部分。
从学术角度来看,我的学士学位侧重于理论数学,而我的第一个硕士学位(在法国也称为工程师学位)是电信。在它结束的时候,我意外地结束了在数据科学领域的实习,这就是一切的开始。在那个时候,我已经决定了我的职业生涯要做什么。唯一需要回答的问题是如何到达那里。
获得电信硕士学位后,我决定转行。你可能认为这是一个大胆的举动,但你绝对是对的。但是,嘿,没有风险的生活是什么?
我不顾所有朋友和亲戚的建议,没有去寻找一个我有资格胜任的电信相关职位,而是请了几个月的假,每天都在努力获取必要的数据科学知识,以获得就业机会。好的一面是,我有一个很好的相关的研究生学位,以及大部分我需要的背景知识来完成这个转变,但是我仍然有很多工作要做。六个月后,在遭到数十次拒绝后,我设法找到了几份工作,都与数据科学有关。努力工作是有回报的,哈!
大约一年半后,我决定进行另一次尝试:我打算回到大学完成一个真正的数据科学硕士学位。你可能想知道为什么,毕竟我已经有了头衔,也有了一些行业经验。有很多原因促使我做出这个决定,但是为了这篇文章,我们只能说我渴望更多的知识。因此,我搬到了伦敦,加入了伦敦大学城市学院的数据科学硕士项目。写这篇文章的时候,我正处于完成这个硕士学位的边缘。
我想说的是,我两者都做过,我知道从头开始是什么感觉,一个人在电脑前呆几个月,不知何故找到了继续下去的动力。我也知道做一个合适的大学项目是什么感觉,在这个项目中,你会发现自己处在一个与同龄人合作的学习环境中。
考虑到这一点,让我们实际上进入文章的核心,好吗?
数据科学
F 首先,让我们尝试定义数据科学,以便理解以下信息在更大的图景中的位置。
要给这个术语下一个独特的定义实际上非常困难。今天,它被用在各种各样的上下文中,来描述看似不同的角色和任务。然而,所有这些立场之间有一些共同因素,我们可以用它们来提供适用于大多数情况的一般定义。这些共同因素是数据、解决问题和商业价值。数据科学可以被认为是使用数据作为原材料,结合分析思维和特定工具,以解决业务问题,从而产生商业价值。定义中的细微差别主要是由于工作的背景以及用于将数据转化为商业价值的特定工具和知识。例如,一些从业者可能会使用 BI 工具和 Excel 电子表格来生成报告,而其他人可能会求助于成熟的编程语言来将机器学习纳入他们的流程。有些人可能会认为第一类不是真正的数据科学,我个人同意这种说法,但在许多公司,拥有数据科学头衔的人正在做非常精确的工作。
另一个最容易被社区忽视的有趣点是数据科学中的科学一词。从根本上说,数据科学是关于求知欲和科学过程的。分析师首先提出一个感兴趣的问题,制定一个假设,然后收集必要的数据进行分析或建模,以支持或拒绝所述假设。自然,严谨和对细节的关注在这里非常重要。这种说法源于这样一个事实,即通过应用数据科学方法获得结果极其容易。不管很多人怎么想,数据科学的主要困难不是所需的知识总量,或者需要知道的算法数量,甚至不是需要掌握的编程语言。相反,主要的挑战是确保方法得到适当使用,结果得到验证,然后在用直观的语言传达给利益相关者之前得到正确解释。
既然定义已经出来了,让我们继续下一节来讨论需求。
理解水平
在我独自或在大学学习数据科学主题的过程中,我观察到一些趋势,这些趋势与旨在向给定受众教授新概念的资源的性质有关。有两种基本的观点,基于这两种观点,内容可以被交付:理论的和应用的。一本书、一篇文章、一门大学课程或任何其他教育媒体可能会关注这两个方面中的一个。在数据科学中,这两个层次的理解可以进一步分解为子组。让我们先介绍一下它们,然后我会用一个例子来解释和说明每一点,以此来说明这一点。
理论内容有两个层次,第二层建筑在第一层之上:公式和数学推导。公式提供了算法需要执行的步骤,以及任何必要的等式(如果适用的话),如果你愿意,还可以提供解的公式。数学推导,顾名思义,从一个问题陈述和潜在的一些假设出发,推导出一个解。这可以包括关于这些方法的起源和它们与其他邻近学科的联系的证明和解释。
让我们给出一个使用线性回归算法的简单例子,该算法将一条线(或更高维度中的超平面)拟合到由对( x , y )组成的数据集,其中 x 是输入数据的向量, y 是输出(如果您不理解这些术语中的一些或全部,请不要担心)。线性回归的数学公式由两部分组成。首先是线的一般方程,表示我们需要从中选择的所有线的集合,可以写成y=∑βI Xi+β0 其中β=(β0, β 1,.。。。, βn )是直线/超平面的参数。然后,是问题的解决方案的公式,它代表了反映最符合我们的数据的特定线的参数值(现在让我们抛开“最符合数据”的实际含义)。解的写法如下β=(x**⊤**x**)−1x^⊤y(同样,如果你不明白这个公式从何而来也没关系)。数学推导将演示如何从一条线的一般方程转移到寻找最适合我们的数据的线的参数值。区分这两个层次是很重要的。公式是我们大多数人在理论方面所需要的,因为它允许从业者理解有用的数学细节,推理该方法的优点和局限性,更重要的是,使他/她能够在需要时使用某种编程语言从头构建算法或方法。另一方面,推导和证明排在第二位,有助于加深对方法的理解,建立主题之间的联系,了解一些设计选择的起源。例如,在线性回归中,数学推导有助于理解作为该算法的成本函数的均方误差的流行选择不是任意的,而是当我们在特定条件下最大化似然函数时自然出现的。这些理论细节还可以扩展到提供同一概念的不同视角及其与其他主题的联系,例如提供线性回归的几何视图。
然而,应用的外观可以分为三类:直觉,编程和应用。直觉是关于获得对特定概念或方法的高度理解,以及为什么我们应该关心它。这通常是通过使用简单的图表和简单的文字实现的,没有任何数学公式,同时提供一些简单的用例来引起兴趣并突出其潜在价值。如果我们以线性回归为例,算法背后的直觉是考虑空间(通常是 2D 空间)中的点云,并在中间可视化地放置一条线,以便它在某种程度上接近所有的数据点。我们认为这条线最符合我们的数据。就重要性而言,该算法对于预测和统计推断目的都是有用的。应用领域的第二个方面是编程,这是不言自明的,涉及到将抽象概念转换成代码。这可以通过使用一些已经实现了感兴趣的技术的包或 API(比如 Scikit-learn,Python 中一个流行的机器学习包)自动完成,或者我们自己从头开始编写方法。例如,我们可以使用 Scikit-learn 来调用实现同名算法的 LinearRegression 类。类似地,我们可以依靠我们对线性回归的封闭形式公式的了解(如上所述),使用基本的矩阵操作来实现我们自己的解决方案。应用空间的最后一点是关于应用,具体来说,就是理解算法或概念在给定情况下的适用性。就像我之前提到的,知道一个方法或算法是如何工作的和正确使用它是两回事,困难通常局限在后者。从技术上讲,如果输出变量(我们感兴趣的结果)是数字,我们总是可以使用简单的线性回归。然而,如果投入和产出之间的关系不是线性的,我们可能会更好地使用一个更复杂的回归变量。
为了实现我们的目标,知道我们需要什么样的教育资源是很重要的。但在此之前,我们还需要在头脑中有一个明确的目标,即我们打算完成的工作所需的知识。在这一点上值得注意的是,大多数教育资源将涵盖这些类别的混合,但通常只有一个主要方面(理论或应用)。
事实上,行业中的大多数分析专业人员都使用应用数据科学。然而,更好的人也精通理论的某些方面,以确保他们在选择方法时做出正确的决定。另一方面,研究人员更关心不同算法的理论基础,因为他们依赖于深刻的理解来产生新的知识。
现在,让我们进入下一部分,我将提供一些关于如何学习的要点。
论学习的艺术
挣钱很难,这是无可争辩的事实。但这并不意味着它不能变得有趣或简单。为了最大限度地利用你的时间,这里有一些你可能想要遵循的指导方针。除了直觉上的重要性之外,这些想法中的大部分也得到研究结果的支持。
- 制定一个计划并坚持下去。对你需要覆盖的内容、你将使用的资源以及完成每项任务的预计时间有一个概念。在这个过程中调整你的时间估计是可以的(你肯定会的)。
- 回顾以前的主要观点。在每次学习课程开始时,回顾上次课程中的要点。这有助于将信息保存在长期记忆中。
- 做笔记。用自己的话写下概括的关键概念很重要。例如,你可以在每章的结尾这样做。这个过程有助于理解和记忆信息。
- 综合运用多种感官。如果个人同时使用不同的感知能力:视觉、听觉和行为,学习过程会更有效率。光是看无数个小时的关于数据科学的 YouTube 视频不会让你成为数据科学家。事实上,你很快就会忘记大部分信息。
- 了解你打算学习的范围。提前了解需要涵盖的细节层次有助于你保持清醒,防止你偏离主题或迷失在无数书籍和其他信息来源中。
现在,让我们继续讨论本文的主要目的,并讨论数据科学的先决条件以及选择的资源,以了解更多信息。
先决条件和资源
数据科学作为一个新兴领域,本质上是跨学科的。举几个例子,它位于从数学和编程到统计和人工智能的各个领域的交叉点。
幸运的是,有一些核心主题构成了数据科学领域的大部分先决条件,并帮助从业者为未来的一切奠定坚实的基础。其他领域对于理解特定的算法也可能是有用的,但在大多数情况下,新人没有它们也可以。这些核心题目是:概率、统计、线性代数、微积分和编程。在考虑从事数据科学之前,你需要至少掌握这些学科的基础知识。让我们来定义它们,解释它们为什么重要,并列出一些你可能需要熟悉的概念。最后,我将提供一些资源来帮助您获得必要的知识,同时详细说明涵盖每一项所需的时间和精力。
可能性
描述:概率论是一门研究随机现象的数学分支。它指定一个度量来量化事件发生的可能性,这通常是通过重复随机抽样来估计的。概率允许我们在不可能确定的情况下进行有效的推理。它在统计学中被大量使用,也是许多机器学习算法的基础。
掌握程度:需要初级到中级知识。
基本概念:
❖ 基础:计数,概率公理,事件和样本空间。
❖ 条件概率:条件概率,独立性,贝叶斯法则。
❖ 随机变量:离散/连续随机变量、期望值、方差、高阶矩、累积分布函数(CDF)、概率密度/质量函数(PDF、PMF)、重要概率分布(伯努利、二项式、泊松、指数、均匀、正态)、联合分布。
❖ 极限定理:弱大数定律,中心极限定理(CLT),强大数定律。
资源:
➡ 概率入门— mathematicaimonk (YouTube 播放列表):这个频道专门为研究生和更高水平的本科数学。Probability Primer 是一个包含 43 个短片的播放列表,涵盖了上面概述的大部分概念。看看前几个视频,如果你欣赏频道所有者解释事情的方式,那么试试这个。这个频道还有一个包含 160 个视频的完整播放列表,涵盖了您在旅程开始时可能需要的所有机器学习。
➡ 概率—可汗学院(YouTube 播放列表):这是一个非营利组织,其使命是在任何地方免费提供世界一流的教育。它有一个 youtube 频道和一个网站。概率是一个由 41 个短视频组成的播放列表,它很好地介绍了概率和组合学。我个人用过,强烈推荐。
➡ 概率的第一课——谢尔顿·罗斯(书):这是大多数概率研究生课程的必备教材。这是一本非常全面的书,有许多练习(其中一些练习可能相对较难,需要一些数学直觉)。这本书还有一个 PDF 格式的摘要,可以用来复习概率。我个人拥有这本书,我推荐它(尤其是对有数学背景的人)。这本书可以在网上找到。
➡ 概率视角下的机器学习——凯文·墨菲(书):这是一本非常受欢迎的机器学习书籍,也是我的 MSc 的 ML 模块中的推荐教材之一。Murphy 以大约 30 页的篇幅介绍了你需要知道的大多数概率概念。这是另一个专门为机器学习量身定制的伟大总结。这本书的 PDF 版本可以在网上找到。
统计数据
描述:统计学是数学的一个分支,处理数据的收集、组织、分析和解释。当我们需要通过分析一个群体的有限样本来得出关于这个群体的结论时,它特别有用。统计学和概率论是两个相关但又独立的学科。统计分析经常使用概率分布和定理,这两个学科通常一起研究。从数据分析和可视化到机器学习和统计建模,这两个主题在数据科学中几乎无处不在。
精通程度:需要中级到高级知识。
基本概念:
❖ 描述性统计:集中趋势(均值、中位数、众数)、离散度(方差、标准差、百分位数、四分位距)、形状(偏斜度、峰度)、依赖度(皮尔逊相关、斯皮尔曼相关、肯德尔相关)、图形(条形图、箱线图、直方图、散点图……)。
❖ 统计推断:统计理论(总体、样本、统计量、抽样分布、密度估计)、频率主义推断(点估计、置信区间、假设检验)、贝叶斯推断(贝叶斯概率、可信区间、贝叶斯估计量) …
❖ 回归分析:线性回归(普通最小二乘法、一般线性模型、贝叶斯回归)、分析(误差和残差、Q-Q 图、验证、解释)、广义线性模型(指数族)。
资源:
➡ 统计数据——可汗学院(YouTube 播放列表):可汗学院的另一个播放列表提供了 67 个视频,每个视频大约 10 分钟。播放列表提供了坚实的统计基础(描述性的和推断性的)。它将教会你开始学习数据科学所需要了解的大部分统计学知识。我强烈建议用一些实践练习来补充它,以帮助坚持所有的信息,并知道如何应用不同的概念。
➡ Think Stats —艾伦·唐尼(书):一本非常好的通过 python 编程介绍统计概念的入门书。对于每个概念,都提供了一种直觉,并解释了它为什么有用。然后作者概述了数学公式,并将其转化为 python 代码(从零开始)。这本书是应用性的,避免了沉重的数学,本质上为你提供了统计学的工作知识,没有太多的证明和方程。我个人涵盖了大部分,我推荐。这本书的 PDF 格式可以在网上免费获得。
➡ 思考贝伊斯-艾伦·唐尼(书):同一作者的另一本书,我还没有读过,但它也受到了社区的强烈推荐。这将向你介绍贝叶斯统计的概念,这是你学习 ML 所需要的。同样,这本书依靠 python 从头开始编写代码。PDF 版本可在网上免费获得。
➡ 统计推断——卡塞拉&伯杰(书):这是关于推断统计学的最好的书之一。它被许多大学用作统计学课程的教科书。但是,这也是一本理论性很强的书,有数学公式,定理,证明。我还没有亲自使用过它,尽管我已经有了它的硬拷贝。如果你正在寻找一种合理的统计推断方法,这种方法是不会错的。请记住,这本书并不是要从头到尾读一遍,而是作为参考。网上有 PDF 版本。
线性代数
描述:这无疑是在进行任何机器学习之前要知道的最重要的原则。在将数据提供给算法之前,通常需要用数字值以表格的形式表示数据,其中的行表示实体的实例(人员、客户、年份等)。)并且每一列描述该实体的具体特征(例如年龄、工资、性别等)。对于实体人)。在这种结构化形状中,行可以被视为向量空间中的向量,或者几何空间中的数据点。行的集合(即数据集)形成一个矩阵。碰巧的是,线性代数是数学的一个分支,研究向量,矩阵,它们的特征和操作。除了理论上的原因,线性代数的知识还允许我们有效地对代码的相关部分进行矢量化(执行矩阵乘法,而不是 for 循环),以使其运行得更快。
掌握程度:中级到高级知识是可取的。
基本概念:
❖ 向量介绍:向量,线性组合,独立性,点积,范数,矩阵,逆,转置,行列式,秩…
❖ 向量空间和子空间:向量空间,矩阵的基,维数,零空间…
❖ 正交性:点积、正交性、投影、正交基和 Gram-Schmidt。
❖ 特征分解:特征值,特征向量,对称矩阵,正定矩阵,矩阵对角化,谱定理。
❖ 其他分解:奇异值分解(SVD)、LU 分解及解线性方程组、Cholesky 分解、QR 分解…
资源:
➡ 线性代数的本质——3 blue 1 brown(YouTube 播放列表):这个频道是关于数学的,以简单易懂的方式和直观的可视化方式进行解释。这是用每个人都能理解的方式解释复杂的数学概念的最佳渠道之一。该播放列表包含 15 个视频,每个视频大约 12 分钟,可以为您提供超越数学公式的线性代数的直观感受。我发现这些视频甚至在学习线性代数多年后仍然有用。同样,它会给你一个数学概念的理解,如矩阵,线性映射,特征值,特征向量,向量空间,行列式,点积,叉积等。从头到尾我都亲自报道过,强烈推荐。然而,光是这样是不够的,因为你还需要接触一些方程,因为那是你理解 ML 所要用到的。我建议将这个播放列表与一本关于线性代数的书或复习资料配对。
➡ 机器学习的数学。2 至 Ch。5): 这是一本令人惊叹的书,涵盖了机器学习所需的大部分数学,它是专门为此目的而写的。特别是,它有关于线性代数的概念的详细的章。我最喜欢这本书的一点是它有丰富的例子,以及它包含的插图。此外,作者有一个非常清晰和简洁的写作风格,使阅读这本书管理,即使是非数学家。在每章的末尾还有一个练习部分,可以进行更多的练习。这是浓缩知识的一个很好的资源,可以在网上找到。
➡ 线性代数做对了——谢尔登·埃克斯勒(书):这又是一本受到很多关注的书。只有 250 页,涵盖了你需要的大部分概念。这也是我遇到的唯一一本从向量空间开始的入门书,我认为这是介绍线性代数的方法。如前所述,给定一个结构化数据集,每个记录(或示例或行)都可以被视为 M 维向量空间中的一个向量,其中 M 是数据集中的列数。这种描绘数据的方式有助于理解许多 ML 算法,如 PCA(通过数据固有维度的概念,或矩阵的秩)。
➡ 线性代数入门——Gilbert strang(书):这是最好的线性代数入门书籍之一,在许多研究生课程中被用作教科书。吉尔伯特·斯特朗是麻省理工学院教授线性代数课程的教授。书中的数学不是很严谨,这使得它对于数学水平不同的读者来说很容易理解。这本书涵盖的内容比你理解机器学习背后的数学所需要了解的线性代数更多(无论是从书上还是从研究论文上)。吉尔伯特也因他的教学风格而闻名:他以一种易于理解的方式解释概念,在提供数学公式和适用的证明之前,首先关注直觉。这是一本大约 550 页的综合性书籍,需要时间才能看完。我个人拥有并使用这本书,我强烈推荐它。这本书的 PDF 版本可以在网上找到。
➡ 线性代数——吉尔伯特·斯特朗(大学课程):正如你可能已经猜到的,这是吉尔伯特教授的实际麻省理工模块。共有 34 堂课,每堂课约 40 分钟,涵盖书中相同的概念。这是一门很长的课程,光是完成讲座就需要大约 25 个小时。如果你喜欢吉尔伯特的教学风格,我推荐你通读这本书,当你发现难以理解某些概念或每次讲座后需要练习时,可以参考他在麻省理工学院的讲座。
微积分
描述:机器学习的另一个中心话题,微积分是研究连续变化的数学分支,就像几何学研究形状,代数研究算术运算的推广一样[维基百科]。微积分有两个主要的分支:微分学,处理瞬时变化率(用导数来解析表示,用曲线斜率来几何表示),和积分学,更关心累积的量和曲线下的面积。那么为什么这里实际上需要微积分呢?大多数机器学习算法都被设计成一个优化问题,我们寻求最小化一些成本函数或最大化一些回报函数。微分在优化程序中起着关键作用,因为导数告知变化率,因此有助于识别驻点。偏导数和梯度等概念在这里很重要。至于积分,它主要出现在处理连续随机变量的基于概率的方法中。离散变量的离散和变成了连续随机变量的积分。幸运的是,对于您的大部分数据科学工作来说,这里没有太多需要了解的概念,但是您应该知道的几个概念需要很好地理解。
掌握程度:初级到中级知识者优先。
基本概念:
❖ 微分:极限、连续性、导数、偏导数、链式法则、梯度、高阶导数、海森矩阵、雅可比矩阵。
❖ 积分:积分为黎曼和,积分技术。
资源:
➡ 微积分的本质——3 blue 1 brown(YouTube 播放列表): 12 个视频,每个视频大约 15 分钟,来自同一频道,提供线性代数的本质。我从来没有亲自做过,但从以前的播放列表和我在这个频道上观看的其他视频来看,我非常确定这个也是高质量的。然而,就像以前一样,这里的目的是教你激发数学概念的直觉,而不是支持它们的核心公式和方程。为此,你需要其他资源。
➡ 微积分早期先验论者—詹姆士·史都华(书):这是大学微积分课程的标准教材。最后一版(第 8 版)由 1400 页组成,所以不用说,这是一本非常全面的书,它将教会你比你需要知道的更多的微积分知识。你不需要涵盖每一章,你可以选择你需要的来补充你的知识。它是详细的,写得非常好,用彩色数字说明,并且清楚地组织。这本书也可以在网上买到。
➡ 微积分——迈克尔·斯皮瓦克(书):又一本关于微积分的好书。这本书要短得多(大约 600 页),但仍然涵盖了微积分的必要概念(导数和积分),尽管它缺乏多元微积分,而多元微积分在机器学习中很重要,因为我们通常处理高维数据。在网上可以买到。
➡ 机器学习的数学。5) : 线性代数部分之前提到的同一本书。它也有一章关于向量微积分。结合 Michael Spivak 的微积分的一些章节,它可以为您提供一个在这一领域的先决知识很好的概述。如果你还没有下载这本书,请下载。
编程
描述:知道各种花哨的算法和统计概念固然好,但应用于解决问题更好。在这个时代,随着可用数据量的增加和所用技术的复杂性,人们需要将计算任务转移到为此目的而设计的硬件上(不相信我?试着用笔和纸求一个随机的 100 维方阵的逆)。但是为了向机器传达我们的意图,我们需要精通一门编程语言。有许多语言,每一种都有特定的开发目标,因此更适合某一类任务。在数据科学领域,从业者似乎特别喜欢 R 和 Python,主要是因为它们的灵活性、易用性以及它们为应用数据科学提供的专用库或包。这是促使选择的一个关键点,因为这两种语言提供了各种技术和算法的现成实现,可以通过简单的函数调用和几行代码来使用。这从本质上帮助分析师更专注于解决手头的任务,而不是写几页代码。对于城市的数据科学硕士课程和大多数公司来说,Python 是首选语言,也是本文的重点。也就是说,除了依赖于语言的库之外,这里介绍的大多数其他概念构成了计算机编程的基础知识,并同样适用于其他编程语言。
Python 是一种解释型、高级、通用编程语言[维基百科]。它的灵活性使它可以用作交互式分析和快速原型制作的脚本工具,也可以作为一种成熟的编程语言来开发用于其他任务的程序,如网络、web 开发等。在深入研究 Python 必须提供的专门的数据科学库之前,首先需要理解基本的 Python 发行版,以及一般的编程原则,这将使在适当的时候获得新库的过程变得更加容易。
掌握程度:初级到中级知识为佳。
基本概念:这些是你在基础 python(以及一般编程)中需要知道的大部分概念。
❖ 数据类型:整数、浮点数、字符串、布尔值…
❖ 数据结构:列表、元组、集合、字典,它们的相似性、差异、用例以及如何操作它们。
❖ 控制流程: If 语句,For 循环,While 循环,Break / Pass / Continue 语句…
❖ 函数:函数定义,参数,关键字参数,lambda 表达式…
❖ 输入/输出(I/O) : 读取/写入文件和输出格式。
❖ 错误和异常:如何捕捉错误和处理异常。
❖ 类(面向对象编程):如何在 python 中定义和操作类。这一点非常重要,因为您将在 Python 中使用的每个包都是用类编写的。例如,在 Scikit-learn 中,LinearRegression 是一个类,LinearRegression()创建了该类的对象实例,具有用于功能的方法和用于存储值的属性。
❖ 其他模块:这些是标准 Python 库中包含的补充模块,有时会很方便。它们包括“math”模块(用于数学函数)、“datetime”模块(用于日期和时间操作)、“re”模块(用于正则表达式)、“collections”模块(提供更适合某些任务的新容器和数据结构)等。
资源:
➡ 思考 python——艾伦·唐尼(书):这是我在本文中提到的艾伦·唐尼的第三本书,所以不用说,我确实相信他的书质量很高。这是一本 250 页的书,向读者介绍了计算机科学的基础,特别是 Python 编程语言。然而,我不推荐做书中的练习(相对于它们所提供的内容来说,这些练习太费时间了)。这本书可以在网上免费获得。
➡ Python 3 教程——官方 Python 文档(网站):本教程作为官方 Python 文档的一部分提供。这可能是涵盖上述所有主题的最佳资源,如果需要的话还可以更多。要么选择这个,要么考虑 Python,因为它们包含相似的信息,并且以相似的方式组织。也就是说,教学风格是不一样的,所以选择最适合你的。
➡ Hackerrank(网站):阅读关于编程语言的书籍和教程固然很好,但更重要的是,你需要实践。在阅读书籍或教程的时候,打开你的终端或 IDE,边读边练习。Hackerrank 是一个提供练习的平台,你可以用 Python 来解答。这是一个练习的好地方,并且对初学者友好。我强烈推荐。
备注 1 : 上面概述的资源列表反映了我自己的观点,即我认为在从事数据科学之前了解什么是重要的,以及哪些资源可以教会你这些。然而,你不必选择任何一个,你可以选择最适合你的。也就是说,我建议你从他们各自的书中获得关于这里提到的主题的必要知识。也就是说,避免试图在数据科学的模糊保护伞下用一本书一次性涵盖所有这些先决条件。它可能会错过许多重要的概念和主题,因为你不能用一本书涵盖所有内容。把那些普通的数据科学书籍放在一边,直到你掌握了相当多的知识,并把它们作为复习主题的参考。
备注 2 : 务必要明白,学习一个给定的主题,没有“最佳资源”。这完全取决于难易程度、速度、作者的语言、解释的深度以及教学方式对你来说是否方便。也就是说,当一个特定的资源非常受欢迎时,本质上意味着它与许多人兼容。
在这一点上,我敢肯定有些读者会想“哇!我需要在开始数据科学之前了解所有这些?没关系。”你需要明白这是一个学习的旅程,需要花费大量的时间和精力。然而,在进入数据科学之前,您不需要知道本文中提到的每一件事情。甚至我还在温习其中的一些话题,或者在忘记的时候刷新一下其他话题的知识。所以放轻松,一步一个脚印,只要你不断前进,你最终会到达那里。
然后呢?
如果你能走到这一步,祝贺你!我知道这一旅程并不容易,但请放心……在这一点上,您已经具备了钻研实际数据科学培训所需的(大部分)条件。根据您选择的下一步研究内容,您可能仍然需要偶尔复习其他主题,但您已经做好充分准备,可以安全地学习足够的数据科学,成为一名工作专业人员。
从这里开始的下一步是解决应用数据分析、机器学习和科学编程(主要是为特定目的设计的 Python 库)。我将集中讨论后两个问题。
在机器学习方面,你可以从简单的算法开始,如线性回归、逻辑回归、决策树、K-最近邻和 K-均值。这些不仅容易理解,而且为后面的内容打下了坚实的基础。他们还将向您介绍在 ML 中遇到的各种基本概念,如学习类型(监督与非监督)、成本函数、过度拟合、偏差-方差权衡、正则化、性能度量、超参数调整和验证策略。你最好从一个简单的资源开始,它解释了一些直觉,并为你提供了数学公式。其中一个资源是最近出版的一本书,名为:安德烈·布尔科夫的《百页机器学习书》(可以在网上找到 PDF 格式)。
另一个方面是科学规划。我们之前提到过,在继续下一步之前,您需要很好地理解基础 Python,并熟悉计算机科学基础。如果您已经完成了这些,那么是时候开始研究用于数据分析和建模的特定库了。核心库包括:
- NumPy : 代表数值 Python,用于向量/矩阵操作等线性代数操作。它的速度非常快,因为它的后端大部分是用 C 语言编写的,许多其他科学图书馆都是在它的基础上构建的。NumPy 引入了 N 维数组作为它的主要数据结构,并使代码易于“矢量化”,以避免极其缓慢的“for 循环”。
- Pandas : 代表 Python 数据分析库,用于操作(转换、连接、合并、分组、聚合、清理)以表格格式呈现的数据集。Pandas 构建在 NumPy 之上,并使用两种不同的数据结构:一个可以被视为命名 NumPy 数组的序列(其中数组的每个单元格都有一个标签),以及一个 DataFrame,它是共享相同索引标签的水平连接序列的列表。
- Matplotlib : 这是 Python 中的标准可视化库。它也是 Seaborn 等其他可视化库的基础。可视化是数据科学的一个重要方面,它为从业者提供了至关重要的补充信息,以及正在分析的数据的更直观的视图。
- Scikit-Learn : 这是 Python 中经典机器学习的首选库。它有一个干净统一的 API,允许通过类似的函数调用和管道使用许多算法。这个库还提供了一些便利的函数和预处理工具,这些工具通常与 ML 过程有关,比如规范化、一键编码等。
- Seaborn : 一个基于 Matplotlib 构建的不同的可视化库。它提供了专门用于统计可视化的功能,如回归线、条件箱线图、密度估计图等。哦…我提到过它比使用默认参数的 Matplotlib 在视觉上更吸引人吗?
- Statsmodels : 这个包提供了用于统计建模、假设检验和统计数据探索的函数和类。与针对预测分析定制的 Scikit-learn 不同,statsmodels 面向描述性和推理性统计,尽管它们的一些算法可能会重叠。
- SciPy : 一个库,为从业者提供了许多用户友好且高效(这里的关键词是高效)的科学数值例程,如积分、插值、优化、线性代数和统计。它还提供了一些有趣的、有效率意识的数据结构和算法,当规模变得有问题时,这些数据结构和算法很方便,比如稀疏矩阵和 K-D 树。
- Keras : 一个流行的高级、直观和用户友好的深度学习库,它将让你专注于学习深度学习,而不是浪费时间学习库本身。它向用户提供他/她可能需要的一切,只要它不涉及修改和修补非常低级的细节和算法的内部工作。对于这种细粒度的控制,可以选择较低级别的 PyTorch 或 TensorFlow 库。虽然这两个通常有一个更陡峭的学习曲线(TensorFlow 比 PyTorch 更多)。
结论
这是我关于数据科学先决条件的文章的结论。我的读者,我想对你说谢谢……谢谢你花时间阅读我的文章,我希望你能从我要说的话和我谈到的各种资源中受益,哪怕只是一点点。我也希望我没有阻止你接受学习数据科学的挑战,如果我成功做到了,那么你也可以!只要在你想达到什么目标和为什么达到这个目标的问题上对自己诚实,并设定合理的期望值。其余的自然会跟上。
最后,我欢迎任何使文章更好的建议,或者纠正任何错误,所以请随意使用评论部分或直接联系我。此外,大约一年前,我创建了一个共享驱动器,在那里我分享了多年来收集和精选的数据科学资源。它最初是为了在理学硕士课程期间帮助我的同龄人,它得到了比我预想的更多的关注。如果你愿意,给我发一封电子邮件,我也很乐意与你分享。
这是我的联系方式,如果你想联系的话:
- 电子邮件:samy.tafasca@gmail.com
- 领英:【https://www.linkedin.com/in/samy-tafasca/
编辑 20/09/2019:修正了 OLS 回归公式中的一个错误。
数据科学就是要做出正确的选择
原文:https://towardsdatascience.com/data-science-about-making-the-right-choices-dd6b62cb1a6?source=collection_archive---------36-----------------------
如果你不做,你的竞争对手就会做
不久前,我和一位资深同事进行了一次讨论。
他的话: “数据科学和大数据只是一种时尚和一个研究问题。企业想要的是可操作的产品,能够产生价值的东西。而数据科学是如何产生价值的?它正在消亡,它只是一种时尚。”
当然,这让我有点难过,因为很少有人了解这个领域,他们对数据科学的组成有着固有的偏见。
这篇文章是关于理解数据科学的重要性。
选择
要说商业中的数据科学,我首先要说一下《抉择》。
我倾向于将好的企业视为做出好选择的企业。例如:
- 对于一个 风险管理 公司来说,选择是对一张卡采取行动/不采取行动。
- 对于一家营销公司来说,选择的是运用正确的广告策略。
- 对于一个 电子零售连锁 来说,选择是向其在线用户展示相关产品。
- 对于一家航空公司来说,选择的就是机票定价策略。**
那么企业如何做出这些选择呢?
凭直觉?大概是的。
但是,如果他们能从过去吸取教训,不再一次又一次地犯同样的错误,那不是更好吗?
这有意义吗?
这就是数据科学。
大多数时候,人们会争论各种各样的问题,比如:
- 数据科学只是创造模型吗?
- 你会把 excel 数据透视表称为数据科学吗?
- ETL 呢。那是数据科学吗?
- Web 框架/门户的数据可视化怎么样?
- 假设检验。那还是数据科学吗?
我的答案很简单:
任何有价值的观察结果都是数据科学,这些观察结果可以从仅仅观察几行数据而不能直接看到的数据中得出。
您可以使用任何工具、任何模型或任何可视化界面。
只要它没有对商业选择进行排名,它就没有价值。
或者,你可以使用任何工具/模型/可视化,只要它能从数据中产生价值,它就是数据科学。
那么,数据科学是正在消亡还是只是一种时尚?
我对数据科学非常乐观,因为从过去学习对于公司保持竞争力变得非常重要。
在我看来,总会缺少这样的人,他们能够与数据角力,亲自动手找出有价值的见解。
游戏将会是:谁更好地使用他们的数据?
像谷歌、亚马逊这样的公司之所以如此之大,是基于它们处理数据的方式。
目前,必应在搜索广告业务上远远落后于谷歌。这是为什么呢?
因为谷歌更好地利用了它的数据。
虽然现在两名博士生即使创造出最好的搜索算法,也无法在游戏中击败谷歌,但像 Bing 这样的公司会一直寻找这种最好的算法,并一直寻找能够很好地利用数据的人才。
结论
那么,为什么数据科学被低估了呢?而这种悲观情绪从何而来?
人们低估数据科学重要性的主要原因是因为它在许多情况下不可量化。
作为一个 知识发现过程 ,它是高度间歇的,你可能不得不等待甚至一个单一的答案。
这导致一些人将它标记为一个研究问题,不值得它得到所有的赞赏。
但是正如我所说的,这完全是关于“选择”。
如果你做不到,你的竞争对手就会做到。
如果你想了解更多关于数据科学的知识,我想调出吴恩达的这本 精品课程 。这是我开始的原因。一定要去看看。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。关注我的 媒体 或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
数据科学?敏捷?周期?我管理高科技行业数据科学项目的方法。
原文:https://towardsdatascience.com/data-science-agile-cycles-my-method-for-managing-data-science-projects-in-the-hi-tech-industry-b289e8a72818?source=collection_archive---------3-----------------------
The Austrian Alps
揭开数据科学研究项目管理的神秘面纱
敏捷软件开发已经接管了高科技产业。无论是以 Scrum、看板还是 Scrumban 的形式实现,这些方法都是为了保持灵活性,允许在短周期内快速改变。虽然这些实现非常适合开发,但它们在某些方面与研究相冲突,因此为了在研究中保持敏捷,我们需要调整敏捷的核心价值,并将它们与研究方法相协调,例如,创建一个使用敏捷价值和思想但面向研究的工作实现。下面是我开发的一个方法,它是基于我管理一个数据科学研究团队的个人经验,并且经过了多个项目的测试。在接下来的部分中,我将从时间的角度回顾不同类型的研究,比较开发和研究工作流方法,最后提出我的工作方法。
研究类型
我们通常会遇到三种类型的研究:
- 在学术界和 IBM 或 FACEBOOK 等公司进行长期研究,即推进科学或技术的研究。
- 中期,即在不久的将来对贵公司有贡献的战略项目。
- 短期项目,即公司产品的特性、客户项目、内部项目,如可重用 API 或 POC。
短期或中期项目,在我看来,适用于任何与学术界或公司相关的项目有一定的亲和力,旨在创建一种新颖的算法或实现一种新功能,但有时间,资源或资金等行业限制的项目。相比之下,行业内的长期研究通常是最让人害怕的(虽然也有例外)。例如,在许多面试中,作为一名博士毕业生,我被问及是否可以在一家快节奏的初创公司工作,并在短期内取得成果。
开发和研究的主要区别
让我们比较一下这两个领域的开发工作流程。
编程 :在软件开发中,你将代码组织成函数、类(即面向对象编程),可能会用到设计模式等。你试图设计一个清晰的、可重用的、将来易于维护的通用架构。在研究中,这个过程可以比作原型阶段,我们需要很大的灵活性,这允许我们尽可能快地尝试许多想法。对于我和其他人来说,这可以归结为使用“笔记本”——一种交互式 python 环境,通过划分某些代码块并保持持久内存,它允许您比传统 ide 更快地原型化。如果没有必要,我们不必重新加载巨大的变量或重新计算算法,我们可以从先前的阶段继续工作。在笔记本上编程可以比作使用一个分成几个单元的大“主”,每个单元充当一个功能。传统的编程 ide 也与持久内存不兼容,想象一下当试图调试某个算法时试图读取一个巨大的数据集。
:调试过程有完善的工具,您可以轻松地在函数和类中逐行调试。在传统的 ide 中,当您重新启动调试过程时,您不得不重新加载您的数据集并浪费宝贵的时间,而在笔记本中,数据集是持久的,并在整个持续时间内保存在内存中(只要内核没有被重置)。在笔记本中,调试过程包括使用 print()。因此,调试阶段真的非常简单。最终,当算法完成时,我们使用传统的软件开发工具(如 PyCharm)使用 OOP、设计模式对其进行重构,最后我们编写输入输出测试。
时间和进度管理 :在敏捷的常见实现中,每个项目都被分解成许多小的可交付任务,这些任务给出了一个短期的估计。交付物被分组为周期。这些小任务由团队成员拉动直到完成,试图完成所有任务直到循环结束。周期每 X 周重置一次。一般来说,研究任务比较长,并且不总是与短周期方法相一致。例如,当我们启动一个模型时,可能需要几个星期才能得到梦寐以求的准确性度量。然而,这并不意味着我们在这几周内看不到其他方面的可衡量的结果,例如,特征与目标变量之间的相关性等。
既然我们已经讨论了软件开发和研究之间的一些主要差异,那么让我们来谈谈我的敏捷研究管理方法,看看我是如何尝试解决这些问题的。
我的研究管理方法
在研究中,我们关注产品需求,分配功能,思考可能的算法解决方案,定义目标和 KPI。事实是,我们没有一条通往那个目标的清晰的道路,换句话说,我们不知道完成任务的确切道路是什么。算法开发不仅仅是生产,它更多的是关于理解问题、评估选项、验证等等。在实践中,我们基于直觉和经验测试许多不同的假设和想法,有些可能有帮助,有些可能没有。
我们首先为一个项目确定一个合理的最后期限,不管是两周、一个月还是更长,基本上是你根据经验或猜测认为需要的时间。不同项目之间的期限不一致,因此很难放在严格的周期中。重要的是要记住,这些截止日期可能会改变,项目可能会延长或提前结束。
我将每个项目分成六个基本阶段(图 1。),这允许我根据上下文对子任务进行分组。下面列出的六个基本阶段在图 1 中可以看作是吉拉板。
Figure 1: the six stages of an applied-research or data-science project
项目阶段:
1.文献评论
2.数据探索
3.算法开发
4.结果分析
5.回顾
6.部署
使用阶段方法,项目可以在各个阶段之间来回切换,直到完成(图 2 中的蓝色和绿色箭头)。例如,我们完成了算法的编写,在“结果分析”阶段,我们发现我们需要返回并改变一个核心特征工程思想,项目将返回到“数据探索”并再次经历算法和结果分析阶段。
Figure2: the six stages of an applied-research or data-science project overlaid on a Jira board. Showcasing the main idea that a project can move to a different stage, either forward or backwards.
在每个阶段,我都会创造尽可能多的想法、假设或任务,也就是可交付成果。例如,在“文献综述”阶段,你可能有几个任务,比如寻找关于 Github.com 的论文,或者试图寻找关于 Medium.com 的相关文章。在“数据探索”阶段,您可能会探索特征工程、选择或目前可用的所有嵌入方法,从 word2vec、phrase2vec、sent2vec 到 Elmo、Bert 等。在“算法”阶段,我们可以测试几种经典的机器学习算法,尝试一些神经网络思想(CNN、LSTM、双 GRU、多输入网络)、堆叠算法、集成等。在“结果分析”阶段,我们可以探索准确性、F1 等许多指标,通过查看内容来探索模型的正确性等。在“审查”阶段,团队成员审查我们的算法。最后,在“部署阶段”,我们将笔记本转换成一个清晰的基于类的 API,向 DevOps 团队公开 init()、train()、predict()、upload_model()和 download_model(),创建单元测试并以一个 Pip 包结束(我们正在使用 circleCI 和 Gemfury)。
我没有对每个可交付成果进行评估,因为这增加了计划开销,安装了我想要避免的僵化的工作计划,并破坏了研究过程中的创造性,即,我们不希望工作计划管理我们,我们希望管理工作计划。我希望我的团队探索在创意过程中出现和想到的不同解决方案,而不是拘泥于基本上只是愿望清单的预定计划。换句话说,来自过程的数据、结果和见解产生了许多优秀的想法,这些想法将允许我的团队解决新的业务问题。
最终,我们会探索许多可能引导我们实现目标的想法,然而,并不是每个阶段都必须完成所有任务,换句话说,如果我们对当前阶段感到满意,我们可以在没有完成所有其他任务的情况下进入下一阶段。另一方面,如果你对当前的计划不满意,你可以改变它,跳过或返回。
作为一个小团队经理,我不希望子任务管理带来的开销。为了管理这些子任务,我为吉拉使用了'智能清单'插件,如图 3 所示。任务列表包含在每个项目框中,适当的任务可以在 UI 中标记为“完成”或“进行中”,显然,您只能在项目框所在的阶段中处理子任务列表。随着你的团队的成长,你可能会有一个专门的人,他的工作是维护每个子任务的极端细节,你可能会觉得有必要使用吉拉的内置子任务管理,这给子任务管理增加了一些开销。我个人认为,我们的大部分子任务不需要被完整地跟踪,董事会视图应该尽可能地清晰和分组。
Figure 3: an example project with tasks in each one of the primary stages.
研究日报
项目管理不仅仅是一个管理委员会,每日例会也是项目管理的一个非常重要的方面。我的团队每天都有一个小时的会议,通常在早上,类似于开发,我们尝试头脑风暴,同步,谈论我们昨天做了什么,讨论我们陷入困境的问题,并谈论下一步。由于我们的谈话相对较长,我发现每天坐下来谈比每天站着谈更合适,也就是说,舒服地坐在沙发上谈论算法细节更有益。这让我们能够分享想法,发挥创造力,不断改进,而无需在周期结束时等待反馈。
调研工作流程:
以下概述了我的研究工作流程方法
- 交换周期-方法学,每个项目都有合理的期限,符合项目的期望、目标和 KPI。
- 承认项目在其生命周期中存在几个阶段。
- 承认一个项目可以暂时回到以前的阶段,以便尝试更多的想法。
- 将每个项目分解成基于阶段的可交付成果。
- 为每个阶段分配一个软期限。
- 承认你的可交付成果列表不需要作为一个整体来完成,可交付成果可以在整个项目中添加,这会影响最后期限。
- 在每一个阶段,首先选择要完成的最佳交付物,当满意时,进入研究的下一阶段。
- 重复清洗漂洗。
版本开发
下面简单讨论一下算法开发版本。我通常试图达到项目目标和 KPI,但是一个足够好的算法总是比没有好。因此,建议创建一个最小可行产品(MVP ),完成流程,将其投入生产,然后决定下一版本的未来目标,这些目标可能来自您的产品部门、结果分析阶段或您未完成的工作计划,如图 4 所示。
Figure 4: a flow-chart representing version development while utilizing the research-stage-methodology workflow.
希望您可以采用或使用这里提到的一些想法来管理数据科学研究项目。请记住,要使这种方法奏效,您的公司必须明白研究是一个不确定的过程,有些结果无法保证,但使用正确的项目管理方法,可以成功地控制该过程,以实现我们的目标。最后,如果你对从产品设计到模型完成和维护的项目工作流程感兴趣,Shay Palachy 写了一篇优秀的帖子。
我要感谢(按字母顺序)Alon Nisser、Guy Nesher、Ido Ivri、Kobi Hikri、Moshe Hadad、Netanel Davidovitz、Samuel Jefroykin、Simon Reisman 对敏捷方法的宝贵见解、评论、校对和评论。
Ori Cohen 拥有计算机科学博士学位,专注于机器学习。他在 Zencity.io 领导数据科学团队,试图积极影响市民生活。
数据科学是科学吗?
原文:https://towardsdatascience.com/data-science-and-ai-for-business-data-analysts-64f28a5d7ff2?source=collection_archive---------8-----------------------
对你的第一个数据科学项目有什么期望?希望涉足数据科学和人工智能的企业指南。第一部分
任何成功的商业数据科学项目都是数据科学家、商业利益相关者、商业专家和其他各方成功合作的结果。最近,有一些关于数据科学家如何变得更加面向业务以更有效地解决业务问题的文章。但没有多少帖子涉及合作的另一面,帮助企业为数据科学和人工智能项目做好准备,我认为这同样重要。
这篇文章是对商业人士——领域专家、项目经理和利益相关者——的数据科学和人工智能的非技术性概念介绍。与解释数据科学、人工智能或机器学习的一些部分的许多其他非技术文章不同,这一系列文章只提供了一小部分图片,将提供数据科学在商业数据分析领域的位置的直升机(甚至卫星)视图。
我目前工作的很大一部分是在商业中寻找数据科学和人工智能的机会。当我开始任何关于数据科学和人工智能的对话时,我面临的最大问题是与不是数据科学家的商业人士进行交流。不是因为我使用数据科学术语,而是因为我的正常语言没有被理解成我想要的方式。我花了一些时间才意识到,这是因为人们为了填补理解上的空白而做出的假设。
炒作只会让事情变得更糟:每个人都在某个地方听说过数据科学或人工智能,最有可能的是从一篇描述谷歌、亚马逊或脸书发明的一个新的很酷的东西的文章中。这些文章向读者灌输诸如数据科学、人工智能、机器学习和所有其他“知识”等时髦词汇,却不解释它们是什么。在这种情况下,人们不得不做出自己的假设来填补这些空白,以在脑海中构建一幅画面。
这些假设将任何关于数据科学或人工智能解决方案的建设性对话变成了数据科学家行走的雷区,他们永远无法确保人们正确理解他/她,而不是以他们自己的方式。
在项目后期,参加启动会议的 5 个人可能会对项目有 5 种不同的理解。这不仅会认为任何项目都会失败,还会给企业和数据科学家带来很多挫折。双方都将学会在未来远离对方,以避免进一步的失败,并遗憾地错过这次富有成效的合作可能带来的机会。
这就是为什么我从一个快速教育课程开始与新业务人员谈论数据科学机会,这个课程是基于我在过去两年中开发的系统。它旨在通过填补典型的理解差距和解释常见的误解,为未来关于人工智能和数据科学机会的对话奠定坚实的基础。该系统基于我在商业智能和数据科学咨询领域多年来与业务分析师、项目经理和主管进行的大量项目和对话。
我发现这种方法在实践中非常有效——只需花几个小时参加一个教育研讨会,我就可以实现多个目标:大幅降低误解带来的风险,减少人们因感知到来自人工智能的威胁而对工作安全的焦虑,并且它还有助于启发他们自己的思考,有时甚至达到他们自己为自己的企业找到人工智能机会的水平!
这篇文章是我将要写的少数几篇涉及这个系统的文章之一。虽然任何人都可以发现它很有用,但它是为从事商业数据分析的人设计的,他们希望探索数据科学和人工智能的机会。它基于对传统业务数据分析和数据科学的比较,并解释了以下问题:它们如何以及为什么不同,任何数据科学项目的特定风险是什么,如何最小化这些风险,以及什么使数据科学项目成功。
我从一个略带哲理的问题开始这一系列的文章:
数据科学是科学吗?
TLDR:是的,就是它!阅读下面为什么
根据维基百科的说法,科学是一项系统工程,它以可检验的解释和对宇宙的预测的形式构建和组织知识。这个定义有点枯燥,我没有在我的演讲中使用它,相反,我从我所谓的“知识的大公式”开始:
我们的知识让我们了解周围的生活并做出预测。我们充满了这方面的知识:我们知道让我们交流的语言,我们有让我们理解和影响他人的社交技能,我们知道帮助我们安全驾驶的交通规则等等。想象一下,如果没有这些知识,我们的生活会是什么样子——正确,一片混乱,从上面的公式中随机未知。我们将无法交流和预测其他人,驾驶汽车将是在玩俄罗斯轮盘赌。上述公式表明,我们知道的越多,我们面临的随机未知就越少,反之亦然:我们知道的越少,随机未知的空间就越大。
与未知生活在一起是不舒服的,这就是为什么我们自然地想要任何事情的解释,我们想要了解我们周围的任何事情。我们想要足以解释事物的知识,而不一定是科学知识——任何有助于解释和预测作品的知识,包括宗教或超自然的。我们寻找答案的集体努力得到了回报——大多数时候我们生活在一个舒适区,在这里我们的知识为我们提供了相对较好的服务,我们可以安全地忽略上述等式中的随机未知,并相信:
并不是所有人都喜欢舒适,有些人花更多的时间在舒适区之外,更多地与未知打交道——他们是科学家、探险家、实验者。他们的目标是让未知变得已知,让我们的生活更加安全、舒适和有趣。
过去,我的博士论文是根据一项名为“科学价值”的标准进行评估的——这是一个条件,确认相同的工作以前没有做过,可能的结果有价值。用上面的公式来说,这意味着我的论文不得不处理一些令人烦恼的未知,使之成为有价值的已知。
A Monument of the Discoveries (Padrão dos Descobrimentos) in Lisbon. The figure with the ship in his hands is Henry the Navigator, a Portuguese Prince who is regarded as the main initiator of what would be known as the Age of Discovery, which changed the world at a much bigger scale than the Romans before. The other figures are famous Portuguese navigators, artists, writers and scientists of that time. They all did not prefer comfort.
你现在可能知道我要去哪里了。数据科学处理现实生活中的数据,其目标是建立一个数据模型,尽可能好地解释数据,并能够对新数据做出准确的判断(预测)。不正确的预测称为预测误差,是随机的,它们的数量表明模型对真实数据的解释有多好。说到这里,我可以把“知识的宏大公式”漂亮地应用到数据科学中:
现在我可以回答题目问题了:“数据科学是科学吗?”是的,它是!像其他科学一样,它发现以前未知的事实,它使用系统的方法,它创造可重复的结果。换句话说,它具有科学的所有属性。
与物理学等其他科学相比,数据科学并不直接解释现实生活中的过程,而是通过这些过程产生的数据来解释。这就是数据科学的特殊之处——它可以用相同的方法解释不同性质的过程,只要这些过程产生数据。如果你在 Kaggle 上查看数据科学竞赛历史,你可以找到从社会科学到核物理的任何类型的问题。这些问题都可以用数据科学来解决!魔法?不,这只是因为数据科学使用了一种独特的方法——它通过这个过程产生的数据,从过程的本质中抽象出自己。例如,为了预测掷硬币的结果,数据科学不会关心硬币的形状或质量、施加到硬币上的力、地球引力等。相反,它会根据硬币产生的数据做出预测。为了获得这些数据,人们只需要多次投掷硬币并记下结果。
您可能想知道数据科学与统计学(一个成熟的数学子领域)有何不同?这是一个非常有争议的问题,还没有被数据科学家和统计学家回答和接受。只有观点,我也有观点。从上面的公式来看,没有什么不同——它们都是一样的。对我来说,主要的区别在于他们是如何做的。
数据科学是为了应对现代数字时代的新数据挑战而诞生的:我们现在拥有的数据比过去的统计学家多得多,对实用数据研究的需求在过去几十年中呈指数级增长。人类现在每天产生的所有 Pb 级数据并没有放在那里,随时可以拿来用来构建模型。不幸的是,所有这些数据通常分散在不同的数据库、应用程序和系统中,每个都可能有自己复杂的接口。最重要的是,该行业现在不仅期待数据建模的结果和一些结论,他们现在还期待数据产品——一种能够带来收益和投资回报的应用程序。所有这些新的挑战需要一套非常广泛的技术技能,这是统计学家以前所没有的。
另一方面,有了大量的可用数据,数据科学通常不会面临统计学特有的挑战:从微小的数据样本中对大事情做出判断。这是一个非常困难的挑战,需要很高的数学和统计技能。如今,当脸书覆盖了北美 72%的人口,并且大多数数据科学家可以访问可能可用的高达 100%的数据时,在真实数据上验证模型要比花费时间开发完美的理论模型容易得多。因此,实用数据科学确实需要良好的统计专业知识,但通常不要求数据科学家成为顶级统计专家。
我相信,数据科学不仅仅是统计学的一个新的花哨名称,它是一个完全现代化的统计学,配得上它自己的名字。
早期采用的问题
感谢科技巨头,通过社交媒体、移动和智能设备以及物联网的发展,数据科学和人工智能已经成为我们个人生活的一部分。相比之下,企业总体上刚刚开始探索数据科学和人工智能的商业潜力。但不幸的是,进展并不顺利——大多数项目都没有超过概念验证阶段。关于有多少数据科学项目失败,目前还没有公布的数字,但对于以前技术炒作的项目,有一个类似的衡量标准——大数据。根据 Gartner 的数据,他们的失败率可能高达 85%。我敢肯定,对于 AI 和数据科学项目来说,这个数字更糟糕。
大公司早期商业采用数据科学缺乏成功的原因有很多,但大多数都源于对数据科学概念的误解:它有什么用途,它与熟悉的事物有何不同,以及如何使用它。例如,商业数据分析人员中的一个典型误解是,数据科学只是“类固醇上的 BI”,它是更聪明地工作的相同的旧商业智能。仅仅是这种误解就会认为数据科学项目失败,因为它产生了一种错误的信念,认为旧的商业智能框架同样适用于数据科学。他们需要做的只是将数据科学家融入其中。如果他们知道这是多么错误,他们根本不会开始一个项目!
在接下来的两部分中,我将探索数据科学的概念及其在商业环境中的应用。在下一部分,“数据科学是不是一种兴奋剂?”,将触及数据科学与商业智能的根本区别,商业智能是企业已经使用多年的传统数据分析方法。它还将解释将在第三部分“如何从数据科学项目中获益?”中使用的概念。
所以很快就要注意新零件了…
我已经在商业数据分析领域工作了超过 13 年,经历了从一名普通的商业智能开发人员到一名人工智能研究人员、开发人员和传播者的旅程。
你可以在 LinkedIn 上找到我
数据科学和人工智能——概述
原文:https://towardsdatascience.com/data-science-and-ai-for-good-an-overview-577c9c2a3dcb?source=collection_archive---------18-----------------------
Taken from: https://www.flickr.com/photos/itupictures/39621400230
思维导图把 AI 换成好的动作
更新 2:数字知识园 已在 本帖 中介绍,包含大量 AI、ML、数据科学方面的资源。
update 1:新版 的 AI for good 思维导图现存放在我的 数字知识花园 中,并将定期更新。**
TL; 闭嘴博士,带我去看 思维导图 !
https://carlgogo.github.io/AI4G_mindmap/
就技术发展而言,人类正在到达一个转折点。与此同时,我们正在重新评估我们在地球上的位置,并重新思考如何建立一个更加公平的社会。人工智能(人工智能、机器学习、统计学习或你想怎么称呼它)能用来应对社会和环境挑战吗?是的,绝对的。事实上,用于在电子商务网站上推荐产品或选择显示给你的广告的相同算法可以应用于解决真实的人类问题。所有数据科学家,从有抱负的科学家到研究人员,都有机会(甚至有责任)利用当前的数据革命来改善我们的世界。
但让我们明确一点,这是一项复杂的工作,需要跨学科和多部门的合作,涉及政府、非政府组织、私人组织和学术界。否则,我们将很容易陷入人工智能的炒作,而不是将其理解为一种增强我们能力的工具。只有通过研究和对各自问题领域的深入理解支持的解决方案才是稳健的(记住科学方法)并且长期有效的。
它需要跨学科和多部门的合作,涉及政府、非政府组织、私人组织和学术界,以善用人工智能。
但是学术研究是将人工智能用于好的方面的唯一方法吗?作为数据科学家,我们该如何提供帮助?我最初的冲动是浏览网页,寻找现有的倡议。这个浏览网页的练习比最初计划的要严肃一些(反正外面很冷)。事实证明,有许多有爱心的人和伟大的倡议以某种方式与数据科学和 AI for good 运动相关。这非常令人鼓舞,但仍有许多工作要做!
思维导图人工智能的良好运动
我开始使用思维导图已经有几年了。它们是知识管理和共享的强大工具。我准备了数据科学和 AI for good 思维导图来收集我的发现。它旨在概述世界各地现有的“为善”的倡议,从组织和训练营到初创企业的种子资金机会。这个思维导图由两个令人惊叹的开源软件驱动:TiddlyWiki 和它的扩展。TiddlyWiki + TiddlyMap 组合允许用 JavaScript 创建带有集成概念图的交互式 Wiki。此外,该应用程序可以作为单个 HTML 文件使用,可以方便地托管在 GitHub 页面上。
Double click on a node to display (on the left panel) relevant links and a short description.
事不宜迟,数据科学与 AI for good 思维导图可以在这里找到。在右侧面板中,您将找到地图本身(选择地图选项卡),左侧是与每个主题或节点相关的内容。双击打开一个节点。实时选项卡提供了一个不那么杂乱的地图视图,因此您可能会发现它更容易导航。
不管你处于职业生涯的哪个阶段,也不管你愿意投入多少时间,你都会找到有用的资源。例如,如果你只是在寻找灵感和有趣的阅读,就去根节点。子节点(深绿色的节点)涵盖以下主题:
- 挑战和竞赛:包含关于个人项目、黑客马拉松和数据挑战的信息,您可以在周末进行(提高数据技能的最佳方式!),
- 训练营和奖学金:为渴望在从事具有社会影响的项目的同时学习数据科学的学生提供的资源。这些实习通常持续 2-3 个月,
- 事件:链接一些相关学术会议和聚会的部分,
- 倡议:这个节点列出了科技公司的倡议。它的子节点指向社区、多部门网络和其他旨在用人工智能应对世界挑战的努力,
- 组织:通向机构和组织。对于那些寻找志愿服务或咨询机会的人来说,这可能很有趣,
- 企业家精神:这个节点指向为致力于社会公益或环保事业的人工智能/科技初创公司提供机会。
既然您已经知道了利用数据和技术服务于公共利益的不同方式,那么您还在等什么呢?我已经为未来几个月挑选了几个项目。如果您知道任何缺少的、值得添加的资源,请通过电子邮件或使用相应 GitHub 资源库的问题部分联系我们。
PS:一个类似的 TW+TM web 应用程序正在准备中,它有一个更大的思维导图,探索人工智能和数据科学的前景,充满了免费和有价值的资源。敬请期待!
原帖:https://carlgogo.github.io/ai4good_mindmap/
数据科学和人工智能:在不久的将来释放最好的角色
原文:https://towardsdatascience.com/data-science-and-artificial-intelligence-unlocking-the-best-roles-in-near-future-5ef0ace4e80c?source=collection_archive---------22-----------------------
"将数据科学和人工智能的力量带给每个企业"
数据科学和人工智能是 2019 年每篇文章的“趋势话题”,这是理所当然的。这很像互联网作为游戏改变者出现在每个人的生活中。人工智能和数据科学已经准备好改变我们多年前无法想象的生活。
让我们更深入地了解他们在不久的将来会提供什么。
但是在我们进入未来之前,最好理解这些术语。
让我们开始吧。
什么是数据科学和人工智能?
一个针对存在物的流线型解决流程就是人工智能。它允许软件在没有明确编程的情况下执行任务。包括神经网络和深度学习。更大的概念是,机器可以执行我们认为的职责。
此外,结合领域经验、编程能力以及数学和统计知识以从数据中获得重要见解的科学研究领域被定义为数据科学。除了其他实验类型,数据科学还需要观察、问题、假设、测试、结果分析和实际建议。
为什么 AI 和数据科学很重要?
鉴于可获取信息的数量和种类不断增加,对计算机处理的需求变得至关重要,以提供深入、廉价和易于获取的信息。在人工智能和数据科学的帮助下,可以分析更大、更复杂信息的模型可以自动自动化,以返回更快、更精确的结果。
数据科学很重要,因为公司的问题可以解决。当你和政府认识到这一点,你就走上了正确的道路。很多时候,公司希望学习机器和大数据项目,而不考虑它们真正在做什么。如果你想让你的信息研究者成功,把问题介绍给他们——让他们开发替代方案。简单地建立一个机器学习项目不会想被告知。知道最终目标是什么是至关重要的。
人工智能很重要,因为它们足以有效地减少不同领域的人力。他们中的许多人使用人工智能在该部门进行多项操作,创造出定期进行多项操作的机械奴隶。人工智能的应用有助于使工作更快,结果更精确。人工智能背后的主要原因是无错误和有效的世界。即使在创造今天的移动应用的同时,人工智能也发挥着重要作用。此外,近年来许多行业已经开始使用人工智能技术来减少人类的努力,并实现更有效和更快的结果。
********
谁在使用这些技术?
- 银行业
银行业总有欺诈的危险。监控金融市场,并帮助发现和减少滥用或不当行为。数据科学一直在帮助银行有效地集中资源,做出更明智的决策并提高效率。而 AI 一直在通过提供支持贷款和监管合规选择来帮助他们克服客户服务的传统障碍。
2。电子商务
数据科学通过捕捉和整合客户的网络行为及其生活事件,帮助电子商务企业更全面地了解客户,从而购买产品或服务,跟踪客户与各种渠道的互动等。而人工智能允许企业实时收集和研究信息,从而提高效率和公司竞争力。
3。金融
人工智能将引领下一场经济革命,从客户服务到风险管理。在金融领域,人工智能实现了流程自动化,并大幅降低了客户服务成本。虽然人工智能降低了金融服务的价格,但一方面,资金变得非常容易使用。而金融是数据中心。数据科学的早期消费者和先驱用于金融机构。在开发创新的 软件开发解决方案的领域 对于风险分析、客户管理、欺诈检测和算法交易,数据科学是常用的。
4。保健&健身
医药和健康是一个革命性的领域,为数据科学提供了有前途的替代方案。数据分析将医学推向了一个全新的水平,从计算机化到药物发现和遗传疾病的探索。医疗保健和数据科学通常由财务联系在一起,因为该行业正在使用大量信息来降低成本。尽管人工智能(IA)的变革力量在许多领域都产生了影响,但它对真正改变生活的一个领域——医疗保健——产生了影响。人工智能应用正在彻底改变医疗行业的运营方式,以降低支出并改善患者效果,从医院护理到临床研究,药物开发和保险。
5。保险
从欺诈检测到增加客户体验,专家预测,下一世纪任何重大的保险选择都可能得到人工智能的支持。此外,随着繁琐和劳动密集型公司程序的自动化,保险公司将能够提高销售额,腾出时间来处理使用人工智能的客户。而大数据分析使保险公司能够提高价格精确度,构建定制的商品和服务,识别欺诈,处理索赔,为最终客户创造价值,并帮助自动提高公司效率和盈利能力。
6。运输和运输
当客户收集更多互联设备或装置时,企业专注于利用这些装置产生的信息,在数据科学的帮助下改进实时消费者分析。然而,从独立汽车到智能道路,人工智能正在成为交通领域需要考虑的一个重要因素。
7。销售和营销
人工智能允许通过推动收入和定制客户体验来扩大营销人员的增长。精明的营销人员发现人工智能是一种非常强大的方法。它使他们能够通过个性化的、有针对性的信息(所有这些都是大规模的)来吸引受众,从而在自己的职位上脱颖而出。而使用数据科学,营销专业人员了解需要确定哪些营销策略对特定客户最有效。
数据科学的未来
对包含如此多不同学科的科学进行预测是非常困难的。这意味着你必须思考每个学科的当前趋势和前景。然而,数据科学以前和现在的状态应该作为预测数据科学未来的有用基础。因此,数据科学在过去和现在都主要集中在描述性分析上。换句话说, 数据科学的未来 取决于信息收集和过去发生的事情。
然而,专家们预计,由于技术的快速进步,未来将开发出更高级的分析,包括实时和预测分析。这些行业将再次对数据科学的面貌和目标产生重大影响。
作为数据科学的基本组成部分之一,机器学习预计也将发生巨大变化。数据科学家将不得不释放他们的创造力,利用不同的模式,而不是把他们的主要注意力放在这种教学机制上。虽然数据科学家的效率很高,但如果他们想在未来保持竞争力,并改变他们在机器学习中的实践方式,他们需要提高他们的效率。
如前所述,我们可以预期的未来和趋势并不容易预测,但一些研究人员认为,仅仅根据我们迄今为止对数据科学 未来趋势 的经验,未来几乎没有什么可做的。
- 首先,我们将看到新的信息源出现。物联网并不新鲜,但未来这种想法支持的机器之间的链接将导致跨电子设备的链接。如今,数据科学家使用点击流数据、购买数据和销售数据,但他们必须包括从不同的零售环境、制造流、办公室、汽车、员工等收集的数据。在不久的将来。
- 此外,今天的数据科学家使用的工具很可能变得更加先进,使复杂的任务变得更加简单。事实上,我们已经通过所谓的 BI 工具和开源库见证了这一点。许多算法必须从零开始创建。今天有现成的代码可以使这项工作变得更容易。随着技术的进步,即使是新的分析师也有望单独进行交叉验证和机器学习。
- 数据科学家和系统工程师之间合作水平的提高是另一件很可能在不久的将来发生的事情。这种合作的第一个例子被证明对公司的整体效率非常有用。
- 最后,数据科学家需要关注两项基本任务。首先是使用他们的领域和业务理解准备输入数据。第二,需要分析和解释工具产生的结果。
数据科学并不是一个新鲜的想法,但根据许多专业人士的说法,它现在变得越来越重要,并且在未来将变得更加重要。
人工智能的未来
科幻小说总是让人类着迷,试图重现一些最疯狂的科技想象。这种魅力源于机器人、智能机器、复杂软件、人工智能和神经网络,现在这些都已成为过去。从愿景到实际进展,我们走过了漫长的道路。正在慢慢塑造 人工智能未来的耐人寻味的科学技术。
然而,我们认为,当人工智能完全成型时,未来将变得更加宏伟。我们预见人工理解的未来不亚于最好的科幻电影。这里是人工智能的未来在你脑海中描绘出一个更好的形象。
- 关于自动驾驶汽车,我们已经听够了、读够了、看够了。我们已经经历了自动化运输的第一步,像特斯拉、谷歌、优步和其他自动驾驶汽车的技术猛犸象。虽然某些测试失败了,但乘坐自动驾驶汽车是成功的。我们将在《回到未来》的高速公路上看到复制品,政府巴士、小木屋甚至私人汽车都将实现无人驾驶和自动驾驶。智能汽车可以更精确地行驶在高速公路上,为更安全、更快捷、更经济的交通系统铺平道路。
- 今天,人们从事一些最危险的工作。我们下去,弄脏我们的手,冒着生命危险,从清理垃圾到救火和散发炸弹。在这些过程中,我们失去的生命数量也很大。在不久的将来,机器或机器人有望得到照顾。随着更多人工智能的发展和智能机器人的推出,人们可以取代它们从事世界上最危险的工作。这是我们期待自动化就业的唯一时刻。
- 我们中的一些人可能已经使用虚拟助手了。然而,随着技术的发展,我们可以期待技术成为私人助手和情感人。我们可以将机器人情绪化,并为它们提供人工智能、深度学习和神经网络的帮助,这是极其可行的。它们可以用于各种用途,比如招待、日托、老年人、文书工作以及许多其他用途。如今,许多企业都希望雇佣拥有人工智能专业知识的移动应用程序开发人员,因为他们希望将虚拟助手整合到他们的移动应用程序中。
- 数据是目前最强大的东西之一。作为人类,缺乏对现状及其影响的了解是我们对气候变化无能为力的原因之一。对于日常生活中的微小变化和行动对气候变化的影响,我们也知之甚少。这不是计算机的情况。随着物联网的发展和城镇变得智能化,我们可以大大减少我们日常使用自动化公用设施、家庭等造成的伤害。
结束了
所有这些听起来可能很遥远,但如果我们说人们已经开始密集地研究人工智能,你绝对不会相信。我们还远远没有看到超级智能机器人的第一个原型。机器可以通过访问数据和准确性让世界变得更美好。因此, 人工智能开发公司 应该做更多的研究,努力推出更多前沿的人工智能技术,让我们的生活变得更好、更轻松。你怎么想呢?你相信什么?在下面的评论框中提出你的想法。
世界上其他地方对 IT 专家和 软件开发公司 的需求一直很高,但在这样一个快速变化的行业中很难发现一个高度可靠和广泛的在线数据科学和人工智能公司。许多公司希望在这些领域提供出色的服务,需要在核心人工智能和数据科学技术方面进行充分的研究,并只雇佣专家开发人员。**
对于下一代程序员、工程师和开发人员来说,这些公司应该有意成为当前专业人员的起点和资源。
商业中的数据科学和数据可视化
原文:https://towardsdatascience.com/data-science-and-data-visualization-in-business-4fb336eab19a?source=collection_archive---------14-----------------------
寻找有用的数据通常从视觉开始。
数据可视化旨在为决策者提供知识和洞察力,以做出明智的决策。数据可视化有一个引人注目和鼓舞人心的目的。网络和新技术(如文档和数据库,如 Excel 和 Power BI)的使用使得可视化变得既重要又有吸引力。
Data Science and Data Visualization in Business.
使数据可视化
对于商业决策者来说,寻找有用的数据通常从视觉开始。但是,缺乏有效的工具来绘制数据图表并将其可视化,以满足分析师和决策者的需求。数据可视化是组织数据科学的重要组成部分之一。数据科学值得在当今竞争激烈的市场中使用。
今天,数据工具比 5 年前好得多,并且更广泛地为更广泛的受众所使用。因此,数据工具对于快速挖掘企业可用的大量数据,从而对未来的投资和决策做出准确而有用的决策至关重要。有许多供应商已经尽了最大努力来使数据科学工具和平台更加用户友好和业务就绪。虽然一些更知名的工具具有所有的功能,但还有一些其他工具可以从与某些数据分析工作流的集成或与其他 BI 应用程序的集成中受益。看一看一些数据可视化趋势将会引出其中的一些趋势。
数据可视化工具的产品线
在 20 世纪 80 年代早期,在 R 和 NumPy 出现之前,很难以集成的方式获得完整的数据可视化工具集。自从 R 和其他数值计算工具出现以来,现在出现了代表数据可视化解决方案开发的工具箱,如 Linux Data Studio、定制软件和专有解决方案,它们增强了某些业务和技术分析的功能和能力。
现在,我们有更多可用的工具,或者是编程语言形式的(特别是 Python 和 R ),或者是来自大型企业(Google、Microsoft)和小型创业公司的现成工具形式的。
数据是一种资源
数据是一种基础资源。它显示了你的业务的必要性,无论它是关于地图,收集客户名单或开发智能聊天机器人。它可以回答客户的问题,并提供有关解决方案的上下文指导。
然而,像这个概念一样,数据的使用也令人困惑。它可以用于不同的目的,只有少数企业做数据科学的权利。那么,在提高数据科学有效性的同时,您能做些什么呢?
首先尝试 3 个数据科学项目
在申请工作之前,一定要做好充分的准备。这适用于每个数据科学职位。然而,并不是所有的数据科学职位都使用相同的方法。对于在创业或企业中成功发展数据科学团队的雇主和申请人来说,这一点非常重要。每个公司都有自己的方式来解释他们认为对这个话题重要的一切。在这里,我将分享我对如何在公司中实施数据科学的想法和观点。我将用一些例子来结束我的发言。在这期间,你可以点击右边的“books”来下载本文中提到的数据手册。
如果你想从一些具体的事情开始,这里有三个给你的组织的想法。
#1 构建一个机器人
这不仅是可能的,而且是应该做的。作为营销人员,我们不仅仅是建立脸书的形象或背书。我们正试图吸引目标受众在线订购产品。事实上,我们希望创造真实的讨论。
要做到这一点,我们必须考虑到“实时”沟通正开始成为常态,大量的人使用社交媒体平台谈论实时信息。
因此,实时 bot 项目被视为一件好事。Bot 项目在我们的用户看来很可爱,很现实,但也扩大了我们的受众。
有许多不同种类的实时项目。我个人最喜欢的是在其他网站上发表评论或对照片发表评论,并给出机智有趣的回应,这与传统的网上评论不同。
请记住,机器人不是实时的,因为它们会不停地说话。
它也非常适合客户服务自动化。
#2.构建实时营销平台
了解用户的感受是一回事,但实施新的营销方案实际上是数据科学项目中最复杂的任务。
我们如何让我们的用户相信我们提供的东西有一些真正的价值(当然假设我们的产品很棒)?第一个问题是要确保用户确实点击了我们网站上有吸引力的价格。第二个问题是说服他们应该购买其他所有东西。第三个问题是让他们相信在我们的网站上购物实际上会让他们更快乐。
事实是,即使你只有很少的预算,也可以实现实时营销平台。你也可以改善你的营销计划,以优化你的效率,并增加转化率。
这都是关于聪明地使用数据。如果你对如何开始感到困惑,你可以继续 Fiverr 向专家提问,按小时雇佣他们来构建你的数据科学战略。
#3 适当的框架
数据收集是开始数据分析的关键,如果你还没有这样做,你一定要开始。数据将帮助您:
- 了解谁是你的客户
- 了解顾客的需求和行为
- 提高你的效率
- 专注于为您带来最大价值的东西,从而节省时间并增加利润
没有数据,你会对下一步该做什么和什么真正带来价值感到困惑。
结论
在您的企业中开始使用数据科学的最佳时机就是现在。网上有很多免费的资源可以让你快速入门,在尝试更多之前可以先测试几个选项。数据是一种资源,你应该用它来为自己造福。
如果你想了解更多关于在商业中使用数据科学的知识,请查看我在 T2 的 YouTube 课程
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
中东国家采用数据科学和机器学习
原文:https://towardsdatascience.com/data-science-and-machine-learning-adoption-in-middle-east-countries-clevered-a3d01229313f?source=collection_archive---------17-----------------------
市场趋势
最近,中东出现了一批来自国内和国际市场的投资,以促进他们在创新和技术进步方面的努力。
当亚马逊以大约 5.8 亿美元收购了一家地区性在线购物网站“Souq.com”时,它成为了中东地区科技行业和数字经济的一个里程碑。海湾合作委员会国家长期以来一直是头条新闻,他们在数字创新技术方面取得具体进展的意图显而易见,因为海湾国家将在 2019 年前部署 5G 网络(主要是商用 5G)。到 2025 年,5G 移动连接的比例将占中东国家的近 16%(领先于全球平均水平)。
在国内方面,投资兴趣正从散户转向科技,中东投资者支持科技。该地区对人工智能、虚拟现实、数字医疗和金融进步的兴趣日益浓厚,沙特阿拉伯的主要电信服务提供商 STC 推出了一只 5 亿美元的技术投资基金。沙特的公共投资基金发起了一个 930 亿美元的全球技术基金,日本软银、苹果、高通等投资者专门瞄准了人工智能和机器人领域。
政府积极参与标准化区块链,并在该地区使用加密货币,这不仅表明他们对采用新的和最新的全球趋势的认真态度。这进一步有助于弥合技能差距,这一直是中东国家投资者担心的一个原因。
从“智能城市”项目到引入“迪拜物联网战略”以开发物联网生态系统,并通过“数字财富计划”提高公众的生活水平,该地区将踏上一条稳定而充满动力的未来之路。
海湾合作委员会国家如何适应人工智能改革?
根据这份报告,该地区近年来在人工智能和云计算方面取得了巨大的增长。它预测,到 2030 年,人工智能将进一步推动阿联酋的国内生产总值增加 960 亿美元。
在过去的一年里,中东国家在人工智能应用的开发和使用方面呈现出快速增长。工作性质和技能要求的变化已经获得了关注和动力。IDC 和微软进行的一项研究表明,仅云计算一项就有可能在中东和北非的关键行业创造超过 50 万个就业岗位。这是一个巨大的数字,需要付出大量努力来弥补技能差距和管理工作转型。
今天,有些工作和职位是几年前没有人想象会存在的。随着人工智能的出现和数据科学的进步,就业的面貌发生了巨大的变化。让我们看看数据科学和创新技术如何带来新的机遇:
云&人工智能专家
预计到 2020 年,数据中心流量将增长 440%,中东地区的市场将受到其影响。这标志着云计算工作岗位的显著增长(2008 年至 2013 年期间,仅这一领域就增长了 1700%)。人工智能和机器学习技术的进步将进一步提高这一比例,如果技能差距得不到及时解决,可能会导致令人不安的结果。
在 Omar Bin Sultan Al Olama 的领导下,AI 国家部举办了一个“夏令营”,吸引了大约 3500 名学生,重点是建立知识转移和开发未来技术解决方案的能力。阿联酋在招聘方面保持领先的决心体现在其与微软合作的“一百万阿拉伯程序员”计划中。
这使中东地区踏上了一段非凡的旅程,并凸显了其即将到来的技术机遇。
大数据分析师
随着云计算解决方案的进步及其被接受,数据量以每年 40%的速度增长。这需要一批有处理如此大量数据的专业知识的人。
数据科学家连续 3 年被评为美国最佳工作,工作满意度为 4.2/5。
普华永道(PwC)的一份题为《技术突破的大趋势》(Megatrends in Technological breakthrough)的出版物关注的是 ME 如何应对熟练专业人士的困境,该出版物称,“85%的 CEO 认为技术变革是未来 5 年全球大趋势中最具变革性的”,但企业在创新和发展方面远远落后。此外,它强调迫切需要加快努力,为即将到来的全球工作多样化建立工作队。
新品种的工人
有些人担心这些前所未有的技术进步(例如自动化)将会扼杀大部分的工作机会,其他人看到了事情光明的一面,并相信一种新的工作机会将会在未来出现。当务之急是培养一种提高技能和终身学习的文化,这样员工就能提前为变革做好准备。
尽管中东已经提前为这些变化做好了准备,但在培养最低要求的熟练劳动力方面仍然落后。各行业已经采取积极措施,与一些主要的行业巨头合作解决这一问题,并制定发展技能提升和终身学习框架的战略。
GCC 行业如何变化并变得更加以数据为中心
中东的传统商业思维已经从石油、零售和房地产转向了 IT 和数字进步。通过在云、物联网和电子商务等领域的新投资、战略和产品,中东国家展示了他们在技术进步领域保持领先的诚意和奉献精神。通过设计高效的计划和集中资本投资,他们将拥抱人工智能和机器学习等新兴技术。
海湾合作委员会的行业正在从他们通常的行业转移,并将他们的投资转移到数据科学,人工智能和机器学习 R&D 和解决方案建设。
中东银行业正在使用预测数据分析来加强风险评估,通过了解市场状况来创造收入和建立新的企业。他们正在逐步设立首席数据官的职位,这让他们意识到数据是未来努力的关键资产。但是,这只是一个部门,其他部门如石油和天然气,旅游,制药等。纷纷效仿,联手进行大数据投资。无论是阿联酋能源部启动石油&天然气大数据项目还是利用技术来提高胰岛素产量(一家总部位于阿联酋的制药公司 Julphar 的成熟案例研究),数据都已成为成功的筹码。
与此同时,中东国家理解通过简化教育计划和举办各种意识营来激励青年(占 me 人口的大多数)和劳动力的必要性,以迎合不断变化的工作文化。
中东的组织如何采用和利用数据科学
企业使用技术作为市场差异化因素的一些主要例子有:
- 中东领先的电子商务市场中的第一家独角兽企业(市值超过 10 亿美元的初创企业)。它帮助 75,000 家中东企业 12 与以前从未接触过的客户建立了联系。
- 区域性在线私人汽车预订服务是另一个成功的例子。Careem 可以通过专注于 B2B 集成和预定等附加功能的本地化战略进行区域性竞争(与优步这样的全球巨头竞争),不仅包括他们的司机车队,还包括迪拜道路和运输管理局的出租车。
这为自动化以及它如何改变该地区的就业机会奠定了基础。根据该出版物,据估计,科威特几乎 40%的工作活动都可以实现自动化,这是该地区青年失业率居高不下的一个问题。
如果不积极处理,这可能导致主要部门的重大混乱,阻碍整体进步和经济。
该地区需要的一些主要技能如下:
- 统计分析
- 数据挖掘
- 算法设计者
- 数据科学家/分析师/架构师
- 用户界面设计者
世界经济论坛的“就业未来”分析发现,与 2015 年相比,到 2020 年,海湾合作委员会国家所有行业所需的核心技能将有 21%不同。
这些行业正在关注更新的视野,为了推动经济发展,他们需要能够以其多才多艺和学习热情应对压力并不断更新技能的专家。
组织使用数据科学增强能力的一个主要例子是:
Majid Al Futtaim: 该地区一家领先的综合生活方式提供商推出了一所分析学校&技术,以增强公司的分析能力,并向其员工传授数据分析的必要技能以及在各垂直行业实施这些技能的方法。
添加示例以设置上下文
关注技能发展的另一个例子,以及组织如何在地方一级优先考虑技能发展
GCC 政府如何使用数据科学机器学习和人工智能
随着该地区大多数政府对投资数字部门的紧迫性做出回应,很明显,中东明白能源部门将不再是他们的最佳选择。因此,他们正在教育部门和非能源部门进行大量投资,以开发和掌握“未来技能”。
通过精简工作和规范,政府致力于为现有劳动力和未来几代人提供支持系统和知识转移框架,以帮助他们熟悉最新趋势和技术进步。
根据埃森哲的研究,人工智能有潜力大幅提高该地区的经济增长率。阿联酋“人工智能战略”的推出进一步证实了中东对人工智能潜力的认可,这是一项提升各级政府绩效的重大举措。
这一承诺最明确的标志,至少在纸面上,是 NEOM——一个计划投资 5000 亿美元、占地 26500 平方公里的“大城市”:部分是科技和 R&D 中心,部分是国际贸易中心,部分是商业和先进制造业区。“一切都将与人工智能和物联网联系起来——一切都是如此,”萨勒曼王储说。
当世界上第一个,阿联酋授予一个名叫索菲亚的人形种族公民身份时,这一承诺就被签署了。
然而,政府对发展和满足需求的承诺是否足以推动增长和发展?
需要反复灌输提高技能和重新发现工作文化的需要。随着人工智能破坏后大多数现有工作的重塑,那些现在不行动的人将感到被遗忘,永远无法应对进步和变化。
因此,有必要孤注一掷地与工作和选择的未来做斗争。 如何?
通过培养数据科学、业务分析和预测建模方面的基本技能。45%的领导者认为,到 2020 年,这是所有人的“必备”技能。
重点必须是彻底理解数据科学、相关术语以及所有相关技术的基本原理。为了充分装备自己,渴望获得动力的人(专业人士、学生)必须尝试理解机器学习和人工智能的多个方面。最重要的是,他们必须明白提高技能和终身学习的重要性。
未来是前进和创新的步伐。今天,有各种各样的在线模块,甚至有面对面的指导计划,可以让你走上正轨,指引你朝着正确的方向前进。
在 Clevered,我们提供各种特别设计的训练营项目,以满足您的所有疑问和愿望。我们了解当前的需求,我们的主题专家致力于为您提供有能力的指导和知识,帮助您实现各自的抱负。
我们的,‘数据科学基础计划’和‘机器学习人工智能训练营’是由主题专家构思的。这些项目旨在传授数据科学的基本概念及其应用的智能,以解决商业问题。
Clevered 与学生建立的伙伴关系远远超出了他们的培训,帮助他们进行指导和业务拓展。
最初发表于【https://blog.clevered.com】。
2020 年数据科学和机器学习必读书籍
原文:https://towardsdatascience.com/data-science-and-machine-learning-must-read-books-for-2020-ca22df42b6c2?source=collection_archive---------30-----------------------
更好的编程建议
为下一个十年提高你的编码技能
Image by Jaz King available at Unsplash
未来十年的数据科学
2020 年即将到来,随之而来的是学习新事物、强化现有技能和发展新技能的许多机会。数据科学领域将继续扩展到新的领域;新的库、算法和分析工具将继续被开发;更多的数据科学家、数据分析师和机器学习职位空缺将继续在行业内出现;学术界将设计和提供新的专业和学术项目;越来越多的行业需要更多拥有编程、编码和分析技能的人来处理今天的大量数据,希望从中获得信息、知识、见解和智慧。
要做到这一点,人们必须开始熟悉基于他们兴趣领域的多种编程语言和软件。他们应该理解分析和机器学习算法背后的理论,以及它们的统计和数学基础。考虑到开源软件(例如 R、Python)的日益流行,拥有一个完善的学习计划对于真正掌握一门新的编程语言和软件变得至关重要。以下是对 R 感兴趣的新老程序员的数据科学和机器学习必读书籍清单,R 是一个用于统计计算和图形的免费软件环境。希望你觉得有用。
对于初学者:
Learning R
没有编程经验?没问题。学习 R 讲解如何用 R 语言和软件环境进行数据分析。这本书包含学习如何使用基本的 R 工具分析不同类型和结构的数据的教程,以及基本的编程概念。
Getting Started with R
学习一门全新的编程语言可能是一个缓慢(有时)令人沮丧的过程,尤其是当没有一个完善的学习计划和适当的资源和材料时。R 入门为初学者提供了一系列如何使用基本的统计、图形和回归来解决简单的 R 问题的方法。初次接触 R 软件的好书。
Graphing Data with R
在向经理和团队的其他成员传达结果时,有效的数据可视化是一项重要的任务。用 R 绘制数据图展示了如何创建各种有用的图表,用于可视化和分析科学、商业、媒体和许多其他领域的复杂数据。本书教授的方法有助于突出重要的关系和趋势,将数据简化为更简单的形式,并强调关键数字一目了然。
对于有一些经验的程序员:
Introduction to Machine Learning with R
近年来,机器学习已经成为学术界和专业人士的热门趋势。然而,乍一看,它可能看起来像一个令人生畏的主题,直到你知道它的基本原理。用 R 介绍机器学习有助于获得坚实的机器学习原理入门基础,包括机器学习模型、算法和数据训练。这本书介绍了简单的算法,如回归模型,一直到更高级的算法,如神经网络和基于树的方法。
Text Mining with R
当今的许多可用数据都是非结构化的,并且大量使用文本,这使得数据分析师需要应用特定的技术和工具来处理这些数据。带 R 的文本挖掘是一本学习自然语言处理(NLP)文本挖掘工具的好书。它演示了如何将文本数据作为数据框架来处理、总结和可视化来自文学、新闻和社交媒体的文本特征,以从中获得洞察力。
对于更有经验的程序员:
R for Data Science
未来十年,数据科学领域、算法和应用将继续大幅扩展,引领行业内最受欢迎的工作岗位和学术界的顶级学术项目。 R for Data Science 是一本学习如何将原始数据转化为见解、知识和理解的好书。这本书引导读者通过输入,争论,探索,建模和交流结果的步骤。本书中教授的 R 包集合旨在使数据科学变得快速、流畅和有趣。
Machine Learning for Hackers
期待机器学习更上一层楼?《黑客机器学习》是一本给对处理数据感兴趣的有经验的程序员的好书。这本书通过一系列实践案例研究,而不是传统的数学演示,为理解机器学习和统计工具提供了全面的解释。对任何背景的程序员都有好处,包括商业、政府和学术研究。
— —
如果你觉得这篇文章有用,欢迎在 GitHub 上下载我的个人代码。你也可以直接在 rsalaza4@binghamton.edu 给我发邮件,在LinkedIn上找到我。有兴趣了解工程领域的数据分析、数据科学和机器学习应用的更多信息吗?通过访问我的媒体 个人资料 来浏览我以前的文章。感谢阅读。
——罗伯特
数据科学和政治风险:关于特朗普、委内瑞拉、古巴、m .卢比奥,有哪些替代数据可以告诉我们
原文:https://towardsdatascience.com/data-science-and-political-risk-what-alternative-data-might-be-telling-us-about-trump-venezuela-f29e6a9e0cbf?source=collection_archive---------23-----------------------
For the Spanish version of this article, please click [here](http://bit.ly/2ERPyoV)
根据维基百科,替代数据是指用于获得对投资过程洞察的数据。对冲基金经理和投资公司内的其他机构投资专业人士经常使用这些数据集。
备选数据集可能包含关于特定公司或事件的信息,但并非特别由所述公司或事件本身产生,然而,由合格的定量分析师或数据科学家进行的数据分析可以提供关于投资机会的独特和及时的见解。
根据维基百科,政治风险是投资者、公司和政府面临的一种风险,即政治决策、事件或条件将显著影响商业行为者的盈利能力或给定经济行为的预期价值。政治风险可以通过合理的远见和投资来理解和管理。
实际上,在我的整个职业生涯中,我一直在为此目的使用替代数据,但从 1998 年开始更加强调这一点。
我希望这篇文章用一个简单(相对而言)但有趣的例子来说明,从 change.org(委内瑞拉临时总统胡安瓜伊多密切关注的组织)收集的具有政治倾向的数据集如何用于政治风险的原始量化(即波动性是否在增加?递减?稳定?),它与其他数据结合在一起可用于帮助决策过程。
Maduro’s socialist regime is losing support and running out of option. The chat shows number of signed “Pro-Maduro” and “Against Maduro” petitions in change.org since 2012, as compiled by impartial computer algorithms from thousands of online sources
委内瑞拉的情况正在分化美国和世界其他地区的公众舆论,但底线是“反对马杜罗”的激进主义正在战胜“支持马杜罗”的激进主义,这可以通过公正的算法来衡量。此外,特朗普政府显然是这一问题的关键决策者(不是中国,不是俄罗斯,也不是民主党),我将在下面说明这一点。
Joana Hausmann’s 6 minute tutorial: what’s happening in Venezuela
委内瑞拉的这个问题与我密切相关,因为我是受我出生国当前局势直接影响的许多人之一。我将尝试触及委内瑞拉背景下的替代数据和政治风险问题。
如果你已经知道那里发生了什么,你可以跳过下一部分,直接进入“结果可视化”部分。但是如果你需要一些背景信息,请阅读下面的部分。
此外,我发现一个很好的关于委内瑞拉局势的“教程”是 6 分钟 YouTube 视频,它是由委内瑞拉同胞、纽约人 Joana Hausmann 制作的,讲述了近年来的故事。
Illegitimate president Nicolas Maduro, kick starting his “Hands off Venezuela” campaign
关于委内瑞拉局势和我的特殊接触的背景资料
80 年代末,在美国繁荣的巅峰时期,我搬到了美国,几年后成为了美国公民。
自 80 年代末以来,委内瑞拉在许多方面逐渐恶化,从鼎盛时期的繁荣到现在的状况:一个充满腐败、贩毒、暴力犯罪、高通胀、饥饿等的国家。与此同时,该国已被证明是世界上石油储量最大的国家。多么讽刺。
Venezuela is top 3 country in the world with highest rate of intentional homicide as of 2016 according to the World Bank (#1 by 2018 according to my calculations)
1998 年,委内瑞拉军队的一名中校乌戈·查韦斯是当年委内瑞拉总统选举中的害群之马,挑战了两个主要政党,民主行动党和共和人民党。
这两个政党一直在分享权力,就像美国的共和党和民主党一样。
几年前,乌戈·查韦斯(Hugo Chávez)曾因组织了一场失败的血腥政变而被捕(后来被赦免),那场政变是他和一名名叫迪奥斯达多·卡韦略的军官等人一起组织的,目的是推翻委内瑞拉当时的合法总统卡洛斯·安德烈斯·佩雷斯。查韦斯失败了,他进了一段时间的监狱。
在他通过总统赦免出狱后,他成立了一个政党,PSUV 或“委内瑞拉联合社会党”,多年来,尼古拉斯·马杜罗、迪奥斯达多·卡韦略、拉斐尔·拉米雷斯(PDVSA 国家石油公司前总裁)和其他人都加入了该党,成为高级成员。
查韦斯不知从哪里得到了普通民众对他的社会主义理想的支持。一个挑战体制的“政治摇滚明星”,在委内瑞拉之外几乎无人知晓。
那时(1998 年),我在美国国际集团华尔街 72 号的风险金融部门工作。我是少数几个被聘用的定量分析师之一,利用金融分析和数据科学来研究替代数据,用于新产品开发,并帮助投资和保险承保经理的决策过程。AIG 真的在雇佣“火箭科学家”,他们是直接来自 NASA 的博士,他们中的一些人最终和我一起工作,还有你那些来自对冲基金和投资银行的“更传统的定量分析师”;工商管理硕士,工程和计算机科学背景。
AIG 持有大量委内瑞拉和 PDVSA 债务,委内瑞拉债券的价值以及 AIG 投资组合中的项目融资敞口存在很多不确定性。如果这个乌戈·查韦斯做了一些激进的事情,比如拖欠国家的所有债务,会怎么样?我们如何评估委内瑞拉的政治风险并据此调整我们的立场?
General Raul Salazar, Hugo Chávez first Minister of Defense, later removed due to difference of opinions with Chávez and Diosdado Cabello due to difference of opinions around relationships with the U.S. government
AIG 的一位高层人士知道我是委内瑞拉人,他漫不经心地问我,关于委内瑞拉的未偿债务,我对乌戈·查韦斯有什么看法。我说:“我没什么看法”。但后来我回答说:“我们为什么不直接问雨果·查韦斯呢?。这几乎是一项不可能完成的任务,因为在委内瑞拉以外没有人知道他是谁,也不知道如何接近他。
我获准在选举前接近雨果·查韦斯。通过家庭关系,我联系了委内瑞拉驻华盛顿的武官 Raul Salazar 将军,我认为他可能是最好的办法,因为我知道 Salazar 将军在委内瑞拉军事学院与查韦斯有过交往(我的预感是对的,Raul Salazar 将军后来成为查韦斯的第一任国防部长)。
萨拉扎将军是我和我妻子的朋友,几年前我们在华盛顿认识的。我做过一项非常有趣的咨询任务,涉及对委内瑞拉武装部队养老基金的蒙特卡洛模拟分析。我必须向委内瑞拉武装部队各军种的参谋长们展示结果,我还与萨拉扎将军建立了友谊。
无论如何,在要求与 Hugo Chávez 会面的两天内,Salazar 将军在加拉加斯安排了与 Chávez 及其团队的会面。这次会议在许多方面都很有趣。出席会议的有 AIG 的三位高管(包括我)、Hugo Chávez 和他的两位最亲密的合作者。
直到我遇见雨果·查韦斯的那天,我对他的看法一直很负面。亲自见到他并了解他的理想使我改变了对“司令官”的看法。我仍然认为他的直属团队是不合格的,但也觉得查韦斯的意图是好的;精力充沛、颇具魅力的理想主义者。
我承认:1998 年,我在委内瑞拉总统选举中投了当时的候选人乌戈·查韦斯的票。对大多数委内瑞拉人来说,他的社会主义思想看起来不错,他光明正大地赢得了第一次选举。
但我不知道(也不知道其他任何人)查韦斯及其亲信的意识形态已经被古巴***和卡斯特罗兄弟所塑造。
On the left is Raul Castro, center Rafael Ramirez, President of PDVSA from 2004–2014 and now Nicolas Maduro and the USA nemesis, and Diosdado Cabello, right.
时间快进许多年,我了解到查韦斯核心集团的人多次有意试图阻止公共管理的透明度。移动,例如:
- 通过法令,而不是公开招标,将石油权授予与他的意识形态相近的人。
- 有效解散 PDVSA 金融公司(国家石油公司的融资工具,允许他们获得廉价融资)以避免合规和监管监督。
- 将采矿权授予资金不足的“纸”公司,这些公司由与查韦斯意识形态结盟的人经营。
- 由前上尉、乌戈·查韦斯的前保镖亚历杭德罗·安德拉德经营的主权国家财富基金(FONDEN)人为操纵货币兑换以有利于某些实体。
The Chávez/Maduro’s regime is crumbling under its own weight
除了上述许多问题之外,多年来,有证据表明,对普通公民、记者和反对派政治家的镇压试图将查韦斯以及后来的马杜罗“社会主义政权”的负面影响公之于众。
现在,大多数委内瑞拉人后悔投票给他和他的失败的社会主义实验,这几乎使这个国家破产。该国希望变革,希望与传统盟友(查韦斯之前)建立更紧密的关系。
该政权与军队和警察的腐败、对政治对手的酷刑、操纵选举、援助恐怖组织、封锁新闻自由等联系在一起。
多年来,我一直想知道美国媒体在这些问题上有什么样的“沉默的阴谋”,因为猖獗的犯罪、酷刑、恐怖主义等新闻没有得到遏制。,从未登上美国主流媒体。
委内瑞拉的朋友和亲戚通过 YouTube、脸书等分享的视频。描绘了街头的法外处决,人们吃垃圾,人们在街头抗议中被活活烧死,委内瑞拉国民警卫队用中国制造的军车碾过并杀害人们,准军事组织用俄罗斯制造的武器杀害抗议者,等等。从未被主流媒体报道过。
但在最近 6 个月左右的时间里,几乎不可能在新闻中看不到任何与委内瑞拉有关的内容。每个人都有自己的看法。有什么变化?
Alexandria Ocasio-Cortez position about Venezuela
当然,美国政府显然不希望中国和俄罗斯出现在美国的后院,并且可以获得世界上最大的石油储备。这个问题很复杂,而且只是因为我个人不同意特朗普政府的一些问题;我不会反对他做的每一件事。
如果你问,90%的委内瑞拉人会说他们更喜欢美国作为商业伙伴,而不是中国或俄罗斯,或者更糟的是古巴。但如果你问与这个问题没有利害关系的人,他们大多会反对特朗普或没有意见,并声称正在发生的事情是美国的干涉主义、帝国主义,无论你想怎么称呼它。
Mexican American Journalist Jorge Ramos of Univision recently became part of the news, when he was detained by Maduro’s security staff and equipment confiscated. His crime was showing Maduro’s a video of Venezuelan people eating our of a garbage truck; which enraged Maduro and his staff. Jorge Ramos is a well known anti-Trump activist, but even Jorge Ramos is supporting what the Trump administration is doing in Venezuela.
就像 Joanna Hausmann 在她的视频中说的那样,“对话已经偏离了真正重要的东西,委内瑞拉人民”,这篇帖子的数据科学方面处理的是 内容理解 ,即量化人民谈论主题的集体声音;和对参与问题的各方的理解,以及他们的利害关系。
下面的方框中简要强调了如何将此用作投资决策 的 部分,因为该主题非常广泛,而且方法大多是专有的。
相比之下,这是我自 1998 年以来为许多大公司部署的更复杂模型的粗略版本,但原理是相同的。其中一些一般性的想法首先在我的创业公司“ttwick”中使用,在那里我能够为我的 R&D 中的一些新颖的机器学习算法申请专利(我的专利最终被对冲基金 Elliott Management Associates 收购,这是世界上最大的激进对冲基金,由亿万富翁慈善家保罗·辛格(Paul Singer)所有。)
Personally, I want things to change in Venezuela: free and transparent elections, just like the U.S. government is advocating. Recently, there have been large purchases of defaulted Venezuelan debt by a Connecticut based hedge fund (the country is behind on USD $10 billion of payments on bonds issued by the Chávez/Maduro regime).At this precise moment (March 4th, 2019), buying defaulted bonds looks like a very interesting and aggressive contrarian position, when most holders of Venezuelan debt are willing to offload their bonds for practically nothing. Is this a good indicator that change is about to happen? Are things in Venezuela reaching a break-point?This is the sort of things you can analyze for hedge funds and that present a great deal of opportunities for machine learning and artificial intelligence tools. If you look around, most finance related machine learning projects out there are just "financial technical analysis systems" rebranded as "artificial intelligence" by people with no domain expertise in finance. But the incorporation of automated news analysis, court fillings, people's opinions around key political issues, activism, etc. all have value when properly analyzed. And in my opinion, there is a much better "return" when used to analyze debt than equity.Anyway, since I still know a lot about what's going on in Venezuela from several traditional and non traditional sources, it looks to me that this Connecticut hedge fund might be making the right move.
在这篇文章中,我不会分析成千上万的来源,比如我过去运行的项目,等等。,但出于简单起见和时间限制,只有一个来源。从构思,到写代码,到画面可视化,到图表,到写这个故事,我不想花超过 4 个小时的时间。
我使用的来源是 change.org。
Change.org
根据他们的网站,Change.org 是世界上发展最快的社会变革平台,授权超过 2 亿人在他们的社区创造变革。
Change.org 的人们与决策者一起为影响他们生活的大大小小的问题寻找新的解决方案。据他们说,他们已经在 196 个国家赢得了 33,409 场胜利。
我选择这个网站,因为它或多或少以一种透明的方式捕捉到了像你我这样的人对一项事业的意图。
Change.org search. 297 results containing the word Venezuela. Examples of unstructured data in this page
然而,由于请愿书在这个网站上是非常自由的形式,所以需要做大量的自然语言处理来消除术语的歧义和组织数据。例如 UN = ONU(西班牙语中的 UN)。
此外,由于请愿书可以用任何语言书写,我们还有一个额外的挑战。该项目如下:
- 数据收集和清理
- 翻译和歧义消除
- 标记
- 形象化
当我在周末思考这个问题时,我了解到 Change.org 曾经有一个 API,但被弃用了。因此,除了编写一个 Python scrapper 和使用 BeautifulSoup,我没有别的方法来获取数据。
截止到 2019 年 3 月 2 日的经过清理和消歧的数据集就在这个 GitHub 库中,还有我写的 scraper,不言自明。
Python 美丽组码
下面,你可以找到 Python 代码。您可以运行它并传递 Python 字典以导入到 pandas 数据框中。
如果您知道一些基本 NLTK 和 SciKit 知识,您可以自己做分类器和消歧,我在这里不做介绍。
[## LMS anch/更改-搜索
一个美丽的网站 change.org 汤刮刀。为 lmsanch/change-search 开发做出贡献,创建一个…
github.com](https://github.com/lmsanch/change-search/blob/master/petition.py)
结果可视化
change.org 的相关请愿被分为“反对马杜罗”和“支持马杜罗”两类。由于语料库很小,手动标注是首选。例如,向"国际法院"提交的请愿书说"调查委内瑞拉 X 大屠杀",被归类为"反对马杜罗",因为它涉及对委内瑞拉司法系统缺乏信任等问题。
数量和时间序列
结果涵盖了从 2012 年 Q2 奥运会到现在的请愿活动。
Distribution of “Pro-Maduro” vs “Against Maduro”
如果我们看看分类请愿书的时间序列,就会发现另一种见解,即 2019 年出现了一股强大的“亲马杜罗”力量,这是自 2015 年 Q1 以来我们从未见过的。
Distribution of “Pro-Maduro” vs “Against Maduro” petitions over time
如果我们观察请愿和发起人(人和地点)的相对规模,我们会得到有趣的见解:
The petition with the most supporters in a petition “Against Maduro”, addressed to the International Court of Justice
如果我们“放大”到“支持马杜罗”的请愿书,我们会看到高度集中在一个人身上:
The largest petition does not have a valid originator, and the other ones are mostly originated by “Robert Naiman”, who does not sound like a Venezuelan name.
请愿书的来源
让我们来看一个包含“支持马杜罗”和“反对马杜罗”数据的汇总表。
Pro-Maduro Table
在 10 份“支持马杜罗”的请愿书中,我们看到最大的一份来自委内瑞拉,但发起人是匿名的。
I ask: What is somebody who specializes in Middle East issues doing in Venezuela? A data outlier
此外,我们看到,在剩余的 9 个签名中,有 3 个来自华盛顿特区,由一个叫“罗伯特·奈曼”的人发起,几乎占了我们在 2019 年看到的所有推送,此外还有“放开委内瑞拉”,只有 416 个签名,由美国的一个叫“亚历克斯·坎贝尔”的人发起。(关于马杜罗发起“放开委内瑞拉”运动的视频,请点击此处。)
在我看来,这些请愿书不是关于委内瑞拉问题的有机和真诚的请愿书,而是反特朗普的政治问题。
Upon further investigator, [Robert Naiman](https://www.justforeignpolicy.org/about/staff/) appears to be some sort of lobbyist based in Washington D.C. According to Wikipedia, "Robert Naiman is Policy Director at Just Foreign Policy and on the board of directors at progressive news organization Truthout. He has master's degrees in Economics and Mathematics from the University of Illinois. He writes on U.S. foreign policy at Huffington Post and is a frequent commentator on the region's events".
相比之下,“反对马杜罗”的请愿书看起来非常有机,主要由委内瑞拉和世界各地的委内瑞拉人发起。该表包含的条目比显示的多得多。
“Against Maduro” Table
“Against Maduro” petitions are mostly originated in Spain, Venezuela, the United States, Ecuador, Canada, and Trinidad and Tobago; while the “Pro-Maduro” petitions are mostly originated in Venezuela (anonymously) or in the United States via Robert Naiman
请愿的语气
鉴于我给自己设定的时间限制,这是一个有趣的探索方面。所以,我认为最简单的方法来产生一些知识,抓住请愿书的意义,是产生一个词,可以通过签名的数量来加权。虽然我可以使用定制的 python 代码来生成单词 cloud,但是我使用了这个服务。这些是步骤。
- 请愿的串联字符串标题乘以其相对频率的整数+ 1
- 消除停用词
- 删除“委内瑞拉”一词
- 词频高的封顶(试错),直到词云看起来没问题。
这就是结果。 犯罪、法庭、法律、 司法等。是“反对马杜罗”图表中最相关的术语。几乎所有的单词看起来都与我相关,但我注意到“大象”和“Ruperta”这两个词没有意义。但是进一步检查内容,现在它是有意义的(阅读下面的“其他”一节)。
Against Maduro Word Could: A cry for help evolving over time. Words such as Crimes, Help, ICJ, Justice, Court, UN, Legal, Starving stand out.
“Pro-Maduro” word cloud: avery authoritative “tone” concentrated in 2015 and 2019. Words such as Immediately, Must, Stop, Surrender, Executive, Congress, War, etc stand out.
请愿书是寄给谁的?
看起来美国在“支持马杜罗”和“反对马杜罗”方面有很大的分量,在下面的名字上有经典的帕累托分布。
Screenshot of Pandas groupby. Left, “Pro-Maduro” petitions. Right, “Against Maduro” petitions
According to my metrics, the “Against Maduro” weighted petitions were addressed to this group: ICJ, OAS, Secretary-General of Organization of American States, Luis Almagro, President of the United States, Senator Marco Rubio
According to my metrics, the “Pro-Maduro” weighted petitions were addressed to this group: President of the United States, U.S. House of Representatives, U.S. Senate, U.S. Secretary of State, Australian Parliament
一幅画胜过千言万语
用于在社交媒体、博客、短信等中宣传请愿书的图片。传达大量信息,这些信息可以用来增强我从基于文本的信息中提取的知识。
虽然使用计算机视觉从这个语料库中提取知识超出了本文的范围,但下面是前 5 名“支持马杜罗”和“反对马杜罗”请愿书中使用的图像链接(这可以让你知道为什么“国际法院”是委内瑞拉人解决他们问题的最高实体)。
warning: Some of the images can be very graphic.
“反对马杜罗”请愿书(大部分是用西班牙语写的):
- 国际刑事法院:调查委内瑞拉政府的反人类罪
- 世界公民保卫委内瑞拉联合国/国际法院/美洲组织
- 委内瑞拉----反对在奥斯卡·佩雷斯大屠杀中侵犯人权和违反条约的正义(T11)
- Investiguen Gobierno de Maduro por Crímenes de Lesa Humanidad(调查马杜罗政府的反人类罪)
- 请求委内瑞拉立即进行军事干预或人道主义干预
“支持马杜罗”的请愿书(大部分用英语撰写):
- 立即撤销针对委内瑞拉的行政命令
- @SenatorDurbin:抵制川普违宪的委内瑞拉政权更迭战争
- 国会:明确禁止未经国会授权的战争
- 告诉@CoryBooker &国会阻止特朗普对委内瑞拉的政权更迭战争
- 美国远离委内瑞拉
其他的
正如我前面提到的,单词“Ruperta”和“Elephant”在单词云中显示为语义异常值。2017 年 4 月 3 日,一份关于帮助加拉加斯 Caricuao 动物园饥饿大象 Ruperta 的请愿书启动,引起了很大的反响。
委内瑞拉的所有动物园都是由社会主义国家管理的,它们都达到了可悲的条件(当人们吃执政政府领导人的垃圾和剩菜时,你能指望什么?)来自佛罗里达州克利尔沃特的韦伯·道利斯先生,显然是一个关心动物和动物权利的人,想要为此做点什么(你可以在这里阅读他的请愿书)。
不幸的是,鲁珀塔去世。在社会主义的委内瑞拉,大象 Ruperta 并不是唯一挨饿的动物。许多已经被饥饿的人群吃掉了。
以下是一些动物爱好者在委内瑞拉发出的急切呼吁。你无法想象这让我有多难过。这简直是犯罪。
Even animals have been affected by the incompetent regime in Venezuela. The stories are extremely sad.
我的结论
现在,我个人觉得,当美国主流传统媒体选择报道一个比另一个更受重视的话题时,他们“有一些东西”。
It feels to me that US news outlets have made a bigger deal of the US President meeting the dictator on the right, compared to the US President meeting the dictator on the left. And to leave aside doubts about my political leaning, I voted for Barack Obama in 2008 and again in 2012.
关于委内瑞拉问题,嗯,我有偏见:我认为委内瑞拉是一个失败的社会主义实验。我认为联合国人权事务高级专员、智利前总统、智利社会党领袖米歇尔·巴切莱特并不关心委内瑞拉正在发生的事情。即使在许多人和机构的多次请求下,她仍拒绝访问委内瑞拉,也拒绝给马杜罗政权贴上标签。她不在乎仅仅是因为委内瑞拉失败的社会主义实验给了社会主义一个坏名声。
Chile’s President Sebastian Pinera sharply criticized his leftist predecessor and UN rights commissioner Michelle Bachelet Sunday for failing to condemn Venezuela’s socialist President Nicolas Maduro for human rights violations.
我个人认为,约翰博尔顿和迈克·蓬佩奥设置的策略非常聪明,而以胡安瓜伊多为临时总统的委内瑞拉自由透明选举的关键是对古巴施加压力。关键可能是美国国务院最近对古巴政权采取的伤害他们的行动:资本自由流向古巴。在这篇文章中,我想从数据科学、编程和政治的角度讲述很多东西,但我需要保持内容简短。事实上,它已经很长了,涵盖了 2-3 个不同的领域。
我希望这个“数据科学”实验及其背景信息能让你对这个主题形成自己的看法。我很好奇你是怎么想的。美国在做正确的事情吗?
无论你有什么样的问题,我都希望收到你的来信。我还想创建一个回购,并使其成为我的第一个开源(我所有的回购都是私人的)项目,围绕像这样的政治问题的内容理解,重用我的私人回购的选定部分。
如果你喜欢这篇文章,一定要给它一些掌声。你可能想看看我其他关于数据科学和金融、健身、音乐等的不拘一格的帖子。你可以关注我的私人回复这里、 twitter 帖子这里中的活动,或者你可以问下面的 Qs 或者在 SGX 分析的给我发邮件。
干杯
数据科学和政治
原文:https://towardsdatascience.com/data-science-and-politics-4bfd2ee82e78?source=collection_archive---------20-----------------------
重要时的数据伦理
Photo by Joakim Honkasalo on Unsplash
听证室很温暖,因为周围的座位和桌子上挤满了人。灯光对所有的摄像机来说都是足够亮的,无论是专业的还是个人的,麦克风也开着。
当我凝视着镜头,知道成千上万的人都在看着我的脸时,我被两个想法安慰着:
- 第一,我们有数据来验证我们的事实,因此我们的证词是真实的,可解释的,简单的。
- 第二,我很高兴那天是我的老板坐在我前面的椅子上宣誓就职并作证,而不是我。
高风险数据
在这篇文章中,我不打算深入讨论听证主题的细节,我只想说,就像华盛顿的许多事情一样——它极具争议性。当我们在开始前进入听证室一侧的房间时,我们不得不让国会警察将人群推到一边让我们通过。排队等候的人群很紧张,从他们的衬衫和眼神来看,他们中的大多数人不是来祝我们好运的,因为我们是代表政府来的。
我们公开质疑是否会有抗议者的干扰,并就策略展开辩论。要么忽略它们直到它被处理,要么转身承认它们。这两种选择都不涉及与他们的接触,因为我们不是要把一种政治立场强加给另一种政治立场。
我以前写过关于联邦政府工作人员如何为任何政府服务的文章。我们不会在围绕我们工作的政治党派辩论中偏袒任何一方,而是尽可能有效地公平执行法律和政策。通过纯粹的专业力量推动我们工作的政治化。有时候这比其他的更容易。
关键的疏忽
一年多前的选举后,当众议院成为政府反对党的多数党时,我就期待着这场听证会。这是我们总是受到最强烈监督的组合。
不管出于什么原因,他们直到最近才开始着手这件事。虽然这项政策自实施以来一直备受争议,但过去两年半以来,我和我的同事一直努力不懈,尽可能不折不扣地执行这项政策。
它也深深地影响着个人的生活,直到最近,陷入其中的个人的进展非常缓慢。这种缓慢是过去一周疏忽的根本原因,因为已经形成的看法或政治叙事变得没有实际的过程,我们关于“复杂”和“缓慢”过程的故事是一个诡计,以掩盖它没有按照法律实际执行。
数据诚实——当画面模糊时
作为我们数据团队的海外经理,我知道我的老板想在听证会上讲述的故事。他想说出真相,因为从我们的角度来看,这是一个很好的故事。
我们一直在根据法律尽最大努力执行这项政策,一贯不带偏见地执行这项政策,最近我们实施了突破性的自动化,迅速提高了等待处理的个人案件的速度和处理量。
我说的最近是指在过去几个月内——在等待了两年多之后。这意味着并非所有未决案件都已得到解决,因此他们察觉不到这些变化,数据也尚未解决,无法显示新的“正常”。
完整性和数据
我办公室的书架上有一本 如何与统计数据 一起撒谎。这提醒了我,我们可能会被诱惑去歪曲事实,去讲述我们想要讲述的故事。这也提醒我们,无论我们如何报告数据,其他人也会试图这样做。要么是因为无知,要么是因为他们有一个驱使他们的政治或政策目标。
对于我们的数据和统计产品,我的目标始终如一:尽可能提供透明度,以支持我们的分析,允许其他人进行他们自己的分析,并防止对歪曲我们的数据或伪造我们的分析的批评。
虽然我们的数据在许多方面都是敏感的,并且我们受几部关于我们可以发布的方式和内容的联邦法律的指导,但尽管有遗留系统和有限的资源,我们还是尽力提供尽可能多的信息。
统计道德的最佳做法
这不是政府机构独有的情况。许多公司和组织都面临着这些挑战。我们这些掌握数据的人应该如何行动,以强化良好的实践和道德?
可以从美国统计协会的道德准则开始。不足为奇的是,这些包括:
- 选择与其使用相关的方法;它试图产生可复制的、有效的和可解释的结果。
- 对数据中可能影响结果的完整性或有效性的局限性、偏见或缺陷保持坦诚。
- 避免为了权宜之计而牺牲科学的有效性,努力提高设计、执行和结果报告的透明度。
- 雇用统计人员和统计方法的组织不会容忍员工滥用职权。
ASA 提供了更多的细节,但这些足以传达该协会推动道德最佳实践的意图。
在学术界,我们也看到了对数据集开放访问的推动,包括关于方法、计算环境和版本的细节。这些尝试是为了解决 p-hacking 和不可复制实验的问题。
想要“证明”我们相信是真的事情,这可能是人的本性。以至于我们忽略了反事实的数据或者解释它。所以,我觉得我们需要明确定位自己是被别人证明错的。
有研究显示,当我们在精神上定位自己,根据新的证据更新我们的信念和预测时,确认偏差不那么强烈。这是一种进入探索的心态——在我们收集证据之前设定好。
灵活的结论
无论是在国会听证会上还是之后,我们都收到了大量的数据分析,这些分析旨在描绘一幅与我们呈现的画面不同的画面。虽然有时很容易草率地忽略这些,但我花时间与他们相处,了解他们的观点和方法,以确定我自己的分析是否遗漏了一些东西。
最后,我理解了其他的观点,但没有被我们自己的结论所动摇。我确实质疑过我们的方法,以及我们选择如何显示我们的数据——选择在我们的公开发布中包括额外的信息,以使独立分析更容易。
我知道总会有有偏见的解释,或者人们希望证实他们的立场或叙述。但我确实相信,对我们自己的结论持怀疑态度是有益的,在开始每一项分析时,要抱着开放和灵活的心态,根据新的信息和外部分析得出我们的结论。
经过两个半小时的质询后,听证会休会。我的老板以尊重、沉着和实事求是的态度回答了每个问题。这并不意味着任何人的想法在听证会上被改变,但他表现出了他的专业精神和诚信。
他还花了很长时间与后来找到他的人交谈,他们带着故事、照片和受政策影响的人的请求——他们深爱的人。他知道我们的数据不仅仅是统计数据,每个数据点都是我们所爱的人。他同情地听着他们,接过他们提供的照片和信件,并感谢他们的分享。
诚信和领导力是延伸到我们所做的一切的价值观,包括数据科学和我们讲述故事的方式,尤其是在最重要的时候。
LinkedIn 的数据科学和产品管理
原文:https://towardsdatascience.com/data-science-and-product-management-at-linkedin-92a3433cdd6c?source=collection_archive---------24-----------------------
苹果 | 谷歌 | SPOTIFY | 其他 | 剪辑
点击 TDS 播客
编者按:这是迈向数据科学播客“攀登数据科学阶梯”系列的第五集,由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:
大多数软件开发角色非常简单:有人告诉你要构建什么(通常是产品经理),你就构建它。数据科学有趣的地方在于,虽然是软件角色,但并不完全遵循这个规律。
这是因为数据科学家通常是唯一能够理解其工作的实际业务后果的人。团队中只有一个人可以回答这样的问题:“我们的聚类分析中的方差告诉我们关于用户偏好的什么?”以及“我们模型的 ROC 分数的商业后果是什么?”,而那个人就是数据科学家。从这个意义上来说,数据科学家有一个非常重要的责任,那就是不要在桌面上留下任何见解,即使在处理深度技术问题时,也要展现商业直觉。
在今天的节目中,我们采访了 LinkedIn 的数据科学家 Rocio Ng,讨论了数据科学家和产品经理之间建立强大合作伙伴关系的必要性,以及 LinkedIn 这些角色之间的日常互动。一路上,我们还谈到了早期职业数据科学家最常犯的一个错误:过于专注于第一个角色。以下是我们从对话中获得的一些最大收获:
- 产品经理的主要职责之一是提出他们的团队将试图优化的性能指标(KPI)。提出这些指标,跟踪它们,并弄清楚如果它们看起来不好该怎么办,这通常需要数据科学家(或数据分析师,取决于您的定义)的投入。
- 在许多公司(包括 LinkedIn),数据科学家是翻译:他们的工作是善于将高度抽象的想法转化为可操作的目标,并在产品经理的帮助下检查他们的想法。
- 如果你想进入数据科学或者提升你的职业生涯,不要为了学习工具而学习工具。尝试通过构建有清晰用例的项目来学习。他们不一定要赚钱或做任何事情,但拥有你试图通过项目传递的明确的价值将有助于发展和展示你的商业意识,这是 Kaggle 竞争所无法做到的。
- 不要太担心得到“完美”的第一个角色。如果你处于职业生涯的早期,你可能对不同公司的数据科学家、数据分析师和 ML 工程师之间的差异没有很好的认识,所以大胆地投入进去通常是有意义的。人们一直在横向流动,要么换公司,要么根据兴趣改变角色和工作描述。从获得处理数据的经验开始,剩下的事以后再操心。
TDS 播客—剪辑
如果你在推特上,随时欢迎和我联系 @jeremiecharris !
数据科学和卫星图像
原文:https://towardsdatascience.com/data-science-and-satellite-imagery-985229e1cd2f?source=collection_archive---------4-----------------------
我们将介绍在国际开发中使用真实应用在卫星图像中实现目标检测的工作流程。
物体检测,位于深度学习和计算机视觉的交叉点,由于其在多个现实世界应用中的广泛使用,最近获得了很多关注。国际发展并不排斥这一趋势。在这篇博客中,我们介绍了支持这种人工智能解决方案的工作流背后的一些基本概念。为此,我们在AK tek项目中使用了一个基于卫星图像的真实应用程序。
背景意识是许多行业成功实施运营、项目和投资的关键。虽然现场信息仍然是基本的,但收集这些数据可能非常昂贵,而且可能只有在承担高风险的情况下才有可能,特别是在脆弱和受冲突影响的地区。此外,这些区域中的上下文信息很快就会过时,这加剧了这些限制。通过机器学习和计算机视觉解决方案,物体检测技术的兴起正在促进新的应用,其中图像被自动摄取以通知决策过程。这种增长是可能的,这要归功于多种因素的结合,其中两个主要因素是图像记录系统的更好的质量和成本;再加上更强大但也更实惠的计算资源,为深度学习算法等高级解决方案提供动力。
这些因素的结合使得能够在多个行业中实现对象检测。虽然有些技术对于所有类型的图像(甚至视频)都是通用的,但这里我们只关注卫星图像。卫星图像是遥感数据的一个来源,有助于提高国际发展和其他行业参与者的背景意识水平,有可能在任何地方,而且成本较低。
一些鼓舞人心的参考
卫星图像已经在国际发展和其他领域得到应用。一个不完全的例子清单包括土地利用和土地覆盖变化检测的研究(LULC)以确定非法毁林,或为农业项目提供信息;利用卫星图像对难民定居点进行研究;或者它的分析有助于自然灾难(如洪水或火灾)后的救援行动。这些令人印象深刻的应用的另一个例子发表在两年前斯坦福大学可持续发展和人工智能实验室的作者的论文中。这项研究将深度学习、白天卫星图像、夜晚卫星图像和社会经济传统调查结合在一起,共同开发了一个预测非洲几个地方贫困估计的解决方案。尽管有其局限性,但在实现第一个联合国可持续发展目标的过程中,仍然需要新的方法来改进对贫困的估计,即在任何地方消除一切形式的贫困。这项研究是一个非常鼓舞人心的例子,说明卫星图像和人工智能如何能够融合在一起,为国际发展增加价值。
隐形船只探测
在 AKTEK ,我们一直致力于将卫星图像作为一种新的遥感数据来源,从而增强我们项目中的环境意识。在这篇博文中,我们将使用其中的一个项目来说明支持深度学习应用程序进行对象检测的工作流。在这个项目中,我们的目标是补充传统的船只跟踪系统,增加一个不可见的船只检测算法,该算法在卫星图像上自动工作。
Red, Green and Blue bands extracted from a satellite scene of the San Francisco bay. The image is made available through Planet’s Open California dataset, which is openly licensed.
自动识别系统 (AIS)作为船舶自动跟踪系统被广泛使用,它用于监控海上交通。它基于船舶、地面站和卫星上的转发器和导航系统。然而,即使所有的法律规定强制使用该系统,船只可以关闭他们的 AIS 应答器,有效地进入黑暗。这对非常敏感的国际问题具有重大影响。这个清单很长,但是 隐形船只关系到非常紧急的发展和安全问题:危险的海上移民、贩卖人口或货物、非法捕鱼和海盗行为。甚至海上事故救援行动也受此影响。所有这些问题都对人类生活产生了可怕的后果,更不用说它们可能带来的经济影响了。针对这种情况,结合不同类型的数据和分析技术的高级解决方案正在开发中。AIS 数据和异常检测,雷达信号处理,包括合成孔径雷达(SAR),航空摄影和物体检测,以及现代海军巡逻。卫星图像是另一种数据来源,将补充这种数据来源,以提供更好的探测解决方案。虽然这种解决方案的商业成功依赖于数据源的组合和对每个数据源使用几种分析技术,但我们在这里不做进一步讨论;在这篇文章中,我们将关注卫星图像中的视觉船只检测。因此,我们介绍由深度学习和其他计算机视觉技术驱动的对象检测背后的基础知识。
卫星图像
技术进步和成本降低导致商业航空航天产品急剧增加,包括卫星图像的可用性。卫星图像提供商的名单很广,不仅包括其图像对所有公民开放的公共提供商,如 Landsat 或 Sentinel missions,还包括私人拥有的卫星星座,如 DigitalGlobe、Airbus 或 Planet。
卫星图像相对于其他类型的图像有几个奇点。现代卫星图像是数百万像素阵列,具有各种地面分辨率,具体取决于具体的供应商和光谱带。地面分辨率涵盖了各种各样的每像素值,从 60 厘米到超过 120 米的每像素地面采样距离不等。图像的地面分辨率决定了可以在其上探测到的物体的大小。这些图像是多光谱的,我们为每个记录的光谱带准备了一个阵列。这包括常见的红、绿、蓝(RGB)波段,还有近红外、短波红外、热或全色波段等等。波段的组合分析可用于构建和研究指数,如植被、水、土壤或热指数,从而为多种解决方案提供动力,例如土地利用和土地覆盖检测。虽然卫星图像可以连续覆盖整个地球,但从空中拍摄图像存在局限性,重访率是制定解决方案的关键。这些取决于供应商,对于一个给定的地方,它们的范围从每天几幅图像到每几天一幅图像。不同的光谱带在天气事件(如云或风暴)或仅仅是一天中的时间的函数中显示不同的能见度行为。一些红外波长在晚上仍然是可见的,而通常的 RGB 图像则不可见。附在卫星图像上的奇点清单还在继续,最低点,正射校正等等。的确,这些方面中的一些通常是影像提供商在向用户发布场景本身之前所做的处理的一部分,但是许多解决方案仍然依赖于分析和适当地组合所有这些方面,因此如果您感兴趣,我们鼓励您寻找更多关于这方面的信息。卫星图像正成为许多行业背景信息的惊人来源,值得投入时间。
解决方案定义
在这篇博文中,我们从一个更具策划性的场景开始,目的是拍摄一个 RGB 卫星场景,如下图所示(这里忽略天气影响),并设计和训练一个机器学习算法,自动检测和定位给定场景中的出港船只。
Satellite scene of San Francisco bay, made available through Planet’s Open California dataset, which is openly licensed*.*
这种类型的场景覆盖了几十平方公里的地球表面(~ 45 公里 2 )。一个基于卫星图像的现实监控解决方案将不得不及时浏览成千上万或更多的场景。因此,依靠持续的人工监管这样的解决方案是不可行的。这是一个适合机器学习的场景。最初仅依靠最少的人工监督,系统可以被设计和训练来执行船舶检测,而无需进一步的人工干预。这将在可行的计算时间内实现大面积表面的自动监控。使组织能够更快地监控和覆盖更大的表面。
请注意,卫星场景是数百万像素的图像(~5MP),在这种情况下,地面分辨率为每像素 3m,为每个色带构建了一个大的数值数组。因此,除了旨在达到高出港船舶检测精度之外,算法的另一个关键指标将是检测速度。否则,要监控的场景的大小将对查看许多平方英里的真实世界解决方案提出令人望而却步的挑战。
解决方案工作流程
为了构建船只检测解决方案,我们需要遵循一个简单的两阶段工作流程,允许我们说明深度学习和计算机视觉交汇处的两个领域:图像分割和图像分类。工作流程如下进行。
首先,使用选择性分割算法来识别场景中必须在第二阶段进一步分析的区域。在这个阶段,大块的土地和/或水域已经被丢弃。这使我们能够在处理如此繁重的卫星场景时实现快速解决方案,同时提高整体解决方案的准确性。
在第二阶段,我们实现了一个移动窗口浏览机制,只围绕在前面阶段选择的区域。这些窗口中的每一个都被输入到一个二元分类器中,该分类器输出在那个特定窗口中有一艘船的概率。如果它估计有一个盒子,就画一个。正如我们将要描述的,这样的机器学习算法是在一组先前标记或注释的图像上训练的,机器可以从这些图像中学习。**
这样,给定一个卫星场景,该解决方案只需几秒钟就能输出该场景的新图像,并在每个检测到的出港船只周围画出一个方框。
选择性分割
对于用来说明这篇文章的解决方案,我们使用一个简单的分段算法。然而,我们注意到,更先进的分割算法,选择性或非选择性,可以使用,新的正在研究中。如果你感兴趣,可以看看最先进的区域提议算法,在那里可以学习区域,比如更快的 T2 R-CNN,或者 T4 YOLO T5 的实现。
然而,这里使用基于k-均值聚类 的众所周知的无监督算法就足够了。 在一个场景中,每个像素可以理解为一个三维数值向量。也就是说,每个像素由其红色、绿色和蓝色光谱带的值来定义。这些像素然后形成向量的集合。 k-means 算法将所有这些像素划分和分布在 k 不同的簇中,在我们的例子中,仅基于颜色接近度。这是一个困难的计算问题,但通常,特别是在这里,数值算法会迅速收敛到最优解。这种优化算法通过将每个像素分配给均值向量最接近该像素的聚类(在 RGB 空间中;第一次分配可以是任意的),然后在新的像素分配之后重新计算每个结果聚类的新平均值,并反复重复这两个相同的动作,直到聚类中的像素分布稳定。在我们手头的例子中,聚类的最佳数量通常较低(2),这足以将像素聚类成水状和非水状像素。为此,聚类可以完全忽略地理空间意义上的像素邻近,因为聚类可以仅在三维颜色向量上执行。
一旦执行了聚类,我们就可以进行一些简单的操作来提高算法性能。水状像素可以通过分析从 k-means 算法得到的每个聚类的平均颜色向量来建立,然后在接下来的步骤中被安全地忽略。假设场景不仅仅是水,我们可以聚焦在非水状的像素上。我们通过排除由相邻像素形成的区域来继续,这些区域或者太大,或者太小,或者具有非常非线性的形状,对于它们来说不是船。船只的最终检测仍将发生在解决方案的下一阶段,但这是一种非常快速有效的方法,可以去除不需要由接下来的深度学习算法进一步处理的水域和陆地,从而提高效率和速度。为此,我们需要考虑手头场景的地面分辨率,场景的颜色归一化,如果我们对检测港口的船只感兴趣,这一步会更复杂。
Illustration of the selected areas to be further analyzed after the segmentation of the previous Planet scene.
对于我们用来说明这篇博客文章的场景,通过选择性分割选择的区域(仍需要进一步分析)在上图中用黄色方框表示。在那里,只有小的非水状像素被描绘出来,其他的都是黑色的。如果我们没有这个分割阶段,而是采用强力方法,固定框将需要在下一阶段解析整个场景。如下所述,使用 80×80 像素的盒子,这意味着即将到来的算法将分析大约 5000 万个窗口,这将导致在计算速度方面令人望而却步的解决方案。相反,通过我们在这里执行和描述的简单的选择性分割,只需要进一步分析几百个窗口。这将花费在场景完整分析上的时间显著减少到几秒钟,(如果仅使用单个廉价 CPU而没有对预测进行任何并行化),同时还有助于提高整体解决方案的准确性。
监督学习和图像分类
一旦分割自动选择了需要进一步分析的区域,解决方案就进入第二阶段。在那里,一个卷积神经网络(CNN)被设计和训练来决定每个区域是否包含船只。为此,我们浏览那些移动 80×80 像素的固定大小窗口的区域。这种窗口适用于探测高达 250-300 米的船只(如现场最大的货船)。
因此,这意味着我们设计的 CNN 总是摄取 80 x 80 像素的 RGB 盒图像,而不是直接摄取更大的场景,从而提高了效率。正如我们在之前关于基于文本的国际发展和数据科学项目的博客文章中所描述的,这里我们也使用监督学习技术。为了训练 CNN,我们需要首先手动标记一组智能图像,并将这些图像分配到一个二进制类别:船或非船。我们认为这种分配是每个训练集图像的基础事实标签,算法必须从中学习推断决策过程。
Example of two of the derived boxes from the labeled images that we have used for the algorithm training in this blog post.The left box has a ground truth label that states it does contain a ship, while the right box belongs to the no-ship category.
然后,将这些训练集标签与相应训练集图像的 RGB 值数组一起输入算法。对于真实世界的解决方案,我们结合了几个供应商的标签图像。在对标记的图像进行一些简单的插值或合并处理后,这是可能的,这仅仅是因为那些提供者的分辨率是兼容的。这为我们提供了几十万张 80 x 80 图像的更大数据集,在有船图像和无船图像之间相对平衡。然而,对于这篇博文中提出的更简单的解决方案,我们只使用了几千幅图像,在两个类别之间进行平衡,来训练解决方案的第一个工作版本。请注意,我们这里指的是大约 80 x 80 的盒子,而不是完整的场景。
数据扩充
这是可能的,因为我们对这些图像进行数据扩充。数据扩充是指通过获取原始手动标记的图像并以受控方式扩展标记集来人为增加标记图像的数量的过程。这是通过对它们执行一些基本动作来完成的:旋转、图像翻转、平移等,同时给那些新派生的图像分配与原始图像相同的标签。这是计算机视觉中另一套丰富的技术,所以如果你感兴趣,我们鼓励你进一步研究。数据增强可以显著减少在训练阶段手动标记和输入算法的图像数量,而不会降低准确性。
卷积神经网络
正如我们在的第一篇博文中所描述的,在很高的层面上,算法是对图像数字数组进行运算的数学公式,并输出图像属于每个特定类别的概率。为了能够尽可能准确地对新图像进行分类,在所谓的训练阶段,算法工作以最小化它们对训练集的预测和这些相同训练集图像的真实分类之间的误差。假设这种训练在适当的验证框架内进行,那么相同的算法可以预测新的图像(从而预测新的场景),而不需要进一步的人工监督。这可以近乎实时地完成,这个过程现在是可扩展的,其准确性可以通过测试集严格地建立。
卷积神经网络是一组算法,广泛用于人工智能中最先进的图像解决方案。CNN 实施背后的灵感、历史和细节可以在别处找到。由于描述其技术细节的书籍、论文、博客条目和教程的列表已经很长了,很难只挑选一个参考。在这篇博客中,我们将 CNN 过于简化,说它们是神经网络算法,有数万到数百万个参数需要训练,都以非常结构化的方式运行。这些神经网络遵循对数值阵列进行数学运算的系统模式:卷积、池化和正则化层。这种结构使得它们适合于自动学习如何提取图像上的相关特征,例如形状、边缘和更复杂的视觉特征。将这一点与训练它们的强大的最小化算法相结合,使它们成为图像和其他图像中对象检测的非常强大的解决方案。
目前,许多基于 CNN 的解决方案利用了所谓的预训练模型。这些都是巨大的 CNN 结构(如 ResNet、VGG、Inception 等),它们之前已经在公开可用的通用标记图像数据集中进行了训练,如 ImageNet 中的图像集。通过迁移学习技术,这些预训练的结构得到扩展,然后使用手头新解决方案的特定新标记数据集进一步训练若干层。这样,新模型被调整用于期望的新物体检测,这里是图像中的船只检测。虽然这可能会导致高精度的解决方案,但这些解决方案通常也较重,因此速度较慢。相反,对于这篇博客来说,从零开始构建和训练一个新的 CNN 就足够了,可以使用你偏好的编程语言中的现有库来做什么。仅使用几块卷积层和池层(每个层只有几十个不同的小型卷积滤波器)、一些密集层,并使用适当的正则化技术(例如批量归一化),我们已经可以在用于该博客条目的简化训练集的选定子样本上达到高验证和一致的二进制测试准确度(95%以上),进一步提高效率。
训练过程是通过分批馈送所有图像和预处理步骤来实现的,因此并行化是可能的,并且加速了算法的训练。如果我们保持模型轻便,训练时间会很短。现在,这里描述的所有工作流程都可以通过大量可用的图像处理和机器学习库,用您喜欢的编程语言来实现。例如在 python 中,通常的 numpy、scipy、scikit-learn(和 image)、openCV、keras 和 tensorflow 库足以构建解决方案。对于所有这些,网上有很好的博客和教程。
解决结果
总之,我们的两阶段解决方案结合了一个相对简单的 k-means 聚类算法用于初始选择性分割,随后是一个相对简单的 CNN 构造,该构造仅针对几千张进一步增强的图像针对这篇博客文章进行了训练。该解决方案的工作流程可以摄取如上图所示的卫星场景,并在几秒钟内输出检测到的船只(如果有)在场景中的位置。下图中的场景说明了这一点。
Satellite scene of San Francisco bay, made available through Planet’s Open California dataset, which is openly licensed*, after being processed by our ship detector algorithm.*
正如我们所观察到的,这种更轻便的解决方案在处理场景时已经相当精确了。它只错过了一艘非常小的船(肉眼几乎看不到),它只错把一个船形的甲板当成了一艘真正的船。当然,真实世界的解决方案更完整,因为它使用更大的数据集,并在适当的场景集合中得到进一步验证。然而,这个更简单的算法已经足够好来说明整个工作流程,同时已经达到相当高的性能。这也有助于突出船舶检测面临的一些主要挑战。分割有助于处理大多数基于海岸的物体,但在那里,甲板和其他像船一样的陆地表面有时可能会与船混淆。除了改进选择性分割,这些对象的样本可以进一步手动标记,并再次馈送到新的训练阶段,从而改进算法的执行方式。此外,最小的船只仍然最难被发现。这与图像的分辨率有关,可以依靠更高分辨率的场景来改善。
Satellite scene of Long Beach bay, made available through Planet’s Open California dataset, which is openly licensed*, after being processed by our ship detector algorithm.*
你可以在另一个场景中看到表演,这一次是在长滩湾(分辨率与旧金山湾相同)。
超越
除了我们在上面已经建议的改进,为了达到更鲁棒的对象检测器,在这一点上真正的解决方案将继续将算法与 AIS 数据集成。一旦船只被定位在卫星画面上,我们就有了它们在某个时刻的地理位置,与 AIS 数据进行对比,我们就可以继续识别出哪些是不可见的船只,从而可能从事非法活动。
观点
卫星图像与机器学习和计算机视觉相结合,可用于设计和培训新的解决方案,并提高环境意识。这个过程已经在国际开发的一个项目中进行了说明,但是潜在的应用超出了船舶和这个行业,几乎涵盖了你能想到的任何东西。实际上,相同的工作流程并不局限于卫星图像,因为它也适用于其他类型的图像甚至视频。我们才刚刚开始触及表面。
毕竟,数据科学中有什么新东西?
原文:https://towardsdatascience.com/data-science-and-the-data-scientist-db200aac4ea0?source=collection_archive---------26-----------------------
数据科学家的工作范围和角色是什么。
我们越来越多地听到这种被称为数据科学的“新”技术及其专业人员——数据科学家。但是最后,一个数据科学家做什么呢?这个人真的会穿着白大褂戴着护目镜工作吗?要分析这一点,我们可以首先理解它是科学,在过去的十年里什么发生了变化使这一新概念合法化,以及这一新领域和职业与其他新旧职能相比如何?
首先让我们来看看什么是科学。
一个研究领域需要什么才能被认为是科学?毕竟,科学是什么?许多不同的作者对这个概念给出了不同的定义。为了我们最实际的目的,让我们考虑一下科学哲学家卡尔·波普尔(1902-94)的科学概念。对他来说,科学是任何可以被证伪和/或似是而非的可证伪性,否则它将属于信仰和观点的领域。这听起来很简单,但它解决了过去许多伟大哲学家的僵局,如休谟和康德。
Famous Book Representing The Evolution Of Science
让我们举个例子:在 15 世纪麦哲伦之前,说地球是平的与科学有关,曾经我们可以检验这个假设。牛顿万有引力定律也是科学的一部分,因为我们可以测试并试图证明它是错误的。现在,如果一个道德决定是好是坏,它不是科学范围的一部分,因为我们不能测试它,或者如果我相信一种或另一种宗教,它也不是科学范围的一部分,因为不可能测试它。
如果科学的范围是试图证伪假说,并且随着模型通过时间的可证伪性测试,我们相信理论是科学事实,因为牛顿定律在两个世纪的试验中幸存下来,直到更好的理论和模型出现,就像爱因斯坦在 1915 年对引力所做的那样,并且科学仍然继续前进。所以,伴随着这个定义,科学并不证明一个模型是真的,但不是假的。
这和数据科学有什么关系?嗯,如果科学对事实持怀疑态度,创建试图解释现实的模型,或者用僵化的方法测试假设,让其他人可能试图复制和伪造,那么数据科学现在基本上是用数据来做这件事,对吗?是啊!但这叫统计学。
统计学和数据科学有什么区别。
显然,它们是非常相关的领域,经常依赖于相同的来源。但是它的区别在哪里呢?对了,有区别吗?对很多人来说,不是。让我们再深入一点。统计学对于数据科学就像数学对于工程学一样,也就是说,统计学为数据科学创造了解决现实世界问题的理论框架,就像工程学一样。数据科学家需要的不仅仅是纸和笔来解决这些现实世界的问题,他们需要使用大量的编程技术来处理不断增长的数据量,然后分歧就开始了。
Image of Andrew Silver showing the great pillars of Data Science.
数据科学是一个多学科领域,其中一个学科(可能是最重要的)是统计学,数据“科学”的所有荣誉都来自于一种方式,如果没有统计学,它将只是科学内容的应用程序,就像旧的工程学一样。在任何情况下,对于一个领域的开始和另一个领域的结束还没有一致的意见,因此两者之间有很多重叠,因此这产生了几个将这些领域结合在一起的倡议。麻省理工学院数据科学 50 年。
近年来,有哪些变化增加了数据科学的受欢迎程度?
近年来发生了很大的变化,人们对数据科学的繁荣负有共同责任。同样,没有明显的方法来解释它的快速增长。统计理论非常古老——例如回归是从十九世纪晚期开始的。神经网络在 20 世纪 50 年代开始被探索。那么,在 2010 年左右发生了什么开始了这种快速的上升呢?博彩业!
Evolução de três dos principais mercados de entretenimento
硬件研究投资非常昂贵,即使数据科学和机器学习非常有用,它们也不够安全可靠,不足以支持每年数十亿美元的日益强大的设备。但最近表现超过音乐和电影业务的游戏行业(一起!)的利润足以支持强大硬件开发所需的所有投资,以处理逼真的游戏持续增强。诀窍是调整这些每秒进行数百万次计算的超级现代设备,以运行机器学习算法——这只是在最近几年(~ 2012 年)才开始,加上即将收集的大量数据,这解释了最近世界各地数据科学的繁荣。
数据科学家是只使用机器学习的工作吗?
简而言之:不会。运行机器学习算法不会将任何领域的人变成数据科学家(这没有错)——同样,定义科学的是方法论,而不是建模。如果有人只关心做一个预测,例如,如果照片中有一只狗,没问题。fit(X,y)","。预言(X)"和人身保护令!运行回归可能是也可能不是科学,这取决于方法论。也就是说,数据科学家使用机器学习,但是使用机器学习并不能定义一个数据科学家。
Chandrasekaran image showing a representation of the many areas of Data Science
是工科吗?机器学习工程师呢?
当然,工程学使用了大量的科学和科学方法,但工程学的重点不是证明假设是错误的,或者创造新的模型来描述社会,而是解决实际问题。因此,虽然科学家的方法是对如何证明因果关系或如何找到与先验理论/模型相矛盾的例子持怀疑态度,但工程对于知识应用更为务实,例如,提高过程效率。显然,没有更好或更坏,因此它们是不同的概念。
There is no better or worse in this case. They are different ways of approaching solutions.
那么,一个数据科学家和一个机器学习工程师的工作范围有什么区别呢?科学家将关注创建最能代表现实的模型,用假设检验进行实验,而工程师将关注优化过程,维护最佳可能的架构,以及优化成本。注意,无论是专业人士(如 DBA、数据分析师、BI 分析师等。)可以/应该创建预测模型。
Different data professionals and their skills — Developed by Avi Alkalay
这些关于数据科学和数据科学家的想法和定义尚未整合,本文试图组织这些知识,但它代表了我的想法,因为我在该主题上的经验和科学一样,仍然可以通过审查,因为它们面临现实、数据和新的范式。
最后,科学最大的支持者之一,美国宇航局天体生物学家卡尔·萨根(1934-96)的一段视频,解释了这种怀疑和谦逊的思维方式。
https://www.youtube.com/watch?v=otZzznkXhjo
你的公司呢?数据科学家的工作范围是如何定义的?他们在那里学科学还是工程学?留下你的评论!
另请参见我们的机器学习可解释性和我们的统计历史系列。
参见太:
- 解释机器学习模型;
- 数据科学中的偏差和因果关系
- 统计简史;
- 解读机器学习指标;
- 如何成为一名数据科学家。
数据科学和犯错的重要性
原文:https://towardsdatascience.com/data-science-and-the-importance-of-being-wrong-1b31123accfc?source=collection_archive---------12-----------------------
Photo by Ethan Sykes on Unsplash
数据科学可以提供高价值的见解,例如,通过发现历史数据中与更高效率相关的制度,或者通过找到制造流程中非质量的根本原因。成功的数据科学模型可以启动补救项目,产生数百万的收入。
然而,即使是最惊人的结果也不总是它们看起来的那样!当我们决定以不同的方式处理数据时,强相关性可能会消失。高性能的分类器可能只是反映了我们默认的假设或糟糕的采样。由于这些和许多其他原因,根据项目早期的成功进行投资是危险的。
这就是为什么我们也需要谈论我们的负面结果。如果我们希望我们的商业伙伴信任数据科学,我们需要向他们展示(而不仅仅是告诉他们)正在进行的假设拒绝过程如何让我们找到正确的模型。反驳我们自己的初步结果的健康愿望是我们如何获得对数据景观、其陷阱和惊喜以及隐藏的宝石的深刻理解。
我最近的一个项目很好地说明了这一点。
假设
一家汽车制造商让我分析工程师在测试过程中记录的标准化缺陷代码数据集。汽车投入使用后,车载电脑会自动生成相同的代码。我的客户想知道在测试中发现的缺陷是否预示着服务中出现的缺陷。
数据模型
举一个具体的例子,设想一个针对某型号汽车的交付前测试程序。发动机可以提出 50 个可能的缺陷,电气系统可以提出 50 个可能的缺陷,液压系统可以提出 40 个可能的缺陷。测试实验室通常只发现 2 或 3 个缺陷,并当场修复它们。大多数新车主不会遇到任何问题,但有时汽车在交付后不久就发生故障或发出警告。我们可以将客户在给定时间范围内(例如 3 个月)经历的缺陷建模为一个频率向量:在 140 个可能的缺陷中,哪些发生在服务中,频率如何?
为了寻找数据中的预测关系,我为每辆车构建了这些频率向量,并对所有在测试中遇到特定缺陷的车辆求和(图 1)。然后,我使用主成分分析在这个共现矩阵中寻找不寻常的向量(并找到了一些)。但是客户也有兴趣发现在用缺陷的常见模式,这些缺陷有可能通过改进公司的测试程序来解决。
Fig. 1. A portion of the co-occurrence matrix showing the most common defects. Each row of in-service defects (right axis) aggregates the total counts of all vehicles that raised a particular defect during testing (left axis). A vehicle with multiple testing defects can contribute to more than one row. Hence, the rows are not fully independent. The color thresholds are powers of two (blue = 1, green ≥ 2, yellow ≥ 4 …).
即使在聚集载体之后,频率向量也非常稀疏,并且非常类似于 TF-IDF 文档向量的小语料库。因为我没有太多的向量可以比较,所以我尝试使用潜在的 Dirichlet 分配来寻找共现缺陷的模式(即 LDA 主题)。
初步结果
虽然 90%的向量彼此非常相似,并且与平均缺陷分布非常相似,但是剩余的 10%在 LDA 主题空间中形成了四个不同的聚类。我的客户很兴奋——我们是否发现了客户问题的频繁模式,也许可以用测试一些车辆子系统的有缺陷的过程来解释?然而,我还没有准备好验证结果,因为我知道数据集中聚集的频率向量并不是完全独立的。
证明自己错了
我又花了一周时间改进数据预处理,用泊松过程模拟缺陷频率向量,以估计虚假相关性的预期数量(图 2),并检查进入聚类向量的单个汽车。其中一个集群缩小到只有两个成员,另外两个集群原来是由共享来自一辆高度缺陷车辆的数据的向量组成的。剩下的一个簇只在我集中分析罕见的运行中缺陷时出现,虽然它包含几个独立的向量,但它们之间的相似性很弱。
Fig. 2. Distribution of correlation coefficients (absolute value) between the vectors of the co-occurrence matrix (blue). Correlations in a simulated matrix where defects are generated by a Poisson process (orange). The similarity of the two distributions undermines the hypothesis that we can find frequent patterns. In fact, the excess of strong correlations is due to the fact that some rows of the matrix are not fully independent.
最终,这一分析最重要的结果是否定了最初的假设:虽然我们发现了少数异常可靠或有缺陷的车辆,,但在测试过程中遇到的缺陷和使用中出现的问题之间没有可辨别的关系。从商业角度来看,这个结果是令人鼓舞的,因为它表明目前的测试程序非常好。
公布否定结果
通过快速否定频繁模式的假设,我可以告诉我的客户去别处寻找价值发生器。时间、注意力和分析是昂贵的,所以他仍然很高兴。现在他可以做出正确的选择。反驳一个假设往往比证明它更容易,通过在测试领域专家的想法时“快速失败”,我们可以快速提供见解并建立信任。
任何一个数据科学部门都会遇到很多这样的案例。业务部门带来了他们创造价值的想法,我们有责任快速过滤这些想法,以便只有可行的概念才能进入下一阶段。此外,我们有责任质疑自己的想法 和结果。我们必须尽力证明自己是错的,不管我们的想法看起来多么优雅或有吸引力。
简而言之,我们的负面结果表明,我们不仅仅是应用程序开发人员或机器学习黑客——我们是假设测试者,这一活动是数据科学中的“科学”。
数据科学和预测的悖论
原文:https://towardsdatascience.com/data-science-and-the-paradox-of-predictions-422ee8325348?source=collection_archive---------14-----------------------
Paradox by Nick Youngson
知道的行为如何改变我们所知道的。
许多数据科学项目都是对知识的追求。正如历史多年来告诉我们的那样,仅仅是知道的行为就可以改变我们认为知道的东西。
哈拉里教授在《德乌斯人》中用我们在他的作品中已经习以为常的技巧探讨了这个话题。哈拉里以马克思的《资本论》为例,阐明了这一观点,并将其转化为非常有价值的一课。
资本主义改革
Karl Marx
在 19 世纪中叶,马克思对当时的经济学提出了一系列见解。马克思还预言了西方的暴力起义和资本主义制度的崩溃,这一制度在很大程度上一直延续到今天。虽然俄罗斯最终也步其后尘,但他的预言从未在西方实现。但是为什么呢?
一个原因是资本家知道如何阅读。随着马克思成为政界越来越突出的人物,当时的资本家正利用他的洞察力来改变未来。他们明白资本主义是如何让如此多的人失望的,如果不做出改变,整个体系将会崩溃。
随着人们开始看到并相信马克思的预言,他们的行为发生了变化。系统变了。此外,尽管马克思为人类知识基础带来了宝贵而永久的补充,但他更激进的预测大多是错误的。错误的,即使他们可能是正确的。如果没有马克思带来的变化,西方的政治体系很可能会成为马克思预言的牺牲品。
预言的悖论
因此,我们面临着预测的悖论。
在做预测的过程中,我们经常会发现有价值的新知识。新的知识和它引发的预测改变了系统。哈拉里是这样说的:
不改变行为的知识是无用的。但是改变行为的知识很快就失去了相关性。
同样的悖论也适用于数据科学中的许多预测系统。随着我们收集越来越多的数据,我们创造了越来越强大的预测系统。这些系统改变了行为,我们拥有的数据和系统到今天都不再准确。我们必须对系统的某些部分进行返工或全部重建。
完美的不完美
想象一个试图预测股票市场价格的系统。如今,海量数据正被以越来越有创意的方式加以利用,但与前几年相比,对冲基金正获得巨大回报的说法并不正确。
基金采用的许多交易策略都是基于市场的失误。定价过高事件、定价过低事件或其他价格错误。有效市场假说在很大程度上成立,但“错误”仍会发生。
让我们说,你建立了一个系统,每天准确预测哪些公司被低估。你使用一个新颖的系统,它采用独特的方法,因此你相信你可以保持你的优势。正如历史向我们展示的那样,很少有发明是孤立产生的。而且,如果你能找到它,其他人也可能会找到。
所以你不只是打开你的系统然后走开。你不断努力改进它,使用更多的数据,更好的数据,更强的计算能力。最终,有人赶上了。然后另一个。然后另一个。你的模式不再像以前那样赚钱,或许几乎没有利润。你需要继续下一个模型。
这同样适用于不太复杂的模型。您可能正在构建一个系统来预测哪些客户将很快离开您的公司。该系统允许您干预和改变最终行为,修改您用来构建它的数据。随着时间的推移,你必须继续更新和发展你的系统,因为你干预得越多,它就会慢慢变得不准确。
希腊神话西西弗斯似乎是一个合适的例子。作为对他欺骗行为的惩罚,这位前国王被判终身监禁,将一块巨石推上山,却看到它又滚了下来。
就像西西弗斯必须回到山底重新开始一样,优秀的数据科学家也必须不断回到他们的模型,不断调整他们的假设,并不断将巨石推上山。
当你建立创新的预测系统时,你正在增加你对某些东西的理解(不管是否可以解释)。如果这个系统不改变行为,那么它就没有效用。如果它确实改变了行为,那么它就会慢慢变得无关紧要。
在持续的基础上重新访问和返回到我们的模型应该成为惯例。通过这样做,我们确保了我们的模型继续执行,但是我们也考虑到了它们的创建所产生的悖论。
没有一个有用的模型可以孤立存在。
最初发表于Jesse Moore . ca。
面向学校的数据科学应用
原文:https://towardsdatascience.com/data-science-applications-for-schools-d8913d21d363?source=collection_archive---------24-----------------------
各个领域一直在以自己的速度采用数据科学。一些领域的采用速度比其他领域慢。其中一个,特别是我所在的领域,是教育领域。有趣的是,一个产生大量关于人(学生和学校工作人员)的数据的领域还没有最大限度地利用这些数据。这就像看到巨大的粘土团等待被塑造成美丽的雕塑。
Photo by The Digital Marketing Collaboration on Unsplash
这块粘土需要雕塑家将这些数据塑造成解决问题的解决方案,从而增强学校学生和员工的体验。尽管一些组织(如特许学校)有数据分析师来解决这些需求,但他们要么对每个学校不够具体,要么只达到管理级别。这就是需要数据科学家,数据的雕塑家的地方。
在这篇文章中,我将成为这些雕塑家之一,并分享学校如何塑造他们未使用的数据来解决具体问题,并改善学生和员工的体验。
Photo by Monica Melton on Unsplash
1.学生评估数据
Photo by Ben Mullins on Unsplash
评估数据是教师确定学生对所学材料理解程度的常用数据源。这些可以用来获得概念的脉搏读数(通过测验和退出票)或学生对一个或多个单元的整体理解(单元测试、期中、期末)。
这些评估的理想用途是让教师根据结果修改未来课程的策略。这包括重温他们努力学习过的材料,也许还可以组成最佳小组,这样同龄人就可以互相教授他们努力学习过的话题。然而,除了对这些评估进行评分所花费的时间之外,这一过程本身也很耗时。
Image from memegenerator.net
有诸如 ZipGrade 之类的多项选择评估工具来加速这一过程,并提供快速的总结见解和项目分析。但它没有回答以下问题:
a)我的学生中有多少人在进化简答问题上获得了超过一半的学分?
b)我的学生中有多少人回答了用图解法求逆的问题,却在用代数法求逆的问题上苦苦挣扎?
c)我如何根据评估数据快速创建复习课的学生小组来回答问题 B?
问题 A 的答案可以用 ECDF 圆图来完成。如果你不熟悉这种类型的图表,你可以阅读我下面的文章。
[## 什么,为什么,以及如何阅读经验 CDF
鼓励探索性数据分析(EDA)来获得数据的可消化的一瞥。这包括直方图,用于…
towardsdatascience.com](/what-why-and-how-to-read-empirical-cdf-123e2b922480)
对于问题 B,可以使用气泡图来比较两个问题上的分数数据,以查看有多少学生在两个问题上都表现良好,在一个问题上表现良好,或者两个问题都没有表现良好。你可以在这里阅读更多关于气泡图。
对于问题 C,我们可以使用无监督的机器学习来帮助解决这个问题。我已经为此构建了一个 web 应用程序解决方案。我将在以后的文章中与您分享这一点;).
2.学生项目数据
Image from gettingsmart.com
教师给出项目作为评估的有趣替代方案。在这些项目中,学生可以以更实际和/或更灵活的方式应用他们所学的知识。这可能是使用指数增长函数来估计股票投资,或者是将多项式与其分解形式相匹配的难题。
学生们会得到这些项目的评分标准,以显示他们是如何被评估的。同样,我们讨论的关于学生评估数据的同类问题也适用于任何有标题的项目或文章。唯一的问题是,将这些数据导入系统或 Excel 文件并不容易。让一位合作教师或助教输入这些数据可能会有所帮助,但也许计算机视觉和自然语言处理可以帮助构建解决方案。我找到的最接近的解决方案是 GradeCam 的标题功能。
3.父母/监护人数据
Image from signupgenius.com
如果每个家长都来参加家长会(PTC)就太好了。尤其是由于学生在学校的进步,老师们非常想见见家长,看看他们是否能一起帮助学生取得成功。
美国有研究称,越来越多的家长更频繁地参加关于他们孩子的会议,但并非每个学校都是如此。一些学校努力达到 PTC 的 80%出勤率。学校当然有家长签到,但是那些家长和学生的数据是什么样子的呢?
如果这些数据被用来过滤掉那些家长没有出席家长会的学生,那么这些数据可以被分析来发现这些家庭的潜在相似之处。即使共同趋势不在你的数据中,它也提供了一个机会来研究这些家庭阻止他们出席的共同趋势。
然后,你可以向这些家庭发送有针对性的信息,以增加他们出席的机会,而不是向所有父母发送一个普通的电话或电子邮件。
4.学生行为参赛作品
Image from thoughtco.com
当学校发生事故时,工作人员必须将其记录到系统中。为了确定处理每个事件的行动过程,有一个度量系统来确定严重程度。然而,对于工作人员来说,输入事件非常耗时。作为一名新教师,这个过程可能需要更多的时间,因为事件级别太多了,更不用说通读了。甚至学校纪律人员也需要花时间阅读这些日志,然后再确定严重程度。
自然语言处理可以在这方面有所帮助。在一所已经存在了几年的学校中,应该有大量的日志条目可用于构建严重性级别分类器。这将节省纪律人员和教师的时间,如果他们也能看到它。这个数据也可以应用到 PTC 考勤问题上。
5.学生人口统计数据
Image from eurekafacts.com
在 PowerSchool、ATS 等系统中,有大量来自教师和学校网络专用数据池的学生数据。使用这些数据不仅有助于解决 PTC 出勤率问题,也有助于解决预测辍学率等问题。
6.来自第三方教学平台的数据。
Image from gamificationplus.uk
像 Kahoot 和 Picklers 这样的应用程序是让学生参与学习和快速检查理解的有趣方式。也间接引发了学生隐藏的好胜的一面。
Image from meme.xyz
但这些平台允许你将游戏中的数据提取到 CSV 和 Excel 文件中。然后,您可以应用我们在学生评估数据部分提到的技术。
结束语
这并不是可以应用于学校的数据科学应用的详尽列表。我也不是说我知道所有这些,但我确实对它们保持开放的心态。只要记住,如果你工作,或计划工作,用上面的数据,记住它来自谁。记住你正在雕刻的数据是在帮助谁。
Image from weareteachers.com
Image from weareteachers.com
你正在塑造和影响学生、老师和学校教职员工的生活。你这样做是为了帮助他们所有人成功。以便他们有时间做更重要的事情。不是不断重复可以自动化的任务,也不是现在学校里发生的编程错误。
行动呼吁
Image from impflip.com
感谢您的阅读!无论您是教师、学校工作人员、数据科学家,还是介于两者之间的任何人,我希望这是有帮助和有见地的。
如果有我错过的任何应用程序,请在下面的评论中分享。你同意还是不同意其中的一些应用?也请在评论中告诉我。如果你认为这将有助于其他人阅读,请与他们分享这篇文章。
想谈谈你或你的学校如何开始使用这些方法吗?向我伸出手来!你可以通过 Linkedin 、 Twitter (DMs 开放)或者直接在 j.dejesus22@gmail.com 联系我。
如果你喜欢在媒体上阅读,并愿意进一步支持我,你可以使用我的推荐链接注册一个媒体会员。这样做可以用你的会费的一部分在经济上支持我,我将不胜感激。
直到下一次,
约翰·德杰苏斯
作为软件的数据科学:从笔记本到工具[第 1 部分]
原文:https://towardsdatascience.com/data-science-as-software-from-notebooks-to-tools-part-1-253a39e4fc0a?source=collection_archive---------15-----------------------
现在有很多关于数据科学的炒作,许多人只知道这个有趣工作领域的某些方面。当数据科学家产生了伟大的 MVP(最小可行产品)但未能继续前进时,一个巨大的挑战就出现了。在本文中,我想展示数据科学的一个可能的旅程,从项目的最开始到为移交做好准备。本系列文章的目标是从开发人员的角度展示数据科学项目的不同阶段,并为该领域的工作人员提供最佳实践。
让我们先从议程开始,然后再进入具体部分:
-
设置您的工作环境
-
数据探索的重要模块
-
机器学习第一部分:数据预处理[ 第二部分
-
机器学习第二部分:模型[ 第二部分
-
从朱庇特[ 第三部 ]继续
-
闪亮的东西:我们什么时候得到一个前端?[ 第三部分
-
您在代码中的日常工作:保持标准[ 第 3 部分
-
设置您的工作环境
每个数据科学项目都从设置您的工作环境开始。但是在我们这样做之前,在开始编码之前,每个编程任务的第一个问题必须首先回答:你选择什么语言?
对于数据科学来说,这非常清楚:使用 Python!随着 Python 成为 2018 年第七大最常用的编程语言(https://insights . stack overflow . com/survey/2018/# technology-programming-scripting-and-markup-languages),它已经在许多人当中广受欢迎。事实上,许多可用的工具简化了您的旅程,并且有很好的社区支持,可以肯定这将是您在数据科学领域的主要编程语言,本文就是基于这一事实。当然,在这种情况下,其他语言也是有效和必要的(SQL、HTML 等)。)但是我们将首先关注 Python 来开发数据科学项目的核心。
所以,首先要做的是:如何安装 Python?最简单的方法是使用 Anaconda,因为它附带了两个包管理工具,多个工具和包供您使用,并且您可以安装在任何操作系统上。
随着 Anaconda 成为您的语言分发工具, PyCharm 将成为我们 IDE(集成开发环境)的首选。PyCharm 由 JetBrains 开发,将许多工具和特性集成到其 IDE 中,仅举几例:
- 饭桶
- Dockerfile 文件
- 自动缩进、自动完成
- 代码拼写检查
- 内联代码运行
为什么不是一个简单的文本编辑器?因为本文的目标是展示如何准备数据科学项目,以便将它们移交给生产开发,所以您需要与不同的开发人员或开发团队协作。使用可用的工具来简化这项任务是我们需要使用 ide 的原因。此外,您不需要经常担心 CTRL+S'ing,因为 PyCharm 具有自动保存功能。
在开始项目之前,有必要为您的项目设置一个虚拟环境。什么是虚拟环境,为什么需要虚拟环境?假设您不会为每个单独的项目更换计算机,虚拟环境允许您将每个项目的依赖项彼此分开。一个非常明显的例子是,当您为一个项目运行 Python 2,而为另一个项目运行 Python 3 时。虚拟环境允许您分离这些 Python 版本。除此之外,如果将它们安装到一个环境中,您还可能会有不同的包依赖关系,并且会相互干扰(例如 Tensorflow 1.x 与 Tensorflow 2.x)。因此,在开始一个新项目之前,用 conda 终端创建一个虚拟环境:
conda create -n [ENVIRONMENT_NAME] python=PYTHON_VERSION
这将在 conda 的标准位置使用您想要的 python 版本创建一个新的虚拟环境。使用以下命令激活该环境,您就可以开始了:
activate [ENVIRONMENT_NAME]
你还需要将你的虚拟环境链接到你的 PyCharm IDE,关于这个的教程可以在这里找到。这允许您直接从 PyCharm 运行代码,并利用 IDE 的功能,例如使用调试器。
需要的最后一步是在您的虚拟环境中安装一个 Jupyter 内核,该内核链接到您的虚拟环境。这可以通过激活虚拟环境并运行以下命令来实现:
pip install ipykernelpython -m ipykernel install --user --name [VIRTUAL_ENVIRONMENT_NAME] --display-name "[DISPLAY_NAME]"
这些命令的作用是安装 Jupyter 内核包,并使用您的虚拟环境创建一个定制的 Jupyter 内核供您选择。关于 Jupyter 的更多信息以及它为什么有用可以在下一段找到。设置好环境后,让我们从最重要的包开始。
2.用于数据探索的重要 Python 模块
有了您的环境,我们可以更深入地了解开始您的数据科学项目所需的工具:数据探索。不管你得到的数据是什么,你总是需要去探索它。有很多特定的工具可以用来完成这项任务,但是这里列出了最相关的工具。
这个名单上的第一名当然是朱庇特。Jupyter Notebook 是一个工具,它将代码、代码的输出、markdown 和任何可视化内容结合在一个文档中。它用于快速原型和可视化,因此是探索性数据分析的伟大工具,也是您踏上数据科学之旅的第一步。一个非常好的笔记本的例子可以在这里找到:https://nb viewer . jupyter . org/github/rhi ever/Data-Analysis-and-Machine-Learning-Projects/blob/master/Example-Data-science-notebook/Example % 2520 Machine % 2520 Learning % 2520 note book . ipynb
你可以在那里找到融合成一个有用文件的不同格式:你有 Markdown 来描述正在发生的事情,结合图片和文本信息来分享必要的领域知识。Python 代码和每个单元各自的输出显示在它的下面。此外,任何可视化都可以直接显示在代码行之间:
Visualization of the Iris dataset (Source)
作为数据科学家,这不仅有助于您探索数据并生成第一个代码原型,您还可以轻松地与其他感兴趣的人分享您的成果。
但是朱庇特和熊猫在一起是不完整的。Pandas 是一个 python 包,允许您对表格数据和时间序列数据进行数据分析。你可以把熊猫描述为巨蟒的兴奋剂。让我们来看看一个非常简单的方法:我们加载虹膜数据集并显示其中包含的第一个条目。对于熊猫,我们得到了以下结果:
Loading a dataset into Pandas
接下来,让我们讨论两个最重要的包:NumPy 和 SciPy。NumPy 是一个对类似数组的数据提供高效计算的包。SciPy 是一个为 Python 提供科学和数值计算工具的包。总之,这些包是任何数据科学项目的支柱。从非常简单的统计分析开始,例如获得数字数据的标准偏差,您可以操作数组,运行算法,例如快速傅立叶变换等等。
数字分析并不是数据探索的全部:通过可视化,您将获得对数据的更多洞察。为此,可以使用许多软件包,但其中最突出的一个是 Matplotlib。Matplotlib 是一个绘图库,允许您快速查看数据发生了什么,从而获得新的见解。看一下上面的虹膜数据集的例子,它有两个特征:
Visualizing two features of the Iris data set
您可以看到萼片长度的直方图,以及不同例子的萼片长度和萼片宽度的散点图,并且已经对所提供的数据有了直观的了解。
有了这个初始设置,您应该准备好开始您的数据科学之旅。第 2 部分将处理更有趣的部分:数据准备和创建机器学习模型。
作为软件的数据科学:从笔记本到工具[第 2 部分]
原文:https://towardsdatascience.com/data-science-as-software-from-notebooks-to-tools-part-2-e1d1bf99d067?source=collection_archive---------19-----------------------
这是关于如何确保您的数据科学项目能够从原型进入生产环境的系列文章的第 2 部分,以及实现这一点的必要步骤。在深入细节之前,让我们先从议程开始:
- 设置您的工作环境[ 第 1 部分
- 数据探索的重要模块[ 第一部分
- 机器学习第一部分:数据预处理[第二部分]
- 机器学习第二部分:模型[第二部分]
- 从朱庇特[ 第三部 ]继续
- 闪亮的东西:我们什么时候得到一个前端?[ 第三部分
- 您在代码中的日常工作:保持标准[ 第 3 部分
机器学习第一部分:数据预处理
数据科学中最重要也是最耗时的任务是数据预处理:清理数据、选择要素或生成新要素。幸运的是,我们有大量的工具可以帮助我们完成这项任务。让我们从基本上所有项目中使用的通用工具开始,然后从那里继续到特定的领域。
在每个列表的最顶端,你总是会看到熊猫。第 1 部分已经强调了 Pandas 是一个数据探索工具,但是这个库提供了更多,尤其是结合了 numpy 。
一个非常简单的例子就是 Titanic 数据集。这个数据集包含泰坦尼克号上的乘客信息,可以用来预测乘客是否能够生还。在这个数据集中,我们已经可以处理一个最令人沮丧但也经常发生的事实:丢失数据。在这种情况下,乘客信息有时会遗漏乘客的年龄。为了缓解这种情况,我们可以用乘客年龄的平均值来填充这些条目。本要点说明了如何:
深入研究机器学习,你最终将不可避免地使用 scikit-learn 。这个库提供了你可能遇到的最全面的机器学习方法。这里我想强调一下您可以使用的预处理工具。
关于 sklearn 预处理能力的全面概述可以在他们的网站上找到,但我想对 titanic 数据集的方法做一个快速概述。
将数据缩放到 0 到 1 之间的范围是一种非常标准的方法,可以通过安装 sklearn 提供的 scaler 方法轻松实现:
其他主要方法包括非线性变换,例如将数据映射到均匀分布或高斯分布、分类数据编码、连续数据离散化或生成多项式要素等。总而言之,现在应该很清楚,sklearn 提供了许多工具和方法,您可以在项目中使用它们来预处理您拥有的数据。
在没有特定领域的情况下,拥有一个通用的库是很好的,但是当您遇到特定领域的问题时,通常需要更多的库。根据您工作的领域,Python 中有不同的库可用。
让我们从图像开始,因为计算机视觉非常受欢迎,并且有很多机会应用数据科学。这里流行的库包括艾德里安·罗斯布鲁克的 openCV 、 imutils 和 Pillow 。坦率地说,大多数任务已经可以用 openCV 完成,另外两个库是填补空白的很好的补充。如果你对 Python 中计算机视觉入门的一般介绍感兴趣,你可以看看我的知识库:https://github.com/NatholBMX/CV_Introduction
当处理音频数据时,对于音频数据的一般处理,没有什么比 Librosa 更好的了。提取音频特征,检测你的音频细节(如开始,节拍和速度等。)或分解光谱图。Librosa 是您音频处理的首选解决方案。
就文本数据而言,您可以使用这里的任何或所有自然语言处理(NLP)库: spaCy , gensim , NLTK 。这些库有不同的可用特性,您可以结合使用它们。我将 spaCy 用于与 NLTK 的词干支持相结合的文本数据预处理。Gensim 提供了相同的功能,但我更喜欢这个库来训练特定的模型(例如 Word2Vec )。
使用这些库是一个起点,因为许多问题已经可以用这些库解决了。预处理数据是一个必要的步骤
机器学习第二部分:模型
数据科学中的建模不仅包括选择模型,还包括定义和设计合适的特性供模型使用。清理和预处理数据后,有多个库可供您在此阶段使用。
sklearn 经常出现在这个列表中,但是有必要再一次包括这个库,因为它对所支持的特性和算法非常详尽。Sklearn 提供了监督学习和非监督学习的模型,但我们将专注于前者。从简单模型(例如,广义线性模型)开始,它包括支持向量机、朴素贝叶斯、基于简单树的模型以及对神经网络的基本支持。
如果这还不够,您可以通过包含特定于模型的库来增加选择的可能性。对于基于树的模型,有 LightGBM 、 XGBoost 或 catboost 。
深度学习领域,即涉及神经网络工作的所有领域,提供了许多库,但最著名的可能是与 Keras 、 PyTorch 或 Caffe 结合的 Tensorflow 2.0 。有许多不同的“本月特色”DL 框架,因此快速比较一下提到的那些应该会让您知道一般使用什么:
Google Trends for different Deep Learning frameworks
让我们回顾一下数据科学工作流,看看我们目前所处的位置。该过程可分为以下几个步骤:
Data Science Workflow
数据获取:如果你认为所有需要的数据都是现成可用的,那就太好了,但现实却并非如此。第一步包括导入内部数据源(如公司数据库),也可能是外部数据源(如网络爬行),甚至是收集你自己的数据。
数据探索:对数据有一个基本的了解是至关重要的,所以这一步包括探索性统计(Pandas 在这方面特别有用,尤其是与 Jupyter 结合),可视化你的发现,甚至进行领域专家访谈。当数据科学家拥有他们工作领域的知识时,他们的工作会更好。为了促进这一点,当数据科学家缺乏领域知识时,您需要与领域专家合作。
数据清洗:正如本系列文章的这一部分所描述的,这一部分需要清洗和缩放技术,例如标准化。此外,不要犹豫,从简单开始,逐渐增加你的解决方案的复杂性。这意味着:删除您当前不需要或不使用的不必要数据,以简化您的解决方案。
建模:选择你的方法所需的相关特征或设计特征(例如用 Librosa 生成声音特征)。选择或设计解决方案所需的模型,并训练这些模型。
评估:这是一个很大的部分,因为你需要确保你的数据是适合的任务,你的数据预处理是正确的,模型给出了预期的结果。
这些步骤是迭代完成的,这意味着你多次通过这个过程,而且每个步骤也多次通过。例如,选择不同的要素会影响您需要如何预处理数据以及模型的外观。
到目前为止,在这些系列中,我们已经涵盖了除评估之外的工具所支持的工作流的每一个部分。评估您的结果是一个持续的过程,我目前不知道有任何工具可以可靠地支持您完成这项任务。
第 3 部分将介绍如何从 Jupyter 继续前进,如何处理前端和代码质量。
作为软件的数据科学:从笔记本到工具[第 3 部分]
原文:https://towardsdatascience.com/data-science-as-software-from-notebooks-to-tools-part-3-84023404d428?source=collection_archive---------23-----------------------
这是如何从 Jupyter 笔记本到数据科学软件解决方案系列的最后一部分。第 1 部分讲述了设置工作环境和数据探索的基础知识。第二部分深入数据预处理和建模。第 3 部分将讨论如何从 Jupyter、前端开发和日常代码工作中继续前进。该系列会议的总体议程如下:
- 设置您的工作环境[ 第 1 部分
- 数据探索的重要模块[ 第 1 部分
- 机器学习第 1 部分:数据预处理[ 第 2 部分 ]
- 机器学习第二部分:模型[ 第二部分
- 离开 Jupyter[第 3 部分]
- 闪亮的东西:我们什么时候得到一个前端?[第三部分]
- 您在代码中的日常工作:保持标准[第 3 部分]
假设您已经完成了原型的第一次迭代:您有一个加载数据的管道,您对它进行预处理,根据需要进行转换,并且能够训练一个模型。现在你如何从这里继续前进?
第一步是理解在 Jupyter 中编程和使用 IDE 之间的区别(PyCharm 将是我们的例子)。Jupyter 在以下方面非常出色:
- 原型:你可以很容易地将代码组合在一起,然后在几个小时内就可以开始制作一些东西。
- 直接输出:因为你的代码是在单元格中运行的,所以每个单元格的输出都是在运行完单元格后直接输出的。这增强了你制作原型或尝试新方法的能力,因为你能很快得到反馈。
- 可视化 : Jupyter 非常适合可视化。因为你可以很容易地包含像 matplotlib 这样的库,所以你不仅可以得到变量值的反馈,还可以制作图表、图表、表格等等。
- 内存中的变量:这是关于 Jupyter 的一个需要重点强调的特性。只要笔记本的变量不在方法中,它们就会被保存在内存中。这适用于任何直接运行的 python 脚本,但是由于 Jupyter 笔记本的原型性质,在 Jupyter 中提倡使用这种脚本。
您可以看到 Jupyter 是一个很好的探索和原型工具,我强烈建议您在开始数据科学项目时使用这个工具。但是在第一个工作原型之后,是时候将一些软件工艺引入你的项目了。使用 IDE 有以下优点:
- 模块化:你可以轻松地浏览你的代码,无论是方法、类还是模块(甚至是库)。这加强了对您的逻辑使用模块化的方法,意味着您将代码分成组件。
- 代码质量:你的 IDE 提供了很多不同的工具,通过适当的编码指南(比如 PEP 8 )来提高代码质量,并且可以立即突出语法错误,还可以指出未使用的变量等等。
- 重构:重构意味着在不改变底层逻辑的情况下重构你的代码。简单的重构任务,如重命名变量或方法,使用复制和粘贴很简单,但是将方法实现从一个模块移动到另一个模块就比较困难了。IDE 提供的工具可以在这方面支持您。
- Git 支持:当项目有不止一个人参与时,版本控制非常重要,即使这样,我也强烈建议使用 VCS(版本控制系统)。Git 可能是目前最著名的分布式 VCS,理想情况下,您的 IDE 可以集成它。
- 代码检查:每当你有 bug 或性能问题时,你可以做的不仅仅是打印语句。使用调试器一行一行地检查关键代码,使用分析器进行性能测量,这只是 IDE 支持的几件事情。
下面的比较突出了 Jupyter 和 IDE 之间的区别。
Comparsion of using Jupyter vs. programming in an IDE (Image by Author)
你如何开始更多地利用 ide,并从 Jupyter-only 继续前进?在我看来,实现这一点的最简单的方法如下。
- 方法:把你的代码分成不同的方法,而不是“代码散文”(一个连续的脚本,一行一行地运行所有的东西)。用定义的输入和输出将您的逻辑分成不同的方法,并开始将逻辑分组到方法中。尽量保持抽象,这样你就可以用一种方法替换另一种方法,而不必重写大部分代码。
- 模块:将你的方法组合在一起,并用它们创建模块或类。当您有多个想要单独操作的对象并且每个对象需要不同的属性时,就需要类。模块更加通用,将更大的方法组组合在一起,这些方法都遵循一个特定的目标。
- 重构:重构是重构或精炼你的代码。没有完美的代码,从某种意义上说,一个编码项目永远不会结束。这就是为什么你应该以一种允许你重构代码的方式,尽量减少方法之间的依赖(例如,交换一个规范化方法和另一个)。重构应该定期进行,例如每天 20 分钟或者每周五几个小时(“重构周五”)。
当然,这些只是您旅程中的第一步,但是它们会对您有很大的帮助,并提高代码质量和代码性能。
知道如何从 Jupyter 到软件工具是一回事,但是你必须在日常工作中实践这些知识。为此,您有一个指导原则:“干净的代码”。罗伯特·马丁的这本书给了你语言不可知论的原则和指南。不需要阅读这本书,你就可以学到一些东西:
- 变量、模块和方法名称应该反映这些模块/方法中做了什么或者变量存储了什么。
- 保持方法简短和一致,意思是:一个方法有一个明确定义的范围,并且只做一件事
- 干:不要重复自己。代码中的知识应该保存在一个地方。如果你做一件事超过两次,你应该想出一个方法。
- 吻:保持简单,笨蛋。为什么要把事情复杂化?尽可能争取最简单的解决方案。
- 定期重构。你的软件在成长,你不断得到新的见解或想法去尝试。花时间重构你所做的,整理你的代码。
一个非常重要的主题代码版本控制。您如何跟踪随着时间的推移对代码做了什么?为此,需要一个版本控制软件(VCS)。尽管存在不同的版本(集中式、非集中式),git 可能是其中最著名的一个。
最基本形式的 Git 遵循一种独特的模式,它足以让您入门。Git 由一个远程存储库和一个本地存储库组成,远程存储库是所有贡献者从中获取的全局代码库,本地存储库就是您正在使用的存储库。以下命令帮助您入门:
- git pull:从远程存储库中提取。
- git add:添加为提交而更改的文件
- git commit:将添加的文件提交到远程存储库
- git push:将提交的文件推送到存储库
这当然是非常基本的,如果你对这个话题更感兴趣,我建议你阅读一下一般的 git ,特别是 GitHub Flow 。
您需要从中吸取的是,即使您独自处理代码,也需要进行代码版本控制,因为您可能想要回滚到以前的版本,或者您想要并行保持不同的分支。
在我们结束这个系列之前,我想谈谈一个非常重要但有时被忽视的话题:你如何分享你的结果?一个 Jupyter 笔记本只能让你到此为止,当涉及到专业环境时,分享结果至少与首先获得结果一样有价值。在这个地方分享成果意味着
- 如何在软件应用程序中访问你的模型?
- 你如何可视化你的模型的结果?
首先:让你的模型在软件应用程序中可访问是通过软件接口来完成的。您可以将方法编码为模型的包装器,从而拥有一个接口。但是这只能在单一的应用程序中工作,这意味着任何代码、数据库和前端都连接在同一台机器上,这是很不现实的。
在最基本的形式中,您有一个数据库、后端应用程序(包含您的模型和任何其他业务逻辑)和一个与后端通信的前端。这里显示了该基础设施的一个非常简单的示意图:
Basic architecture of an integrated application (Image by Author)
实现这一点的最简单的方法是编写一个包含您的模型并提供接口的后端应用程序。Python 为流行的数据库( PyMongo 或 psycopg )提供了许多包装器,以供您访问。
另一方面,提供一个接口最好的方法是创建 REST APIs,并通过作为 web 服务器的 Flask 或 Django 运行您的应用程序。关于如何做到这一点的独立文章将会接踵而至,敬请关注!
总结这个系列,到目前为止我们已经讨论了什么?
第 1 部分展示了在 Python 中建立工作环境的基础,以及用于初始数据探索的模块,如 Jupyter notebook 和 Pandas。第 2 部分对数据预处理有更深入的了解,尤其是图像、语言和音频数据领域。它还涵盖了机器学习模型的库。这一部分讲述了如何超越 Jupyter,需要记住的编码标准以及架构的一般方法。
作为电子竞技表现和策略支撑的数据科学(一)
原文:https://towardsdatascience.com/data-science-as-support-of-esports-performance-and-strategies-i-d511843b00a1?source=collection_archive---------15-----------------------
第一步:关于英雄联盟世界锦标赛的一般案例研究
在进入主题之前,这里有一些关于驱动这个项目的动机的免责声明和信息。
这篇文章的目标读者是任何想要参与数据分析的体育/电子竞技或科技爱好者。我在这里的主要目标是探索各种数据科学工具,从统计分析到机器学习技术,以便获得理解电子竞技中的性能或策略轴的新钥匙。由于它将专注于英雄联盟,所以读者最好至少对游戏规则有基本的了解。
本文是一个系列的第一集。作为对主题的初步了解,这里讨论的两个主要观点是:
- 如何获取数据。
- 发现未来分析的轴心。
这个系列将是一个游乐场和实验场所。由于我还没有为任何运营团队工作,性能将不是唯一的关注点。我的动机大多是将各种机器学习技术应用到一个我很了解的话题中;我相信通过这种方式可以发现新的知识或线索(也许不会)。
哪些数据?
在欧洲举办的第九届英雄联盟世界锦标赛以 FunPlus Phoenix 的胜利结束,这是中国队第二次背靠背。每年的世界锦标赛都是一年比赛的总结。24 支队伍从全球 13 个地区、127 名选手和一百多场比赛中脱颖而出。
这个锦标赛,也称为世界锦标赛,是一个非常好的分析主题,原因有很多:
- 合理的数据量。
- 来自所有不同地区的玩家和策略的多样性。
- 这是目前为止最受关注的比赛,所以我们有很多已经完成的分析、资源和材料。
我们也可以添加大联盟常规赛的数据,如果我们想发现更多关于地区比赛风格,球员简介,选秀优先权的一般事情…
怎么会?
知道分析什么是一回事,获取数据是另一回事。
令人高兴的是,开发游戏的公司 Riot Games 提供了一些关于每个公共游戏的非常详细的数据。通过它的公共 API ,我们可以得到很多关于比赛和球员的不同数值和指标。
然而,锦标赛是在不同的服务器上运行的,而不是普通玩家使用的服务器。因此,我们不得不使用变通办法,不从公共 API 获取数据,而是从另一个提供几乎相同类型数据的服务器获取数据。我们唯一需要的是获得每个游戏的标识符,这可能很难找到。感谢Tim Sevenhuysen和他的项目 Oracle's Elixir ,通过下载整个季节拆分的转储并选择我们想要的列,这些数据可以自由而简单地获得。所以真的,对他大感恩。
Actors involved, querying architecture and steps.
既然甲骨文的灵丹妙药已经是关于聚合大联盟的数据,那么这种工作有什么意义呢?主要目标是获得一个更高粒度的和更完整的数据,我们是否需要关注游戏的特定方面,比如玩家、冠军、团队、地域、丛林路径、玩家分项……它不应该受到架构的限制。同样,使用相同的代码,未来的扩展将有可能获得常规排名游戏数据。如果我们想要一个巨大的体积,更普遍的趋势或侦察工具,这将是非常有趣的。
涉及的技术
在这样的项目中很少会用到技术。我们的目标是拥有一个有效的已经被证实的技术堆栈,而不是试验新的架构。以下是这些工具的简要概述:
- Python:如果你想学习当代数据分析或机器学习,那么 python 应该是你的主要关注点。从简短而强大的语法、解释语言的优势和大量编译库来看,python 通过像 Pandas 、 Tensorflow 、 Scikit 或 Seaborn 这样的工具,提供了一些高质量的数据处理、学习或可视化工具。
- Jupyter:由于为这一系列文章所做的工作更多的是一种探索性的工作,而不是为每个人构建一个健壮的框架,所以笔记本环境非常适合。这样,编码更加灵活,让测试和试验阶段有更多的空间。
- MySQL:我们需要存储的数据是明确预定义的,可能已经存储在原始数据库的关系模型中。此外,我们需要一个可以查询大量数据并汇总结果的工具。SQL 和 MySQL 实现可以免费使用,并且非常健壮。
- Tableau:在未来的分析中,除了 python 中产生的可视化,我还可以使用这个软件作为补充。
Database relational model.
这个数据库模型是原始的,但是严格遵循 Riot API 返回的 JSON 结构(树结构)。此外,Oracle 的 Elixir 中的一些竞争信息存储在 GameMetadata 中。时间线信息尚未整合,因为此类数据需要更全面的关注。它们将被整合起来进行具体分析。
请注意,玩家和团队并不代表竞争环境中的独特实体,如 G2、Invictus Gaming 或 Doublelift。它存储了一个球员在一场比赛中的实际状态,而一个球队在这场比赛中只有 5 名球员。拥有能够跟踪球员结构和移动的实体是件好事,特别是在 T2 时代。但这样的工作需要大量的手工工作,是另一项任务,完全可以在未来的扩展中作为一个新的层添加。
但是,对于竞技游戏来说,我们必须认识到数据的质量。通过对游戏中的用户名进行简单的分割,我们可以以统一的方式检索团队的标签和用户名,这大大简化了未来的分析。还有玩家好像是按角色排序的,这也是一个真正有用的值。
最后,一些分析。
作为对分析工作的第一次审视,我们必须选择一种方法。数据集提供了许多可能性,无论我们是想专注于球队、挡拆、区域打法……这篇文章已经很长了,目标主要是展示数据准备过程。我认为首先关注球员和角色之间统计数据的差异可以提供数据集的一个很好的概览。
面向特征的分析
在下面的分析中,数据是世界锦标赛中每个球员的汇总(平均值)。我们只选择至少打了 3 场比赛的球员,以避免有偏见的平均值。几乎每一个值(=特征)都根据比赛的持续时间进行标准化:一个玩游戏时间越长的玩家,总伤害越大。然后,我将使用一些后缀来引用规范化方法:
- AVG / 平均值:最简单的聚合。它使用可用游戏的平均值。
- PM / 每分钟:总值除以总时长。这种方法假设所有值都是随时间线性变化的。这并不总是正确的,例如,冠军在游戏后期比早期造成更多的伤害。但在我看来,相对于原始值,这是一个很好的权衡。
- 部分/部分或百分比:该值表示为包含它的另一个值的一部分。例如,魔法、物理和真实伤害是总伤害的三个互补的子部分。
获得所有变量的清晰概览的一个非常实用的工具是相关矩阵。每一列都与所有其他列进行比较。无需深入定义,相关性研究两个随机变量是正相关(蓝色)、负相关(红色)还是独立(白色)。
警告:相关性不是因果关系
当列没有排序时,相关矩阵可能难以阅读。作为补充,我们可以使用凝聚聚类,如果我们将相关性视为相似性。这样,我们就有了一棵相关变量在更近的叶子上的树。
Correlation matrix, with scale, agglomerative tree and clusters.
解释视觉矩阵和树的每一个结论都会适得其反。然而,有趣的是至少有几条线索可供未来分析:
- 在以绩效为导向的工作中,主要目标是最大化胜率。我们可以观察到大部分量化指标都与和it 相关,其中参与杀伤和助攻的数值较高。作为第一种解释:玩家在有组织的/集体的战斗中取得胜利的队伍会得到更好的奖励。
- 我们还可以观察到一些与胜率反相关的数值。显然,我们在这里检索死亡和损失。但是有些价值并不是那么明显:游戏持续时间、物理伤害和人群控制也是反相关的。这些指标可以给我们关于元游戏的提示,并且可以进行更深入的研究。
- 与支援角色相关联的视野、守卫和辅助与诸如耕作、获得的黄金或伤害输出等附带价值有很大区别。
- 炮塔上的伤害与丛林农场高度相关,这突出了这个角色对车道压力和目标恢复的作用。
- 第一滴血的出现与胜率只有轻微的关联,似乎并不显著。它不应被视为期货分析的主要特征。
面向角色的分析
我们看到一些功能可以被聚集并与特定的游戏角色相关联。我们可以根据角色查看这些变量的分布和预测,看看我们是否真的可以更深入地关注一些特定的任务(丛林、广告宣传、单飞、中层或高层以及支持)。
Pair-plot of selected variables : scatter-plots and distributions highlighted by roles.
Decision tree with role as target.
我们可以在投影上观察到,丛林和支援角色实际上是分开的,可以很容易地聚集在一起。为了证实这个假设,我们可以对我们的类应用决策树。
这里的目标不是能够真正预测一个玩家的角色,而是对职业的重叠有一个概念。
通过视觉分析得出结论,丛林和支援都可以用非常简单的规则分开,这要归功于每分钟分别应用的丛林农场和视觉。
我们可以观察到进位(Solo laner:Top 和 Mid,Botlaner : ADC)具有更多相似的轮廓,并且更难分离。在未来的分析中,我们可以将重点放在 3 个不同角色的个人资料上:丛林、支持和运输。
Principal Component Analysis, with roles, axis representation and some player labels.
作为第三项检查,我们还可以对数据集应用降维算法,以仅在 2 个轴上表示变量的最大方差。
我们再次检索我们的 3 个集群。此外,通过观察空间中的球员,我们感觉这可能与表现出色的球队的球员有关。这是第一个线索,但一个主要目标是观察的表演和每个角色的打法。
结论
在这篇文章中,我们已经看到了两个主要步骤 t 走向更专业的分析:
- 数据准备步骤,包括查询架构、涉及的技术和关系模型。
- 概述关注玩家的不同变量及其与游戏角色的关系。
下一篇文章可能会关注世界锦标赛期间的丛林者或支持者,试图了解不同比赛风格的效率。
欢迎任何关于技术、方法、动机或结论的评论或问题。欢迎通过我的推特账号@swnw_dev 联系我。
这里有一个包含笔记本和 SQL 文件的存储库:https://github.com/Hugoswnw/league-analysis。原始数据不公开。
谢谢你的时间。
Kaggle 的数据科学
原文:https://towardsdatascience.com/data-science-at-kaggle-9c1e17859d4b?source=collection_archive---------26-----------------------
苹果 | 谷歌 | SPOTIFY | 其他
Rachael Tatman 在 TDS 播客
编者按:这是迈向数据科学播客“攀登数据科学阶梯”系列的第 12 集,由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:
最近我经常被问到的一个问题是,为了在数据科学领域找到一份工作,研究生学位——尤其是博士学位——是否是必要的。当然,不同公司的教育要求差异很大,这就是为什么我认为这个问题最有价值的答案往往不是来自招聘人员或招聘经理,而是来自那些拥有高级学位的数据科学家,他们可以判断这些数据是否真的有用。
不过,这远不是我想在本期播客中与雷切尔·塔曼坐下来谈谈的唯一原因。除了拥有计算社会语言学博士学位,Rachael 还是 Kaggle 的一名数据科学家,也是一名受欢迎的直播程序员(点击这里查看她的 Twitch stream)。她对如何进入数据科学领域、如何充分利用 Kaggle、NLP 的未来以及研究生学位对数据科学角色的价值有很多深刻的见解。
以下是我们聊天中的一些最大收获:
- 研究生院并不适合每一个人,有很多原因可以让你在没有研究生院的情况下一头扎进求职大军。尤其是博士学位需要很长时间才能完成,而且不能保证你在学习期间学到的过时知识在毕业时不会过时。
- Kaggle 上没有足够多的人利用的一件事是 Kaggle 内核——基本上是 Kaggle 用户分享他们关于竞争战略或一般数据科学问题的想法的论坛。如果你想看看有能力的数据科学家之间的对话是什么样子,这是一个很好的去处!
- 尽管博客和 MOOCs 可以很好地学习数据科学,但它们教不好的一件事是过程。数据科学家如何修复他们代码中的错误?可以将错误信息复制/粘贴到 Google 中吗?答案当然是肯定的,但看到一位真正的数据科学家像 Rachael 在 Twitch 上那样直播她的问题解决过程,可以让你看到你应该在项目中使用的思维过程。
你可以在推特@rctatman 或她的 Twitch stream 上关注瑞秋。
我们正在寻找能与我们的观众分享有价值的东西的客人。如果你碰巧知道谁是合适的人选,请在这里告诉我们:【publication@towardsdatascience.com】T4。
数据科学最佳实践:Python 环境
原文:https://towardsdatascience.com/data-science-best-practices-python-environments-354b0dacd43a?source=collection_archive---------18-----------------------
Photo by Tracy Adams on Unsplash
什么是 Python 虚拟环境?
虚拟环境是隔离的编码空间,可以在其中安装、升级和使用 Python 包,而不是在您的工作环境中全局安装包。虚拟环境可以用. txt 或。yml 文件,它通过终端/命令提示符/anaconda 提示符列出了软件包名称及其版本。当您安装或升级软件包时,旧版本仍安装在您的目录中,因此不同的虚拟环境可以使用不同的软件包版本。
为什么在数据科学中使用虚拟环境?
想象一下,你花了几个月的时间清理、操作、创建特征、训练你的模型、改进模型、评估你的模型性能;你操作你的模型并投入生产。此时,您还没有听说过虚拟环境,所以您进入了下一个项目。您找到了下一个项目需要的 Python 包,但是您首先必须更新比如说 Pandas,所以您决定使用以下命令一次性更新您的所有包:
conda update --all
你开始了你的一天,但是从你最近的一个项目中得到一个警告,告诉你有东西坏了。如果你够幸运,并且这个 bug 并不模糊,你就能够修复它。然而,如果你像我的同事一样不幸,碰巧在一个服务器上运行你的生产模型,并且你破坏了整个 Python path 环境,那么,运气不好。是时候清理干净并托管新服务器了。
您还可能希望使用特定于项目的虚拟环境,通过在环境中指明所有包及其指定版本来确保代码的可再现性。通过使用虚拟环境,您还可以绕过安装软件包时可能需要的管理员权限。最后,使用环境是您可以更好地组织项目的另一个步骤,或者当您只需要一个项目时,避免将包安装到您的默认路径。
如何创建和安装虚拟环境?
以下是使用 conda 创建环境的方法之一
conda create --name myenv ## Replace myenv with environment name
上面的代码将在当前路径中创建环境,使用的 Python 版本与您当前使用的版本相同,因为您没有指定版本。您可以通过以下方式激活此环境:
conda activate myenv ## Replace myenv with environment name
一旦环境被激活,您就可以正常安装软件包,它只会被添加到该环境中。如果要在创建和激活环境之前指定软件包,可以创建一个文件并将文件扩展名更改为。格式如下的 yml。名称部分将是您激活环境时使用的环境名称。
在你喝完之后。yml 文件就绪,执行此操作以从文件创建环境:
conda env create -f environment.yml
的名字是 environment.yml 。yml 文件。
将环境安装为您的 Jupyter 笔记本内核
对于喜欢使用 Jupyter 笔记本的人来说,这是非常重要的一步。
python -m ipykernel install --user --name myenv
如果不执行这一行,您将无法使用刚刚在 Jupyter 笔记本中创建的环境。
更新您的环境
如果您由于以下原因需要更新您的环境:
- 您的一个核心依赖项的新版本发布了
- 需要安装额外的软件包
- 或者你不再需要一个包裹
编辑您的。yml 文件,编辑包名,然后保存它。打开终端/命令提示符,导航到的目录。yml 文件并运行以下代码:
conda env update --file environment.yml --prune
克隆环境
您可以在终端/命令提示符下使用以下代码来制作环境的精确副本:
conda create --name clonename --clone myenv
clonename 将是您想要命名您的克隆环境的名称, myenv 是您想要克隆的环境的名称。
谢谢你看我的文章!
如果你觉得这篇内容很有帮助,并想阅读我的其他内容,请随时关注我: Twitter
insta gram
脸书
我会发布一些对你有用的数据科学技巧和窍门!
课堂之外的数据科学
原文:https://towardsdatascience.com/data-science-beyond-the-classroom-f9e210d37953?source=collection_archive---------33-----------------------
苹果 | 谷歌 | SPOTIFY | 其他
Sanyam Bhutani 在 TDS 播客
编者按:这是迈向数据科学播客“攀登数据科学阶梯”系列的第 10 集,由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:
几年前,数据科学在理论和实践上并没有太大的区别:一个 jupyter 笔记本和几个导入就是你做有意义的数据科学工作所需要的全部。如今,随着课堂与行业现实的重叠越来越少,对于数据科学家来说,培养独立学习和打破常规的能力变得越来越重要。
很少有人像 Sanyam Bhutani 这样有效地做到了这一点,他是 H2O.ai 的一名即将上任的 ML 工程师,是排名前 1%的 Kaggler,受欢迎的博客作者和 Chai Time 数据科学播客的主持人。Sanyam 对课堂教学和行业需求之间的不匹配有着独特的看法:他在大学期间就开始做 ML 合同工作,并采访了一些世界顶级的 Kagglers,以更好地了解橡胶与数据科学道路的交汇点。
以下是我们从对话中获得的最大收获:
- 将初学者与有经验的数据科学家真正区分开来的最佳实践之一是维护一个实用程序脚本,在该脚本中保存您经常使用的方便的函数,如数据清理、数据提取、可视化等。随着您解决更多的问题,您的实用程序脚本将会增长,使您成为更高效的数据科学家,并允许您将更多的时间和注意力放在宏观问题上,而不是琐碎的细节上。
- 当你在数据科学领域从事合同工作时,按时交付产品比从你的模型中榨取额外的 0.1%的性能要重要得多。不要让完美成为优秀的敌人。
- 与最后一点相关,您可能会发现自己在想“对于我的模型来说,有多好才算足够好?”答案通常是,“尽我所能”时间是决定何时停止模型调优和优化的最重要因素。
- 说到网络,人们很容易高估会议的重要性。因为会议只是一次性事件,它们并不真正允许你随着时间的推移与人建立关系,关系才是最重要的。定期聚会通常是一种更好的方式,因为你可以在持续的基础上与同一批人建立社会资本。引用艾德的话,“会议是网络的舞蹈俱乐部。”]
- 数据科学社区异乎寻常地开放,如果他们得到了深思熟虑的帮助,大多数人都会很乐意提供帮助。问题是,大多数人不会向不认识的人伸出援手,因为他们担心社交尴尬的因素。克服你对这些接触带来的社交尴尬的恐惧是一个很大的竞争优势:这很容易做到(如果你没有得到回应,你所付出的代价是挫伤你的自尊),如果成功了,它可以带来高价值的联系和见解。
- 如果你想与数据科学世界分享你的工作,解释清楚的博客通常会击败 GitHub repos。尽管数据科学社区可能是技术性的,但一份不错的、不太技术性的工作总结更容易被分享,也有助于展示你的沟通技巧。
- 与最后一点相关:不要害怕写失败的实验/项目。总会从无效的结果中吸取教训,告诉自己你会以某种方式写下你的工作是抵消失败恐惧的好方法,否则会限制你提出项目想法的雄心。
如果你在 Twitter 上,请随时与我联系 @jeremiecharris !
宣传之外的数据科学—您真正需要什么样的技能?
原文:https://towardsdatascience.com/data-science-beyond-the-hype-what-kind-of-skills-you-really-need-3e66c1ab5235?source=collection_archive---------12-----------------------
数据科学的宣传周期即将结束,成为数据科学家的技能也在发生变化。除了摆弄最佳性能的机器学习模型,让数据科学产生商业影响比以往任何时候都更重要。在柏林 达泰库 举办的分析&数据科学会议上,我讨论了当前有助于定义和构建数据科学工作流以交付真正价值的技能组合。我演讲的幻灯片你可以在这里找到。
The Data Science Unicorn — Photo by Andrea Tummons on Unsplash
在准备我的演讲时,我的一个“老”朋友在 LinkedIn 上联系了我。像我一样,他完成了神经科学的博士学位,现在正在数据科学领域寻找职业机会。此时,我在问自己:要成为一名数据科学家,他应该具备什么样的技能?我不认为成为一名成功的数据专家需要博士学位。你应该带着对数据的热情和强大的分析思维。但是需要哪些技能呢?
有那么多文章和观点不符合我自己的经历。具有讽刺意味的是,我还没有找到一个关于数据科学的好的或精确的定义,但却有相当具体和压倒性的期望。数据科学似乎被大肆宣传了。当然,我明白这种炒作是必要的(例如,分析上的竞争(D avenport,2006) 或者推动传统部门,如 IT 或营销)。
然而,我终于找到了一篇非常好的文章,作者是德国电信公司的数据科学家张秀坤·海茨 (2019)。他确定了四个技能集群:
Figure 1: “Skill portfolio of the third wave data scientist.”, Dominik Haitz
- 统计和算法工具箱:**数据科学家应该了解统计和机器学习的基础知识。我尤其喜欢“算法工具箱”这个术语。这意味着你手头应该有你熟悉的算法,并且可以在运行中应用于几个问题。
- ****软技能:这是一个非常重要的集群。根据我的经验,你可能会多次处理利益相关者的“感觉”。要“理解”他们,你需要一定程度的软技能😉。
- ****商业思维:这项技能在海茨的技能组合中占据核心位置(见图 1)。它涉及数据科学项目可以为企业带来的价值。
- ****软件工程技术:当一个数据科学模型只在你的笔记本电脑上运行时,会有什么影响?—建立有效的数据科学工作流需要软件工程原理的基本知识。
在我的 meetup 演讲中,我主要关注最后两个技能集群,因为我认为它们在所有这些大肆宣传的“如何成为数据科学家”文章中并不重要,但在我的日常业务中非常重要。
从简单开始,逐渐变得复杂
关于机器学习及其对商业价值的影响之间的关系,有一种过于简单化的说法。Civis Analytics 数据科学总监 Skipper Seabold 谈到了“数据科学的可信度危机”( Seabold,2019 )。这场危机是关于专注于机器学习算法或验证培训计划的细节而不了解业务需求的趋势。对于数据科学家来说,更重要的是对你公司的商业模式及其如何创造价值有一定程度的熟悉,因为这样你就会为最常见的情况做好准备( Frei,2019 ):
- 企业遇到了问题或看到了潜力。
- 它想让你成为数据科学的独角兽。
- 它希望你创造/增加价值。
因此,价值可以有不同的含义。这可能意味着你从用于改变业务流程的数据中创造见解,或者你推动了“数据驱动的文化”。但大多数时候,预计你的项目会带来收入或/和利润的提升(海茨,2019 )。商业并不关心你的机器学习模型的细节( Frei,2019 ),而是希望你证明你的模型正在创造价值。
那么,为什么对最先进的机器学习的关注无助于自动产生价值?数据科学的版图可以用两个维度来描述:系统** 复杂度和建模 难度。系统复杂性总结了业务流程、依赖关系和 IT 基础设施的复杂性,而建模难度则涉及如何在数学空间中统计解决或转化问题(参见 Ramanathan,2016 )。您的数据科学项目在这些维度上的位置会影响几个因素,这些因素对于您的项目成功以及被视为成功至关重要。**
The data science landscape with the dimensions system complexity and modeling difficulty (cf. Ramanathan, 2016)
- ****可理解性:非数据人能理解问题的解决方法吗?根据事情的复杂程度,人们理解你的可能性会发生变化。
- ****可测试性:你的解决方案是可测试的吗?对于大多数简单的项目,您能够运行 A/B-测试,但是对于其他更复杂的项目,测试变得很困难(例如,优化物流过程)。
- ****可信赖度:这个因素其实也是受上面那些影响的!当人们无法理解你的解决方案,而你又很难证明你的解决方案更好/能带来提升时,他们会“不信任你”。
- ****问题定义:随着复杂性的增加,问题本身的公式化已经成为一种挑战——因为随着复杂性水平的增加,人们不会以同样的方式理解所有事情。
具体地说,在开始时,仅仅计算例如一些简单的概率(例如,购买概率)可能就足够了。简单的解决方案更容易被理解,也让你有可能更好地理解业务问题。此外,您将能够轻松测试您的解决方案(例如,以 A/B 测试的形式),并证明您的数据科学方法正在增值。然后在下一步,您的解决方案可能会变得更加复杂(例如,通过添加更多参数或运行更复杂的机器学习模型)。由于您已经在第一轮中获得了企业的信任,因此您已经为数据科学项目的成功奠定了坚实的基础。
为现实生活准备好你的独角兽
因此,您开发并测试了一个新的数据科学产品——您的 unicorn 软件。现在,真正的工作开始了:你必须帮助你的独角兽独立生活。在这里,你必须考虑你的软件的特性(甚至有一个 ISO 文档),在我的团队中,我们已经就这些达成一致:
- ****稳定性:你的软件应该有一定程度的容错能力,不应该出现非预期的行为。
- ****可维护性:更新/或更改/或修复你的独角兽应该很简单。
- ****可伸缩性:你的产品的性能应该是稳定的,运行流畅,不受外部因素的影响,比如数据量。
- 对于给定的输入,你的代码应该总是产生相同的输出。
最后,只有很小一部分代码会真正处理实际的数据科学魔术(参见图 2)。其中大部分将处理数据收集、验证、特征提取、it 系统配置或与服务 IT 基础设施的交互等。(斯卡利等人,2016 )。
Figure 2: The Life of your Data Science unicorn (after Sculley et al., 2016): A data science product is part of a more or less complex IT infrastructure. Only a small fraction of code is actually dealing with the actual product.
因此,你需要的软件工程技能应该包括,例如,以下组成部分(参见 Boykis,2019 ):
- ****学习一门编程语言及其一般概念:你学的是 R 还是 Python,甚至是 Java,其实都不重要。最重要的是,你要熟悉一种编程语言,并理解它的概念。把学习一门编程语言更多地看作一门学科。
- SQL 和数据仓库: SQL 是每个数据科学项目的基础,也是一项非常重要的技能。熟悉数据仓库概念和不同的数据库。了解如何在数据库中自动查询。
- ****版本控制:您的数据科学软件会不断变化(例如,新的更复杂的功能)。当你学习像 git 这样的版本控制框架时,这将帮助你跟踪变化,并与你的同事分享代码和知识。
- ****“命令行”:你需要在服务器上配置一些东西或者更新一个包,这种情况经常发生。最常用的命令行知识会有所帮助。
- 我们正在使用的其他实用工具有 Docker (用于环境控制) Jenkins (用于以自动化方式运行我们的代码),还有其他技术,如云服务(例如 AWS、Google、Microsoft Azure)和 kubernetes 都是有趣的东西,它们将帮助您了解如何建立一个成功的数据科学工作流。
Analytics and Data Science meetup from DataIku hosted at MYTOYS GROUP
保持个性和好奇心
你不可能学到所有的东西。我给你的建议是学习你觉得有趣的技能。这有两个积极的方面:你保持动力,你显示你是独一无二的。保持联系并访问 meetups。一些城市,如柏林,甚至为有抱负的数据科学家举办一些晚宴活动(例如 AI Guild )。最后但同样重要的是,永远敞开心扉去学习新事物,永远不要失去好奇心,因为…
最优秀的数据科学家都有一个共同点: 难以置信的好奇心。(d . j . Palil,第一位白宫首席数据科学家 )**
2021 年你应该读的数据科学书籍
原文:https://towardsdatascience.com/data-science-books-you-should-read-in-2020-358f70e1d9b2?source=collection_archive---------4-----------------------
目前最好的数据科学书籍是什么?
数据科学无疑是目前最热门的市场之一。几乎每个公司都有数据科学职位空缺或正在考虑。这意味着这是成为数据科学家的最佳时机,或者如果你已经是一名数据科学家,并且想要晋升到更高的职位,磨练你的技能。
本文涵盖了你现在能找到的一些最受欢迎的数据科学书籍。
What Data Science books you should read in 2020?
入门水平
如果您刚刚开始您的数据科学之旅,您绝对应该尝试:
从零开始的数据科学顾名思义:面向完全初学者的数据科学入门。你甚至不需要了解 Python 就可以开始。我完全推荐这个介绍给任何人。
如果你是一个完全的初学者,但你想在机器学习方向上走得更远,那么《Python 机器学习入门》是一本适合你的书。它也不假设你知道 Python。
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
中间能级
如果您已经阅读了 1 或 2 本数据科学书籍,为自己做了 1 或 2 个项目,并对使用数据有了一点习惯,这里有一些书籍将带您走得更远。
Python for Data Analysis 是了解更好的标准 Python 库(如 NumPy 或 pandas)的最佳途径。这是一篇完整的论文,从提醒你 Python 是如何工作的开始。
Python 数据科学手册也是所有标准 Python 库的优秀指南:NumPy、pandas、Matplotlib、Scikit-learn。
Python 机器学习介于中级和专家之间。它将吸引专家和处于中间位置的人。它从温和开始,然后进入机器学习和深度学习的最新进展。伟大的阅读!
用 Scikit-Learn 和 TensorFlow 进行机器学习(第二版已经推出!)是中级惊人的参考。它涵盖了所有的基础知识(分类方法、降维),然后进入神经网络和深度学习。
如果你对金融和数据科学感兴趣,Python for Finance 是必读书。它着重于如何使用数据科学工具来分析金融市场,并有许多很好的例子来说明这一点。它非常实用,也会吸引日常不从事金融工作的人。
专家
如果你接近专家水平,那么实际上阅读科学论文通常比阅读书籍更有意义。然而,现在也是时候在您的解决方案中研究和实施深度学习,以超越经典统计数据。三个奇妙且现在成为标准的参考文献是:
用 Python 进行深度学习是由 Keras 的一个创建者编写的,Keras 是 Python 中最流行的机器学习库之一。这本书从温和开始,非常实用,给出了你可以马上使用的代码,并且总的来说有许多关于使用深度学习的有用提示。深度学习的必读书目。
深度学习是深度学习算法的惊人参考。它包含的代码不多,但对如何处理机器学习问题有很好的见解:由深度学习的先驱编写。
如果你对数学感兴趣,那么你会爱上机器学习:一种概率视角。这是所有机器学习方法背后的数学杰作。你很可能一下子读不出来,但是作为机器学习研究中的参考非常有用。
—
仅此而已!祝您在数据科学之旅中一切顺利!
如果你正在寻找你的第一份入门级数据科学工作,并且不知道从哪里开始,请在此 报名参加我的 数据科学工作课程。我解释了你应该做什么,并在几周内学会成为一名初级数据科学家。
如果你喜欢这篇文章,看看我关于成为数据科学家的其他帖子:
- 成为数据科学家的完整指南
- 成为数据科学家的实用指南
- 数据科学书籍和课程推荐
[## 加入我的数据科学时事通讯
让我们保持联系。关于技术的每周或双周电子邮件。](https://creative-producer-9423.ck.page/c3b56f080d)
数据科学训练营:我会再做一次吗?
原文:https://towardsdatascience.com/data-science-bootcamp-would-i-do-it-again-f80b9a8c704d?source=collection_archive---------6-----------------------
项目启动一周年的思考
One of the views I got used to while at General Assembly Boston.
一年前的今天(是的,在万圣节),我开始了一个数据科学训练营。这似乎是一个回顾过去,分享一些想法和收获的好时机。
这是 TLDR 的版本:
- 训练营并不适合所有人。
- 费用会限制参与者。
- 如果你参加训练营,把注意力放在训练营上。
- 我所学到的并不是我所期望的。
- 交流和网络很重要。
- 连接到你关心的东西。
- 非营利部门和技术部门非常不同。
- 对待数据科学就像它很重要一样。
- 我会再做一次。
训练营并不适合所有人。
为了给出一些背景,我在波士顿参加了大会的数据科学沉浸式会议。在申请过程中,他们告诉你,通过程序就像试图从消防水管喝水。他们是认真的。你很快就能获得如此多的信息,根本没办法完全理解。
他们还告诉你,你应该与生活中的其他人(伴侣、家人等)进行严肃的对话。),因为这是一个重大的承诺,将影响你如何参与关系、日常事务和其他义务。他们也是这个意思。
大会的节目被称为“身临其境”是有原因的。你被告知每周要花 40 个小时在课堂上,至少再花 20 个小时做作业。
这种形式和强度并不适合每个人。根据你的学习风格、目标和其他承诺,你可能会发现许多其他选项中的一个更适合——无论是在线课程、自学还是更传统的学位课程。
费用会限制参与者。
虽然训练营的结构可能对一些人来说没有意义,但由于成本原因,许多人也无法参加。有财政支持,有时来自项目本身。大会(GA)在不同的地点有不同的产品。例如,国际扶轮普罗维登斯计划与技术集体和劳工部&培训合作,提供全额资助的奖学金,而退伍军人可以向纽约州和 DC 华盛顿州的计划申请 GI 法案福利。
这样的产品可能会有所帮助,但可能还不够。我来参加这个项目时没有积蓄。我决定参加 GA 的收入分成协议,这意味着我没有提前支付学费,因为我知道一旦我在项目结束后找到工作,我就会开始支付学费。虽然这是一个巨大的帮助,但我仍然需要贷款来支付我在项目和找工作期间的生活费用。我的信用足够好,我能够获得贷款,但不是每个人都可以获得这一点。
我最大的“我做了什么”的时刻之一(我想每个经历过训练营的人在某个时候都会有这样的时刻)来自于我意识到我的同伴中有几个人在项目结束后没有那么大的经济压力或寻找工作的紧迫性。
令人鼓舞的是,看到各种项目试图找到更容易获得资金的方法。虽然这不是数据科学特有的,但我一直特别兴奋地看到像consent Tech Project这样的努力,他们正在努力开发一种替代性的“(un)bootcamp”,它有一种不同的程序设计、重点和成本方法。
如果你参加训练营,把注意力放在训练营上。
综上所述,如果你决定参加训练营,那就去参加吧。有人问我,是否有可能在参加沉浸式项目的同时做兼职。当然,也许你可以做这件事。但你是在欺骗自己。如果你把时间和金钱投入其中,你可能想从中获得一些东西。如果你能够专注于它,并有时间做实验和项目,你会得到更多。
我所学到的并不是我所期望的。
如果你期望深入理解教学大纲上的所有主题,你可能会失望。GA 的数据科学沉浸式(DSI)是 13 周。在这段时间里,没有太多的空间来深入研究课程中的任何主题,这些主题涵盖了探索性数据分析、回归、分类、web 抓取、API、自然语言处理、监督和非监督学习、贝叶斯统计、深度学习、数据工程等。
这确实给了你足够的机会来开始确定你想进一步追求的领域。虽然我发现我对网络抓取、自然语言处理、情感分析等很感兴趣。对我来说,最大的收获不是任何特定的工具或过程。这证明了我的韧性、接受挑战的能力以及学习新技能和技术的能力。
在我目前的工作中,我不得不在有限的时间内学习大量的新事物,包括使用 Informatica、Jenkins jobs、Tivoli Maestro、Teradata、Vertica 和多种 SQL。即使在我们公司内部,我们也在使用许多不同的技术。当我们考虑到数据科学和数据工程领域的变化有多快时,知道我能够适应和学习变得比知道任何特定的事情都重要得多。
交流和网络很重要。
我开始在 Medium 上写作,作为 GA 的成果编程的一部分(也称为求职支持)。我惊讶地发现人们对这里的文章给予了如此多的关注。他们与我所钦佩的人建立了有趣的联系,他们是在面试中成长起来的,他们为一家考虑开发一个新职位的公司做出了贡献,该职位专注于沟通他们正在做的工作。
沟通在其他方面也很重要。在沉浸式项目中,我们被要求为演示考虑不同的观众。也许这是我的社会工作背景,但我已经是“在人们所在的地方与他们见面”这个概念的信徒了。为我的工作、波士顿的代码和其他空间的项目工作证实了这对于数据科学家的重要性。你可以想出一个很棒的模型,但是如果你不能向其他人解释你正在解决的问题,为什么他们应该关心,或者他们可以用这些信息做什么,这个模型就没什么用了。
从不同的角度来看,通过数据科学项目和随后的求职巩固了重要性(和快乐!)的关系网。处于求职模式给了我动力(和时间)去参加聚会、会议和其他我通常不会参加的活动。我能够在与从事迷人工作的人建立真实联系的同时学到很多东西。除了深入了解当地的数据科学领域,我还收到了申请职位的邀请,否则我是不会发现或知道这些职位的。那些花时间和我交谈、给我建议或鼓励、把我和其他人联系起来或以其他方式帮助我的人,仍然让我深感谦卑。
连接到你关心的地方。
随着时间的推移,有一点变得越来越清楚,那就是真实性和与你所关心的事物保持联系的重要性。刚从训练营出来,我觉得我需要更新我所有的资料来巩固我作为“数据科学家”的地位。但是我们不需要把自己封闭在完全独立的盒子里,或者淡化以前的经历。我收到了许多人的来信,他们专门因为我的教育工作或药物滥用预防工作而联系我,尽管我并没有强调这些经历。
GA 的 DSI 计划包括一个顶点项目。我的想法是识别活跃时间库的预测者。我之所以选择这个,是因为我关心这个问题,并且很乐意去做,尽管我知道这不是一个大多数人都熟悉的话题。这在许多方面对我有利:我被激励去做这个项目,它提供了一个机会向更多的人介绍时间银行的概念,并且很容易与人们谈论它,因为我喜欢讨论它。做这个项目的部分结果是,我目前正在帮助 Boston Ujima Timebank 团队确定行动和学习重点。
虽然做一个你关心的项目的好处似乎显而易见,但许多人并没有这样做。当我经历这个项目时,我看到人们在他们的项目中挣扎,因为他们感觉不到联系,也没有兴趣参与其中。现在,我也站在了另一边,作为一家公司的代表,与应届毕业生交谈,该公司有我们希望填补的空缺职位。哇——当某人谈论他们的工作时,那种热情(或者完全没有热情)是显而易见的,并且具有感染力。
非营利部门和技术部门非常不同。
我职业生涯的大部分时间都在非营利和教育机构。虽然我知道非营利部门和科技部门是不同的,但在我做出这个飞跃之前,我并没有意识到它们有多么不同。
我在 GA 工作期间获得了很多意想不到的知识,这些知识围绕着理解薪资基线和谈判。我知道薪资谈判是一件事,但我经历过两种不同类型的环境:一种是努力筹集资金的地方,可能会拒绝某人在面试中提出的更多要求;另一种是薪资范围已经设定并公开发布的大学。
在 GA 的时候,我很快学会了用“我的理解是波士顿地区类似职位的薪水在这个范围内”来回答关于薪水期望的问题。你符合吗,还是你更高或更低?”人们总是回答,如果他们的范围较低,通常会补充包括额外福利或谈判空间的信息。在许多情况下,我发现他们的范围比我预期的或要求的要高。
有一次,GA 的其他沉浸式项目中的某人分享了一篇文章,“来自技术领域白人的薪资谈判技巧”读了这篇文章,我陷入了一个兔子洞。我最终在的网站上看到了关于波士顿科技人员工资的讨论。在一个帖子中,人们谈论他们拒绝的工作,因为工资太低。最低报价之一是 30 万美元。读到这里,我不禁潸然泪下。我感到幸运的是,我在非营利组织的最后一份工作中赚到了一小部分。
对待数据科学就像它很重要一样。
进入 GA 时,我很高兴听说他们最近在 DSI 计划中增加了一个关于道德的课程。经历过这些之后,我希望在整个课程中,更多地关注数据科学工作的伦理和现实世界的影响。
在一次专门讨论道德的会议上,另一个城市的一位同学发表了关于愿意为适当的钱做任何事情的评论。虽然这最初看起来像是一个笑话,但随后在 Slack 中发生的对话让我不确定。
后来,我们为一个客户做了与应急准备相关的团队项目。我的团队花了最长的时间来选择我们要解决的问题,很大程度上是因为我们结束了一场关于客户为什么对某些问题感兴趣以及潜在影响的对话。例如,为什么他们想根据某些信息来评估社区的富裕程度?既然我们的代码是开源的,那么在紧急事件发生后,无论是客户还是其他人,更富裕的社区会优先获得援助或资源吗?
由于无法回到客户端来了解意图,或者无法控制任何人会对这样的代码做什么,而不管意图如何,我们排除了这个选项。我们最终选择了一个我们都感到舒适和感兴趣的项目,但我们也知道这个项目会困难得多:通过 Twitter 识别停电。另一个同学问我们为什么选择了这么困难的项目,我回答了,他回答说,“哦,是的,我有点忘了有人会真的使用这些。”
最近,我遇到了另一个沉浸式项目的毕业生,他有兴趣更多地了解我在训练营结束后的经历。她解释说,她一直是一名结构工程师,但决定进入技术领域,因为她不想对人们的生活负责。就在几天前,我读了一篇文章(我希望我能再找到),关于为什么我们在监管或解决科技行业造成的伤害方面如此落后。这篇文章用了一座桥梁倒塌的例子——当它发生时,失败和破坏是公开的,有形的,立即可见的。另一方面,我们经常在算法被使用一段时间后才意识到它的意想不到的后果。
凯茜·奥尼尔在 数学毁灭的武器 中分享了这方面的例子,包括大学排名模型如何导致学费飙升,信用评分模型如何复制和强化系统性偏差,等等。不幸的是,对于大多数数据科学应用程序来说,失败并不是即时的、容易识别的或容易分配责任的。然而,算法已经在许多方面被用于塑造世界上发生的事情,并且它们的使用只会继续增长。我们需要记住,我们不只是在屏幕上玩数字游戏,我们正在做对我们的生活有实际影响的工作。
我会再做一次。
当人们问我是否很高兴参加了数据科学训练营时,他们通常想知道的是他们是否应该参加。以我现在所知道的,如果再来一次,我绝对会做出同样的决定。我已经进入,知道是什么把我引向数据科学。我以前有处理数据、编码和快速学习新技术的经验和兴趣。这个项目为我打开了新的机会之门,也让我对很多我已经很好奇的话题有了更深的理解。
虽然我很高兴我这样做了,但我不能回答这对其他人来说是否是正确的选择。希望这些想法能提供一些额外的见解。如果你有问题或者想知道更多关于我的经历,请随时联系我。很多人在我的旅程中帮助了我,我期待着更多的机会来回报它。
感谢阅读!想法、问题和反馈总是很受欢迎。
基于 CRISP-DM 过程模型的数据科学职业反思
原文:https://towardsdatascience.com/data-science-career-reflection-based-on-crisp-dm-process-model-aedd8542b019?source=collection_archive---------30-----------------------
如何与商业分析和数据科学领域的硕士生分享自己的专业经验?鼓励他们自我反省?最近,当我应邀在一所应用科学大学做客座演讲时,我问了自己这个问题。我的方法是采用 CRISP-DM 过程模型[1],这是数据科学领域的许多学生和从业者所熟悉的。该模型共有六个步骤(见图 1),描述了如何系统地研究数据集的模式和关系。
Fig. 1: CRISP-DM process model
然而,通过调整六个步骤的目标,也可以制定一个模型来反映个人的职业生涯和工作规划。这种模式不仅适用于学生,也适用于正在反思现状或愿意改变的专业人士。这产生了图 2 所示的图,下面将对此进行讨论。这种反映似乎符合个人利益,特别是由于数据科学家之间的高度波动[2]。
Fig. 2: CRISP-DM inspired career reflection model
工业和技术知识
CRISP-DM 的前两步一方面是业务理解,另一方面是数据理解。在个人职业反思的背景下,这指的是工业和技术知识。数据科学从业者的特殊之处在于将这些技能结合起来的能力。当然,职场新人不应该因为(还)不具备后一种专业技能而气馁。但是,在每一个职业生涯阶段,意识到自己的优势和局限是值得的。
由此可以得出结论,用于个人的专业重点或个人发展。因为即使公司并不总是明确要求这一点,在申请工作和内部晋升时,对行业的了解也是一个明显的优势。
申请和工作准备
据估计,一个数据项目 80%的工作花费在预处理[3]上,这是 CRISP-DM 循环的下一步。根据 Waters [4]的说法,对于数据科学家来说,寻找新工作也是一项持续、耗时的任务,因此这是职业反思周期的第三部分。在这一点上,没有考虑这种波动的根本原因。
根据职位的重点以及公司的数据成熟度,申请人必须通过许多选择程序。经典的面试就像评估中心一样,属于一贯典型使用的程序。然而,根据我的经验,在定量的案例研究中,分成两个维度已经很明显了。一方面,如果公司已经在数据驱动的决策领域取得了进展,申请人不得不期待这一选拔测试。另一方面,这些情况出现的频率似乎越低,所要填补的角色越具有战略性。这里的重点是商业案例研究和与申请人的文化匹配。如何进一步了解一家公司的现状?嗯,求一下:公司去年进行了哪些数据项目?有多少数据科学家参与其中?公司希望通过哪种组织结构变得更加数据驱动?
希望给新员工一个平稳开端的公司可以通过准确的入职计划来得分。然而,我强烈鼓励申请人在申请过程中询问是否有指导机会,或者新加入者是否可以在定期支持的网络活动中见面。这样更容易为以后的项目找到重要的联系人。
工作实践
CRISP-DM 流程的第四步是建模,这是数据项目的核心。因此,专业实践的主题是工作评估的核心。数据科学家在什么情况下可以在公司找到自己?在我看来,这有两个极端:绿色分析领域的先锋和成熟数据科学团队的新成员。这两极的优劣要和自己的意愿相比较。
作为一名先锋,你享有高度的创作自由。是你设定了主要的主题焦点,并设计了整体的大画面。此外,不可或缺的是,企业家精神的概念是应用的,或者至少是学到的。通过这种通常也由个人扮演的广义角色,一个人很快就享有了专家的地位,这种地位可以但不必打开大门。因此,人们应该喜欢公司政治和战略。您还会被要求“修复”一个或另一个 Excel 电子表格。
在一个已建立的团队中,你通常可以完全专注于分析主题。每个团队成员都从与同事的专业交流中受益,这实际上包括在职培训。这些团队已经证明了他们的价值和优势。因此,他们通常已经拥有先进的基础设施和必要的工具。此外,项目通常已经定义和计划好了。所以影响和改变基本策略的空间并不大。作为一个团队,你们总是一起赢。因此,在某种程度上,通过杰出的成就推进职业发展的潜力可能会很低。
自身成功和企业文化
我的工作满意度受两个因素的影响,其中包括:我的工作有多成功,我在企业文化中感觉如何?CRISP-DM 中的模型评估部分因此让位于这两个维度的自我评估。
一方面,决定一个人成功的水平是困难的,另一方面是高度个性化的。当然,许多员工的绩效是使用或多或少复杂的矩阵来划分的。然而,这些程序是否 100%有意义或有效值得怀疑。尤其是涉及到自己的成功感的时候。对于数据科学家来说,强化一项技术技能或学习一种数学能力可以被认为是成功的,即使该项目被推迟或失败。错误文化是一个很好的术语,但是在实践中并不总是如此,尤其是当涉及到探索性的和昂贵的数据项目时。这里有必要对自己进行适当的评估。
此外,公司是动态系统,因此数据科学家的环境可能会发生变化。会有什么后果?例如,可以提到股东结构的变化,这种变化可能不会导致执行委员会的人事变动。即使乍一看这似乎很高级,但它会对数据项目产生直接影响。当我们考虑一个先驱者的例子时,这种情况更为常见,他能很快面对项目的中止。然而,结构变化也可以提供机会,例如,如果建立新的领域来促进数据驱动的文化。最后,数据科学家还必须考虑到一个事实,即成本削减计划或公司总部的搬迁将使工作场所受到质疑,与他们的工作完全无关。此时还有对自己工作的评价。
决定
项目成功后,将在 CRISP-DM 的最后阶段部署数据产品。在职业生涯周期中,我把决策放在这个位置。这不仅仅是一年一次或一个季度一次,而是为了一个人的幸福,反复让这个人意识到她或他的处境。这将导致一个持续的决策过程,在此过程中,将回答如下问题:
- 主要任务(仍然)符合我的兴趣吗?
- 我能提高我的能力并很好地运用我的知识吗?
- 我想在其他领域/行业获得经验吗?
- 我的工作符合我的个人规划吗?一定要吗?
- 我(仍然)对公司的文化满意吗?
由此,你可以在自己的工作中获得满足感,因为你让自己意识到这些要素对你个人来说是正确的。或者它避免了太长时间的停滞,如果自己的指南针不再符合工作的方向。内心的逆来顺受并没有成为一个说不完的故事。以我的经验来看,这可能是商业组织中数据科学领域乐趣的重要组成部分。
参考
[1]皮特·查普曼。《CRISP-DM 用户指南》。(1999)
[2]乔尼·布鲁克斯。“为什么这么多数据科学家离职”。(2018)https://www . kdnugges . com/2018/04/why-data-scientists-leaving-jobs . html。访问时间:2019 年 7 月 15 日
[3]吉尔出版社。调查显示,清理大数据是最耗时、最不愉快的数据科学任务。(2016)https://www . Forbes . com/sites/Gil press/2016/03/23/data-preparation-most-time-consumption-least-enjoy-data-science-task-survey-saids/# 6 ea 73 f 616 f 63。访问时间:2019 年 7 月 15 日
[4]理查德·沃特斯。“机器学习如何创造新职业——以及问题”。(2017)https://www . ft . com/content/49 e 81 ebe-CBC 3-11e 7-8536-d 321d 0d 897 a 3。访问时间:2019 年 7 月 15 日
上图标题由 Headway 拍摄,图中“工作实践”部分由 Austin Distel 拍摄,图中“决策”部分由 Damir Kopezhanov 拍摄,均在 Unsplash 上
数据科学案例研究:优化零售中的产品布局(第二部分)
原文:https://towardsdatascience.com/data-science-case-study-optimizing-product-placement-in-retail-part-2-5e4dc855a535?source=collection_archive---------25-----------------------
商业模拟导论。
欢迎来到 2019 读者,感谢你抽出时间阅读这篇文章。距离我的上一篇帖子已经有一段时间了,但我肯定会完成我开始的工作。在我的上一篇文章中,我们使用销售数据来说明如何使用 XGBoost 的功能重要性来优化产品放置,这有助于确定哪个因素是最有影响力的,以及从那里应该选择哪个商店来销售特定的商品。在这篇文章中,我想回答一个不同的问题。
更进一步
如果我们想为我们的顾客开一家新的商店呢?假设我们与所有其他分店处于同一地理区域,我们如何决定分店 _ 规模、分店 _ 位置 _ 类型和分店 _ 类型?如果我们想加强我们在一个市场中的地位,我们可以采取这样的行动,此外,根据我们对客户的长期了解来设计我们的下一个销售点。
使用 Numpy 的 Argmax 函数
我想到的第一种方法是基于数据集“易处理”特征的可能值创建一个预测网格,然后使用 numpy 的 argmax 函数来确定哪个值将产生最大的奖励或支出。简单描述 argmax,可以描述为最大化某个函数 f 的集合 x 的值。这种方法受到了决策分析中一个叫做 Maximax 准则的概念的影响,在该准则中,所选择的策略是具有最高回报或支出的策略。下图说明了 argmax 函数的工作方式。
基于上图,值“0”最大化两个函数中的任何一个。所以 argmax 是 0。这种方法的问题在于,它假设只有一种行动或决策可以用来提高所选产品的销售预测。更好的方法是发现哪种组合或行动可以产生最佳预测,并确定的当前位置是否已经是最佳的。为此,我将研究蒙特卡罗树搜索算法。
使用蒙特卡罗树搜索
Multi-Armed Bandit 问题是一个优化问题,其中一个代理寻求在一个状态空间内找到最大化系统支出的最优策略。我认为这种方法非常适合这种情况,因为可以采取许多行动(以及行动的组合)来找到最佳的产品放置。蒙特卡罗树搜索是一种发现最优策略(事件序列)并因此解决多臂绑定问题的方法。下图说明了蒙特卡洛树搜索的主要步骤:
Monte Carlo Tree Search
使用蒙特卡罗树搜索,可以找到产生最佳结果的动作组合(状态配置)。然而,应当注意,在这种特定情况下,所呈现的动作的组合并不意味着以任何特定的顺序来执行,而是同时执行。如果这听起来很熟悉,你可能记得这种技术也被用于 AlphaGo 。如果你想对蒙特卡罗树搜索有一个全面深入的解释,杰夫·布拉德伯里在他的网站上有一篇精彩的文章解释了它的内部运作。
结论
值得注意的是,这种算法通常出现在“ 完美系统 ”用例中,例如游戏和模拟,其中系统的所有规则都是已知的,并且没有未知变量。不幸的是,生活不是这样的。应用于“假设”场景的机器学习技术仅用于提供关于什么可能产生最佳结果的指导。
尽管我们获得了销售数据,但我们仍然不确定观察到的购物习惯的季节性,这肯定会对推荐的质量产生影响。这个系统的一个更好的版本将能够找到多种产品的最佳放置选项,同时允许用户优先考虑一种产品。
我希望这篇文章给了你一个清晰而实用的方法,用你的数据科学为项目创造价值,我希望你能学到一些新的东西。这只是说明强化学习如何被用来为企业创造价值的一个实例。像往常一样,我欢迎您的反馈,并期待产生更多的内容。
要了解关于本文主题的更多信息,请访问下面的链接:
[## 最大、马希民和极小后悔
马希民、极大极大和极小极大后悔是不确定条件下决策的三种方法。收益表显示…
kfknowledgebank.kaplan.co](http://kfknowledgebank.kaplan.co.uk/KFKB/Wiki Pages/Maximax, maximin and minimax regret.aspx) [## AlphaGo |深度思维
专家们将这篇论文描述为“在复杂领域走向纯粹强化学习的重要一步”。我们做了…
deepmind.com](https://deepmind.com/research/alphago/) [## 蒙特卡洛树搜索简介—杰夫·布拉德伯里
游戏 AI 的课题一般是从所谓的完美信息游戏开始的。这些是回合制游戏,其中…
jeffbradberry.com](https://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/)
数据科学代码重构示例
原文:https://towardsdatascience.com/data-science-code-refactoring-example-14c3ec858e0c?source=collection_archive---------13-----------------------
当学习为数据科学编码时,我们通常不会考虑修改我们的代码以在性能方面获得特定的好处。我们编码来修改我们的数据,产生可视化,并构建我们的 ML 模型。但是,如果你的代码将被用于仪表板或应用程序,我们必须考虑我们的代码是否是最佳的。在这个代码示例中,我们将针对速度对 ecdf 函数做一个小的修改。
如果你不确定 ecdf 是什么,你可以查看我的 博客文章 了解更多详情。为了方便起见,这里有一个快速的可视化示例。
Ecdf Plot made the function we will make below.
我们将用于绘制上述 ecdf 函数的数据是关于 2015 年至 2018 年 鳄梨价格 的数据。
等等,到底什么是代码重构?
代码重构是对代码进行修改,以提高其可读性和性能。对于性能部分,这意味着您必须调整代码,以减少内存使用或缩短运行时间。
首先,让我们完成导入和数据加载。
*# Load Libraries*
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import time*# Load the data from data.world*
avocado = pd.read_csv('https://query.data.world/s/qou5hvocejsu4qt4qb2xlndg5ntzbm')
Seaborn 更喜欢这里。当我在 jupyter 笔记本上创建情节时,我使用 seaborn 来设置情节背景。
现在我们的导入和数据已经设置好了,让我们来看看我们的 ecdf 绘图功能。
*# Create a function for computing and plotting the ECDF with default parameters*
def plot_ecdf(data, title='ECDF Plot', xlabel='Data Values', ylabel='Percentage'):
*"""*
*Function to plot ecdf taking a column of data as input.*
*"""*
xaxis = np.sort(data)
yaxis = np.arange(1, len(data)+1)/len(data)
plt.plot(xaxis,yaxis,linestyle='none',marker='.')
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.margins(0.02)
对于速度重构,我们将关注于定义yaxis
的地方。
yaxis = np.arange(1, len(data)+1)/len(data)
注意,我们调用了两次len()
来构造yaxis
。这导致运行时间不必要的增加。为了解决这个问题,我们将把我们的yaxis
代码重构如下:
length = len(data)
yaxis = np.arange(1,length+1)/length
在上面的代码中:
- 我们分配变量
length
来保存数据长度值。 - 用我们预先定义的变量
length
替换了对len()
的调用。
现在来看看这些变化后我们的功能:
# ECDF plot function with modifications
def plot_ecdf_vtwo(data, title='ECDF Plot', xlabel='Data Values', ylabel='Percentage'):
*"""*
*Function to plot ecdf taking a column of data as input.*
*"""*
xaxis = np.sort(data)
length = len(data)
yaxis = np.arange(1,length+1)/length
plt.plot(xaxis,yaxis,linestyle='none',marker='.')
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
plt.margins(0.02)
Pic from CollegeDegrees360 on Flickr
但是现在我们有了另一行代码!这如何改进我们的运行时间?
是的,我们确实使用了另一行代码。它也比我们上一个版本的函数使用了更多的内存。但是现在我们的函数会比以前更快地生成一个图。为了确定改进,我们为此引入了time
模块。让我们来看看。
# Generating Run Time of plot_ecdf
start1 = time.time()
plot_ecdf(avocado['AveragePrice'])
end1 = time.time()
diff1 = end1-start1
print(diff1)0.04869723320007324
所以第一个版本的时钟大约是百分之五秒。现在来看看我们的重构版本是否真的有所改进。
# Generating Run Time of plot_ecdf_vtwo
start2 = time.time()
plot_ecdf_vtwo(avocado['AveragePrice'])
end2 = time.time()
diff2 = end2-start2
print(diff2)0.019404888153076172
太好了!我们将绘图函数的运行时间提高了大约百分之二秒!
那么,从长远来看,这有什么好处呢?
假设这是一个进入仪表板的绘图函数。你为你的雇主制作的仪表板。
如果这是一个应用程序中的 ML 模型的函数呢?
在这两种情况下,更快的运行时间非常重要。
百分之一秒可能看起来不多。但是,如果您考虑该功能的使用量,那么您可以为仪表板或应用程序的用户节省大量时间。它会让你的产品对他们来说快如闪电。
Pic from GoodFreePhotos
酷!怎样才能学到更多的代码重构?
- 如果你需要更多的例子,看看这个由的Julian Sequeriapy bites写的牛逼博客帖子。
- 从旧项目中回顾你自己的代码。找到一些不止一次使用函数的代码。然后尝试重构代码,使函数只被调用一次。
- 如果你想看我口头讲述同样的例子,你可以看看这篇文章的 youtube 视频短片。这是这篇文章和视频的笔记本和。
在我们走之前大声喊出来。
Tony Fischetti 是纽约公共图书馆的数据科学家。他是我在数据科学领域的第一位导师。是他让我更加意识到代码重构。
感谢阅读!希望你喜欢这个代码重构的例子,并考虑重构你的代码。你认为你将重构哪些代码?
如果你喜欢在媒体上阅读,并愿意进一步支持我,你可以使用我的推荐链接注册一个媒体会员。这样做可以用你的会费的一部分在经济上支持我,我将不胜感激。
直到下一次,
约翰·德杰苏斯
数据科学速成班
原文:https://towardsdatascience.com/data-science-crash-course-df69fd0fdc3c?source=collection_archive---------32-----------------------
在 60 分钟内学习数据科学的基础知识
数据科学正在蓬勃发展。它不仅有趣,而且在任何领域或行业都有惊人的应用。在我所有的职业活动中,我尽我所能以一种所有人都能接触到的方式来推广数据科学。我还试图填补知识空白,尤其是在数据科学的商业应用方面。这就是创建数据科学速成班的想法。
你的第一道菜
那么,你如何着手创建自己的课程呢?对我来说并不难。作为一名数学博士,我有很多机会为我的学生创造大学水平的课程。但这次我想要不同的东西——快速、专注、高效。这就是为什么我决定建立这个课程。
它的目标是让你熟悉你可能已经听过很多次的数据科学的基本概念:监督学习、非监督学习、Anaconda、Python、pandas、json、NumPy、scikit-learn 等。我在介绍中解释了这一点:
从那以后只会变得更好。
蟒蛇和朱庇特笔记本
数据科学最基本的工具是 Python,通过为它安装一个框架 Anaconda,您将开始一些实验。
下面告诉你怎么做。
复习数学
下一步就是复习一些线性代数和统计。你需要能够操作向量和矩阵,知道什么是均值、方差和偏差,并且能够计算一些概率。
以下是你需要知道的。
使用数据
做完这些准备后,我们就可以进入主要部分了。第一步是处理数据:从 jsons、XML、电子表格和文本文件导入数据。一旦你导入它,你就必须存储它:pandas 中的 NumPy 数组和 DataFrames 运行良好。
现在是时候拿一些实际数据来做实验了。有几个来源你可能会用到:
- 古登堡图书计划
- 社交媒体洞察的 Twitter API
- 抓取你最喜欢的网站(当然是中号!)
你可以走了!
机器学习
现在是时候讨论算法了。你有数据,你知道如何处理它,让我们用它做一些有趣的事情。我谈到了监督学习和非监督学习之间的区别,因此分类与聚类问题,或者换句话说:数据集有标签或没有标签的情况。
在这两种情况下都有许多标准技术,我会在视频中介绍它们。
- 分类算法
- 聚类算法
- 神经网络
- 降维
可视化和交流
从事数据科学的最后一部分是与他人交流您的成果。唯一的方法是视觉化:要么把它们标在图上,要么就此写一份报告。最好的方法是使用 matplotlib 和 Dash,然后把你的代码放到 GitHub 上。
我们的 60 分钟课程到此结束!
如果您已经完成并观看了所有视频,您应该已经准备好用数据科学解决一些现实生活中的问题。
祝你好运!
数据科学-创建带有异常值的描述性统计数据的 Google 工作表浏览功能
原文:https://towardsdatascience.com/data-science-creating-google-sheets-explore-feature-for-descriptive-statistics-with-outliers-8e2451aaa331?source=collection_archive---------25-----------------------
通过分解数据中的异常值,了解如何进行正确的数据和描述性统计及分析的实用方法
Photo by Giorgio Tomassetti on Unsplash
什么是描述性分析?
描述性分析或统计是指使用平均值、中值、标准偏差等显示数据的集中趋势和分布的数据集摘要
我记得在学校的时候学过这些概念,但是直到最近我才明白它们在现实生活中的用途。
这个练习背后的动机?
最近在玩一些工资数据学习机器学习。我创建了一些正态分布的数据。最后,我追加了两笔巨额工资,以玩弄不同的统计概念。
我在 Google sheets 上传了这些数据,令我惊讶的是,它有一个探索功能,清除了这些异常值,并呈现了一个非常干净利落的描述性分析,带有一个整洁的直方图。
Google Sheet’s Explore feature showing summary analysis
这真的让我很好奇,并让我思考以下问题:
- Google 使用了什么数学方法来删除两个错误的值/异常值,并从剩余的数据中显示最低和最高工资?
- 50300 的中间值是用什么数学计算出来的?
- 8320 的价差值是用什么数学方法得出的?
从那时起,我真正的旅程开始进入数据分析的奇妙世界。
离群值?
在现实生活中,你很难找到理想的数据集。异常或与大部分数据不同的数据点称为异常值。异常值可以告诉你一个异常,一个特殊的事件或者仅仅意味着一些被篡改的东西。这真的取决于用例。
当您想要对数据集进行描述性分析时,将异常值考虑在内变得非常重要,否则您的结果可能会有偏差。
示例:考虑以下数据集和描述性摘要
[10, 15, 15, 20, 20, 20, 25, 25, 30, 400]
最小值:10 |最大值:400 |平均值:58 |中位数:20
现在,如果你仔细观察,数据点 400 可能是一个异常点,它给了我们错误的平均值和最大值。大多数数据都在 10 到 30 之间,那么平均值怎么可能是 58 呢?这是因为一个 400 的异常值扭曲了我们的总结。然而,如果你看看中位数,它多少显示了正确的中心值,并且不受异常值 400 的影响。
让我们进一步将数据倾斜到下面,并查看统计数据:
[10, 15, 15, 20, 20, 20, 25, 25, 30, 800]
最小值:10 |最大值:400 |平均值:98 |中位数:20
如您所见,如果我们将 400 更改为 800,平均值会增加,但中值保持不变,这仍能让我们更好地了解数据的中心。因此,这里的问题是,我们如何检测异常值并获得正确的数据描述性摘要?
四分位数和四分位数间距(IQR)
四分位数是将排序数据表(的一部分)分成四组的值,这四组包含大约相等数量的观察值。100%的总和分成四等份:25%、50%、75%和 100%。
第一个四分位数( Q 1)被定义为数据集的最小数和媒体之间的中间数。第二个四分位数( Q 2)是数据的中位数。第三个四分位数( Q 3)是数据集的中值和最高值之间的中间值。
如上图所示,这里是范围,您需要注意获得正确的数据点:
IQR(四分位数间距)= Q3 — Q1
UIF(上部内栅栏)= Q3+1.5*IQR
LIF(下部内护栏)= Q1–1.5 * IQR
UOF(上部外栅栏)= Q3+3*IQR
LOF(上部外侧围栏)= Q1–3 * IQR
现在,您可以根据以下隔离规则轻松找到可疑数据或异常值:
位于 UIF 和 UOF 之间的任何东西都被称为轻度上异常值。
位于 LIF 和 LOF 之间的任何东西都被称为轻度低异常值。
任何位于 UOF 之外的都称为上极端异常值。
位于 LOF 以下的任何东西都被称为下极端异常值。
现在,如果我们将上述计算应用于我们的样本数据集,这就是我们得到的结果
[10, 15, 15, 20, 20, 20, 25, 25, 30, 800]
Q1:16.25 | Q2:20 | Q3:25 | IQR:8.75 | LIF:3.125 | LOF:-10 | UIF:38.125 | UOF:51.25
由于 800>UOF,这是一个可能的异常值,需要将其移除以获得正确的描述性分析。
因此,让我们继续并删除离群值 800,看看我们对新数据集的新分析
[10, 15, 15, 20, 20, 20, 25, 25, 30]
最小值:10 |最大值:30|平均值:20|中值:20 |分布/标准差:6
这使我们得到了最终的总结,其中心值为 20(平均值),加上或减去 6(标准偏差(SD)或数据分布) :
数据范围从 10 到 30。大多数数据将集中在 20 左右,正负 6。”
我可能是错的,但我相信这就是谷歌用来对一个数据集做出如此美丽而简单的描述性统计的数学方法。
编写我们自己的谷歌探索功能
Custom Google’s Style Descriptive Statistics for data analysis with outlier correction
为了让上述概念更上一层楼,是时候编写我们的 Google Sheet 了,比如 explore analysis
用于分析的样本数据表可在此查阅或下载。
下面是一个 codepen,它使用 Google 图表、上面链接的数据和一点 Javascript 数学进行了类似的分析。
Our custom Google Explore feature
代码非常简单。我们对排序后的数据计算 Q1、Q2、Q3、IQR、UOF、LOF,并在获得数据的平均值和标准差之前过滤异常值。
下载
- 样本数据的谷歌表单
- 可执行代码笔
- Github 代码回购
反馈和跟进
欢迎您的任何反馈,因为我相信这是我们成长和成熟的方式。欢迎随时在 LinkedIn 或 Twitter 上关注我。
数据科学网络犯罪具有可怕的潜力。
原文:https://towardsdatascience.com/data-science-cyber-crime-has-scary-potential-c70c552b08d5?source=collection_archive---------20-----------------------
等等……什么?
自八十年代中期以来,网络攻击一直是困扰计算机的一个严重问题。自那以来,恶意软件攻击一直在以惊人的速度增长,仅在 2019 年第一季度就有近 1200 万起恶意软件案件。早在 2017 年,“WannaCry”攻击引起了人们对这一问题的关注,当时有近 20 万人受到一种蠕虫的影响。这些感染包括但不限于:
医院、政府和企业。
不幸的是,随着技术的发展,恶意软件也在发展,技术问题的实际解决方案可能很快成为恶意软件开发的垫脚石。网络安全是一个巨大的话题,坦率地说,我不太参与,但显然;当我们所有的个人信息,包括信用卡、银行对账单和地址都在网上数据库中时,安全性是极其重要的。
W 虽然我们都知道网络攻击是危险的,也许我们应该避免访问任何这种事情超出我们控制的网站,但一种新型蠕虫很有可能在未来几年袭击互联网。近年来,机器学习一直在以惊人的速度推进我们的技术发展。但任何新技术,无论是枪、刀、弓、矛、火,甚至是机器学习,都会带来不满。
一个基于数据的蠕虫有着惊人的潜力,因为与其他任何蠕虫不同;它有自我提升的潜力。通常,传输和效果是由软件的创造者在蠕虫的制作中精心安排的。然而,基于机器学习的恶意软件有可能彻底摧毁这种方法。一个适应它收集的数据的病毒是一个可怕的概念,但总的来说诚实是完全可能的。
用《狂热未来学家》中马修·格里芬的话说,
“无论好坏,人工智能都是网络安全游戏的改变者,我们需要为即将到来的事情做好更好的准备。”
事实上,在最近的攻击中,机器学习模型实际上已经被入侵者反复使用,试图窃取密码和用户输入。如果我们想继续安全地生活,没有蠕虫持续攻击我们的数据,网络安全本身可能必须改变。这不一定是数据伦理的话题了,因为当恶意软件产生时,伦理很少发挥作用。在典型的法律数据科学中,我们有一种称为数据匿名化的东西,这是一种保护参与者数据并保持其匿名的行为准则。违反这一概念就是违反传统的数据伦理,这是一种解释如何以及何时收集数据的伦理思想。
T 通常,恶意软件可以分为不同的类别,有些目标完全不同。
数据窥探
数据窥探是收集和记录通常经过加密的敏感信息。窥探攻击往往是更多攻击的开始,不仅会危及你的姓名和地址,还会危及你的银行账户和法律信息。此外,数据窥探通常是更深入、更典型的攻击的前兆。
渗透
渗透被认为是一种非常负面的情况,因为恶意软件现在正在您的计算机内部执行您不允许的具有管理权限的任务。通常当感染进入渗透阶段时,除非创建者另有指示,否则计算机将完全成为病毒的奴隶。
广告软件
广告软件稍微轻松一些,但仍然是一个严重的问题。广告软件不一定是带有恶意的软件,但在未经您允许的情况下自行安装后,通常会扰乱系统并降低系统速度。这通常是通过粗略的安装程序完成的,安装菜单混乱,当用户意外接受安装时,安装菜单会“附加”广告软件。广告软件当然是一个对参与者来说有经济收益的市场,允许从广告软件中赚钱的公司与他们分享利润。
勒索软件
勒索软件通常是渗透后可以观察到的东西。勒索软件的故事通常是对加密数据的勒索。这在包含员工和客户敏感信息的计算机化市场中尤其有害。想哭(如上所述)是勒索软件的一个很好的例子。
有了机器学习的巧妙伪装,一切皆有可能:假公司,假承诺,是的,假身份。鉴于机器学习因其图像识别和视频处理而闻名,它在右手掌权的情况下有一些严重的潜在损害。
A video using machine-learning to fake a speech made by Barrack Obama.
在最近的新闻中,一次又一次地解释说,人工智能在黑客攻击方面击败了人类,并且凭借其自然适应能力,无法对抗大多数网络安全努力。那么,对于一个主观目标是感染尽可能多的系统的人工大脑,我们能做些什么呢?当然,我们听过“不要去这里,不要去那里”的古老故事,但如果这些真的有用,为什么我们仍然担心这种威胁?
这是一个关于技术的可怕、可悲的现实,其中一些总是习惯于负面的接受。更有趣的是网络安全本身的未来。截至目前,有许多人以从事网络安全研究为生。机器学习已经被用来防止广告软件和垃圾邮件,所以看看 ML 在未来会提供什么样的安全功能会很有趣。
从伦理上讲,恶意应用程序中提出的建议在道德上与大多数机器学习爱好者所代表的东西是并列的……但机器学习技术正变得越来越容易获得,这已经不是什么秘密。随着机器学习的普及和全球化,很难相信它不会被用于任何负面的方面。毕竟,这正是大多数负面事物最初的样子。
作为 UX 问题的数据科学有效性
原文:https://towardsdatascience.com/data-science-effectiveness-as-a-ux-problem-9fa9bb84f5c8?source=collection_archive---------13-----------------------
我们数据科学家花了这么多精力来帮助你了解你的用户……你忘记了我们也是用户 。
数据科学家也是用户。
在很多情况下,感觉就像有人试图为数据科学家制作一个数据科学工具,却从未见过一个真正的工具。如果你采用那种产品开发方法,你会让我想起那些试图闯入卫生棉条市场的兄弟们,他们从来没有咨询过女人。什么可能会出错…?
如果你是一个从未听说过用户体验(UX)设计的工具制造者,我很高兴欢迎你来到 21 世纪。停止阅读这篇文章,转到维基百科,你将享受到一场盛宴!你睡觉的时候发生了这么多事。
“It’s important to understand how the end user uses the product!” (I found this image here.)
人物角色
UX101 一开始就提到了用户角色。如果你从未见过这个列表中的人的所有现实世界版本,这些将很难产生。为了给我们设计好的东西,你需要花时间去建立这种共鸣。
很抱歉很难让你们理解我们,但我们不是典型的软件工程师。首先,如果你看看列表,你会注意到我们有不同的风格。惊喜!数据科学专业有不同的种类。你是为哪个设计的?你有没有花时间去理解为什么一个分析师不关心一个工具是否值得生产,但是一个 ML 工程师关心?(如果您对 R vs Python 的混乱感到困惑,那么这个难题将会派上用场。)你知道为什么如果你骗统计学家使用一种优化工具进行快速分析他们可能会翻出一张表格吗?如果没有,这是开始你的侦探工作的两个好地方。
好的设计是什么样的
我很自豪能参与其中的一项合作是假设分析工具,就像在假设分析工具 中一样,在 ML/AI 开发过程中查看你的模型性能和数据难道不是一件很痛苦的事情吗?”能够掌握自己的进展是快速迭代到一个令人敬畏的 ML/AI 解决方案的关键,所以为在机器学习领域工作的分析师设计的好工具可以帮助他们帮助你实现雄心勃勃的目标并在伤害你的用户之前抓住像 AI 偏差这样的问题。
我喜欢假设工具的方法的一点是,UX 数据科学公司不是事后才想到的——该项目从一开始就包括视觉设计师和 UX 工程师。第一个版本(2018 年末发布)是为支持致力于 TensorFlow 开发的团队的分析师设计的。我们知道 TensorFlow 的暴躁不透明会让分析爱好者感到沮丧,所以我们从那里开始。
我们逐渐将我们的目标用户群扩大到任何使用 Python 中的模型工作的 ML/AI 分析师,最终在本月早些时候在TensorFlow Dev Summit 2019上宣布的假设工具 1.0 版,以及关于 tensor flow 对用户体验的更强整体承诺的突破性消息,我将很快在另一篇文章中进行报道。
没错:即使您对 TensorFlow 过敏,也能通过模型理解和快速数据探索获得特性选择/预处理见解。配有便捷的人工智能偏差检测,因为这通常是人工智能/人工智能分析师的第一个问题。它能与 Jupyter 笔记本兼容吗?你打赌!内置刻面?没问题!
Take the What-If Tool for a test-drive here.
我们知道我们希望它成为 ML/AI 分析师的伟大工具,所以我们观察了真正的分析师在他们的自然栖息地和可用性研讨会中使用该工具。我们整合了他们沮丧的尖叫,以推动更好的设计,直到哭泣平息,皱眉变成微笑(大多数情况下——它还不完美,但我们正在努力)。这个工具不是我们强加给毫无戒心的数据科学家的某种意外事故。这是我们为你做的,希望你会喜欢。(请给我们网站上的反馈,以便我们不断改进。)
我们也知道在我们的目标用户群中谁是 谁不是 。统计学家不会是粉丝,除非他们兼职做分析师。研究人员可能已经拼凑出他们自己的利基版本。完全的初学者最好先从别处学习基础知识。
无论你对假设工具还有什么看法,我最自豪的是我们认真对待 UX 设计,并努力理解我们的数据科学用户。(我们甚至知道你为什么对我们为了其他目标用户群而不得不做出妥协并保留让传统数据科学家想要攻击某些东西的传统行话感到恼火。是啊,那个“推论”不是 推论 。我们理解你。)
如果你渴望看到运行中的假设工具,你不需要安装任何东西——只需点击这里。我们有大量令人眼花缭乱的演示和文档。如果你想真正开始使用它,你甚至不需要安装 TensorFlow 。简单的 pip 安装 witwidget 。
我的观点是什么?
这个故事的寓意是,如果你想要快乐的数据科学家,你必须理解我们。令人难过的是,非数据科学家很少花时间。如果你是我们中的一员,检查一下你将要信任的人是否理解你和你的需求。询问潜在雇主关于数据、决策者和工具的尖锐问题。如果你要雇佣我们,确保你有我们需要的快乐和有效的东西。如果你在为我们设计工具,了解我们是谁,我们是如何思考的。
如果你想要快乐的数据科学家,你必须理解我们。
当然,如果你一生都在躲避我们,因为有人曾经因为你混淆了因果关系而对你大喊大叫,这是一项艰巨的工作……问题是:我们值得努力吗?
数据科学家值得吗?
如果你是一名产品经理、工程师或用户体验设计师,只想着置身事外,而不想知道是什么让你的数据科学家伙伴们成功,你是在赌数据科学是泡沫而人工智能是时尚。我不建议打赌,因为尽管名称可能会演变,但数据科学和人工智能从根本上讲是让数据变得有用,我无法想象未来的数据会比今天少。
我经常认为信息是有价值的,就像任何曾经说过“知识就是力量”的人一样。投资于那些技能适合帮助你充分利用信息的专业人士,是获得或保持你在市场中的优势的一个好方法。无论你如何称呼那些让你的数据对你有用的专业人士,这个角色只会在你的行业中变得更加普遍。你迟早会明白我们是谁。当你的同事们还在打盹的时候,你也可以享受早起的鸟儿特餐,调查我们。你的同理心和与我们合作的能力也将是你职业生涯中难以置信的优势。
我相信我们值得你花时间。让数据变得有用是未来,这就是我们为您所做的。让我们做朋友吧!**
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
数据科学:解释统计学中的 R
原文:https://towardsdatascience.com/data-science-explaining-r²-in-statistics-6f34e7f0a9bb?source=collection_archive---------9-----------------------
统计学中 R 平方的回顾
快速概述:
r 平方是相关性的度量。相关性由“r”来衡量,它告诉我们两个变量的相关性有多强。更接近+1 的相关性意味着正方向的强关系,而-1 意味着反方向的强关系。更接近 0 的值意味着变量之间没有太大的关系。r 平方与相关性密切相关。
示例:
理解 R 平方的最好方式是通过一个简单的例子。在本例中,黑色水平线代表房屋的平均价格。垂直蓝线代表变化。变异意味着各点与均值之间的差异。数据的变化可以通过每个点的平方差之和减去平均值来计算。
换句话说:变化=总和(房价 i- 均值)
“平方”从何而来?
每个数据点的差异是平方的,因此低于平均值的点不会抵消高于平均值的点。
现在,如果我们按照房子的大小来排列圆点呢?
房屋按大小排序,而不是按房屋 ID 排序(注意上图和当前图之间 X 轴的变化)。但是,均值和变差和上图一模一样!由于尺寸的原因,点的顺序发生了变化,但是水平线的值和蓝线的值仍然相同。
如果我们想确定一栋新房子的价格(第 8 号),给定的平均值是预测价格的最佳方法吗?
答案是否定的!我们可以通过对数据拟合一条线来做得更好。
拟合一条线后,我们可以用这条绿线预测房价。假设新房的面积相对较大,我们可以通过查看绿线来更准确地预测新房的价格。绿线比平均值更符合数据。
但是,与平均线相比,绿线与数据的吻合程度有多高呢?
我们通过你的猜测来量化这种差异。R 平方的公式为:
R = Var(均值)-Var(直线)/ Var(均值)。
我们已经计算了 Var(均值)。第二部分 Var(线)是新绿线周围每个数据点的变化。这种差异现在用垂直的橙色线表示。您可以预期绿线周围的变化会更小,因为它更符合数据。R 的范围将从 0 到 1。公式也让 R 变成了百分比。
简单演练:
假设我们计算了 Var(均值)= 32,Var(直线)=6。
我们使用我们的公式,得到 R = 32–6/32 = . 81
换句话说,线周围的变化比平均值少 81%。房子的大小/价格解释了 81%的变化。
在线性回归中,R 通常用作解释拟合线如何最好地解释数据的方法。创建线性回归模型后,平均值被用作基线,并与新拟合的线进行比较。
为了更好的身体的数据科学
原文:https://towardsdatascience.com/data-science-for-a-better-body-5a58f6f77f7c?source=collection_archive---------11-----------------------
Photo by Victor Freitas on Unsplash
20 个月前,我开始跟踪与我健康相关的统计数据。整个故事就在那上面,包括 的起伏,这里的 。
因为我是使用数据科学和统计学来 破解你的个人发展 的超级粉丝,我真的很兴奋地分享我学到的打造更好身材的三个统计学技巧。
1.不要用单一的衡量标准来衡量成功
在我健康追踪之旅的早期,我使用净卡路里(摄入的卡路里减去消耗的卡路里)作为我唯一的成功标准。而且,正如传统智慧告诉我们的,我使用 2000 卡路里的任意阈值作为我在任何一天成功或失败的标准。
这种方法有效了几个月,当我注意到我的净卡路里量定期攀升到 2000 以上时,我让自己对此负责。但是很快,关键的缺陷暴露了出来:
单纯的净热量不足以促进充分的运动。
让我解释一下。在我计算卡路里的头几个月,我善于将卡路里摄入量减少到 2000 卡路里以下。所以,我每天都吃大约 1900 卡路里,消耗大约 0卡路里,认为我已经“成功”了。
我意识到我需要一个新的标准来奖励我的锻炼,并最终提出了 卡路里 出比率 ,简单定义为消耗的卡路里除以摄入的卡路里。
为了理解这个比率的重要性,考虑两个可能的日期:
第一天: 吃 2000 卡路里,燃烧 0 卡路里其中 净卡路里是 2000 和 出-入比率是 0/2000 = 0.0
第二天: 吃下 2500 卡路里并燃烧掉 500 卡路里其中 净卡路里又是 2000 但是 的出-入比是 500/2500 = 0.2
在这两种情况下,净卡路里都是 2000,但我更愿意在第二天,因为我已经燃烧了 500 卡路里,并因锻炼而获得额外的好处。出入比是实现这一目标的最佳选择。我设定的每日目标是达到 0.2 或更高的出/入比率。
对于你们这些视觉学习者来说,在一张“卡路里输入”对“卡路里输出”的图表上,我想位于下面的“最佳点”。
你可以想出任何你想要的令人敬畏的健康跟踪指标,但是一般的建议是选择两到三个指标来定义你的成功,而不是一个。
这有两个互补的目的。首先,你要确保捕捉到你真正关心的生活方式的改变。第二,你不会把你的自我价值感仅仅局限在一个数字上。
2.使用滚动平均值而不是原始统计数据
让我知道这听起来是否熟悉。周一到周四,你吃得很好,定期锻炼,对糟糕的自己感觉很好。
然后周末来了…
- 周五晚上与朋友共进晚餐
- 周六下午自发的冰淇淋抢购活动
- 一个慵懒的周日,你不想去健身房
暗示接下来的周一,你会觉得自己抹去了这一周的所有进步,所以 “这一切有什么意义?!"
Random spikes in net calories
人们很容易感到气馁,相信我。在我开始追踪健康状况时,我经常感到沮丧。心态发生了转变,随之而来的是我报告健康数据方式的改变,这帮助我看到了真实的情况。
最重要的认识是,每一天都是不可预测的。
~你计划第二天早上去健身房,然后意识到你就是 不行。 秋天。睡着了。
~你可能计划晚餐吃鸡胸肉+蔬菜,但意识到和一些老朋友出去郊游太好了,不能错过。
~你可能会发现自己失去了一个意想不到的盯着油炸圈饼。
关键是,有时候事情会出乎你的意料。这基本上是人类生存的座右铭。
一旦我不再问自己今天我达到目标了吗?“我开始问自己”平均而言,我的健康状况有所改善吗?“我开始关注长期稳定的增长,而不是随机的短期波动。
那么这如何转化为跟踪你的统计数据呢?好吧,让我们假设你用每日频率制作了一张随时间变化的净卡路里图表。由于我们讨论的每日随机性,图表必然会有很大的波动。
Net calories in the last 20 months
但是,如果我们取过去 7 天的净卡路里平均值为例,我们就能够“洗去”日常事件,捕捉更多的潜在趋势。你健康的星期一和你食物充盈的星期六不再独立,现在通过平均运算相互影响。在原始数据上叠加 7 天的滚动平均值看起来像:
7-Day rolling average of net calories
您可以在您决定使用的任何其他健康跟踪指标上使用这种技术。
3.对数据进行切片,找出需要改进的地方
所以你已经追踪你的健康状况几个月了。你如何使用你仔细记录的数据来改善健康状况?
总体来看这些数据肯定会让你知道的平均水平在哪里,但不会给你任何关于如何改进的想法。
当我按一周中的某一天对数据进行切片时,我获得了最好的见解之一。
- 我知道周末可能比工作日(更)不健康,但是到底有多糟糕呢?
- 每个周末净卡路里的好目标是什么?
- 在所有的工作日中,有没有哪一天我在有系统地偷懒?
将我的净卡路里按照一周中的某一天进行切片,得到了下面的图表。
Net calories sliced by day of week
不出所料,周末很忙,但我不知道在周三 T10 和 T11 我已经危险地接近了 2000 卡路里的目标。很高兴知道这一点!
或者可能在一个月的某一天有一个趋势。我知道,在月初,我会感到信心和动力的高涨,但随着月份的进展,这种情绪通常会消退。如果我们在那个轴上切片呢?
Average net calories sliced by day of month
似乎我最应该意识到的是,在每个月的 中旬 左右,我的热量摄入会变得过高。
在这里,你可以尽情发挥创造力。关键是将你的数据分割成对你的生活有意义的变量,并努力改善那些不太重要的数据。
这就是我给你的全部!我希望这有助于给你的健康跟踪之旅更多的形状和方向。 祝好运,感谢阅读~
决策者的数据科学
原文:https://towardsdatascience.com/data-science-for-decision-makers-7248beddf948?source=collection_archive---------19-----------------------
斯泰利奥斯·坎帕克斯博士访谈
Image from http://thedatascientist.com/decision-makers-handbook-data-science/
介绍
在本文中,我采访了一位资深数据科学家Stylianos(Stelios)Kampakis博士,讲述他迄今为止的职业生涯,以及他如何帮助各行各业的决策者了解数据科学如何为他们带来好处。
Dr Stelios Kampakis (image: his own)
虽然数据科学是一个目前显示出巨大增长的领域,但它的描述有些模糊。我认为对于它到底是什么以及如何应用它还有很多不确定性。幸运的是,Stelios 是一位专家数据科学家,他的使命是教育公众关于数据科学和人工智能的力量。他是皇家统计学会的成员、 UCL 区块链技术中心的荣誉研究员和宇宙魔方学院的首席执行官。他天生博学,拥有机器学习博士学位以及人工智能、统计学、心理学和经济学学位,他喜欢用自己广泛的技能来解决难题并帮助公司提高效率。
面试
如今,数据科学是越来越受欢迎的职业选择。Stelios,你是怎么来到这个领域工作的,你做了多久了?
这个问题很有意思。如今,许多人最终成为数据科学家,仅仅是因为有很好的就业前景。你会看到人们已经学习了完全不同的东西(例如化学),然后他们使用各种在线材料自学数据科学。
我的情况完全不同。我的第一个学位是认知心理学,我计划成为认知科学、人工智能和神经科学领域的学者。我最终在数据分析上花费了越来越多的时间,直到我决定攻读机器学习的应用博士学位。这是我离开学术界进入工业界的转折点。然而,我想说,我对更广泛的数据和人工智能领域的参与已经持续了 10 多年,并始于我早期的大学时代。
当然,数据科学是一个宽泛的术语。你如何将这个领域分成不同的主题领域?你对他们中的任何一个有什么偏好吗?
这是一个很好的问题,因为没有多少人明白这一点。在数据科学这个术语出现之前,我们有在不同领域工作的人,例如基于规则的人工智能、机器学习、统计学、计算智能等。
作为一个术语,数据科学意味着“我正在用数据做事情”,它更多地是一个用来使销售这些类型的服务变得更容易的术语,因为对于门外汉来说,理解各种思想流派之间的微妙差异太令人困惑了。
在我的书(《数据科学决策者手册》)和研讨会中,我解释了塑造数据科学的三个主要领域:经典人工智能、机器学习和统计学。就技术而言,经典人工智能已经不那么流行了,但它在塑造现代人工智能历史的一部分方面发挥了巨大作用。
我是少数几个接受过所有这些领域培训的人之一(还有一些,例如计算智能)。我没有任何特别的偏好,并且我已经使用了所有这些方法中的方法。然而,如果我有可能的话,我相信最令人着迷的机会将是在通用人工智能上工作。
你对想进入数据科学的人有什么建议?
嗯,我认为现在进入数据科学是有史以来最容易的。我知道有些人会不同意我的观点。我也知道,在我们称自己为数据科学家之前,我和其他人已经花了无数时间在我们的教育和培训上,所以这样说可能不太公平。不过,我来解释一下。
我认为数据科学专业知识主要有三层。
专家:你对数据科学的大部分领域都有广泛的覆盖,可以在这个领域做研究,或者提出新的方法。这通常指的是有 7 年以上学术经验和几年工业经验的人。
从业者:你对技术如何工作有一些了解,知道如何编码和如何使用一些工具,但是你的知识不是很广泛。这描述了具有一些学术和工业经验(如理学硕士学位)的人。
工具用户:你熟悉一些基本的技术,知道如何使用一些基本的工具和库。这些人可能来自不同的领域(例如物理),他们可能擅长使用工具,但他们可能对数据科学的某些领域的覆盖面或理解有些有限。
我认为大多数自学的人介于从业者和工具使用者之间。实际上,大多数工作都可以由这些人来完成,因为他们不需要对方法如何工作有很好的理解。
我们已经看到了软件开发的类似趋势。在过去,如果你要编写最简单的东西,你必须真正了解计算机科学。现在,许多软件项目可以由刚刚花了几个月时间浏览教程并使用高级框架和平台的人来完成。
然而,这并不是说不需要专家。它们将只覆盖高端市场。
你对我们未来的发展有什么想法吗?未来 5 年将会是什么样子?
我相信我们会看到更多相同的趋势。数据科学将扩展到越来越多的垂直领域和越来越多的国家。我一直在和世界各地的公司合作(从埃及和塞浦路斯,到美国和德国)。所有国家的行业都在努力追赶潮流,收集更多的数据,并更好地利用这些数据。
我们将继续看到数据科学家的短缺,但这可能不是那么糟糕,因为(正如我在上一个问题中提到的),我们将看到许多技能有限的数据科学家的出现,他们足以解决大多数问题。
你能告诉我们你即将举办的涵盖数据科学和人工智能的活动吗?
它即将于 2019 年 3 月 21 日召开,是一个涵盖决策者需要了解的所有数据科学知识的研讨会,例如如何在公司中使用数据科学,或者如何雇用和管理数据科学家。
我的公司宇宙魔方学院的座右铭是“科技让生活变得简单”。大部分的资源和事件要么非常技术性,要么非常松散。宇宙魔方学院的目标是在这种微妙的平衡中提供培训,帮助决策者理解数据科学是什么,以及如何使用它,但不假设他们自己会开发任何东西。
各种背景的人都来参加研讨会。投资者(希望更多地了解这个主题)、招聘人员(希望更多地了解数据科学家是如何思考的)、规模化企业或初创企业的首席执行官以及产品经理。
我想你最近出版了一本书——是关于什么的?
这是“数据科学决策者手册”。与研讨会非常相似,这是对数据科学的高级概述,涵盖了决策者需要了解的关于数据科学的所有内容。它包括许多来自我的经验的案例研究,以及来自多个行业的各种例子。我也把它免费交给数据科学研讨会的参与者
这本书在我的博客中有 PDF 格式的版本,但也在所有主要的电子书平台(Kindle、PlayStore、iTunes 等)上有售。)
最后,除了你发布过的资源,你有什么值得推荐的网站、书籍和课程?
我想这取决于你的学习之旅是在什么样的道路上!我正在为有抱负的数据科学家发布一个名为 Datalyst 的新培训项目。然而,我自己关心的是跟上最新的研究趋势和最前沿的技术。
我正在阅读所有从事人工智能研究的大公司(优步、谷歌、脸书等)的博客。).我也在阅读所有主要会议的论文(ICML、NeurIPS、AI & Stats 等。).最后,我还关注了一些博客和时事通讯,比如数据灵丹妙药和走向数据科学。
最后
感谢 Stelios,很高兴从一个如此明显具有简单解释能力的人那里获得一些清晰,这是我的心声!我期待在三月份的研讨会上了解更多,并祝你和所有初露头角的数据科学家们数字运算愉快!
健身数据科学:50 岁是新的 30 岁——第一部分
原文:https://towardsdatascience.com/data-science-for-fitness-50-is-the-new-30-part-i-b5ffb543b555?source=collection_archive---------14-----------------------
下面的文章将试图解释一个对我来说非常有趣的经历,与算法音乐作曲 algos(我在 2013-2014 年开发的无神经网络)一起,是我从事的最有价值的项目之一:健身的数据科学。
在这一系列数据科学的实际应用中(围绕 MNIST、Reddit、Yelp 数据集等的教程你还不累吗?)我正在起草,我打算讲迷你故事:我是怎么到那里的,为什么,什么时候,等等。触及与题目相关的主题。
这不是直接的代码审查,虽然有些会被涵盖。这些小故事将更多地围绕一个主题讲述数据策略、数据科学及其实际应用,而不仅仅是代码。
回到健身,我在 2008 年 9 月开始对这个话题敏感。当时我在金融危机的“归零地”雷曼兄弟(Lehman Brothers)工作,在那里,我积累了大量围绕奇异数据集开发和推出结构化金融交易的专业知识。雷曼兄弟倒闭后,我对着镜子认真审视了自己很久。我看到一位情绪低落、身体不适(严格来说是肥胖)的华尔街高管,他曾专攻备受指责的金融领域。但我也看到了我内心的数据科学家。
定量分析师本质上是数据科学家,有很多时间序列分析和金融背景。定量分析师是解决问题的人,那时我遇到了大问题:由于肥胖和工作压力,我的健康状况逐渐恶化。
Fitness contrast: mid 30s, vs late 40s
镜子里的 quant/数据科学家回头看着我说“你可以用数据解决你的健身问题!”
让我现在停下来告诉你,如果你有兴趣学习快速减肥的方法,那么你不妨转到另一篇文章,因为这个故事不适合你。或者如果你想学习数据科学或编程,那么这篇文章也不适合你。
另一方面,如果你正在寻找独特的知识来帮助你实现健身目标,以新的方式看待事物,如果你喜欢数据科学,并且你正在考虑改善你的健身,那么这篇文章可能会为你提供正确的动力,也许会让你朝着正确的方向发展自己的研究和健身计划。
回到故事:我是一个胖胖的量化分析师,正在寻找一种合理的减肥方法,并且符合我量化分析师的心态。一个优秀的定量分析师知道,问对问题会让你离答案只差一半。因此,在 2008 年,我致力于研究这个课题,开发一个科学和公正的分析,并使用我自己的数据和发现。
作为一名优秀的量化/数据科学家,我对数据有点痴迷。在我与“数据科学手册”的采访中,我甚至讲述了我在 1992 年如何编写一个专家系统的故事(基本上,一个层次分析法,一种基于数学和心理学的组织和分析复杂决策的结构化技术),以决定我是否应该向我的妻子求婚…
无论如何,从 1985 年开始,我就一直手动收集某些类型的数据,用于我所从事的任何分析。从那以后,我开始收集和存储数据,首先是以书面形式,然后是 5 1/4 英寸的磁盘、3 1/2 英寸的软盘、磁带、zip 磁盘、CD、DVD、硬盘,你能想到的都有。1990 年,我得到了我的第一个电子邮件和 Unix(Linux 的鼻祖)账户,那一年我开始在我的离线数据收集中添加一些基本类型的在线数据收集,因为我可以访问早期的互联网。
但首先我必须调整某些工具,或者开发自己的工具,因为 Mosaic(第一个浏览器)还没有发明出来,我必须使用 Gopher、IRC 和 FTP 来收集数据。
Above is a sample I put together of the many devices and many types of data I have used to capture fitness data over the years
关于健康,我从 1987 年到 2000 年收集的数据非常少:每周使用 2-3 台设备收集几个数据点。然而,自 2000 年以来,我的数据变得更加密集,每天都有数百个数据点,并且使用 30 多种不同的设备和服务。
上面的图表显示了这些年来我用来获取自己身体参数的一些设备和服务。
我收集了各种各样的数据集,加上从医学杂志上发表的论文、与 40 岁以上身体健康的人的交谈中收集的知识,以及从 bodybuilding.com 等网站收集的数据。并结合自己的经历:
- 我能使用数据科学的方法来帮助我减肥吗?
- 我能否利用数据科学和定量分析的元素,在相对较短的时间内找到最适合我的方法?
- 我可以编写代码来整合来自我正在使用和已经使用的多个硬件、软件和基于网络的系统的数据吗?
- 我能否制定自定义指标、测试假设,并针对偏离我的健身目标的情况开发近乎实时的警报?
- 我可以使用分类模型进行分析吗?我可以使用回归模型吗?
- 我能否从数据中获得可操作的情报?
答案是肯定的。
In the Facebook post above, privately share only among close friends, you can see my peak shape in January 2012 and my fitness evolution since 2009. A very important factor in my program was the incorporation of domain expertise, in particularly from people over 40s (good combination of theoretical and practical knowledge), and in good shape. Thanks again to Gregg Avedon and Steven Herman, whose knowledge complemented and enhanced my own knowledge, and provided inspiration.
以下是多年来获得的一些参数。我打算以后在我的 GitHub 或 Bitbucket 账户中分享我的数据摘录和一些代码。如果你想了解最新信息,请在sourcer跟我来,因为我 99%的代码都在私人回购中,sourcer 以一种非常好的格式整合了我所有的编码活动。
Somewhere in the Caribbean, in 2010
Some of my programming language/library specific expertise, percentile rank against all other users in GitHub, GitLab, BitBucket, etc. and the top areas of concentration of my code
*A little review about Sourcerer: It still has a few bugs, but the work these guys are doing is* ***GREAT*** *and very useful, specially for people like me, whose code is mostly in private repos and with very little contribution to open source projects (Wall Street vs Silicon Valley. Anybody can relate?).* *Using machine learning, Sourcerer analyzes your code and ranks your coding skills (commits, lines of code, code frequency, style, etc.), against ALL other users in GitHub, BitBucket, GitLab, etc. and summarizes your expertise by technology, programming languages, etc.* *None of your proprietary code in private repos is shared with Sourcerer, simply, just analyzed.* *To the left is a sample of my Sourcerer profile. If you are a coder with public and private repos in many places, you should definitely check it out.*
回到这篇文章,下面粗体的参数将是我在未来的“健康数据科学:50 岁是新的 30 岁”系列中试图解释的。他们是我从胖到适合的转变中影响最大的,也是我开发的机种中解释价值最高的。它们是:
- 每日消耗的总热量
- 消耗的卡路里分解(来自蛋白质、碳水化合物、脂肪的卡路里)
- 每次锻炼消耗的热量:举重、单板滑雪、跑步、骑自行车、打高尔夫、其他
- 肌肉量
- 脂肪量(体脂%)
- 内脏脂肪
- VO2 最大值
- 运动后过量耗氧量(EPOC)
- 恢复时间
- 培训效果
- T-3 总测试*
- T-4 总测验*
- 平均体温*
- 总脂肪
- 饱和脂肪
- 纤维
- 胆固醇
- 总重量
- 身体年龄
- 血糖水平
- 体重指数
我的系统的结果是杰出的。这是一个总结:
Approximate peak to trough key measures: From 250 lbs total top weight in 2008 to 190 lbs lowest weight in 2009–2011
比 2009-2011 年身体脂肪减少 72 磅更显著的是 8 年内增加了 30 磅肌肉,如果你在 40 多岁或 50 多岁时不使用合成代谢类固醇,这在代谢上非常困难。见鬼,即使在你 20 多岁或 30 多岁的时候,也很难获得那么多。
Another great help came from Gregg Avedon (18 times on the cover of Men’s Health magazine), from Florida, fitness model and writer for said magazine. Gregg looks great in his early 50’s, and his “health food recipes” had a lot of the key nutrition ratios I later found out worked well for me. We kept some interesting communication via Facebook etc. for tips, progress reports. etc.
我说这些结果是杰出的,因为我们需要考虑到,在 30 岁以上,每个人都患有与年龄相关的肌肉减少症,每十年造成 3%到 5%的肌肉质量损失(在老年时加速,50 岁后每年肌肉质量损失 0.5%到 1%)。即使你很活跃,你仍然会有一些肌肉流失。肌肉的任何损失都很重要,因为它会降低力量和灵活性。所以,在某种程度上,逆转肌肉流失是一种让你看起来和感觉更年轻的方法。
除了饮食和锻炼的好处,我还会在短时间内经历大规模的肌肉增长(请查看上面我的 1/2012 图片),使用一种有争议的“技术”,称为 “糖原超级补偿”。
Another friend and mentor, from the over 50 crowd, Steven Herman. Steven is from NYC, a former Madison Avenue executive now fitness model & instructor, as a pastime. Looking great is his mid 50s.
Gylcogen super compensation 不是我正常健身程序的一部分,而是一个“辅助实验”,试图量化肌肉生长的某些参数。随着时间的推移,这是不可持续的,所以我不推荐给任何人,但你可以在这里阅读更多关于它的内容。
那么,我是如何克服重重困难取得这些成就的呢?定量分析/数据科学和学科。但这一切都始于数据收集、数据整合和标准化。
开始—数据整合
下面的图表显示了这些年来我的总体重波动,我测试了许多减肥系统(Nutrisystem,Atkins 等。),结果喜忧参半。
阴影区域表示所获取和分析的知识的不同特征。健身数据和知识是从 1985 年到 2008 年期间获得的(超过 23 年的随机试错和没有适当计划的训练)。从 2008 年开始,我分析了自己的数据,并纳入了健身和营养领域人士的专业知识,为一个非常具体的双重目标函数进行了优化:最大减脂和最大增肌(这很棘手,因为新陈代谢不可能同时完成这两项)。
为了使用我捕获并分布在不同介质上的所有不同数据类型,我必须将它们整合到一个数据库中。我选择 MongoDB,因为:
- 这是一个无模式的数据库,所以我的代码定义了我的模式,对我来说这对于数据科学来说是完美的。
- 因为它以 BSON(二进制 JSON)的形式存储数据,所以它有助于存储非常丰富的粒度数据,同时能够保存数组和其他文档。例如,我可以看到锻炼中消耗的总热量,但在更精细的检查中,我可以看到我的一个设备捕捉到的一秒一秒的热量消耗(即 FitBit 实时心率数据,计算卡路里等。)都在同一个 mongodb“文档”里。
“Volatility” higher than certain threshold for some key fitness and nutrition parameters do not let you to get “six pack abs” no matter how hard you work out.
- MongoDB 支持动态查询。
- 很容易扩展。
- 不需要复杂的连接。
- 与任何关系数据库相比,性能调优都很容易。
- 由于其使用内部内存进行存储的特性,可以更快地访问数据。
- 也支持按正则表达式搜索。
- MongoDB 遵循其较新版本的常规发布周期,如 Docker 等。
简而言之,我发现处理时间序列和不同时间序列中的不同特性是最好的数据库。(再举一个例子,我所有的算法音乐数据库最初都存储在 HDF 文件中,现在迁移到 mongodb,还有我处理过的人寿和财产保险的保险数据)。
下面是一个代表这个项目不同阶段的图表,以及我使用的工具:
在接下来的文章中,我将解释我的系统的一些重要特性,并进一步展开,没有特定的顺序,在一些关键的发现中:
The cumulative work load and type of work load for a given unit of time (frequency and intensity) is a VERY important aspect in an optimized fitness program.
- 营养:食物的种类,进餐的时间,食物的数量。
- 锻炼的类型和强度:与以下方面的关系:a)改善健康和肌肉质量,b)过度训练和减少肌肉质量,以及 c)保持肌肉质量。因素的顺序很重要。时间序列很重要。
- 心理方面:对自己的遵从,量化,激励。
在上面的图表中,我发现大多数没有取得任何进展或进展很小的人(大部分人)都在模式“B”和“C”下工作,他们不知道自己的最佳值是多少,因为他们没有收集数据,如果他们收集了数据,他们不知道如何分析数据并将其放在自己的目标环境中。
截至 2019 年 2 月,我目前更多地处于“C”型情况,因为我很难保持前一阵子对自己健身的严格遵守。尽管如此,我还是设法保持了大部分已获得的肌肉质量,并可以在 8-12 周内再次转换到“A”型,从我目前的基线恢复体型。
由于这个项目涵盖了数据科学和健身领域的许多方面,我希望听到您的反馈,告诉我下一篇文章的重点是什么:
- 数据收集?
- 数据可视化?
- 机器学习模型和验证?
- 其他?
在此之前,我希望听到您的评论/反馈。
如果你喜欢这篇文章,你可能想看看我其他关于数据科学和金融、健身、音乐等的文章。你可以关注我的私人回复这里、 twitter 帖子这里中的活动,或者你可以问下面的 Qs 或者在 SGX 分析的给我发邮件。
如果你对我应用于算法音乐作曲的时间序列分析和模拟很好奇,可以在 Apple Music 、 Spotify 、和 SoundCloud 听听我的 AI 生成音乐。
干杯
***Parts of this story were originally published in my personal blog a few years back. All the pictures and charts are mine and/or have permission to post.***
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
热门歌曲预测的数据科学
原文:https://towardsdatascience.com/data-science-for-hit-song-prediction-32370f0759c1?source=collection_archive---------18-----------------------
算法能预测热门歌曲吗?让我们来探索如何仅使用音频特征来成功构建热门歌曲分类器,如我的出版物 (Herremans et al .,2014) 中所述。
在我的博士研究期间,我看到了 Pachet & Roi (2008)的一篇题为“热门歌曲科学还不是科学”的论文。这引起了我的兴趣,并促使我探索我们是否真的可以预测热门歌曲。关于这一主题的研究非常有限,更完整的文献综述请参见 Herremans et al. (2014) 。我们决定,可以通过关注一个特定的流派来优化模型的有效性:舞曲。这对我来说很有直觉,因为不同的音乐类型会有不同的特点来成为热门歌曲。
资料组
为了能够进行热门歌曲预测,我们首先需要一个热门/非热门歌曲的数据集。虽然不乏热门名单,但发现《T4》不在热门名单上却是另一回事。因此,我们决定在热门列表上对排名高和排名低的歌曲进行分类。我们做了一些实验,看看哪种分割效果最好,如表 1 所示,这产生了三个数据集(D1、D2 和 D3):
Table 1 — Hit dataset split from Herremans et al. (2014).
每一个都有稍微不平衡的阶级分布:
Figure 1 — Class distribution from Herremans et al. (2014).
热门榜单收集自两个来源:Billboard (BB)和原创排行榜公司(OCC)。下表显示了收集的点击量。请注意,歌曲会在排行榜上停留数周,因此独特歌曲的数量要少得多:
Table 2 — Hit dataset from Herremans et al. (2014).
现在我们已经有了一个歌曲列表,我们需要相应的音频特性。我们使用回声巢分析器(Jehan 和 DesRoches,2012 年)提取了一些音频特征。这个漂亮的 API 允许我们获得许多音频特性,只基于艺术家的名字和歌名。Echo Nest 被 Spotify 收购,现在集成在 Spotify API 中。那么我们提取了什么:
1。标准音频特征: 这些包括持续时间、速度、拍号、模式(大调(1)或小调(0))、调、响度、可跳舞性(由 Echo Nest 根据节拍强度、速度稳定性、整体速度等计算)、能量(由 Echo Nest 根据响度和片段持续时间计算)。
2。新的时间特征 因为歌曲会随着时间的推移而变化,我们在迅达&劳伯(2012)的基础上增加了一些时间聚合特征。它们包括平均值、方差、最小值、最大值、范围和 80%的~1s 段。这样做是为了实现以下功能:
音色 —音频音色的 PCA 基向量(13 维)。一个 13 维的矢量,它捕捉歌曲每一段的音色。
节拍差— 节拍之间的时间。
太好了!现在我们有了一个很好的音频特征集合,以及它们在排行榜上的位置。像任何好的数据科学项目应该开始,让我们做一些数据可视化。我们注意到的第一件事是点击率会随着时间而变化。十年前的热门歌曲,不一定是今天的热门歌曲。随着时间的推移,当我们观想我们的特征时,这变得很明显:
Figure 2— Interactive bubble chart from Herremans et al. (2014), also on dorienherremans.com/dance (apologies .js may not work on some browsers though, I have not updated this in a while)
有趣的是,我们看到热门舞曲变得更短、更响,而且根据 Echo Nest 的“可跳舞性”特征,更不适合跳舞!
Figure 3 — Evolution of hit features over time from Herremans et al. (2014).
要更完整地了解一段时间以来的特征,请查看我关于可视化热门歌曲的短文:( Herremans & Lauwers,2017 ) 和附带的网页。
模型
探讨了两种模型:可理解的模型和黑箱模型。正如所料,后者更有效,但前者让我们了解为什么一首歌可以被认为是热门。
决策树(C4.5)
为了适应页面上的决策树,我将修剪设置为高。这使得树很小并且容易理解,但是在 D1 上给出了 0.54 的低 AUC。我们看到只有时间特征存在!这意味着它们一定很重要。特别是音色 PCA 音色向量的第三维),它反映了攻击的重点(锐度),似乎对预测热门歌曲有影响。
Figure 3 — Decision tree from Herremans et al. (2014).
基于规则的模型(Ripper)
使用 RIPPER,我们得到一个与决策树非常相似的规则集。音色 3 再次出现。这一次,我们在 D1 的 AUC 是 0.54。
Table 3 — Rule set from Herremans et al. (2014).
朴素贝叶斯、逻辑回归、支持向量机(SVM)
关于这些技术的简单描述,请参考 Herremans 等人(2014) 。
决赛成绩
在进入任何结果之前,我应该强调,在这里使用一般的分类“准确性”是没有意义的,因为类别是不平衡的(见图 1)。如果你想使用精度,它应该是类特定的。这是一个常见的错误,但记住这一点非常重要。因此,我们使用受试者操作曲线(ROC)、曲线下面积(AUC)和混淆矩阵来正确评估模型。
十重交叉验证
我们获得了数据集 1 (D1)和数据集 2 (D2)的最佳结果,没有特征选择(我们使用 CfsSubsetEval 和遗传搜索)。所有特征在训练前都是标准化的。因为 D3 在命中和非命中之间具有最小的“分离”,所以这个结果是有意义的。总的来说,逻辑回归表现最好。
Table 4— AUC Results from Herremans et al. (2014), with and without feature selection (FS).
看下面的 ROC 曲线,我们看到该模型优于随机预言(对角线)。
Figure 4— ROC for Logistic Regression from Herremans et al. (2014).
通过查看混淆矩阵可以看到分类准确性的细节,这揭示了正确识别非热门歌曲并不容易!然而,在 68%的情况下,命中是正确识别的。
Table 5— Confusion matrix for Logistic Regression from Herremans et al. (2014).
超时测试设置
我们还使用了一组按时间顺序排列的“新”歌曲,而不是 10 倍交叉验证。这进一步提高了性能:
Table 6— AUC for split versus 10-fold CV from Herremans et al. (2014).
有趣的是,该模型对新歌曲的预测更好。是什么导致了这种偏斜?也许它学会了预测趋势如何随时间演变?未来的研究应该着眼于音乐偏好随时间的有趣演变。
结论
如果只看音频特征,Herremans 等人(2014 年)可以用 81%的 AUC 预测一首歌是否会出现在前 10 名的热门列表中。我们能做得更好吗?很可能是的!我们在这项研究中看到的特征集是有限的,因此通过使用低水平和高水平的音乐特征来扩展它,可以实现更高的准确性。此外,在后续研究中,我观察了社交网络对点击预测的影响,这也有重大影响 (Herremans & Bergmans,2017) 。
Dorien Herremans 博士教授——dorienherremans.com
参考
Herremans 博士、Martens 博士和 s rensen k .(2014 年)。舞蹈热门歌曲预测。《新音乐研究杂志》, 43 (3),291–302。【预印本链接】
Herremans 博士和 Bergmans t .(2017 年)。基于早期采用者数据和音频特征的热门歌曲预测。第 18 届国际音乐信息检索学会会议(ISMIR)——最新演示。中国苏州【预印本链接】
劳沃斯·赫尔曼斯..2017.视觉化另类排行榜的演变。第 18 届国际音乐信息检索学会会议(ISMIR)——最新演示。中国苏州【预印本链接】
Jehan T .和 DesRoches D. 2012。EchoNest 分析器文档,URL developer . echo nest . com/docs/v4/_ static/analyzed Documentation。可移植文档格式文件的扩展名(portable document format 的缩写)
帕切特和罗伊出版社(2008 年 9 月)。打宋科学还不是科学。在伊斯米尔(第 355–360 页)。
辛德勒和劳伯(2012 年 10 月)。在 echonest 特征中捕获时间域以提高分类效率。在自适应多媒体检索国际研讨会(第 214–227 页)。斯普林格,查姆。
数据科学促进我们的智力发展
原文:https://towardsdatascience.com/data-science-for-our-mental-development-3fccbd29eff2?source=collection_archive---------16-----------------------
情感是人类社会的基本要素。仔细想想,一切值得分析的东西都是受人类行为影响的。心怀不满的员工对网络攻击影响很大,他们可能会忽视尽职调查,或者参与内部人员滥用。股票市场取决于经济气候的影响,而经济气候本身又取决于大众的总体行为。在交流领域,众所周知,我们说的话只占信息的 7%,而其余 93%都编码在面部表情和其他非语言暗示中。心理学和行为经济学的整个领域都致力于这一领域。也就是说,有效测量和分析情绪的能力将使我们能够以显著的方式改善社会。例如,加州大学旧金山分校的心理学教授保罗·艾克曼在他的书 中描述了说谎:在市场、政治和婚姻中欺骗的线索 中,当病人对这种意图撒谎时,阅读面部表情可以帮助心理学家发现潜在自杀企图的迹象。听起来像是面部识别模型的工作?神经映射呢?我们能有效地从神经冲动中映射出情绪状态吗?提高认知能力呢?甚至情商和有效沟通?使用我们可用的大量非结构化数据,世界上有许多问题需要解决。
话虽如此,就像每个数据科学问题一样,我们需要深入研究情感建模的核心挑战:
- 如何框定问题?我们的示范课应该是什么样的?我们在优化什么?
- 我们应该收集哪些数据?我们在寻找什么相关性?我们应该在哪些方面比其他方面投入更多?
- 获取这些数据有什么问题吗?关于获得情感的社会和文化观点是什么?需要维护哪些隐私法规?数据安全呢?
有关有效设计人工智能产品的更多信息,请阅读我的 UX 数据科学家和人工智能产品设计指南 。在这篇博客中,我旨在概括人工智能如何在未来帮助我们开发智力,并讨论一些当今的解决方案。
卫生保健
病人对医生撒谎并不少见。尴尬和与医生面对面的时间太少加剧了男性和女性的信任障碍。一个名为的数字健康平台 ZocDoc 显示,近一半(46%)的美国人避免告诉医生健康问题,因为他们感到尴尬或害怕被评判。大约三分之一的人说他们隐瞒了细节,因为他们找不到合适的机会或在预约中没有足够的时间(27%),或者因为医生没有问任何问题或具体是否有什么困扰他们(32%)。这种情况的一个主要影响是在自杀领域。根据世界卫生组织(世卫组织)的数据,每年有多达 80 万人死于自杀,其中 60%的人面临严重的抑郁症。尽管抑郁症使患者处于从事自杀行为的更高风险中,但自杀型抑郁症患者和普通抑郁症患者之间的差异并不容易察觉。
Deena Zaidi 在她的博客中描述, 机器学习使用面部表情来区分抑郁症和自杀行为 ,一个对风险因素进行了深入评估的自杀专家将如何预测病人未来的自杀想法和行为,其准确率与一个对病人毫不知情的人相同。这与基于抛硬币做出决定没有什么不同。虽然使用监督学习模型读取面部表情仍在开发中,但该领域已经显示出许多前景。
Duchenne (top) vs non-Duchenne (bottom) smiles analyzed from SVM results help detect suicidal risks (Source: Investigating Facial Behavior Indicators of Suicidal Ideation by Laksana et al.)
与南加州大学、卡内基梅隆大学和辛辛那提儿童医院医学中心的科学家合作撰写的一份报告调查了非语言面部行为以检测自杀风险,并声称发现了区分抑郁症患者和自杀患者的模式。使用 SVM,他们发现面部行为描述符,如涉及眼轮匝肌收缩的微笑百分比(杜兴微笑)在自杀和非自杀组之间有统计学意义。
认知能力
认知能力是一种基于大脑的技能,我们需要它来完成从最简单到最复杂的任何任务。它们更多地与我们如何学习、记忆、解决问题和集中注意力的机制有关,而不是与任何实际知识有关。人们热衷于提高认知。谁不想更好地记住名字和面孔,更快地理解困难的抽象概念,更好地“发现联系”呢?
Elevate app on the Apple Store
目前,有一些应用正在帮助我们训练认知能力。一个这样的例子是 Elevate ,它由大脑游戏组成,用户可以在正确的难度水平上玩,以提高心算、阅读和批判性思维能力。最佳认知功能的价值如此明显,以至于没有必要详细阐述这一点。为了理解我们周围世界的更深层次的含义,我们不断地拓展我们五种感官的界限。例如,在图像识别领域,人工智能已经能够“看”得比我们更好,通过观察远在 RGB 光谱之外的变量,这反过来帮助我们超越我们自己的视觉限制。然而,当我们可以虚拟化时,为什么要把自己限制在 2D 屏幕上来可视化 3D 物体呢?
Nanome.AI develops Augmented Reality for analyzing abstract molecular structures
增强现实让我们感觉自己仿佛被传送到了另一个世界。计算材料学和生物学是我思考这个问题时瞬间想到的领域。作为一名过去的计算材料科学家,我知道可视化复杂的分子结构对许多研究人员来说是一个挑战。纳米。AI 帮助在增强现实中可视化这些复杂的结构。更进一步,已经有很多初创公司在解剖学领域使用增强现实技术来培训外科医生。
Parallel Coordinate plot visualizing 7-dimensional space
为了让我们更好地体验我们周围的世界,数据可视化和降维算法的新习惯用法一直在不断产生。例如,我们有平行坐标,它允许我们通过高维空间进行可视化和过滤,而 t-SNE 在将复杂空间分解为 2D 或 3D 空间后,很受欢迎。
情商
情商是一种意识到、控制和表达自己情绪的能力,也是一种明智而富有同情心地处理人际关系的能力。所有人都会经历情绪,但只有少数人能够在情绪出现时准确地识别出来。这可能是缺乏自我意识,或者仅仅是我们有限的情感词汇。很多时候,我们甚至不知道自己想要什么。我们努力以一种特定的方式与周围的人联系,或者消费一种特定的产品,只是为了能感受到一种无法描述的独特情感。我们感受到的不仅仅是快乐、悲伤、愤怒、焦虑或恐惧。我们的情绪是上述所有因素的复杂组合。理解我们自己以及我们周围人的情绪的能力对于情绪健康和维持积极的人际关系至关重要。
Distributed patterns of brain activity predict the experience of discrete emotions detected using fMRI scans on top and sensitivity range at the bottom (Source: Decoding Spontaneous Emotional States in the Human Brain by Kragal et al.)
随着神经映射的创新,我们将更好地理解我们作为人类是谁,以及我们可以达到的无数种情绪状态。有监督的学习已经提供了一些普通情感的途径。通过对脑电波进行无监督学习,我们复杂的情绪模式可能会得到更好的理解。例如,一个简单的异常值检测算法也许可以揭示新的情绪模式或值得注意的重要情绪应激源。这样的研究有可能揭示提高我们情商的创新方法。
Demonstration of how reading microexpression accurately can help negotiate during business transactions (Source: TED Talk: How Body Language and Micro Expressions Predict Success — Patryk & Kasia Wezowski)
甚至有助于防止自杀的监督图像识别模型也可以让个人读出他们交谈对象的情绪。例如,一个关于微表情的 TED 演讲展示了如何在商业谈判中估算出理想的价格点,只需保持对特定面部表情的注意。同一个 TED 演讲中提到,善于解读微表情的销售人员比不会的销售人员多卖 20%。因此,这 20%的优势可能可以通过购买能够显示说话者情绪的眼镜来实现。
情商既包括理解我们自己的情绪,也包括对周围的人更加敏感。随着对我们情绪状态的深入研究,我们也许可以解开我们从未体验过的新情绪。在合适的人手里,人工智能可以作为我们的延伸,帮助我们与生活中我们重视的人建立有意义的联系。
经验和想象力
想象力是一种能力或行为,可以形成新的想法、图像或对感官无法感知的外部事物的概念。人工智能对我们的经验和想象力的影响将来自更好的认知能力和情商的聚合。简而言之,获得更丰富的认知能力和情商模式将让我们体验当今普通人难以想象的想法。
牛津大学哲学教授尼克·博斯特罗姆,在他的论文 为什么我长大后想成为后人类 中,描述了获得新的体验模式将如何增强我们的经验和想象力。让我们假设我们今天的体验模式是在空间 x 中表示的。10 年后,让我们假设体验模式是在空间 Y 中表示的。空间 Y 将比空间 x 大得多。Y 的这个未来空间可能会接触到除了我们传统的快乐、悲伤和疯狂之外的新类型的情感。这个新的 Y 空间甚至可以让我们更准确地理解反映我们想要表达的抽象思想。我们每个人都有可能以文森特·梵高最疯狂的想象也无法理解的方式来看待这个世界!
这个新的 Y 空间实际上可以打开一个新的可能性世界,它超出了我们目前的想象。未来的人们将以比我们今天更丰富的程度来思考、感受和体验这个世界。
沟通
当你缺乏情商时,很难理解你是如何给别人留下印象的。你觉得被误解了,因为你没有用人们能理解的方式传达你的信息。即使经过实践,情商高的人也知道,他们不会完美地传达每一个想法。人工智能有潜力通过增强自我表达来改变这一点。
Google glasses translate German into English (Source: Google buys Word Lens maker to boost Translate)
10 年前,我们的大部分交流仅限于电话和电子邮件。今天,我们可以参加视频会议,增强现实和社交媒体上的各种应用程序。随着我们认知能力和情商的提高,我们可以通过分辨率更高、抽象程度更低的习语来表达自己。谷歌眼镜可以即时翻译外文文本。在前面的章节中,我已经提到了使用谷歌眼镜阅读微表情的可能性。然而,为什么我们的交流仅限于我们“看得见”的东西呢?
Controlling drones using sending electrical impulses to headgear based sensor (Source: Mind-controlled drone race: U. of Florida holds unique UAV competition)
佛罗里达大学的学生只用意念就实现了对无人机的控制。我们甚至可以使用振动游戏机,利用我们的触觉使马里奥赛车游戏更加逼真。今天的增强现实只会限制我们的视觉和听觉。在未来,增强现实可能真的允许我们去闻、尝和触摸我们的虚拟环境。除了访问我们的 5 种感官,我们对某些情况的情绪反应可能会通过人工智能的力量进行微调和优化。这可能意味着分享我们在灵异活动中的主角的恐惧,感受艾玛的心碎,或者对口袋妖怪的冒险感到兴奋。
一些潜在的担忧
虽然我已经列举了能够使用人工智能阅读情感并帮助我们了解自己和周围人的所有积极因素,但我们不能忘记潜在的挑战:
- 数据安全:根据世界隐私论坛的数据,被盗医疗凭证的街头价值约为 50 美元,相比之下,仅被盗信用卡信息或社会安全号码的街头价值就为 1 美元。同样,心理健康信息是敏感的个性化数据,可能会被黑客利用。就像黑客试图窃取我们的信用卡和医疗保险信息一样,获取情感数据可能会在黑市上获得丰厚回报。
- 政府数据法规:对于任何高度敏感的个性化数据,不同国家有不同的法规需要遵守。在美国,与医疗保健相关的数据将需要遵守 HIPAA 法规,而与金融应用相关的数据将需要 PCI 。如果我们看得更远,欧盟有 GDPR ,中国有 SAC 。
- 伦理界限:和任何新技术一样,社会可能不喜欢自己的情感被获取。让我们面对事实。我们可能可以接受医生检查我们的情绪数据来改善我们的健康,但不能接受保险公司试图向我们收取更高的保费。按照同样的思路,我们已经有了操纵大众心理操纵美国选举的嫌疑。然而,伦理规范在很大程度上依赖于特定社会中被认为是“正常”的东西。不能接受的东西,以后也不一定能接受。虽然数据科学在这一领域的某些方面的应用可能会让公众感到不舒服,但其他应用,如防止信贷欺诈和反洗钱的欺诈分析,以及亚马逊和网飞等推荐系统的营销分析,都是完全可以接受的。当引入一个新想法时,社会的接受程度将在很大程度上取决于所收集的数据被用来解决的问题的类型。关于开发人工智能产品的更多细节,请查看我的博客 UX 数据科学家和人工智能产品设计指南 。
创业公司的数据科学:容器
原文:https://towardsdatascience.com/data-science-for-startups-containers-d1d785bfe5b?source=collection_archive---------10-----------------------
Source: https://commons.wikimedia.org/wiki/File:CMA_CGM_Benjamin_Franklin.jpeg
为机器学习构建可重复的设置
数据科学家越来越需要的技能之一是再现分析的能力。让代码和脚本只在你的机器上工作是不可持续的。您需要能够分享您的工作,并让其他团队能够重复您的结果。我在数据科学组织中看到的一些最大的影响是当其他团队将旧代码重新用于新用例时。这篇博文是关于鼓励通过容器重用分析的,这意味着你的工作可以转移。
容器的概念是,它是一个隔离的环境,您可以在其中设置执行任务所需的依赖关系。任务可以是执行 ETL 工作、监控数据质量、建立 API 或者托管交互式 web 应用程序。容器框架的目标是提供轻量级实例之间的隔离。容器是虚拟机的替代品,虚拟机是隔离的一个很好的解决方案,但是需要很大的开销。使用容器框架,您可以指定代码需要的依赖项,并让框架处理管理不同执行环境的跑腿工作。Docker 实际上是容器的标准,围绕 Docker 有很多工具。
一般来说,与本地部署相比,数据科学家使用 Docker 需要做更多的工作。然而,Docker 有几个好处:
- 可重复的研究:如果你能以容器的形式交付你的分析,那么其他数据科学家可以重新运行你的工作。
- 显式依赖:为了将你的脚本设置成一个容器,你需要理解你的代码的依赖关系和任何可能需要的额外的库,以及它们的版本。
- 改进的工程协作:如果你想扩大你已经建立的模型,给你的工程团队提供一个 docker 文件比提交一个 R 或 Python 脚本要好得多。它还调出代码执行所需的依赖项。
- 更广泛的技能集:能够将基础设施作为代码是一种有价值的技能集,使用 Docker 容器可以帮助数据科学家开始开发这种技能集。
一个有效的数据科学组织的理想状态是团队的任何成员都可以复制以前的研究。作为一名前学者,我想进一步推广这个建议,并鼓励所有提交给 arXiv 的内容都包含可复制的环境。建立一个标准的研究框架是很棒的,作为概念验证,我将我以前的一篇研究论文移植到了一个容器环境中:
[## 可再生研究:星际采矿
2009 年,我发表了一篇关于预测《星际争霸:育雏战争》建造顺序的论文,使用了不同的分类…
towardsdatascience.com](/reproducible-research-starcraft-mining-ea140d6789b9)
有很多围绕容器环境构建的生态系统,比如 Kubernetes 和弹性容器服务(ECS)。与这些环境所提供的关注规模不同,我们将关注获取一个现有的脚本并将其包装在一个容器中。
[## 使用 Flask 部署 Keras 深度学习模型
这篇文章演示了如何使用 Keras 构建的深度学习模型来设置端点以服务于预测。它…
towardsdatascience.com](/deploying-keras-deep-learning-models-with-flask-5da4181436a2)
这篇文章中使用的所有代码都可以在 github 上获得。当使用 Docker 时,我鼓励在源代码控制中托管所有文件,以确保您的容器可以部署到新的环境中。在这篇文章中,我将介绍 Docker 安装,在 Docker 中包装一个简单的 web 应用程序,然后作为 Docker 容器托管一个深度学习模型。
安装 Docker
使用 Docker 的第一步是在您想要构建和测试映像的机器上设置 Docker。在这篇文章中,我用新的 AWS AMI ( 设置指令)构建了一个 EC2 实例。您可以使用以下命令安装并验证 Docker 安装:
**# python 3**
sudo yum install -y python3-pip python3 python3-setuptools**# docker install** sudo yum update -y
sudo amazon-linux-extras install docker
sudo service docker start**# test docker setup** sudo docker ps
对于 AWS,如果您使用不同的实例类型,这里的提供了更多的细节。对于所有其他环境,参见 docker 说明。运行完这些步骤后,您可以通过运行以下命令来检查哪些容器正在运行:sudo docker ps
。
An empty Docker Install
虽然还没有任何活动的容器,但是这个输出表明 Docker 已经启动并在您的实例上运行。我们现在准备开始托管 web 应用程序和 Python 脚本作为 Docker 容器!
回声服务
在 Python 中支持 web 服务最常用的工具之一是 Flask。首先,我们将建立一个简单的 echo web 服务,其中传入的消息被返回给调用者。这是一个相对简单的环境。我们需要安装 Python 3,我们在安装 Docker 时已经这样做了,然后安装 Flask,如下所示:
pip3 install --user Flask
现在我们可以编写一个 Flask 应用程序来实现这个 echo 服务,其中传递给服务的参数被回显到终端:
这是一个简单的 web 应用程序,它将返回一个有效负载,其中的msg
参数将回显到 web 响应中。因为我们使用的是 Flask,所以我们可以用一个命令来部署应用程序:
python3 echo.py
结果是我们可以向服务发布消息:
**# web call**
[http://ec2-3-88-9-61.compute-1.amazonaws.com:5000/predict?msg=HelloWorld](http://ec2-3-88-9-61.compute-1.amazonaws.com:5000/predict?msg=HelloWorld)**# result** {"response":"HelloWorld","success":true}
到目前为止,我们所做的大部分工作都围绕着设置 AWS 以允许传入连接,以及在 EC2 实例上安装 Python 3。现在我们可以专注于服务的容器化。
将服务作为容器回应
自从我们让 echo 服务在一个新的 EC2 实例上工作以来,我们已经完成了设置可再现环境的一些过程。在执行简单的服务之前,我们需要设置 Python 3 和 Flask。使用 Docker,我们需要做同样的过程,但是是以自动化的方式。要指定如何用 Docker 构建环境,您需要在项目中创建一个 Dockerfile 对象,它枚举了设置环境的细节。复制 echo 服务应用程序的 dockerfile 文件如下所示,位于 github 上:
FROM ubuntu:latest
MAINTAINER Ben Weber RUN apt-get update \
&& apt-get install -y python3-pip python3-dev \
&& cd /usr/local/bin \
&& ln -s /usr/bin/python3 python \
&& pip3 install flask COPY echo.py echo.py ENTRYPOINT ["python3","echo.py"]
该 Dockerfile 文件提供了一些条目:
- From: 列出了一个基础容器。
- Run: 指定构建容器时要运行的命令。
- Copy: 告诉 Docker 将文件从 EC2 实例复制到容器中。
- Entrypoint: 指定容器实例化时运行的脚本。
我们将从 Ubuntu 环境开始,设置 Python 3,将我们的脚本复制到容器中,然后在实例化容器时启动脚本。我使用以下脚本测试了这个容器:
**# install git** sudo yum -y install git**# Clone the repo and build the docker image** git clone [https://github.com/bgweber/StartupDataScience](https://github.com/bgweber/StartupDataScience)
cd StartupDataScience/containers/echo/
sudo docker image build -t "echo_service" .**# list the docker images** sudo docker images
我在 EC2 实例上安装了 git,将代码从我的 repo 克隆到本地机器上,然后构建容器。运行 ps 命令会产生以下命令行输出:
Docker Images
我们现在有了一个可以运行的容器!要运行它,我们需要指定映像名称和标识容器端口(5000)和外部端口(80)的端口映射:
sudo docker run -d -p 80:5000 echo_service
sudo docker ps
关于暴露 EC2 端口的更多细节可在这里获得。当我运行上面的命令时,我得到了以下输出:
该输出表明 echo 服务现在作为一个容器运行,并作为一个端点向 web 公开。结果与之前完全相同,但不是将端口公开为 Flask 应用程序,而是将端口公开为运行 Flask 应用程序的 Docker 实例的映射端口。
**# web call** [http://ec2-18-204-206-75.compute-1.amazonaws.com/predict?msg=Hi_from_docker](http://ec2-18-204-206-75.compute-1.amazonaws.com/predict?msg=Hi_from_docker)**# result** {"response":"Hi_from_docker","success":true}
在功能上,初始设置和停靠设置之间的 API 调用是相似的。关键区别在于,dockerized 设置使用容器范围的 python 库,而直接 flask 设置依赖于系统范围的 python 库。用容器方法在一个新的实例上建立这个服务是微不足道的,但是如果不使用 Docker,在一台新机器上复制这个服务可能就不那么容易了。
托管复杂模型
在使用复杂的库时,Docker 的威力更加明显。在本节中,我们将在本地训练一个 Keras 模型,然后将其部署为一个容器。为了在本地训练模型,我们需要安装几个库:
**# Deep Learning setup** pip3 install --user tensorflow
pip3 install --user keras
pip3 install --user pandas
接下来,我们将通过在本地运行 Python 脚本来训练模型。这个脚本的输出是一个我们希望作为端点托管的 h5 模型。更多关于训练代码的细节可以在这里找到。
因为我们已经在主机 EC2 实例上安装了必要的库,所以我们可以使用以下命令构建模型文件:
python3 train_model.py
结果是一个games.h5
模型,我们希望将它包含在我们的预测容器中。虽然我们可以将这一步打包到 Docker 设置中,但是在第一次设置 Docker 工作流时,将这些步骤分开会更容易。
现在我们有了模型规范,我们可以将深度学习模型作为 Flask 应用程序托管,作为 Docker 容器管理。下面的代码显示了如何设置 Flask 应用程序来服务于该模型,并且没有修改您之前关于使用 Flask 托管深度学习模型的帖子:
下一步是指定 Dockerfile,它在构建容器时接收代码和模型。下面的脚本显示,我们已经添加了几个库,并且还将一个模型文件从本地机器复制到 docker 映像,这意味着它可以在提供预测时使用:
FROM ubuntu:latest
MAINTAINER Ben WeberRUN apt-get update \
&& apt-get install -y python3-pip python3-dev \
&& cd /usr/local/bin \
&& ln -s /usr/bin/python3 python \
&& pip3 install tensorflow \
&& pip3 install keras \
&& pip3 install pandas \
&& pip3 install flask COPY games.h5 games.h5
COPY keras_app.py keras_app.pyENTRYPOINT ["python3","keras_app.py"]
下面的命令行说明显示了如何将这个 docker 文件转换为一个容器,我们可以使用它来托管深度学习模型:
**# Clone the repo and build the docker image** git clone [https://github.com/bgweber/StartupDataScience](https://github.com/bgweber/StartupDataScience)
cd StartupDataScience/containers/model/
sudo docker image build -t "model_service" .**# Expose a model endpoint**
sudo docker run -d -p 80:5000 model_service
运行该容器的结果是,我们现在有了一个深度学习模型,该模型作为 Flask 端点公开,我们可以向其传递参数以获得预测。下面的代码块显示了我如何测试这个接口以获得一个预测结果。
**# web call** [http://ec2-18-204-206-75.compute-1.amazonaws.com/predict?g1=1&g2=0&g3=0&g4=0&g5=0&g6=0&g7=0&g8=0&g9=0&g10=0](http://ec2-18-204-206-75.compute-1.amazonaws.com/predict?g1=1&g2=0&g3=0&g4=0&g5=0&g6=0&g7=0&g8=0&g9=0&g10=0)**# result** {"prediction":"2.160104e-16","success":true}
所有这些工作的结果是,我们在 Docker 容器中包装了一个 Keras 模型,但是维护了 Flask 接口以将模型作为 web 上的端点公开。与我在 Flask 上发表的第一篇文章的主要区别在于,该模型现在是在容器范围的环境中定义的,而不是在 EC2 范围的环境中定义的,并且在新机器上设置该模型是很简单的。除了设计可以在容器中工作的模型,急切地瞄准 Docker 和云工具意味着数据科学家项目更容易在整个组织中共享使用。
结论
数据科学家应该能够创作超出其本地工作空间的模型和数据工作流。Docker 之类的容器环境是实现这一目标的一种方式,熟悉这些类型的工具有助于利用诸如将基础设施指定为代码之类的技能来构建您的投资组合。这篇文章展示了如何使用 Docker 将 Keras 模型作为一个 webpoint,但只是对这些工具支持的可重复研究能力的一瞥。
本·韦伯是 Zynga 的杰出数据科学家,也是 T2 恶作剧公司的顾问。
我们其他人的数据科学
原文:https://towardsdatascience.com/data-science-for-the-rest-of-us-d69e9949b0f0?source=collection_archive---------13-----------------------
或者为什么小公司和新公司的数据科学家应该特别关注非技术性工作
Photo by Samuel Zeller on Unsplash
几天前,我读了 Randy Au 的 Medium story“在小公司/初创公司中成功成为数据科学家”,正如我在 Randy 文章的评论中所写的,我立即感觉到他触及了一个需要数据科学界给予更多关注的主题。让我把它全部大写,这样我可以强调这一点的重要性:我们大多数人都不在谷歌工作。
当然,我并不是说在谷歌工作有什么不好(也不是说我怨恨什么),当我说谷歌时,我真正的意思是“一家拥有大量数据、大规模基础设施和成熟的数据驱动文化的公司。”我想象在这些公司中的一家工作就像一种数据科学天堂,当你早上打开工作站时,你跳到一张柔软的毯子上,平稳地处理一系列定义明确的问题,具有无尽内存和 GPU 的服务器,以及迫不及待地祝贺你在运行 BERT 网络方面所做的惊人工作的支持性老板,这使公司在午餐时间又赚了 100 万美元。好吧,我可能有点忘乎所以,不知道在这个特定的数字鸿沟的另一边生活是什么样的,但我想说的是,所有关于“数据科学家”是 21 世纪最性感的工作的谈论,以及所有关于最新机器学习技术的宣传,确实投射了一个与战壕中的生活不相符的数据科学家的形象。
当然,我们不厌其烦地重复数据科学家将大部分时间花在清理数据上,我们开始听到一些声音说,在数据科学的工作环境中,并不是所有东西都是绿色的(我听说维基·博伊基斯最近的文章已经让不止一名即将毕业的训练营学生患了轻微的心脏病)。然而,当我们看到那些正在考虑从事数据科学职业的人可以获得的资源,特别是许多提供工作保证的教育初创公司推出的营销时,我们很难不认为数据科学是一条迷人的职业道路,它将允许你凭借自己磨练好的数学技能走向成功和财富的未来。
现在,不要误会我的意思:数据科学确实提供了惊人的机会,如果我卑微的经历中的 n=1 可以作为证据,这是一份充满兴奋和智力刺激的美妙工作(我会在任何一天接受它,而不是我作为大学教授的旧工作)。然而,我相信大多数进入该领域的人都不知道在成千上万的小型和新组织中进行数据科学涉及到什么,这些组织希望加入数据科学的行列,并在不清楚他们希望我们做什么的情况下扣动雇用数据科学家的扳机。因此,Randy 文章的重要性以及为什么我决定借鉴他的成果并分享我对此事的看法:与其再写一篇关于逻辑回归的教程,不如让我们告诉那些正在考虑从事数据科学工作的人我们生活中不光彩的部分,这样他们就不会感到被欺骗,也不会知道他们将面临什么。
我计划写一个关于未来在小公司和创业公司进行数据科学的挑战的完整系列,但今天我想专注于我认为数据科学工作的基石:帮助建立一种将严格的数据分析置于所有决策中心的组织文化。现在,阅读这篇文章可能会让你精神紧张,但并不是所有的公司都认同数据的作用。更多的是:许多公司认为他们是数据驱动的,而事实上他们对数据的使用是不稳定和不一致的。是的:他们正在雇佣数据科学家。
我提到这一点的原因并不是要痛斥和羞辱这些公司,恰恰相反。我想说的是,数据科学家应该把做这些公司需要的事情视为我们工作的核心部分,而不是解雇这些公司并在其他地方寻找工作。一家拥有健康数据文化的成熟公司会确切地知道自己需要什么,并雇佣某人来做具体的工作(提示关于不同类型的数据科学家的 2 、 3 、 5 、 7 或 10 的越来越多的文献)。但是许多组织还没有达到这一步,为他们工作的数据科学家不可能把所有的时间都花在构建超激动人心的十亿层人工神经网络上。通常,不仅数据或基础架构不存在,甚至预期或感知的需求也不存在。当没有人真正关心 X 公司的数据时,我们新的数据科学家会做什么?以下是我认为她应该做的事情(当然不完整):
- 一直要求数据,比如,不断地:可能有很多有才能的人知道他们在组织中的工作,但他们充其量从未想过系统地使用数据来为他们的决策提供信息,或者在最坏的情况下,对告诉他们如何工作的任何人都充满敌意。请不要骄傲自大,表现得趾高气扬,因为你知道这里有什么梯度推进机。收集你能得到的任何数据,要求人们记录他们做的事情,即使是在随机的电子表格中,以有利于分析的方式放置,并试图收集将改善公司工作方式的见解。以一种谦逊的、建设性的、非威胁性的方式展示它们,人们最终会开始使用它们。然后你会被大量的求助信息淹没,你再也不会离开办公桌去吃午饭了。
- 一直问问题:通常,人们不知道他们不知道的事情,通过问问题,对新的和/或系统的数据的需求就会出现。这也将为您提供数据科学家真正高效所需的领域知识。如果你不明白什么样的特征是相关的,什么是重要的预测以及为什么,你的随机森林将不会有很大的帮助。您需要了解业务及其需求,以便考虑度量和测量,并且您将影响其工作的人需要将您视为了解他们所面临的挑战的人。当你的问题没有明确的答案时,你将有机会推动数据收集、系统化和分析。
- 一直问为什么:很多时候,事情都是以某种方式完成的,因为事情一直都是这样做的。有些时候,当前的工作流程背后有一个很好的理由。其他人,很好的理由是过去的方式,它不再是一个相关的因素。还有一些时候根本没有理由,现状只是特别的决定和意外收获的固化结果。学会识别哪些地方没有做事情的好理由,哪些地方需要用数据对问题进行深入探讨。如果你能为改变过程建立一个好的案例(例如,一个能给组织带来切实利益的案例),人们会开始看到你的方法的优点,并更有可能接受它。
- 一直寻求帮助:前面几点的目标是帮助你的组织发展一种数据文化。如果你孤立地工作,只是偶尔从你的洞穴中出来向其他人展示你有多聪明,你不仅会完成得更少,几乎没有实际影响,而且人们会带着明显的敌意看你(可能会从冰箱里偷你的酸奶)。这一次,你肯定会错过重要的东西,这将使你很容易放弃你的工作。但更重要的是,人们需要看到你在他们认为相关的问题上与他们一起工作。所以你才会找他们要数据,问他们问题。如果那些将被你的工作产品影响的人对它有一种主人翁感,他们更有可能参与并采纳它。
- 寻求机会分享你一直以来的发现:你可能听说过沟通是数据分析的核心(如果没有人理解你为什么使用它或它的作用,你的新算法有什么意义?),但是我不能过分强调交流你所学到的东西的重要性。注意,我说的是“你学到了什么”,而不是“你做了什么”没有人关心支持向量机做什么,我所说的交流与你工作的技术方面没有什么关系。你对反向传播的美妙如此兴奋,这很好,但你公司的人想知道如何解决和改善他们每天在销售、生产、营销、客户关系或你甚至不知道存在的任何其他组织领域中处理的问题。与人交谈不仅是为了向他们学习,也是为了弄清楚与他们谈论你的职业及其重要性的最佳方式是什么。不要理所当然地认为每个人都想听你发表意见,因为你有一个梅蒂斯结业证书钉在你的隔间墙上。参与双向对话,用他们自己的方式展示你所做的对他人是多么有用。**
所有这些观点听起来可能并不迷人,对一些人来说甚至听起来像是常识。但我还是要看到教授这些概念的学校,或者试图评估相关技能的面试官。让我再次强调:我不是说技术技能不重要,在许多工作中,它们可能是数据科学家最重要的资产。但在许多情况下,你的非技术技能将是你成功的更好预测,无论是个人还是对组织的影响。更重要的是,一旦数据、基础设施和对分析的需求到位并得到很好的确立,你的软技能和你对公司文化的影响可能是你在未来做有趣的事情的唯一方式。
我希望你也敏锐地察觉到我的微妙暗示,并看到我在上面提倡的所有“要求”都需要伴随着某种态度,这种态度结合了谦逊和真诚参与。在公司中,学习是一个集体过程,数据科学家的主要角色是通过使用公司能够收集、处理和利用的所有数据来帮助公司学习和改进。你无法独自做到这一点,了解你在企业文化中的位置以及你如何对其产生有意义的影响是数据科学家可以带来的最重要的软技能之一。
天气预报的数据科学:如何证明一个有趣的理论
原文:https://towardsdatascience.com/data-science-for-weather-forecast-how-to-prove-a-funny-theory-f005ea2d1efe?source=collection_archive---------16-----------------------
The USA during a heat wave
我们要做什么?
在描述这个实验是关于什么的之前,我需要给你一些背景。我的同事 Aouss Sbai(本文的合著者)和我正在寻找一个有趣的项目。所以我们问我们的导师普拉门·内德尔切夫(思科杰出的工程师)他是否有什么股票,他和我们分享了他对加州圣何塞天气的理论。他告诉我们,他能够仅仅根据 5 月 19 日、20 日和 21 日的温度来预测夏天是否会热。他要求我们证明这一点。
你没看错,根据 3 天预测 3 个月的平均天气。坦率地说,我们并不真正相信它,并以极大的怀疑态度对待这项任务。然而,我们开始尝试去理解我们如何去证明这样一个原始的陈述。
数据收集
第一个障碍
在任何数据科学问题中,任何事情的出发点都是数据。
我们到底想要什么数据?记住我们的目标:预测圣何塞市 5 月 3 天(19 日、20 日和 21 日)的平均夏季温度。
所以我们开始寻找历史温度数据的数据库或档案。你猜怎么着?对我们来说,没有一个是足够完整或简单的😬。我们找到的唯一信息来源是一个网站,旧农民年鉴,它列出了自 1945 年以来每天的平均气温。太棒了,任务完成了!嗯,不完全是…
the old farmer’s Almanac
这是 2019 年 3 月 23 日对应的页面。我们可以得到平均温度,这正是我们所需要的。但是当计算 1945 年以来每年夏季的平均温度时,这就变得繁琐得多了(~4500 天)。我们没有办法每天访问不同的页面,并手动在 excel 表格中收集这些数据…
所以我们决定自动化这项任务,并为它编写一个脚本!🤖
使用 web 抓取脚本实现自动化
基本上,这个想法是脚本独立地访问每个页面并寻找我们想要的数据,计算夏季的平均温度,捕捉五月三天的温度,并从 1945 年开始每年重复这个过程。但是我们到底该怎么做呢?
这是你刚才在上面看到的页面的 URL。正如你所看到的,它在 URL 中指定了你想要访问的城市和日期。因此,我们可以告诉脚本,对于我们感兴趣的每一天,要访问哪个 URL。但是另一个问题来了。一旦脚本出现在页面上,它如何检测我们想要的温度呢?
你可能知道,每个网页都是以 HTML 格式编写的,这意味着你在屏幕上看到的每个元素都属于一个特定的 HTML 标签。幸运的是,该网站的每个页面都是以完全相同的方式构建的。因此,我们需要做的唯一事情是识别哪个 HTML 标签存储了日平均温度,并告诉脚本获取该特定值。(感兴趣的,我们用了 python 库美汤)
然后,该脚本能够为我们做所有令人讨厌的计算,并返回每年的夏季平均温度和 5 月 3 天的个别温度,所有这些都打包在一个漂亮的 Excel 表中📝。
what our dataset looks like now (temperatures are in Fahrenheit). The first 3 columns are the 3 days of May, and the last one is the average summer temperature
但是(总有一个“但是”),这还不够。事实上,仔细想想,我们 Excel 表格中的每一行都代表 1 年(夏季的平均温度+5 月的 3 天)。所以,即使我们回到 1945 年,那也只代表了 73 条线…这是太少的数据,无法假装做任何可靠的分析或预测(几百条会好得多)。因此,我们决定对圣何塞周围的北加州其他 4 个城市重复完全相同的过程,这些城市受到相同类型的天气影响,但距离足够远,没有多余的数据(以旧金山为例,它靠近海边,会使一切都有偏差,而以圣何塞郊区的米尔皮塔斯为例,不会添加任何相关数据)。我们现在有 370 次测量,这并不理想,但足以开始做一些分析。
开始分析吧!
数据转换
现在,让我们尝试简化数据集,使其更易于分析。
首先,我们将 Excel 文件数据放入 Alteryx ,这是一个创建端到端数据管道的数据科学工具。这将有助于我们在整个实验过程中准备和分析数据。
Ingested Data: we decided to add 2 columns which indicated the city and the year of the measurement
我们的目标是使用 Tableau 可视化数据,这是最常用的商业智能(BI)工具之一。因此,我们需要将数据转换成 Tableau 可以轻松有效地使用的格式。值得一提的是,我们以一种已经结构化的格式收集数据,因此,只需要很少的数据清理。我们只是重新排序和重新格式化了一些列,并检查没有空值。
the end-to-end data transformation pipeline
上图总结了 Alteryx 转换数据的所有步骤。如您所见,第一步和最后一步只是数据导入/导出。第二个和第四个修改了数据格式,使其更容易处理。但是这个过程的第三步是什么呢?
我们注意到,5 月 19 日、20 日和 21 日的温度在所有城市和年份中都非常相似,因此我们决定通过计算它们的平均值来合并它们,从而减少要素的数量。事实上,通过结合它们,我们能够直接比较这三天的温度和夏天的温度。
Our dataset after data transformation
请注意,有不同的解决方案来转换数据(脚本、Excel……)。我们选择使用 Alteryx 是因为我们熟悉这个工具,我们知道我们可以非常及时地完成这项工作。事实上,我们希望最大限度地减少准备数据的时间,以便最大限度地增加分析数据和解决问题的时间。
实际分析(这次是真的😇)
现在,我们将带您逐步了解我们用来探索和分析数据的方法,并最终得出具有统计学意义的结论:
The initial graph
我们首先创建一个散点图,以了解这两个变量之间的关系。提醒一下,我们的目标是表明 5 月 19 日、20 日和 21 日的温度是预测夏季温度的良好指标。
通过查看该图,两个变量之间似乎存在正线性关系:随着这三天的温度升高,夏季的温度也升高。
这就引出了一个问题:我们如何证明这种关系?📝
这就是回归分析的用武之地。这是一种统计方法,可以用来研究两个连续变量之间的关系。
我们使用的一个非常简单的回归分析模型是线性模型,它使用一个简单的线性方程来拟合数据。我们使用这种方法是因为它解释起来相对简单,并且受到 Tableau 的支持。
Linear regression
我们绘制的趋势线实际上向我们展示了这组点似乎遵循的大致方向。我们现在可以确认两个变量之间存在正的线性关系:随着三天温度的升高,夏天的温度也随之升高。
对于阅读本文的更懂统计的人来说,我们甚至可以使用描述我们的线性模型的一些度量来展示这种关系:
- r 平方= 0.29 仅仅表明夏季温度变化的 29%可以用 3 天的温度来解释
- p 值< 0.0001 仅仅表明模型是显著的,结果是可靠的
因此,这些结果清楚地表明,3 天(5 月 19 日、20 日和 21 日)的温度与夏季的温度之间存在相关性。虽然这些结果已经很有趣了,但是有没有可能提高模型的意义呢?
Disparity in the data
看起来数据被分成两大块(如图中突出显示的),这肯定会影响线的拟合。有可能解释数据中的这种差异吗?
请记住,数据集包括圣何塞周围均匀分布的不同城市的温度。那么,让我们看看如果我们按城市给数据点着色会发生什么。
Here is the link to the dashboard if you want to play with the dashboard 📊
这张图表清楚地表明,即使城市受到相同类型天气的影响,结果也会因城市而异。事实上,位于北部的萨克拉门托和圣何塞比更靠南的弗雷斯诺和贝克斯菲尔德更冷。我们还可以注意到,与圣何塞相比,贝克斯菲尔德、弗雷斯诺和雷丁的夏季温度几乎没有变化,圣何塞的数据点似乎遵循积极的趋势线。
因此,单独分析每个城市这两个变量之间的关系更有意义。
通过为每个城市拟合一个模型,我们认识到,在萨克拉门托、雷丁、弗雷斯诺和贝克斯菲尔德的情况下,这两个变量之间显然没有关系。这在统计学上由接近 0 的 R 平方值和高于 0.70 的 P 值证明。
Redding trend line (similar to Sacramento, Fresno and Bakersfield)
然而,我们可以看到,在圣何塞的情况下,两个变量之间存在相关性(R 平方= 0.316,P 值< 0.0001)。请注意,这一次,夏季温度变化的 31.6%可以用 3 天的平均温度来解释。
San Jose trend line
那么结论是什么?
结果显示了 3 天(5 月 19 日、20 日和 21 日)的温度与夏季温度之间的相关性,置信度为 99.99%(p 值< 0.0001)。然而,这一理论只适用于圣何塞市,这是非常令人惊讶的,因为所有这些城市都在加利福尼亚州,因此应该显示类似的温度趋势。
既然我们已经完成了艰苦的工作,看看我们的理论是否在今年得到证实肯定会很有趣👨🔬。我们将把我们的线性模型应用于 2019 年的数据,看看它是否能正确预测夏季的平均温度。虽然结果肯定不会非常准确,但它仍将是一个很好的指标,表明夏天是否会热。
在未来,我们希望通过研究可能解释这一现象的其他因素来加强这一分析,并通过使用不同的分析方法来改进我们的模型。
数据科学基础:了解你的数据。真的,真的,知道吗
原文:https://towardsdatascience.com/data-science-foundations-know-your-data-really-really-know-it-a6bb97eb991c?source=collection_archive---------9-----------------------
了解你的数据,它来自哪里,里面有什么,意味着什么。一切都从那里开始。
如果有一条建议是我一直给每一个刚起步的数据人的,不管他们是要成为分析师、科学家还是可视化专家,那就是这条。
直到现在,我大部分时间都在这座山上度过,到了痴迷的程度。这是一个沉睡但非常重要的兔子洞。
但是为什么呢?
我不认为我见过一个真正的从业者相信熟悉一个数据集和周围的系统是可选的,但这是不熟悉该领域的人在涉足该领域时会想到的事情。
https://xkcd.com/1831/
生活不是一次偶然的周末旅行。向您的工作数据扔一个随机森林就像向您的数据库服务器扔一个盆景一样有效。它会损坏您的服务器,并让您到处清理污垢。
你在商界的同事,尽管不是数据人员,但也不是任何类型的白痴(希望如此)。他们是领域专家,非常了解这个行业。不要做一个初级分析师,在向首席执行官展示一个辉煌的新发现时,被问及“那么,你有没有拿出我们的 3 个特别大的合同客户?”,没有好下场。相信我。
“了解你的数据”是什么意思?
这有许多层面。我将详细介绍每一层。你也可以和我一起重温过去每一层的创伤。
The onion of data knowledge. Things get hazier and more complex as you go out.
最简单的一层是了解数据布局——它在哪里,它是如何组织的。在数据科学环境中,这通常是在数据库或日志归档中,可能是一些第三方服务和其中定义的模式。有多少数据存储,它们包含什么?什么是字段,什么是表模式和关系。基本结构和定义的东西。
接下来是个别数据中的怪癖和陷阱。数据实际上是否遵循模式,是否有任何奇怪的历史错误和工件?哪里有陷阱(总是有陷阱)。
然后是关于数据的业务问题。内部测试账户、有特殊交易的特殊合作关系、要求特定实施的处理、会计和安全实践等。
另一个更深层次的问题是,这些数据是如何收集的,从何而来。是什么系统产生的,创作和记录的背后是什么逻辑和技术。
最后,询问为什么收集了数据片段,以及什么没有收集,事情变得非常棘手。为什么选择某些指标而不是其他指标。
这个过程通常需要多长时间?
视情况而定
我通常预计每天查询和使用数据集大约需要 3-6 个月的时间,然后我才能放心地说我了解一个系统的基本原理,这个系统大约有十几个关键核心表+几十个支持表。中型公司/系统级的东西。
显然,这也取决于有多少数据,有多少系统等。要“掌握”一个系统可能需要数年时间,结果却是人们在你的领导下不断地改变这个系统。
#1 了解数据布局
这基本上是知道什么是可用的桌面赌注。你必须知道这一点才能开始工作。
但是再深入一点,你会发现其中有很多细微的差别。有外键约束吗?数据库的设置类似于 OLTP 还是 OLAP?随着时间的推移,数据结构是否发生了很大变化,这些迁移和更新进行得如何?默认的文本编码和时区是什么?(听着,曾经有一段时间 UTF-8 不是默认的。)
哪些字段是自动生成的(自动递增字段、分片方案、自动更新的时间戳等)。表格上的相关索引是什么。什么是数据类型,一切是如何实施的。(我在一个大的 MySQL 和一个巨大的日志环境中呆了几年,这是一个很大的问题。)
当您拥有更复杂的生产环境时,事情会变得更加有趣。数据库的东西在这里,原始日志在那里,处理过的日志在这里,第三方工具使用另一种东西,Hadoop 存在于另一套机器上,我们在云中也有东西?你真的有足够的资格去接触这些东西吗?它们运行在同一时钟上吗?你到底要怎么把这些东西连接起来?你打算在什么系统上把这些东西连接在一起?你会疯了吗?(提示:大概)
为什么这一层对你很重要
你需要熟悉所有这些东西才能胜任你的工作。就像知道厨房里所有的食材在哪里一样。在一些组织中,协商访问权可能是一场彻头彻尾的噩梦,然后您必须将所有东西整理到一个可以工作的地方。
在更深的层次上,通常有多种方法来衡量某些东西:销售可能记录在数据仓库中,但也可能记录在基本订单表中,并且它会在原始服务器日志中留下痕迹。中间有多层处理,这些细节可能有一天会很重要。
#2 了解您的数据记录
当我访问一个数据表时,我做的第一件事就是在上面运行一个 SELECT * LIMIT 5 。我通常懒得做描述。查看一些实际的行会提供更多的信息。
玩数据玩久了,你会发现奇怪的事情,甚至在关系数据库的结构化世界里,你也会发现各种各样的怪癖。任意日志中的事情变得更加疯狂。我更难忘的一些真实发生的例子包括:
- 空值只是在你最不怀疑的时候随机出现,如果一个字段没有被硬编码为非空,我现在希望找到空值
- 整数被用作存储偏好标志的位掩码,因为 Eng 上有人认为这样会更好更紧凑。SQL 中的按位运算是一种额外的乐趣。进行了讨论
- 多种时间戳风格:带/不带 tz 的字符串 ISO、64 位整数的微秒精确 unixtimes、使用内部类型的实际时间戳
- JSON 存储为明文,因为 db 还不支持 JSON
- 截断 JSON,因为我们忘记了文本字段的长度是有限的
- 在核心收入表上,系统中不应该出现重复的 ID 条目
- 错误的文本编码
- 意外\t,\n,\r,\c 用户代理字符串中的字符堵塞了 csv 管道
- 某个混蛋设法在一个东西里放了 0 英镑
- 因为 Eng 不想因停机而运行 ALTER,字段名被重新用于完全不同的用途。(你知道你是谁,“logo”字段)
- 政府 COBOL 代码的数据转储到某个大型机上
- 孤儿 id,因为没有人真正在 prod 中使用外键约束
- 所有你能想象到的乐趣,甚至更多你想象不到的
处理这一层
这一层完全疯狂,这就是为什么大多数数据从业者似乎把大部分时间花在清理和准备数据上。在引入错误数据的 bug、恶意/天真的用户给你奇怪的数据以及偶尔的糟糕系统设计之间,这个列表没有尽头。
我们甚至还没有考虑到如果你浏览网页,或者从 PDF 或“格式精美的 Excel 表格”中提取数据会发生什么。
事实上,我对初级数据科学家的定义是,不会因为在互联网上放置一个开放的文本框而强烈退缩的人。
这些数据问题中的大多数可能会导致您编写的任何分析代码崩溃。这通常是件好事。如果你运气好(运气不好?)即使输入了奇怪的数据,你的代码也会运行,这会使你得出的任何结论无效,你需要及时意识到发生了什么。
当你有疑问时,当你看到奇怪的数据时,问问其他人。这通常是一个应该修复的错误。
#3 了解业务数据怪癖
企业经常会收集一些奇怪的特例,这些特例比 ID 字段中的随机空值更容易使你出错。
它们是危险的,因为它们表现为有效的数据点,但它们的行为大相径庭。
我见过的例子包括:
- 内部用户,供测试、员工或“业务朋友”使用。他们使用的东西可能和其他人不同
- 战略合作伙伴,也许他们有大得多的配额和活动,并以折扣计费,或者他们很早就获得功能
- 在一个账户下有效控制 50 个账户交易的经销商账户
- 一般的日历。国定假日会弄乱你的数据,月份长度会弄乱你的汇总。我对复活节有一种强烈的厌恶,纯粹是因为它每年都是不同的日期,并且一年两次进行循环比较
这一层怎么处理
整个企业的领域专家和合作伙伴是处理这类数据的关键。所有这些都是你需要挖掘的机构知识的一部分,以便理解你看到的数据。
你唯一的另一个防护栏是对活动和用户的分布保持警惕。这些特例条目往往以某种方式从一个更典型的客户中脱颖而出,因此您可以将它们视为一个大的异常值,然后进行部分纠正。
#4 了解数据来自哪里,如何生成和定义
在科学领域,我们应该一丝不苟地记录数据是如何收集和处理的,因为收集过程的细节很重要。基于数据收集和使用方式存在缺陷的事实,数以吨计的研究被宣布无效。在我们的例子中,技术实现非常重要,所以拿出你的工程师帽子。
你依赖饼干吗?这意味着人们可以清除它们,阻止它们,或者它们由于 TTL 短而过期。人们使用多种浏览器和设备。一个简单的例子是:“独特的 cookie”和“独特的人类用户”是不同的,把这两者混为一谈,你就要倒霉了。
你是否使用前端 JavaScript 将点击和滚动等事件发送回你的系统?它能在所有的浏览器上工作吗?有时候,记住人们会阻止 javascript,而机器人很少运行 JS。什么是主场比赛?什么机器记录时间?事件是在我们关心的 API 调用之前还是之后触发的?
如果数据库中的东西被跟踪,那么什么时候更新?是不是都包装在一个交易里?状态标志是单调变化还是来回自由变化?决定状态变化的业务逻辑是什么?有可能得到重复的条目吗?
你的 A/B 测试框架是如何分配受试者的,真的是无偏见的随机分配变体吗?事件计数是否正确?
地理空间数据?体验大都市地区的定义,处理邮政编码。纽约皇后县是一堆小名字的集合。
IP 数据?请记住动态 IP、NAT 和 VPN,以及它们如何与移动设备交互。此外,地理位置只是一些供应商提供的非常复杂的查找表。
物理传感器?现在,校准和磨损效应、故障和真实世界的环境都在困扰着你。
管理该层
如你所见,具体细节非常重要。此时,您正在检查数据背后的逻辑的完整性。你需要对数据中存在的无数偏见和错误保持高度警觉,这样你才能确切地知道你能合理地说多少。这些细节往往会决定一个模型的成败。所有关于人工智能/人工智能偏见的讨论都从这里开始。
领域专家会寻找这些细节,你应该利用他们宝贵的知识。在这方面,很难胜过集体的机构知识。
您可以通过仔细检查您的数据、检查分布、询问为什么它们看起来是那样来帮助自己发现这些问题。
随着时间的推移,您应该能够通过查看数据表的结构和数据来了解工程师们试图完成的任务。这是一个交易日志,这是一个设置更改的审计跟踪,订单在这里,可以在那里有多次发货。状态代码以这种方式更新,一个进展顺序得到保证,但另一个没有保证。
有了对表的意图的这种认识,您可以发现各种有趣的错误,而许多其他工程师不会注意到。
#5 了解正在做出的收集决策
一直以来,我都在谈论被收集的数据。还有一个很大的缺口,所有的东西还没有被收集。
有人有意识或无意识地选择收集一部分数据,而不是另一部分。如果您担心数据和模型中的偏差,了解这些盲点非常重要。
这些决定通常源于实际考虑。有些东西是不可能收集的,或者我们出于隐私或道德原因决定不收集,或者因为我们认为它不会有用。这很少是出于公开的恶意,但误用数据的后果可能是灾难性的。
例如,我们只能收集自己用户的数据,因为根据定义,非用户不会使用我们的产品。这里有自我选择的偏见,这在你开发新产品或进入新市场时会带来麻烦。商界充斥着进入新市场不佳者的尸体。然后是算法产生的所有极其令人不安的结果种族主义 结果以非常可疑的方式使用。
如果你意识到盲点,你可以积极地采取措施来克服它,但前提是你知道问题是从哪里开始的。也许你出去收集更多的数据,或者重新平衡现有的数据。有时候你只需要得出结论,某样东西是一个可怕的想法,它应该被废弃。
不是我们做的每件事都有争议,但我们都用算法来挑选赢家和输家。我们必须认真对待这一责任。
不断学习
你永远不会有完美的数据,也不会对你所有的数据有完美的理解。就在你认为你已经掌握了一些东西的时候,一个新的特性被添加了,标准被改变了,系统被淘汰了。继续学习,记录你所能做的,为你的分析留下书面记录,然后继续前进。
数据科学基础— A/B 测试
原文:https://towardsdatascience.com/data-science-fundamentals-a-b-testing-cb371ceecc27?source=collection_archive---------4-----------------------
我们用一个简单的例子来探究 A/B 测试的来龙去脉
现在数据科学训练营(Metis)已经结束,是时候为面试做准备了。自从我开始写博客,我发现写下一个概念并试图教给读者迫使我更深入地学习这个概念。
因此,在接下来的几周内,我将逐一查看每个数据科学家和有抱负的数据科学家(像我一样)应该拥有的所有核心工具,以便我们都能在面试中胜出(手指交叉)!现在进入今天的话题!
(如果你对我在这次分析中使用的代码感兴趣,你可以在我的 GitHub 上找到它 )
伪装的假设检验
Photo by it’s me neosiam from Pexels
如果你有统计学背景,在某些时候你可能会想,“A/B 测试和假设测试是一回事吗”?是的,它是!因此,让我们通过一个简单的例子来探究假设检验是如何工作的,从而弄清楚 A/B 检验。
想象一下,我们的客户,一个非常成功的个人理财应用的所有者,带着以下问题来找我们:
“托尼,我们重新设计的新应用程序旨在帮助人们增加储蓄。但这真的有用吗?请帮助我们解决这个问题,以便我们决定是否部署它。”
所以我们的工作是弄清楚人们是否会因为新的应用程序设计而存更多的钱。首先,我们需要弄清楚我们是否有我们需要的数据。我们会问,“你已经收集了哪些可能有帮助的数据?”
原来我们的客户已经进行了一项实验并收集了一些数据:
- 六个月前,我们的客户随机选择了 1000 名新注册的用户,并将其中 500 人分配到控制组,500 人分配到实验组。
- 对照组继续使用当前的应用程序。
- 与此同时,实验组接触了重新设计的应用程序。
- 所有用户开始时的储蓄率都是 0%。
- 这 1000 名用户仅占该应用总用户的一小部分。
六个月后,我们的客户记录了实验中所有 1000 名用户的储蓄率。储蓄率是每个用户每月工资中储蓄的百分比。她发现了以下情况:
- 对照组的平均储蓄率从 0%上升到 12%,标准差为 5% 。
- 实验组的平均储蓄率从 0%上升到了 13%,标准差为 5%** 。**
我们的实验结果在绘制成柱状图时看起来是这样的:
Histogram of Control and Experimental Group Savings Rates
六个月后,实验组的成员看起来确实比控制组的成员有更高的储蓄率。那么,仅仅画出这个直方图,给我们的客户看,然后就到此为止,就够了吗?
不,因为我们仍然不能确定我们观察到的储蓄增加是真实的。幸运的是,我们本可以通过这样一种方式对用户进行抽样调查,即那些想要存更多钱的人最终都进入了实验组。为了解决这一问题,我们需要提出以下问题:
我们从随机机会中得到我们观察到的结果的可能性有多大?
回答这个问题是假设检验(也是一个 A/B 检验)的关键。
无效假设
想象一下,在现实中,新的应用程序设计并没有帮助用户节省更多。然而,即使新设计是无用的,当我们进行实验时,仍然有可能观察到储蓄率的增加。
Photo by San Fermin Pamplona from Pexels
怎么会这样呢?这可能发生,因为我们正在取样。例如,如果我从成千上万的人群中随机挑选 100 人,并计算他们的平均身高,我可能会得到大约 5 英尺 8 英寸。如果我再做几次,下一次我可能会得到 5 英尺 10 英寸,下一次可能会得到 5 英尺 7 英寸。
因为我们是使用样本而不是整个人口来计算我们的统计数据,所以每个样本都意味着我们计算的数据会有所不同。
知道了采样会导致变异,我们可以将上面的问题重新组织成以下问题:
如果新的应用程序设计真的对人们的储蓄没有影响,那么观察到储蓄像我们从随机机会中观察到的那样大幅增加的概率有多大?
正式地说,我们的零假设是——对照组储蓄率的增加等于实验组储蓄率的增加。
我们现在的工作是检验零假设。我们可以通过一个概率思维实验来实现。
一遍又一遍地模拟实验
想象一下,我们可以一次又一次地轻松即时地运行我们的实验。此外,我们仍处于平行世界,新的应用程序设计毫无用处,对用户的储蓄没有任何影响。我们会观察到什么?
出于好奇,我们在这里模拟一下:
- 抽取 500 个(我们的控制组中有 500 个用户,我们的实验组中有另外 500 个用户)与我们的控制组具有相同统计特征的两个正态分布随机变量中的每一个(平均值= 12%,标准偏差= 5%)。这些将是我们的控制组和实验组(同样的意思,因为我们在我们的新设计没有效果的世界里)。这里使用泊松分布的随机变量在技术上更正确,但是为了简单起见,我们使用正态分布的。
- 记录各组之间平均储蓄的差异(即我们从实验组的平均储蓄中减去对照组的平均储蓄)。
- 这样做一万次。
- 绘制各组间平均节省差异的直方图。
当我们这样做时,我们得到下面的直方图。直方图显示了由于随机机会(由抽样驱动)不同组之间的平均储蓄率差异有多大。
红色垂直线显示了我们的客户进行实验时实际观察到的平均储蓄率差异(1%)。下面直方图中红线右侧的观察值百分比是我们要寻找的值——观察到随机机会节省 1%的可能性(我们在这里做一个单尾测试,因为这样更容易理解和形象化)。
Histogram Showing the Difference Between Group Means for 10,000 Simulations (Assuming New Design Has Zero Effect on Savings Rates)
在这种情况下,该值非常低——在我们运行的 10,000 次实验中,只有 9 次(假设新设计对节约没有影响),我们观察到组均值的差异为 1%或更大。
这意味着只有 0.09%的变化,观察到一个像我们一样高的值,由于随机的机会!
这 0.09%的几率就是我们的 p 值。“嗯?别再给我扔乱七八糟的术语了!”,你说。围绕假设检验(和 A/B 检验)肯定有很多统计术语,我们将把大部分留给维基百科来解释。
一如既往,我们的目标是对这些工具如何工作以及为什么工作有一个直观的理解——所以一般来说,我们会尽可能避免使用术语,而倾向于简单的解释。然而,p 值是一个关键的概念,在数据科学世界中你会遇到很多,所以我们必须面对它。p 值(我们在上述模拟中计算的 0.09%值)表示:
如果零假设为真,观察到我们所观察到的现象的概率。
因此,p 值是我们可以用来检验零假设是否成立的数字。根据它的定义,看起来我们想要尽可能低的 p 值—p 值越低,我们在实验中运气越好。在实践中,我们将设置一个 p 值临界值(称为 alpha ),低于该临界值时,我们将拒绝零假设,并得出结论:观察到的效果/影响很可能是真实的(具有统计显著性)。
现在,让我们探索一个统计属性,让我们快速计算 p 值。
中心极限定理
现在是谈论统计学的一个基本概念的好时机——**中心极限定理 指出,如果你将独立的随机变量相加,随着你对它们求和越来越多,它们的归一化和趋向于正态分布。即使随机变量本身不来自正态分布,中心极限定理仍然成立。**
翻译— 如果我们计算一组样本平均值(假设我们的观察值彼此独立,就像硬币的翻转是如何独立的),所有这些样本平均值的分布将是正态分布。
Q-Q Plot — The Red Line Denotes a Perfectly Normal Distribution
看看我们之前计算的平均差异直方图。看起来像正态分布,对吗?我们可以使用 Q-Q 图来验证正态性,该图将我们分布的分位数与参考分布(在本例中为正态分布)的分位数进行比较。如果我们的分布是正常的,它会紧紧贴着红色的 45 度线。的确如此,酷!
因此,当我们一遍又一遍地运行我们的储蓄实验时,这就是中心极限定理发挥作用的一个例子!
那么,为什么这很重要呢?
还记得我们之前是如何通过运行 10,000 次实验来测试零假设的吗?听起来是不是超级累?现实中,反复做实验既累又费钱。但是由于中心极限定理,我们不必这样做!
我们知道我们重复实验的分布是什么样的——正态分布,我们可以使用这一知识来统计推断我们 10,000 次实验的分布,而无需实际运行它们!
让我们回顾一下目前我们所知道的:
- 我们观察到对照组和实验组之间平均储蓄率有 1%的差异。我们想知道这是真正的差异还是仅仅是统计上的噪音。
- 我们知道我们需要对实验结果有所保留,因为我们只对客户总用户群的一小部分样本进行了实验。如果我们在新的样本上再做一次,结果就会改变。
- 由于我们担心实际上新的应用程序设计对储蓄没有影响,我们的零假设是控制组和实验组之间的均值差异为零。
- 从中心极限定理中我们知道,如果我们重复采样并进行新的实验,这些实验的结果(对照组和实验组之间观察到的平均差异)将具有正态分布。
- 根据统计学,我们知道当我们取两个独立随机变量的差时,结果的方差等于单个方差之和:
完成工作
不错!我们现在有了进行假设检验所需的一切。因此,让我们继续完成我们从客户那里收到的任务:
Same Histogram as Above (Pasted Again for Reference)
- 首先,在我们通过查看数据产生偏见之前,我们需要选择一个截断点,称为 alpha(如果我们计算的 p 值小于 alpha,我们拒绝零假设,并得出结论,新设计增加了储蓄率)。阿尔法值对应于我们发生假阳性的概率——当它实际上为真时拒绝零假设。0.05 在统计学家中是相当标准的,所以我们将采用它。
- 接下来,我们需要计算检验统计量。检验统计量是上面直方图的等值数字,它告诉我们观察值(1%)离零假设值(在我们的例子中为零)有多少标准差。我们可以这样计算:
- 标准差 是实验组平均储蓄率与对照组平均储蓄率之差的标准差。在上图中,标准误差由蓝色直方图的宽度表示。回想一下,两个随机变量之差的方差等于单个方差之和(标准差是方差的平方根)。我们可以利用已有的信息轻松计算出标准误差:
- 记住,控制组和实验组的储蓄率都有 5%的标准差。所以我们的样本方差是 0.0025,N 是每组的观察次数,所以 N 等于 500。将这些数字代入公式,我们得到的标准误差为 0.316%。
- 在检验统计公式中,观察值是 1%,假设值是 0%(因为我们的零假设是没有影响)。将这些值与我们刚刚计算的标准误差一起代入检验统计公式,我们得到的检验统计值为 0.01/0.00316 = 3.16。
- 我们观察到的 1%的值距离假设值 0%有 3.16 个标准偏差。那太多了。我们可以使用下面的 Python 代码来计算 p 值(对于双尾检验)。我们得到的 p 值是 0.0016。请注意,我们使用 p 值进行双尾检验,因为我们不能自动假设新设计与当前设计相同或更好——新设计也可能更差,双尾检验考虑了这种可能性(更多信息请参见)。
from scipy.stats import norm# Two Tailed Test
print('The p-value is: ' + str(round((1 - norm.cdf(3.16))*2,4)))
- p 值 0.0016 低于我们的 alpha 值 0.05,因此我们拒绝零假设,并告诉我们的客户,是的,新的应用程序设计确实帮助她的用户节省了更多的钱。万岁,胜利!
Photo by Rakicevic Nenad from Pexels
最后,请注意,我们分析计算的 p 值 0.0016 不同于我们之前模拟的 0.0009。这是因为我们运行的模拟是单尾的(单尾测试更容易理解和可视化)。我们可以通过将模拟的 p 值乘以 2(考虑第二个尾部)来协调这些值,得到 0.0018,非常接近 0.0016。
结论
在现实世界中,A/B 测试不会像我们虚构的例子那样一目了然。很可能我们的客户(或老板)没有现成的数据给我们,我们必须自己收集和清理数据。以下是准备 A/B 测试时需要记住的一些额外的实际问题:
- 你需要多少数据?收集数据既费时又费钱。一个运行不佳的实验甚至可能会疏远用户。但是如果你没有收集到足够的观察数据,你的测试就不会很可靠。所以你需要仔细权衡更多观察的好处和收集它们的增量成本。
- 错误拒绝真零假设(1 型错误)的成本与未能拒绝假零假设(2 型错误)的成本相比是多少?回到我们的例子,第 1 类错误相当于为新的应用程序设计开绿灯,而它实际上对节约没有影响。第二类错误相当于坚持当前的设计,而新的设计实际上鼓励人们存更多的钱。我们通过选择一个合理的临界值α来权衡 1 型和 2 型错误的风险。较高的α增加 1 型错误的风险,较低的α增加 2 型错误的风险。
希望这是有益的,干杯!
如果你一路走到这里,请看看我带来的其他作品:
这是我迄今为止所有作品中最喜欢的,关于神经网络的
随机森林为什么伟大
我已经开始想念我的梅蒂斯训练营经历和朋友们了!
我在 Metis 工作时参与的一个项目,投资于 Lending Club 贷款
我的第一个数据科学帖子,逻辑回归
数据科学基础(R):从 Excel 导入数据— readxl
原文:https://towardsdatascience.com/data-science-fundamentals-r-import-data-from-excel-readxl-380ef47216d5?source=collection_archive---------15-----------------------
导入和导出文件有多种方式。我们上次讲过 xlsx 这次我们会通过 readxl,同样,也有一些参数需要设置,尤其是导入文本的时候。
其他导入和导出包在系列中讨论。
[## 数据科学基础(R) —导入和导出数据
数据科学基础(R):从 Excel 导入和导出数据— xlsx
medium.com](https://medium.com/series/data-science-fundamentals-r-import-export-data-14667fed24a8)
套餐
readxl
功能
读取 xls 和 xlsx 文件
描述
read_excel()调用 excel_format()根据文件扩展名和文件本身来确定 path 是 xls 还是 xlsx。如果您有更好的了解并希望防止这种猜测,请直接使用 read_xls()和 read_xlsx()。
演示
输入数据包括英文文本、数字、繁体中文文本和简体中文文本。
在本演示结束时,您将知道应该指定哪些选项来导入 r 中不同格式的上下文数据。使用 xlsx 和 readxl 的一个主要区别是,xlsx 只能支持 xlsx 文件的导入,但 readxl 同时支持 xlsx 和 xls 文件。
测试功能(默认设置):
read_excel(path,sheet = NULL,range = NULL,col_names = TRUE,col_types = NULL,na = ",trim_ws = TRUE,skip = 0,n_max = Inf,guess_max = min(1000,n_max))
read_xls(path,sheet = NULL,range = NULL,col_names = TRUE,col_types = NULL,na = ",trim_ws = TRUE,skip = 0,n_max = Inf,guess_max = min(1000,n_max))
read_xlsx(path,sheet = NULL,range = NULL,col_names = TRUE,col_types = NULL,na = ",trim_ws = TRUE,skip = 0,n_max = Inf,guess_max = min(1000,n_max))
输入文件
Reference_Sample.xlsx
参考 _ 样本. xls
代码
###############
library(readxl)
###############
getwd()
# read excel xls/ xlsx - method 1
xls_df = read_excel(path = "Reference_Sample.xls", sheet = "Sample_Sheet")
与使用 xlsx 相同,如果未定义区域设置,则以 UTF 代码显示中文字符。如果您需要阅读中文字符或其他语言的特定字符,则需要进行区域设置。
Sys.setlocale(category = "LC_ALL", locale = "Chinese")
# read excel xls/ xlsx - method 1
xls_df1 = read_excel(path = "Reference_Sample.xls", sheet = "Sample_Sheet")
xlsx_df1 = read_excel(path = "Reference_Sample.xlsx", sheet = "Sample_Sheet")
xlsx 和 xls 文件均以数据框结构导入,繁体中文和简体中文字符均可成功显示。
readxl 还提供了专门导入 xlsx 或 xls 文件的其他函数。
# read excel xls - method 2
xls_df2 = read_xls(path = "Reference_Sample.xls", sheet = "Sample_Sheet")
# read excel xlsx - method 3
xlsx_df2 = read_xlsx(path = "Reference_Sample.xlsx", sheet = "Sample_Sheet")
read_xls 和 read_xlsx 都可以演示与 read_excel 相同的读取功能。正如函数名所指定的,read_xls 只能读取 xls 文件,而 read_xlsx 只能读取 xlsx 文件。如果反过来做,会出现以下错误。
xlsx_df3 = read_xlsx(path = "Reference_Sample.xls", sheet = "Sample_Sheet")
sheets_fun(path)中的错误:评估错误:在“Reference_Sample.xls”中找不到“”。
总结
与 xlsx 包相比,readxl 可以读取 xlsx 和 xls 文件,并且选项设置较少。使用 readxl 时,只需要文件路径和工作表名称。在 read_excel、read_xls 和 read_xlsx 这三个函数中,read_excel 既适用于 xlsx 文件,也适用于 xls 文件,因此,一般来说,建议使用 read_excel 来读取 excel 文件。
你可以在 R 这里找到数据导入导出的其他文章。
编辑的话
如果你有兴趣了解更多的窍门和技巧,欢迎你浏览我们的网站:【https://cydalytics.blogspot.com/
领英:
凯莉·罗—https://www.linkedin.com/in/carrielsc/
黄洋—https://www.linkedin.com/in/yeungwong/
- 数据科学基础(R):从文本文件导入数据— textreadr & readtext
- 数据科学基础(R):导入&导出 Excel 中的数据— xlsx
- 数据可视化技巧(Power BI)——将分类变量转换为虚拟变量
- 形状各异的中文词云(Python)
- 用 Python 制作一个让孩子学英语、玩得开心的游戏
数据科学基础(R):从 Excel 导入和导出数据— xlsx
原文:https://towardsdatascience.com/data-science-fundamentals-r-import-export-data-in-excel-xlsx-bdb12a588735?source=collection_archive---------21-----------------------
数据科学是一个非常广泛的话题,在进入这个巨大的森林之前,你应该知道正确导入和导出数据这一最基础的部分。没有数据,你就无法执行所有的机器学习技术或得出有见地的分析。你可能认为导入和导出非常容易,只需要一个简单的代码和里面的文件名。我以前也有同样的感觉,但是后来,我意识到有一些关键的参数需要更改(尤其是如果数据涉及到文本),否则,您将不会以您想要的方式获得数据。你会看到下面的例子。
这篇文章会给你一个使用 R 包的总结, **xlsx**
。您将了解如何导入和导出具有不同功能的 excel 文件,以及它们之间的区别。
其他导入和导出包在系列中讨论。
[## 数据科学基础(R) —导入和导出数据
数据科学基础(R):从 Excel 导入和导出数据— xlsx
medium.com](https://medium.com/series/data-science-fundamentals-r-import-export-data-14667fed24a8)
包裹
xlsx
功能
读取、写入和格式化 Excel 2007 和 Excel 97/2000/XP/2003 文件
描述
xlsx 包使用 r 对 Excel 文件进行编程控制。高级 API 允许用户将一张 xlsx 文档读入 data.frame 并将 data.frame 写入文件。较低级别的功能允许直接操作表、行和单元格。例如,用户具有 控件来设置颜色、字体、数据格式、添加边框、隐藏/取消隐藏工作表、添加/移除行、添加/移除工作表等。
示范
输入数据包括英文文本、数字、繁体中文文本和简体中文文本。
在本演示结束时,您将知道应该指定哪些选项来导入和导出 r 中不同格式的上下文数据。
要测试的功能(默认设置)
read.xlsx (file,sheetIndex,sheetName=NULL,rowIndex=NULL,startRow=NULL,endRow=NULL,colIndex=NULL,as.data.frame=TRUE,header=TRUE,colClasses=NA,keepFormulas=FALSE,encoding="unknown ",password=NULL,…)
read.xlsx2 (file,sheetIndex,sheetName=NULL,startRow=1,colIndex=NULL,endRow=NULL,as.data.frame=TRUE,header=TRUE,colClasses="character ",password=NULL,…)
write.xlsx (x,file,sheetName="Sheet1 ",col.names=TRUE,row.names=TRUE,append=FALSE,showNA=TRUE,password=NULL)
write.xlsx2 (x,file,sheetName="Sheet1 ",col.names=TRUE,row.names=TRUE,append=FALSE,password=NULL,…)
导入文件
Reference_Sample.xlsx
#############
library(xlsx)
#############
# read excel xlsx - method 1xlsx_df = read.xlsx(file="Reference_Sample.xlsx", sheetName="Sample_Sheet", header=T, stringsAsFactors=F, encoding="UTF-8")
str(xlsx_df)
header=T 在 r 中检索 xlsx 文件的标题。
使用 stringsAsFactors=F 代替 T,因为我们不希望 R 将字符输入视为因子。
你可以发现,由于编码设置为“UTF-8”,所以汉字是用 UTF 码显示的。如果未设置编码,将显示乱码。
如果要显示中文字符或其他语言的特定字符,应该预先设置区域设置。在本例中,应该指定 local = "Chinese"。
local = "cht "只能显示繁体中文文本,local = "Chinese "可以显示繁体和简体中文两种文字。
Sys.setlocale(category = "LC_ALL", locale = "Chinese")
# read excel xlsx - method 1xlsx_df = read.xlsx(file="Reference_Sample.xlsx", sheetName="Sample_Sheet", header=T, stringsAsFactors=F, encoding="UTF-8")
# read excel xlsx - method 2
xlsx_df2 = read.xlsx2(file="Reference_Sample.xlsx", sheetName="Sample_Sheet", header=T, stringsAsFactors=F)
您会发现两种方法,即 read.xlsx 和 read.xlsx2,都以相同的格式显示数据。由于默认编码是“UTF-8”,因此如果区域设置正确,即区域设置为“中文”,应该会显示相同的输出。然而,当您检查 xlsx_df2 的结构时,您可以发现一些不同之处。
str(xlsx_df2)
所有变量的结构都变成字符。如果以后要做计算,可能会造成不便。
使用 read.xlsx 和 read.xlsx2 时,如果列名包含空格,则所有空格都更改为“.”
因此,当您使用列名对列进行选择时,您需要使用新的名称,即“Traditional”。中文”和“简体”。中国人”在这种情况下。
导出文件
以下部分是编写 excel 输出的演示。
# write excel xlsx - method 1write.xlsx(xlsx_df, file="Output1.xlsx", sheetName="Sample_Sheet", row.names=F, showNA=F)
指示 row.names = F 删除 r 中使用的行索引。
使用 showNA = F 是为了在输出文件中空白将保持为空白,而不是被“NA”替换。
但是,如果在导出之前没有再次定义列名,则列名仍然是 R 中显示的那些列名,所以您仍然会发现那些“.”在列名中。
# write excel xlsx - method 2
write.xlsx2(xlsx_df2, file="Output2.xlsx", sheetName="Sample_Sheet", row.names=F, showNA=F)
使用 write.xlsx2 的输出显示类似的输出,但是 xlsx_df2 的所有列的上下文都是 char,所以输出会保留相同的结构,可以看到 B 列上的数字变成了字符。
摘要
建议使用 read.xlsx,因为原始数据结构没有改变,但是您需要定义编码方法。(编码= "UTF-8 "是常用的。)
对于编写 excel 文件,write.xlsx 和 write.xlsx2 的输出文件非常相似,因此您可以使用其中任何一个。
使用 xlsx 的一个限制是它只支持带有。xlsx 扩展名,如果要读取 xls 文件,可以使用 readxl(下一篇文章会讲到)。
你可以在这里找到 R 的其他数据导入导出的文章。
编辑的话
如果你有兴趣了解更多的窍门和技巧,欢迎你浏览我们的网站:https://cydalytics.blogspot.com/
领英:
卡丽·罗—https://www.linkedin.com/in/carrielsc/
黄洋—https://www.linkedin.com/in/yeungwong/
其他文章
- 数据科学基础(R):从 Excel 导入数据— readxl
- 数据科学基础(R):从文本文件导入数据— textreadr & readtext
- 数据可视化技巧(Power BI)——将分类变量转换为虚拟变量
- 形状各异的中文词云(Python)
- 用 Python 制作一个让孩子学习英语并从中获得乐趣的游戏
数据科学变得太模糊了
原文:https://towardsdatascience.com/data-science-has-become-too-vague-538899bab57?source=collection_archive---------5-----------------------
大家专精,散了吧!
我不反对淡化“数据科学”这个术语,并把它分解成专门的学科。不要误解,我认为全球“数据科学”运动是必要的,并对坏脾气的企业界产生了积极影响。但这场运动已经取得了胜利,每个人都接受了这个想法。与其继续在“数据科学”的保护伞下宣传和招聘,也许我们应该让尘埃落定,让人们能够适应变化。
数据科学专业人士,请考虑不再让自己背负“数据科学家”的沉重头衔。我们中的大多数人并不具备每个新话题的博士或百科知识。也许我们应该专业化,减轻自己无所不知的压力。数据科学已经成为一个过于宽泛的术语,并且变得如此普遍和模糊,以至于经常毫无意义。为什么会有人想拥有如此不起眼的东西?
同样有趣的是,八年前,那些被你称为“数据科学家”的人也有这些担忧,甚至质疑数据科学不是真正的科学。毕竟,“给我看一门不涉及数据的科学”。
在这篇文章中,我想强调“数据科学”是如何发展的,以及为什么是时候对它进行细分了。
[## 2019 年学数据科学的感受
透过(决策树)看到(随机)森林
towardsdatascience.com](/how-it-feels-to-learn-data-science-in-2019-6ee688498029)
贾巴沃克效应
2010 年,有一部短暂但令人难忘的美剧叫做比 Ted 更好。这部剧是一部愚蠢的职场喜剧,以夸张的方式讽刺了企业文化。但是有一集,贾巴沃克(第一季第 12 集),太准确地抓住了公司流行语的效果。
主角泰德试图隐藏一个宠物项目的预算。当他的老板 Veronica 与他对质时,他撒谎说资金被用于革命性的“贾巴沃克”项目,这是他当场含糊地编造的。
有趣的是。维罗妮卡没有澄清“贾巴沃克”是什么,而是假装“知道内情”,害怕因为被排除在外而显得无能。她将不存在的贾巴沃克项目作为公司其他部门的重中之重。令人捧腹的结果是,在贾巴沃克工作的每一位领导和员工都不知道这是什么,但他们绝不敢互相承认自己的无知。
对事态升级的程度感到措手不及,在他们做“贾巴沃克”的主题演讲之前,泰德向维罗妮卡坦白了。Veronica 告诉 Ted 继续进行,因为“产品是为没有演示的人准备的”。
我大概不必解释“贾巴沃克”这个比喻。把这个词换成“区块链”、“大数据”、“比特币”、“人工智能”、“物联网”、“量子计算”、“机器学习”或者“数据科学”,你就完全明白我的意思了。长期以来,企业文化一直在宣传创新,人们假装理解创新,结果却遭遇了它们的局限,并追逐其他东西。
既然我已经强调了“贾巴沃克效应”,让我们继续。
数据科学简史
如果你想把“数据科学”定义为任何与“数据”有关的东西,你可以回到计算的黎明。如果你认为数学和统计学与数据一样对数据科学至关重要,你可以回到几个世纪前,说统计学家是最初的“数据科学家”。
为了简洁起见,让我们回到 20 世纪 90 年代。事情过去很简单。分析师、统计学家、研究人员和数据工程师都是相当独立的角色,偶尔会有重叠。工具栈通常由电子表格、R、MATLAB、SAS 和/或 SQL 组成。
当然,在整个 2000 年,事情都在变化。谷歌将数据收集和分析推到了难以想象的高度。2009 年,谷歌高管坚持认为统计学家将是未来 10 年内“最性感的工作”。那是十年前的事了,但我记得那是一种奇怪的感觉。但你瞧,2011 年《哈佛商业评论》将这一名为“数据科学”的概念纳入主流,并宣布其为21 世纪最性感的工作。
就在那时,“贾巴沃克”时尚的热潮开始了。哈佛创造了一个名为“数据科学”的空白,每个人都竞相填补。SQL 开发人员、分析师、研究人员、定量分析师、统计学家、物理学家、生物学家和无数其他专业人员将自己重新包装为“数据科学”专业人员。硅谷公司觉得“分析师”或“研究员”等传统职位听起来太局限,于是将这些职位更名为“数据科学家”,听起来更有权力和影响力。
在硅谷之外,这增加了困惑,因为大多数人认为“科学家”是穿着白大褂的博士。与直觉相反,数据科学家实际上来自不同教育水平的许多背景(技术和非技术)(学士、学士、工商管理硕士,有时还有博士)。许多招聘经理、人力资源部门和组织通常都很难定义他们需要什么样的数据科学家,这就是为什么你们中的许多人可能都有关于年轻数据科学家被扔进 MySQL 数据库,但却无法用它做任何有意义的事情的悲伤轶事。
再加上数据工程(想想“大数据”)的扩展进步,以及“机器学习”的快速进步,“数据科学”的保护伞变得更大、更模糊。越来越多的流行语被抛出,很多人都在说,但很少有人理解。不知不觉中,“大数据”和“机器学习”已经成为同义词,学科的区分也就失去了。
更糟糕的是,公司在不知情的情况下做出决策,并认为他们需要数据科学技能“X”(例如深度学习)来解决调度等日常问题,而实际上他们需要的是懂搜索算法的运筹学人员。当前的热点并不是大多数问题的最佳解决方案,这可能是一个代价高昂的错误。你可以在下面阅读我关于这个主题的另外两篇文章。
[## 深度学习已经达到极限了吗?
又一个人工智能的冬天来了吗?
towardsdatascience.com](/is-deep-learning-already-hitting-its-limitations-c81826082ac3) [## 数独和时间表
用树搜索解决调度问题
towardsdatascience.com](/sudokus-and-schedules-60f3de5dfe0d)
“数据科学”的领域已经被“贾巴沃克”效应耗尽。如果我们希望它继续成功,我们需要使它专门化,而不是用一般化造成更多的混乱。
解散“数据科学”的理由
“数据科学”的推动做了一些伟大的事情。它让脾气暴躁的老企业重新振作起来,做一些新鲜刺激的事情。传统上,IT 部门在提供数据访问和允许非 IT 人员编写代码方面很吝啬,他们被迫发展并支持这样的计划。最重要的是,它将技术大众化到如此多的非技术职业中。律师可以从学习编码中获益的想法已经不再是边缘性的了,这种仪式也不再是计算机科学家、专业程序员和工程师的专利。
不知不觉中,“大数据”和“机器学习”已经成为同义词,学科的区分也就失去了。
但这是“数据科学”运动已经成功并走到尽头的标志。继续推动它开始变得有害。以下是一些原因:
它太宽了
不久前,如果你获得了“商业管理”学士学位,你就可以轻松地向上流动。但是今天,传统的成功往往需要专注于某个特定的领域,这仅仅是因为我们的世界变得复杂了。商科学生学习金融、供应链管理、运筹学、会计学、市场营销或其他特定的商业学科会更好。
我认为“数据科学”需要经历类似的转变。就像商业本身一样,有太多的学科需要完全掌握。尝试学习所有这些知识是徒劳的,尤其是一次就学会。当然,对外面的世界有高层次的认识是有益的。随着时间的推移改变兴趣也是健康的。然而,试图无所不知永远不会产生价值。我发现这种不集中注意力的学习方式是无效的,喜剧演员布莱恩·里根对此做了最好的讽刺:“我想学习!我想成为一名学习者!”
“数据科学”可以在 Excel 或 Tableau 中创建图表,以及构建和调整神经网络分类器,这一直困扰着我。说真的,这是怎么回事?这两项任务在性质、所需的技能和薪水上有着天壤之别。编写 SQL 查询还是构建贝叶斯模型?这些也是不相关的技能组合,绝对不能互换。那么,为什么我们将拥有这些极其多样化技能的人概括为“数据科学家”,并让招聘变得如此模糊和困难呢?
一些读到这里的人可能会说“所有这些学科都是相互关联的,而‘数据科学’学科有助于统一和整合它们。”这在某种程度上是有争议的,但是营销、财务、供应链、会计和其他业务功能也是相互关联的。尽管有一个共同的目标,但它们仍然是不同的领域,我们不再强调“业务管理”的整体。碎片化和专门化是领域成熟的一部分,随着时间的推移,它们比领域本身得到更多的关注。
“数据科学”可以在 Excel 或 Tableau 中创建图表,以及构建和调整神经网络分类器,这一直困扰着我。说真的,这是怎么回事?
这是压倒性的
促使我写这篇文章的原因之一是,越来越多的数据科学家发表文章,承认他们对“冒名顶替综合征”的感受。有这个我见过流传的。还有这个。随着时间的推移,越来越多的数据科学专业人士不断站出来,承认他们的欺诈感。从专业角度来说,冒名顶替综合症的负担会让你充满恐惧,夜不能寐。这个问题总是挥之不去“多久我会被发现我的欺诈行为?”
但是我相信这是这篇文章中更大问题的一个症状。我花了太长时间才明白“数据科学”已经变成了与“数据”相关的任何事物。可悲的是,有些人认为自己拥有这一切。我不明白为什么会有人想这么做。
This is all you need to become a confident data scientist (as of 2013). Totally achievable, right?
上图是成为数据科学家的流行(但过时)路线图。这不仅对有个人生活的人来说不切实际,而且为什么要开一个“一刀切”的课程?也许你可以在那里获得关于每个主题的浅薄知识,但是人们在不同的环境中工作,会遇到不同的问题。在给定的时间点,为什么不学习您特定工作所需的工具呢?也不要介意工具和平台来来去去,技能很快成为遗产。这个路线图中唯一不容易过时的部分是经典的数学概念。
不要误解,学习和获得现有解决方案的一般概念总是好的。但在日常生活的现实中,有效的人知道如何辨别和优先考虑,而不是被 FOMO 所驱使。
它浸透了一切
数据现在就像电一样。它在任何地方都有不同的用途。在 19 世纪,人们会惊叹于电力带来的一切。
如今,人们对电力的关注越来越少,而是更多地关注它所驱动的设备。我们并不认为电是理所当然的,但是你知道,总有一天你会停止庆祝它。数据也是如此。它成功了,并成为新的常态。与其继续我们疲惫的庆祝,我们应该关注它将带来的下一个创新。
你认为自然语言处理可以创造一个改善客户投诉处理的机会吗?然后推“自然语言处理”,而不是“数据科学”、“机器学习”,或者“AI”。具体而集中。您是否对优化利润、成本、收入或运营可行性感兴趣,然后将自己定位在优化上。“数据科学”现在已经变成了白噪音,作为一个术语已经不太实用了。关注具体的、切实的领域,这些领域的问题还没有得到应用和解决。
流行词困境
作为总结,这里有一些最后的考虑。我明确表示我们应该停止使用“数据科学”这个术语。这真的会发生吗?我想迟早会的。就像“云计算”这个术语已经基本消亡并被专业化所取代一样,我认为数据科学也会发生类似的转变。我要遵循我自己的建议吗?我还不确定。虽然这个术语仍然流行,但这可能是让人们去参加我的讲座或阅读这个名为走向数据科学的博客上的文章的唯一途径。我不能责怪别人也这样做。
也问问你自己:我们是否用流行语来激发积极的改变?还是为了达到我们自己的目的?在全球范围内,“数据科学”这个时髦词也产生了积极的影响。它使各行各业的技术大众化,让许多人成为数字劳动力。但是我确信有人自称为“数据科学家”来夸大他们的能力并利用炒作。
总之,让我们放松对人和角色的概括。也许我们应该停止称角色为“数据科学家”,取而代之的是让角色反映它所承担的任务。雇佣“数据工程师”、“运筹学开发者”、老派“统计学家”和“机器学习分析师”。让每个人都有机会找到自己的位置,并以他们知道的最好的方式做出贡献。随着时间的推移,组织将以合理的方式塑造自己,并根据需求调整角色。
下一篇:
[## 2019 年学数据科学的感受
透过(决策树)看到(随机)森林
towardsdatascience.com](/how-it-feels-to-learn-data-science-in-2019-6ee688498029)
7 个简单步骤中的数据科学
原文:https://towardsdatascience.com/data-science-in-7-easy-steps-ca80d063f175?source=collection_archive---------38-----------------------
高效学习分析数据和解决问题。
以下是如何成为一名数据科学家的分步指导。在本文中,我将介绍数据工程概念,如如何收集和转换数据,如何提取和分类数据,以及如何可视化数据(参见 YouTube 上的整个课程)。为了让你更容易学习,我在这里做了一个精简版的课程,但在文本旁边添加了 YouTube 视频的链接。
Learn data science in 7 easy steps
1.数据分析
数据分析是数据科学的关键原则之一,你必须首先理解这一点。了解如何有效地选择和准备数据分析部分是数据科学的第一阶段。
了解如何使用 Excel 分析数据,如何从电子表格执行基本分析,谁是数据科学家,哪些工具将用于数据分析,如何使用 Python 编写统计测试代码,从数据库到处理和规划步骤。
也就是说:至少在基础层面学习统计和线性代数!
2.数据清理
在这一部分中,我们将涵盖所有不同类型的数据,包括原始数据,如何清理标准格式并将其转换为正确的输入格式,以及如何清理并将其转换为我们希望用于数据分析的数据结构。
3.数据工件
这时,您将了解一些对您的数据集负责的工件。这是更有趣的部分之一,因为它是关于数据科学项目的设计和功能实现。
当涉及到数据集时,您希望了解什么是异常值,什么是平均值,什么是偏差。或者换句话说,您希望了解与您的数据相关的异常。
4.数据建模
在第二阶段,你将被引导到两把钥匙中的一把。数据模型是处理、收集、转换和操作数据的艺术。同样关键的是使用关系数据库还是像 MongoDB 这样的对象数据库。
基于您的数据分析经验,您将获得一个关于如何将数据库键实现到您的数据管理系统中的关键想法。
关于处理数据的视频中也涉及到了这一部分。
5.数据工程
我们接下来要讨论的是用 Python 构建数据工程部分,机器学习例程和测试工具。同时,了解如何构建你的管道。还要观察一些数字处理代码——统计推理、分类、聚类等等。
首先使用 sklearn 和 NumPy,然后使用 Keras 和 Tensorflow 来增强机器学习。
6.数据设计
大的小的。设计部分是主要部分之一,在这里您将获得如何通过消除不必要的参数来简化数据的详细说明。
我们需要做的不仅仅是数字运算,也不仅仅是对数据结构的理解。这部分会给你很好的理解,以便设计重要的深度学习管道。
7.数据模式
在第七个也是最后一个阶段,我们将学习应该遵循的模式,以便成功地将我们的数据科学应用程序用于生产。
从稀疏数据到大型数据集。从样本训练和验证数据集到我们需要的所有其他数据。
请在评论中告诉我,在你的数据科学之旅中,哪个部分最重要。
也分享一下自己作为数据科学家的经历。
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
商业中的数据科学
原文:https://towardsdatascience.com/data-science-in-business-e3c94c76c182?source=collection_archive---------23-----------------------
简而言之,商业数据科学
数据科学无处不在。如果想要保持竞争力,每个企业都必须在一定程度上应用数据科学,以了解客户和市场。另一方面,我们缺少如此多的数据科学人才,这是考虑转行的最佳时机。这篇文章是针对想学习数据科学的商业人士的。
Data Science in Business.
什么是数据科学
数据科学就是理解数据,这在商业中至关重要。它主要是用 Python 或 R(编程语言)完成的,目的是从业务数据中提取有趣的可操作信息。
房地产中的数据科学
房地产中的一个常见问题是预测价格并对价格范围进行分类,以评估哪些可以出售,哪些不可以出售。数据科学有助于将房地产分为不同的类别,然后通过回归分析,根据过去的交易预测价格。
营销中的数据科学
另一方面,如果你不知道谁是你的客户,最好的方法是使用聚类技术。数据科学允许你根据相似性对你的客户进行分组:购物历史、人口统计等。这样你就知道你卖什么给谁。
通过数据科学的推荐引擎
如果你在亚马逊购物或者看《网飞》,那么你可能知道他们正在使用强大的推荐系统向你推荐要购买的新产品或者要观看的剧集。实际上,为你的企业建立一个推荐引擎是可能的——一旦你聚集了你的客户并预测价格,你就可以开始建立一个推荐引擎了。
异常检测
最后,为了理解您的数据,您需要将标准/平均值与异常值或异常值分开。这样你就可以预测谁是你的普通顾客。
商业数据科学和可视化
如果你已经处理好所有的数据并准备好使用,那么最后一步就是让数据可视化,这样其他团队成员就可以理解你在做什么。在 Python 和 R 中,有几个工具(如 plotly 或 Dash)可以用来可视化业务中的数据。然后当然还有 Excel 和 Powerpoint!
商业中的数据科学
如果您已经观看了这个小型课程,那么您已经为开始为您的企业构建数据科学战略做好了充分准备。
这是实施一些工具来发展你的企业的最佳时机。
如果您正在寻找更多关于数据科学的资料,请查看数据科学实用指南。
日常生活中的数据科学
原文:https://towardsdatascience.com/data-science-in-daily-life-ee1ed06b93d7?source=collection_archive---------31-----------------------
— —获取数据,整理并分析数据
(Source)
我通常确保自己不是“迟到的人”甚至有时我不能提前参加聚会;我准时到达那里。我想,和大多数人一样,我会事先查看谷歌地图,计划好何时出发。然而,你永远无法避免各种各样的事故,让你陷入困境。最近,我刚刚在我的列表中添加了一个新事件。刚搬到西雅图过暑假,第一次被夹在一座可能会关闭的桥里!为了让渡船通过,这些桥会时不时地关闭。有时候 5 到 10 分钟会让你焦虑。
为此我想,为什么不用数据科学知识来做一些基本面的分析。我的朋友曾经告诉我,有一个西雅图大桥 twitter 发布了西雅图所有桥梁的关闭-重新开放信息,我发现这是一个做网络报废的极好资源。在 twitter 内部,我发现这些推文仅仅是六天前的,这对于一个迷你数据科学项目来说已经足够了。
(The tweets generally look like this)
一般来说,网络搜集是数据科学家从网站收集数据的一种强有力的方法。即使我们获得了使用 API 的许可,我们可能会发现自己需要从现有数据库之外获取一些信息。这些信息可以帮助我们更好地分析问题,或者为更好的建模增加特性。在所有针对 python 的 web 浏览器包中,BeautifulSoup 和 Selenium 是最常用的工具之一。BeautifulSoup 允许您存储整个 HTML 页面以供进一步解析,而 Selenium 将允许您单击按钮,在框中键入单词,并向下滚动网页。在这个项目中,我使用 Selenium 向下滚动 twitter(就像人一样),使用 BeautifulSoup 存储 HTML 页面并解析它以获取所有信息。
# import web scrapping libraries
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import Chrome
from bs4 import BeautifulSoup
import re
import requestsbroswer = Chrome()url = '[https://twitter.com/sdotbridges?lang=en'](https://twitter.com/sdotbridges?lang=en')
broswer.get(url)
我们首先导入 web 报废库,并使用 Selenium 打开网页。
def get_all_bridge_openings(browser):
"""
Scrolls tweets.
Parameters
----------
browser: webdriver object
Returns
-------
bridge_opening: webelement object
"""
sel = 'div.tweet'
prev_items_found = -1
n_items_found = 0
while n_items_found > prev_items_found:
prev_items_found = n_items_found
bridge_opening = browser.find_elements_by_css_selector(sel)
n_items_found = len(bridge_opening)
last_bridge_opening = bridge_opening[-1]
loc = last_bridge_opening.location_once_scrolled_into_view
time.sleep(2)
print(f"The total number of tweets collected is: {n_items_found}")
return bridge_openingbridge_openings = get_all_bridge_openings(broswer)
这个函数模拟向下滚动的过程,并获取 web 元素对象进行解析。如打印声明所示,我们总共收集了 821 条推文。
data = [tweet.get_attribute("innerHTML") for tweet in bridge_openings]with open(".secret_bridge") as f:
password = f.readline().strip()mongo_url = f'mongodb+srv://Colin:{[@cluster0](mailto:password}<a href=)-tnykl.mongodb.net">password}[@cluster0](http://twitter.com/cluster0)-tnykl.mongodb.net/test'
mc = pymongo.MongoClient(host= mongo_url)db = mc['boat_info']html_col = db['tweet_html']for tweet in data[1:]:
html_col.insert_one({'html': tweet})
在这里,我将我的 JSON 文档存储在 MongoDB 中,这是一个 NoSQL 数据库程序。这个视频很好地介绍了这个数据库。MongoDB 使用带有模式的类似 JSON 的文档,这对于存储 HTML 文件很有用。然而,MongoDB 要求客户端登录。然后,通过使用 insert-one 函数,我们可以追加我们的文档。
def get_bridge_time(info):
"""
Parse the epoch time in the html.
Parameters
----------
info: dict
Returns
-------
date: datetime
"""
soup = BeautifulSoup(info['html'])
epoch_time = soup.find_all('a')[1].span['data-time']
date = pd.Timestamp(int(epoch_time), unit='s')
return date
对于 HTML 解析,我们可以使用 BeautifulSoup。其中一个解析函数如上所示。检查完网页后,我们需要查看 HTML 标记,如" div "、" a "、" span "、" li ",以找到我们想要的信息,并使用正确的方法来定位和调用它们。一旦获得时间戳,我们就可以将其转换为 DateTime 类型。
df.set_index('time',inplace=True)
seattle_time = df.index - timedelta(hours=7)
df.index = seattle_time
df.tail()
在我们解析 HTML 和时间、桥和状态信息之后,我们可以将它们存储到数据帧中。数据框将如下所示。
通常,数据工程过程可能是另一个挑战。有时,会有一些无效的数据记录,如空值,或者可能会有一些由人为错误产生的荒谬记录。这些都需要评估。由于数据清理过程相当繁琐,我不会把它包括在博客中。
这个数据集的另一个问题是很难解释状态。为了帮助在图中绘制,我将“关闭”状态设置为 1,将“重新打开”状态设置为 0。“关闭”状态和“重新开放”状态之间的时间段代表渡船经过的时间。同时,“重新开放”状态和“关闭”状态之间的时间段代表汽车经过的时间。前一个是我感兴趣的状态。
如上所示,每个细长条代表桥的“关闭”状态。六个支线剧情给出了“关闭”频率的直觉,即六天内每座桥的总“关闭”时间。从这个图中,我们了解到弗里蒙特桥、巴拉德桥和大学桥是西雅图最繁忙的桥梁。它们代表最长的总“关闭”时间和最高的“关闭”频率。此外,通过仔细观察,我们可以看出大多数状态变化发生在上午 10 点到下午 7 点。
如果我们计算每座桥的总时间段,我们还可以生成该数据框,该数据框显示总关闭时间、总关闭频率以及日平均关闭频率。用总关闭时间除以总关闭频率,可以计算出平均关闭持续时间。由此可见,前三座桥关闭的次数最多,时间最长。
从柱状图中可以更清楚地看出,在过去的六天中,弗里蒙特桥处于“关闭”状态的时间是六座桥中最长的。总之,弗里蒙特大桥的关闭状态总计接近 10 个小时。
更有趣的是,在这六天里,下斯波坎街大桥平均处于“关闭”状态的时间最长。
如果位置信息相关并包含在数据集中,那么值得尝试在地图上绘制结果。我这里用的是 Tableau,一个强大的数据可视化软件。通过导入 CSV 文件,列将在左侧显示为“尺寸”和“尺寸”然后,您可以“拖动”上面“列”和“行”上的“纬度”和“经度”列。此外,通过将其他“维度”和“度量”拖到中间的“标记”框中,每一行的值都会按照您的需要显示在地图上。您可以尝试不同的标记方法,看看如何有效地说明这些值。
六个圆圈代表六座桥的位置,三座靠近西雅图市中心,而另外三座稍远一点。圆圈的大小表示平均关闭状态持续时间。圆圈越大,平均关闭状态越长。这些数字代表每座桥的平均频率。绿色的透明度取决于总的关闭时间。
现在我们对西雅图大桥有了更深入的了解,这更令人兴奋!我们可以假设为什么不同桥梁的关闭频率和持续时间是不同的。我们也可以从其他网站进行网络搜集,为进一步的研究提供证据。
但更实际的是,因为我通常乘坐公交车通过弗里蒙特桥和大学桥,而且因为我现在知道这些桥应该只关闭 5 分钟,所以我不需要太担心迟到!
我希望这个小项目对你有所帮助。下面随意评论,干杯!
Ecom 数据系列:什么是 KPI?
原文:https://towardsdatascience.com/data-science-in-ecommerce-what-are-kpis-cba6bcc376d0?source=collection_archive---------25-----------------------
让电子商务数据科学概念变得简单,一次一个主题。
找到你真正的北方,引导你的事业前进。
Ecom Data Talk Episode 3: What is KPI?
你不能改进你没有衡量的东西——彼得·德鲁克
KPI 是指引你生意的北极星。
在竞争异常激烈的电子商务领域,为了在竞争中脱颖而出,我们需要不断测试和迭代我们的假设,以改善业务运营。为了确保我们朝着正确的方向前进,我们必须通过数据驱动的分析支持来衡量我们的进展。
数据驱动的决策制定的整个前提植根于与每个业务相关的可靠、有意义和准确的指标。
“但是指标太多了,我怎么知道应该关注什么??"“我听到很多人谈论 AOV、回购率、CLV 等术语,但他们是什么意思,我为什么要关心这些呢”?
请继续阅读并找出答案。
Photo by Luke Chesser on Unsplash
什么是 KPI?
在我们定义 KPI 之前,我们需要首先引入指标。那么什么是度量呢?指标只是一个测量单位,用于定量评估或评价。例如,厘米是一种公制,它用来描述长度。度量对于成长是必不可少的,正如现代企业管理之父彼得·德鲁克曾经说过的,“你不能改进你不度量的东西”。就像运动员试图将自己的最好成绩缩短几秒钟一样,电子商务商家也在努力提高他们商店的转化率。
那么什么是 KPI 呢?KPI 代表关键绩效指标,它们只是企业用来衡量目标绩效和业务整体健康状况的一组指标。为每个企业商定正确的 KPI 非常重要,不要陷入追逐看起来很棒但没有意义的虚荣指标的陷阱。例如,当人们试图减肥时,他们通常会关注 lbs,这是一个虚荣的指标,并不能很好地反映你的整体健康状况。身体质量指数(身体质量指数)可能是一个更好的指标。
同样的事情也适用于电子商务。虽然关注顶线很重要,但关注底线利润也同样重要。如果没有一个盈利的计划,你不可能通过无限期亏损来建立一个可持续发展的企业。
接下来,我们将谈论一些熟悉的 KPI,如 AOV 、回购率。我们还将涵盖一些您可能不熟悉的指标,如 CLV 、收购流失率和平均。购买间隔天数。
KPI 为什么重要?我为什么要在乎?
如果没有对关键指标的适当测量和跟踪,企业就不知道他们做得有多好,关注什么,以及在哪里寻找改进。这就像盲目飞行或在没有指南针的情况下起航,并希望自己不会坠毁。过去可能有一段时间,只有“卷起袖子,努力工作”的态度会变得很好,但那些日子已经过去了。我们现在拥有的是一个竞争超激烈、进入门槛低的互联网市场,在这个市场上,有人在某个地方做着所有值得做的事情。我们每个人都面临着竞争,只有通过不断地衡量和改进,你才能增加脱颖而出的机会。这不是跟踪所有的事情,而是跟踪正确的指标,并考虑如何移动这些指标来提高您的绩效。
如果你还没有开始学习你的度量标准,你真的应该开始研究它。你可以通过谷歌分析和其他工具在网上自己研究。如果你想马上获得关键绩效指标,你总是可以找到一个分析平台,如细分市场。
KPI 为什么能为我做?
虽然有很多,但我会尝试总结并包括与客户订单相关的最重要的电子商务 KPI。
首先,你有 AOV 、奥普和 ARPU 。他们代表 avg。订单价值,平均值。每个用户的订单和平均订单。每用户收入。这三个指标帮助你理解什么是平均值。顾客在你的商店消费的金额,以及你从每个付费顾客那里获得的订单/收入。对于这些指标,值越高,性能越好。它们是你商店的基础,因为了解你在每个用户订单上的单位经济是否会盈利至关重要。在计算这些指标时,你也必须小心。您应该在计算中排除税收、运费和取消订单,从而使用净收入。如果你没有,它可能会扭曲你的结果,认为你比你做得更好。
接下来,我们有回购利率。我们将重复购买率定义为同一时期内的重复顾客数除以总顾客数。这个指标可以帮助你了解你从回头客那里做了多少生意。一般来说,如果你能从同一顾客那里吸引更多的重复购买,你就能获得更多的利润。为什么?这是一个简单的数学问题,因为你已经预先花了钱来获得用户,所以他们花得越多越好。有一些例外,因为某些项目是一次性购买的产品,回购周期很长。婴儿用品、耐用品等都属于这一类。
最后但同样重要的是,我将介绍三个可能不太熟悉的组合指标,它们是 CLV 、 ADP 和 ACR 。
CLV 代表客户终身价值。顾名思义,这是一个试图衡量顾客一生在你的商店消费潜力的指标,通常具有预测性。理解 CLV 是至关重要的,因为它告诉你在 avg 上的潜在花费。你可以预期,当你计算营销支出等其他费用时,这将进入你的盈亏平衡分析。
ADP 是平均值。购买间隔天数。这个指标描述了你的商店的购买周期,并帮助你判断顾客什么时候可能会回来,什么时候他们可能会有流失的风险。每个产品都有自己的购买周期,你还在你的电子邮件流中使用静态业务规则延迟吗?那么你应该看看你的购买周期。
我们有 ACR,收购流失率。ACR 有时被称为漏桶率,它衡量的是相对于你新获得的用户,你保留用户的情况如何。如果这个比率高于 1,那么你获得用户的速度比你失去用户的速度要快。当它低于 1 时,你可能会有麻烦,因为你失去用户的速度可能比你获得用户的速度更快。
总之,我们讨论了跟踪和持续审查 KPI 以衡量您的业务绩效的重要性。请务必询问您的分析提供商指标是如何计算的,并验证它们是否准确。记住,你不能改进你没有测量的东西。在竞争异常激烈的市场中,你越了解你的客户,你就越有可能成功。最好的方法是通过你的数据。
最后,数据就是力量,我们希望将电子商务数据的力量还给人们。因此,请加入我们,立即开始与您的数据一起增长!
由段制成
在 LinkedIn 或脸书找到我们。
最初发表于【tresl.co】
Ecom 数据系列:什么是需求预测?
原文:https://towardsdatascience.com/data-science-in-ecommerce-what-is-demand-forecasting-43a2da2aadec?source=collection_archive---------26-----------------------
让电子商务数据科学概念变得简单,一次一个主题。
几代人以来推动零售和物流运作的黑魔法。
Ecom Data Talk Episode 4: What is Demand Forecasting?
了解过去的事件以预测未来的销售📈📊是零售和电子商务运营的基础优化。
在您准确衡量您的定价和促销效果之前,库存计划感觉像是猜测。更糟糕的是,如果你错误地归因于这些影响,它可能会导致利润的侵蚀和销售的损失。
需求预测是通过测量定价、促销、季节性和假日影响来估计未来销售的练习。它不仅有助于库存规划和谈判,而且可以衡量客户对您的定价和促销活动的反应,从而帮助优化营销活动。最后,随着对你的假日效应的深入了解,你可以在一年中的关键时刻防止缺货把钱留在桌子上。
Photo by Adeolu Eletu on Unsplash
什么是需求预测?
这个问题有两个部分——什么是需求,什么是预测。
那么什么是需求呢?来自维基百科 : 需求是消费者在一定时期内愿意以各种价格支付的一种商品的数量。广义来说,需求就是人们想要的东西。按照目前的价格,预计特斯拉 Model 3 在 2019 年的销量将在 37 万至 42 万辆之间。如果你将价格提高 50%,那么这个数字可能会大幅下降。下降多少由我们称之为需求弹性的指标来衡量,我们将在后面讨论。另一方面,预测是对给定时期内事件未来结果的估计。当你把两者放在一起时,它会突然变成一个引人注目的概念。你能告诉我在不久的将来我可能卖多少吗?
当然,对某样东西的真实需求是不可知的,因为你不可能调查所有人。你可以在 FB 上接近这一点,它拥有世界上三分之一的人口——这就是它如此强大的原因。其次,需求通常滞后于供给。如果你只有 500 件 t 恤要卖,而你在 30 分钟内就卖完了,你怎么真正知道有多少需求?尽管如此,需求预测仍然是一个强大的工具,可以帮助电子商务商店了解客户在价格、促销方面的行为,以及当 BFCM 到来时需要做多少计划。
为什么需求预测很重要?我为什么要在乎?
正如我们刚刚讨论的,不是每个人都知道你的产品和服务。然而,如果你已经正确地建立了你的获取渠道,你应该每个月都把人们送到你的网站上。
100 名访客中,有 60 人立即返回,30 人点击,10 人加入购物车,最后,3 人完成了结账流程。那么什么是需求呢?好吧,实际需求是为商品或服务付款的 3 个人,但也许我们可以把有购物车的 10 个人视为潜在需求。
Photo by Charles 🇵🇭 on Unsplash
也许他们没有完成购买,因为他们不喜欢这个价格。或者运输成本太高。或者交货时间太长。或者,他们只是改变了想法,找到了更好的。这样你就可以根据潜在和未来的需求来测试你的定价和促销方案,看看它对转化有什么帮助。在收集了客户对不同价格和促销水平的产品的需求信息后,您可以开始使用流量数据根据您的潜在需求预测未来的销售。在与供应商谈判时,改进的销售预测是一个非常有力的计划工具。想象一下再也不会把钱留在桌子上,当人们拿出信用卡准备购买而没有存货出售的时候。最后,您可以提前备货,从而减少交付时间,为客户提供更好的体验。
为什么需求预测对我有用?
需求预测不仅是了解将会有多少销售额,也是了解你的业务。是以 49 美元的原价显示 39 美元的销售价格,还是提供 10 美元的优惠优惠券?如果您提供 15%的折扣、25%的折扣和 50%的折扣,您希望销售多少?当黑色星期五网络星期一来临的时候,我应该期待多少销售额,这样我才能做好准备?
如何入门?嗯,需求预测通常涉及统计或机器学习模型,以解释与销售相关的定价、促销、季节性和假日的影响。
Photo by Artem Beliaikin @belart84 on Unsplash
价格效应由价格弹性来衡量,价格弹性是单位数量的变化相对于价格变化的比率。如果我们把一个产品的价格降低 10%,而数量增加超过 10%,那么比率大于 1,我们说这个产品是有弹性的。如果比值小于 1,那么我们称之为无弹性。大多数消费品都是有弹性的,卫生纸就是一个例子,人们倾向于在打折的时候多买一些。相反,大多数处方药是无弹性的,一个例子是胰岛素,糖尿病患者无论价格如何都必须购买。
促销效果是衡量销售量相对于促销水平的变化:10%或 25%的折扣,或不同类型的广告,如买一送一,或免费送货优惠。
季节性效应是一年中发生的销售量的周期性变化,通常以周或月来衡量,有时以天来衡量。这些周期通常反映了相对于人们钱包的消费行为。你可能会注意到,当人们有更多的可支配现金时,月初的销售额会更高,随后在月底账单到期时,销售额会下降。
Photo by Mein Deal on Unsplash
最后,节日效应。节日效应通常在短时间内销量急剧增加时形成,如黑色星期五、圣诞节、劳动节、7 月 4 日等。不仅大多数商店都计划在这些时间进行促销,而且消费者也希望利用这些销售机会,并处于购买心态。取决于你的产品系列,某些节日可能与你更相关,比如情人节前后的珠宝或浪漫产品。衡量上述协同效应至关重要,这样才能知道是什么在推动变化。
当然,也有你无法控制的外部因素,比如宏观经济、政治、贸易战等等影响到每个人的因素。但是你越了解你的价格和促销效果,你就越有可能得到可靠的预测。
总的来说,我们讨论了需求预测的好处,以及在衡量需求时应该采取的措施。明确你的预测将为你的库存计划和谈判提供一个有用的工具。衡量您的定价/促销的影响将有助于您向合适的人优化您的营销方案。预测季节性/假日效应可以帮助您在一年中的关键时期防止缺货。
最后,数据就是力量,我们希望将电子商务数据的力量还给人们。因此,请加入我们,立即开始与您的数据一起增长!
由段制成
在 LinkedIn 或脸书上找到我们。
【tresl.co】原载于
Ecom 数据系列:Shopify 订单数据中有什么?
原文:https://towardsdatascience.com/data-science-in-ecommerce-what-is-order-data-e2a8430abbc0?source=collection_archive---------25-----------------------
让电子商务数据科学概念变得简单,一次一个主题。
电子商务中最重要的表格第 1 部分,共 3 部分
Ecom Data Talk Episode 5: What is Order data?
【什么是订单数据是电子商务中最常用的表的 3 部分系列的第 1 部分:订单、产品和客户。我们将使用 Shopify 的数据 API 作为例子。由于大多数数据平台都有相似的结构,因此该分析也适用于其他平台。]
我的朋友经常问我为什么选择 Shopify 来建立 SaaS 业务,Shopify 和亚马逊有什么不同?答案很简单:商家拥有数据的可用性。
亚马逊是一个聚合器(关于这个的更多信息,请看本·汤普森的聚合理论)。虽然它为高意向在线购物者提供了大量的 AmazonPrime 和潜在销售额,但它垄断了客户关系。
Shopify 则完全相反。表面上看,更像是一个简单的建站者。在后端,它就像一个基于云的销售点系统,简化了计费、订购、库存和托管。它允许任何人在 30 分钟内开始在线销售,这就是 Shopify 的强大之处。
Aggregation Theory — source (https://stratechery.com/2015/aggregation-theory/)
这是销售一个梦想——任何人都可以成为百万富翁电子商务企业家,机会的伟大均衡器。
Shopify 投资于简化商家的数据。他们帮助商家跟踪、存储和维护来自他们商店的所有数据。他们的基础设施不仅为商家带来巨大的利益和成本节约;它也是数据科学家的完美乐园。
在细分市场,我们希望让数据科学变得触手可及。我们希望向 Shopify 等平台上的数百万中小型企业数字原生品牌提供科技巨头和大品牌享有的相同数据科学见解。
这就是为什么我们做我们所做的。
太多的人不知道什么是可能的,也不在乎去发现。我的目标是通过提供简单的解释来改变这一点,这样人们就可以知道什么是可用的,理解什么是可能的,并建立一个有利可图的生意。
什么是订单表?
一切从订单表开始。在一排排的交易日志下面埋藏着数据科学的小金块,可以用来理解客户行为。
将订单数据视为 excel 中的一行,包含订单、客户和产品的相关数据。我们大多数人以前都见过这样的数据。这叫收据。
它说约翰在特定的日期用信用卡在特定的地点花了 3.23 美元买了一杯咖啡。订单表可能包含从简单到复杂的各种信息。然而,它应该始终包括关键信息:谁是客户,他们购买了什么产品,以及订单本身的详细信息。
如果您正在使用 Shopify,您是否想过 Shopify 会代表您收集客户订单的哪些信息?
订单表中有什么?
如前所述,order 表包含关于谁是客户、他们购买了什么产品以及订单细节的信息。
让我们把注意力集中在订单细节上。
首先,我们有时间:这是订单开始和结束的日期。它们不仅可以帮助你记账,还可以汇总几天、几周、几个月或几年的订单,以发现趋势并评估业绩。
接下来是支付信息:价格、折扣和结账。
有两种类型的价格被跟踪——总价和小计价格。小计价格是不含运费和税金的折扣后的标价,总价包含运费和税金。使用小计价格来计算 KPI 和指标通常更准确,因此运费和税费不会影响您的结果。
Photo by Daniel von Appen on Unsplash
折扣是促销,这里有一些信息,折扣代码、折扣类型、折扣级别,以及它是否适用于产品或运输。促销与价格密切相关,有助于吸引顾客。此处获取的额外细节可以帮助您评估哪种类型、哪种级别的促销最适合不同类型的客户和产品。
收银台记录了顾客选择付款的方式,他们是通过在线收银台、Paypal 还是其他电子支付服务付款。通常,人们可以支付的方式越多,就越有利于转化。掌握客户付款信息的详细信息可以帮助您对客户群进行细分,以查看他们的平均价格是否有差异。订单价值或客户终身价值。
最后,我们有网站流量信息。
我们从源头开始。“来源”字段告诉您订单来自哪里。他们是使用网络浏览器、智能手机(iPhone vs. Android)订购的,还是您手动创建的。
example google analytics page
然后我们有了登陆网站,它跟踪客户访问你的网站时看到的第一页。当客户直接输入你的网址,或者从谷歌搜索中查找时,他们通常会登陆主页。然而,如果他们通过电子邮件或广告点击,那么他们可能会登陆你选择的页面。
最后,推荐网站获取关于你的推荐流量的信息。推荐流量是来自你的社交媒体参与、媒体报道或合作伙伴渠道的网络流量。例如,有人点击你的脸书广告,Instagram 影响者的帖子,或者你的电子邮件简讯,都在计算你的推荐流量。你有没有注意到你点击的网址末尾有额外的代码?这些胡言乱语包含了谷歌分析用来显示你的流量来自哪里的信息。
您可以看到 Shopify 为商店捕获了相当多的订单信息。接下来,我们将看一些例子来说明为什么你应该关心。
订单数据能为我做什么?
当您汇总每个客户的多次购买时,您可以查看订单之间的时间,以找出第一个订单和第二个订单之间的平均天数。一旦汇总,我们可以检查季节性和假日模式,这样我们就可以更好地为那些大的假日高峰做准备,并避免代价高昂的缺货。
至于 KPI,平均订单价值(AOV)、平均每用户收入(ARPU)和重复购买率是可以用订单表构建的一些例子。
Segments Executive Summary (https://segments.tresl.co/)
商家经常想知道是否进行 10 美元折扣的促销比 10%折扣的促销更好。看看提供免费运输是否比 25%的折扣更有利可图?
我们可以研究历史促销来帮助找到这些问题的答案。
一旦你知道客户如何访问你的网站,以及他们如何选择支付,你就可以细分你的客户,找到有利可图的渠道,并优先考虑收购努力。这些都是您可以用来优化运营、增加销售和收入的信息。
总之,我们讨论了订单表中包含的信息、它们的含义以及可能的分析。重要的是要知道你能得到什么信息,这样你就能充分利用它们并制定你的策略。研究什么是可用的,了解什么是可能的,并通过数据驱动的决策建立一个有利可图的业务。
最后,数据就是力量,我们希望将电子商务数据的力量还给人们。因此,请加入我们,立即开始与您的数据一起增长!
由段制成
在 LinkedIn 或脸书上找到我们。
原载于tresl.co
Ecom 数据系列:Shopify 产品数据中有什么?
原文:https://towardsdatascience.com/data-science-in-ecommerce-what-is-product-data-66641c09dc6b?source=collection_archive---------28-----------------------
让电子商务数据科学概念变得简单,一次一个主题。
电子商务中最重要的表格第 2 部分,共 3 部分
Ecom Data Talk Episode 6: What is Product data?
如果不知道沿途购买的产品,顾客的旅程就不完整。所有的生意都建立在理解顾客的口味,并根据他们购买的产品推断他们是什么样的人,他们可能喜欢什么的基础上。例如,网飞仔细检查了每一个标题中每一个场景的每一分钟的细节。他们付钱给数千名人类评论者,让他们给你能想到的几乎任何东西贴上标签,比如男演员/女演员、情绪、地点、地标、色调、文化背景等等。这些标签成为关于标题的元数据,用于构建描述不同标题的 70K+子分类。所以是的,他们知道你是谁。(来源:https://www . theatlantic . com/technology/archive/2014/01/how-网飞-逆向工程-好莱坞/282679/))
Photo by freestocks.org on Unsplash
你说这和电子商务有什么关系?虽然没有必要走网飞路线,但我们都可以想出独特的标签来描述你店里出售的产品类型。从简单的标签,如颜色、性别、产品类型和尺寸,到更高级的标签,如“夏季”、“花卉”、“奢侈品”或主题标签,如“动漫”、“权力的游戏”。这些都可以作为制作有用的客户档案和改善客户体验的有用元数据。接下来,让我们从基础开始,看看产品表中包含哪些常见的数据类型。
什么是产品表?
产品表通常存储描述产品的信息。它包括标题、产品类型(是一条牛仔裤还是一双鞋)等信息,以及颜色和尺寸、价格和成本等其他属性。它通常还有某种产品层次结构信息,也称为消费者决策树。消费者决策树代表了购物者在面临购买决策和选择时的购物方式。
Photo by Raquel Martínez on Unsplash
例如,如果我想买发胶,也许我首先要决定我是喜欢液体发胶、发蜡还是润发油。然后,也许我会检查品牌,我是否喜欢这种气味,它是否在我的价格范围内。
通过了解消费者如何购物,您可以构建您的产品类别、产品系列,甚至优化标题和描述,以便让您的客户清楚地做出选择。
让我们再看一下 Shopify 的产品表,看看我们通常可以获得哪些数据,以及它们为什么重要。
产品表中有什么?
让我们把它分成 3 个部分:属性、集合和关联。
在属性中,你有价格。价格通常是人们看到的第一件事。你可以通过设定一个更高的原价来固定人们的看法,同时降低销售价格,使产品看起来更有吸引力。注意标题和描述——不仅要准确和吸引人,还要考虑如何优化搜索引擎优化,让它们更容易被搜索到。
然后是产品选项,在 Shopify 的术语中称为产品变体。变体是相同的产品,但具有不同的尺寸、颜色或材料。您可以决定每个产品是独立的还是现有产品的变体。
还有一个字段让您记录产品的供应商名称。
然后,我们有产品系列。该系列是一套产品。您可以通过基于规则的方法(在 Shopify 中称为智能收藏)来创建它们,或者手动创建它们。一些典型的例子包括“新品发布”、“畅销商品”、“销售商品”,你也可以根据不同的产品类型、顶部与底部,或按性别(男性和女性)创建系列。当你有大量的 SKU 时,当人们在你的网站上进行搜索时,通常很难返回相关的结果。因此,你如何组织你的产品,让它们更易购买变得更加重要。此外,产品在每个系列中的位置对转化非常重要。理想情况下,你可以根据购物者创建不同的个性化收藏,并将更相关的商品放在首位。
Photo by Jessica Ruscello on Unsplash
然后我们有产品关联,在 Shopify 中称为标签。标签是由逗号分隔的任何文本,每个产品最多可以有 250 个标签。标签是一种灵活的方式,您可以按照自己喜欢的方式对产品进行分组。也许你有《权力的游戏》主题的物品,你想给它们贴上“权力的游戏”的标签,放在一个收藏里。或者你有一个“全黑”系列,因为你知道你的顾客中有一小部分人只喜欢买黑色商品。使用标签,您可以根据顾客的购物方式创建产品系列,并根据他们的口味进行定制。
接下来,我们来看几个例子,看看为什么你应该关心。
产品数据能为我做什么?
我们可以了解每个地区的产品购买趋势,并找到针对每个地区进行优化的机会。
我们可以在我们的产品组合中识别流量驱动因素、销量领先者和摇钱树。
我们还可以执行购物篮分析,以查看哪些商品是经常一起购买的,或者是同一个人在不同时间购买的。
通过了解经常一起购买的产品,我们可以为追加销售、交叉销售和捆绑销售提供更好的建议,从而提高平均订单价值和收入。我们还可以测试产品变体的不同价格。也许红色能卖得比黄色高。
只需 2 张桌子、订单和产品,就有机会让您的收入和运营增长一倍以上。
总之,我们看了产品表中的内容,它们的含义,以及如何更好地组织它们以提高可发现性并使您的网站更具可购买性。重要的是,不仅要找到顾客喜欢的产品,还要考虑如何根据顾客的购物方式来组织这些产品。拥有更多变体有助于转化,拥有互补产品可以增加 AOV。
使用产品购买来构建客户档案,帮助您了解您的客户,并建立细分以提高投资回报率。
最后,数据就是力量,我们希望将电子商务数据的力量还给人们。因此,请加入我们,立即开始与您的数据一起增长!
由段制成
在 LinkedIn 或脸书上找到我们。
原载于tresl.co
国际发展中的数据科学
原文:https://towardsdatascience.com/data-science-in-international-development-part-i-working-with-text-44ebb6e0feef?source=collection_archive---------17-----------------------
第一部分:使用文本
由 合著凯尔西·巴顿-亨利 ,版本和图片由 米格尔·瓦雷拉 。
今天,头条新闻充斥着关于人工智能(AI)能够做以前只有人类才能做的事情的说法。识别图像中的对象、响应语音查询或解释复杂的文本实例等等。但是 AI 应用是如何工作的呢?在国际发展和安全领域有哪些人工智能解决方案?在这篇文章中,我们总结了一些计算机使用机器学习处理人类语言并做出反应的基本技术,使用了我们在AK tek的几个项目中的真实场景。
Image: AKTEK Ltd
开发人员经常处理大量的文本和语音数据。这些数据包含了理解冲突和社会动态的关键信息。近年来,社交媒体、新闻和其他文本存储和共享机制产生了更多的数据。因此,能够快速准确地处理文本比以往任何时候都更加重要。人工智能可以提供帮助。
人工智能处理文本的领域被称为自然语言处理(NLP)。NLP 技术是许多众所周知的应用的基础,包括垃圾邮件过滤器、互联网搜索引擎、对话机器人、推荐系统、客户服务应用和机器翻译。驱动所有这些工具的核心技术之一叫做文本分类。
文本分类是机器学习的一部分,在机器学习中,计算机学习以高精度自动将给定的文本分配到特定的类别,然后它可以重复这样做,而无需进一步的人工干预。
在 AKTEK ,我们已经利用自然语言处理和文本分类来创建在该领域有效的技术解决方案:检测在线的潜在有害的极端主义内容,或者帮助揭露在线传播的虚假信息。
检测在线极端主义
我们的旗舰 NLP 项目涉及检测欧洲某个国家的在线极端主义。我们建造、训练并部署了一个能够准确识别网上极端主义文本的探测器。
为了建造它,我们与当地环境和语言的研究专家一起工作。第一步包括研究人员审查和标记我们从选定的在线公共平台提取的不同文本样本。他们研究了这些内容,并根据当地的政治背景将每一篇文章标记为极端主义或非极端主义。
这种监督为我们提供了足够的标记数据来驱动机器学习引擎。我们利用这些数据,设计了一套算法来寻找数据中的模式,并学习复制和推断研究人员的决策过程。因此,我们有了检测器,它可以从几个在线公共平台接收文本,并提供与文本与不同类型的极端主义和仇恨言论相关联的概率相关的分数。
这个人工智能引擎允许我们自动处理来自在线领域的数百万条评论,这是手工不可能做到的。与我们的专家研究人员一起,我们建立了一个由数据驱动的网络空间极端主义的图片,以支持政策制定和安全。
打击虚假信息
按照类似的过程,我们开发了一个原型来检测和揭露网上虚假信息。这个原型是在经过事实检验的新闻文章上设计和训练的。通过这种方式,它能够在真实和虚假的文本中找到共同的语言模式,这些模式表明真实的新闻或虚假信息。
在这种情况下,我们发现单靠文本不足以检测虚假信息:我们还为我们的算法提供了关于文章在哪里发表、文章来源、作者是谁以及文章如何在社交媒体上分享(以及由谁分享)的数据。
包含这些信息使我们能够分析社交媒体中精心策划的活动的常见模式以及机器人的存在。有了这些数据的组合,我们的原型已经能够达到类似于文献中发表的针对特定场景的一些最先进的人工智能研究的精确度。
这个项目的目的是提供一种探测器,可以近实时地在线标记虚假信息。我们旨在帮助记者、出版商、政策制定者,尤其是媒体消费者更好地理解虚假信息的本质,并保护自己免受虚假信息的攻击。
目前,这个原型只在一小部分标签数据样本上进行了测试。现在估计原型的性能将如何外推到现实世界还为时过早,但我们正在朝着这个方向采取措施,寻找编辑更多事实核查文章的方法,并包括跨来源的自动事实核查过程。
这两个项目都基于文本分类、自然语言处理和其他机器学习技术。但是它们是如何工作的呢?
工作原理:自然语言处理和文本分类
计算机是如何处理文本的?
如今,为大多数强大的人工智能应用提供支持的机器学习技术是……数学算法。这意味着,这些技术的核心是处理数字。图像(或视频)识别将像素颜色亮度作为数字输入进行处理;声音信号被数字化并被转换成用于语音到文本应用的振幅和频率。我们如何将文本转换成数字是我们在这篇文章中讨论的任何项目的关键步骤之一。这个过程叫做文本矢量化。
文本矢量化:从单词包……
最基本的——尽管通常很强大——矢量化技术是基于计算文本中的词频。这些数字可以用来填充一个矩阵,这给了我们继续前进所需要的数字。毕竟,在进行文本分类时,直觉地认为某些词的出现和重复与文本所属的类别有很强的相关性,对吗?
当然,这是一个巨大的过度简化。事实上,以这种方式计算单词可能会导致一些被多次提及的单词权重过大,但这些单词并没有为手边的文本分类带来任何信息。这就是为什么在一篇文章中有几种“计算”单词的方法。在某些情况下,删除“停用词”(即非常常见的词,如‘the’,‘a’或‘is’)以提高算法的性能。
这些类型的单词对文本意义没有显著贡献,因此不能帮助确定其类别,所以最好将其删除。在其他情况下,这些常用词的权重会降低,以降低它们的重要性。有关更复杂的矢量化方法的示例,请参见词频逆文档频率。
如果一个单词拼错了怎么办?我们如何解释同一个单词的多次倾斜?有几种方法可以处理这类问题,比如词汇化和词干化。另一种处理方法是计算字符集(也就是字母),而不仅仅是单词。
你可能会注意到,使用字符和单词作为文本单元来分解句子会使我们丢失部分上下文信息。为了部分克服这一点,我们不仅计算单词和字符,还计算 2、3 或更多的组合。这些组合被称为 n 元语法。
…到单词嵌入
然而,复杂分类问题的挑战是,即使使用 n 元语法,我们仍然可能丢失部分上下文含义。在计算上,这些方法也具有挑战性,因为它们导致必须由计算机处理的巨大矩阵,并且难以在存储器中维护。
更糟糕的是,那些巨大的稀疏矩阵(大部分是 0 的矩阵)使得算法很难学习和避免过度拟合。这被称为维度诅咒。因此,我们必须认真实施一个非常稳健的统计框架,以控制这些问题的影响。对于这些更复杂的任务,我们可以使用单词嵌入方法来提高性能。
开发单词嵌入是为了克服上述的一些限制,并捕捉更多的语义信息和语言中单词之间的关系。为了构建单词嵌入,我们首先对大量无监督的文本数据进行数学处理。然后,我们让一个算法(通常是一个狭窄的神经网络)学习预测一个单词是否属于给定的上下文(或者反之亦然)。
在这个过程的最后,计算机仍然不会像人类一样理解单词的意思。但是通过这种重复查看文本的统计过程,它将“学习”以有意义的方式向量化单词。语义和句法关系将出现在这个新的数学超空间上,检查一下可以获得的常见类比,有些真的很神奇。
Image: AKTEK Ltd
此外,单词嵌入的构建使得我们必须处理的数字矩阵不再像以前那样庞大和稀疏。在单词袋模型中,一整段文本被转换成稀疏的一维向量(具有几十万维或更多维),而在这里,一个单词被转换成密集的一维向量(只有几百维)。
因此,一段文本(多个单词)可以被排列成例如矩阵,一种二维数字结构。然后,这种结构开辟了将深度学习技术应用于文本分类的可能性,为此,文本的顺序和上下文结构使其成为构建翻译系统、聊天机器人或极端主义检测器等东西的合适场所。
当然,这并不是故事的结尾:段落嵌入、字符嵌入、ULMFiT、ELMo…当您阅读本文时,令人印象深刻的新技术正在研究中。
我们如何训练计算机对文本进行分类?
一旦矢量化完成,我们就可以将文本转换成计算机可以进一步处理的形式。但是,即使在将文本转换成数字之后,我们仍然需要教会计算机执行我们感兴趣的特定文本分类。
监督学习
对于这一步,我们需要一个由分析师标记的文本片段(帖子、文档或文章,取决于任务)的智能样本。分析师团队手动将这些文本片段分配到它们相应的类别中,我们认为这种分配是它们各自的基本事实标签。与矢量化的文本一起,基本事实标签形成了训练集,这样我们就可以对文本进行分类了。
存在多种算法来执行这种分类,它们都有各自的优点和缺点。在很高的层次上,算法是数学公式,它对文本向量进行运算,并输出文本属于特定类别的概率。为了能够尽可能准确地对新文本进行分类,算法会尽量减小它们在训练集上的预测与这些相同文本的真实分类之间的误差。
Image: AKTEK Ltd
最小化的过程本身是另一个丰富的数学领域,它通常通过微分、代数和其他强大的数值方法来进行。摄取标记数据并最小化预测误差的过程称为训练。这个过程允许算法学习数据中的模式,这些模式确定一篇文章是否属于特定类别(例如一篇帖子是否是极端主义)。
经过训练后,当算法看到一段新的文本时,它可以在没有任何人工干预的情况下对其所属的类别做出明智的预测。在这个阶段,计算机已经学会了,可以近乎实时地做出新的预测,这个过程现在很容易扩展到海量数据。
Image: AKTEK Ltd
稳健的统计框架
在模型开发和训练的所有部分中,最重要的方面是拥有定义良好的统计框架。为了支持每个模型选择:要做哪些文本预处理(词汇化、词干化、停用词),要使用哪些特定的矢量化(BoW、tf-idf、嵌入),要选择哪个分类器或集成(更简单的算法或复杂的深度学习构造)或如何调整所有这些,我们需要持续评估模型在新数据上部署后的预期表现。这种模型选择通常是通过所谓的验证来完成的。
然后,我们可以通过向最终算法展示它从未见过的新数据,来测试它在数据中发现模式的能力。这个新数据必须与训练集分开保存,在所谓的测试集中。我们通过算法传递这个“新”数据,并将算法的预测与再次从分析师那里获得的真实结果值进行比较。这给了我们一个非常可靠估计,当我们的算法被应用到真实世界应用中的新数据时,它将如何准确地执行。
观点
我们在这里总结的每一种技术背后都有丰富的文献。我们鼓励您进一步调查它们;这个领域当然值得深入研究!这里提到的所有技术,以及更多的技术,正在推动许多现实世界的应用:搜索引擎、翻译系统、聊天机器人、极端主义探测器。
当与研究专家合作应用时,数据科学正在为国际发展和安全领域目前面临的一些最复杂的问题提供答案和解决方案。本条目仅涵盖了基于文本的解决方案的一小部分示例—在以后的条目中,我们将描述使用其他类型数据的方法。
凯尔西·巴顿-亨利合著。最初发布于www . AK tek . io。
库存管理中的数据科学:管理仓库的真实案例
原文:https://towardsdatascience.com/data-science-in-inventory-management-real-case-in-managing-a-warehouse-6259cad17c0e?source=collection_archive---------3-----------------------
在这篇文章中,我们将知道如何用最有效的预算来管理仓库
大家好,欢迎回到另一个关于数据科学的故事!这是一个真实案例,不仅仅是一个理论或学术文章,所以我们将在现实生活中用问题做一个测试实验。所以如果你有任何担心,让我们留下评论,我们可以一起讨论!
思考这个问题
好的,让我们想想你购物时经历的两个购物案例。有一天,你去鞋店决定买一双新鞋,不幸的是,你遇到了问题:
- 你挑选了一个好模特,但是他们没有适合你脚的尺码
- 他们提供了另一款适合你脚的型号,但是你不喜欢
多么糟糕的一天,对吗?
作为店长,他们也不高兴。他们失去了一个顾客——就是你。如果这是你第一次去商店,你会回来吗?当然…“可能吧”。但是如果这是你第二次在这家商店遇到同样的问题,你会回来吗?绝对是店长的噩梦。
找到(达到目的)的方法
那么如果你是在扮演店长的角色,如何避免这个问题呢?当然,我们不能因为我们无法控制同一天会有多少同样款式同样尺码的顾客光顾你的商店。这要看我们的运气了!
然后我们结案,放弃这个问题,试着向我们的大老板解释“好吧,对不起,是我运气不好”?
绝对没有!我们有足够的统计工具来解决这个问题。但是请记住,我们无法确保每位顾客都有自己的鞋子,但是我们可以利用数据科学增加顾客在我们商店找到他们最喜欢的鞋子的机会(所以不要浪费我们的运气)。
查看历史数据
在计划未来之前,我们需要回顾过去的历史——记住这一点!所以第一步,我们需要与销售部门会面,以获得过去几年的销售历史。这是我们从销售部得到的数据(你可以在这里下载
Al Bundy raw data
检查和清理数据
让我们检查一下数据集中的字段:
InvoiceNo、ProductID、Year、Month:它们只包含数字,但它们不是数字字段,而是分类字段
日期,国家:分类字段。我们已经有了日期字段,它同时具有年和月字段的含义,所以我们应该保留日期,并将年和月排除在我们的数据集中
商店:绝对是按国家 ID 分组的分类字段(美国、英国、加拿大、德国)
Size(美国),Size(欧洲),Size(英国):分类字段。但是让我们三思!3 个字段具有相同的含义,因为我们可以使用这张转换图将尺寸(美国)转换为尺寸(欧洲)和尺寸(英国),反之亦然。所以在这种情况下,我们应该只保留 1 个字段作为代表。我会选择美国尺码,因为它看起来比欧洲尺码简单,浮动数字也比英国少。请记住男性和女性的尺寸是不同的,所以不要使用没有性别字段的尺寸字段,否则会犯严重的错误!
性别:另一个基本范畴
单价、折扣、销售价格:数字字段。在进行任何计算之前,我建议我们应该将包含百分比值的折扣字段转换为 float,以便于计算。如果你是一个聪明的人,你可以看到这些场之间隐藏的等式
SalePrice = UnitPrice * (1 — Discount)
…所以我们应该只保留数据集的销售价格
完成这一步后,我们将有一个更简单的数据集:
Cleaning up the data set
分析数据
数据集已经准备好进行分析了!现在我们必须计算前一时期(可能是一年,或一个月……)卖出了多少件商品。在数据分析中,统计单个对象的出现次数称为“频率”。为了计算频率,在这种情况下,我们将通过以下方式对数据集进行分段:
- 国家
- 尺寸
- 性别 (正如我之前提到的,没有性别就不能使用尺寸,所以我们也必须包括性别)
我们的交叉表将只有 2 个维度,但我们这里已经有 3 个维度,所以我们必须按性别将表分成 2 个不同的维度。这是结果:
Sizes distributed by country
定义问题
- 问题:根据我们的观察,有可能售出的鞋子数量(型号、尺码)是多少?
- 条件:我们将以 95%的置信区间找到问题的答案
- 计划:
-使用过去 12 个月的数据集
-使用男鞋数据集
-使用美国数据集
这一步,你会想为什么我们只使用男鞋和美国数据集。让我们想一想:如果一个男人去商店,一个女人会来吗? 我们无法回答,因为在这种情况下性别是相同的。它没有任何反射在一起。另一方面,例如,如果一个孩子去商店,他的父母也很有可能一起去,因为那个孩子不能独自去购物和自己用钱。但是在我们的例子中,如果一个男人去商店,他可以一个人去,或者和他的兄弟,或者和他的女朋友,甚至一群朋友一起去。男访客和女访客的几率没有联系。这就是我们所说的相同的。
当然,国家和性别是一样的,他们都是一样的。
那为什么要设置 12 个月的数据?因为足够了代表一年的完整周期。购物行为大多基于一整年的周期,如:年终大甩卖,黑色星期五,公司的周年促销,人们可能会在冬天到来时更换鞋子(以购买更暖和的鞋子)…
Men shoes sold in 2016 distributed by Size and Month
将数据放入热图,让我们看看数据集中隐藏的信息
Men shoes sold in 2016 distributed by Size and Month — Heatmap on Tableau
现在我们可以很容易地看出隐藏的信息:
- 太小的尺码(6 至 7.5)和太大的尺码(13 至 16)不受欢迎。所以,一个人来我们店里买这双鞋的几率非常低,尤其是超大号的 15 和 16 码——我们全年都没有卖出过这个尺码的鞋!
- 平均尺寸(9 到 10.5)看起来很不错。美国男人的脚的尺寸是 9.5,似乎超出了其他尺寸的数量。专注于生产和储存这种尺寸的鞋子,我们有很大的机会去卖鞋子和赚钱!
但这只是高水平的考试。继续深入挖掘,揭示我们的数据集隐藏的全部隐藏信息。
计算
因为我们有 17 种不同的鞋码(仅限男士——基于我们的计划),所以我们需要计算 17 种不同的 CI(置信区间)。首先让我们用 Microsoft Excel 的=average(number1, [number2]...)
函数来计算平均值(在这篇文章中,我不会过多提及编程。只是坚持吻校长)
Men shoes, US 2016 & Mean
我们确实不知道人口方差并且我们的数据集仅包含 12 个观察值(由 2016 年的 12 个月表示),那么我们必须使用 T 统计量。
让我们在 T-统计表中找到 11 个自由度的 95%置信区间的值!
让我们解释一下,以防你担心:
- 11 是用
df = n— 1
(n = 12)计算的 12 个月的自由度 - 0.025 是使用
SL = (1 - CI) / 2
计算的 95%置信区间的显著水平(更喜欢下图)
Probability Density 2 tails
好吧!查看下面的 T 统计表,我们可以发现的 T 值是 2.201 (正好在红色列和蓝色行的交叉点)
T-Statistic Table of 95%CI (0.05%SL) and 11DF
T-Statistic Value
现在,让我们计算标准误差和边际误差!
在 Microsoft Excel 中,可以使用以下公式计算标准误差:
=STDEV.S(number1, [number2]...)/SQRT(n)
使用:
- 数字 1,数字 2…是卖出的鞋子的数量
- n = 12(月)
和Margin Errors = Standard Errors * t(11, 0.025)
Mean, SE, and ME
最后一个,计算置信区间
Confidence Interval formula
我知道你对上面的公式感到头疼,但是等等!我们已经有了均值和边际误差,对吗?那么我们可以计算 CI 为(Mean — ME; Mean + ME)
Mean, SE, ME, and CI(95%)
在 95%的情况下,每双鞋销售的真实总体平均值将落入各自的区间。CI 的上限值(上限或更高的值)向我们显示了所需鞋子的最大数量。反之亦然,因为它们是卖出的鞋的最小数量。因为我们不想库存太低,所以解决这个问题的一个可能的办法是,尽可能多地购买最接近最大销售可能性置信区间上限的双鞋。当然,我们需要储存超过 CI 地板限制的,以确保所有顾客(男性,有特定鞋码)都能买到他们喜欢的鞋子,而不是因为商品缺货而不买就离开我们的商店。
让我们总结一下 CI,看看:
Conclusions based on sample data set
我们解决问题了吗?
没有!别怪我
- 好吧。这是 2016 年的结论,但现在是 2019 年,我们可以使用它吗?绝对是!我们可以计算 2017 年、2018 年,然后取它们的平均值,给出 2019 年的预测
- 由于其他因素,2019 年的预测可能不正确,例如:今年的流行趋势发生了变化,人们更喜欢使用运动鞋而不是鞋子;或者我们旁边刚开了另一家鞋店。但是这篇文章只分析了历史数据
- 这篇文章我们使用了美国 2016 年的数据,并且只分析了男人的尺寸。因此,如果你是一名商店经理,你必须对女性进行同样的分析,以便对你的商店有更全面的了解
延伸!让我们再深入一点
我想知道你是否注意到在之前的“基于样本数据集的结论”图片底部的数字 105 和 175。这是什么意思?
- 105:卖出最少数量的鞋子。所以作为商店经理,我们必须准备足够多的库存来储存这些鞋子,否则我们就会缺货
- 175:库存大是好,但没必要库存巨大!大到可以存放 175 双就够了。请记住,您的库存越大,管理费用就越高
你穿 16 码的有什么?如果你的眼睛足够敏锐,你可以看到没有这种尺寸的产品出售。让我们检查一下 2017 年和 2018 年的数据。如果没有商品售出,你需要停止生产或进口这种尺寸的商品
如果你的库存不够大,不能存放最少数量的鞋子怎么办?别担心。这是全年售出的商品数量。让我们来看看这篇文章顶部的热图,你可以看到 12 个月内的分布情况。将每个数字(每月)转换为频率—该月占全年的百分比。你可以计算出哪个月我们卖得最多,仔细检查库存,准备进口计划,然后你就不用担心供求趋势了
结论
- 数据分析不能帮你回避问题,但是帮你反映历史数据预测未来趋势
- 在数据科学和统计学中,我们不保证任何事情,我们只是根据有多少信心给出结论(这个帖子是 95%)
- 而最后一个,你可以通过频繁分析历史数字来增加自己的信心。保持每年、每月或每周更新。更新数据越频繁,预测的准确性就越高
再次感谢您的阅读时间。
天天快乐学习!
生产中的数据科学
原文:https://towardsdatascience.com/data-science-in-production-13764b11d68e?source=collection_archive---------8-----------------------
Source: https://pixabay.com/photos/factory-industry-sugar-3713310/
用 Python 构建可扩展的模型管道
作为一名数据科学家,我最大的遗憾之一是我太久没有学习 Python 了。我一直认为其他语言在完成数据科学任务方面提供了同等的优势,但是现在我已经跨越到 Python,没有回头路了。我已经接受了一种语言,这种语言可以帮助数据科学家快速地将想法从概念变为原型并投入生产。最后一个术语, production ,可能是不断发展的数据科学学科中最重要的方面。
知道如何建立机器学习模型是有用的,但像 AutoML 这样的新工具正开始将数据科学家的工作商品化。现在,您可以构建健壮的模型,扩展到产品组合,而不是让数据科学家为单个产品构建定制模型。随着新角色的出现,如应用科学家,混合了人工智能工程和数据科学的能力,数据科学有了新的机会。
在我目前的职位上,我是数据产品开发的先锋,这些产品实现了数据科学的承诺,我们构建了组合规模的系统来提供预测信号。我们希望建立我们的产品团队可以使用的生产质量系统,我希望为下一批数据科学家提供学习材料。这就是为什么我决定写一本关于 Python 的书,因为我想提供一个文本,清楚地阐明从产品到应用数据科学的过渡需要学习哪些技能。我们的目标是为分析从业者和数据科学毕业生提供参考,通过实践经验提升他们的技能。为了交付数据产品,这本书将通过大量的例子从你的本地机器到云再到无服务器。
自助出版
虽然我有机会与大出版商合作,但我已经决定为这本书寻求自助出版。我完全承认,这本书的质量不会与出版商支持的质量相同,但我觉得这将是一个更加开放的创作体验。我的计划是用 bookdown 来创作和设计这本书,用 Leanpub 来发布并获得反馈。
从经济角度来看,写书对作家来说通常不是一笔大的支出。自助出版有可能获得更高的版税,但你可能会失去更多的读者。除了版税,我想自己出版的原因如下:
- 时间线:你想写就写,根据需要回复社区反馈。你决定哪些问题是最重要的。
- 所有权:对我来说,与传统出版商打交道最大的恐惧就是写完一本书的大部分内容,然后把它打包。我想写博客并获得反馈,拥有我写的所有东西。
- 内容:各大出版社希望书籍能涵盖相关主题,比如 GDPR,但这超出了我希望涵盖的范围。
- 也许对我来说最重要的一点是,我希望能够为我的书开展营销活动。然而,像亚马逊赞助这样的事情通常不会在合同中提及。
- 工具:我可以使用我认为最适合工作的工具来写我的书,并避免格式之间的翻译问题。
虽然与出版商合作是一种选择,但我决定单干,安德烈·布尔科夫是我追求这一选择的最大灵感之一。有许多开放的工具可以用来设计你的书,在出版前获得反馈,建立一个社区,并重复你的工作。
我出版这本书的计划是在 Leanpub 上提供早期访问,在 GitHub 上发布代码示例,并在媒体上分享摘录。
[## 生产中的数据科学
从初创公司到数万亿美元的公司,数据科学在帮助组织最大化…
leanpub.com](https://leanpub.com/ProductionDataScience/)
书籍内容
这本书的主题是采用简单的机器学习模型,并在多个云环境的不同配置中扩展它们。这本书假设读者已经具备 Python 和 pandas 的知识,以及一些使用 scikit-learn 等建模包的经验。这是一本关注广度而非深度的书,目标是让读者接触到许多不同的工具。虽然我将探索一些我以前在博客上写过的内容,但这将是所有新的写作。以下是我打算在文中涉及的内容:
- 简介:这一章将推动Python 的使用,并讨论应用数据科学的学科,展示全书中使用的数据集、模型和云环境,并概述自动化特征工程。
- 模型作为 web 端点:本章展示了如何使用 Web 端点来消费数据,并使用 Flask 和 Gunicorn 库将机器学习模型作为端点。我们将从 scikit-learn 模型开始,并使用 Keras 设置深度学习端点。
- 模型作为无服务器功能:本章将建立在前一章的基础上,并展示如何使用 AWS Lambda 和 GCP 云功能将模型端点设置为无服务器功能。
- 可重现模型的容器:本章将展示如何使用容器来部署带有 Docker 的模型。我们还将探索使用 ECS 和 Kubernetes 进行扩展,以及使用 Plotly Dash 构建 web 应用程序。
- 模型管道的工作流工具:本章重点介绍使用 Airflow 和 Luigi 安排自动化工作流。我们将建立一个模型,从 BigQuery 中提取数据,应用模型,并保存结果。
- 批量建模的 PySpark:本章将向读者介绍使用社区版 Databricks 的 PySpark。我们将构建一个批处理模型管道,从数据湖中提取数据,生成特性,应用模型,并将结果存储到一个非 SQL 数据库中。
- 批量建模的云数据流:本章将介绍 GCP 云数据流的核心组件。我们将实现一个批处理模型管道,使用这个工具获得与前一章相同的结果。
- 模型工作流的消息系统:本章将向读者介绍 Kafka 和 PubSub 在云环境中的消息流。阅读完这些材料后,读者将准备好使用 Python 来创建流数据管道。
- 使用 PySpark 和 Dataflow 的流式工作流:本章将展示如何结合使用消息系统和第 6 章& 7 中介绍的批处理模型管道来创建低延迟的流式模型管道。
- 模型部署:本章将讨论使用模型存储时将模型产品化的不同方法,并将提供 Jenkins 用于持续集成和 Chef 用于以编程方式支持模型服务的例子。
- 模型生命周期:本章将讨论对已部署模型的监控和变更选项,并提供检查数据沿袭和模型漂移的例子。它还将涵盖模型剧本和事后分析的主题,以及发生故障时的通信处理。
阅读完这些材料后,读者应该对构建数据产品所需的许多工具有了实践经验,并对如何在云环境中构建可扩展的机器学习管道有了更好的理解。
结论
应用科学是 ML 工程和数据科学交叉的一个成长领域。这个领域的需求正在增长,因为投资组合规模的数据产品可以为公司提供巨大的价值。为了帮助满足这种需求,我正在写一本书,重点是用许多承担应用科学角色所需的工具来构建 Python 的实践经验。我正在使用 Leanpub 自行发布这篇文章,并启用社区反馈。
本·韦伯是 Zynga 杰出的数据科学家。我们正在招聘!
数据科学:在任务中,而不是在标题中
原文:https://towardsdatascience.com/data-science-in-task-not-title-65eaa676f423?source=collection_archive---------29-----------------------
数据科学是目标;我们中的一些人可能在我们意识到之前就已经在那里了。
TL;公平博士警告:本文更多的是启发他人。我最后给出的建议对我有用,也希望对阅读这篇文章的人有用。
Photo by Vladislav Klapin on Unsplash
你好世界!我有消息告诉你;我是一名数据科学家。或者至少我认为自己是。多年来,数据科学家的定义在很大程度上已经固化为高调的人工智能和人工智能初创公司,他们是工作描述和团队结构的先驱。然而,我不在这些团队中的任何一个工作。我甚至没有在这些公司中的任何一家工作过,也没有在我的公司中见过这些团队中的任何一个。我认为自己是一名数据科学家,因为我收集、研究、建模、分析、创建可视化数据,并向内部和外部的利益相关者解释数据。当我把它写出来时,听起来好像很多,但我敢打赌,我们中的许多人在没有数据科学这个名字的情况下,也在从事相同或类似的工作。我们是数据科学家,但不是数据科学家。
我不是通过任何常规途径来到这里的,我严重怀疑是否有这样的途径。数据科学是关于每天追随探索和学习的热情。这种持续的自我驱动的增长将我们从最初的地方慢慢带到今天的地方,即数据科学。无论是作为一个领域还是作为该领域的人,没有人能从学校学到数据科学所需的一切。其实学校只是给了我们一个基础。我曾与具有生物医学测试、计算机科学、运筹学、统计学和心理学背景的人共事过。连我都是从音乐教育开始的。那么我是如何发展自己的道路,从音乐老师到数据科学家是怎么走的呢?激情。
激情:从音乐到数据
我仍然记得生枫树鸡蛋壳的感觉。当我换一个鼓面时,胶水和木头的味道是如此的清晰和舒缓。我还记得当我跟不上乐队其他成员的节奏时,我内心的纠结。我不是一个糟糕的表演者,但我不是伟大的。我对教学充满热爱和激情。看到一个孩子脸上的理解的点击和喜悦的条纹让我坚持了 5 年。
Photo by Josh Sorenson on Unsplash
我像工程师一样接触音乐、打鼓和打击乐。也许是那种放慢节奏、研究每一个片段的欲望让我在演奏时止步不前,但当我坐在一个学生旁边时,它让我与众不同。我可以用无数种方式解释握力、紧张和感觉,慢慢弥合有时感觉无法逾越的理解差距。我教书的时候很开心,真的很开心。发生了什么事?野心。
对我来说,一辈子做私人教师或在某个小学校教书是不够的。我想成为大池塘里的一条大鱼。并且…排队人生的下一个阶段。我挣扎!我成了人海中的无名小卒。接下来的一年我做了贴身男仆,但我从未让我的热情熄灭。在我休息和沉默的时候,我继续阅读一本书,这本书是我写的一篇关于基于大脑的教育,即神经科学应用于教学的研究论文的奇妙基石。
在激情和才华的交汇处
几个月后,我发现自己被一所大学录取,攻读心理学硕士学位,重点是神经科学。太不真实了。我以为我不知何故抢了别人的位置(录取通知书上写着‘哈罗德’),但实际上我的教授选择了我,因为我的音乐背景。他的研究集中在患有阅读障碍的孩子以及他们如何处理听觉信息。他在寻找一位音乐家来为他的作品提供新的视角。我非常适合!我终于找到了一群想像工程师一样仔细研究行为细节的人,就像我以前研究音乐一样。这一阶段的行为聚焦研究将在以后与利益相关者打交道时证明是有用的,但不是我进入数据科学的最终催化剂。这个荣誉属于卑微的回归阶级。回归最终成为我对一个世界的介绍,令我惊讶的是,这个世界会吞噬我的每一个想法。
Photo by Aaron Burden on Unsplash
我对统计学很感兴趣。这对我有意义,对这个世界也有意义。我转到了最小众的领域,量化心理学,我又一次快乐了,真正的快乐。这种不断自我驱动的成长和不落在我的同龄人(他们中的许多人在学士学位中有统计学)后面的决心迫使我阅读额外的教科书和文章,只是为了理解我的作业。幸运的是,我的教授们非常鼓励想法、问题和批评。很快我就养成了这三种习惯。我问了许多问题,提出了可供选择的理论,并试图将新的统计方法应用到成熟的领域。当时我觉得他们中的许多人都是愚蠢的问题(事后来看,许多人肯定是),但我知道这样做有助于我成长。那两年帮我找到了自己擅长的东西,教会了我如何自学。
从学术到应用
毕业后,我将最终被释放到这个世界上。带着原始的激情和少量的天赋,我要重新定义世界看待一切的方式。至少我是这样认为的,直到我的老朋友让我再次成为一名初级分析师。我用了我所学的最小的一部分。均值、最大值和最小值统治着世界,一系列的条形图被用于客户演示幻灯片,这就是我们的数据芒格。成功了。公司赚了钱,但我不觉得我只是做了一直以来做的事情就有所贡献。
自从踏入企业界以来,这是一条艰难的道路。我不会再写一篇长文来概括这一阶段的生活。幸运的是,我不必为了证明我的观点而这样做。我在成长过程中并不想成为一名数据科学家(在我成长的过程中这也不是一件事)。我上学不是学数据科学的。我开始追随我的激情。接下来,我充分利用了我的才能,然后让我不断自我驱动的成长欲望占据了上风。放学后,我仍然像其他人一样做好了准备,走进了这个世界。我有一个基金会。
在过去的 5 年里,我一直让这种不断自我驱动的成长来定义我和我所交付的工作质量。正是这种驱动力让我,作为一名普通分析师,能够构建 soundex 聚类算法来匹配手动输入数据中的医生,使用异常检测自动编码器重新定义市场时机模型,并实现 openCV 来从广告图像中恢复信息。学校从没教过我这些。我自学了如何成为一名数据科学家,我敢打赌,我不是唯一一个像没有头衔的数据科学家一样自学梦想、构建和交付的人。
Photo by Markus Spiske on Unsplash
因此,对于那些热爱数据科学、感觉自己是局外人的人,我的最后一条建议是。
1.找到你热爱的事情。
2。找到你的才能产生最大影响的地方。
3。在一和二相遇的地方成长和发展。
走出去,吸收其他领域或行业的想法,并将它们应用到你的工作中。每周五花几个小时去研究一个新的想法,因为成长不会自己到来;你培养它。数据科学也不会自己找上门来;你每一步都在培养它。
对所有正在实施大创意的分析师大声喊出来。我们是任务中的数据科学家,而不是头衔。
设计过程中的数据科学
原文:https://towardsdatascience.com/data-science-in-the-design-process-754954c996de?source=collection_archive---------12-----------------------
第一部分
服务设计者的框架
“设计流程中的数据科学”的第 1 部分,旨在帮助服务设计师在设计流程的所有阶段使用数据,从使用数据进行研究和分析到使用数据作为创意媒介和工具。
摘要
近年来,我们生活和环境的数字化导致了数字数据的激增。通过可穿戴技术的兴起和手机的出现,我们在网上甚至网下都留下了我们行为的数字痕迹。技术使公司能够存储这些数据,这些公司开始意识到这些数据对其产品、服务和营销的价值。根据《哈佛商业评论》(Harvard Business Review),数据科学家的角色已经成为“21 世纪最性感的工作”(Davenport,2012),所有行业的组织都在使用数据科学从他们收集的大量数据(大数据)中提取价值。
服务设计机构也需要使用数据科学,因为越来越多的客户向他们的设计机构施加压力,要求将数据的使用纳入他们的工作方式。因此,这项研究旨在解决服务设计师在设计过程中纳入数据科学的程度。通过设计进行研究的方法用于调查设计师如何使用数据科学,因为传统上设计过程深深植根于定性研究。这项研究揭示了数据设计师面临的广泛挑战,以及数据不仅可以用来补充定性见解,还可以探索数据作为一种新的设计媒体。此外,还提出了一个框架和工具包作为建议的解决方案,该报告说明了原型是如何开发、测试和迭代的。接下来的步骤中提出的解决方案的发展强调,最后,建议作出进一步的领域实践为基础的学术研究在这一领域。
大数据的兴起
大数据已经成为一个热门词汇,引起了所有行业的企业、政府和媒体的关注(Davenport & Patil,2012)。数据的收集和存储变得比以往任何时候都更简单、更便宜。我们的生活已经变得数字化,从网上交谈,到分享假日照片,登记航班,甚至网上约会,我们在每一步上都留下了我们活动的痕迹。我们现在每两天创造的关于我们自己的信息与从早期文明到 2003 年创造的信息一样多:每 48 小时 5 艾字节(McGuier 等人,2013;Gobble,2013)。随着智能手机和可穿戴跟踪设备的发展,我们现在不再只有在工作时登录电脑才能产生数据;数字正在渗透我们的家庭和个人生活。“睡眠、锻炼、性、食物、情绪、位置、警觉性、生产力,甚至精神健康都被跟踪、测量、分享和展示”(Wolf,2010)。
Figure 1: Extract from Black Mirror episode ‘Be right back’
《黑镜》是一部英国电视“科幻选集系列片,探索了一个扭曲的高科技未来,在那里人类最伟大的创新和最黑暗的本能碰撞”(网飞,没有日期)。第二季第一集《马上回来》(Be right back)由查理·布洛克编剧,欧文·哈里斯执导,展示了人们如何仅仅基于他们的在线身份被再造。一位最近去世的寡妇了解到一项新的在线服务,该服务通过使用算法和他的社交媒体和在线历史来重现她已故的丈夫(见图 2)。
仅在十多年前,最有价值的公司名单主要由制造和生产公司组成,如通用电气和福特,但今天,从信息中产生价值的公司,如谷歌、亚马逊和脸书,已经成为领导者(Osman & Mines,2015)。
数据科学和大数据紧密相连,但又不完全相同。大数据涉及数据捕获、传输、存储、归档和分析等,而数据科学基于通过算法、应用数学和统计学从数据中提取信息(Osman & Mines,2015)。可以说,这是谷歌和 LinkedIn 等公司建立的基础,也是在科学研究中越来越受欢迎的基础(Hey et al .,2010;Tolle 等人,2011 年)。
Wolf (2010)描述了一种对数据近乎痴迷的关系,他说“对数字的迷恋是现代管理者的典型特征。面对敌意股东的企业高管口袋里装满了数字”。事实上,商业世界已经习惯于使用数据,因为可量化的数据和数字便于比较和测试。此外,Alharti 等人(2017 年)认为,大数据可以支持组织提供更好、更个性化的体验,从而提高效率和盈利能力,并且是获得竞争力的最重要因素之一
优势,因为它允许企业以新的方式创新(LaValle 等人,2011)。然而,McGuier 等人(2013 年)发现,首席营销官(CMO)仅在 29%的时间里根据数据分析做出决策,这凸显了数据在使用不当时的无足轻重。这可能是因为组织在充分利用大数据可能带来的价值时面临许多障碍,例如“过时的 IT 基础设施、大数据固有的复杂性和混乱性、组织内部缺乏数据科学技能、隐私问题以及不利于数据驱动的运营或数据驱动的决策的组织文化”(Alharti 等人,2017 年,第 286 页)。
数据科学家及其在商业世界中的角色
如果数据不能被解释,数据的数量和丰富性的增长是没有意义的,雇佣一个专门的资源来操纵和提取数据的意义的想法只是在 2001 年才出现,当时“数据科学”一词首次在克利夫兰的一篇论文中使用(2001;波拉克 2012)。这为许多大学促进数据科学领域的发展开辟了道路,他们开设了数据科学机构和中心,正式将数据科学作为一种职业来教授,例如爱丁堡大学数据科学博士培训中心、伯克利数据科学研究所和纽约大学数据科学中心等。十多年后,数据科学已经成为每个行业的基本要素,无数作者将数据称为“未来的货币”,并将它比作黄金(Pollack,2012;Johnson,2012)和数据科学家已经成为这种新货币成功的一部分。Bakhshi & Mateos-Garcia (2014)将数据科学家定义为“使用统计、计算和其他学科的分析技术从新(‘大’)数据中创造价值的专家。”
随着数据量的不断增加,数据分析变得比以往任何时候都更加复杂,许多组织的解决方案已经变成雇用数据科学家,并期望他们挥舞魔杖,从根本上改变他们的业务。然而,实际上这并不那么简单(Wettersten & Malmgren,2013)。许多公司都试图了解如何在其业务中定位数据团队。在零食公司 Graze,数据团队直接向首席执行官安东尼·弗莱彻汇报。他表示,这不是一种典型的方法,但他们希望从一开始就在组织内部围绕数据创建正确的文化。数据科学家负责向企业内的利益相关者提供可操作的见解,并需要为销售、营销和财务等部门提供这些见解(Davis,2016)。如今,团队跨业务工作,这一方面对数据科学家很有吸引力,因为他们可以处理各种类型的问题,另一方面,这使整个工作团队的数据“民主化”。
快速产生的不断增长的数据量已经超过了处理、分析和解释数据的能力。因此,数据科学家已经成为商业世界中一种稀缺和急需的人才商品。Parsons(Davis,2016 年引用)宣称“数据科学家是数字世界的火箭科学家,首席数据科学家(CDS)的角色正在出现”,甚至受人尊敬的《哈佛商业评论》(Davenport,2012 年)也将数据科学家的角色称为“21 世纪最性感的工作”。
数据和设计——协同还是二分法?
Treseler (2015)指出,在医学、工程和其他安全关键系统中使用科学方法测试新事物是常见的做法,但在消费品和网站设计中使用这种方法是相对较新的现象。看看发表的关于商业、技术和营销相关数据的文章数量,很明显数据是当今的主题,Treseler (2015)认为应该让“数据科学”超越统计学家的角色,让设计师将数据科学作为他们技能的一部分。
有一种流行的观点认为,设计师基于本能和创造性直觉做出决定,这可能会导致一些人认为设计从来没有以数据为基础,不能被视为一种经验主义学科。因此,设计站在数据科学的对立面(King 等人,2017)。这样做是正确的,产品和服务的设计是基于与用户建立共鸣,通过探索和创造过程创造“巧妙”的体验。与“科学”的认识论过程不同,“设计是感性的。[……]设计不能被合理化和约束”(金等人,2017 年,xi 页)。一些专业人士(DigiCult,无日期;艾斯林格,2017)担心数据可能会对设计师的直觉、经验和创造力造成潜在的限制。
在光谱的另一端,从一个极端的角度来看,数据科学被视为一个无可争议的真理,为商业领袖创造了一个备受追捧的确定性。King 等人(2017 年)描述了从数百万用户收集数据的极端观点,这些用户被认为回答了所有设计问题,因此,这些数据可以取代设计。事实上,Denham (2018)甚至称赞数据科学家是未来的 UX 设计师。
Waechter (2016)将设计和数据科学置于光谱的相反两端,认为设计师和数据科学家“通常不会说相同的语言,更不用说对期望的用户体验有共同的理解”。这一概念引出了一个问题,即数据科学和设计是否可以协同共存,并创造一种互惠互利的关系?Wettersten & Malmgren (2018)似乎正是这种信念。当 IDEO 和 Datascope Analytics 合并他们的团队时,设计总监 Wettersten 和数据科学家 Malmgren 开始密切合作(Wettersten & Malmgren,2013)。他们将在他们著名的以人为中心的设计过程中使用数据科学称为“以人为中心的数据科学”,他们陈述了跨学科团队的结果,并建议从业者应该合作并相互学习,而不是一个人同时成为设计师和数据科学家。
一方面,有人认为,数据科学家在参与设计研究时,可以学会与研究对象建立更多的同理心。此外,设计方法,如可视化和草图,可以帮助数据科学家在分析阶段看到数据中的模式(Osman & Mines,2015)。另一方面,设计师也可以从数据科学中学到很多东西,例如使用指标来与业务目标保持一致,而不是依赖“直觉”,他们可以使用数据和指标来测试和评估他们的假设和假说(黄,2016)。
数据驱动设计是答案吗?
任何领域变得更加“数据驱动”的需求,都是人们越来越熟悉的需求(King et al .,2017)。组织越来越依赖数据来帮助决策,包括关于设计和用户体验的决策。尽管术语“数据驱动的设计”在文献中已经变得流行,但 King 等人(2017)讨论了三种不同的方式来思考数据以及如何在设计流程中使用数据。他们讨论了熟悉的术语数据驱动的和数据通知的,并额外创造了术语数据感知的。
以下概述了这三个术语的定义:
- 数据驱动设计:数据决定产品和业务的结果
- 可以优化对其主要指标的影响。当设计项目的目标明确,并且有明确的设计和研究问题需要回答时,数据驱动设计是最常见的。
- 基于数据的设计:数据与其他资源一起使用,如战略应用、用户体验、直觉和竞争。以数据为基础的方法意味着它没有那么集中和有针对性,但数据是一个可以告知如何看待问题空间和做出决策的元素。
- 数据感知设计:通过这种方法,设计师意识到有许多类型的数据可以回答大量不同的设计和研究问题,而且设计师通常意识到在整个设计过程中他们可以使用不同类型的数据。
King 等人,2017 年
Ngai (2016)相信用量化数据补充定性见解的好处。他解释说,对于许多公司来说,设计和数据是相互关联的,因为有一个持续的数据流来监控数百个指标和迭代。他表示,“虽然设计本能仍然很有价值,但数据和分析可以帮助你磨练对产品的理解,并确保你的决定让利益相关者满意”。
由于随时可用的数据量不断增加,组织面临着利用其数据集的压力。这种压力传递给组织雇佣的机构,设计师需要通过对客户数据的量化分析来支持他们收集的定性见解。量化研究专家 hertto(Likkanen,2017 年引用)批评说,太多的项目在压力下毫无目的地收集量化数据,最终得到“从设计角度看不可操作的数据”。这一点得到了艾斯林格(2017)的支持,他批评说,数据不能轻易地支持每一个设计决策。他有力地指出,利用基于过去行为的数据来塑造未来的产品开发,对许多人来说是一个陷阱。他以摩托罗拉为例,当时该公司拒绝了一项关于触摸屏智能手机的提议,因为市场数据显示,消费者希望购买与当时的诺基亚类似的手机。显然,在应该创造什么样的的问题上,设计师的洞察力要优于基于数据的洞察力(Likkanen,2017)。
数据和创意
Bakhshi & Mateos-Garcia (2014)强调了一个事实,即大多数人认为数据科学工作与“创造性”完全相反,许多人认为它是例行公事、可预测的,甚至是无聊的。Digicult(无日期)指出,设计师难以处理数据的原因之一是,他们将自己的工作视为一种艺术形式,他们担心自己的“创造力和直觉将被数据和事实取代”。Pardi (2017)认为,在创作过程中,数据应该用来告诉我们事实,这可以作为提出问题和试验“邻近可能性”的基础,以便发现原始数据无法提供的见解和潜力。他认为,创造力是对可能结果的探索,但它只能是可能性的一小部分,因为我们的记忆、偏见和我们利用的视角限制了我们的想象力。
在这种情况下,团队中的经验和背景的多样性变得非常宝贵,数据的使用可以激发不同的观点、新的想法,更重要的是提出更多可能不会被认为是可能的问题。
下一篇文章
如果您对这个主题感兴趣,可以通过下面的链接阅读本系列的其他文章:
- 第 1 部分“设计过程中的数据科学”(你在这里👈)
- 第二部分 ' 数据作为设计的新媒介
参考
Bakhshi,h .和 Mateos-Garcia,J. (2014) 数据科学工作是创造性工作(第一部分)。可从:https://www . Nesta . org . uk/blog/data-science-work-is-creative-work-part-1/(访问时间:2018 年 10 月 7 日)。
Cleveland,W. (2001),“数据科学:扩展统计领域技术领域的行动计划”,《国际统计评论》,69 (1),第 21–26 页。
Davenport,t .和 Patil,J. (2012)“数据科学家:21 世纪最性感的工作”,《哈佛商业评论》,* 90 年,第 70-76 页。*
Davis,H. (2016) 数据科学家的角色以及我们为什么需要他们。可从:https://www . raconteur . net/technology/the-role-of-a-data-scientist-and-why-we-need-them(访问时间:2018 年 10 月 13 日)。
Denham,L. (2018) 数据科学家是下一个 UX 设计师。可从:https://channels . the innovation enterprise . com/articles/data-scientists-is-the-next-UX-designers(访问时间:2018 年 10 月 6 日)。
DigiCult(无日期)关于数据驱动设计你需要知道的 3 件事。可从:http://digi cult . it/digi mag/3-things-need-know-data-driven-design/(访问时间:2018 年 10 月 8 日)。
h .艾斯林格(2017) 大数据挑战。可从:https://www.frogmut.com/2017/05/08/big-data-challenge/(访问时间:2018 年 10 月 9 日)。
黄(2016) 设计师如何利用数据创作出令人惊叹的作品。可在:https://www . invision app . com/inside-design/how-designers-can-use-data/(访问时间:2018 年 10 月 10 日)。
j . Johnson(2012),“大数据+大分析=大机会”,财务主管,28 (6),第 50–53 页。
King,r .,Churchill,e .,Tan,C. (2017),用数据进行设计。加利福尼亚州塞瓦斯托波尔:奥莱利媒体公司。
Likkanen,l .(2016)Web 服务的数据驱动设计工具。可从:https://www . LinkedIn . com/pulse/tools-data-driven-design-we B- services-lassi-a-liikkanen?trk=mp-reader-card(访问日期:2018 年 10 月 9 日)。
McGuire,Meyer,c .和 Stone,D. (2013) 数据驱动的生活。可从:https://www . McKinsey . com/business-functions/marketing-and-sales/our-insights/the-data-driven-life 获取(获取时间:2018 年 10 月 12 日)。
网飞(无日期)黑镜。可从:https://www.netflix.com/gb/title/70264888(访问时间:2018 年 11 月 15 日)。
Ngai,J (2016) 用数据进行设计——作为一名设计师解释和分析数据。可从:https://uxdesign.cc/designing-with-data-ed721ffa008e(访问时间:2018 年 10 月 9 日)。
Osman,A. & Mines,K. (2015)“数据科学作为设计的新前沿”,国际工程设计会议。2015 年 7 月,意大利米兰。
Pardi,B. (2017) 如果你想有创造力,就不要被数据驱动。可从:https://medium . com/Microsoft-design/if-you-want-to-be-creative-don-be-data-driven-55db 74078 EDA(访问时间:2018 年 10 月 4 日)。
Pollack,N. (2012) 亿字节革命:Kaggle 如何将数据科学家变成摇滚明星。可从:https://www.wired.co.uk/article/the-exabyte-revolution(访问时间:2018 年 10 月 12 日)。
Tolle,k .,Tansley,s .和 Hey,A. (2011),《第四范式:数据密集型科学发现》,IEEE 会议录,99 (8),第 1334-1337 页。
Wettersten,j .和 Malmgren,D. (2018) 当数据科学家和设计师一起工作时会发生什么。可从:https://hbr.org/2018/03/what-happens-when-数据-科学家-设计师-一起工作(访问时间:2018 年 10 月 5 日)。
Wolf,G. (2010) 数据驱动的生活。可从:https://www . nytimes . com/2010/05/02/magazine/02 self-measurement-t . html(访问时间:2018 年 10 月 12 日)。
创业世界中的数据科学
原文:https://towardsdatascience.com/data-science-in-the-startup-world-2b8833d11e5b?source=collection_archive---------25-----------------------
苹果 | 谷歌 | SPOTIFY | 其他
周杰伦冯在 TDS 播客
编者按:这是迈向数据科学播客“攀登数据科学阶梯”系列的第六集,由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:
我以前说过,现在我再说一遍:“数据科学”是一个模糊的职位名称。人们用这个术语来指代数据科学、数据工程、机器学习工程和分析角色,这已经够糟糕了。但更糟糕的是,成为“数据科学家”意味着完全不同的事情,取决于你所工作的公司的规模和阶段。例如,一个小型创业公司的数据科学家可能与一个大型企业公司的数据科学家几乎没有任何共同之处。
因此,今天,我们决定与一位在这两个层面上都了解数据科学的人交流。Jay Feng 最初在 Jobr 从事分析和数据科学方面的工作,后来被 Monster.com 收购(后者又被一家更大的公司收购)。在许多其他事情中,他的故事揭示了一个你以前可能没有想过的问题:当数据科学家的公司被收购时,他们会发生什么?
以下是我们从对话中获得的主要收获:
- 如果你想进入数据科学领域,你的品牌非常重要。像许多入门级的候选人一样,杰伊起初很难获得牵引力,但一旦他开始通过博客建立个人品牌,一切都变了。最终,他的博客让他获得了一次面试机会,尽管他没有通过交给他的编码挑战。他的博客清楚地表明,他知道如何像数据科学家一样交流和思考,这比他的编码测试表现对公司更有价值。
- 雇主希望看到申请者真正感兴趣的迹象,甚至是热情。2010 年中期的所有数据科学炒作导致了一大批被动的爱好者,公司必须淘汰他们,所以热情的迹象是显示你认真的好方法。
- 在初创企业的早期工作意味着你必须更加务实,身兼多职。你不仅仅是在做“数据科学”的事情,比如清理数据、建立管道和训练模型。你将不得不与客户交谈,倾听销售电话,你甚至可能做软件工程来构建需求特性。这是学习通才技能的绝佳环境。
- 导师对于在你最弱的地方成长非常重要,好公司的结构是让新手也能得到这种指导。
- 很多时候,人们决定加入创业公司,是因为他们能够与之共事的团队。他们没有考虑的是,如果他们的初创公司被收购,这个团队会如何改变。收购导致了大量的变动,有时这意味着团队的分裂,或者团队的优先权发生了很大的变化。
额外收获:Jay 还运行面试查询,每隔几天发布一份包含数据科学面试问题的时事通讯。如果你正在寻找一些很棒的脑筋急转弯,就去看看吧。
如果你在推特上,随时欢迎和我联系 @jeremiecharris !
数据科学访谈:线性回归讲解
原文:https://towardsdatascience.com/data-science-interview-linear-regression-explained-f2ffff6803ad?source=collection_archive---------18-----------------------
用非技术性的方式解释线性回归
数据科学是一个新兴的领域,它吸引了像我这样想在毕业后从事该领域职业的本科生的兴趣。我对这个领域的热情和兴趣遇到了挑战,因为缺乏资源和招聘过程中不明确的路线。此外,许多开放数据科学职位要求潜在员工拥有硕士学位、博士学位或几年的工作经验。
我想通过分享我的经历来帮助简化这个过程。我有几个朋友也试图进入这个领域,他们有着相似的经历,如果不是非常不同的话;因此,这绝不是一个放之四海而皆准的指南,因为每个位置都是独一无二的。
挑战
与其他技术角色不同,没有出版关于如何为数据科学面试学习的书籍。我发现很难找到学习和练习的资源。也许这是因为数据科学仍然是一个相对较新的领域。
我已经面试了 3 个数据科学职位,每次都被问到不同的问题。缺乏清晰的资源和路径使得准备面试充满挑战。
共同主题
除了面试经验,我还接触了从事数据科学工作的校友。我问了他们的面试经历和学习技巧。通过我的经历和与校友的交谈,我已经能够确定大多数角色(如果不是所有角色的话)的一个共同主题,那就是解释你所知道的。
这是有意义的,因为他们希望你能够解释你所知道的,因为这份工作需要你和不一定有相同背景的人一起工作。
目的
我决定写这篇文章有两个原因:
1.我希望通过阅读,那些没有统计学背景的人能够理解线性回归,一个重要的统计学概念。
2.我也希望那些有统计学背景的人在采访中努力解释技术统计概念,发现这是许多方法之一。
线性回归
对于这篇文章,我决定介绍线性回归,因为线性回归是我个人统计知识的基础。在过去的几年里,我已经使用线性回归完成了一些项目,并逐渐意识到了它的重要性。此外,在我最近的一次采访中,我被要求以非技术性的方式解释线性回归。
当面试官说“非技术性”时,我立刻明白了,我要假设面试官之前没有统计学知识。这意味着我还必须解释线性回归的基本构件,如响应和解释变量。
鉴于我在新闻和讲故事方面的背景,我立刻想到最好的方法是使用类比。
类似
想象一下这样一个场景,你有一个设备可以记录你睡觉的时间,你睡觉的时间和你醒来的时间。每天醒来后,你可以对自己的情绪进行一到五级的评分。在记录了过去十天的这些数据后,你开始好奇如何在早上改善自己的情绪。
数据是设备收集的所有东西和你早上的心情。天数是数据集中的总行数。你的心情,你最关心的数字,就是反应变量。设备收集的潜在影响你情绪的因素是解释变量。
线性回归映射了响应和解释变量之间的关系。它通常以这种方式连接响应变量和解释变量:
Y = aX1+bX2+cX3
其中 Y 是响应变量,Xs 是各自的解释变量。
各个 x 前面的系数是权重。权重取决于变量的重要性。为了简单起见,让我们假设你的睡眠时间会显著影响你的情绪,那么它会比其他两个变量有更大的权重。
您可以在两种编程语言(如 R)中找到权重并使用线性回归,然后用数值计算,尽管用 R 更容易。
在 R 中,在模型中键入后,它还可以告诉你哪个解释变量(如果有的话)不显著。无关紧要的变量意味着它对响应变量没有任何影响。
对线性回归了解得越多,对数据集建模的不同方法就了解得越多。这只是冰山的一角。
结论
我希望你已经对线性回归的工作原理有了直观的理解。如果你已经理解了线性回归,那么我希望你已经学会了一种分解技术概念并解释它的新方法。感谢阅读!
20 个必须知道的数据科学面试问题
原文:https://towardsdatascience.com/data-science-interview-questions-ef87a3543b84?source=collection_archive---------15-----------------------
和相关阅读。
我遇到的一些好的数据科学问题的非穷举(咄)列表。我希望这个列表对想温习一些基本概念的人有用。向这里提到的所有令人惊叹的帖子的作者致敬。
Q. 定义均值、众数、中位数。向外行人解释这些概念。两者孰优孰劣。举实际例子。
问解释不同类型的分布。为什么正态分布对数据科学家如此重要。什么是中心极限定理?举个现实生活中的例子。
[## 常见概率分布
数据科学家的表格!
medium.com](https://medium.com/@srowen/common-probability-distributions-347e6b945ce4)
一个有趣的分布是 T8 T9 T9 分布。 搞笑什么啤酒能从一个家伙身上弄出来!
[## 吉尼斯的天才和他的统计遗产
今年圣帕特里克节,世界各地的狂欢者将聚集在街头,寻找爱尔兰的国酒之一:阿…
theconversation.com](http://theconversation.com/the-genius-at-guinness-and-his-statistical-legacy-93134)
问.解释术语: 峰度 和 偏度 。
[## 偏斜和峰度:数据科学中你需要知道的两个重要的统计学术语
如果您不知道数据科学中的其他一些常用术语。然后点击这里。
codeburst.io](https://codeburst.io/2-important-statistics-terms-you-need-to-know-in-data-science-skewness-and-kurtosis-388fef94eeaa)
Q. 用实际例子解释 异方差 。你会怎么解决?statsmakemecry精辟地解释了这个无法言说的字。
简而言之:
- 一个变量相对于一个独立预测变量的可变性的方差。
在不那么- 中简称:
[## 令人困惑的统计术语解释:异方差(Heteroskedasticity)
异方差是一个很难发音的词,但它不需要成为一个很难理解的概念。
www.statsmakemecry.com](http://www.statsmakemecry.com/smmctheblog/confusing-stats-terms-explained-heteroscedasticity-heteroske.html)
当你在博客上的时候,也检查一下 多重共线性 和 残差 。还有,相关 xkcd 漫画:
Seriously, this is not debatable!
问解释偏差/方差,权衡。各种模型在偏差/方差方面如何比较?用实例解释第一类和第二类错误。
Google for the rest.
Q. 解释决策树和 XGBoost 的工作原理以及它们之间的所有模型(装袋、随机森林、Boosting、梯度 Boosting)。谈论这些模型中的并行化。谈论这些模型的偏差/方差。
[## 随机森林算法
随机森林是一个灵活的,易于使用的机器学习算法,即使没有超参数调整…
towardsdatascience.com](/the-random-forest-algorithm-d457d499ffcd) [## XGBoost 算法:愿她统治长久!
接管世界的机器学习算法的新女王…
towardsdatascience.com](/https-medium-com-vishalmorde-xgboost-algorithm-long-she-may-rein-edd9f99be63d)
Statistically speaking, carry a bomb on a plane. The odds of two people carrying a bomb on the same plane are very very very low.
问什么是 贝叶斯法则 。实际例子。什么是先验概率和后验概率?如果你的 3 个朋友各以 1/3 的概率说实话,他们说目前正在下雨,那么实际下雨的概率是多少?为什么会有那么多撒谎的朋友?
[## 应用贝叶斯规则
在现实世界问题中使用贝叶斯推理
towardsdatascience.com](/bayes-rule-applied-75965e4482ff)
我怎么推荐上面这篇文章都不为过。
问你将如何构建一个 推荐引擎 ?描述从头开始建造一个的来龙去脉。什么是协同过滤 。下面的阅读非常吸引人。
[## Spotify 怎么这么了解你?
一位软件工程师解释了个性化音乐推荐背后的科学原理
medium.com](https://medium.com/@sophiaciocca/spotifys-discover-weekly-how-machine-learning-finds-your-new-music-19a41ab76efe)
问如何处理 不平衡数据集 ?
简而言之:
- 对较大样本进行子采样。
- 对较小的样本进行过采样。
- 为较小的样本创建伪样本。
- 调整模型以平衡类权重。
在不那么- 中简称:
[## 机器学习中不平衡数据集的处理
面对不平衡的班级问题,应该做什么,不应该做什么?
towardsdatascience.com](/handling-imbalanced-datasets-in-machine-learning-7a0e84220f28)
问。谈论各种模型及其性能评估指标。向外行解释 F1 的分数。F1 分数是怎么算出来的?
问多类与多标签分类。
问。描述你解决一般分类问题的首选方法。谈论你会考虑的所有因素。你如何选择和确定一个特定的模型?
问什么是迁移学习,强化学习?例子,例子,例子。
问树构建算法在节点处拆分使用的是什么算法?
问什么是过拟合和欠拟合?将其与偏差/方差联系起来。你如何处理过度拟合?谈谈正规化及其类型。
问描述聚类技术。在聚类技术中如何确定聚类的个数?讨论处理偏差/方差权衡时的聚类数。
[## 选择最佳集群数量的 10 个技巧
聚类是最常见的无监督机器学习问题之一。观察值之间的相似性被定义为…
towardsdatascience.com](/10-tips-for-choosing-the-optimal-number-of-clusters-277e93d72d92)
Q. 如果 logistic 回归是一个分类模型,为什么叫 logistic 回归?解释它的内部工作原理。
[## 为什么 Logistic 回归不叫 Logistic 分类?
逻辑回归本身绝对不是一个分类模型。人们会注意到编辑过的广告吗?在评论里打我。
stats.stackexchange.com](https://stats.stackexchange.com/questions/127042/why-isnt-logistic-regression-called-logistic-classification)
问你如何处理缺失的特征?哪些型号支持缺失的功能?谈论估算和填补缺失值的方法。删除观察值如何处理缺失值的插补?
[## 如何处理丢失的数据
“归罪的想法既诱人又危险”
towardsdatascience.com](/how-to-handle-missing-data-8646b18db0d4)
Q. 天魔堂 问题:经典概率问题:
- 有三扇门,门后有两只山羊和一辆汽车。
- 你选一扇门(称之为门 A)。你当然希望有辆车。
- 游戏节目主持人蒙蒂·霍尔检查了其他的门(B & C 饰),打开了一扇有山羊的门。(如果两扇门都有山羊,他随机挑选。)
游戏是这样的:你是坚持用门 A(最初的猜测)还是换到未打开的门?有关系吗?为什么或者为什么不?
A comic for everything!
问数据科学中的 DevOps。等等,现在怎么办?
[## 数据科学家 DevOps:驯服独角兽
当大多数数据科学家开始工作时,他们配备了从学校学到的所有简洁的数学概念…
towardsdatascience.com](/devops-for-data-scientists-taming-the-unicorn-6410843990de)
DevOps Engineers, where you at?
问说说一些软件架构模式。
[## 简而言之,10 种常见的软件架构模式
想知道大型企业级系统是如何设计的吗?
towardsdatascience.com](/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013)
问你的弱点是什么?
提前考虑一下也无妨。这是一个很常见的问题,所以很多人在谈到这个问题时都会笨手笨脚。说你在任何项目上工作太努力,或者说不完成任务不罢休,这不是弱点。你可以提出这个问题的技术方面。
[## 我作为数据科学家的弱点
不认识到我们的弱点,我们将永远无法克服它们
towardsdatascience.com](/my-weaknesses-as-a-data-scientist-1310dab9f566)
数据科学很无聊
原文:https://towardsdatascience.com/data-science-is-boring-1d43473e353e?source=collection_archive---------0-----------------------
我如何应对部署机器学习的无聊日子
Photo by Julian Howard on Unsplash
TLDR :许多人选择从事数据科学(或 ML,机器学习)中令人兴奋的部分来激励自己和他人。但是我们必须面对一个现实:真正的工作通常是“无聊”的——和人们浪漫化的工作相比是无聊的。感到无聊产生紧张感;这最终会导致数据科学领域的高人员流动率。我想分享我实际上做了什么,以及我是如何应对“数据科学中的枯燥”的。希望能帮助各位有志的数据科学家,树立正确的预期。因此,一旦你决定从事数据科学职业,你就要做一场持久战。享受吧。
更新:走向数据科学,我记录了关于这个博客的采访。见文末视频链接。
喜欢读什么? 跟我上 中 , 领英 ,或者 推特 。还有,作为一名数据科学家,要不要学习商业思维和沟通技巧?查看我的《 用机器学习影响 》指南。
免责声明 :这篇文章没有得到我工作的任何公司的支持或赞助。我交替使用术语数据科学和 ML。
1.故事时间
我年轻英俊的表弟肖恩最近来到了加拿大。他在这里攻读计算机科学硕士学位。和很多学生一样,Shawn 对机器学习非常有热情。他想在两年后毕业时成为一名数据科学家(或任何与 ML 有关的工作)。
作为一个对 Shawn 的成功真正感兴趣的哥哥,我决定分享我在数据科学职业生涯中最谨慎的学习——它是 而不是像 HBR 描绘的“21 世纪最性感的工作”;很无聊;它正在流失;令人沮丧。就像其他职业一样。
我有义务告诉肖恩真相,即使这很令人失望。这将有助于他对自己的职业选择做出明智的决定(更重要的是,我会避开妈妈和叔叔凌晨 3 点打来的电话,他们肯定会给我上关于家庭、责任、指导和诚实的课)。
作为一个聪明、上进、好奇的年轻人,肖恩让我详细解释一下“无聊”是什么样子。这就是这篇文章的内容。
此外,我们还将触及 ML 的主要趋势,以及如何保持相关性并脱颖而出。我将在几篇后续文章中分享这一点。请 关注我 上媒有兴趣的话。
2.设置一些背景
重要的是要认识到我是如何来到这里的(我的 LinkedIn),这样你才能正确看待事情。我作为数据科学经理提供我的观察和意见,他领导团队在财富 100 强企业部署 ML 系统,管理客户关系,并做一些技术工作。
几个更重要的定义。一个 ML 系统是一个解决商业领域问题的解决方案,有一个 ML 组件,并且有所有其他与人或机器一起工作所需的非 ML 系统的东西。
部署意味着获得推动实际业务运营的解决方案。例如,建立实验来训练和验证一个 ML 模型是而不是一个部署;设置一个推荐引擎,通过电子邮件发送每月产品报价,这是一种部署。部署 ML 系统面临着非常不同的问题,而不仅仅是建立一个好的 ML 模型。有兴趣的话在这里阅读更多。
也就是说,我并不代表那些作为初级开发人员加入谷歌或其他高科技公司并成为技术经理的人。这些公司确实做得很好,但我认为它们只代表了“最顶尖的 1%”。其他财富 100 强企业通常在技术成熟度、采用速度以及工具和工程人才投资方面落后。
3.让我们开始吧
简而言之,当我说数据科学很无聊时,我指的是当一个人意识到浪漫化的期望和现实之间的差距时的沮丧感。
GIFHY
大多数年轻的数据科学家希望将大部分时间花在修补和构建花哨的 ML 模型上,或者用丰富多彩的可视化展示突破性的商业见解。当然,这些仍然是工作的一部分。
但是,随着企业受到的教育越来越多,它们更加关注真正的运营价值。这意味着企业 想要部署更多的 ML 系统;他们不太关心自己有多少新车型或花哨的仪表盘。因此,数据科学家被要求做非 ML 的工作。这让人厌烦。
让我们进一步限定在数据科学中“无聊”是什么样子,如果我向你展示我从周一到周五的典型一天,那将是非常无聊的。因此,我将把我的工作分成几个主要的工作类别,突出预期和现实,并分享我的应对机制。
我将使用叙述“我们”,因为这些例子来自经验和团队的集合。这些例子可能并不详尽,但我认为它们会说明问题。
3.1 设计(5-10%的时间)
这是我们集体变得“兴奋”起来解决问题并提出绝妙想法的时候。这些想法可以包括新的模型架构、数据特性和系统设计等。很快,我们就会陷入低谷,因为由于时间限制和其他优先事项,我们需要采用最简单的(通常也是最无聊的)解决方案。
预期 :我们实现可以在著名的 ML 期刊上刊登的想法,比如 NIPS,Google 的 AI 研究博客等。甚至可能赢得下一届诺贝尔奖。
现实 :我们实施能很好完成工作的事情。我们拍了一些漂亮的白板画的照片,这些照片值得装裱。
应对机制: 1)和我领域之外的朋友边喝边聊那些疯狂的想法;他们可以非常诚实(和粗鲁)地关闭疯狂但愚蠢的想法,2)把疯狂和聪明的想法作为次要项目,3)事实证明,大多数疯狂的想法并不真正有效,或者只是比简单的想法好一点点。因此,确认和强化接吻原则(保持简单愚蠢)总能给我带来安慰和结束。
3.2 编码(20–70%的时间取决于角色)
这里没什么好说的。这是我们戴上耳机,喝点咖啡,伸展手指,锁定屏幕,打出漂亮的代码行,让奇迹发生的时候。
我们的代码通常分为五类(占代码总行数的百分比):数据管道(50-70%)、系统和集成(10-20%)、ML 模型(5-10%)、支持调试和演示的分析(5-10%)。和别人的观察大致吻合。这里有一个更大的图片。
The proportion of the model code (illustrative); here is a link to the Hidden Technical Debt of ML by a team at Google
如你所见,我们大部分时间都花在无聊的非 ML 工作上。虽然 ML 组件非常重要,但现代框架和编码语言(例如 Keras、XGBoost、Python 的 sklearn 等)已经抽象出了许多复杂性。这意味着实现我们需要的结果不需要大量的代码;工作流已经被很好地标准化和优化了(做低级别的优化是不同的,但这可能是 1%的情况)。
预期 :你把大部分时间花在开发和提炼 ML 组件上;其他人会处理好的。
现实 :没有人希望 1)做你不想做的事情,2)你把所有的好东西都留给自己,3)你在已经优化好的工作流程上花费过多的时间。
应对机制 :我们都根据自己的领域专业知识带头做出设计决策,并成为我们这一方的主要开发人员,同时对其他人起到支持作用(例如贡献想法、进行一些实际开发或 QA)。这样做可以让我们在向他人学习的同时发挥自己的优势。更重要的是,它有助于避免因争夺“性感工作”而产生的紧张情绪。
3.3 质量保证、调试和修复 Sh*t (至少 65%的时间)
在我看来,这是任何技术开发工作中最无聊最痛苦的部分。开发 ML 系统也不例外。
在 ML 环境中,有两种类型的“错误”:糟糕的结果和传统的软件问题。糟糕的结果指的是低模型分数(如准确度或精确度)或不敏感的预测(如基于业务经验的概率非常不准确)。代码没有问题,只是结果没有意义或者不够好。传统的软件问题包括代码损坏或系统配置问题。
预期 :我们只需要处理不好的结果,想出更聪明的办法来建立更好的模型。这在某种程度上还是很吸引人的。由于一些好的想法,看到业绩上升也是值得的。
现实 :在我们花费在 QA/调试/应用修复上的时间中,大约 70–90%是在传统软件问题上。通常,在我们构建了端到端的模型训练和验证管道之后,我们可以相当快地获得足够好的结果。然后,我们通常会降低建模的优先级,将重点放在系统问题上。
应对机制 : 我用 Github 的 Issues 功能游戏化并保留了一个“奖杯板”。当我关闭发行票时,我有一种瞬间多巴胺冲动。看到我们“征服”的问题,我感到自豪,越是自豪。当然,如果当我点击“go”时一切都神奇地工作,我会更自豪——这在大学的一次编程作业中只发生过一次。我会一辈子记得那种感觉。如果在现实生活中再次发生,很可能是出了问题。
A Snapshot of the Gibhut Issue Board
3.4 消防(10-50%的时间)
这对于任何交付团队经理来说都是一场噩梦,而不仅仅是数据科学。时间线有多长并不重要。事情总会出现,让你偏离轨道。具体来说,意外可以分为三类: a) 外部问题如范围变更、上游系统依赖和客户投诉, b)内部团队问题如需要比预期长得多的时间来解决的恼人的 bug、人们获得新工作而没有正确过渡、人员配备不足、个性冲突,以及 c) 我自己的无知,这是“其他人”的一个杂桶。
预期 :从头游弋到底。来自客户、老板和团队的击掌和拥抱。
现实 :意想不到的事情一般发生在最不方便的时候。有通用的模式,但没有包罗万象的公式,这令人沮丧。
7)执行就好。其中许多本身并不是应对机制,但它们是良好的做法,并且一直运作良好。
4.综上
所有这些都是说现实世界的数据科学是困难的。有志于从事 ML 职业的人应该认识到这样一个事实,即不仅仅是构建模型。你最终会感到厌倦和沮丧,就像你从事任何职业一样。没事,正常。最重要的是,你要制定应对机制,这样你才能长期留在游戏中,享受一路上的小奖励和最后的胜利。
这只是我和 Shawn 谈话的一部分。在接下来的两篇文章中,我将分享我对该领域两年后可能会是什么样子和如何保持相关性和脱颖而出的想法。敬请期待!
喜欢你读的书吗?关注我中、 LinkedIn ,或者 Twitter 。还有,作为数据科学家要不要发展商业影响力?查看我的“对机器学习的影响”指南。
这是一个关于这个博客的采访。希望你喜欢它。
你可能也会喜欢这些…
[## 对生活的追求
一个发现为什么许多 ML 项目失败的工具
towardsdatascience.com](/the-pursuit-of-lift-why-ml-projects-fail-f032dc31a303) [## 最有用的 ML 工具 2020
每个懒惰的全栈数据科学家都应该使用的 5 套工具
towardsdatascience.com](/the-most-useful-ml-tools-2020-e41b54061c58) [## 被遗忘的算法
用 Streamlit 探索蒙特卡罗模拟
towardsdatascience.com](/how-to-design-monte-carlo-simulation-138e9214910a) [## 12 小时 ML 挑战
如何使用 Streamlit 和 DevOps 工具构建和部署 ML 应用程序
towardsdatascience.com](/build-full-stack-ml-12-hours-50c310fedd51) [## 越狱
我们应该如何设计推荐系统
towardsdatascience.com](/how-to-design-search-engines-24e9e2e7b7d0) [## 我们创造了一个懒惰的人工智能
如何为现实世界设计和实现强化学习
towardsdatascience.com](/we-created-a-lazy-ai-5cea59a2a749) [## ML 和敏捷注定的联姻
Udacity 的创始人巴斯蒂安·特龙毁了我的 ML 项目和婚礼
towardsdatascience.com](/a-doomed-marriage-of-ml-and-agile-b91b95b37e35) [## 抵御另一个人工智能冬天的最后一道防线
数字,五个战术解决方案,和一个快速调查
towardsdatascience.com](/the-last-defense-against-another-ai-winter-c589b48c561) [## 人工智能的最后一英里问题
许多数据科学家没有充分考虑的一件事是
towardsdatascience.com](/fixing-the-last-mile-problems-of-deploying-ai-systems-in-the-real-world-4f1aab0ea10) [## 数据科学很无聊(第二部分)
为什么我喜欢无聊的 ML 问题,以及我是如何思考这些问题的。
towardsdatascience.com](/data-science-is-boring-part-2-d7c702422004)
下次见。
伊恩·肖
数据科学很无聊(第二部分)
原文:https://towardsdatascience.com/data-science-is-boring-part-2-d7c702422004?source=collection_archive---------19-----------------------
为什么我喜欢无聊的 ML 问题,以及我是如何思考这些问题的。
Photo by Julian Howard on Unsplash
TLDR :我喜欢无聊的机器学习(ML)问题。他们是企业的核心。在这篇文章中,我讨论了为什么无聊的问题是好的,并分享了两个简单的工具: ML 原型和 MJIT 。它们可以帮助数据科学家和 ML 产品经理识别有意义的问题,更快地生成有效的解决方案,并清晰地表达强有力的信息。
谢谢! 本系列第 1 部有超过 3.4K 的拍手(仍在统计)。不到 4 天就在培养基上达到了前 1% 。我非常谦卑,非常感谢你的支持。一如既往,希望你喜欢这篇文章。
喜欢你读的东西?在媒体、 LinkedIn 或 Twitter 上关注我。还有,作为一名数据科学家,要不要学习商业思维和沟通技巧?看看我的“对机器学习的影响”指南。
免责声明 :这篇文章没有得到我工作的任何一家公司的认可。我交替使用术语“数据科学”和“ML”。
1.故事时间
第 1 集在《数据科学很无聊》中:在一次去 Shawn 的学校(我的小表弟)的公路旅行中,我分享了我是如何应对部署 ML 的无聊的。
我在激励他方面做得很棒,所以肖恩问:“你用 ML 解决了什么问题?真题,不是我在网上看到的玩具例题。”
“很好。首先,你需要认清一点:现实问题的现实是它们都挺无聊的。但是,我爱无聊的问题!如果你想认真对待数据科学职业,你也应该……”我说,故事继续。
2.让我们开始吧
简而言之,我认为 a)无聊的问题是好的和 b)我们应该应用 ML 来解决更多无聊的问题,但要创新。
为什么无聊的问题是好的?无聊的问题是好的,因为它们代表了稳态操作问题。这些运营驱动着企业的核心。业务的核心是创造持续和实质性的价值。因此,企业优先投资解决阻碍其核心的无聊问题。无聊的问题得到真实的、持续的关注。
那又怎样?作为一名专业的数据科学家或 ML 产品经理,如果你能够认识到并清楚地表达 a)真正的问题是什么,b)如果你能够证明 ML 为什么以及如何能够更好地解决问题,那么说服你的老板(客户或顾客)接受你的 ML 想法就更容易了。考虑到问题的重要性,许多人可能已经解决了相同的问题。ML 原型和 MJIT 可以帮助区分你的想法,请继续阅读。
作为一名有抱负的数据科学家,这意味着你可以向招聘经理展示你务实的能力,你对如何解决现实世界的问题有直觉,最重要的是,你有正确的态度(例如,3 个月后你不会感到“无聊”)。
这篇文章不是关于什么的?企业用 零对一 式解决方案进行“创新项目”的原因很多。我也喜欢思考和解决这些问题。但是,从统计上来说,我没有特权每天从事这样的项目。如果你有一个零到一的想法并且需要帮助,给我发信息。你可以在 Medium 、 LinkedIn 或 Twitter 上找到我。
那么,真正(无聊)的问题是什么?而今天人们又是如何用 ML 解决的呢?
2.1ML 原型:了解历史
尽管最近大肆宣传,但我们今天看到的许多 ML 解决方案并不是新的(这样想将是无知的)。因此,理解永恒的基本原理是很重要的——它们在过去、现在都是正确的,将来也可能如此。
ML 原型关注基本面,提出以下问题:
- 每个 ML 原型解决了什么潜在的问题?
- 有哪些不考虑业务职能(例如营销、运营、财务等)的应用程序的具体示例。)?
Author’s Analysis
像任何包罗万象的框架一样,可能会缺少一些东西。请在下面留下评论,如果需要我会更新。
你可能会问:像“具有知识转移能力的分布式强化学习”这样的前沿东西怎么样(我自己的工作。等等,好像是个玩具例子)还是“人脸生成使用生成对抗网络”?我认为它们分别属于优先化和模式化原型。这些例子只是如何更好或不同地解决问题的“技术”;它们不是问题。这里的关键是关注潜在的问题和输出类型。
让我们更进一步。每个原型都可以是一个独立的解决方案。更重要的是,每个 ML 原型都可以是一个更大、更复杂、更“酷”的 ML 应用程序的构建块。
举例来说,这里有一个我最喜欢的 iPhone 功能的例子——“给你的”个性化相册。我将特性分解成原型和更细粒度的实现细节。这过于简化了(UX、数据和系统都很重要),但是我希望你能看到ML 原型是如何一起工作并构建成一个更大的 ML 应用程序的。
Link to the iPhone screenshot; author’s analysis
注意事项 :这是我自己的分析,用于说明目的。可能并不能代表苹果工程师实际是如何实现的。
那么,怎么用呢?作为一名有抱负的数据科学家,ML 原型充当了【地图】。你可以用它来制定一个学习计划,选择你感兴趣的,并深入学习。如果你想超越,也许你可以 1)选择一个最喜欢的原型,在 Github 上建立一些开源项目,并应用简单和复杂的方法,2)以创造性的方式结合多个原型来做一些很酷的事情。
作为企业中的专业人士和 ML 产品经理,你可以用这个作为【画布】来布局你的 ML 组合(比如去掉“样本解决方案”,用你的实际用例及其性能来代替)。此外,使用“画布”探索不同的可能性。因此,你可以发现差距和机会。这就引出了我们的下一个话题。
2.2 MJIT:为渐进式创新找到正确的优势
现在你对已经做了什么和可以做什么有了一个概念,这里有一个更重要的问题:下一个直接的机会是什么?许多数据科学家(或工程师,包括我自己)会立即想到最疯狂、最大胆、最复杂的想法。
这不是一件坏事。它只是显示了一种推动边界的内在动力。然而,正如我在的上一篇文章中提到的,许多疯狂的想法往往过于复杂,因此考虑到递增的回报,它们不值得付出努力。
所以,找到最小合理改进(MJI,我称之为“M-gee”)是至关重要的。我这样做是通过穿越下面的空间。
Link to the original image
好吧,开个玩笑。我的大脑无法处理这件事。所以,我开发并使用了一个更简单的心智模型,叫做 MJI 树(MJIT) 。MJIT 是一个结构化和高效的问题解决和解决方案生成工具,用于解决三个基本问题:1) 为什么我们要这样做?2)我们怎样才能做得与众不同?3) 到底能做什么?****
说到增量创新,MJIT 建立在久经考验的工具之上,包括管理咨询中使用的假设驱动的问题解决,软件开发中的最小可行产品(MVP) 概念,以及计算机科学中的树搜索算法。西蒙·西内克提出了“为什么——如何——做什么”的方法。我只对 ML 的合并和改编负责。**
重要提示: 我只收录了和 ML 问题最相关的例子。数据科学家应该对其他非 ML 解决方案有更广阔的视野。ML 是有用的,但不是银弹。
我到底要做什么?
A) I 从上到下遍历树并通过各自的索引。我写下所有与目标直接相关的可行选项。我估计了每个选项的工作量。这项工作因情况而异,所以尽可能运用你的最佳判断或与团队一起完成(这有助于消除偏见和风险)。
B) I 入围顶级创意;我会记录那些需要太多时间的想法。
C) 我对我的候选名单的总体改进做了一个粗略估计。在我真正去做之前,通常很难知道;这取决于经验和直觉的结合。****
这可能是决定项目成功的最关键的一步。我可能会分享一个后续的帖子,用几个例子来说明我是如何做到这一点的。请关注我上 中领英 ,或 推特 敬请关注。**
由于问题的框架和这棵树的结构,随着您的进展,选项通常会按照每单位工作的预期增量进行排序。也就是说,前几个选项是你的 mji*。每个 MJI 可以是一个小任务或项目,可能需要大量资金和数月的工作。同样,这是视情况而定的,运用你的判断。*******
下一步(又)是什么?假设你正确地执行了 mji,但它们仍然不够好,每次你遍历这个树,选项将不可避免地变得“更创新,但更昂贵”,因为你应该划掉“无聊,但立即有效”的选项。遍历、思考、执行、重复,直到没有任何选择,或者你的头脑爆炸(或者气炸)!
想试试吗?作为一个思想实验,你为什么不把 MJIT 应用到你当前的 ML 项目中,试着产生 10 个如何改进它的想法,假设你有 4 周时间,然后按顺序写在笔记本上?
如果您没有 ML 项目,您可以尝试使用上面的 iPhone“为我”示例。假设你是苹果公司的一名 ML 工程师,你的任务是改进该功能,将“与家人分享的照片数量”增加 10%,你有 4 周的时间拿出一个原型,然后你需要向蒂姆·库克展示(假设他在乎)。
(请不要说“挺苹果,加入谷歌做安卓的拍照 app,获得灵感,加薪回苹果”。这很聪明,但在这种情况下这是作弊。)
具体来说,下面是我的输出通常是什么样子的两个例子:
- 数据想法:使用表 X、Y 和 Z,结合列 A 和 B,在第 1 个月和第 12 个月之间,开发一个客户级别的 3 个月美元支出滚动平均值。
- 模型思路:将 XGBoost 模型换成目标和特性相同的 LightGBM 在 1-10 之间的最大树深度上搜索时,通过 F1 分数进行性能基准测试。
这种级别的细节可以帮助您更好地确定工作量和 MJIs 的优先级。一旦你熟悉了这个过程,你应该为你的领域问题和优先级开发你自己的 MJIT* 。你可以有不同的索引,这没关系。MJIT 并不意味着是一种精确的科学算法。***
琢磨有什么技巧?网上有很多好的资料,强调了技术的复杂性和应用范围。这里有一个例子(虽然只适用于建模)。
Link to the article
3.综上
无聊的问题很棒。它们构成了业务的核心,代表了真正的运营需求。我们应该解决更多无聊的问题,因为你的工作会转化为直接的、切实的、可持续的价值。从战术角度来看,重要的是 1)认识到存在哪些基本问题以及相应的 ML 解决方案,2)ML 原型如何构成强大的 ML 应用程序,3)确定下一个最佳机会,以提供即时价值并获得更多关注。我希望 ML 原型和 MJIT 有所帮助。
一如既往,欢迎反馈。请在下面留下评论。
喜欢你读的东西?在媒体、 LinkedIn 或 Twitter 上关注我。还有,作为一名数据科学家,要不要学习商业思维和沟通技巧?查看我的“对机器学习的影响”指南。
你可能也会喜欢我的其他作品:
*** [## 数据科学很无聊
我从事数据科学的正常(无聊)日子以及我如何应对
towardsdatascience.com](/data-science-is-boring-1d43473e353e) [## 人工智能的最后一英里问题
许多数据科学家没有充分考虑的一件事是
towardsdatascience.com](/fixing-the-last-mile-problems-of-deploying-ai-systems-in-the-real-world-4f1aab0ea10) [## 基于人工智能的操作:商业和技术经理的学习
利用强化学习解决城市自行车再平衡问题及其他问题
towardsdatascience.com](/ai-based-operation-learnings-for-business-and-technical-managers-3ec53e32b6a8)
下次见。
伊恩·肖***
向高中生解释数据科学
原文:https://towardsdatascience.com/data-science-is-hot-heres-why-it-s-cool-ddfdb8739a22?source=collection_archive---------10-----------------------
Data science is hot; here’s why it's cool.
我试图让数据科学变得很酷(因为它很酷)
自从我的孩子出生后,我就想在职业介绍日成为一个酷爸爸,在那里我的明智建议会改变一个人的一生。但我在高科技领域工作,即使对大多数成年人来说,科技也是可怕的,而不是酷的。但是当我的儿子杰克选修计算机科学时,我自愿谈论数据科学,让它听起来很酷。在我演讲的一周前,当我的演讲曲目不令人兴奋或激动时,恐慌袭来。幸运的是,我有一个知情者:我的儿子杰克。
高中生想知道什么?
我问杰克,他认为全班会想知道什么。他说,“我所有的朋友脑子里想的第一件事就是:你能赚多少钱?”
这不是我想要的鼓舞人心的介绍,但这是一个开始,杰克还有很多其他的基本问题。
几周后,在试管和周期表中,我从杰克的问题开始。"数据科学家的平均年薪是 11.3 万美元."
茫然的脸。
当我试图转移杰克的注意力时,他也有同样的表情。一年 11.3 万美元对他来说毫无意义。他的朋友谈到每小时 10 美元、13 美元和 16 美元。"知道每小时多少钱吗?"我问。一名学生猜测每小时 30 美元,因为这是她收入的两倍。
我透露:“11.3 万美元是 67 美元/小时。”
几个背挺直了。我引起了他们的注意。
为什么数据科学家很重要
“但真正重要的是数据科学为什么重要,你如何用数据科学改变世界,以及它为什么有趣,”我继续说道。
这个世界的祝福和诅咒是我们有大量的数据,但没有足够的洞察力,也没有足够多的人关心提取这种洞察力。这就是数据科学家所做的:他们从数据中提取意义。它们帮助我们了解世界,发现新事物。
数据科学家从数据中提取意义。它们帮助我们了解世界,发现新事物。
我举了一些简短的例子,比如阿尔·戈尔利用数据科学来宣传全球变暖政策变化;《纽约时报》用数据科学来解释边境墙是如何工作的;ESPN 利用数据科学展示爱国者队如何赢得另一场不可思议的超级碗比赛。
具体来说,我向全班展示了这张数字表,并问他们看到了什么。
他们的不回应正是我想要的。这个数据没有讲故事。我们需要一位数据科学家在这些无意义的数字中寻找意义。
我向全班展示了约瑟夫·密纳德是如何在 1869 年发现这些数字的意义的。他创造了许多人认为是有史以来最好的统计图表。在一张图中,他展示了六个维度的数据,并讲述了一个毁灭性的故事。
这些数字描述了拿破仑对俄罗斯的进军,包括时间、部队规模、部队位置和温度。
Charles Minard’s statistcial graphic of Napoleon’s disastrous Russian campaign of 1812.
黄褐色的锯齿状线条代表了拿破仑军队的规模和方向。从左路开始,拿破仑率领 422,000 人的军队于 1812 年进入俄罗斯。随着他们从左到右向东行进,褐色墨水逐渐减少。六个月后,军队到达莫斯科。
322,000 人死亡。然后他们转过身来。
在最右边,拿破仑开始撤退。返回的部队规模是黑色的。米纳德在底部添加了一个线形图来显示温度,从 0 度开始,下降到零下 30 度。
薄薄的黑色长条显示 422,000 人中只有 10,000 人幸存。
米纳德的图形是统计图形中的蒙娜丽莎——你逗留的时间越长,看到的就越多。例如,1813 年 9 月 28 日,黑线上的数据标签显示为 50,000,然后是 28,000。22000 人死于明斯克附近的别列兹纳河。
密纳德为什么要创作这个图形?这是对战争可能带来的破坏的警告。
现代数据科学的例子
我以数据科学在药物发现、机场情报安全、风能分析、算法交易、家庭物联网应用、社会分析中的现代例子来结束,以更好地理解人口统计和健康问题。
我的最后一个迎合策略是展示梅赛德斯方程式赛车团队如何使用分析来优化赛车配置、超车策略和实时比赛条件。
学生们被问到数据科学如何应用于地质学、法学和艺术。好问题。
我认为我的传教使命已经完成。
我的演讲也对我产生了影响
我的间谍杰克无意中听到几个孩子谈论科学家制造了多少数据。至少他们在说话!
额外收获是,解释为什么数据科学很重要让我重新认识到为什么数据科学很酷。通过教学,我重新给自己注入了能量。
马克·帕尔默是 TIBCO 软件公司的 SVP 分析师。作为 StreamBase 的首席执行官,他被《时代》杂志评为将改变你生活的技术先锋之一。要连接,请访问 我的约。Me 页 。
数据科学是实用的
原文:https://towardsdatascience.com/data-science-is-practical-91965d1e6425?source=collection_archive---------37-----------------------
学习数据科学的最佳方式莫过于编码
数据科学中的“科学”可能会产生误导。毕竟,数据科学是一项非常实用的工作。为了真正得到它,你需要写很多代码。
Work harder, work smarter
所以你想成为更好的数据科学家?代码。收集数据库,可视化,分析,理解它。然后学习如何将这些知识应用到新的数据集。
作为一名数据科学家,很重要的一点就是要确保对尽可能多的数据进行分析,因为这些数据只是需要分析的更多数据。
您可以随时返回并尝试再次获得您的最佳结果集,但作为一名数据科学家,您真的希望在开始以更系统的方式查看数据之前获得尽可能多的数据。
开始构建 Github 组合
越早开始构建开源项目的 Github 组合越好。这样你不仅会学到很多东西,还会有更好的机会找到下一份理想的工作。它极大地提高了您作为数据科学家的知名度,并允许您记录您的数据科学之旅。
如果你有兴趣在数据科学领域工作,但不确定该选择哪家公司,试着从某个特定领域或类别的公司获取报价。让招聘人员相信你能胜任某项特定的工作要求,比让他们认为你是大众的数据科学家要容易得多。
实际上,最好的方法是研究特定领域的公司,例如通过 Crunchbase ,然后建立与该领域相关的数据科学项目组合。如果利基是你的爱好,这是一个双赢的局面。
什么是好的数据科学项目
如果你认为你能做到,或者你认为它很适合数据科学的思维模式,并且你有机会学习做这件事所需的技能和经验,那就去做吧!
数据科学项目都是关于学习的,你拥有的数据科学技能越好,你就越有可能建立一个成功的项目。
下面列出了创建数据科学项目时需要考虑的最重要的方面。
- 该项目需要有某种可衡量的结果。
- 这个项目应该是简单的。
- 客户应该很好地理解这个项目。
- 这个项目应该在客户的控制之下。
- 这个项目应该符合他们的最大利益。
- 项目应提供清晰、简明的信息和结果。
你应该用这些数据开始一个项目。这往往是第一步。从你知道什么,不知道什么,以及原因开始。
你应该有一个清晰的项目议程和时间表。
这个项目必须从你想做什么的清晰想法开始。如果没有,就没有明确的方向。
实验
数据科学就是实验。一个好的工具可以让你更好地理解你的数据是什么样的,但只有当你能从中获得洞察力时,它才是有用的。当查看数据集时,除了查看它是否有模式之外,您还需要做更多的事情。
要从数据集中获得洞察力,您需要知道要寻找什么。您可以识别哪些模式,以及如何将其转化为可操作的见解?
如果你已经想好了这些问题,那么你就可以开始获得能够带来商业成果的洞察力。你可以开始利用这些见解来提高你的工作质量和技能。
一旦你对你要寻找的东西有了一个坚实的理解,有三种方法可以让你从你的数据中获得洞察力。
最后,查看数据的最佳方式之一是创建自己的报告。做一个电子表格,记录你在一个项目中做的每一件事。这样你就能让一切井井有条,你会学到很多东西,并准备好处理更复杂的项目。
祝你好运!
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
如果你想了解更多关于数据科学的知识,我推荐以下几本书:
- 成为数据科学家的 5 种方法
- 给数据科学家的最佳建议
- 如何从数据科学开始
- 成为数据科学家的实用指南
数据科学给年轻自己的求职建议
原文:https://towardsdatascience.com/data-science-job-seeking-advice-to-my-younger-self-7be10a601030?source=collection_archive---------17-----------------------
数据科学职业建议
在我的职业生涯中,我换过几次工作。这是我现在知道的,我希望我在那些搜索中已经知道了。
不久前,我写了一些我希望早些知道的关于从事数据科学职业的事情。一些读者亲自联系我,说他们也曾为同样的问题而挣扎,或者担心同样的决定。在那些谈话中,我意识到我的建议更多地集中在如何决定你想要什么样的工作,而不是如何找到并得到那份工作。除了我毕业后的第一份工作,我所做的每一个职业决定都包含了离开我当时的职位去寻找更好的事情的决定。我并不总是以最有效的方式去找工作,每次找工作都会对我的情绪健康造成相当大的伤害。
所以这篇文章是关于我会有什么不同的做法。
拒绝更多的机会
这一课花了我比其他任何人更长的时间来学习,它源于这样一个事实,即数据科学行业(以及其他行业)的人力资源实践确实非常不规范。一次成功的求职不仅取决于你有多迫切需要一份新工作,还取决于你有多少精神和情感上的耐力。互联网申请过程产生了大量的烟雾,但没有太多的热量:你会发出 100 份申请,如果你幸运的话,你可能会收到其中 20 份的回复,可能会有 10 份的初步电话筛选,可能会有 4 份进入下一轮,可能会有 1 或 2 份进入最终面试。如此多的拒绝——尤其是对大多数机会不回应的消极拒绝——会让人精疲力尽。在我的大部分求职中,这种疲惫实际上让我在那些相对罕见的获得面试机会的情况下表现更差。
我花了很长时间才意识到很多拒绝是不必要的,因为我可能是第一个放弃的人。我曾经被一家猎头公司招聘,希望在一家著名的对冲基金中填补一个新的数据科学指导职位。在参加一整天的面试之前,我经历了几次面试前的面试和编码挑战。这些采访大多是令人振奋和亲切的。但随后我被带去采访该公司的数据科学负责人。他非常粗鲁。我得到的印象是,在招聘委员会中,只有他不想让我加入。他问了一堆毫无意义的脑筋急转弯式的问题,一再贬低我的经历,并以简单地解雇我结束了采访,甚至拒绝和我握手。真的很可笑。
我应该打电话给招聘人员,告诉她我不再感兴趣了。如果我是一名招聘官员,一名求职者也这样做,我也会这么做。但是我真的想要一份工作。因此,我提出了我对这种互动的担忧,得到了第二次面试机会,他的老板基本上告诉我,我不应该脸皮这么薄,最终他们通知我,他们不会考虑我的候选资格。从我接受红旗面试到他们解雇我,我浪费了很多时间,更重要的是,我浪费了很多精力。
那不是我唯一一次遇到这种事。虽然这位高管的行为特别恶劣,但大多数进入面试阶段的机会都引发了某种主要的担忧:我被反复给予含糊不清的编码挑战,而没有任何解释,即使在问了他们试图评估什么之后;我的推荐人受到了不专业的对待,他们安排了电话,但在最后一刻取消了;我会明确表示,某些东西是我在工作中寻找的重要部分,然后在接下来的互动中,招聘官员明确表示,他们要么没有听,要么不记得,要么不关心。作为提供工作的人,他们当然有权做所有这些事情。我有权离开。我没有经常行使这个权利。
只在值得的时候付出努力
与我之前的观点相关:仅仅因为有工作机会并不意味着我必须去申请。我上交的申请越多,我的申请就变得越普通,我也变得越累,因为我只能通过一个申请门户网站来制作稍加修改的求职信和回答固定的问题。我决定采用一种特殊的方法来寻找高质量的机会:
首先,我在网上寻找相对新鲜的(最近两周发布的)看起来有趣的工作。目前我不申请任何职位。相反,我会在 LinkedIn 上看看,看看我的关系网中有没有人能把我推荐给提供这些工作的公司里的任何人。我不只是找到我有关系的公司——我联系这些关系,告诉他们我正在考虑申请这家公司,并请他们把我介绍给他们的联系人(不一定是招聘官员),并具体解释我正在考虑申请什么工作,这样联系人就知道我想专门与他们交谈,以决定是否申请这份工作。顺便说一下,这就是为什么我不接受我在 LinkedIn 上收到的大多数联系请求——我只把我的关系网留给那些足够了解我的人,我可以推荐他们,或者他们可以推荐我。
接下来,我与联系人交谈,倾听如果我申请这份工作,可能会引起我注意的信息:最糟糕的情况是,他们会提到团队正在进行的一个项目,我可以将该项目作为我最终求职信的基础;充其量,他们认识这个职位的招聘经理,我可以请他们帮我联系。在这个阶段,我不会试图去争取这份工作。我只是想要信息或额外的介绍。我这样做,直到我联系到招聘经理,确定我联系不到招聘经理,或者决定我不再感兴趣。如果仍然有兴趣,而且我还没有联系到招聘经理,我会填写在线申请,并写一封求职信,提及我过去的谈话,解释为什么这些谈话让我决定申请。这使得为每一份工作写一封定制信变得相对容易。
如果我还没有和招聘经理谈过,但我能认出他们是谁,我会给他们发一封电子邮件,告诉他们我已经申请了。有时候,我发现临时投资一个求职者 LinkedIn 账户是值得的,这样我就可以给我不认识的人发邮件了。我的信息非常简短:“我最近申请了[公司]的[职位]。我想给你写封短信,亲自表达我对这个职位有多么感兴趣。如果您对我的资格有任何疑问,或者我可以向您提供关于我的任何其他信息,请随时与我联系。”就是这样。我给他们我的电话和电子邮件。
这些规则也有例外。如果我遇到一份看起来很棒的工作——不仅仅是好——但我找不到任何能帮我找到突破口的关系,我有时会去申请。在我对公司或职位有所了解之前,我不会这样做,这样我就可以很容易地写一封求职信来解释我的兴趣。我很少这样做,主要是因为它能带来任何东西的机会非常小。
对于相对较少的应用程序来说,所有这些看起来都是大量的工作。我确信,随着越来越多的简历无法从空白中恢复,这比慢慢陷入绝望更令人沮丧。
报告(或论文或演示文稿)是分析工作走向死亡的地方
以上所有这些都回避了这样一个问题:什么样的工作首先值得考虑?在我职业生涯的早期,我认为执行分析并写出结果和相应的建议是我工作描述的主要部分。当我的建议没有得到重视时,我经常感到沮丧。随着时间的推移,我学会了少去责怪组织中的决策者。我现在意识到他们不是问题所在。它们是症状。
分析报告的影响取决于很多因素:决策者实际上关注了多少报告;财务、后勤和其他运营问题限制了在任何给定时间点实际可行的决策范围;决策者在同一主题上收到多少不同权威和可信度的其他相互矛盾的报告;在收到报告和做出报告应该告知的决定之间,决策者忘记了多少报告;为了抓住人们的注意力并让他们投入到分析结果中而对报告进行修饰的修辞/表现/设计。
我花了很长时间才意识到我需要创造产品,而不是幻灯片。那不仅仅是为了我自己的成就感。一个生产分析的组织和一个希望在报告中得到分析的组织之间的区别是一个支持个人贡献者的组织和一个不支持个人贡献者的组织之间的区别。如果我的雇主足够信任我,让我做一个分析,他们应该足够信任这个分析,有一个明确定义的路径,让这些结果自动化,或者至少增加企业内的具体决策。
如果有一个看门人可以挑选分析的结果并传播或采取行动,那么这个分析就不是生产性的。如果没有产品化,分析就是政治工具,而不是技术工具。政治工具没问题。它们不是我想要建造的。在我的职业生涯中,我花了太多的时间去思考如何更好地展示自己。我确实学会了如何更好地表达,这当然很有用,但我不再认为一份工作值得追求,如果它不是我的工作投入生产的默认条件。这从一开始就把很多数据科学的工作从我的搜索中过滤掉了。
没有办法修复一个糟糕的经理
除非我急需用钱,否则没有一份工作值得一个爱辱骂、爱操纵或不支持我的老板去做。我不仅仅是说我尽量避免和难相处的人一起工作。一个难相处的人会让你的生活很痛苦,继续和一个难相处的人一起工作的成本不应该被低估。但与一位难相处的经理共事意味着,你可能会把几个月或几年的职业生涯投入到某件事情中,而一旦你不再坚持不懈地为之奋斗(而且,通常情况下,即使你还在为之奋斗),这件事情就会消失。致力于即将消亡的事物是一种很好的耗尽精力的方式。
当我看到对期望的摇摆不定,放弃责任,然后称之为“管理风格”,指责员工不理解非指示,或简单地忽视他们提出的诚实问题时,我会在其他地方寻找就业机会。糟糕的管理者最糟糕的一点是他们很难被修复。如果雇用他们的人认识到他们有多糟糕,他们就不会被雇用,但这些人不会知道他们的错误,因为如果他们在受雇期间抱怨,可能会启发他们的人就有失去工作的风险,如果他们离开时提到这一点,会被视为只是表达酸葡萄心理。
一个糟糕的经理相对容易被发现,这是一个无能组织的标志。如果公司有能力处理好你的工作职能,它就不会让一个糟糕的老板来管理你,因为它会更了解你。一个糟糕的经理是我见过的唯一明确的迹象,表明我需要停止寻找工作。我可能决定的任何其他事情都是值得努力或试图改变的,但不包括糟糕的经理。
一个伟大的团队只会让事情变得更困难
团队放大。当我在一个好的情况下,一个好的团队让我更快乐,更有效率,更专注。事实上,当工作的其他方面都好的时候,一个强大的团队就是好的工作环境和伟大的工作环境之间的区别。然而,当我处于糟糕的情况时,即使是(事实上,尤其是)一个非常好的团队也会让事情明显变得更糟。
在我从研究生院毕业后的第一份工作中,我们中的一部分人最初被雇用来创造解决组织问题的新方法,但在给予我们相对较短的创新自由后,雇用我们的人开始一致并积极地反对我们做任何与过去不同的事情。我们团队从彼此的消极中获益。一切都成了委屈。在美好的时光里,我们互相贬低,就像我们互相扶持一样。我们的核心技术人才看到了不祥之兆,一个接一个地离开了。我当时并没有意识到,但那个团队解散是我可能遇到的最好的事情。我们已经变得如此有害,最好还是分道扬镳。但我当时不这么看。
在我寻找工作的过程中,我常常对我将与之共事的团队过于兴奋,以至于忽略了这个团队需要运作的大环境。工作的组成部分是乘法的,而不是加法的。一个+10 的团队和一个-2 的组织不等于+8 的经验。等于 a -20 经验。但在求职中很难看到这一点,因为团队动力比组织动力更容易看到。这是一个很难在面试过程中发现的问题。还是很值得找的。
一份不好的工作可能是得到一份好工作的最好方法
有一种情况,我会忽略我上面写的所有东西。在我职业生涯的早期,为了摆脱不健康的工作环境,我接受了一份工资相对较低的工作,我认为这几乎肯定是一个没有前途的职位。他们要求有人根据特定的选择标准提取客户名单,我提出了利用他们现有的数据做更多事情的想法,但我认为他们可能对无法在电子表格中完成的分析没有任何兴趣。我在公司的头几个月得到了初步印象的证实。
在用了他们恐怖的数据库前端一天后,我和 IT 部门聊了聊,直接进入数据库,开始自学 SQL。然后,我开始在 R 中创建脚本,这些脚本基于常见用例调用和组合特定的查询组合。几个月后,我的全职工作占据了我每周三到十个小时的时间。只要销售团队拿到了他们的客户名单,我就可以在剩下的时间里做任何我想做的事情。在那份工作的两年里,我从对 SQL 仅有一点基本的了解,到能够毫不掩饰地将它列为我简历上的核心能力之一。我开始自学 Python。我开始使用机器学习来模拟客户流失之类的事情。一个新的主管来了,他暂时有相似的兴趣,所以工作实际上被使用了。大约一年后,我的工作仍然没有出路,但我的简历更有市场。
即使是一份非常糟糕的工作也可能对你的职业有好处。就我而言,我资历够浅,能力够强,他们给了我足够的自由来发展新技能。当然,一份好工作会更好,让我成长得更多,但那不是我当时生活中的一个选择。我在职业生涯中已经走得够远了,我不知道我还需要再做一份垫脚石的工作。我希望我没有。但是在我经验比较少的时候,这是一件很有用的事情。
适度的恐惧是健康的
找工作压力很大。当你有一个家庭要养活,或者你需要找到新工作的最后期限到了,这是非常可怕的。我发现求职中固有的恐惧非常有用。大多数时候,我真的不知道我想从下一份工作中得到什么,就像我的潜在雇主不知道他们想从下一次雇佣中得到什么一样,所以我经常会感到左右为难,是接受一份体面的工作还是寻找一个更有前途的机会。在大多数情况下,恐惧促使我接受体面的工作,这推动了我的职业生涯。
有几次,恐惧变得如此之大,以至于盖过了所有其他的考虑。例如,在我职业生涯的早期,我很难挣到房租,因为我不得不把钱花在尿布和婴儿奶粉上。对于如何应对这种情况,我真的没有什么好的建议——在那段时间里,我一直处于崩溃之中。但在所有其他时候,当我可以在餐桌上获得食物,但希望从工作中获得更多满足感或在职业生涯中获得更多发展时,我的情绪健康和自尊经常受到严重打击,因为我没有意识到我有能力在求职中维护相当大的权威。
以我的经验来看,以申请者而不是恳求者的身份去找工作是值得的。通过认定某些条件我根本不会接受,通过在潜在雇主未能证明他们能够容纳这些必备条件时就切断他们的联系,我能够让自己保持精力充沛和头脑清醒,去寻找那些真正值得我关注的机会。
数据科学工作和他们的薪水
原文:https://towardsdatascience.com/data-science-jobs-with-their-salaries-171acd3bf9be?source=collection_archive---------6-----------------------
顶级数据科学工作及其薪酬和工作职责
没关系!但是,你挣多少钱?
数据科学工作是 IT 行业薪酬最高的工作。在过去的几年中,我们遇到了大量的数据科学角色,因此很难对它们是什么以及它们有何不同有一个基本的了解。即使这些角色的名称不同,也无济于事。
对数据科学家的需求相当大。对数据科学家的需求正处于顶峰,他们是美国薪酬最高的人群之一,平均基本工资为13 万美元。麦肯锡的预测表明,在未来几年,数据科学专业人员的供需将出现 50%的缺口。你也可以 掌握数据科学 从数据中理出头绪。
数据科学中的各种工作角色:
有太多的数据科学角色可能难以理解。 每个工作角色所需的技能互不相同 。数据科学领域使用数学。统计学和计算机科学学科,以及一个公共工具集,包括 Python、R、Tableau、SQL 等。如今对数据科学专业人员的需求很大,下面,我们将讨论数据科学领域提供的不同职位:
1。数据科学家— 数据科学家可能是当今世界该领域最热门的职位之一,也是最受欢迎的工作。他们负责处理原始数据,借助上述各种技术进行分析,并以有助于预测业务问题的方式提出见解。一个数据科学家使用 机器学习 ,也根据过去的模式预测未来。
数据科学家的平均工资范围(美国)是 11.9 万美元。
Source:Google
2。数据分析师— 数据分析师是分析数据的人。但这一过程需要创建系统,帮助企业用户获得洞察力并确保数据质量。他的职责是收集、处理和执行统计数据分析。数据分析师从可用数据中找到有意义的信息,并使用 R 或 SAS 。不仅仅是 IT 行业,医疗保健、汽车、金融、零售和保险等行业的所有公司都需要数据分析师来运营业务。
数据分析师的平均年薪(美国)为 6.2 万美元。
Source:Google
3。数据架构师— 随着大数据的兴起,数据架构师的角色越来越重要。他的职责是创建数据管理系统,以整合、保护和维护数据源和公司信息。他负责数据库架构、数据的设计、创建和优化。他非常依赖 Microsoft Excel 进行属性映射和设计表格。Pig、Spark、SQL、XML、Hive 等技术都需要数据架构师掌握。
该职业的平均年薪(美国)为10 万美元。
Source:Google
4。数据工程师— 他们不是分析数据的人,而是为其他专业人员构建某种软件基础设施来完成这项工作。他们之所以能够做到这一点,是因为他们对 Hadoop 和 大数据技术 有着深入的了解,如 MapReduce、Hive 和 Pig、NoSQL 技术、SQL 技术。他的职责是开发、测试和维护大规模处理系统。超过 50%的工作是数据争论,其中数据工程师胜过有软件工程背景的人。
这份工作的平均工资是 95000 美元。
Source:Google
5。统计员— 统计员的角色是了解影响企业发展的不断变化的市场趋势。这项工作是收集数据并将其转化为有用的信息。他们的技能使他们能够处理各种数据,无论是结构化的还是非结构化的。他们常用的工具和技术包括 SAS、SPSS、Matlab、Python、Scala、SQL、R 等。他们有很强的统计学背景,包括描述性和推理性的主题。
统计人员的平均工资(美国)是 7.5 万美元。
Source:Google
6。数据库管理员— 他们是受过培训的专业人员,负责存储和组织公司的数据。所有与数据保护、监控、维护和安全相关的活动都由数据库管理员执行和指导。这有助于让用户(包括员工)在任何时候都可以使用数据库。用于此目的的各种工具有 MySQL Workbench、Toad、Adminer、DatabaseSpy 等。
这个职位的典型平均工资(美国)是68,000 美元。
Source:Google
7。业务分析师— 业务分析师的角色类似于数据分析师。然而,业务分析师拥有业务领域的专业知识。他们用自己的技能指导企业改进产品和服务。他们收集和分析基本的业务需求和要求,并负责带来和管理业务的变化。业务分析师使用的工具有 Microsoft Office,包括 PowerPoint、Excel、Word 和 Visio、Google Docs、Sheets 和 Slides、SmartDraw、Balsamiq 等。
这份数据科学工作的平均工资(美国)为65,000 美元。
Source:Google
8。数据&分析经理— 数据&分析经理负责开发有效的数据分析、解释和报告流程。他们为数据分析师团队提供指导,还负责做出招聘决策。他们需要在数据科学领域拥有 7-10 年的经验。他们可以根据市场趋势向组织领导提出改变的建议。他们必须精通计算机编程语言、数据库系统、 大数据工具 ,以及机器学习。
这个职业的平均工资(美国)为 11.6 万美元。
Source:Google
结束语:
在寻找你梦想的数据科学工作时,要考虑到角色的不同,这就是为什么你需要确保你详细了解每个角色,然后选择你认为适合你和你的技能的角色。如果一个人选择在数据科学领域从事他的 职业,他知道他会享受这份高薪且有需求的工作。随着数据渗透到我们的生活中,公司试图理解产生的数据,职业机会预计将长期增长。
数据科学知识:试点项目会大规模开展吗?
原文:https://towardsdatascience.com/data-science-knowledge-will-that-pilot-work-at-scale-32244e8bfab5?source=collection_archive---------26-----------------------
所以你的团队证明了它作为一个试点是有效的,但是它在其他地方也会有效吗?
Photo by Aaron Thomas on Unsplash
烹饪。你花了很多时间学习它的背景、理论和实际情况。多年以后,你会知道铸铁和不锈钢锅的区别会在你做的菜里表现出来。
然而,你只为一小群人做过饭。现在突然之间,你不得不在工厂里同时准备你的招牌菜,工厂会把它包装好,运到全国的杂货店。与此同时,一家特许经营餐厅正在将您的菜肴(附带)添加到它的菜单中,它将在北美各地的餐厅提供。
不过你并不担心,在你纽约的小房子里,这道菜你已经做了上百次了,而且总是做得很好。你可以在睡梦中添加和多次添加配料,并花了无数个小时向其他厨师解释方法和步骤。
你怎么知道在一个地方行之有效的方法在另一个地方也会同样有效呢?输入外部有效性!(很快,这个比喻变得越来越牵强……)
在之前的一篇文章中,我介绍了数据科学的内部有效性概念和风险。在这篇文章中,我想花一些时间来讨论外部有效性。
外部效度关注的不是自变量和因变量之间的因果关系,而是你在一个例子中经历的结果或结果是否可以在另一个例子中预期。
在统计学中,当您从感兴趣的人群中抽取样本,并希望了解您在样本中观察到的情况是否可以推广到该人群时,通常会出现这种情况。
在其他情况下,我们建立实验或试点,因为我们想知道一个新的想法或理论是否会在我们投入大量资源投入生产之前奏效。
例如,假设你认为在周末在媒体上发布文章比在工作日发布更有效,比如周二晚上。你用你公司的博客进行一次关于社区服务活动的试点。基于您的评估(以及您对内部有效性的专家理解!)你会发现,在周末发布中型新闻时,阅读率更高,观看时间更长。耶!
现在,你在下一次员工会议上简要介绍你的发现,并告诉你的老板,他们需要立即为公司开展外联和营销工作,以利用这一点。但是你的老板有一个问题,“我们如何知道你在试点项目中发现的东西对我们的整个拓展战略是正确的?”
他怎么会问这个?他没看到你的滑梯吗?!?!在你再次开始陈述之前,要意识到被问到的只是一个关于你的实验的外部有效性的问题。
外部效度是在特定研究中观察和证明的因果关系在多大程度上可以被推断为存在于更大的样本、人群或不同的环境中。
当关注外部有效性时,你要考虑在发现观察到的因果关系的人群和没有参与初始研究的不同人群之间可能存在差异。
在我们的例子中,周末和工作日发帖时间之间的因果关系以及观察到的他们阅读时间的变化有什么独特的特征吗?
我们基于社区拓展活动博客进行了实验,但这适用于公司的所有内容吗?会不会是不同类型的内容之间存在差异,导致了与我们实验中观察到的结果不同的结果?
我们来看看通过外部效度思考时需要关注的东西。外部有效性的五个典型威胁是:
跨受试者 —作为外部有效性的主要威胁或担忧之一,我们需要知道观察到的结果是否适用于不属于实际研究的受试者。
当我们在决定扩大项目规模之前测试有效性时,这一点尤其令人感兴趣。即使治疗对研究对象有效,我们怎么能确定它们对非研究对象也有效呢?
一种主要的方法是从大量受关注人群中随机选择受试者。通过这种方式,我们可以相当确定随机选择允许我们在观察到的和在更大的群体中预期的之间做出推论。
然而,当你观察不同人群时,这并不一定适用。在这些情况下,你需要专注于推断。外推是分析您的试点人群和另一人群之间的相似性和差异的行为,记住成功所需的因果机制和属性,以合理预测您的计划将如何在不同人群中工作。
时间 —是对外部有效性的另一个关注点。仅仅因为一个程序或一项新技术在一个实例中有效,我们怎么知道它在将来还会继续有效呢?
理解这一点的一部分是要对变量之间的因果联系有一个很强的把握,这样你就可以监控那些变量是否会随着时间而变化。
设置 —很重要,因为它们可以自己成为独立变量。此外,有时研究必须在特定的环境中进行,这些环境不同于它们将来可能应用的目标自然环境。
一个普遍的例子是在一个实验室或一所特定的学校进行一项试验,然后试图推广这些发现,期望在其他地方得到某些结果。您的试点设置与生产环境有多相似?
治疗——可以用许多不同的方式操作。如果你有一个在许多地点执行的计划,这个问题会扩大,因为在这些地点之间试图有一个一致的处理,或者甚至知道确切的差别是什么,会更加困难。
因此,我们如何确切地了解治疗是什么,并比较所有地点的结果,就好像他们接受了相同的治疗?
结果度量— 如果结果度量可以以几种不同的方式操作,则是一个问题。例如,发布时间是否导致了所有的结果(例如,更高的观看率,更长的阅读时间,更多的掌声,等等)。)或者是这些事情中的一些导致了其他的,比如更长的阅读时间导致更多的掌声(另一种假设是,人们在一周内快速浏览,并不是为了放松,放松阅读导致掌声)。
包装它
重要的是要着眼于内部有效性和外部有效性。最终,如果你的实验或试点是高度可概括的(强外部有效性),这并不重要,但它并没有实际导致你认为它会导致的结果(弱内部有效性)。同样显而易见的是,你的程序实际上并没有引起因变量的变化,没有必要放大它。
此外,严格关注控制所有可能的变量来收紧你的内在有效性会对你的外在有效性产生负面影响。这是因为你可以人为地为你的实验创造一个环境,这个环境除了在你的初步研究中不存在。
为了创建有用的评估,必须在内部和外部有效性之间保持平衡,因为目标通常是了解该计划或治疗在其他情况下是否有效,而不仅仅是在实验中找到完美的因果机制。
好的试点和实验只有在规模或生产中成功应用时才有意义。然而,在这些情况下,很容易创建一个不以相同方式工作的试点。关键是要确保在试点设计和评估中充分考虑外部有效性。
数据科学狂人
原文:https://towardsdatascience.com/data-science-lunacy-cee7f063fa6a?source=collection_archive---------41-----------------------
作者注:我通常不会用第一人称写作,但是考虑到这种咆哮,这似乎很恰当。这些观点完全是我自己的,应该被认为是非常可疑的。
Howling at the moon.
逐渐减弱的信任
我很难认真对待 LinkedIn。如果你的反馈和我的一样,一半是明目张胆的自我推销,另一半是通过保险杠贴纸式的口号进行的赤裸裸的自我推销。
我认为这本身没有什么奇怪的,这肯定与我在其他社交媒体上看到的行为一致。虽然这不是我寻找灵感时经常去的平台,但看到关于毅力和成就的小广告,或者加强我的泡沫的观察也是不错的。我不想看到一个冷漠和不公平的世界的冷酷和赤裸裸的真相。
是的,随机人力资源专家:我绝对同意——即使数据不支持——人们辞职的是老板,而不是工作。谢谢你重申了我的世界观。
但是,有一条鼓舞人心的消息(来源可疑)让我感到无止境的惊愕;对应该是不言自明的事情的本能反应:
如果你想走得快,就一个人走。想走远,就一起走。
我无法解释为什么这点缺乏营养的智慧如此难以理解。谁不想建立同志关系,有效地合作,并冒险达到新的高度?如果我回避这些无害的理想,我会是什么样的厌世者呢?在我中彩票之前,工作不是可有可无的,我最感兴趣的是不要在地下室找我的红色订书机。所以,我没有告诉人们去踩沙子,而是违背了我的本性,和别人玩得很好。
幸运的是,我棘手的认知失调问题已经解决了。原来, 你想去的地方 是比速度和/或距离更重要的考虑因素。听起来很疯狂?数学是这样的:
Talk nerdy to me.
做的功与走的路无关,所以在漫无目的的徘徊之前,我们或许应该决定去哪里。如果你想要一个不寻常的解决方案,一个大团队不是最好的选择。
那为什么我感觉更糟呢?
日益增长的怀疑
撇开自我膨胀不谈,我最大的问题不是团队合作,而是我有多愿意接受这些信息是真的。协作符合时代精神——我为什么要质疑它?我的团队合作苦难可能无法与选举舞弊运动相提并论,但我会识破那些谎言吗?
我们根本没有足够的时间来仔细检查给我们的数据点。而且,即使有无限的时间,我怀疑我能否复制谷歌/脸书/LinkedIn 的黑盒算法来决定呈现什么信息。没有人不受暗示的影响。我怎么能相信这些呢?我多久才能走完所有满洲人的候选人?
前面提到的地下室看起来越来越诱人了。但是,在我对锡纸帽子感到太舒服之前,有两个相互交织的解决方案可以帮助结束这种疯狂:告诉我我需要知道的和告诉我我不想听到的。
Shield your eyes.
完全公开
数据可能是危险的。可以误用和武器化。我无法在任何时候都冷静地评价这一切。但是我知道谁可以——这是他们工作职责的一部分。
就像我们对医学宣誓,对工程宣誓,对光明会宣誓一样,我们也需要对数据科学宣誓。在这个誓言中,数据科学家不会故意制造混乱,歪曲事实,并且实施合理的隐私控制。
如果有人在推进一个议程,没关系,只要告诉我。如果价值主张是好的,那就没有什么好的理由来欺骗我同意你的观点。但是,试图蒙蔽我们的集体眼睛在伦理上是模棱两可的,你的产品可能很糟糕——毫无疑问。
新来源
他的这个对我来说有点棘手,因为它看起来自相矛盾,但我需要你告诉我我不想听到的。就像其他人一样,我被自己认同的消息来源包围着,这很危险。福克斯新闻频道可能会打破一个故事,但我永远不会知道,因为我极力避免它。这和我年长的亲戚憎恨 MSNBC 有什么不同吗?是的,但还不够。
我们不应该害怕消化与我们的世界观不平行的数据。如果我不喜欢事实所说的,问题就不是事实。如果我的观点经不起严格的质疑,它们可能需要被改变。
这个过程不一定是敌对的——谁知道我错过了什么精彩的节目,因为网飞认为我只看(奥威尔式)科幻小说?让我们给信号添加一些噪声,看看我的观看习惯是否改变,我是否达到了沙发土豆涅槃的更高状态。
重叠容量
我愿意承认,现在我确实知道了很多事情。我的无知很大一部分是因为懒惰,但更大一部分是因为缺乏能力;我们的世界非常复杂,而且每一分钟都在变得更加复杂。当我们做出自己的决定时,我们被迫依赖他人的决定,但是知道我们经常被欺骗是令人不安的。
我也许可以仔细检查一下 5 个牙医中的 4 个是否真的更喜欢 T2、T3、T4 和 T5,但是我不会打电话给 668 名密歇根居民,看看他们是否真的更喜欢基德洛克作为他们的参议员。我想选民们已经做出了更奇怪的选择,所以我可以理解为什么这是可信的,尽管这是错误的。
再加上数字回声室,它似乎放大了耸人听闻的东西,却懒得检查真实性。在 FactCheck 或 Snopes 的好人们有机会纠正记录之前,假新闻——真实的和一大早就在推特上发布的假新闻——已经在全球跑了好几圈。到那时,我可能已经形成了一个观点,并开始了一场争论,所以我现在不会退缩,否则我会看起来比平时更愚蠢。
我们为什么要容忍这些江湖骗子和蛇油贩子?答案是因为我们不得不这样做,至少目前是这样,因为即使是事实审查员也不堪重负。虽然我欣赏这种自上而下的方法,但我们真正需要的是一种自下而上的模式:一种数据科学家和统计学家集体聚在一起——带着他们的可乐瓶眼镜和口袋保护器——并宣布他们不会将他们的技能用于邪恶。
愤怒吧,愤怒吧,对抗死亡之光,你们这些书呆子,因为 我需要你们的帮助 。我们没有理由满足于一个真相如此难以辨别的世界。
不要相信你在网上看到的一切。
—亚伯拉罕·林肯
数据科学变得简单:使用 Orange 进行数据建模和预测
原文:https://towardsdatascience.com/data-science-made-easy-data-modeling-and-prediction-using-orange-f451f17061fa?source=collection_archive---------9-----------------------
尝试不同的学习算法并根据训练好的模型进行预测从未如此简单!
Image taken from the official Orange website
您现在正在阅读数据科学变得简单系列的第四部分。本文是关于根据我们使用训练数据训练的模型对测试数据执行预测。大多数时候,数据建模和预测部分是最有趣的,因为它需要您思考和调整底层参数来改善结果。在我们开始之前,请确保您已经安装了 Orange。请阅读第一部分进行设置和安装,如果您错过了,底部会有链接供您浏览整个 Data Science Made Easy 系列。首先,我将向你解释如何使用预测小工具。然后,我将介绍一些可用于数据建模的最常见的模型。
预言
预测小部件接受两个输入。一个是数据集,通常来自测试数据,而第二个是“预测器”。"预测器"指任何模型小部件的输出。您可以连接任意数量的模型小部件和预测小部件。整个数据建模和预测过程只需要几天时间。
分离训练和测试文件
第一种是通过两个不同的文件小部件,它们保存了训练集和测试集的数据。
Image by Author
- 向画布添加两个文件小部件。装载列车组并测试。根据您分别加载的数据重命名这两个小部件。
- 将任何型号小部件添加到画布上。在本例中,我添加了一个树小部件。这个 widget 其实指的是“决策树”。将训练文件小部件连接到模型小部件。
- 添加预测微件,并将树微件连接到其上。之后,如上图所示,连接测试小部件。
- 双击预测控件打开界面。
Image by Author
您应该会看到类似于上图的内容。在第 71 行,我们可以注意到模型预测它是 Iris-virgica,但是实际的类是 Iris-versicolor。您还可以看到每个预测的置信度。
Image by Author
如上图所示,您可以测试其他模型并在其上添加。请记住将模型与正确的数据集连接起来作为训练数据。
Image by Author
您会注意到预测小部件的输出有一个大问题。它只显示基于一行数据的结果。如果你想得到整体的结果或者从中得到一些启示。您将需要使用一些评估小部件。我们在上一篇文章中已经谈到了这一点。请检查一下,然后再继续。我们将只试用其中一个小部件。
- 向画布添加一个混淆矩阵小部件。
- 将预测部件与混淆矩阵部件连接。
- 双击混淆矩阵小部件打开界面。
Image by Author
您应该会获得类似于上图所示的结果。你可以用其他型号测试一下,看看它们的性能。
使用数据采样器
或者,如果您没有用于测试的专用数据集,我们可以依靠数据采样器小部件将数据分为训练集和测试集。正如我在上一篇文章中提到的, Data Sampler widget 与 sklearn 的 train_test_split 功能相似。
Image by Author
- 向画布添加一个文件小部件,并加载您的数据集。
- 将数据采样器小部件添加到画布,并将文件小部件连接到画布。
- 添加一个树小部件,并连接数据采样器小部件。
- 添加一个预测小部件,并将数据采样器小部件连接到它。
- 双击数据采样器控件和预测控件之间的链接,打开界面。将链接从剩余数据修改为数据。如果你不确定该怎么做。查看下面的 gif。
- 可选地,您可以添加混淆矩阵小部件以从结果中获得更多信息。
Gif by Author
预测与测试和分数
不要混淆预测小部件和测试&得分小部件,因为它们执行不同的任务。
- 测试&得分小部件用于评估基于训练数据集的模型。它将根据定义的折叠数执行交叉验证。如果将折叠数设置为 10,它会将数据集分成 10 个部分,并使用数据集的 9/10 作为训练集运行 10 轮评估,而剩余的 1/10 作为训练集。每轮将使用不同的部分作为训练集和测试集。
- 预测小部件用于根据训练好的模型预测测试数据。它不执行任何类型的交叉验证。使用训练集训练模型,并将模型连接到预测小部件以测试测试集。与测试&分数相比,结果会有所不同。
模型
我将粗略地解释一些可用的模型和可以为每个模型修改的参数。这是为了让初学者更好地理解。对于高级读者,你可以从官方的文档中找到大部分信息。
树
树 widget 是指带有正向剪枝的决策树学习算法。它可用于离散和连续数据集。该界面具有以下参数:
Image by Author
- 归纳二叉树:构建二叉树(拆分成两个子节点)
- 最小。leaves 中的实例数量:如果选中,算法将永远不会构造一个分割,将少于指定数量的训练实例放入任何分支。
- 不分割小于的子集:禁止算法分割小于给定实例数的节点。
- 限制最大树深:将分类树的深度限制在指定的节点层数。
Image by Author
您可以将它与上图所示的 Tree Viewer 小部件连接,以获得更多关于树的外观的信息。
Image by Author
您应该能够获得如上图所示的类似结果。
随机森林
随机森林是一种构建一组决策树的集成学习方法。它可用于多种任务,如分类和回归。该界面具有以下参数:
Image by Author
- 树的数量:类似于决策树的工作方式,确定森林中将包含多少棵决策树
- 每次分割考虑的属性数量:决定在每个节点任意抽取多少属性进行考虑
- 随机生成器的固定种子:确定使结果可复制的种子
线性回归
线性回归微件试图根据提供的数据点找到最佳拟合线。它可以学习和识别预测变量 x 和响应变量 y 之间的关系。请注意,线性回归小工具只能用于回归任务。您可以设置正则化的类型及其各自的强度。
Image by Author
正则化的概念不在本教程的范围之内。请随意从其他来源查看。基于官方文档,Lasso 回归使用 L1 范数罚函数最小化最小二乘损失函数的惩罚版本,而岭正则化使用 L2 范数罚函数最小化它。
逻辑回归
逻辑回归小工具的工作方式与线性回归小工具略有不同。尽管它有回归这个词,但它只适用于分类任务。
Image by Author
这些参数几乎类似于线性回归,因为您可以在山脊正则化或套索正则化之间进行选择。此外,您还可以修改强度,默认值为 C=1。
结论
这次我们学习了如何使用预测小部件来基于训练集和测试集进行预测。或者,我们可以使用一个数据采样器小部件将数据集一分为二。我们还粗略解释了预测小部件和测试&得分小部件之间的区别。然后,我们继续讨论一些常用的数据建模学习算法。我们从树小部件开始,它可以连接到树查看器小部件来显示决策树。然后,我们继续讨论随机森林小部件及其各自的参数。最后,我们探索了线性回归窗口小部件和逻辑回归窗口小部件。线性回归控件只能用于回归任务,而逻辑回归控件用于分类任务。感谢阅读数据科学变得简单教程的第 4 部分。在下一部分,我将介绍使用 Orange 的图像分析。❤️
数据科学变得简单
- 交互式数据可视化
- 数据处理
- 测试和评估
- 数据建模和预测
- 图像分析
参考
- https://orange.biolab.si/
- https://github.com/biolab/orange3
- https://orange.biolab.si/docs/
- https://data science . stack exchange . com/questions/20572/why-orange-predictions-and-test-score-produce-different-results-on-the-Sam/21672
数据科学变得简单:使用 Orange 进行数据处理
原文:https://towardsdatascience.com/data-science-made-easy-data-processing-using-orange-cb00476a7861?source=collection_archive---------13-----------------------
利用开源工具以正确的方式处理数据集,而无需接触任何代码!
Image taken from the official Orange website
这是 Data Science Made Easy 系列的第二部分,您将了解处理数据集的必要步骤。数据处理是数据科学家最基本的任务之一,因为你会意识到我们花了大部分时间清理和调整数据集。在我们开始之前,请确保您已经安装了 Orange。请阅读第一部分进行设置和安装,如果您错过了,底部会有链接供您浏览整个 Data Science Made Easy 系列。让我们从简单的列和行过滤开始。
选择列
假设您已经成功地从数据集中识别出一些重要的要素,并且想要创建一个仅包含这些要素的新数据集。您可以使用选择列小部件轻松做到这一点。假设您已经通过浏览自定义文档将虹膜数据集加载到文件小部件中。
Gif by Author
- 将一个选择列小部件拖到画布上。
- 连接文件小部件和选择列小部件。
- 双击选择列小部件打开界面。
Gif by Author
打开选择列界面后,可以左右移动变量。左侧表示不需要的要素,而右侧表示选定的要素。一旦下定决心,关闭界面,双击数据表小部件。您应该能够看到您选择的功能。
选择行
除了能够选择特性之外,您还可以将数据过滤成您想要的东西。让我们在选择行小部件上探索更多。
Gif by Author
- 将一个选择行小部件拖到画布上。
- 连接文件小部件和选择行小部件。
- 双击选择行控件打开界面。
Gif by Author
您可以使用选择行界面设置您的条件以过滤出所需的数据。假设您正在使用 Iris 数据集,我们可以过滤出特定类别的数据。同样,我们可以过滤掉不属于特定类的数据。此外,我们还可以为萼片长度必须大于某个数字等特征设置条件。您可以添加任意多个条件。双击数据表小部件,应该可以看到过滤后的数据。
特征构造器
有时需要从现有特征创建新特征。例如,您可以使用人的身高和体重要素创建身体质量指数要素。这通常被称为特征工程。Orange 附带了一个名为特征构造器的内置小部件,允许我们使用现有特征创建一个新特征。如果你有好的记忆力,你会记得我说过“数据处理不涉及任何代码”。嗯,你猜对了。我骗了你!😈特征工程需要一些 Python 的基本编码知识。不用担心,因为我在这里指导你。
Image by Author
- 右键单击画布以显示小部件选项。搜索特征构造器小部件,并将其添加到画布中。
- 添加一个数据表小部件。
- 如上图所示,将它们全部连接起来。
- 双击它打开界面
Image by Author
- 点击“新按钮,您将看到一个下拉列表,显示数字、分类和文本。
- 选择 Numerical,将创建一个新项目(很可能命名为 X1)。
- 将名称更改为 sepal_length_square(根据您的偏好进行相应修改,因为这是您的新功能的名称)。
- 关注右边的文本框。这是你需要输入一些代码的部分。点击“选择特征”按钮,您将看到数据集中的所有特征。选择 sepal length,您将看到“sepal_length”被添加到文本框中。您可以自己输入,但要记住在功能名称的每个空格处添加一个下划线。
- “选择函数”提供了一个数学函数列表,如果您不熟悉脚本,可以使用它。你应该不会有问题,因为提供的函数类似于任何 Excel 电子表格中的函数。键入** 2,你应该有 sepal_length ** 2,就像上面的图片一样。
- 使用上述步骤添加一个新的分类项目。分类用于标注特征。例如,你可以根据萼片长度将鸢尾分为小、中、大三类。该代码基于以下内容:“if(值)(特征名 ) < ( 值),else ( 值 ) if ( 特征名 ) < ( 值),else ( 值)”
- 将名称改为 small_iris 并键入下面的" 0 if sepal_length < 5 else 1 if sepal_length < 6 else 2”
- At the values text box, type in “S, M, L”. This represents the label of the label based on the conditions at step 7. 0 will map to S, 1 will map to M and 2 will map to L.
You should be able to see the following output once you closed the 特征构造器接口并打开数据表接口
Image by Author
基于官方文档,这里有一些对 Python 新手的快速提示:
- +,-相加、相减
- *相乘
- /来划分
- %相除并返回余数
- **代表指数(代表平方根乘以 0.5)
- //用于楼层划分
- 、<=, > =小于、大于、小于或等于、大于或等于
- ==表示相等
- !=不等于
数据采样器
数据采样器小部件是数据科学家最重要的小部件之一。将数据集划分为训练集和测试集是最基本的任务之一。还记得 sklearn 提供的 train_test_split 函数吗?这个小部件的功能与 train_test_split 的功能相同。让我们在画布上测试一下。
Gif by Author
- 将一个文件小部件拖到画布中。
- 将一个数据采样器小部件拖到画布上。
- 将文件微件与数据采样器微件连接。
- 将两个数据表小部件拖到画布中。第一个小部件用于训练数据,第二个小部件用于测试数据。
- 如上图所示,将数据采样器微件与数据表微件连接。
- 双击数据采样器微件和第二个数据表微件之间的链接,打开编辑链接界面。
- 将剩余数据连接到数据上,双击数据样本和数据之间的链接。这允许第二个数据表根据数据采样器中的设置接收剩余数据。
- 双击数据采样器打开界面。
Image by Author
根据官方文件,
- 数据的固定比例:返回整个数据的选定百分比(例如,所有数据的 70%)。在这种情况下,70%到的数据样本和 30%到的剩余数据。
- 固定样本大小:返回选定数量的数据实例,有机会设置样本替换,它总是从整个数据集中采样(不减去子集中已经存在的实例)。通过替换,您可以生成比输入数据集中可用实例更多的实例。
- 交叉验证:将数据实例划分为互补的子集,在这里您可以选择折叠(子集)的数量以及您想要使用哪个折叠作为样本。
- Bootstrap: 从总体统计推断样本。
保存数据
到目前为止进行的所有数据处理都只适用于 Orange。这些更改不会反映在原始数据集中。如果您想保存处理过的数据,您应该使用保存数据小部件。
Image by Author
您可以将其放置在数据表之后,如上图所示独立保存列车数据。
Image by Author
同样,您可以在任何可视化小部件中选择一些数据,并仅保存所选数据。
Image by Author
您可以确定文件类型并检查是否使用压缩。有两种保存方式:
- 保存:覆盖现有文件
- 另存为:新建一个文件
结论
就这样,伙计们!您已经学习了如何使用选择列小部件和选择行小部件过滤数据集。此外,您可以利用您的 Python 编程技能,通过特性构造器小部件进行特性工程。您也可以通过图形用户界面这样做。接下来,数据采样器小部件允许我们将数据分成训练集和测试集。完成数据处理后,您可以使用保存数据小部件将其保存到文件中。还有很多小部件可以用来处理数据。请随意查看官方文件。感谢阅读数据科学变得简单教程的第 2 部分。在下一部分,我将使用 Orange 进行测试和评估。❤️
数据科学变得简单
- 交互式数据可视化
- 数据处理
- 测试和评估
- 数据建模和预测
- 图像分析
参考
- https://orange.biolab.si/
- https://github.com/biolab/orange3
- https://orange.biolab.si/docs/
数据科学变得简单:使用 Orange 进行图像分析
原文:https://towardsdatascience.com/data-science-made-easy-image-analytics-using-orange-ad4af375ca7a?source=collection_archive---------12-----------------------
使用开源机器学习工具简化您的图像分析任务,无需编写任何代码!
Image taken from the official Orange website
您已经进入了数据科学简化系列的第五部分。在这篇文章中,我将教你一些使用 Orange 进行图像分析的基本步骤。供您参考,除了正常的分类和回归任务之外,Orange 还可用于图像分析任务。到目前为止,您应该已经熟悉了 Orange 的用户界面。在我们开始之前,请确保您已经安装了 Orange。请阅读第一部分进行设置和安装,如果您错过了,底部会有链接供您浏览整个 Data Science Made Easy 系列。我们开始吧!
安装图像分析插件
Orange 附带了很多非常有用的附件。在本文中,我们将只关注其中一个叫做的图像分析。
Gif by Author
- 单击选项菜单,将出现一个下拉列表。
- 选择附加组件并点击按钮打开附加组件界面。
Image by Author
勾选图像分析,点击右下角的“确定”按钮。等待安装完成,您就可以开始工作了。你可能需要重新启动 Orange 才能工作。您应该能够看到如下图所示的图像分析小部件。
Image by Author
小工具
导入图像
首先要做的是通过导入图像小部件导入图像。您可以将这个小部件视为图像的文件小部件。然而,导入图像小部件接受目录而不是文件。
Gif by Author
- 将导入图像小部件添加到画布。
- 双击它打开界面。
Image by Author
下拉列表显示过去的目录,而中间的按钮是打开任何新的目录。如果您在目录中添加或删除了任何图像,您可以使用“重新加载”按钮来刷新内容。还有一个显示目录中图像数量的信息文本。对于本教程,我将使用 Orange 的官方博客帖子提供的一些样本图像。你可以从下面的链接中获取数据集。它应该包含 19 个家养动物的图像。提取它,你应该有一个家畜文件夹。
图像浏览器
接下来,我们将依靠图像查看器小部件来检查目录的内容。这个小部件将显示所有加载的图像。这很有用,因为整个工作流程可以通过 Orange 完成,而不需要打开浏览器。让我们继续上一节课。
Gif by Author
- 向画布添加一个图像查看器小部件。
- 将导入图像小工具与图像查看器小工具连接。
- 双击图像查看器小工具打开界面。
Image by Author
您应该会看到如上图所示的界面。
图像嵌入
这个小部件对于整个图像分析包来说是最重要的,因为这是魔法发生的地方。供您参考,分类和回归任务需要数字形式的数据,除非我们以数字形式表示,否则没有一种好的方法来使用图像执行此类任务。这就是图像嵌入小部件的工作原理,它将图像嵌入转换成一个数字向量。图像嵌入小工具读取图像并上传到远程服务器或在本地进行评估。
Gif by Author
- 向画布添加一个嵌入小部件的图像。
- 将导入图像控件与图像嵌入控件连接。
- 双击图像嵌入控件打开界面。
Image by Author
图像嵌入界面最重要的参数是嵌入器。你可以使用很多嵌入器。除了 SqueezeNet,大多数都需要互联网连接来进行转换。根据官方文档,列表如下:
- SqueezeNet : 在 ImageNet 上训练的用于图像识别的小型快速模型。
- Inception v3 : 谷歌在 ImageNet 上训练的 Inception v3 模型。
- VGG-16 : 在 ImageNet 上训练的 16 层图像识别模型。
- VGG-19 : 在 ImageNet 上训练的 19 层图像识别模型。
- 画家:一个被训练成从艺术品图像中预测画家的模型。
- DeepLoc :一个被训练分析酵母细胞图像的模型。
最安全的选择是选择挤压网,如果你没有任何互联网连接。您可以随意使用它,因为每个嵌入器都会产生不同的输出。请注意,官方文档声明发送到服务器的图像不会存储在任何地方。
Image by Author
你可以用一个数据表小部件连接它来查看输出。您应该获得类似下图的内容。
Image by Author
距离和层次聚类
您可以通过将来自图像嵌入小部件的输出传递到距离小部件和层次聚类小部件来进一步分析它。您将能够看到一个树形图,这是一个树形图,常用于说明由层次聚类产生的聚类的排列。
Image by Author
- 向画布添加一个距离小部件。
- 将图像嵌入控件与距离控件连接。
- 向画布添加一个分层聚类小部件。
- 将距离控件与层次聚类连接。
- 双击层次聚类控件打开界面。
Image by Author
您应该能够看到如上图所示的界面。
图像网格
如果你更喜欢视觉,你可以试试图像网格部件。根据官方文档,图像网格小部件可以在相似网格中显示数据集的图像。这意味着具有相似内容的图像彼此放置得更近。它可用于图像比较,同时查找所选数据实例之间的相似性或差异。
Image by Author
- 将图像网格小部件添加到画布。
- 将图像嵌入小部件与图像网格小部件连接。
- 双击图像网格小部件打开界面。
Image by Author
您应该能够获得类似于上图的东西。你可以看到这些图像根据形状和颜色被很好地分成不同的组。
试验
让我们通过使用不同类型的图像来尝试一下聚类是如何工作的。官方博客为我们提供了面对前置摄像头的 Milka。这与我们现有的任何图像都有很大不同。它能和小牛或母牛聚集在一起吗?
Image by Author
保存图像并放入家畜文件夹中。刷新导入图像小部件,双击层次聚类小部件。
Image by Author
你应该可以看到 Milka 就放在小牛和母牛的正上方。但是,它不在同一个群集中。你可以从网上选择一些图片来试试。
结论
恭喜你走到这一步!让我们回顾一下今天所学的内容。我们从安装图像分析插件开始,它为我们提供了一些新的小部件。然后,我们通过 Import Images 小部件加载图像。你可以把它指向你选择的目录。您可以通过图像查看器小部件检查图像。此外,我们还学习了使用图像嵌入小部件将图像转换为数字向量。可以使用不同种类的嵌入器。接下来,我们尝试了距离小部件和层次聚类小部件来显示聚类的树形图。最后,我们用一个样本图像进行测试。感谢阅读数据科学变得简单教程的第 5 部分。下节课再见。❤️
数据科学变得简单
- 交互式数据可视化
- 数据处理
- 测试和评估
- 数据建模和预测
- 图像分析
参考
- https://orange.biolab.si/
- https://github.com/biolab/orange3
- https://orange.biolab.si/docs/
- https://orange 3-image analytics . readthedocs . io/en/latest/index . html
- https://blog.biolab.si/tag/image-analytics/
- https://github . com/ajdapretnar/datasets/blob/master/images/家养动物. zip
数据科学变得简单:使用 Orange 的交互式数据可视化
原文:https://towardsdatascience.com/data-science-made-easy-interactive-data-visualization-using-orange-de8d5f6b7f2b?source=collection_archive---------11-----------------------
一个开源的机器学习和数据可视化工具,可以加速你的数据分析,而无需编写任何代码!
Image taken from the official Orange website
今天的主题是关于使用开源软件 Orange 执行简单的数据可视化。如果您正在寻找一种不用代码就能可视化数据集的替代方案,Orange 是您的正确选择!官方的 Github 页面声明
“Orange 是一款基于组件的数据挖掘软件。它包括一系列数据可视化、探索、预处理和建模技术。它可以通过一个漂亮而直观的用户界面来使用,或者对于更高级的用户来说,可以作为 Python 编程语言的一个模块来使用。”
换句话说,在处理数据科学任务时,Orange 既适合新手,也适合专家。本教程有 3 个部分:
- 设置和安装
- 小工具
- 结论
[第 1 节]设置和安装
首先,安装 Orange 的方法有很多。最常见的方式是通过独立的安装程序,Anaconda 或 Pip。让我们逐一看看。
独立安装程序(Windows、macOS)
转到下面的链接,选择所需的操作系统。
Image by Author
点击“下载橙色按钮开始下载。完成后,双击安装程序进行安装。
Linux/Source
没有为 Linux/Source 提供安装程序。你必须从 GitHub 中克隆官方库或者下载源代码 tarball 。之后,你就可以按照 README.md 中的说明去做了。完成后,您可以通过以下命令开始运行 Orange Canvas:
python -m Orange.canvas
蟒蛇
如果您已经有了 Anaconda,那么您可以通过下面的命令将 conda-forge 添加到您的频道中:
conda config --add channels conda-forge
然后,运行以下命令安装 orange:
conda install orange3
GUI 需要一些 conda-forge 没有包含或提供的依赖项。让我们通过在终端中键入并运行以下命令来添加它们:
conda install -c defaults pyqt=5 qt
还可以安装其他附加组件:
conda install orange3-<addon name>
或者,您可以在选项菜单中找到附加管理器。
点
如果您决定使用 Python 包索引,您可能需要您的发行版提供的附加系统包。在安装 Orange 之前,您可能需要创建自己的虚拟环境。完成所有设置后,运行以下命令:
pip install orange3
同样,您需要包括 GUI 的附加依赖项:
pip install PyQt5 PyQtWebEngine
让我们进入下一部分,了解更多关于 Orange 的信息。
[第 2 部分]部件
打开 Orange,您应该能够看到以下用户界面:
Main user interface of Orange. Image by Author
你可以注意到工具箱在你的左边,白色的工作区是画布。工具箱包含所有可以移动到画布上的小部件。
Example of widgets. Image by Author
有 3 种方法可以将 widget 添加到画布:
- 双击小部件。
- 将 widget 拖到画布上。
- 右键单击小部件菜单的画布。
Widget menu. Image by Author
文件和数据表
如果两个部件兼容,您可以将它们连接在一起。让我们来试试:
Gif by Author
- 将文件小部件拖到画布上。
- 将数据表小部件拖到画布上。
- 在文件控件的右侧,有一个半圆形。将鼠标放在它上面,并将其拖动到数据表小部件。
- 请注意,两个小部件之间有一个链接,顶部有单词 Data 。
- 不要担心文件小部件顶部的错误标记,因为我们还没有加载数据。
在画布中,双击文件小部件将其打开。然后,您可以加载自己的数据集或从自定义文档数据集中浏览它。让我们通过自定义文档数据集用 iris.tab 来尝试一下。Orange 接受以下任何格式:
- 制表符分隔的值
- 逗号分隔值
- 篮子文件
- Microsoft Excel 电子表格
- 腌橙数据
您应该能够看到下面的屏幕。
Image by Author
完成后,使用右上角的 X 标记关闭弹出窗口。如果您注意到应用按钮呈灰色,请不要惊慌。这意味着在您修改或编辑了数据的类型或角色后应用更改。接下来,双击数据表小部件。您应该能够看到数据集。你可以检查左边的变量来直观显示数字。检查完所有选项后,您应该能够看到以下屏幕。
Image by Author
分配
您可以通过一些可视化小部件轻松地可视化数据。分布是识别数据集重要要素的最佳微件之一。您可以很容易地看到数据集是否被很好地分离。让我们从上一步继续。
Gif by Author
- 将一个分发小部件拖到画布上。
- 将文件小部件连接到分发小部件。
- 双击分发小部件查看可视化效果。
- 在左上角,选择不同的变量并检查分布结果。
Image by Author
散点图
散点图是另一个可视化微件,它将两个要素绘制在一起,以确定它们之间的投影。让我们来测试一下!
Gif by Author
- 将散点图小部件拖到画布中。
- 将文件小部件连接到散点图小部件。这一步类似于发行版小部件。
- 双击散点图小部件查看可视化效果。
- 您可以根据可用的功能更改 x 轴和 y 轴。
Image by Author
如果您不确定要选择哪些功能,请单击“查找信息性投影”,您将看到以下界面。
Image by Author
点击“开始”并从列表中选择任何项目。散点图将根据您的选择进行修改。
Image by Author
FreeViz
FreeViz widget 使用了从粒子物理学借来的范例。虽然点不能移动,但是锚点是可以移动的。这使我们能够看到相互吸引的特征和相互排斥的特征。它带有一个优化按钮,可以执行爬山优化,使其达到平衡。在您继续之前,让我们清除一些小部件以保持整洁。有两种方法可以删除小组件:
- 右击它,一个菜单就会出现。选择移除选项。您也可以通过这种方式或 F2 快捷键来重命名小部件。
- 左键选中它,点击键盘上的删除按钮。可以多选小部件并一起删除它们。
Gif by Author
完成后,请按照下面的说明继续操作:
Gif by Author
- 将一个 FreeViz 小部件放到画布上。
- 将文件小部件连接到 FreeViz 小部件。
- 将一个数据表小部件放到画布上。
- 将 FreeViz 微件连接到数据表微件。
如果你想知道为什么我们将数据表小部件与 FreeViz 小部件连接,而不是文件小部件。原因是您可以在可视化微件界面中选择数据点,选择的点将输出到数据表微件中。让我们看看下面的 gif,了解更多关于如何为 FreeViz 接口移动锚点和选择数据点的信息。
Gif by Author
或者,您可以继续按优化按钮,直到它达到平衡。您可以使用这个小部件来了解更多关于功能之间关系的信息。让我们看一下官方文档中的以下示例。
Image by Author
只要看一眼,我们就能发现:
- 产卵的生物更容易长羽毛。
- 水生生物更有可能有鳍。
- 产奶的生物更容易有毛。
- 产卵的生物不产奶
FreeViz 是一个非常强大的小工具,可以帮助你从数据集中提取重要的信息。有更多的微件可用于可视化数据集。请随意尝试。
[第三节]结论
让我们回顾一下今天所学的内容。我们首先学习了在我们的计算机中设置和安装 orange 的三种方法。然后,我们探讨了 Orange 中的用户界面和小部件的概念。此外,我们还测试了三种向画布添加小部件的方法。如果兼容,这些小部件可以相互连接。例如,文件小部件可以连接到数据表小部件。最重要的部分是可视化我们已经加载的数据集。我们使用定制的 Iris 数据集尝试了分布、散点图和 FreeViz 小部件。感谢阅读数据科学变得简单教程的第 1 部分。在下一部分中,我将介绍使用 Orange 的数据处理。❤️
数据科学变得简单
- 交互式数据可视化
- 数据处理
- 测试和评估
- 数据建模和预测
- 图像分析
参考
- https://orange.biolab.si/
- https://github.com/biolab/orange3
- https://orange.biolab.si/docs/
数据科学变得简单:使用 Orange 进行测试和评估
原文:https://towardsdatascience.com/data-science-made-easy-test-and-evaluation-using-orange-d74e554d9021?source=collection_archive---------12-----------------------
测试和评估模型的最简单的方法之一,无需接触任何代码!
Image taken from the official Orange website
欢迎回到数据科学简易系列的第三部分。本教程将涵盖使用开源机器学习软件 Orange 测试和评估不同类型模型所需的基本步骤。在我们开始之前,请确保您已经安装了 Orange。请阅读第一部分进行设置和安装,如果您错过了,底部会有链接供您浏览整个 Data Science Made Easy 系列。我将从评估过程的一些基本解释开始。请注意,类型模型和预测将只在下一篇文章中讨论。本文主要关注测试和评估模型的步骤。
测试和评分
Test & Score 小部件可用于在数据集上测试您想要的学习算法。您应该使用此微件来确定所选的的性能,从而大致了解数据集的质量以及要使用的模型。这一步至关重要,因为从长远来看,这将为你节省大量时间。我不建议你直接跳到数据建模和预测,除非你知道你在做什么。我们来试试吧!
Image by Author
- 向画布添加一个文件小部件,并加载来自浏览定制文档的虹膜数据。
- 向画布添加一个测试&分数小部件,并将文件小部件连接到它。
- 转到建模选项卡,选择几个您喜欢的模型,并将其添加到画布中。将每个模型连接到测试&评分小部件。您可以连接任意多个模型。
- 双击测试&分数控件打开界面。
Image by Author
可以看到上图所示的各个型号的评测结果。请注意,分类任务和回归任务会有不同的结果。
对于分类任务,您应该得到以下结果:
- ROC 下面积:为受试者操作曲线下面积。
- 分类:准确率是正确分类的例子的比例。
- F-1: 是精度和召回率的加权调和平均值(见下文)。
- 精度:分类为阳性的实例中真阳性的比例,例如北美鸢尾被正确识别为北美鸢尾的比例。
- 回忆:是数据中所有阳性实例中真阳性的比例,例如所有诊断为患病的人中患病的人数。
如果您对回归任务执行了测试,结果将包括以下内容:
- MSE: 测量误差或偏差的平方平均值(估计值和被估计值之间的差值)。
- RMSE: 是一组数的平方的算术平均值的平方根(估计量对数据拟合的不完美性的度量)
- MAE: 用于衡量预测或预言与最终结果的接近程度。
- R2: 解释为可从自变量预测的因变量中方差的比例。
您可以修改左边的设置,如折叠的数量,以获得更平衡的结果。
混淆矩阵
有时候 Test & Score widget 提供的评测结果对我们来说根本不够好。例如,您将无法知道哪个类具有最佳预测。在这种情况下,我们将依赖另一个名为混淆矩阵的小部件。让我们试一试。
Image by Author
- 只需在画布上添加一个混淆矩阵小部件。
- 将测试&分数控件连接到混淆矩阵控件。
- 双击混淆矩阵控件打开界面。
Image by Author
对于那些不熟悉混淆矩阵的人来说,它给出了预测类和实际类之间的实例比例。在这种情况下,您将知道如上图所示,所有 Iris-setosa 都已被正确预测。这些信息对我们来说更有意义。
ROC 分析
除了混淆矩阵,您还可以根据需要尝试其他种类的小部件来显示重要信息。只需将小部件添加到画布上,并将测试&分数小部件连接到画布上。下图显示了连接到所有其他小部件的正确方式。
Image by Author
ROC 分析 widget 绘制了测试的真阳性率和假阳性率。双击 ROC 分析小部件,您应该能够看到以下内容。
Image by Author
x 轴代表假阳性率,而 Y 轴代表真阳性率。换句话说,一个准确的分类器将会把大部分的点放在左上角,就像我们在上面的图中看到的那样。
校准图
与 ROC 分析小部件不同的是,校准图小部件根据分类器预测的概率绘制分类概率。请注意,在撰写本文时,校准图小部件仅与测试&分数小部件兼容。因此,它只能与测试&分数小工具一起使用。
Image by Author
此微件提供了图中类别概率的预测精度。根据官方文件,在图的底部,左边的点是那些被(正确地)分配了低概率目标类的点,而右边的点被错误地分配了高概率。在图的顶部,右边的实例被正确地分配了高概率,反之亦然。这个小部件可以确定一个分类器是过于乐观(主要给出正面结果)还是悲观(主要给出负面结果)。如果你理解起来有困难,一个精确的分类器将会有一个 s 形曲线的形状,就像我们上面的那个一样。
升力曲线
Lift Curve widgets 测量所选分类器相对于随机分类器的性能。提升曲线常用于人口细分。x 轴代表总体(P-比率),而 Y 轴代表真阳性(TP-比率)。请注意,在撰写本文时,升力曲线小部件仅与测试&分数小部件兼容。因此,它只能与测试&分数控件一起使用。
Image by Author
检查“显示提升凸包”以显示每个所需 TP/P 速率的最佳分类器。根据官方文档,完美的分类器应该有一个朝向 1 的陡坡,直到所有的类都猜对了,然后沿着 y 轴上的 1 直线运行到(1,1)。下图是这种分类器的一个很好的例子。
Image by Author
结论
让我们复习一下今天所学的内容。我们从学习测试&分数小部件的功能开始。它可用于粗略评估模型的性能。您可以简单地将其与其他类型的模型连接,并检查结果。根据任务是分类还是回归,输出结果是不同的。为了获得更多的信息,我们必须依赖一些其他的小部件。其中之一就是混淆矩阵小部件。它为我们提供了预测类和实际类之间的实例比例。此外,还有一些小工具,如 ROC 分析、校准图和升力曲线,可用于从结果中获得更多信息。感谢阅读数据科学变得简单教程的第 3 部分。在下一部分中,我将介绍使用 Orange 进行数据建模。❤️
数据科学变得简单
- 交互式数据可视化
- 数据处理
- 测试和评估
- 数据建模和预测
- 图像分析
参考
- https://orange.biolab.si/
- https://github.com/biolab/orange3
- https://orange.biolab.si/docs/
数据科学方法论 101
原文:https://towardsdatascience.com/data-science-methodology-101-ce9f0d660336?source=collection_archive---------4-----------------------
一个数据科学家如何组织他的工作?
每个数据科学家都需要一种方法来解决数据科学的问题。例如,假设你是一名数据科学家,你的第一份工作是增加一家公司的销售额,他们想知道他们应该在什么时间段销售什么产品。你需要正确的方法来组织你的工作,分析不同类型的数据,并解决他们的问题。你的客户不关心你如何工作;他们只关心你是否能及时完成。
什么是数据科学中的方法论?
数据科学中的方法论是组织你的工作的最佳方式,可以做得更好,并且不浪费时间。数据科学方法由 10 个部分组成:
Source: https://www.ibmbigdatahub.com/blog/why-we-need-methodology-data-science
在本文中,有五个部分,每个部分包含更多的步骤:
- 从问题到方法
- 从需求到收集
- 从理解到准备
- 从建模到评估
- 从部署到反馈
如果我们看最后一张图中的图表,我们会看到它是高度迭代的,永远不会结束;这是因为在真实的案例研究中,我们必须重复一些步骤来改进模型。
从问题到方法
每个客户的请求都始于一个问题,数据科学家的工作首先是理解它,并用统计和机器学习技术来解决这个问题。
- 业务 了解阶段至关重要,因为它有助于明确客户的目标。在这个阶段,我们必须就问题的每一个方面向客户提出许多问题;通过这种方式,我们确信我们将研究相关的数据,并且在这一阶段结束时,我们将有一个业务需求的列表。
- 下一步是分析方法,在这里,一旦清楚地陈述了业务问题,数据科学家就可以定义解决问题的分析方法。这一步需要在统计和机器学习技术的背景下表达问题,这是必不可少的,因为它有助于确定需要什么类型的模式来最有效地解决问题。如果问题是确定某事的概率,那么可以使用预测模型;如果问题是显示关系,可能需要一个描述性的方法,如果我们的问题需要计数,那么统计分析是解决它的最好方法。对于每种方法,我们可以使用不同的算法。
Source: https://www.displayr.com/what-is-a-decision-tree/
从需求到收集
一旦我们找到了解决问题的方法,我们将需要为我们的模型发现正确的数据。
- 数据要求是我们为初始数据收集确定必要的数据内容、格式和来源的阶段,我们在所选方法的算法中使用这些数据。
- 在数据收集阶段,数据科学家确定与问题领域相关的可用数据资源。为了检索数据,我们可以在相关网站上进行网络搜集,或者使用带有现成数据集的存储库。通常,预制数据集是 CSV 文件或 Excel 无论如何,如果我们想从任何网站或存储库中收集数据,我们应该使用 Pandas,这是一个下载、转换和修改数据集的有用工具。这里有一个熊猫数据收集阶段的例子。
import pandas as pd # download library to read data into dataframepd.set_option('display.max_column', None)
dataframe = pd.read_csv("csv_file_url")
print("Data read into dataframe!")dataframe.head() # show the first few rows
dataframe.shape # get the dimensions of the dataframe
从理解到准备
现在数据收集阶段已经完成,数据科学家使用描述性统计和可视化技术来更好地理解数据。数据科学家探索数据集以了解其内容,确定是否需要额外的数据来填补任何空白,以及验证数据的质量。
- 在数据理解阶段,数据科学家试图更多地理解之前收集的数据。我们必须检查每个数据的类型,并了解更多关于属性及其名称的信息。
# get all columns from a dataframe and put them into a list
attributes = list(dataframe.columns.values)# then we check if a column exist and what is its name.
print([match.group(0) for attributes in attributes for match in [(re.compile(".*(column_name_keyword).*")).search(attributes)] if match])
- 在数据准备阶段,数据科学家为建模准备数据,这是最关键的步骤之一,因为模型必须清晰无误。在这一阶段,我们必须确保数据的格式对于我们在分析方法阶段选择的机器学习算法是正确的。数据帧必须有适当的列名、统一的布尔值(是、否或 1,0)。我们必须注意每个数据的名称,因为有时它们可能用不同的字符书写,但它们是同一件事;例如(water,WaTeR),我们可以将一列中的所有值都变成小写。另一个改进是从数据帧中删除数据异常,因为它们是不相关的。
# replacing all 'yes' values with '1' and 'no' with '0'
dataframe = dataframe.replace(to_replace="Yes", value=1)
dataframe = dataframe.replace(to_replace="No", value=0)# making all the value of a column lowercase
dataframe["column"] = dataframe["column"].str.lower()
从建模到评估
一旦为选择的机器学习算法准备好数据,我们就准备好建模了。
- 在建模阶段,数据科学家有机会了解他的工作是否准备就绪,或者是否需要评审。建模侧重于开发描述性或预测性的模型,这些模型基于统计或通过机器学习采取的分析方法。描述性建模是一个数学过程,描述现实世界的事件以及造成这些事件的因素之间的关系,例如,描述性模型可能会检查这样的事情:如果一个人这样做,那么他们可能会更喜欢那样。预测建模是使用数据挖掘和概率来预测结果的过程;例如,可以使用预测模型来确定电子邮件是否是垃圾邮件。对于预测建模,数据科学家使用一个训练集,这是一组结果已知的历史数据。这个步骤可以重复更多次,直到模型理解了问题和答案。
- 在模型评估阶段,数据科学家可以用两种方式评估模型:坚持和交叉验证。在 Hold-Out 方法中,数据集被分为三个子集:一个训练集如我们在建模阶段所说;一个验证集,它是一个子集,用于评估在训练阶段建立的模型的性能;测试集是一个子集,用于评估模型未来可能的性能。
下面是一个建模和评估的例子:
# select dataset and training field
data = pd.read_csv("student-mat.csv", sep=";")
data = data[["G1", "G2", "G3", "studytime", "failures", "absences"]]
predict = "G3" # select field to predictx = np.array(data.drop([predict], 1))
y = np.array(data[predict])# split the dataset into training and test subsets
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(x, y, test_size = 0.1)linear = linear_model.LinearRegression() # create linear regression modellinear.fit(x_train, y_train) # perform the training of the model
acc = linear.score(x_test, y_test) # calculate the accuracy
print("Accuracy: ", acc) # print the accuracy of the model
从部署到反馈
数据科学家必须让利益相关者熟悉在不同场景中产生的工具,因此一旦模型被评估并且数据科学家确信它将工作,它就被部署并进行最终测试。
- 部署阶段取决于模型的目的,它可能会向有限的一组用户或在测试环境中推广。一个真实的案例研究例子可以是为医疗保健系统设计的模型;该模型可用于一些低风险患者,之后也可用于高风险患者。
- 顾客通常会充分利用反馈阶段。部署阶段后的客户可以说模型是否符合他们的目的。数据科学家接受这些反馈,并决定他们是否应该改进模型;这是因为从建模到反馈的过程是高度迭代的。
当模型满足客户的所有要求时,我们的数据科学项目就完成了。
要了解更多,你可以访问我的 GitHub 库,在那里你可以找到一个真实的用例例子等等。
来源: IBM 数据科学方法论,来自 Coursera
书籍来源:预测未来范例的模型:第 1 卷
农齐奥·洛加洛
关于可混搭文章的在线新闻流行度的数据科学小型项目
原文:https://towardsdatascience.com/data-science-mini-project-on-online-news-popularity-of-mashable-articles-d7a120feef0d?source=collection_archive---------13-----------------------
我们有一个由 mashable 发布的文章数据集,我们希望预测给定文章的受欢迎程度。这是一个分类问题。一些特征属于各种类别,例如关于文章的定量信息——例如图像数量、视频数量等。—以及关于文章的定性信息—例如文章是哪一天发表的以及文章属于哪个主题。
将图像数量与份额数量进行比较,我们会得到以下条形图:
正如你所看到的,只有一张图片的文章总体上做得更好。然后,没有图像的文章是次优的;有两张图片的文章排在第三位。拥有 2 张以上图片的文章的分享数量可以忽略不计。有鉴于此,在一篇文章中包含 0 或 1 张图片将是明智的。
将视频数量与分享数量进行比较,我们得到了下图:
注意,没有视频的文章往往做得最好,有 1 个视频的文章做得第二好,有 2 个视频的文章做得第三好。拥有 2 个以上视频的文章相比之下可以忽略不计。
我们还可以看到一周中哪一天的份额最高。这是一周中各天的条形图:
如你所见,工作日的份额最高。周三、周一、周二和周四的股票数量最高,周五的股票数量大幅下降。
我们还可以看到哪个类别或主题做得最好。这是一个饼状图,分为科技、娱乐、世界、商业、社交媒体和生活方式六个类别:
表现最好的类别是科技,其次是娱乐、世界和商业。最不受欢迎的类别是社交媒体和生活方式。
使用 Tableau,我们可以创建上述可视化效果,并进行一些基本的数据挖掘。我们得到的见解可以告诉我们一篇文章中要包含多少图片和视频,在哪天发表这篇文章,以及这篇文章应该属于哪个类别。
接下来,使用 Python,我对数据集应用了一些机器学习。先公式化一个分类问题,我用 1400 股的门槛创建了两个类:如果分享数大于 1400,那么文章被分类为热门;如果分享数量小于或等于 1400,则该文章被分类为不受欢迎。
为了准备 csv 文件,我使用 IF 函数在 shares 列之后创建了一个新列——popularity 列;如果份额数大于 1400,则该类别为 4(受欢迎),否则该类别为 2(不受欢迎)。
我们的目标是创建一个机器学习模型,将文章分类为流行或不受欢迎。为此,我使用了梯度推进分类器。
首先,我将数据集分为训练集和测试集——将数据集的 80%作为训练集,20%作为测试集。
我们将梯度提升分类器与我们的训练集相匹配。然后,我们将拟合的梯度推进分类器应用于我们的测试集。
根据通过比较预测类和测试类得到的混淆矩阵,我们的模型从 7929 个测试分类中得到 5277 个正确的分类。这给出了 67%的准确度。
以下是 python 代码:
#Classification for Online News Popularity#Importing the Librariesimport pandas as pd#Importing the datasetdataset = pd.read_csv('OnlineNewsPopularity(classification with nominal).csv')X = dataset.iloc[:,2:-2].valuesY = dataset.iloc[:, -1].values#Splitting the dataset into the Training set and Test setfrom sklearn.model_selection import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)#Fitting Gradient Boosting to Training setfrom sklearn.ensemble import GradientBoostingClassifierclassifier = GradientBoostingClassifier()classifier.fit(X_train, Y_train)#Predicting the Test set resultsY_pred = classifier.predict(X_test)#Making the Confusion Matrixfrom sklearn.metrics import confusion_matrixcm = confusion_matrix(Y_test, Y_pred)
数据集可以在这里找到:http://archive . ics . UCI . edu/ml/datasets/Online+News+population
K.费尔南德斯 p .维纳格雷和 p .科尔特斯。预测在线新闻流行度的主动智能决策支持系统。第 17 届 EPIA 2015-葡萄牙人工智能会议记录,9 月,葡萄牙科英布拉。
数据科学最低要求:开始从事数据科学时你需要知道的 10 项基本技能
原文:https://towardsdatascience.com/data-science-minimum-10-essential-skills-you-need-to-know-to-start-doing-data-science-e5a5a9be5991?source=collection_archive---------1-----------------------
数据科学是一个广阔的领域,包括几个细分领域,如数据准备和探索;数据表示和转换;数据可视化和显示;预测分析;机器学习等。对于初学者来说,提出以下问题是很自然的:我需要什么技能才能成为一名数据科学家?
本文将讨论实践数据科学家必备的 10 项基本技能。这些技能可以分为两类,即技术技能(数学&统计、编码技能、数据争论&预处理技能、数据可视化技能、机器学习技能和真实世界项目技能)和软技能(沟通技能、终身学习技能、团队合作技能和道德技能)。
数据科学是一个不断发展的领域,但是掌握数据科学的基础将为您提供必要的背景,您需要这些背景来追求高级概念,如深度学习、人工智能等。本文将讨论实践数据科学家的 10 项基本技能。
开始从事数据科学时需要知道的 10 项基本技能
1.数学和统计技能
(一)统计和概率
统计和概率用于特征的可视化、数据预处理、特征转换、数据插补、降维、特征工程、模型评估等。以下是您需要熟悉的主题:
a)平均值
b)中间值
c)模式
d)标准偏差/方差
e)相关系数和协方差矩阵
f)概率分布(二项式、泊松、正态)
g) p 值
h) MSE(均方差)
i) R2 分数
j) Baye 定理(精确度、召回率、阳性预测值、阴性预测值、混淆矩阵、ROC 曲线)
k) A/B 测试
l)蒙特卡罗模拟
㈡多变量微积分
大多数机器学习模型是用具有几个特征或预测器的数据集构建的。因此,熟悉多变量微积分对于建立机器学习模型极其重要。以下是您需要熟悉的主题:
a)几个变量的函数
b)导数和梯度
c)阶跃函数、Sigmoid 函数、Logit 函数、ReLU(校正线性单位)函数
d)成本函数
e)绘制功能图
f)函数的最小值和最大值
㈢线性代数
线性代数是机器学习中最重要的数学技能。数据集被表示为矩阵。线性代数用于数据预处理、数据转换和模型评估。以下是您需要熟悉的主题:
a)矢量
b)矩阵
c)矩阵的转置
d)矩阵的逆矩阵
e)矩阵的行列式
f)点积
g)特征值
h)特征向量
㈣优化方法
大多数机器学习算法通过最小化目标函数来执行预测建模,从而学习为了获得预测标签而必须应用于测试数据的权重。以下是您需要熟悉的主题:
a)成本函数/目标函数
b)可能性函数
c)误差函数
d)梯度下降算法及其变体(例如随机梯度下降算法)
在这里了解更多关于梯度下降算法的信息: 机器学习:梯度下降算法如何工作 。
2.基本编程技能
编程技能在数据科学中至关重要。因为 Python 和 R 被认为是数据科学中最流行的两种编程语言,所以掌握这两种语言的基本知识至关重要。一些组织可能只需要 R 或 Python 中的一种技能,而不是两者都需要。
(一)Python 中的技能
熟悉 python 的基本编程技能。以下是您应该掌握如何使用的最重要的软件包:
a)数字
b)熊猫
c) Matplotlib
d) Seaborn
e) Scikit-learn
PyTorch
㈡研发技能
a)潮汐
b) Dplyr
c) Ggplot2
d)插入符号
e)字符串
㈢其他编程语言技能
一些组织或行业可能需要以下编程语言技能:
a) Excel
b)画面
c) Hadoop
d) SQL
e)火花
3.数据争论和预处理技巧
数据是数据科学中任何分析的关键,无论是推理分析、预测分析还是规定分析。模型的预测能力取决于构建模型时所用数据的质量。数据以不同的形式出现,如文本、表格、图像、声音或视频。最常见的情况是,用于分析的数据必须经过挖掘、处理和转换,才能呈现为适合进一步分析的形式。
i) 数据争论:数据争论的过程对于任何数据科学家来说都是至关重要的一步。在数据科学项目中,很少能够轻松访问数据进行分析。数据更有可能在文件、数据库中,或者从网页、tweets 或 pdf 等文档中提取。知道如何争论和清理数据将使您能够从数据中获得关键的洞察力,否则这些洞察力将被隐藏。
ii) 数据预处理:关于数据预处理的知识非常重要,包括以下主题:
a)处理缺失数据
b)数据插补
c)处理分类数据
d)为分类问题编码类别标签
e)特征变换和降维技术,例如主成分分析(PCA)和线性判别分析(LDA)。
4.数据可视化技能
理解良好的数据可视化的基本组件。
a) 数据成分:决定如何可视化数据的第一个重要步骤是了解数据的类型,例如分类数据、离散数据、连续数据、时间序列数据等。
b) 几何组件:在这里您可以决定哪种可视化适合您的数据,例如散点图、线形图、条形图、直方图、QQ 图、平滑密度、箱线图、对线图、热图等。
c) 映射组件:这里你需要决定用什么变量作为你的 x 变量,用什么变量作为你的 y 变量。这一点非常重要,尤其是当数据集是包含多个要素的多维数据集时。
d) 秤组件:在这里您可以决定使用哪种秤,例如线性秤、对数秤等。
e) 标签组件:这包括轴标签、标题、图例、使用的字体大小等。
f) 伦理成分:在这里,你要确保你的可视化讲述真实的故事。在清理、总结、操作和制作数据可视化时,你需要意识到你的行为,并确保你没有利用你的可视化来误导或操纵你的观众。
5.基本的机器学习技能
机器学习是数据科学的一个非常重要的分支。理解机器学习框架很重要:问题框架;数据分析;建模、测试&Evaluation;和模型应用。从这里了解更多机器学习框架: 机器学习流程 。
以下是需要熟悉的重要机器学习算法。
I)监督学习(连续变量预测)
a)基本回归
b)多元回归分析
c)正则化回归
ii)监督学习(离散变量预测)
a)逻辑回归分类器
b)支持向量机分类器
c)K-最近邻(KNN)分类器
d)决策树分类器
e)随机森林分类器
iii)无监督学习
a)k 均值聚类算法
6.来自真实世界顶点数据科学项目的技能
仅仅从课程工作中获得的技能不会让你成为数据科学家。合格的数据科学家必须能够证明成功完成了真实世界的数据科学项目,该项目包括数据科学和机器学习过程中的每个阶段,如问题框架、数据采集和分析、模型构建、模型测试、模型评估和部署模型。现实世界的数据科学项目可以在以下项目中找到:
a) Kaggle 项目
b)实习
c)来自访谈
7.通讯技能
数据科学家需要能够与团队的其他成员或组织中的业务管理员交流他们的想法。良好的沟通技巧将在这里发挥关键作用,能够向很少或根本不了解数据科学技术概念的人传达和展示非常技术性的信息。良好的沟通技巧将有助于培养与其他团队成员(如数据分析师、数据工程师、现场工程师等)团结一致的氛围。
8.做一个终身学习者
数据科学是一个不断发展的领域,所以要做好接受和学习新技术的准备。与该领域的发展保持联系的一种方式是与其他数据科学家建立联系。一些促进网络化的平台有 LinkedIn、github 和 medium ( 向数据科学 和 向 AI 出版物)。这些平台对于获取该领域最新发展的最新信息非常有用。
9.团队合作技能
作为一名数据科学家,你将在一个由数据分析师、工程师和管理员组成的团队中工作,因此你需要良好的沟通技巧。您还需要成为一名优秀的倾听者,尤其是在早期项目开发阶段,您需要依靠工程师或其他人员来设计和构建一个优秀的数据科学项目。成为一名优秀的团队成员有助于你在商业环境中茁壮成长,并与团队中的其他成员以及组织的管理人员或主管保持良好的关系。
10.数据科学中的伦理技能
理解你的项目的含义。对自己诚实。避免操纵数据或使用有意造成结果偏差的方法。从数据收集到分析,再到模型构建、分析、测试和应用的所有阶段都要符合道德规范。避免为了误导或操纵你的观众而捏造结果。在解释你的数据科学项目的发现时要合乎道德。
总之,我们已经讨论了实践数据科学家所需的 10 项基本技能。数据科学是一个不断发展的领域,但是掌握数据科学的基础将为您提供必要的背景,您需要这些背景来追求高级概念,如深度学习、人工智能等。
数据科学 MOOC 验证证书—值得吗?
原文:https://towardsdatascience.com/data-science-mooc-verified-certificate-is-it-worth-it-5d60a6e574e0?source=collection_archive---------5-----------------------
大部分辅助开放在线课程都是免费的在线课程,任何人都可以注册。MOOCs 提供了一种负担得起、灵活的方式来学习新技能,推进你的职业发展,并提供大规模的优质教育体验。MOOCs 涵盖了领导力、分析、数据科学、机器学习、专业技能、工程、商业管理、人文科学、计算机科学等广泛的在线课程。这些课程通常由世界各地的顶尖大学提供,如麻省理工学院、哈佛大学、加州大学伯克利分校、密西根大学、EPFL 大学、香港理工大学、昆士兰大学等等。一些课程也由大公司提供,如 IBM、google 和微软。MOOCs 最大的优势是有机会向领导和专家学习,有特权选修世界顶尖大学的课程。最受欢迎的 MOOCs 提供商包括:
a)EDX:https://www.edx.org/T5
b)Coursera:https://www.coursera.org/
c) 数据营:https://www.datacamp.com/
丁)乌代米:https://www.udemy.com/
e) 乌达城:https://www.udacity.com/
琳达:https://www.lynda.com/
这些 MOOCs 提供商中,有些会让你免费旁听他们的课程,而有些则要求你获得认证证书(每门课程可能要花费 50 至 100 美元,甚至更多)。因此,自然的问题是:我应该为 MOOC 申请认证证书吗?
在回答这个问题之前,我先在这里提一下,我的大部分数据科学知识都是从 MOOCs 获得的。以下是我列出的 3 个最佳数据科学 MOOC 专业:
1。数据科学专业证书(哈佛,通过 edX)
包括以下课程,全部使用 R 教授(您可以免费旁听课程或购买认证证书):
- 数据科学:R 基础;
- 数据科学:可视化;
- 数据科学:概率;
- 数据科学:推理和建模;
- 数据科学:生产力工具;
- 数据科学:扯皮;
- 数据科学:线性回归;
- 数据科学:机器学习;
- 数据科学:顶点
2。分析:基本工具和方法(Georgia TechX,通过 edX)
包括以下课程,全部使用 R、Python 和 SQL 讲授(您可以免费审计或购买经过验证的证书):
- 分析建模导论;
- 数据分析计算导论:
- 商业数据分析。
3。应用数据科学与 Python 专业化(密执安大学,通过 Coursera)
包括以下课程,全部使用 python 教授(您可以免费旁听大多数课程,有些课程需要购买认证证书):
- Python 中的数据科学导论;
- 应用 Python 绘图、制图和数据表示;
- Python 中的应用机器学习;
- Python 中文本挖掘的应用:
- Python 中的应用社会网络分析。
为一个 MOOC 支付一个验证过的证书值得吗?
让我提供我的看法。
追求认证证书可以激励你保持专注。大多数情况下,审计学习者不会完成整个课程,也不会认真对待家庭作业。我认为你花钱买的东西是有价值的。然而,如果旁听课程可以让你接触到包括家庭作业在内的所有课程材料,并且如果你有足够的动力去完成这些作业,那么我认为旁听课程是更好的选择。在一些学科,如数据科学和其他一些专业领域,学习只能通过实践来实现,例如,你不能仅仅通过听讲座来学习编程。你必须参加家庭作业和讨论论坛,这些将帮助你发展实践技能。
如果你是某个领域的新手,你需要一些东西来展示你的知识,那么追求一个经过验证的课程可能是好的。如果你已经有了坚实的背景,而你只是对增长知识或推进职业生涯感兴趣,那么你真的不需要追求一个经过验证的证书。例如,在计算机科学、软件工程、数据科学和分析等领域,人们更关注的是你能做什么,而不是你有什么证书。因此,如果你已经有一些定量学科的背景,如物理、数学、统计和计算机科学,那么你可以旁听数据科学和分析课程,以便探索和学习该领域。展示你的工作还有其他重要的方式,比如你可以在 LinkedIn、Github、Medium 和 Kaggle 等其他平台上展示你的项目和成就。
有太多好的数据科学课程了。对于像我这样终身学习的人来说,有很多选择。如果你每次参加 MOOC 课程都想获得认证证书,你可能会花很多钱。大约 3 年前,当我开始参加数据科学 MOOCs 时,我对追求认证证书感到兴奋。今天,我更关心我能用知识做什么,而不是到处积累经过验证的证书。我总是搜索我可以旁听的课程,但这也让我可以完成家庭作业。因此,在课程结束时,我与追求认证证书的人没有任何不同,唯一的区别是一张名为认证证书的纸,每门课程的费用从 50 美元到 100 美元不等。
总之,MOOCs 为学习新技能、拓展知识和职业发展提供了独一无二的机会。在某些情况下,追求认证证书作为展示你技能的一种方式可能是值得的,但在大多数情况下,审计学习者可以获得同样的技能和经验。始终搜索你可以免费完成的课程,只有在特殊情况下,你才应该学习经过认证的课程。
有效内容策略的数据科学和 NLP
原文:https://towardsdatascience.com/data-science-nlp-for-an-effective-content-strategy-8e87f12246b5?source=collection_archive---------13-----------------------
利用流程优化、分析和 NLP 的力量来设计数据科学知识门户的内容策略
背景
过去几年,对数据科学和人工智能技能的需求呈指数级增长。然而,熟练数据科学家的供应并没有以同样的速度增长,从而导致需求和供应之间的巨大差距。
除了针对数据科学各个学科的结构化培训之外,由数据科学知识门户推动的全方位知识共享和增强将在很大程度上帮助弥补数据科学家的供需缺口。
知识门户的成功和有效性取决于能够在尽可能短的时间内以最佳内容质量交付的内容范围。这又取决于确定合适的内容贡献者和自动化整个内容监管过程。
内容战略的总体方法
设计内容策略的总体方法基于利用流程优化、分析和 NLP 的力量,通过以下方式确保内容和贡献者的质量:
Overarching approach to content strategy
内容战略的组成部分
以下是内容战略的组成部分:
Building blocks of content strategy
使用建议的内容类型构建内容矩阵
该门户将有各种内容类型的均匀组合,并将开发一个多维内容矩阵。达到内容类型的标准将对应于多维内容矩阵的每个维度。提议的标准是:
Content matrix and content types
内容层次&内容链中的观众流
内容层次结构是为了使观众从需要相对较少注意力的最简单的内容形式到需要更多注意力和兴趣的最复杂的内容类型无缝流动。
Content hierarchy
- 内容层次的第一层将包括内容片段,如分析中概念的每日剂量、conecpts 上的 youtube 短视频等,这些内容片段需要读者很少的阅读时间。这将有助于吸引门户网站的初始受众,并可以引导读者选择需要更长阅读时间和更长注意力的更密集的内容类型。
- 层次结构中的下一层是博客,它可以基于第一层,可以是上面提出的任何标准——针对各种层次的受众,基于各种数据科学和 ML 的概念。这些内容将被认为比第一级内容更受关注,并且通常来自第一级内容类型之一。
- 然后,可以将关于特定主题的选定博客集合合并到一本电子书中——为该集合选择文章的标准可以是关于类似主题的博客,也可以是已经被读者接受且具有高阅读率和收视率的博客。
- 下一级或最高级别的内容类型可以是关于数据科学广泛领域的广泛参考著作,其中包含关于该领域的大量文章、播客和行业发展,可以重新用作该领域的培训内容。
这样,内容层次将创建一个观众链,一个层次将读者引向下一个层次,以此类推,从而创建一个无缝的观众漏斗。
基于内容层次结构的内容链
内容链的灵感来自于生态系统中的食物链,它显示了从一个层次的内容到另一个层次的理想流量。
The content chain
内容链上的建议流量
创建内容层次结构背后的深谋远虑是从需要最少关注范围的内容开始,逐步构建需要更高关注范围的更复杂内容类型的轨迹。
下面的流程图用代表内容层次结构级别的颜色说明了跨几个级别的内容类型的建议流量。
Flow of traffic across the content chain
设置内容指标
设计内容指标的目的是从内容质量和受众偏好两方面评估内容的有效性。这将为编辑团队提供一种方向感,指导他们如何选择内容和投稿人。
- 重复查看次数与查看次数 —这表明有多少用户不止一次阅读过该内容,这意味着该内容片段被频繁引用,此处较高的比率可能意味着该内容片段可以作为参考资料。
- 点击数&点击率 —这是对内容质量的直接衡量,因为它表明有多少点击内容的观众阅读了完整的内容。
- 点赞数——这是对内容收视率的衡量。
- 亮点数量&引用数量 —与第一个指标类似,这是对内容被其他作者引用的频率的衡量。它也给出了将流量导向内容片段的其他来源的度量。
- 跳出率 —这是来自 web analytics 的一个典型指标,表示一进入内容就离开的观众的百分比。这表明读者参与度较低。
- 来自读者评论的情感分析的情感分数将提供关于内容最喜欢和最不喜欢的方面的见解。
- 影响因素 —最后,可以基于上面提到的几个指标的组合,为内容块开发一个综合评分,这是对内容质量和它吸引读者的程度的测量。
在职贡献者
能够吸引观众的高质量内容的关键是拥有一群充满激情、知识渊博的贡献者,他们能够创作出内容大师作品。雇用贡献者的核心原则是确定对写作和数据科学有着同等热情的候选人。在寻找潜在贡献者时,招聘流程应考虑以下方面:
- 适合写作的动机
- 将贡献者的热情与知识门户的愿景结合起来
- 领域专业知识
- 预计保留倾向
- 具有不同人口统计和领域专业知识的贡献者的良好组合
基于自动和手动相结合的搜索来寻找贡献者,通常包括:
- 数据科学各个领域的行业专家/名人
- 拥有自己的博客或为其他出版物写作的当前作家
- 想要开始写作的数据科学爱好者
- 学生作家
贡献者选择和加入的半自动方法(行业专家/名人除外)
下图所示的方法将有助于创建一个同步且有记录的流程,用于创建贡献者管道,并在选择流程的每个里程碑获取贡献者信息。
半自动方法还将确保整个选择过程随着投稿人数量和出版物规模的增加而可伸缩,而不会引入对人的依赖性的瓶颈。
Selecting & On-boarding contributors
贡献者的工作分配
一旦基于上述选择过程选择了贡献者,重要的是要确保贡献者有一个持续的工作流,而不是工作不足或工作过度。随着出版物规模的增长,结构化和自动化的工作分配方法对于维护可伸缩性再次变得至关重要。
工作分配的过程应基于以下因素:
- 将要创建的内容与贡献者的域和能力相匹配
- 建立基于配置文件匹配的自动分配系统,以便内容自动分配给贡献者,而无需等待时间
- 根据贡献者的可用性和发布截止日期,为贡献者创建一个工作渠道。
- 使分配过程透明且可衡量
Work allotment to contributors
内容质量
贡献者创建的内容应该使用多层次的方法进行动态评估。这将是一个基于规则的算法,自然语言处理和人工编辑层的组合,具有对基于规则的算法的反馈机制,以保持一致的内容质量。这将确保保持内容质量不会成为阻碍出版周期的瓶颈。
最上面的三层是基于自动 NLP 的层,用于保持内容质量,这将在内容被传递到手动过滤器之前对其进行相当程度的过滤,从而减少手动工作,进而减少对人的依赖。此外,来自人工层的反馈将用于增强 NLP 层的学习,从而日益加强自动化质量层。
Multi-layer content quality filtering
处理读者评论
任何商业冒险只有在能够倾听客户意见并根据客户反馈勤奋工作时才是成功的。这有利于门户发展成为由客户声音驱动的以受众为中心的门户。阅读读者评论和回答读者问题对维持这方面很重要。这可以通过 NLP 层和手动层的组合来实现,以确保其可扩展性。
1.读者评论的文本挖掘标记高度批评的评论或不满意的读者,以及自动升级机制,以便此类评论引起相关利益相关方的注意
2.一个聊天机器人或 Q &一个基于 RNN 设置的层,用来回答读者的问题。聊天机器人无法回答的问题可以转发给人类代理,答案可以反馈给聊天机器人进行学习。
提议的高级流程
考虑到整体内容策略中讨论的所有方面,建议采用以下包含内容策略所有方面的高级流程:
End-to-end workflow of knowledge portal
结束语
基于流程优化、NLP 和数据科学概念的各个方面发展的内容策略将为知识门户带来优化且可靠的内容流。最后,这样的策略也加强了知识门户在“ 实践所宣扬的 ”方面的理想。
高管的数据科学可观察性
原文:https://towardsdatascience.com/data-science-observability-for-executives-a054411faecc?source=collection_archive---------35-----------------------
为什么管理层需要观察与数据科学相关的 KPI?
Binoculars Man, Pixabay.
数据科学的可观测性(DS)是一个新兴的领域,它有时与 MLOps 或 AIOps 一起被提及。年轻的初创公司正在开发新的产品,以解决一切数据科学缺乏监控和警报的问题。然而,他们主要面向数据科学家或工程师,当然,他们是最先感受到管理多个模型的痛苦的角色。然而,我将试图证明数据科学可观察性的影响应该针对决策者,如高层和中层经理,这些人负责支出、资金、管理,最重要的是对数据科学运营对公司客户、业务、产品、销售的影响负责,我们不要忘记公司的底线。
在我之前的文章中,我已经写了许多用例以及监控&警报的巨大重要性,特别是从数据科学研究者的角度。然而,在本帖中,我们将涵盖几个受 DS 流程影响的角色,最重要的是高层管理人员,如投资者&CEO,他们在 DS 基础架构、团队、开发和 DevOps 上投入了大量资金,但并不完全了解 DS 对其业务的各种影响点。我认为,高级管理层需要像关注业务、财务、销售、营销和产品管理指标一样关注与 ds 相关的指标,如生命周期价值(LTV)、客户获取成本(CAC)、客户保持成本(CRC)、日均用户(DAU)、月均用户(MAU)、月经常性收入(MRR)、年经常性收入(ARR)等指标。
让我们从几个对与 DS 相关的任何事情都负有共同或全部责任的角色开始,并讨论它的范围。
人物角色
- SRE /德沃普斯
- 数据工程师
- 数据科学家
- 数据科学经理
- 产品经理
- 首席执行官
- 投资者
我们可以将这个列表分为两部分。第一部分是技术人员,如 SRE、DevOps、数据工程师和数据科学家。第二类是 DS 经理、产品经理、首席执行官和投资者。技术角色分担端到端的责任,从提供数据、处理、创建算法和部署它们开始。许多公司已经开始为这部分人提供解决方案,以数据科学家为主要焦点。
第二组包括首席执行官和投资者等决策者,应该密切观察与数据科学生产的核心直接或间接相关的 KPI,类似于今天的 APM 指标。由于 New Relic 等公司的新技术,一场可观测性的革命已经兴起。
就成本而言,维持 core-DS 的生产相当昂贵。我们谈论的是高薪专业技术人员、可能需要自动扩展的昂贵基础设施,以及受算法质量影响的直接业务影响。在一个算法投入生产之前,计算它的成本可能很容易,通常是在它和过程中使用的基础设施上花费的时间。
然而,在 DS 项目投产后,观察预计成本和衡量 DS 对业务和产品的影响要困难得多。
例子
- 观察自动扩展发生时的基础架构成本,及时停止,使用策略来控制这种情况。
例如,让我们以脸书为例,他们为数十亿人提供服务,拥有复杂的系统,可以根据需求进行扩展,以支持点击他们的流量和他们显示的广告。与基础设施变化相关的预测成本应该而且能够计算出来,这可能是因为交通的时效性。它们对企业的健康发展至关重要,高层管理人员应该遵守。 - 观察模型训练或预测停机时间的成本,即客户间接没有获得他们注册的高级服务。
例如,让我们以 Spotify 为例,想象一下 Spotify 的你的歌曲推荐引擎已经关闭,或者由于某种原因使用旧型号进行了错误预测,你的用户要么没有得到歌曲推荐,要么得到了糟糕的推荐。停机时间实际上影响了客户保持率。新用户感到困惑,并对系统失去信任,而老用户则因为功能和体验不是他们所习惯的而离开,转向另一种服务。 - 当预测质量下降或数据不再可信时,观察成本。这应该包括支持成本和对客户的影响。
出于与上述 2 中相同的原因,您的用户感觉到情况变得更糟,并对系统失去了信任,他们不再相信系统能够正确预测。在这种情况下,成本可以归因于发现问题、解决问题和防止流失的工作量。 - 观察成本与算法的重新设计有关,这甚至意味着一个新的研究项目。让我们来看看 Waze ,想象一下他们发布了一种新的算法,试图将城市中的交通堵塞降至最低。但是,由于某种原因,算法在几个城市无法正常工作,正在被撤出。需要创建一个新的项目,这意味着分配新的预算,并争取时间和资源来再次解决这个问题。
- 观察对业务 KPI 的负面影响的成本,例如,当算法的质量开始恶化时。
由于概念漂移和许多其他因素,恶化可能会发生,并且应该加以考虑。此外,对这些因素的监控和处理也应添加到预计成本中。
例如,您的业务 KPI 是与系统交互的用户数量,而 DS KPI 是预测准确性。模型退化直接影响预测精度,预测精度直接影响用户体验。
让我们以优步为例,假设他们的系统不再能够高精度地预测到达目的地的最短最安全路径。用户为这项服务支付了更多的费用,司机浪费了更多的时间来驾驶更少的人。车手和用户现在都在考虑转向比赛。
这些例子只是冰山一角,但是它们显示了 DS 流对业务和产品 KPI 的重要性、隐藏成本和影响,并且它们应该在您组织的日常议程、报告和仪表板中占据重要位置。最后,高层管理人员应该意识到这些潜在的影响,并要求了解 DS 流程对其运营的全面影响。
我要感谢我的同事 Dor Sasson 进行了富有成效的讨论。
Ori Cohen 博士拥有计算机科学博士学位,主要研究机器学习。他是 TLV 新遗迹公司的首席数据科学家,从事 AIOps 领域的机器和深度学习研究。
评估驱逐以了解美国
原文:https://towardsdatascience.com/data-science-of-evictions-874a41f3cc36?source=collection_archive---------31-----------------------
Dramatic visualization of 2016 eviction filings by state at the National Building Museum
注: 点击此处阅读更多关于 DC 华盛顿州通过其分区豁免条例 鼓励公平发展的尝试。
当你在画廊的走廊中穿行,在高耸的包装家具堆中穿行,在令人望而生畏的胶合板结构中进进出出,很容易用你自己的记忆来填充一般的实物收藏——你自己的物品,你童年的家。
从 2018 年 4 月到 2019 年 5 月,华盛顿国家建筑博物馆的一个画廊侧厅被改造成了一个引人注目的视觉展示迷宫,展示了exhibited:the American City(2016)中揭示的统计数据和故事。普林斯顿社会学教授马修·德斯蒙德的这项强有力的探索性工作,以及它所激发的博物馆展览,引起了全国对这个问题的关注,这个问题以前从未被大规模地关注过。
为了证实关于被驱逐的长篇报道,德斯蒙德和他的研究团队通过梳理 8000 万份与房东-房客纠纷相关的美国法庭记录,收集了一个全国性数据集。驱逐实验室数据集于 2018 年 5 月向公众发布。尽管对收集方法和潜在的统计不足有一些批评,但这些数据为进一步研究和政策工作提供了肥沃的土壤,以应对这一全国性问题。
在这一努力之前,驱逐的话题只是少数大城市的领域,如旧金山、洛杉矶、纽约、波士顿和波特兰。在这些城市,基层组织东拼西凑地收集当地数据。
在阐述项目背后的基本原理时,Desmond 问道:
想象一下,如果我们不知道每年有多少美国人被监禁……或者有多少人从高中辍学、离婚或失业。如果我们不知道问题有多大,在哪里发生,或者有多少家庭受到影响,那么我们如何开始寻找解决方案的关键工作?
驱逐实验室的方法、结果和评论为公共政策团体和数据科学家提供了丰富的见解,这些团体和科学家希望在大范围内争取对数据收集的支持。
背景
德斯蒙德和他的团队将驱逐定义为通过正式的法律程序,房东将房客从他或她拥有的房产中驱逐出去的事件。该数据集没有考虑到非正式的驱逐,这种驱逐发生在房东采取行动时,比如(胡萝卜)付钱给房客让他们搬走,或者(棍子)移开他们的门迫使他们离开。根据驱逐实验室的说法,“有证据表明‘非正式驱逐’比‘正式的’法院命令驱逐更常见。”需要做进一步的工作,将驱逐实验室收集的国家数据集与当地做法联系起来,以便得出反映现实世界条件的驱逐率。
方法学
驱逐实验室开始了数据收集过程,直接从法院索取所有与驱逐有关的记录。他们通过网络搜集门户网站来补充这些信息。在进行数据清理时,该小组将记录格式化,以便每个观察代表一个家庭,删除重复的病例。为了进行验证,该小组对照了在县一级收集的记录,并采用统计模型来评估从一年到下一年收集的可接受差异。由此产生的数据集被加入到 2000 年和 2010 年的美国人口普查和 2016 年的 ESRI 商业分析中,为其他人口统计方法提供信息。总的来说,该小组评估了 48 个州(除北达科他州和南达科他州之外)以及 DC 的 8000 万份驱逐记录。
结果
德斯蒙德和他的团队揭示了全国的驱逐率为 2.34%,东南部各州的驱逐率明显更高,如弗吉尼亚、南卡罗来纳、北卡罗来纳和佐治亚。2016 年驱逐率最高的五个城市中有四个位于弗吉尼亚州(排名第一的城市是南卡罗来纳州的查尔斯顿)。在排名第二的弗吉尼亚州里士满市,多达九分之一的家庭在 2016 年面临被驱逐。根据弗吉尼亚联邦大学的一份报告:
在全州范围内,大约 60%的非裔美国人社区的年驱逐率高于 10%的家庭——大约是全国平均水平的四倍——即使在控制了贫困和收入率之后。
通过驱逐实验室的时尚在线门户,你可以通过交互式地图和排名条形图查看州、市和地方的调查结果。您还可以下载底层数据集进行进一步分析。
讨论
Source: Evicted exhibition at the National Building Museum
许多因素导致了威胁 1100 万美国人的住房不稳定。这些问题包括停滞不前的工资、快速变化的城市劳动力市场、不断上涨的住房成本以及经济适用房的极度短缺。只有五分之一的合格低收入家庭从国家资金严重不足的住房援助计划中获得援助。向低收入租房者提供代金券的第 8 部分,获得了联邦政府用于抵押贷款利息扣除的大约一半金额,这有利于高收入家庭。驱逐不仅仅是因为贫穷,还因为机会的不平等和基本经济支持结构的不稳定。
批评
草根组织如反驱逐绘图项目和租户联盟已经呼吁驱逐实验室未能考虑当地背景,并拒绝与非营利和政策领域的现有参与者合作。例如,在加利福尼亚州,驱逐实验室向一家专注于房地产的分析公司支付研究数据。这些组织声称,这些信息不仅少算了 200%的实际驱逐,而且出售的收益很可能被用来促进剥削性的租赁做法,德斯蒙德在他的书中谴责了这种做法。
更深的潜水
为了更好地理解驱逐实验室工作的成功和局限性,以放大的比例探索他们数据的一个小子集是有用的。让我们放大华盛顿 DC 国家建筑博物馆驱逐实验室最近展览的环境。
德斯蒙德的团队对华盛顿的统计数据提出警告,他们低估了实际的驱逐情况。据称,2006 年至 2012 年的驱逐率明显低于 2016 年——用于全国范围比较的旗帜年。据推测,这种差异的出现是因为该团队将他们的努力分配到了 2016 年的数据收集上。
抛开对统计不足的担忧不谈,德斯蒙德及其团队的工作仍然是一项重大成就。非政府组织或政策制定者正在积极收集驱逐统计数据的城市为数不多,北京不在其列。有点令人难以置信的是,在驱逐实验室成立之前,该市没有正式统计驱逐案例的数量或成功驱逐的人数。
Size of red circle indicates 2016 eviction rate within a block group. Lighter blocks groups indicate higher non-white percentage based on the 2010 Census. Source: The Eviction Lab.
探究这些记录很重要,因为它阐明了驱逐是如何按照令人不安的模式分解的。快速浏览一下华盛顿驱逐实验室的图像就足以看出住房危机的这一因素明显受到种族的影响。这一发现在全国范围内都适用,但在曾经被称为“巧克力城”的华盛顿州更加严重,那里的中产阶级化迫使许多黑人家庭不断远离市中心。
进一步研究的领域
中产阶级化,即翻新和改善一个地区以吸引中产阶级居民的过程,是流离失所的一个原因,但也可能是释放经济机会的一个关键。进步的策略,如 DC 规划的单元开发,可以通过提供经济适用房、改善的公共交通等便利设施,以及换取分区豁免,广泛地重新分配城市重建的利益。
[## DC 华盛顿州的分区豁免地图
283 个规划单元开发(pud)与哥伦比亚特区社区之间的互动…
public.tableau.com](https://public.tableau.com/views/PUDYears/PUDs?:language=en&:display_count=y&:origin=viz_share_link)
这是一个脆弱的妥协,值得仔细研究。例如,有计划的单元开发,甚至那些提供负担得起的住房作为其社区福利一揽子计划的一部分的开发,可能会由于预期土地价值的升值而导致更高的驱逐率。在旧金山和奥克兰,反驱逐绘图项目通过中产阶级化的镜头探索了房东和房客的关系,衡量标准是最近公司赞助的班车激增,所谓的“科技宿舍”兴起,以及 Airbnb 价格飙升。驱逐实验室通过将地方组织发起的对话提升到全国范围,作为评估流离失所问题规模的初步努力。
Source: Evicted exhibition at the National Building Museum
死星上的数据科学
原文:https://towardsdatascience.com/data-science-on-the-death-star-af80c9b34d6e?source=collection_archive---------45-----------------------
改善帝国的生活,一次一个 DS 项目
Photo by Agnieszka Kowalczyk on Unsplash
数据科学不是魔法(就此而言的力量)。作为一个对该领域真正感兴趣的人,我经常被其他人警告,并读到关于在组织中采用数据科学的复杂世界。有很多这样的故事:一个地方雇用了一名数据科学家,因为他们被告知这是一件很酷的事情,失望随之而来,因为缺乏理解,数据科学家需要重新工作。很明显,有时角色会出现脱节。
我对这个角色的简单定义是:数据科学家在那里分析和解释数据,以构建业务解决方案。这是一项需要情境化、问题框架化、实验设计和数据收集的工作,以制定使事情变得更好的解决方案。你可以自由地搜索无数的维恩图,这些图可能会更深入地挖掘所需的技能和知识,但本质上是业务理解、统计数据和编程知识放在一个高高的搅拌机中。
我经常收到朋友关于数据科学可以做什么的问题,这有时很有挑战性,因为它可以根据组织的工作环境而有很大的不同。如果你在网飞,你可能会用大数据来测试推荐算法。如果你在易贝,你可能正在开发上市欺诈监控工具。如果你在苹果公司工作,你可能会对用户拍摄的照片进行物体识别。正如每个企业都有不同的需求一样,他们对数据科学的使用和需求也是如此。
我绝不是专家,但让我们通过一个例子来思考,看看想到了什么类型的解决方案:
恭喜你,你现在是帝国雇佣的第一个数据科学家!
他们有很好的福利,很高的薪水,旅行也很棒。皇帝已经派你到总部,死星,来帮助建设,看看是否有你能帮忙的任务。为了帮助构建问题,你需要从 CRISP-DM 开始,并从员工那里获得一些业务理解。你以前从未在多泪星系的统治机构工作过,所以和其他人交流一下,看看你能在哪些地方帮上忙是很好的。
死星枪手
“也许我们可以找到一种方法来更好地在一个星球上自动点火,这样我就不必承受我对这样做感到的难以置信的内疚和厌恶”
哇哦。那是粗糙的。有没有办法进一步自动化发射摧毁一颗巨大星球的超级激光?有可能,但由于启动指令来自简单的人工指令,我认为增加人工监督可能是有意的。仅仅因为一些事情可以自动化并不意味着它们需要自动化,确保星球毁灭命令的正确执行可以使用个人方法。对计算过程的任何改变更可能是纯粹的工程改进。也许换了部门?
莫提上将
“我想我们可能有一个叛军间谍正在发送我们的计划。你能怎么办?”
那听起来是一个相当严重的问题!我们可能还有一个现有的数据源可以使用:通信日志。因为我们是帝国,这里没有秘密,我们可以收集尽可能多的基地对外通讯的数据。我们首先需要对这些通信数据有所了解,也许看看我们是否发现了任何不正常的情况,比如员工在预定的值班时间发送信息,在非正常时间发送信息,任何包含图表附件的信息,或者任何发送给已知敌人的信息(rebelalliance.org 的电子邮件是一种常见的密报)。如果我们仍然没有找到足够的内容,我们可以对实际文本进行更多的评估,或者只是通过搜索特定的关键词或短语,甚至是情绪来寻找气馁的员工。如果我们想要监控未来的消息,我们可以建立一个模型来搜索特定的标准(基于我们在研究中发现的),并在潜在的违规者出现时提醒我们!
皮特上将
“我需要确保我们不会让持有旧密码的人穿过我们的防护罩。我的脖子在危险中,哈哈哈,但是说真的。我见过。”
是的,我听说这可能是个问题。我会假设,因为你轻率地允许旧代码,除了一些手写的便利贴之外,没有管理它们的正式系统。这可能不是我们可以做好分析的地方,但是我们可以考虑为代码管理创建一些组织,也许通过组织一个新的数据库。我们可以作为一个团队,与工程一起工作,来理解代码应该如何组织,并提出一个适当的系统。我们可以创建代码使用报告,让每个人都知道什么是可接受的。如果我们对代码的使用有了足够的了解,我们可以研究一些其他的解决方案来自动化这个过程,但是听起来我们还有很长的路要走。
大总督塔金
"我担心绝地登船会严重危及我们的安全系统."
你可以拥有所有你想要的帝国冲锋队,但是如果他们落入绝地的心灵诡计,那还有什么意义!?维护基地安全肯定是一个关键的优先事项,我认为我们可能有一些选择。或许用一些摄像头,我们可以利用面部识别来提防讨厌的绝地。如果我们收集任何已知绝地的一些图像,我们可以训练一个模型来寻找确切的人,并警告我们他们是否在空间站上。举个例子,让我们以欧比万·克诺比这个角色为例,对他进行训练,因为我很确定他是唯一的幸存者。下面是一个例子,如果他出现了,我们可能会发现什么:
这将花费我们一些时间和计算能力,但我认为这是可能的。
奥泽尔上将
“我希望有一个系统能够自动向高层管理人员提供关键更新,而不会被扼杀”
对不起,奥兹尔。与他人打交道,尤其是那些有超自然窒息能力的人,是工作的一部分。沟通,尤其是团队内部的沟通,不是可以自动消除的。我们可以更多地讨论你的团队如何沟通,看看是否有系统可以设置到位,使更新更加透明,但你必须处理与其他人的工作。如果你感到害怕,我建议和人力资源部谈谈,但我觉得他们也帮不了你。
达斯·维达
“我想系统地消灭所有反抗帝国的人,这样我就可以停止杀戮五分钟,坐在那里感受我生活中发生的事情带来的情感冲击。”
这是可以理解的令人沮丧的是,这种反叛的事情是如此经常。我不认为有找到所有叛军联盟的灵丹妙药,但我们可以在信息中寻找趋势,看看我们是否能帮助缩小找到他们的范围。我们可以查看过去叛军基地的数据,找出尽可能多的位置细节(气候、太阳系、与以前基地的距离等。)和资源(有多少叛军,火力类型等。),看看我们是否能找到任何有帮助的趋势。如果看起来我们能找到一个足够清晰的模式,我们也许能进一步研究创造一个模型,根据最近发现的基地,可以估计他们下一步可能去哪里。
如您所见,数据科学解决方案并非万能,但如果可能,您可以做一些惊人的工作来改善组织的运营方式。
数据科学解释为什么阅读新闻会让你紧张
原文:https://towardsdatascience.com/data-science-on-why-reading-the-news-might-stress-you-out-11281dbbe445?source=collection_archive---------16-----------------------
Visualization of individual articles published by each news source over roughly one day (Aug 20th–21st 2019 because timezones). Code for generation below.
最近在准备一篇关于新闻媒体语言模式的论文时,我发现自己通读了我的神经网络处理过的许多文章,试图通过具体故事的镜头来理解它的发现。看过许多不同来源的文章,消化了来自不同政治派别的观点,我可以第一手证实,阅读新闻是令人疲惫的,因为每时每刻都感觉它表达了一种持续的紧迫感。
从数据开始,“情绪”大致指的是一段文本中单词的积极或消极程度。在这篇文章的上下文中,文本是新闻机构的 RSS 源中看到的文章“描述”(通常是文章本身的片段或出版商网站上看到的简短预览/摘要文本)。通过 TextBlob 的自然语言处理情感模型赋值,值-1 表示能得到多负面,1 表示能得到多正面,0 表示中性。值得注意的是,情绪可能是上下文相关的(且有细微差别),因此在这种情况下,极性的大小可能比方向更重要,而且,由于情绪模型不是特定于新闻媒体的,因此计算并不完美。尽管如此,如上面的可视化所示,一些机构在文章情感上看到了不同的分布,有些像 Vox 或《华尔街日报》非常狭窄(更中性的情感),而其他像《每日邮报》或 CNN 则探索语言光谱中更“两极”的部分。这不是对任何机构的批评,也不是对更多极性词汇选择的必要性的评论,但它强调了,鉴于当天的新闻,不仅不同机构对世界的报道比其他机构更“激烈”(就词汇选择而言),而且,在随机的一天里,人们可以在整个媒体领域经历许多极端的情绪极性。事实上,对一个随机月份(六月)的快速分析表明,在每一天,范围往往很广,许多天至少看到一篇平均句子极性为 1 或-1 的文章。
Most days of June 2019 saw a wide sentiment polarity range across the 10 news agencies examined (listed in the visualization above).
也许我们确实生活在一个大加速的时代,关键时刻总是发生,但另一方面,持续的极端极性可能会带来麻烦,因为,正如乔恩·斯图尔特观察到的,“如果一切都被放大,我们什么也听不到。”话虽如此,这一分析将新闻中的两极分化引起的焦虑置于的背景中:数据证实,至少部分媒体确实沉浸在情绪高涨的长期状态中,因为它看到了尖锐的语言,所以可以理解新闻如何引起担忧。我还不确定该怎么办,尽管通过你的媒体消费习惯来批判性地审视你所接触到的语言的“极性”是值得的。然而,就像我看到勾勒出这一景观的趋势的经历一样,我希望你看到这些数据时能有一种洞察力,甚至是冷静。
【https://github.com/sampottinger/news_flower】的代码和数据。文章经过编辑,以帮助读者更好地理解使用现有情感模型的局限性。
数据科学还是统计学?
原文:https://towardsdatascience.com/data-science-or-statistics-9e826ebf7fe2?source=collection_archive---------14-----------------------
我们经常伸手去拿闪亮的工具,而不是正确的工具。
Photo by Philip Swinburn on Unsplash
「数据科学」和「统计学」有什么区别?
更重要的是,这重要吗?当我涉入这场辩论时,我不禁感到有点愚蠢,因为我把注意力放在了所有事情的语义和标题上,而不是看起来更有实质内容的东西上。
然而,我很清楚,在许多工作场所,甚至在学术界,这种模糊性已经导致了相当多的困惑和误解。
最终,我认为除了清楚我们的定义是什么,这样我们就不会越过对方说话之外,无论出于什么原因,“把事情做对”都是不重要的。本文是我尝试遵循“定义我的术语”的最佳实践,希望也能为组织和领导者提供有用的路标。
需要避免的最常见的陷阱之一是,要理解数据科学并不总是意味着机器学习或人工智能解决方案。
像其他科学领域一样,数据科学应该精确地识别和应用正确的工具来解决问题。有时候,用例最好的工具是统计,或者探索性的数据分析,或者简单但可理解的描述性统计可视化。
在多诺霍(2015)的论文 50 年的数据科学 中,他以一种有意义的方式解决了定义术语“数据科学”的问题,以便更好地理解它是什么,以及它与其他学科(即统计学)有何不同。
他以统计学领域和其他领域如计算机科学和社会科学开始他的比较,这些领域似乎都有技术和方法的权利。
多诺霍认为,约翰·图基所开创的,以及威廉·克里夫兰和约翰·钱伯斯等其他人所倡导的,实际上是统计学的扩展,包括了我们今天所知的数据科学。
从这个角度来看,他们认为统计学主要关注统计学理论,当你有数据来了解你感兴趣的人群时,它允许某人建立一个推理模型。
这些“数据科学”的早期支持者认为,当代统计学忽略了数据处理中收集和清理的重要性。
此外,我们还看到,除了为了从数据中做出推断而建模之外,我们还关注将模型应用于数据的预测能力,而不是使用数据来测试理论构建的模型。
多诺霍指出,这在数据科学的机器学习领域非常明显,但在许多其他用例中也是如此。不再依赖统计理论——这需要数据中存在一个真实模型——现在出现了一种范式转变,专注于从数据本身寻找模式和多个潜在模型。
多诺霍断言,这种扩展是由过去 40 年来实现的计算能力和可视化变化的到来而成为可能的。
从统计到数据分析
从 SPSS、SAS 和 R 等统计软件在 20 世纪 90 年代开始主导该领域的流行可以看出,对这些程序的依赖和突出已经成为“数据分析”的同义词,这些方法也扩展到许多学术和商业用途。
从某种意义上来说,这些项目通过培训帮助统计民主化并扩展到正式的“统计学家”之外。此外,几乎所有环境中的从业者都开始处理“大数据”和“数据挖掘”,而不是以前使用的经典统计技术。
共同任务框架(CTF)
下一个最重要的发展是共同任务框架(CTF),这是一种竞争方法。CFT 要求:
- (1)公开可用的数据集,
- (2)具有从数据推断预测规则的共同目标的竞争者/合作者,以及
- (3)客观评分裁判/仲裁者,可对参赛者提交的作品进行评分。
CFT 允许数据科学竞赛,但也建立了一种用数据开源科学问题的文化,因为有清晰可衡量的答案和一致同意的目标。
CFT 和向开源数据科学技术(R,Python,Github 等)的转变。)一直是数据科学范式的必要推动力。
一个新的科学分支
很明显,数据科学已经超越了统计学,现在几乎在所有应用中都包含了编程、工程、数学、设计和科学方法论知识。
此外,我们还关注解决方案的实施,包括产品和服务的接口,或者简单地提供数据可视化,以展示数据科学工作的结果。
这显然比以前任何一个领域所关注的都要多,但它也是普遍的,因为许多领域都可以采用这些技术和知识并从中受益,以解决它们的具体问题。
正如 John Tukey 在 20 世纪 60 年代所宣称的那样,数据科学在我们的世界中变得越来越重要,并迅速渗透到我们生活的几乎每个方面。
实际结论
我个人不喜欢“数据科学”这个术语,仅仅是因为它更容易混淆而不是澄清。然而,数据科学的实际应用不仅仅是统计。
在某些方面(理想情况下)实践的数据科学是统计学,但它也包括对数据源和数据质量的严格探索。
在此之上是编程方法和开源技术,它们放大了数据源的科学严谨性。
然后,根据使用案例,这些与简单和复杂的统计理论和方法一起被利用来进行探索、推断和预测。
最后,讲述数据故事也同样受到重视。作为一种实践,数据科学重视可视化和主题专业知识,这使得过程和结果的故事易于被不同的利益相关者理解。
这并不是说统计或统计学家以前从未结合过这些观点。然而,数据科学的文化已经超越了统计部门,并来自受过正式培训的统计人员,这种文化已经在其他学科和背景中扎根于数据科学,引导我们寻求数据驱动的决策和循证知情的政策。
或者至少,把我们推向一种心态,我们希望看到我们的假设和信念背后的数据。希望如此。
使用 Spark、Scala 和一些 SQL 对电影数据集进行数据科学分析。和一些蟒蛇。(第一部分)。
原文:https://towardsdatascience.com/data-science-over-the-movies-dataset-with-spark-scala-and-some-sql-and-some-python-part-1-f5fd4ee8509e?source=collection_archive---------6-----------------------
Spark SQL 是一个用于结构化数据处理的 Spark 模块。它提供了一个名为 DataFrames 的编程抽象,也可以作为一个分布式的SQL查询引擎。让我们在数据块上使用它来对电影数据集执行查询。
Photo by Jake Hills on Unsplash
一天,我的一位 SQL 开发人员朋友告诉我,她对大数据处理引擎感兴趣,但除了 SQL 之外,她没有任何其他编程语言的经验。我想向她展示,了解 SQL 是学习大数据的良好起点,因为借助 Spark,可以对表执行平面 SQL 查询,而且其代码 sintax 与 SQL 类似。我希望你喜欢这个故事。
为了证明这一点,我执行了一些查询和描述性统计,以从一个奇特的数据集电影镜头数据集中提取洞察力,该数据集可在【https://grouplens.org/datasets/movielens/】的上获得,包含了超过近 3 万部电影的不同用户的大量评分。该报告可能有助于了解如何进行聚合和执行基本的 spark 查询。我既不是 Spark 专家,也不是 Scala 专家,所以代码可能不会以最有效的方式实现,但我不会停止学习,我非常欢迎建议和评论。
当我们想要学习大数据并在 Hadoop 生态系统上使用 Scala 的 Spark 时,我们面临的最大问题之一总是安装和集成来自这些框架的所有工具。然而, Databricks 社区版将把我们从那个问题中解救出来。实际上,它拥有我们需要使用的一切:它自己的文件系统,以及我们将要使用的所有已安装(并正常工作)的 API(Hive 与 Spark 和 Scala** 以及其余的 Spark 库如 MLlib 或 Graphx 很好地集成)。为了不让这篇文章写得太长,我将不涉及那些技术,但是关于的好文档可以在他们的网站上找到:https://databricks.com/spark/about。**
本文的主题不是数据块的使用,而是电影数据集(统计、查询、聚合…)** 上的 scala-Spark 编码。**一些查询将在 SQL 中显示它们的等价物。Databricks 还将允许我们管理这个巨大的数据集,它可能适合我们本地机器的内存。Spark 将为我们提供处理数据的有效方法。****
1)导入数据
第一步也是必要的一步是下载两个长格式数据集,它们在新研究的推荐部分。之后,我们必须将它们导入 databricks 文件系统,然后将它们加载到 Hive 表。现在我们可以对两个数据集/表执行一些基本的查询,一个是关于电影的信息,另一个是关于电影的价格。描述和打印模式方法总是一个很好的切入点:
**val movies = table("movies")
val ratings = sql("select userId, movieId, rating from ratingsB")
ratings.describe().show
movies.printSchema
ratings.printSchema**
2)执行一些查询和知识提取。
为了改进我们的 spark 编码,我们可以执行任何我们能想到的带有学习目的的查询。首先,让我们检查对电影评分最多和最少的用户:
import org.apache.spark.sql.functions.count
import org.apache.spark.sql.functions.{desc,asc} **ratings.groupBy("userId").agg(count("*").alias("number_cnt"))
.orderBy(desc("number_cnt"))** **ratings.groupBy("userId").agg(count("*").alias("number_cnt"))
.orderBy(asc("number_cnt"))**
等价的 sql 查询(重要的是要注意,只要我们可以,我们应该用 spark 编写这个查询,因为它会像纯 SQL 查询一样在编译时给我们带来错误和运行时带来错误,以避免将来浪费时间,特别是在大型进程上)😗***
**sql("select userId, count(*) from ratingsB group by userId order by count(*) desc")**
有一些用户评价了超过 5000 部电影!!这太疯狂了。
这让我想知道他们看电影花了多长时间考虑到电影 100 分钟的平均时间。这个结果值得展示!!一些查询将被打包到函数中,以便在我们想要/需要它们时使用,甚至在笔记本的不同单元或部分代码中使用:
**ratings.groupBy("userId").agg(count("*").alias("number_cnt")).withColumn("years_Watching", round($"number_cnt" * 100/ 60 / 24 / 365,3)).orderBy(desc("years_Watching")).show(10)**
我们可以看到,用户数 123100 花了超过 4.5 年的时间看电影和看了超过 20000 部电影。真是个电影迷!!关于代码,它有一些有用的方法,比如一个适当的 gropuBy agregation 和一个 count,这个 count 和 round 函数一起应用于用。带列(因为我们不需要那么多小数火花显示)。现在,我们将连接两个数据帧,将所有信息放在一个 df 中进行处理:
**val df_full = ratings.join(movies, $"ratingsb.movieId" === $"movies.movieId").drop($"ratingsb.movieId")**
你有兴趣知道哪些电影被影迷评为 3 星或 5 星吗?我们可以知道,这个函数接收一个 scala 整数序列作为输入,以及我们想要查询的星星数和我们要查询的用户数。如果 seq 为空,将显示该用户评价的所有电影(使用 scala 检查)。isEmpty 方法):
import org.apache.spark.sql.functions.{asc, desc}**def movie_query (df: org.apache.spark.sql.DataFrame, stars: Seq[Double], user: Int ) : Unit =
{
if (stars.isEmpty)
{
println(s"All movies rated by user $user")
df.filter(df("userId") ===user).orderBy(desc("rating")).show(20, false)
}
else
stars.foreach(starsNum =>{
println(s"All movies rated by user $user with $starsNum stars:")
df.filter(df("userId") === user).filter(df("rating") === starsNum).orderBy(asc("movieId")).show(7, false)})
}** movie_query(df_full, Seq((3.0, 4.5), 21)
通常,我们都会从朋友和家人那里得到很多电影推荐,我们会把这些电影列一个清单。在那之后,当我犹豫应该先看哪部电影时,我总是去 filmaffinity 或 imdb 查看我列表中评价最好的电影。原来我们也可以做类似的事情。要做到这一点,我们需要获得电影的平均评级,并按照从最好到最差的评级对它们进行检索。值得注意的是,一个优秀的电影搜索者可能不会收到电影的确切名称,这可以用 scala contains 方法解决:
import org.apache.spark.sql.functions._**def movie_grade (df: org.apache.spark.sql.DataFrame, movie: String ) : Unit = df.filter((df("title").contains(movie))).groupBy("title").agg((round(avg($"rating"),3)).as("averageStars")).orderBy(desc("averageStars")).show(false)**
我们将在两个著名的传奇故事上测试我们的功能:
movie_grade(df_full, "Wild Bunch")
movie_grade(df_full, "Lord of the Rings")
****
Photo by Thomas Schweighofer on Unsplash
耶!我们爱魔戒!评分最低的电影对应的是我还没看过的动画版。
阿拉贡和两个哈比人在指环王动画电影中。
我相信也有很多星战迷,所以让我们用类似的 SQL 查询得到所有电影的分数:
**sql("Select title, avg(rating) as averageRate from full_movies where title like '%Star Wars%' group by title order by averageRate desc").show(false)**
****
Photo by Daniel Cheung on Unsplash
正如我们所看到的,老电影是最好的评级,但在我看来,前 3 集并没有那么糟糕,得分低于 3.5 星。但那只是观点!!我们还获得了一些衍生产品和平行电影,对《星球大战》迷来说也很有趣。
我想知道的下一件事是哪些是收视率最高和最低的电影。由于这是一个相当大的数据集,它包含了大量可视化效果差的电影,其中一些电影的评分低于 5 分。当然,如果我们想做一个连贯的研究,我们应该忽略那些电影。我只会关注那些收视率超过 600 的电影,这代表了总收视率的 1%(完全不是主流电影)。为此,我们将创建一个新的数据框架,其中包含每部电影的总评分和平均评分。之后,我们将筛选出超过 600 个评分的电影,并按其平均评分以升序和降序的方式显示,以检查最差和最好的电影。
**val df_count = df_full.groupBy("title").agg(avg("rating").as("averageRating"),
count("title").as("RatesCount"))** **df_count.withColumn("roundedAverageRating", round(df_count("averageRating"),2)).filter(df_count("RatesCount") > 600).orderBy(asc("averageRating")).drop("averageRating").show(20, false)** **df_count.withColumn("roundedAverageRating", round(df_count("averageRating"),2)).filter(df_count("RatesCount") > 600).orderBy(desc("averageRating")).drop("averageRating").show(20, false)**
收视率超过 600 的排名最低的电影。
如你所见,《闪光》是最差的电影。我在 imbd 上搜索过,确实看起来很恐怖:
现在好的部分来了,注意列表的头:
这也是其在 imdb 上评级的结果:
3)推荐系统(一)
这个数据集对于改进和理解推荐系统是如何工作的是完美的。我正在使用 spark 机器学习库 MLlib 研究推荐系统的机器学习模型,它们将在下一篇文章中展示。我刚刚提出了一个简单的解决方案,只需要执行一个大的查询。这是一个简单的模型,可以作为虚拟解决方案。解决方案是关于检索用户观看最多的类别,并从用户尚未观看的类别中输出评价最高的电影。这是一个打包到 easy_recommender 函数中的更复杂的查询,该函数将接收我们想要推荐的用户数量、我们将对一部电影使用的作为最小阈值的数量或比率(请记住,从统计的角度来看不是检索只有一点比率的电影的好做法)以及我们想要显示的电影数量。这些是我们将要遵循的步骤:
- 获取用户 X 看到最多的类别。要做到这一点,我们需要根据用户进行过滤,根据类型进行分组,进行计数,然后根据计数进行排序。一旦有了这些,我们只需选择“流派”列并用 map 映射该列,然后执行一个收集操作,然后使用:。map(r =>r . getstring(0)). collect . to list .****
- 之后,我们将使用一个新列“ToDelete”来标记用户 X 看过的电影,该列包含一个简单的字符串,例如“Delete ”,一旦我们执行连接,就可以很容易地找到它。这样我们就可以很好地识别用户 X 看过的电影。
- 我们将把那个数据帧和大数据帧连接起来。我们想忽略的电影标有“删除”(所以我们会用过滤掉那一栏为空的。过滤器(" ToDelete 为空"))。
- 最后,我们将使用 foreach scala 方法遍历我们想要过滤的类别,现在我们已经选择了用户 X 没有看过的电影。现在,我们只需按标题分组,获得平均评分,再一次按电影筛选出 Y 个以上的评分(记住,出于统计原因),并按平均评分降序排列。
这是一个有点复杂的过程,我相信有更好的方法来做这件事。在这里你可以看到代码:
**def easy_recommender(nUser: Int, nRates: Int, nMovies: Int) : Unit = {
val mostSeenGenresList = df_full.filter(df_full("userId") === nUser).groupBy("genres").agg(count("*").alias("cuenta")).orderBy(desc("cuenta")).limit(3).select("genres").map(r => r.getString(0)).collect.toList
println(s"List of genres user $nUser has seen the most : $mostSeenGenresList")** ** val movies_watched_by_userX = df_full.filter($"userId" === nUser).withColumn("ToDelete", lit("DELETE")).select($"ToDelete", $"title".as("title2"))** **var df_filt = df_full.join(movies_watched_by_userX, $"title" === $"title2", "left_outer")** **df_filt = df_filt.filter("ToDelete is null").select($"title", $"rating", $"genres")** **mostSeenGenresList.foreach(e => {
println(s"Top $nMovies movies user number $nUser has not seen from category $e with more than $nRates rates: ")** **df_filt.filter($"genres" === e).groupBy("title").agg(avg("rating").as("avgByRating"), count("*").alias("nRates")).filter($"nRates" > nRates).orderBy(desc("avgByRating")).show(nMovies, false)
})
}** easy_recommender(134596, 1000, 5)
我们从“推荐系统”获得的结果用 scala 字符串插值:打印出来
你可以看到,首先我们打印出用户 X 看到最多的类别。我们可以通过控制要推荐的类别数量。极限③法。正如你所看到的,我们可以通过函数的输入来控制我们想要包含在模型中的大多数参数。
4)可视化时刻
总之,如果没有适当的可视化/绘图,这就不是一部好的数据科学作品。为了实现这一点,Python 总是一个很好的选择,我将向你展示 databricks 的另一个精彩特性,它允许我们在同一个笔记本上运行 Python 和 Scala 代码。****
第一步是将我们的 df_full 保存到一个临时配置单元表(它只在当前会话期间持续存在):
**val ratesDF = df_full.select("rating").groupBy("rating").agg(count("rating").as("NumberOfRates")).orderBy(asc("rating"))
**
**ratesDF.createOrReplaceTempView("ratedDF")
spark.sql("select * from ratedDF").show**
现在是魔法降临的时刻了。只需在单元格顶部键入 %python ,我们就可以执行具有所有 Spark (pyspark)优势和特性的 python 代码。我们将表加载到 pyspark 数据帧中,并使用这些 Python 命令行程序将两列转换成 Python 列表:
%python**df = table("ratedDF")
rating_list = df.select("rating").collect()
number_rates = df.select("NumberOfRates").collect()
rate_category = [float(row.rating) for row in rating_list]
n_rates = [int(row.NumberOfRates) for row in number_rates]**
最后,我们将使我们的视觉化。这是一个完全自由式的过程,一些情节会比其他的更漂亮。记住分类变量应该用条形图表示:
%python
import matplotlib.pyplot as plt
import numpy as np**fig, ax = plt.subplots()
ax.bar(rate_category, n_rates, align='center', width=0.4, facecolor='b', edgecolor='b', linewidth=3, alpha=.3)
plt.title('Number of Rates vs Stars')
plt.xlabel('Stars (*)')
plt.xlim(0,5.5)
plt.ylim(0,8000000)
ax.set_xticks(rate_category)
display(fig)**
除了没有 0 星的电影以及看起来不像人们预期的那样是正态分布之外,没有太多评论。
5)总结
这就是所有的人。我希望你和我一样喜欢这篇文章,了解 scala、spark 和 Databricks,思考关于电影数据集的见解。现在我正在使用 spark 的机器学习库 Spark MLlib 在这个数据集上实现和改进推荐系统的性能。在未来的文章中,这些模型可能会与数据集上更复杂的查询和描述性统计一起显示。我玩了一会儿流派专栏,获得了更深入的统计数据,但我不希望这篇文章过于密集。
由于这是我的第一篇文章,再次感谢任何反馈和评论。
Photo by Gwen Ong on Unsplash
原载于 2019 年 7 月 23 日https://medium.com。**
使用 Scrapy 构建自己的数据集
原文:https://towardsdatascience.com/data-science-pipeline-part-1-obtaining-data-from-web-using-scrapy-fe0ad9963d84?source=collection_archive---------17-----------------------
了解如何构建自己的数据集,并将其用于数据科学和分析
Photo by Markus Spiske on Unsplash
数据科学管道
- 获取数据(在本文中讨论)
- 数据清理
- 探索/可视化数据
- 数据建模
- 解释结果
几乎每个数据科学家都面临的一个常见问题是收集数据。虽然有很多网站可以找到这篇文章中提到的数据集,但这总是不够。有时,构建自己的数据集是一条可行之路。另一方面,尽管 web 是一个巨大的数据源,我们只需要知道如何有效地挖掘它。在本文中,我将带您了解使用 Scrapy 从 web 抓取数据的过程,这是一个用 Python 编写的强大的 web 爬行框架。
如果你想直接进入代码,就去看看这个 github repo 。
数据源
国际足联 20 名球员的排名出来了,作为一个狂热的足球爱好者,我发现这样的数据很吸引人。你可以在 sofifa 上找到这些数据。我们将抓取数据,并使用 Scrapy 将它们保存在 csv 文件中。
安装和设置
在这篇文章中,我将使用 Python 3 和 Scrapy 1.7。对于 Linux 和 Mac,使用以下命令通过 pip 安装 scrapy 相当简单:
pip install Scrapy # or pip3 install Scrapy
Windows 用户需要安装 Anaconda。你可以在这里找到安装说明。安装 Anaconda 后,打开 Anaconda 提示符并键入以下命令来安装 Scrapy:
conda install -c conda-forge scrapy
创建项目
一旦我们的系统中有了 Scrapy,下一步就是创建一个项目。打开终端/anaconda 提示符并键入
scrapy startproject fifa20
starting scrapy project
默认情况下,Scrapy 会在fifa20.
中创建一堆文件和目录
inside fifa20 project
在fifa20
里面,你会发现另一个fifa20
文件夹,里面包含了我们所有的代码。spiders
目录包含负责从网络中提取数据的 Scrapy spiders。一般来说,每个蜘蛛负责抓取一个特定的网站。一个 scrapy 项目可以有多个蜘蛛。例如,如果你正在创建一个价格监控系统,你可能想要抓取多个网站,如亚马逊、沃尔玛、新蛋等。每个网站都有一个专门的蜘蛛来处理抓取逻辑。
包含项目的设置,例如运行多少个并发线程,两个请求之间的延迟,使用哪个中间件或管道。
对于这个项目,我们将设置一个真实的用户代理。继续在settings.py
中更改这些变量。
您的settings.py
文件看起来会像这样
BOT_NAME = 'fifa20'SPIDER_MODULES = ['fifa20.spiders']
NEWSPIDER_MODULE = 'fifa20.spiders'# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'# Obey robots.txt rules
ROBOTSTXT_OBEY = True
查看 Scrapy architecture 探索更多关于中间件、物品、管道和其他设置的信息。
创建蜘蛛
要创建一个蜘蛛,导航到外部的fifa20
项目目录并键入
scrapy genspider sofifa sofifa.com
这将在spiders
目录中创建一个名为 sofifa 的蜘蛛。这是文件的样子
# -*- coding: utf-8 -*-
import scrapyclass SofifaSpider(scrapy.Spider):
name = 'sofifa'
allowed_domains = ['sofifa.com']
start_urls = ['[http://sofifa.com/'](http://sofifa.com/')] def parse(self, response):
pass
让我们试着理解这是怎么回事。
SofifaSpider
是 spider 类,它继承了包含我们所有抓取代码的scrapy.Spider
。- 命令中使用的蜘蛛名称是
sofifa
。我们稍后将使用它从命令行运行蜘蛛。 allowed_domains
包含蜘蛛爬行的域列表。在这种情况下,蜘蛛只抓取 sofifa.com 域名的网址,而忽略其他网址。这有助于我们限制爬虫仅爬行期望的域。start_urls
包含一个 url 列表,蜘蛛使用它作为初始 URL。parse
方法是一个回调函数,默认情况下在爬取start_urls
中的 URL 后调用。parse
(或任何回调)方法接收包含下载网页的响应对象。
我们将使用以下网址作为我们的起始网址
start_urls = ['[https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir](https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir)']
不要担心看起来杂乱的 url,它是通过选择我们希望在最终数据集中使用的某些列而生成的。
使用 Scrapy Shell 剖析 HTML
Scrapy shell 是一个有用的命令行工具,可以用来分析网页的结构,找出想要的 xpaths 和选择器。键入以下命令开始
scrapy shell "[https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir](https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir)"
你会看到大量的日志和消息。它们只是您项目的设置。上面的命令为我们做的是下载给定 url 的 HTML 内容,并且可以通过response
对象访问。要进行检查,请键入
response.url
你会看到
'[https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir'](https://sofifa.com/?col=oa&sort=desc&showCol%5B%5D=ae&showCol%5B%5D=hi&showCol%5B%5D=wi&showCol%5B%5D=pf&showCol%5B%5D=oa&showCol%5B%5D=pt&showCol%5B%5D=bo&showCol%5B%5D=bp&showCol%5B%5D=jt&showCol%5B%5D=vl&showCol%5B%5D=wg&showCol%5B%5D=rc&showCol%5B%5D=wk&showCol%5B%5D=sk&showCol%5B%5D=aw&showCol%5B%5D=dw&showCol%5B%5D=ir')
如果您想在浏览器中查看页面的外观,请键入
view(response)
您将能够在浏览器中查看该页面。
我们可以选择在 Scrapy 中使用 css 选择器和/或 xpath。如果您不熟悉 css 和 xpath 的概念,请查看这些教程以了解它是如何工作的。
- https://docs . scrapy . org/en/XPath-tutorial/topics/XPath-tutorial . html
- https://docs . scrapy . org/en/XPath-tutorial/topics/selectors . html
- 【https://www.guru99.com/xpath-selenium.html】
- http://scraping authority . com/2016/09/07/XPath-and-CSS-selectors/
现在让我们检查网页并获取数据。
我们可以看到所有的数据都在一个表标签里面,每个球员的信息都在tbody -> tr
里面。遍历所有 tr 标签将有助于我们接近数据。
for player in response.css('table>tbody>tr'):
print(player.css('td.col-name>div>a::attr(title)').extract())
这将同时打印出国家和玩家的名字。让我们试着理解这个片段。
table>tbody>tr
选择tbody
内的tr
标签,该标签在table
内response.css('table>tbody>tr')
返回选择器列表player.css('td.col-name>div>a::attr(title)')
选择带有类col-name
的第一个td
,类col-name
包含一个div
,其内部是一个a
标签。::attr(title)
提取你在 HTML 中看到的标题属性,分别是国家和玩家名字。
为了简单起见,让我们用一个玩家的数据测试所有东西,并在我们的脚本中使用它。所以在 shell 中,键入
player = response.css('table>tbody>tr')[0]country = player.css('td.col-name>div>a::attr(title)').extract()[0]
player = player.css('td.col-name>div>a::attr(title)').extract()[1]
positions = player.css('td.col-name span.pos ::text').extract()
遍历标签时使用>
和空格的区别在于
>
表示类似于td.col-name>div>a
中的直接子标签- 空格意味着任何子元素,不一定是直接子元素,比如在
td.col-name span.pos
中,中间包含一个a
标签。
我们来看看第一个位置,这是玩家的主要位置。
primary_position = player.css('td.col-name span.pos ::text').get()
extract()返回一个列表,而 get()或 extract_first()返回第一个元素
类似地,我们可以得到其他字段
age = player.css('td.col-ae ::text').get()
overall = player.css('td.col-oa ::text').get()
potential = player.css('td.col-oa ::text').get()
height = player.css('td.col-hi ::text').get()
value = player.css('td.col-vl ::text').get()
wage = player.css('td.col-wg ::text').get()
以此类推。
处理分页
滚动到页面底部,我们可以看到下一页链接。每个页面有 60 个玩家,这个网站上大约有 18K 个玩家。因此,我们需要获得分页链接并抓取数据,直到没有下一页的那一页,也就是最后一页。
response.css('div.pagination>a::attr(href)').get()
上面一行打印了一个不完整的 url,它是一个相对 url,这在现代网站中很常见。为了完成它,scrapy 提供了一个方法urljoin
。
response.urljoin(response.css('div.pagination>a::attr(href)').get())
这将打印完整的 url。现在点击下一页,尝试验证我们的 css 是否适用于所有页面。你会发现两个分页链接:上一页和下一页,我们使用的选择器将获得上一页链接。
解决方案:使用 Xpath。到目前为止,我们能够使用类来区分 web 元素,但情况并不总是如此。这两个分页链接之间的唯一区别是文本内容(上一页和下一页)。Xpath 允许我们根据文本内容精确地选择 web 元素。
response.xpath('//span[@class="bp3-button-text" and text()="Next"]/parent::a/@href').get()
让我们来分解一下:
//span[@class="bp3-button-text" and text()="Next"]
将选择等级为bp3-button-text
的跨度,然后输入文本。parent::a/@href
将遍历树并获取其父a
标签的 href 属性。
同样,我们可以使用response.urljoin
来完成 url。所以我们的代码应该是这样的。
next_page = response.xpath('//span[@class="bp3-button-text" and text()="Next"]/parent::a/@href').get()
if next_page:
yield Request(response.urljoin(next_page), callback=self.parse)
这是为了检查next_page
元素是否存在。然后,它通过加入 url 向该页面发送请求,并再次调用parse
方法。parse
是默认的回调函数,所以如果需要的话,您可以删除回调参数。现在,爬行器递归地爬行每个页面,同时产生数据。
这是我们最终代码的样子。
sofifa.py
执行蜘蛛
Scrapy 有一个内置功能,可以将数据直接转储到 json 或 csv 文件中。记住我们的SofifaSpider
类中的name
变量,我们将使用它来调用蜘蛛。
scrapy crawl sofifa - fifa20_data.csv
如果您想要 json 中的数据
scrapy crawl sofifa - fifa20_data.json
Scrapy 提供了许多现成的特性,使得编写 scrapers 和收集数据变得很容易。我们在这篇文章中看到了其中的一些。在 40 行代码下,我们设法创建了一个爬虫,它将在不到 30 分钟内抓取超过 18K 的数据。
您可以查看其他高级设置,如使用代理、添加延迟、更改并发请求等。
你可以从这个 github repo 下载代码和数据。
结论
每个数据科学项目都需要数据,而 web 是一个巨大的数据源。数据收集是任何数据科学项目的第一步,您的分析结果取决于您所拥有的数据的质量,或者简单地说就是垃圾进垃圾出。因此,如果我们花一些时间在无聊的部分,如收集、清理和准备上,而不是仅仅关注使用哪种模型或制作哪种可视化效果,我们可以改善最终结果。
接下来,我们将了解如何清理数据并为分析做好准备。
以下是一些你可能会觉得有用的学习材料:
- https://docs.scrapy.org/en/latest/intro/tutorial.html
- 【https://learn.scrapinghub.com/scrapy/
- http://scrapingauthority.com/
- https://www . data camp . com/community/tutorials/making-web-crawlers-scrapy-python
- https://www . analyticsvidhya . com/blog/2017/07/we B- scraping-in-python-using-scrapy/
- https://www . digital ocean . com/community/tutorials/how-to-crawl-a-web-page-with-scrapy-and-python-3
如果您在代码中有任何困惑,或者在推导 xpath 和 css 选择器时需要帮助,请告诉我。另外,如果你对如何在接下来的步骤中分析这些数据有任何建议,请在评论中告诉我。你也可以在推特上找到我。
人工智能符合营销细分模型
原文:https://towardsdatascience.com/data-science-powered-segmentation-models-ae89f9bd405f?source=collection_archive---------6-----------------------
Flickr DesignAndTechnologyDepartment, Wikimedia BronHiggs, (CC BY 2.0)
新黄金标准:使用机器学习从行为数据中获得用户和产品细分,用于营销 STP 策略
细分、目标和定位(STP)是当今营销方法中常见的战略模式。这反映出以客户为中心的营销策略比产品差异化策略更受欢迎。例如,营销中以受众为中心的方法有助于向商业相关细分市场提供更具相关性和针对性的沟通。因此,STP 与营销角色密切相关。
[OC] (CC BY 4.0)
战略中细分的流行一方面源于 CRM 和 ad-tech 系统过去的局限性,另一方面源于 STP 过程中对人类决策的依赖。在数据驱动个性化兴起之前,大多数系统只能处理少量的细分市场,因此目标定位仅限于一般的受众细分。
[OC] (CC BY 4.0)
为了创建丰富而有意义的受众群体或营销人物角色,有大量的地理、人口、心理和行为数据可供选择。在我们创建人类可解释的分段的愿望中,我们倾向于
- 优先考虑地理、人口和心理数据,而不是使用行为数据
- 给我们的细分市场分配或多或少的离散标签。
(Pixabay)
这种在或多或少不相关的人物角色中的想法引起了市场商人和决策者的强烈共鸣,但最终是有缺陷的和有局限性的。仅举几个问题:
- 对于用户群来说,地理、人口和心理数据通常很少,而且质量参差不齐
- 严重依赖个人数据,限制越来越多,同意程度越来越低
- 这种角色很难扩展、更新和自动化
- 人物角色的不同特征没有相关的重要性或相关性权重
- 现实本质上是不确定和可变的——你的数据和你在其上构建的人物角色也是如此
一些重要的发展促使我们对目前如何进行细分进行了重大的反思:
- CRM 系统和 ad-tech 在处理倾向而非离散细分市场方面的进步
- 人工智能的进步和大数据的可用性,可以从大行为数据中间接提取地理、人口和心理信息。
新的黄金标准是行为数据
(Pixabay)
你可能听说过数据是新的石油,但这到底意味着什么呢?随着数据技术和机器学习的进步,数据科学家可以处理大量数据,以提取微妙的隐藏信号。这种支持数据的方法不仅开启了新的和创新的用例,而且有助于扩展和自动化它们。我们谈论的是哪种数据?特别是行为数据,比如来自你的电子商务网站或应用的点击流、事件和搜索数据。
您客户的不同地理、人口和心理属性对他们的需求和行为有微妙但明确的影响。因此,机器学习允许我们从行为数据中间接提取这些因素。
这种数据驱动的方法有明显的优势:
- 它可以轻松扩展到您的整个客户群——不再有缺失或不完整的数据
- 这完全基于你的第一方数据
- 它包含关于客户属性的相关性的信息。只有与您的产品和品牌相关的相关客户特征才会反映在细微的客户行为中,并以相应的信号强度记录在您的行为数据中。
- 它提供了机器可理解的编码特征,可用于许多其他机器学习问题,如聚类、预测和推荐系统。
有一个缺点:
- 你提取的所有客户属性都经过数学编码,机器可以理解,但人类无法直接理解。
这对市场商人来说可能是件大事,但这真的重要吗?不一定!它只需要改变我们理解和处理客户特征的方式。
- 您可以在不了解“ML 黑盒”本身的情况下对输出进行检测和质量保证。
- 您可以叠加额外的数据来推断人类的可解释性
- 您可以在不理解的情况下操作它,例如使用多臂土匪优化
动物园
在 Zoopla 上,每天大约有 150 万人搜索我们的房源并与之互动,每天产生大约 1000 万的页面浏览量。为了更好地了解这些人和他们的产品需求,Zoopla 自然会关注细分市场。在传统的细分方法中,我们会关注人物角色,比如租户、买家、卖家、房东等。但是房产阶梯并不是一目了然的:如果你正在购买一处房产,你可能会卖掉现有的房产来融资。这种房产链占了英国房产交易的大部分。在伦敦,租房者可能出于需要而租房,但他们也是拥有“先买后租”房产的房东。那些爱管闲事的人又如何呢?他们只是喜欢浏览所在街道的房产详情。与此同时,对于像 Zoopla 这样的房地产门户网站来说,这样的人物角色如何转化为不同的产品需求还不清楚。
从行为中分离
使用行为数据进行细分的第一步是将你的点击流转化为选择的相关维度及其值。找到这些维度的一个很好的方法是利用推荐引擎的数学,并将因子分解应用于用户-产品交互矩阵。如果你读过我之前关于推荐系统和协作过滤的文章,这被称为用户项目模型:
[OC] (CC BY 4.0)
目的是将历史矩阵分解为用户和产品特征,这可以预测我们的历史用户-产品交互。该历史矩阵可以是产品购买、用户评级或您企业的其他相关事件。
矩阵分解可以以不同的复杂程度进行,例如是否考虑用户和产品偏差。 Fast.ai 为协同过滤提供了一些有用的高层抽象。我们使用 SVD++ 作为我们的因子分解,其中包括针对项目 i 和用户 u 的偏差 b ,以及针对维度 f 的用户特征 U 和产品特征 P :
[OC]
在这个例子中,我们使用了 Zoopla 用户的样本数据集,以及他们对某些房产列表的参与度。分数描述了从 0 到 1 的意图度量,捕捉用户与 Zoopla 上的列表的交互深度(例如,页面时间、浏览的图像数量、查看的平面图、向代理发送线索等)。)如下:
[OC] (CC BY 4.0)
我们使用 Fast.ai 和 PyTorch 来训练我们的 SVD++模型:
import fastai.collab as fst_collabdatabunch = fst_collab.CollabDataBunch.from_df(
data, user_name=”userId”, item_name=”listingId”,
rating_name=”score”, valid_pct=0.25
)learner = fst_collab.collab_learner(
databunch, n_factors=10, y_range=(0.,1.)
)learner.fit_one_cycle(10, 1e-1)
learner.show_results()target, prediction = learner.get_preds()
[OC] (CC BY 4.0)
我们的模型学习了 10 个因素来描述 Zoopla 上的用户和房产列表。为了理解这些高维数据,我们可以使用 t-SNE 算法来聚类和可视化我们的数据。t-SNE 是一种随机 ML 算法,用于以可视化的方式降低维度,将相似的用户和列表聚集在一起。这也叫做邻居嵌入。
from sklearn.manifold import TSNEU_embedded = (
TSNE(n_components=2)
.fit_transform(learner.model.u_weight.weight.detach().numpy())
)ax = plt.scatter(
U_embedded[:,0], U_embedded[:,1],
c=learner.model.u_bias.weight.detach().numpy().flatten()
)
cb = plt.colorbar()
_ = ax.axes.set_title(“User Factors”)
_ = cb.set_label(“User Bias”)
[OC] (CC BY 4.0)
从那些情节中我们可以了解到一些有趣的定性见解:
- 房源的种类似乎高于用户的种类。
- 用户偏好比房产列表的偏好更对称,范围更广。更多的房产清单是负面的,而不是正面的。这与人们的观察相吻合,即 Zoopla 的许多待售清单不会产生很多线索。
- 用户分为三个主要群体。租房者彼此更加相似,普遍有积极的偏好,比因子分析预测的更关注房源。买家是最多样化的用户群,拥有更小的子群。浏览器会查看大量待售和待出租的房产列表,但不会深入地关注这些列表,从而导致负面偏见。
- 房产列表显示了一个主要由租赁列表组成的具有正偏差的集群。许多租赁房源吸引的参与度似乎比它们的因子分析预测的要高。造成这种积极偏向的因素包括英国的住房危机、可负担性和地理位置。第二类主要是待售房产,偏向中性。这些房产列表比剩余的“冷”列表彼此更相似,显示出负面偏见。
你可以在我的后续文章中了解使用深度学习和 Tensorflow 的替代方法:
[## 人工智能平台时代的客户偏好
如何使用深度学习来发现客户的偏好,并了解您的产品库存
towardsdatascience.com](/customer-preferences-in-the-age-of-the-platform-business-with-the-help-of-ai-98b0eabf42d9)
memegenerator.net (fair use)
但是营销想更深入!
对于高维数据,T-SNE 是一种有用的可视化技术,但我们从像这样的邻居嵌入中获得的定量信息是有限的。如何从高维因素中提取洞察力取决于您的使用案例和行业。
地理信息:房地产市场非常本地化,我们的用户和房地产特征包含地理信息并不奇怪。房产列表有相关的位置数据,用户可以在 Zoopla 上搜索地理区域。让我们按照最频繁的 Zoopla 搜索的外部代码对属性列表和用户进行分组。然后,我们可以通过外码(如 SE1)查看因子分解中 10 个因子的方差。假设编码地理信息的因素在一个外码中比其他类型的因素显示出较少的变化。
[OC] (CC BY 4.0)
因子 0、2 和 5 似乎编码了地理信息。不足为奇的是,用户因素显示了这些因素的更大的标准偏差:用户在多个位置进行搜索,但我们只根据他们最频繁的搜索对他们进行了汇总。与用户相反,房产列表具有明确的位置,因此地理因素的预期标准偏差较低。该地图显示了与全英国人口中心相关的外码平均用户系数 u_0。但这个因素也凸显了一个重要的观点:它编码了地理信息和人口统计信息,比如租房者和买房者。
[OC] (CC BY 4.0)
在传统的细分方法中,我们独立处理的许多维度实际上是强相关的,我们的因子分解产生了衍生的混合地理、人口和心理信息的维度。例如,在我们的用户-物业分解中,物业的价格、卧室数量以及一些地理信息被编码到一些派生的本地化的可支付性指标中。
[OC] (CC BY 4.0)
不同地区的房价承受能力存在有趣的差异:
- 不出所料,伦敦中南部的房产和河以北一样难以承受,但河以南的房租更容易承受。
- 罗姆福德地区的房价非常便宜,但相比之下,在罗姆福德租房的人负担不起房租。它显示了本地化市场的程度,以及该模型的可负担性指标不是一个绝对的衡量标准,因为它是从本地化的用户资产分解中得出的。
- 相反,希思罗机场地区买房比租房便宜。
局限性和一些关于数据伦理的话
技术 : SVD++和所有协同过滤模型一样,都有一个冷启动的问题。Zoopla 上的新属性和人必须接收/产生一定程度的交互才能被包括在细分中。这也意味着,要向模型中添加新的属性或用户,我们必须重新运行分解。对于 Zoopla 高度动态的房地产目录来说,这比传统的电子商务业务更成问题。
你可以在我的后续文章中读到使用 Tensorflow 的深度神经网络的替代实现,它没有冷启动问题:
[## 人工智能平台时代的客户偏好
如何使用深度学习来发现客户的偏好,并了解您的产品库存
towardsdatascience.com](/customer-preferences-in-the-age-of-the-platform-business-with-the-help-of-ai-98b0eabf42d9)
伦理:这篇博文展示了可以通过机器学习提取的行为数据有多丰富,信号有多详细。但是这样做道德吗?在人们没有明确给我们任何数据的情况下,我们推导出了的详细信号。一方面,这意味着它不一定对用户透明。另一方面,如果我们得出的用户或财产的属性是不正确的,那么更正可能需要无意中披露更多的数据。
读完这篇博文后,你可能不会马上明白为什么这很重要。毕竟,我只提出了定性的见解,主要是在一个汇总的区域级别,以告知一般的 STP 策略。这显然是合乎道德的,并且有助于改善我们的产品和服务。
但我们关注的一个信号是一些派生的可负担性。在分解模型中,此数据存在于酒店和用户级别。把它从一个聚集的领域降低到财产层面,似乎仍然是合乎道德的。我们确实一直在谈论房产的可负担性。但是把它降低到个人 用户级别怎么样?理论上,我们可以告诉代理我们对您发送的销售线索的可承受性的看法。如果这让你感到不舒服,让你想起 DSS(住房福利)歧视,那么你是对的。在这种情况下使用这个数据点会让人立即感到不道德。
作为数据科学家,我们有责任不仅在我们训练的模型的背景下,而且在这些模型可能实现的用例中思考数据伦理。我们应该只使用数据,建立符合比例的模型(T21)。将这一点纳入我们的分解模型的一个方法是我们得到的信号的数量。我在另一篇博文中训练的地理区域嵌入包含 50 个信号。但是用户属性交互的分解我故意限制为 10 个信号,限制了我提取的细节层次。
© https://dilbert.com/strip/2010-10-13, (personal use)
这是一个非常肤浅和高层次的数据伦理讨论,仅仅是为了强调使用数据时的责任。每个数据科学家都应该理解并应用数据伦理框架:https://www . gov . uk/government/publications/Data-Ethics-Framework
我不是专家,但你也可以阅读我关于偏见和算法公平的文章,以了解更多关于这个问题和缓解策略的信息:
[## 偏见和算法公平
现代商业领袖在由数据统治的勇敢新世界中的新责任。
towardsdatascience.com](/bias-and-algorithmic-fairness-10f0805edc2b)
Jan 是公司数据转型方面的成功思想领袖和顾问,拥有将数据科学大规模应用于商业生产的记录。他最近被 dataIQ 评为英国 100 位最具影响力的数据和分析从业者之一。
【https://www.linkedin.com/in/janteichmann/】在领英上连接:
****阅读其他文章:https://medium.com/@jan.teichmann
数据科学实践 101:永远留下分析文件线索
原文:https://towardsdatascience.com/data-science-practice-101-always-leave-an-analysis-paper-trail-cc17079fae5a?source=collection_archive---------24-----------------------
它会救你一命。很多。
Bunny… things from Hokkaido.
对于大多数数据科学家来说,即席分析请求是不争的事实。即使你的主要角色是做高层次的建模/产品开发,你总会做很多小的分析,无论是为你自己还是为别人做一个大项目的基础。
在这样的环境中,很容易得到一大堆分析输出,它们漂浮在一个几乎没有上下文的永久“临时”目录中。“不值得检入的快速小东西”你说,“数据从哪里来很明显”。我明白,这是常有的事,我自己也说过无数次了。从来没有好结果。
忙碌的数据科学家要做什么?不管现在听起来工作有多忙,你都需要留下书面记录,可以清晰地追踪到原始数据。不可避免地,有人会希望你重新运行 6 个月前完成的分析,以便他们可以更新报告。或者有人会伸出手来问你,你对“活跃用户”的具体定义是否恰好包括戴绿帽子的人。除非你有完美的记忆力,否则你不会记得细节,必须去寻找答案。
TL;DR:任何可交付的分析都应该始终带有文档,以显示分析的完整路径,从原始数据一直到交付,包括查询和代码,以及到以前的分析和原始数据转储的链接(如果可行的话)。
分析应该是独立的
在学术界,当发表一篇论文时,我们被训练引用我们的来源,展示我们的推理,并(理想地)记录我们的方法,足以让第三方复制我们的工作和结果。在编写代码时,我们(再次强调,理想情况下)应该编写足够清晰的代码,并辅以注释和文档,让其他人(包括你未来的自己)在审查你的代码时能够理解发生了什么。决定性的特征是最终的可交付成果,无论是签入的代码还是发表的论文,都与文档打包在一起。他们一起生活,一起消费。
这通常不会发生在一个可交付的分析中!
分析可交付成果通常与用来生成它的东西分离开来。结果以幻灯片、电视屏幕上的仪表板、粘贴到电子邮件中的图表、面向高管的联合演示中的单张幻灯片的形式发送出去,或者只是在某处的文件结构中四处浮动的随机 CSV 转储。可交付成果和源代码之间的耦合是不存在的,除非我们有意识地做些什么。
Package all the things!
但是我已经将我的 SQL/代码签入 git 了!
当然,对你来说很好。但是当有人指着你 6 个月前分享的一张图表问“你在这张图表中排除了内部用户吗?”会有答案吗?如果没有,您是否能够利用该图表并追溯到为其生成数据的数据查询/ETL 来回答这个问题?不将大型数据集签入 git repo 通常是最佳实践,因此在签入的代码和产生的数据制品之间总是存在脱节。
这不是一个关于“某处”是否有记录的问题,而是在需要时,在提出问题的任何时间和地点,在几秒钟内是否可以随时获取记录的问题。
开门见山,有哪些示例解决方案?
这里有一个不完整的列表,列出了把东西放在一起的方法。使用对所有利益相关者来说最自然的方式。
- Excel 文件:为你的原始数据转储制作一个标签,一个标签用于查询,一个标签用于分析。如果有些东西太大,放不下,就放上链接/参考。
- CSV 文件:无论如何,你会想压缩你的数据用于发送/存档,tar/zip/bz2/xz 用你的 query.sql 文件,任何处理代码,等等。
- 幻灯片组:取决于观众和论坛,幻灯片本身的引用,或带有分析计算/文档链接的附录幻灯片,或演讲者笔记中链接的文档
- 仪表盘:棘手的,如果可行的话,UI 上的链接,或者隐藏在生成特定仪表盘元素的代码中的注释/链接。
- 电子邮件报告:提供更详细来源的链接,或相关数据的参考。
- Jupyter/colab 笔记本:文档应该被编入代码和笔记本本身,这些文本/html 块是有原因的。
- 生产模型:代码注释和/或链接,指向模型所在的原始分析,或者至少是生成任何参数的分析。
我还应该做什么?
记录文件日期— 大多数分析,尤其是临时分析,都与时间相关—季度董事会议、新功能发布等。2017 年的东西在 2019 年通常不太相关。当所有的上下文都丢失了,但是有人可以在交付物发出的时候产生一封电子邮件通知,你就有了一个可以去寻找的日期。
My personal habit of dating analysis and deliverable files
无论何时运行查询,都可以得到相同的结果。通常情况下,很容易进行“提取所有内容”或“最近 7 天”的查询,但它们的一个缺陷是,数据会根据您运行查询的时间而变化,甚至是在 10 分钟之后。这使得不修改查询就无法再现查询结果,这可能是不希望的。
在某些情况下,使用动态时间窗口进行查询很有意义,而在其他情况下则不然。在做决定时,要意识到你潜在的未来用例(人们会要求你用更新的数据重新运行它,等等)。
外面的世界很混乱。试着在你自己的小范围内保持有组织性。
数据科学生产:维护
原文:https://towardsdatascience.com/data-science-productionization-maintenance-af59ce6c958?source=collection_archive---------7-----------------------
DS 生产化
花费在可维护性上的时间减少了实际维护的时间。
这是关于数据科学生产的五部分系列的第三部分:
- 数据科学的“生产化”意味着什么?
- 便携性
- 维护
- 刻度
- 信任
在上一篇文章中,我使用了一个简单的单词规范化函数来说明代码可移植性的一些原则:
现在让我们看一下同样的功能,但这次是优先维护:
第一部分甚至不包括函数本身。我在这里建立的是日志基础设施。我已经指定了一个记录错误的文件(名为“error.log ”),并设置了每当出现错误时在该文件中打印什么单词的规则。通常,日志记录比引发完整错误更可取,因为它允许系统的其余部分即使在出错时也能继续运行。停机时间往往比错误或缺口更具破坏性。还要注意,我添加了注释(以散列符号开头的行)来解释日志设置的每个部分是做什么的。
然后我们到了函数定义(以‘def’开头的那一行,但是在这一点上还是没有实际的代码。这部分被称为“文档串”。它解释了函数的目的、预期输入和预期输出。
现在我们来看函数内容。首先,我们有一个“断言”语句。这种说法是一种考验。如果“word”输入不是一个字符串,那么后续的代码都将不起作用,所以这个测试检查以确保输入是一个有效的类型,如果不是,就抛出一个错误。之后,您可以看到该函数的实际代码,但是我已经将它们都包装在一个“try”语句中了。这条语句首先尝试运行我们最初编写的所有代码。如果有一个系统退出错误或键盘中断错误(这两个问题都来自函数之外),函数会告诉我。任何其他错误,该函数在日志文件中打印错误。这样,我就可以监视日志文件,查看发生的任何错误,并获得帮助我调试错误的信息。
最基本的,可维护性是关于日志、警报和测试的。令人高兴的是,这些东西通常是编程语言的内置组件。不幸的是,设置它们真的很无聊,而且经常被搁置。它们需要额外的几分钟甚至几个小时来设置,但是一旦设置好,它们可以为您节省几个小时甚至几天的时间来识别问题。
当我们从特定的代码中抽离出来,考虑整个代码系统的可维护性时,我们不再仅仅谈论文档字符串和日志基础设施(尽管这些东西很重要)。文档是企业确保其数据科学能力可维护性的主要非代码方式。这是每个人都说你应该做的其他事情之一,但是很少有人真的去做。我认为这是因为人们通常不知道文档提供了什么价值。有不同种类的文档,每一种都有不同的用途:
技术文件
技术文档应该允许一个以前不熟悉代码的有能力的程序员编写新的代码,这些代码将实质上再现原始代码的结果。我说“实质性地”复制是因为精确的复制通常依赖于实现的微小细节——这些细节只能在代码本身中找到。标准技术文档可以分为以下几类:
- 背景。这是产品背后的动机——它试图解决的一般业务问题。它可能还包括产品的目标(和非目标——我稍后会详细介绍)。
- 设计。这是文档中最长的部分。它一步一步地列出了产品的组成部分。它确定了所有要用作输入的数据源,强调了对其他产品的依赖性,定义了将用于处理数据的模型、算法或程序。标记这些过程的配置与标准实践或程序包默认设置的任何不同之处。在这些部分中,流程图会有所帮助。代码片段通常也很有帮助。
- 结果。本节定义了衡量产品性能的具体指标。这可能是显示模型准确性的误差分布或混淆矩阵;它可能是按客户、地区或其他类别细分的结果。这一部分本质上是在论证你的产品做了它应该做的事情。
- 开放式问题。这可能会突出产品中的弱点或它所带来的风险,比如安全性缺陷或不适合的用例。未解决的设计或实现问题,以及改进产品的方法应该在这里列出,这些方法很值得探索,但还不够紧迫,不能马上解决。
非技术文件
非技术文档应该允许非技术用户理解产品在公司提供的更大的生态系统中的位置,不仅理解产品的优点和局限性,而且在高层次上理解为什么这些优点和局限性存在。非技术文档可以分为以下几类:
- 商业背景。这应该简要描述为什么企业应该期望从产品中发现价值。
- 目标。这是产品应该实现的具体结果的列表。这些都应该是可以明确评估的事情——在产品运行一段时间后,您应该能够回顾每个目标,并询问它是否已经完成。
- 非目标。这是产品不打算完成的事情的列表。这是文档的一个重要方面,它定义了产品的范围。
- 注意事项。这应该是一个非常诚实的列表,列出了产品没有做的事情,或者没有尽可能做好的事情。利益相关者在与外部客户交流时,可能会软化列表中的语言,但是总应该有一个地方可以坦率地讨论产品的弱点,而不是罗列出来。
- 解释/使用指南。这将为非技术用户提供建议,帮助他们了解如何负责任地使用产品输出。这可能包括解释指标的指导方针(例如,什么构成“高”分,什么构成“低”分?),以及在利益相关方对结果不满意时可以要求的设置更改。
非技术文档尤其重要,因为你必须像维护产品本身一样维护用户对产品的参与。只关注技术维护就像建了一座漂亮的房子,却从来没有人住在里面。
一个个人的例子
当我为一个大型特许学校网络组建数据科学团队时,最迫切的业务需求是使用大量不同类型的数据创建学生表现的汇总评估。在我们的每一门核心课程中——英语语言艺术、数学和科学——学生每两到三周接受一次评估,每次评估有 1 到 40 个问题。评估形式从简单的多项选择考试到监考阅读考试不等,在监考阅读考试中,学生大声朗读,教师对他们的流利程度进行评分。每隔几周,一群学校管理人员、内容创建者和教师就会聚在一起,审查分数的电子表格,并就数据的意义展开争论。这是一个学校的电子表格,针对一项评估:
每行是一名学生,每列是一个问题—黄色单元格表示学生在某个问题上的表现低于预期。想象几十个这样的电子表格。现在想象一下,试着回答一个表面上看起来很简单的问题:哪些学生最需要我们的帮助?
当我来到特许学校网络的工作岗位时,我花了至少一周的时间来回答这个问题。管理员会争论一个月前的评估有多相关。老师们会说,最近评估中的第 2 题和第 15 题写得很差,因此没有很好地解读学生的表现。这是我的团队需要应对的挑战。
我们的主要数据科学产品是一种算法,它将这一过程从一周和一个委员会减少到几秒钟内可获得的自动结果。我们通过对每个问题进行评分来区分历史表现差的和历史表现好的。所以,当看个人评估中的个别问题时,如果一年中历史上该科目大多数问题不及格的学生答对了,而历史上该科目大多数问题答对的学生答错了,这意味着该特定问题的结构可能很差。设计糟糕的问题对整体分数的影响应该较小,因为学生不应该因为老师和管理者的错误而受到惩罚。
一旦我们对每个问题进行了评分,我们就可以对几个月的工作进行平均,用问题质量分数对平均值进行加权。我们还加入了指数衰减,使得最近的数据更重要。所有这些使我们能够创建支持这些可视化的数据产品:
每张图代表一所学校,每个点代表一个学生。学生横向从当前最低成绩到当前最高成绩,纵向从一年中成绩下降最多到成绩增加最多。最暗的点是那些处于最大困境的学生——他们的表现很差,并且在下降。橙色圆点最深的是成绩好,成长中的学生。
学校网络管理员可以使用这样的摘要来快速比较学校,并查看它们彼此之间的表现。个别学校领导可以利用这一点来快速识别需要更多帮助或需要更多挑战的学生。
成功采用该产品的最大因素是支持它的非技术性文档。为了让学校领导使用这个工具,我们需要对我们如何计算问题质量分数进行广泛的解释。我们还需要非常详细地阐明算法提供信息的情况。例如,该算法的目的是帮助资源分配——教育工作者一天只有这么多时间,所以我们希望他们将尽可能多的时间花在最需要的学生身上。学校里表现最差的学生仍然可能超过政府规定的表现标准。该算法并不关心这个——它只关心那些学生比他们的同龄人获得的教育收益少。
随着时间的推移,我们必须构建非技术文档来解决关于原始文档的目的和范围的新问题。有一次,几个学校领导来找我,他们认为这是算法中的一个错误。他们拿出了他们的电子表格,显示一些在我们的英语语言艺术表现指数中得分很低的学生实际上在许多 ELA 个人评估中得分很高。当我们深入研究这个问题时,我们发现他们确实在许多评估上得了高分——所有的每周拼写测试。他们的核心读写能力评估得分很低。该算法能够识别出,与能够有意义地解读文本相比,能够记忆单词是一种不太可靠的表现衡量标准。我们记录的越多,这个工具就被越广泛地采用,我们希望,我们能够给学生带来更多的好处。
该系统需要的技术文档和非技术文档一样多。随着对该工具需求的增加,我们不得不改变存储和检索底层数据的方式。在某一点上,来自教育者的反馈使我们确信我们在时间衰减权重上设置了错误的半衰期,所以我们需要进去修改它。我们在使用该算法的第二年发现,在学年开始时,由于没有足够的数据,在评估不太重的科目中,它给出了无意义的结果。所有这些都需要被整理(换句话说,使之可移植),但也需要被记录下来,这样我们未来的自己就可以在不破坏系统的情况下修改它。
花费在可维护性上的时间减少了实际维护的时间。如果我们在构建时没有考虑到未来的维护,那么随着时间的推移,我们构建新东西的能力会变得更弱,因为我们必须花费所有的时间来保持旧东西的运行。
数据科学生产化:可移植性
原文:https://towardsdatascience.com/data-science-productionization-portability-f5d1a1f2f45b?source=collection_archive---------11-----------------------
DS 生产化
当你的目标改变时,可移植性通过减少你必须重写的代码量来减少从你的代码中获得价值的时间。
这是关于数据科学生产的五部分系列的第二部分。当这些帖子可用时,我会用链接更新下面的列表:
- 数据科学的“生产化”意味着什么?
- 便携性
- 维护
- 刻度
- 信任
生产数据科学的第一步是使其可移植。为了解释我的意思,让我们看一个代码可移植性的简单例子:
上面的代码执行一个在文本分析中常见的简单任务:取一个单词,去掉两端的所有空格,并将所有字符小写;然后依次检查该单词每个字符;如果字符在“停止”列表中,省略它;最后,将所有剩余的字符连接在一起,使它们再次成为一个单词。该示例使用了一个特定的单词“abracadbra”,您可以看到结果只包含字符“rr”,因为所有其他字母都在我们的停靠点列表中。
现在来看看相同的代码,其中有一些变化:
新代码采用相同的输入并产生相同的输出。但是这段代码在一些方面优于以前的版本:
- 它将变量“STOPCHARS”大写,遵循标记常量的 Python 约定——它告诉阅读这段代码的人,如果他们想使用这部分代码,他们需要复制并粘贴它,因为它不是从任何其他来源派生的。它是一个视觉信号,告诉程序员如何在不同的上下文中使用那部分代码。
- 整个工作流被包装在一个函数中。这个函数可以接受任意一个单词和任意一个停靠点列表。如果我想使用第一个代码示例来更改这些内容,我需要删除我拥有的单词定义,并写入一个新的定义。有了新的代码,我可以用新的输入来调用函数——我不必删除任何以前的工作;我可以加入新的作品。
- 我在函数定义中引入了止损点的默认值。如果函数中没有输入任何停止符,它将删除空格、小写字母并返回单词,而不需要花费任何时间单独查看每个字符。因此,它可以自动处理我想要规范化一个单词但没有任何停顿可以删除的情况 one 函数自动处理两种用例。
简而言之,修改后的代码可以用于任何数量的项目——甚至是我在编写函数时从未预料到的项目。原始代码可以用于我编写它的项目,如果我想在其他地方使用它,必须进行编辑。所以第二个代码示例是两个示例中更容易移植的。
便携性的类型
我们也可以让整个代码集合具有可移植性。有几种方法可以做到这一点:
包装。打包是获取大量代码(多个文件和目录)并将其捆绑在一起以便于在其他计算机上安装的过程。例如,Python 的打包系统从 PyPi 到 conda,前者被广泛使用且相对简单,后者越来越受欢迎,因为它使安装更容易且更健壮地处理依赖性。依赖性管理是打包软件的主要原因之一——模块化软件通常建立在其他模块化软件的基础上,这意味着当你想使用一个软件时,你需要安装所有的软件。通过打包来跟踪这些依赖性使得代码可以跨用户移植。此外,根据打包代码时所依赖的依赖关系,代码的性能可能会有很大的不同。例如,下图显示了使用 tensorflow 每秒可处理的图像数量的差异:
https://www.anaconda.com/tensorflow-in-anaconda/
Conda 中的代码包比 PyPi 中的代码包执行速度快 4-8 倍。这在很大程度上是由于打包依赖项的不同。
版本控制。打包有助于用户之间的可移植性,而版本控制有助于贡献者之间的可移植性。最流行的版本控制系统是 git。Git 运行在分叉-修改-提交-合并模型上。在下图中,最上面一行是代码的“主”分支,其余几行是为不同目的创建的其他分支。
https://br.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
当您看到想要使用的代码时,您会“派生”您自己的副本。你想怎么弄就怎么弄,原件还是会在原来的地方。当您对本地机器上的代码进行更改时,您可以将其提交到您的分支——您的本地代码将反映您所做的任何更改,但是您的分支将只反映您所提交的更改,而原始代码将保持原样。如果您的分支达到了原始代码的所有者认为它有用、稳定并且通常是所期望的程度,您可以将您的分支与主分支合并,在这之后,主分支将反映您提交到您的分支的所有更改。版本控制允许许多不同的人同时处理相同的基本代码集合,强制执行关于什么可以成为代码的“正式”版本的规则,并提供审计跟踪和灾难恢复的基础,所有这些都是通过将代码打包到单独的分支和版本中来实现的。
集装箱化。有时候光包装代码本身是不够的。像 Docker 这样的容器化系统通过不仅列出代码的依赖项,而且实际上将那些依赖项——系统工具、其他库和设置——与代码一起运送,来处理依赖项管理。这就像把你的整个机器打包,这样它就可以交给其他人打开包装。
工作流自动化。有时候,你的代码本身不需要可移植,但是使用代码的进程需要可移植。像 Airflow 这样的工具允许您指定各种脚本运行的时间和顺序,并指定该过程的输出应该存储在哪里以及如何存储。
这实际上是数据科学生产化的一个重要部分,它没有得到足够的重视—如果您试图在每次需要时(或每次需要更新时)从头到尾运行每个流程,您将不得不并行运行大量流程,这可能会变得昂贵,或者您不得不减少运行某些流程的频率,这可能会与您的业务需求背道而驰。通过将流程分割成中间部分并存储那些中游结果,您可以将下游流程指向那些产品而不是产生它们的脚本,从而节省计算时间,并且您可以获得数据的审计跟踪。而且,像你的代码的其余部分一样,你可以选择那些自动化的工作流,并把它们移动到不同的服务器或指向不同的数据库,而不必重写你的整个过程。
当你的目标改变时,可移植性通过减少你必须重写的代码量来减少从你的代码中获得价值的时间。
一个例子
让我举一个我亲身经历的例子。这是纽约市的麦迪逊广场花园——宾州车站在下面:
Madison Square Garden
这是同一地点的两张卫星图像:
Satellite images of Madison Square Garden
第一幅卫星图像显示了我们在宾州车站一天内获得的所有移动设备定位信号。第二张图片仅显示了当天有超过 100 个不同的移动设备访问过的位置。起初,让数百甚至数千台设备在短短 24 小时内出现在一个 10 厘米的正方形中似乎不太现实——这就是右图所示——但实际上可能有一定的意义。麦迪逊广场花园的中间是长岛铁路的主要等候区。人们坐在等候区的专用位置,他们聚集在开放的电源插座周围,等等。总之,我不能说那些地点明显不现实。甚至那些沿着车站东边广场酒店旁边的街道的位置也符合我所知道的那条街上的出租车等候模式。
所以我花了几个月开发了几种方法来区分人工地点和简单的繁忙地点。在许多情况下,方法标记的位置并不令人惊讶。例如,我们已经知道,当公司不知道 ip 地址位于何处时,美国的地理中心就被用作垃圾场。各州的中心和邮政编码似乎使用类似。但是其他的模式是意想不到的:
左边的网格模式是典型的高密度区域:城市环境中心、机场、游乐园等等。当多个冲突信号的高层建筑使获得良好的 GPS 读数变得困难时,许多手机将回复到一种更老的、不太精确的位置报告方法,导致网格化。另一方面,右边的网格图案实际上不是一个网格——它是一个六边形网格,被气象公司用来报告天气预报。天气应用程序倾向于以这种模式报告位置。我们最初对此一无所知——我们发现了模式,然后不得不做一些研究来试图发现数据生成过程。
我们开发的模式识别模型有一个直接的商业用途:我们可以标记有问题的位置,这样我们就可以忽略它们。这样,我们的位置报告将只基于我们可以信任的位置。因为我们使该过程可移植,所以我们可以轻松地获取新的位置数据源并自动应用我们的过滤器——适用于一个数据集的过程也适用于另一个数据集。因为我们对流程进行版本控制,所以我们可以对过滤器进行调整——添加新流程或修改旧流程——而不会破坏任何下游流程。因为我们自动化了工作流程,并将结果从这些过滤器放入存储完整结果的中间产品中,所以我们可以将这些结果用于新的用途。例如:
上面的图像显示了一堆替代的可能位置——那些没有被我们的过滤器标记的位置——它们可能被用来代替一个不可信的位置。无需深入了解具体实现的太多细节,您可以看到替代位置并不是随机分布在世界各地的。事实上,它们或多或少分散在一个小镇上。因此,我们可以用一个边界框来替换一个不好的位置,让我们大致了解报告该位置的设备的实际位置。我们甚至开发了一种成本效益算法,在最小化边界框大小的同时,最大化所使用的可信位置信号的数量。通常,我们可以减小边界框的大小,直到它聚焦于单个家庭而不是单个城镇,并且仍然使用我们所拥有的关于替代位置的大部分信息。
我们将成本收益平衡过程变得可移植,并很快发现了它的一个意想不到的用途:
我们有兴趣了解人们何时会光顾特定的地点,特别是,光顾商店对我们的客户来说非常重要。在上面的图像中,点代表建筑物内各个商店的质心。红点是我们在这种情况下的目标商店。我们只有在人们浏览提供广告的应用程序或网站时才会收到位置信号,而这并不总是发生在实际的商店中。可能发生在外面的人行道上,也可能发生在停车场。此外,GPS 信号本身就有噪声,因此一家商店的手机可能会报告隔壁商店的一些信号。因此,我们研究了一种方法,来判断任何特定的一片土地表明有人去过特定的商店的概率。
您可以看到我们贴在商店上的所有蓝色瓷砖,以及该关联的分数。我们需要告诉商店应该贴多少瓷砖。我们使用了之前使用的相同的成本效益平衡算法(其结果可以在商店图片下方看到),在新的环境中使用已建立的流程节省了数周的工作。
在我看来,这是使数据科学过程可移植的主要好处:它大大减少了从识别问题到部署问题解决方案所需的时间。在一个截止日期很重要的世界里,最好的工具通常是你已经构建好的工具。至少,你已经建立的工具可以让你得到一个解决方案,这给了你时间去寻找改进这个解决方案的方法。
数据科学生产化:规模
原文:https://towardsdatascience.com/data-science-productionization-scale-1884ca4e969e?source=collection_archive---------26-----------------------
DS 生产化
你可以等到你对意外感到惊讶,或者你可以建立系统来限制意外对你的伤害程度。
这是关于数据科学生产的五部分系列的第四部分:
- 数据科学的“生产化”意味着什么?
- 便携性
- 维护
- 刻度
- 信任
让我们再看一遍单词规范化代码(来自我的前两篇文章)。
我们之前写的代码对于一个单词来说很好。它甚至可以很好地处理几千个单词。但是如果我们需要规范化数百万或数十亿个单词,这将花费比我们可能想花费的更多的时间。这就是可伸缩性的问题:您必须处理的数据量通常与处理数据所需的时间有直接关系。企业是有期限的——如果你不能在你需要的时间框架内得到结果,那么这些结果对你没有任何好处。
在示例中,我们通过并行化来扩展代码。有很多方法可以做到这一点——我使用 Spark 是因为它是目前大规模处理数据最流行的方法之一。我首先创建一个 DataFrame,它或多或少是 Python 版本的电子表格。它有两列——id 和 words——每一列都有三个值。然后,我将数据帧转换为 Spark 数据帧,这样就可以分别并行处理每条记录。然后,我将我们的“normalize_word”函数转换为 Spark“用户定义函数”(UDF),这允许将函数分配给不同的虚拟机来处理数据。出于同样的原因,我将我们的停靠点列表转换成一个 Spark 数组。
一旦我将所有不可伸缩的代码转换成可伸缩的代码,我就可以使用 UDF 处理数据帧了。这将数据帧的每一行输出给一个“执行程序”,执行程序使用提供的函数处理记录,并给出结果:
**+---+--------+
|ids| norms|
+---+--------+
| 1| rr|
| 2|houspous|
| 3| shzm|
+---+--------+**
Spark 允许我调整发送给每个执行程序的记录数量,以及我想要(或负担得起)多少个执行程序。我可以决定我希望每个执行者拥有多少内存(对于上面的例子,我需要很少的内存,但是如果我分发整个机器学习模型,有时我需要很多)。
当我们从思考代码转移到思考代码系统时,我认为可伸缩性归结为三个主要部分:资源管理、集成和实现创造力。
资源管理
我发现从内存、计算能力和磁盘空间的角度来考虑资源是很有用的。我不认为这些事情有任何类比不会因为过于简单而给我带来麻烦,但我要冒险一试:如果你试图从一个州向另一个州运送大量货物,你的卡车的数量和大小将是你的内存,你的卡车的速度和马力将是你的计算能力,你的仓库的大小和数量将是你的磁盘空间。每个部分都制约着其他部分。如果货物到达目的地后没有地方存放,那么你有多少辆卡车或者这些卡车开得多快都没有用。如果你的货物装不下你的卡车,你的仓库再大也没用。如果卡车没有燃料,你的仓库和卡车的大小都不重要。你明白了。
尽管我们实际上只管理三种基本的资源,但是管理每一种资源的方法有很多很多。想想一辆卡车可能发生故障的所有方式。有很多方法可以打乱你的内存使用。对于 spark 作业,我通常必须使用以下参数:
- 我希望可用于运行作业的执行者总数
- 每个执行器上的内核数量(这允许额外的并行化)
- 每个执行器上的内存量
- 为了在执行器上移动数据,我愿意承担的内存开销
- 我愿意移入和移出执行者的最大数据量
- 当将数据集连接在一起或聚合时,我希望将数据拆分成的“无序”分区的数量
还有 10-20 个我更喜欢的默认参数,它们几乎适用于任何工作。还有几十个其他参数我甚至不知道,因为我从来没有必要去弄乱它们。可伸缩性与获得更多资源关系不大。主要是学习如何明智地分配可用资源。
集成
有时,流程中的瓶颈并不是技术资源分配的结果。换句话说,有时候人类会把你的东西弄乱。我见过的一些最常见的方式是:
- 需求的意外增长。你习惯于在被要求时给出结果。一开始你每周都会收到一些请求。现在你每小时都会收到一些请求。
- 供应商延误。直到公司的另一个部门给你他们最新的数据,你才能运行你的流程。他们忘记发送邮件(或者他们降低了工作优先级,或者通常发送邮件的人生病了,等等。)你被阻止,直到他们给你他们的拼图。
- 随时间自然降解。你训练一个模型,每个人对结果都很满意。随着时间的推移,人们开始变得不那么快乐。你把旧的模型拿出来重新评估,发现它的性能远不如投入使用时那么好。所以几个月(或几年)以来,你一直在糟糕的预测基础上运作。
所有这些问题的解决方案是,首先要问一个人是否真的需要参与进来。每次请求报告时,单个分析师是否需要手动滚动每个报告?财务部门的一个人真的需要把来自几个系统的数据汇编成 Excel 报表,然后通过电子邮件发给你吗?你真的需要在你的日程表上安排一个老型号的重新评估吗?所有这些事情都可以部分或全部自动化。有几种常见的方法可以做到这一点:
- 数据仓库。厌倦了不得不向别人要你的数据?将所有数据存储在同一个地方。
- 原料药。无法在一个地方获取数据?教一台计算机去要求它(并教其他计算机去递送它),这样递送就可以按照设定的时间表进行。
- 仪表盘。厌倦了回应数据请求?把它挂在网站上,自动更新,让它成为自助服务。
集成允许您更明确、更有效地管理不受您直接控制的资源。它们还允许您获得警报和报告的好处。
实现创意
通常,可伸缩性更多地与您如何考虑问题有关,而不是与您如何管理技术资源和合作关系有关。让我参考我自己工作中的一个例子来解释我的意思(我已经在这里更详细地描述了这个例子)。在我目前的工作中,我们查看位置数据的一种方式是将手机定位信号与地块叠加。宗地来自市或县估价员办公室,用于划分建筑红线。它们通常看起来像这样:
当我们看到位置信号位于住宅区或宜家缴税的地块内时,这对我们非常有用。这有助于我们理解为什么那些信号会在它们所在的地方。并不是所有的包裹都有很好的标签,所以我们需要为没有标签的包裹推断标签。特别是,我们希望区分住宅和非住宅地块。为居住性建模的方法非常简单:我们有数千万个被标注的地块,我们有许多与这些地块相关联的元数据,我们可以根据这些元数据训练模型来识别正确的标签。
当我们想要实际生成标签时,困难就来了。我们有大约 1.4 亿个包裹需要决定。我们已经使用 Python 的 scikit-learn 库训练了这个模型。然而,通过 PySpark 用户定义函数调用 scikit-learn ' predict '方法会产生一些问题。首先,它导致了序列化模型对象以传输到执行器,然后反序列化该对象以在执行器上实际使用的开销。它必须为作业中使用的每个执行者都这样做。第二,它未能利用 scikit-learn 的优化,这主要是因为它依赖于另一个包 numpy,以便一次对整个数据数组快速执行计算,而不是遍历单个记录。
使用 spark 逐行应用模型的开销如此之大,以至于我们甚至无法完成这个过程。我们最终发现,解决方案是创造性地思考如何应用经过训练的模型:
上面的代码做了几件事:
- 将唯一的宗地 id 映射到模型进行预测所需的要素列表。
- 将这些映射的项目分组到合理大小的组中。我们发现大约 50,000 人的小组运作良好。
- 重写用户定义的函数,使其按组而不是按记录应用。所以不需要移动和应用模型 1.4 亿次,只需要发生(1.4 亿/ 5 万)= 2800 次。
正如我所说的,即使运行了 48 小时,最初的实现也没有完成。新的实施在 30 分钟内完成。教训:谈到可伸缩性,有时我们需要新奇的新技术;有时候我们只需要五分钟的散步,这样我们就能获得一个新的视角。有时候我们两者都需要。
可伸缩性是为了让您的工作面向未来。你真的无法预测有多少人最终会想要你所构建的东西,或者他们想要它的时间框架。您可以等到需求意外增长时再做决定,也可以构建自己的系统来限制需求变化对工作的瓶颈影响。
数据科学生产化:信任
原文:https://towardsdatascience.com/data-science-productionization-trust-b37f10b8f426?source=collection_archive---------36-----------------------
DS 生产化
对于数据科学的消费者来说,询问他们为什么应该相信他们得到的分析结果是完全合理的。
这是关于数据科学生产的五部分系列的最后一部分。该系列的其余部分可在以下链接中找到:
- 数据科学的“生产化”意味着什么?
- 便携性
- 维护
- 刻度
- 信任
我将本系列的大部分文章致力于生产的技术方面,尽管这些方面严重依赖于一些非常人性化的过程。但是假设我们的代码都是打包的、容器化的和版本控制的;我们的工作流程已经全部自动化;所有流程都有技术和非技术文档;并且没有重大的资源短缺或有问题的集成。换句话说,我们已经实现了技术生产化。我们还没完。
我认为,生产化需要所有必要的步骤来确保使用你的产品的人能够从中获得最大的利益。大多数公司都入不敷出:他们只获得了可用技术总价值的一小部分,因为他们没有使用他们拥有的所有东西——事实上,他们往往不知道自己一开始就拥有这些东西。
机器学习模型通常是不透明的——在许多情况下,即使是建立和训练模型的人也很难理解为什么特定的结果会变成这样。此外,数据科学经常被用来让计算机做出人类以前做出的决定。在这种情况下,信任成为一个主要问题是很自然的。
在监督学习的情况下,模型是根据基本事实数据集训练的,有多种度量标准可以告诉您模型的表现如何-预测的平均偏差有多远,或者有多少百分比的记录被错误分类,等等。然而,对于数据科学的非技术消费者来说,这些指标只是更多的数字——它们没有多大意义。通常帮助消费者信任模型的是讲述模型如何工作的能力。这个故事的一部分——解释模型一般如何工作的部分——在非技术文档中讲述。但故事的另一部分讲述了该模型在应用它的特定用例中获得的具体结果。
我倾向于将信任优先级分为三类:解释、可视化和伦理。
解读
讲述模型故事的一个简单但通常无效的方法是显示模型系数(在简单线性模型如逻辑回归的情况下)或重要性分数(在更复杂的模型如随机森林的情况下)。这些数字从技术上允许用户理解模型的哪些部分是重要的,但它确实回避了一个问题——我们为什么要相信模型选择了正确的重要特征?记住,信任是最关键的问题。如果我们没有给用户一个信任模型的理由,我们就没有解释它。
我以前写过,在我目前的工作中,我们如何使用移动定位信号,以及在其他用途中,我们如何将这些信号映射到地块上。我们需要确定设备对包裹的访问是否表明该包裹是设备所有者的工作场所。我不会深入讨论我们开发的算法的细节——只要说它产生了 0(肯定不是工作地点)到 100(肯定是工作地点)之间的分数就足够了。如果我们只是把高于 0.5 的都归类为“工作”,低于 0.5 的都归类为“不工作”,用户就不会充分利用产品。一些客户想要数量,并不认为假阳性的代价很高,所以 50%的截止值太严格了。与此同时,这些客户不希望因为瞄准明显不是工作场所的地点而浪费金钱。此外,可能还有一个更基本的问题:一个地块有 50%的概率是工作地点,这到底意味着什么?那实际上看起来像什么?
这里的热图显示了单个设备在长达一个月的时间内倾向于访问四个不同的包裹:
我们给每个关系的分数都在每个图的上方(大而长的数字只是包裹的唯一标识符)。对于每个图形,每一列是一周中的一天,从星期一到星期天;每行代表一天中的一个小时。你可以很容易地看到,91 分非常明显是一个工作场所——他们主要在周一到周五,从早上 9 点到晚上 6 点。另一方面,3 分显然不是工作场所——用户只在晚上和周末在那里。54 分算是“正常”。访问模式主要是在正确的日子和时间,但覆盖面有点参差不齐。当我们降到 24 分的时候,这个图案看起来充其量是随机的,最差的看起来有点像住宅。
这些解释指南为客户提供了正确使用工具所需的知识,同时也让他们有信心感觉到他们正在正确使用工具。这两者都是工具被采用的必要条件。
可视化和 UX
通常,最好的解释是顾客自己发现的。一个好的可视化——理想情况下,是交互式的——允许用户与模型进行对话。换句话说,在某种程度上,它允许模型讲述自己的故事。这并不意味着视觉效果必须在美学上非常专业。事实上,我见过的一些最漂亮的可视化效果几乎没有信息价值。当我们谈论建立信任时,一个好的可视化可以引导用户完成数据驱动的决策过程。如果用户能够经历从没有准备好决定到有决定的过程,他们会更信任结果,因为大多数人对自己的判断有一种固有的信任。
我曾在一家资产管理初创公司工作过一段时间,我们试图为新兴经济体的潜在投资者提供建议。我们有许多不同国家的历史产品类别消费数据。我们建立了一个模型,预测未来五年每个国家每个产品类别的消费量。这个想法是,通过预测未来(当然,考虑到预测中包含的所有不确定性),我们的客户可以决定他们想在哪里投资。
但我们客户的突出问题不是“五年后,中国的人均巧克力支出会达到某个水平吗?”它甚至不是“五年后支出会有一定的增长吗?”这是“如果我现在投资,我能期望支出的增长是快速和持久的良好结合吗?”如果一个市场将在五年内呈指数增长,然后突然暴跌,这可能不是一个好的投资。一个几乎没有增长的市场显然是一个糟糕的投资。为了帮助我们的客户做出这些决定,我创建了一个简单的交互式可视化,我称之为融合图:
每个国家都有一个导火索。导火索的细枝末节是将五年前的人均支出与当前支出联系起来——这是这个国家在五年内走过的路。换句话说,是保险丝已经烧断的部分。保险丝最粗的部分是仍在燃烧的部分——当前支出与五年后的预期支出之间的距离。好的投资是那些保险丝烧得相对较少的投资。
这改变了我们对投资机会的看法。有些市场的支出大幅增长,但我们预计这不会持续下去。还有一些地方的支出相对较低且较慢,但我们预计支出会加快。可视化使客户能够进入模型并探索结果。他们不需要模型如何工作的明确解释,因为他们可以自己直观地发现这些东西。
良好的可视化往往需要更多的定制,而不仅仅是选择一种特定的固定模式。可视化应该像流程的其他部分一样被设计。
道德规范
伦理通常被视为一套价值观或原则。我说的不是这个。可视化和解释度量的目的是在用户知道他们应该不信任的模型方面建立信任:“模型说我应该把钱花在 x 上,我为什么要相信呢?”或者“模型说 Y 是对我的操作最重要的影响?我应该相信什么?”在生产化的背景下,伦理指的是你建立的工具,帮助用户看到模型中他们不知道质疑,但应该质疑的部分。
彭博对亚马逊提供的当天送达服务进行了一项调查,调查显示,更贫穷、更少数民族聚居的邮政编码经常被排除在外。看起来,该算法建议在亚马逊已经拥有大量 Prime 订户的地方实现当天送达,这些订户在较贫困地区的数量往往较少:
Source: https://www.bloomberg.com/graphics/2016-amazon-same-day/
一个完全生产化的系统有许多自动化和模块化的部分。这使得引入具有非预期的二阶或三阶后果的系统变化变得非常容易。负责任的生产需要道德保障,从长远来看,这既保护了系统的完整性,也保护了受系统影响者的福祉。
合乎道德的增长是明智的增长。没有道德保障的系统面临信任灾难性失败的风险。如果你有一个适当的系统来标记和有意义地解决出现的道德问题,那么当一个重大的道德问题真的发生时,你已经在你的用户中有了信任和善意的基线水平。然而,如果道德失败在最终暴露在你面前之前不被发现,那就很难(通常也很昂贵)从中恢复过来。
《华盛顿邮报》上一篇由餐馆老板写的文章很好地说明了道德如何融入生产过程。员工使用一个颜色系统将令人不舒服的客户行为分为黄色(不好的氛围)、橙色(冒犯的暗示)或红色(公开的骚扰或重复的橙色事件)。一名员工所要做的就是报告颜色——“我在五号桌有一个橘子”——经理就采取了行动,没有问任何问题。红灯导致顾客被要求离开。一个橘子让经理占了桌子。黄色表示如果员工愿意,经理会接手。
算法开发的地方道德法规并不比上面简单的工作场所例子更复杂。如果员工对分析产品的含义感到不舒服,如果愿意,他或她应该被调到另一个项目(同等报酬和声望),并且应该有一个团队对该问题进行审查。如果员工可以指出具体的道德问题,他或她应该被转移到另一个项目,并需要团队审查。如果员工有特别强烈的顾虑,应暂停项目,等待审核。是的,建立和遵守这种制度是不方便的。这比诉讼或媒体惨败要方便得多。即使从冷酷无情的商业角度来看,道德也是明智风险管理的重要组成部分。
信任是必须的,而不是美好的
在本系列的前几节中,我重点关注了文档、自动化、集成和其他或多或少的技术方法,以确保数据科学在部署它的任何企业或组织中产生有意义的影响。世界上所有的先进技术都无法拯救一个在信任赤字下运行的系统。数据科学的存在是为了做人类历史上已经做过的事情,以便人类可以花时间做其他事情。如果人类不信任这种能力来完成工作——完成他们的工作——那么他们不会让这种能力发挥作用。他们会想办法忽视或破坏它。这将导致系统失败,而且失败的代价比我们从劣质的技术实现中看到的要大得多。
最终,数据科学中的“数据”是人类的占位符,包括生成数据的人和利用数据的人。如果数据科学不是以与人合作的方式构建的,它就不会很好或持久。伙伴关系需要信任。
面向初创企业的数据科学项目流程
原文:https://towardsdatascience.com/data-science-project-flow-for-startups-282a93d4508d?source=collection_archive---------2-----------------------
数据科学家对我们流程的看法
最近,我正在咨询的一家初创公司( BigPanda )要求我就数据科学项目的结构和流程发表意见,这让我思考是什么让它们独一无二。经理和创业公司的不同团队可能会发现数据科学项目和软件开发之间的差异,这种差异既不直观又令人困惑。如果没有明确说明和解释,这些基本差异可能会导致数据科学家和她的同事之间的误解和冲突。
分别来说,来自学术界(或高度研究导向的行业研究小组)的研究人员在进入初创公司或较小的公司时可能会有自己的挑战。他们可能会发现将新类型的输入(如产品和业务需求、更严格的基础架构和计算约束以及客户反馈)融入到他们的研发流程中很有挑战性。
这篇文章的目的是展示我和我的同事们在近几年的工作过程中发现的有特色的项目流程。希望这可以帮助数据科学家和与他们一起工作的人以反映他们独特性的方式构建数据科学项目。这篇文章还由的第二篇博文补充,这篇博文致力于同行评审流程,这是这个流程的一部分。
该流程是在小型初创公司的基础上构建的,其中一个小型数据科学家团队(通常是一到四个)每次由一个人领导运行中短期项目。更大的团队或那些机器学习优先的高科技初创公司可能仍然会发现这是一个有用的结构,但在许多情况下,那里的流程更长,结构也不同。
Figure 1: Data Science Project Flow for Startups
我将这个过程分为三个并行的方面:产品、数据科学和数据工程。在许多情况下(包括我工作过的大多数地方),可能没有数据工程师来履行这些职责。在这种情况下,数据科学家通常负责与开发人员合作,在这些方面提供帮助。或者,数据科学家可能会做这些准备,如果他们碰巧是所有神兽中最稀有的:全栈数据科学家! ✨🦄✨.因此,无论何时提到、,您都可以用数据科学家替换数据工程师,这取决于您的环境。
在时间轴上,我将这个过程分为四个不同的阶段:
- 辖域
- 研究
- (模型)开发
- 部署
我会试着按顺序向你介绍每一个。
1.范围界定阶段
定义数据科学项目的范围比任何其他类型的项目都更重要。
1.1.产品需求
一个项目应该总是从产品需求开始(即使最初的想法是技术性的或理论性的),这种需求在某种程度上被产品/业务/客户成功人士所确认。产品人员应该知道这个功能应该(大致)如何结束,现有客户或新客户是否愿意为它付费(或者它将防止流失/推动订阅/推动其他产品的销售/等等)。).
产品需求不是一个完整的项目定义,而是应该作为一个问题或挑战来陈述;例如“我们的客户需要一种了解他们如何花费预算的方式”或“我们无法让我们的老年用户继续服药;这增加了客户流失率"或“客户会为一个还能预测他们经营的机场高峰时间的产品支付更多的钱”。
1.2.初始解决方案构思
在这里,数据科学家与产品负责人、数据工程师和任何其他利益相关者一起,为可能的解决方案提出不同的草图。这意味着一般方法(例如,无监督聚类与基于提升树的分类与概率推理)和要使用的数据(例如,我们数据库中的特定表格,或者我们尚未监控或保存的特定用户行为,或者外部数据源)。
这通常还涉及某种程度的数据探索。你不能真正深入这里,但任何有前途的“低挂水果”可以帮助指导构思。
数据科学家应该领导这一过程,并且通常负责提供大多数解决方案想法,但是我强烈建议您使用所有参与解决方案构思过程的人;我有幸从后端开发人员、首席技术官或产品负责人那里获得了项目的最佳解决方案。不要假设不同的、更少理论导向的背景会使人们不参与这个阶段;额外的想法和观点总是有价值的。
1.3.数据准备和可访问性
团队现在应该对有望用于探索可能的解决方案的数据有一个很好的想法(或者至少是第一个这样的数据集或数据源)。因此,提供数据访问并为探索和使用做好准备的进程应该已经开始,与下一阶段并行。
这有时可能需要将大型数据集从生产数据库转储到它们的暂存/探索副本中,或者转储到较冷的存储中(例如,对象存储),如果在研究阶段时间可用性并不重要的话。相反,这可能意味着将大型数据转储从非常冷的存储中拉回表或文档形式,以实现快速查询和复杂计算。无论是哪种情况,这个阶段都是研究阶段开始所必需的,并且经常会比预期花费更多的时间,所以这是启动它的正确时间。
1.4.范围和关键绩效指标
这个阶段是关于共同决定项目的范围和 KPI。
KPI 应该首先用产品术语来定义,但要比以前详细得多;例如,对于上述三种产品需求,它们可能会变成“客户现在可以使用带有每个类别的 CTR 统计和预测的仪表板”,或者“65 岁以上用户错过的服药天数将在接下来的两个季度中减少至少 10%”,或者“客户将收到其机场高峰时间的每周预测,粒度至少为一小时,近似值至少为 50%”。
这些 KPI 应该被转化为可测量的模型度量。幸运的话,这些将是非常硬的指标,例如“对于任何运行至少一周的广告,以及任何具有两个月以上历史数据的客户,在至少 Y%的情况下,预测广告的预期点击率至少接近 X %”。然而,在某些情况下,必须使用更软的指标,例如“与原始查询相比,使用生成的扩展查询进行主题探索所需的时间将会缩短,和/或结果质量将会提高”。当模型旨在帮助一些复杂的人类功能时,尤其如此。
从技术上来说,即使这些指标也可以非常严格地定义(在学术研究中,它们通常是这样),但是根据资源和时间的限制,我们可能会使用人类的反馈来近似地解决它们。在这种情况下,每个反馈迭代可能会花费更长的时间,因此我们通常会试图找到额外的硬指标来指导我们完成大多数即将到来的研究迭代,代价更高的反馈仅在每几个迭代或重大更改时引发一次。
最后,范围在这里特别重要,因为研究项目往往会拖延,并且随着研究过程中新的可能性的出现,或者当一种经过检验的方法只能部分满足需求时,项目的规模和范围会自然扩大。
范围限制 1: 我发现明确限制范围更有成效;例如,如果您已经决定了一个基于 Multi-Armed Bandit 的模型是最有前途的开始方法,那么您可以将项目范围定义为一个两三周的模型开发迭代,部署模型而不考虑它的准确性(例如,只要它超过 60%)。然后,如果准确性的提高是有价值的(在某些情况下,它可能不那么有价值),开发第二个模型可能被认为是一个单独的项目。
范围限制 2: 范围限制的另一个变化是使用增加的复杂度;例如,第一个项目可能旨在部署一个模型,该模型只需要为您自己的客户成功人士提供一个相当大的广告措辞和颜色变化的候选集;第二种可能试图建立一个模型,给出一个更小的建议集,让客户可以看到自己;最后一个项目可能会尝试一个突出单一选项的模型,比它低几级,并为每个变量添加 CTR 预测和人口统计范围。
这已经与软件工程大相径庭,在软件工程中,组件通常是为了增加规模而不是复杂性而迭代的。
然而,度量到产品价值的函数可能是一个阶跃函数,这意味着在某个 X 值下运行的任何模型对客户来说都是无用的;在这些情况下,我们更喜欢迭代,直到那个阈值被抑制。然而,虽然这个 X 在某些情况下可能非常高,但我相信产品/业务人员和数据科学家都倾向于高估这个台阶的高度;可以很容易地说,任何低于 95%准确率的东西都没有价值,都卖不出去。然而,在许多情况下,对产品假设的仔细检查和挑战可能会导致非常有价值的产品在技术上可能不那么苛刻(至少对于产品的第一次迭代)。
1.5.范围和 KPI 批准
最后,产品负责人需要批准定义的范围和 KPI。数据科学家的工作是确保每个人都理解范围的含义——包括什么和优先考虑什么——以及产品 KPI 和更难的指标之间的关系,这些指标将在模型开发期间指导她,包括后者在多大程度上接近前者。明确说明这一点可以防止被开发模型的消费者——产品和业务人员——只在模型开发期间或之后才理解错误的度量被优化。
关于范围界定的一般说明
在许多地方,这一阶段被跳过,数据科学家急于开始挖掘数据,探索关于可能的解决方案的酷论文;根据我的经验,这几乎总是最坏的情况。跳过这一阶段可能会导致花费数周或数月的时间来开发酷模型,最终无法满足真正的需求,或者无法实现一个非常具体的 KPI,而这个 KPI 本来可以通过一些预谋来明确定义。
2.研究阶段
2.1.数据探索
这就是乐趣的开始!在范围界定之后开始这个阶段的主要优点是,我们的探索现在可以由我们已经决定的实际硬 KPI 和模型度量来指导。
一如既往,在探索和开发之间需要找到一个平衡点;即使心中有明确的 KPI,在一定程度上探索一些看似不相关的途径也是有价值的。
到目前为止,数据工程应该已经提供了所需的初始数据集。然而,在这个阶段,经常会发现所研究的数据中的一些缺陷,并且额外的数据源可能会被添加到工作集中。数据工程师应该为此做好准备。
最后,尽管这里与文献和解决方案评审阶段分开,但它们通常是并行进行的,或者交替进行。
2.2.文献与解决方案评论
在这一阶段,学术文献和现有的代码和工具都要接受审查。平衡也很重要;在探索和开发之间,在深入到错综复杂的材料中,在快速提取有用信息和可能的用途之间。
在学术文献的情况下,对形式证明和先前文献等方面的深入程度的选择在很大程度上取决于时间限制和项目的背景:我们是在为公司的核心能力建立一个强大的基础,还是在为一次性问题设计一个解决方案?我们计划在一篇学术论文中发表我们在这个主题上的工作吗?你打算成为团队在这方面的专家吗?
例如,假设一名数据科学家正在着手一个项目,以帮助销售部门更好地预测潜在客户产量或流失量,但她觉得自己对随机过程理论了解不多,而这些问题的许多常见解决方案都是建立在随机过程理论的基础上的。对这种感觉的适当反应可以是非常不同的;如果她在一家算法交易公司工作,她肯定会一头扎进上述理论,甚至可能会上一门关于这个话题的在线课程,因为这与她的工作非常相关;另一方面,如果她在一家专注于肝脏 x 射线扫描中自动肿瘤检测的医疗成像公司工作,我会说她应该迅速找到一个适用的解决方案,然后继续前进。
在代码和实现的情况下,要达到的理解深度取决于技术方面,其中一些可能在过程的后期才被发现,但许多也可以提前预测。
例如,如果生产环境只支持部署 Java 和 Scala 代码以供后端使用,那么解决方案应该以 JVM 语言提供,数据科学家将不得不更深入地研究她在研究阶段发现的基于 Python 的实现,因为将它们推进到模型开发阶段需要将它们翻译成 JVM 语言。
最后,在回顾文献的时候,记住不仅仅是选择的研究方向(或者几个方向)应该呈现给团队的其他成员。相反,在做出选择的同时,应该对该领域和所有被检查的解决方案进行简要回顾,解释每个方向的优缺点以及做出该选择的理由。
2.3.技术有效性检查
对于一个可能的解决方案的建议,数据工程师和任何相关的开发人员需要在数据科学家的帮助下,估计这个解决方案在生产中的形式和复杂性。产品需求以及建议解决方案的结构和特征应该有助于确定足够的数据存储、处理(流与批处理)、扩展能力(水平和垂直)以及成本的粗略估计。
这是在这个阶段执行的一个重要检查,因为一些数据和软件工程可以与模型开发并行开始。此外,从工程角度来看,建议的解决方案可能不够充分或成本过高,在这种情况下,应尽快确定并解决这一问题。当在模型开发开始之前考虑技术问题时,在研究阶段获得的知识可以用来建议可能更适合技术约束的替代解决方案。这也是为什么研究阶段还必须对解决方案前景有所了解,而不仅仅是单一解决方案方向的另一个原因。
2.4.研究综述
这是一个专门针对此阶段的同行评审流程,由一位数据科学家提供。如上所述,这里的主要目标是通过明确地将过程的核心方面置于检查之下,同时还对几个捕获点执行基本的健全性检查,来尽早捕捉代价高昂的错误(即接近失败)。
然而,这里可以陈述两个额外的子目标:首先,提高数据科学家在即将到来的产品/业务评审过程中解释和捍卫其决策的能力。第二,更好地准备向团队的其他成员展示研究阶段的成果,这在大多数数据科学团队/小组中是一种极其常见和重要的做法。
我已经给写了一篇单独的简短博文来介绍这个过程,以及执行这个过程的结构化方法。
2.5.范围和 KPI 验证
同样,产品经理需要批准建议的解决方案(现在用更专业的术语表述)满足范围和定义的 KPI。通常具有容易察觉的产品含义的可能的技术标准是响应时间(及其与计算时间的关系)、数据的新鲜度和有时缓存的中间计算(与查询和批量计算频率有关)、领域特定模型(领域通常是客户,但可以是行业、语言、国家等)的领域适应的难度和成本(包括数据成本)以及解决方案的可组合性(例如,数据和模型结构是否允许容易地将一个国家模式分解为一个区域模式,或者将几个这样的模式组合为一个洲模式),尽管还存在更多
3.发展阶段
3.1.模型开发和实验框架设置
开始模型开发所需的设置数量和复杂性在很大程度上取决于基础设施和数据科学家可用的技术支持数量。在较小的地方,以及还不习惯支持数据科学研究项目的地方,设置可能总结为数据科学家打开一个新的代码存储库并启动本地 Jupyter 笔记本服务器,或者请求一个更强的云机器来运行计算。
在其他情况下,它可能需要为更复杂的功能编写定制代码,例如数据和模型版本化或者实验跟踪和管理。当这种功能由一些外部产品或服务提供时(现在越来越多的产品或服务出现了),一些连接数据源、分配资源和设置定制包的设置可能会随之而来。
3.2.模型开发
有了所需的基础设施,实际的模型开发就可以开始了。此处被视为要开发的模型的范围因公司而异,并且取决于数据科学家要交付的模型和要在生产中部署的服务或功能之间的关系和划分。这种划分的各种类型的方法也许可以通过考虑一个范围而得到某种程度的把握。
在光谱的一端,一切都是模型:从数据聚合和预处理,通过模型训练(可能定期),模型部署,服务(可能有伸缩性)和持续监控。另一端是模型类型和超参数的选择,通常还有高级数据预处理和特征生成,被认为是模型的。
一家公司在光谱上的位置取决于许多因素:数据科学家更喜欢的研究语言;相关库和开源可用性;公司支持的生产语言;存在专门致力于数据科学相关代码的数据工程师和开发人员;以及数据科学家的技术能力和工作方法。
如果有一个非常全面的数据科学家,加上来自专门的数据工程师和开发人员的足够支持,或者,有足够的现有基础设施专门用于数据湖和聚合、模型服务、缩放和监控(可能还有版本控制)的操作和自动化,那么可以对模型进行更广泛的定义,并且可以在模型开发的大部分迭代中使用端到端解决方案。
这通常意味着首先构建完整的管道,从数据源一直到可扩展的服务模型,为数据预处理、特征生成和模型本身提供简单的占位符。然后对数据科学部分进行迭代,同时将范围限制在现有基础设施上可用和可部署的内容。
这种端到端的方法可能会花费更多的时间来设置,并且模型类型和参数的每次迭代会花费更长的时间来测试,但是它可以节省以后在产品化阶段所花费的时间。
我个人很喜欢它,但是它的实现和维护很复杂,而且并不总是合适的。在这种情况下,管道的开始和结束的一些部分被留给产品化阶段。
3.3.模型试验
在开发模型时,不同版本的模型(以及伴随它的数据处理管道)应该根据预先确定的硬性指标进行连续测试。这提供了对进度的粗略估计,并且还允许数据科学家决定模型何时工作得足够好以保证整体 KPI 检查。请注意,这可能会产生误导,例如,在许多情况下,从 50%到 70%的准确率要比从 70%到 90%的准确率容易得多。
Figure 2: Model failure entails iteration, but an approach failure might send you back to research
当测试表明一个模型不符合标准时,我们通常会调查它和它的输出来指导改进。然而,有时表现的差距非常大,所选研究方向的不同变化都达不到要求——一个方法失败。这可能需要改变研究方向,将项目送回研究阶段。这是数据科学项目最难接受的方面:回溯的真实可能性。
方法失败的另一个可能结果是目标的改变。幸运的话,它可能是产品方面的小问题,但在技术上以更简单的方式重申了目标。
例如,不要试图用一句话概括一篇文章,而是选择文章中最能概括它的句子。
最终可能的结果当然是项目取消;如果数据科学家确信已经探索了所有的研究途径,并且产品经理确信不能围绕现有的性能构建有效的产品,那么可能是时候转移到另一个项目了。不要低估识别一个不可救药的项目的能力和决定结束它的勇气;这是快速失效方法的关键部分。
3.4.模型开发评论
正如在研究综述中,这里的动机是模型开发阶段的错误也可能是昂贵的。因此,目标是相同的:首先,为模型开发阶段提供一个结构化的审查过程,这将通过正式地将它合并到项目流程中来增加同行审查。第二,通过检查准备好的问题和议题列表来降低代价高昂的错误的风险,这些问题和议题是根据必须解决它们的其他数据科学家的宝贵经验来检查的。
我已经给写了一篇单独的简短博文来介绍这个过程,以及执行这个过程的结构化方法。
3.5.KPI 检查
如果预先确定的硬性指标是唯一的 KPI,并且准确地捕获了所有的产品需求,那么这个阶段可能更多的是一种形式,当最终的模型被呈现并且开发阶段被宣布结束时。通常情况不是这样。
在更常见的情况下,硬性指标是实际产品需求的一个很好的近似,但不是完美的。因此,这个阶段是一个机会,可以确保无法自动检查的更软的指标也得到满足。这是与产品和客户的成功一起完成的。如果您可以直接额外检查客户的实际价值——例如,当与设计合作伙伴一起工作时——那么这是您可以为您的迭代找到的最佳指南。
例如,假设我们正在处理一个复杂的任务,比如从一个巨大的语料库中提取给定查询的相关文档。团队可能已经决定尝试提高结果集的质量,关注返回文档的内容和主题的差异,因为客户认为系统倾向于将非常相似的文档聚集在顶部结果中。
模型开发可能随着结果集中内容变化的一些可测量的度量而进展——给定一组测试查询,每个模型根据它返回的前 20 个文档的变化程度来评分;也许您在一些主题向量空间中测量文档主题之间的总距离,或者仅仅测量独特主题的数量或者重要单词分布的平坦性。
即使当数据科学家选定了一个显著改进这个度量的模型,产品和客户成功人士也应该明确地看一看测试查询的一个重要样本的实际结果;他们可能会发现难以量化但可能解决的问题,例如通过推高一些重复出现的不相关主题,或通过包含类似主题但来自不同来源的结果(例如,新闻文章与推文,它们使用非常不同的语言)来增加结果差异的模型。
当产品人员确信模型回答了项目的既定目标(达到令人满意的程度)时,团队就可以将它产品化了。
4.部署阶段
4.1.解决方案产品化和监控设置
如前所述,这一阶段取决于数据科学研究和公司模型服务的方法,以及几个关键的技术因素。
产品化:在研究语言可以用于生产的情况下,这个阶段可能需要修改模型代码,以可伸缩的方式工作;这个过程的简单或复杂程度取决于对模型语言的分布式计算支持,以及所使用的特定库和定制代码。
当研究语言和生产语言不同时,这可能还涉及到将模型代码包装在生产语言包装器中,将其编译成低级二进制或在生产语言中实现相同的逻辑(或找到这样的实现)。
还需要设置可伸缩的数据接收和处理,在这种情况下(很常见),这不是模型的一部分。这可能意味着,例如,将在单核上运行的 Python 函数转换为数据流通过的管道,或者转换为定期运行的批处理作业。在大量数据重用的情况下,有时会建立一个缓存层。
监控:最后,设置一种持续监控模型性能的方式;在极少数情况下,当生产数据的来源是恒定的时,这也许可以安全地跳过,但是我要说,在大多数情况下,您不能确定源数据分布的稳定性。建立这样的性能检查,不仅可以帮助我们发现模型中的问题,这些问题可能是我们在开发和产品化过程中遗漏的,而且更重要的是,模型运行的源数据分布的变化——通常被称为协变量转移——这可能会及时降低一个完美模型的性能。
以为例,我们的产品是一个检测皮肤痕迹并评估是否建议用户去看皮肤医生的应用程序。当一款受欢迎的新手机上市时,其配备的摄像头与我们数据中的摄像头明显不同,我们的数据可能会发生协变量变化。
4.2.解决方案部署
如果一切都设置正确,那么这个阶段可以总结为,有希望地,按一个按钮来部署新模型——以及服务于它的任何代码——到公司的生产环境。
部分部署:但是,为了测试模型的有效性(例如,在减少客户流失或增加每个用户的平均月支出方面),可能会以只有部分用户/客户群接触到模型的方式部署模型。这使得能够直接比较用户群中两个(或更多)组之间对任何可测量 KPI 的影响。
您可能不希望将模型部署到每个人的另一个原因是,如果它是为了满足特定客户或一组客户的需求而开发的,或者如果它是一个高级功能或特定计划的一部分。或者,该模型可能包含一些针对每个用户或客户的个性化元素;这有时可以通过实际拥有考虑客户特征的单一模型来实现,但有时需要为每个客户实际培训和部署不同的模型。
无论是哪种情况,所有这些场景都增加了部署模型的复杂性,并且取决于公司中现有的基础设施(例如,如果您已经向客户的子集部署了一些产品特性),它们可能需要您的后端团队进行大量的额外开发。
当模型部署在终端产品(如用户手机或可穿戴设备)上时,这一阶段甚至会更加复杂,在这种情况下,模型部署可能只会作为下一个应用程序或固件更新部署的一部分。
产生偏差:最后,所有部分部署的情况实际上都是数据科学团队面临的一个紧迫问题,这是因为另一个原因:这自然会将偏差引入模型将开始积累的未来数据中——模型将开始对具有可能独特特征的用户子集的数据进行操作。根据产品和特定的偏差特征,这可能会对模型在野外的性能产生很大影响,并且可能会对基于在此期间积累的数据训练的未来模型产生影响。
例如,在设备更新的情况下,较早更新其应用程序/固件的用户往往属于某些人口统计数据(更年轻、更懂技术、更高收入等)。).
4.3.KPI 检查
我在这里添加了另一个 KPI 检查,因为我认为在部署和实际使用之后,在解决方案的性能和对产品和客户需求的成功响应得到验证之前,解决方案不能被标记为已交付。
这可能意味着在部署后的几周内筛选并分析结果数据。然而,当涉及实际客户时,这也必须涉及产品或客户成功人士,他们与客户坐在一起,试图理解模型对他们使用产品的实际影响。
4.4.交付的解决方案
用户和客户都很高兴。产品人员已经设法围绕该模型构建或修改了他们想要的产品。我们完了。举杯祝酒,欢呼喝彩,一切安好。
解决方案已经交付,我认为项目已经完成。然而,它确实以一种特定的方式继续生存——维护。
维护
为模型设置了健康检查和连续的性能监控之后,这些可以触发项目工作的短时间爆发。
当一些事情看起来可疑时,我们通常从查看数据开始(例如,对于协变量变化),并且可能模拟模型对我们怀疑导致问题的各种情况的响应。这些检查的结果可以让我们进入几个小时的小代码更改、模型的重新训练和完整的模型开发迭代(如本文开头的图所示),严重的情况下有时需要回到研究阶段尝试完全不同的方向。
最后的话
这是对数据科学项目流程的建议。它也非常具体,范围有限——为了简单和可见性——并且显然不能涵盖实践中存在的这个流程的许多变体。也代表了我的经历。
出于所有这些原因,我希望听到您在运行、领导或管理数据科学项目时的反馈、见解和经验,无论这些项目的规模有多大,也无论您所在的数据科学团队有多大。
关于这个话题的另一个精彩观点,我推荐阅读我的朋友 Ori 关于数据科学敏捷开发的文章。还要感谢因巴尔·纳尔,希尔·梅厄·拉多尔(@数据夫人)和@塞弗。科恩对他们的反馈。
Shay 是一名数据科学顾问。他还为一些社区项目工作。
数据科学招聘——为什么你可能做错了
原文:https://towardsdatascience.com/data-science-recruitment-why-you-may-be-doing-it-wrong-b8e9c7b6dae5?source=collection_archive---------10-----------------------
招聘过程,尤其是对初创公司来说,并不容易。以下内容可能对你下一步的招聘过程有所启发。
Pão de Açúcar overlooking Corcovado during a sunset, Ori Cohen.
最近两年半,在我现在的职位之前,我找工作的时候,已经面试了 50 多家公司。从小公司到大公司。我已经设法经历了广泛的面试类型,从电话交谈到家庭作业。从那以后,我有幸坐在另一把椅子上,面试了大约 20 名数据科学(DS)职位的候选人。
作为一名招聘人员,我不能强调在面试候选人时使用正确的工具有多重要。一些例子浮现在脑海中,当你的主要焦点是机器学习(ML)和深度学习(DL)时,你不应该问本质的统计问题,反之亦然;当你希望你的候选人在笔记本或 IDE 中工作时,你不应该让他们在一张纸上“编程”;当你面试管理职位时,你不应该让潜在的经理做概率谜语。
我想传达的是,一种尺寸并不适合所有人!人们来自不同的学术背景和经历。为各种各样的侧写做好准备很重要。否则,通过使用糟糕的工具,你会忽略真正优秀的候选人。以下是我和几个同事亲身经历过的常见错误。
问错误的问题
- 问类似谷歌的问题。这些很少测试你在一个有才华的员工身上寻找的技能。
- 问概率谜语。这些虽然经常被问到,但对于一年级计算机科学或统计学学生来说是极好的测试。然而,依我看,他们只会测试一个人是否真的擅长猜谜语。
- 同样,当你面前的候选人距离他的第一个学位还有 10 年时,问一年级的统计学问题。例外的情况是,你面试的是一个面向统计的职位。
- 询问任何候选人的高中历史或成绩。虽然这对我们大多数人来说是有意义的。出现这种情况我还是很惊讶的:)。在我看来,当你积累了经验或获得了更高的学位时,这就无关紧要了。
- 询问博士们的分数。这真的是一个基本的问题,告诉候选人你对学术的理解。衡量博士的标准是他们的出版物,而不是分数。
- 询问学者关于他们在 sprint 中工作和提高效率的能力— 阅读行业中的敏捷 —人们可以适应,sprint 不是为 DS 和研究而优化的。在我看来,正确的问题应该是“给定一个期限,同时承认研究不能像软件开发一样被框定,你认为你能完成一项任务吗?”。为了让你放松,学者们真的很擅长截止日期,提交作业,完成研究,撰写和审查论文,拨款,组织会议,编辑期刊,并且通常知道如何成功到达终点线。
- 除非你是他们的经理,否则不要在面试中问你的候选人对薪水的期望,让人力资源部去问。
使用错误的工具
我不相信下面的做法还在发生,在面试过程中没有理由使用错误的工具,尤其是当它无助于你试图实现的目标时。
- 要求考生使用纸笔对一道编程题进行编程和调试。想象一下你是一个厨师,你会面试一个人给你做没有盐和胡椒的菜吗?这种糟糕的做法迫使人们在他们不习惯的环境中编码,剥夺了他们的编程工具,如自动完成和语法纠正,以及他们手指自动点击宝贵代码行的熟悉感,而无需思考它。通过设置不相关的限制,与他们将要做的实际工作不相关,以及使用错误的工具来测试他们,你正在伤害你发现人才的机会。
- 在没有事先通知的情况下,要求候选人在面试期间使用外国环境编写代码,例如,使用 Raspberry PI 的被黑客攻击的 Linux 发行版。这些黑客在速度上很慢,并且缺乏通用的应用程序,这将影响你的候选人的表现。允许你的候选人在家里解决问题,使用他们熟悉的环境和工具。
- 要求候选人处理未经适当测试的合成数据,这些数据可能存在噪音和方法上的缺陷。请给你的候选人真实的数据,如果数据是一个秘密,找到另一种解决方案或匿名。
- 需要 3 次以上的面试吗?除非你是一家大公司,或者你面试的职位资历很高,否则你不需要和你的候选人会面超过 3 次。如果你在 3 次会议后还不能做出决定,你的流程可能有缺陷,或者与其他候选人相比,这个候选人没有给你留下足够的印象。
错误的观念
当你开始一个新的招聘过程时,专注于一种特质而忽略了其他一系列特质是值得注意的。看到某人的潜力,而不是把他作为你长长的愿望清单上的一张清单。
- 忽视有才华的专业人士,因为他们没有理学硕士或博士学位。外面有一些真正有才华的人,不要让自己被高等学位蒙蔽了双眼。
- 将学者视为没有经验的专业人士——他们磨练在初创行业、写作、长期研究、领导和管理一个项目中没有得到很好实践的技能。对某些工具了如指掌,知道如何专攻某个领域,等等。
- 让你的候选人完成一项任务,坐在他们旁边,记录他们的一举一动。
- 如果一个人只精通 R 语言,那么他就不能过渡到 Python,反之亦然——Python 是最简单的语言之一,过渡可以在几周内完成。显然,如果您的痛点是生产就绪代码,那么您的优先级就不同了。
- 当一个候选人给你一个惊喜,为你正在讨论的问题提供了一个新颖的解决方案,不要写在纸上,不要拍下来,这是对他们的时间和努力的不尊重,可能会影响公司的声誉,他们不是免费来咨询你的公司的。
- 向下看候选人以前的经历,他们以前工作过的领域或研究领域。
要记住的要点
- 当候选人教给你一两件你在面试过程中不知道的事情时,你头脑中的一个灯泡应该在闪烁。
- 强大的理论背景真的很重要。可以应用于其他领域的相关经验,即不知道领域,理解传统的 ML 和 DL 中的新概念。
- 一个强有力的候选人应该理解可能影响产品需求的基本概念,例如,类别不平衡、精确召回、 KPI、目标等。
- 性格方面,他们很棒,可以和你的团队相匹配。
- 理解学术背景侧重于不同的事情。例如,计算机科学的人通常更擅长算法和编程相关的一切,数学家更擅长核心数学,统计学家有更深的统计背景,等等。因此,尝试为不同的背景创建不同的测试。
- 对于中小型创业公司来说,拥有有写作经验的学者很重要。他们可以帮助你写投资建议,写论文,写专利,以筹集资金,以及许多其他原因。
- 尝试给你的候选人反馈,无论是应要求还是在过程结束时。试着把重点放在可以帮助他们在下次面试中提高的反馈点上。
以下是我采用的方法,我并不暗示这是 ML 或 DL 面试过程的最佳方法。然而,这些对我来说很有效,可以为你招募新的科学家或从业者提供一个基准。
我的过程
在仔细阅读他们的简历并找到谈话的话题后,我们会做以下事情:
- 请人力资源部安排一次与他们的电话交谈。如果人力资源部需要更多的信息,指导他们问什么以及如何解释答案,给他们时间去理解术语,这样候选人会觉得他们代表了一家严肃的公司。如果这不可能,直接打电话给他们,从 2 点开始。
- 会议#1: 简短的电话交谈,从理论和实践两方面讲述他们所做的事情,试着问一些关于他们的工作或论文的重要问题,以此来挑战自己和他们。
- 会议#2: 一次个人面试,一次关于他们想谈论的任何项目的深入交谈,使用白板,再次尝试挑战自己。问一些有趣且重要的问题,这些问题可能与公司的领域更相关,或者努力了解知识和经验的深度。例如,“如果分布发生变化,你会怎么做,这些假设适用吗?如果你不能使用这个工具、特征、样本会发生什么,你能想出其他方法吗?如果需要平衡数据会怎样,有哪些方法?等等...
- 给你的候选人发一份详细的、全面的、没有遗漏的作业,重点是技术性的、但以产品为导向的家庭作业。一个你自己完成的。允许他们直接向你提问,这将有助于他们,也有助于你在这个过程中更多地了解他们。就个人而言,我宁愿跳过这一阶段,也不愿让候选人花费大量时间来解决问题。然而,我找不到合适的替代者,除了事先认识那个人或者和他们一起工作。这个测试帮助我了解他们在做什么和为什么做,并让我专注于正确的候选人。
- 第三次会议:邀请最优秀的候选人来谈谈他们的工作。发表演讲是一项经常被忽视的技能,它展示了你的候选人如何交流他的工作并回答各种问题,关于研究选择、产品选择以及与房间里的其他人一起做。这项技能很重要,因为它只能通过大量的练习获得,不可能在几周内学会,没有捷径可走。
希望我已经帮助你把精力集中在下一次招聘的正确选择上。如果你有任何反馈,请在下面的评论中告诉我。非常感谢阅读。
我要感谢我的同事们——你们知道你们是谁——分享你们的经验。
Ori Cohen 博士拥有计算机科学博士学位,专注于机器学习。他领导着 Zencity.io 的研究团队,试图积极影响市民的生活。
数据科学需要耐心
原文:https://towardsdatascience.com/data-science-requires-patience-a9002249a6a7?source=collection_archive---------40-----------------------
没有免费的好东西
数据科学是一个非常值得追求的职业,但是没有免费的东西。你需要付出代价,投入数月或数年的工作,才能看到最初的成果。这不是一条容易的路,而是一条非常令人满意的路。因此,我将重点关注你应该开始磨练的技能,以及为了成功你需要什么。
Data Science Skills for 2020
数据科学的技能
我需要先说一句:数据科学需要你学习统计学和线性代数。如果你在开始进入机器学习算法和做更高级的材料之前这样做,会更好。没有统计数据,你会经常不知所措,为什么某些方法不起作用,你将无法正确地解释结果,并向好的方向纠正它们。
你会加倍努力工作,渴望一些不必要的东西。
你需要的另一项技能是用 Python 编码。您需要轻松使用 Python,因为您经常需要针对给定的问题构建解决方案的原型。如果你能很快做到这一点,你就可以开始迭代,并得到一个更好的解决方案。如果这部分拖慢了你的速度,你每次都需要考虑如何将你的解决方案转化为可工作的代码,那么你最终会因为迷失在不重要的技术细节中而忘记你正在试图解决的问题。
不要走这条路——最好花几个月的时间来完善你的统计学和 Python 技能,而不是当你需要解决数据科学问题时,不得不一遍又一遍地回到相同的材料。
最后,如果你习惯了 Python 和统计学,你应该开始提高你解决问题的技巧。这是一个永无止境的故事。毕竟数据科学就是解决问题。你需要能够
- 精确定位关键数据输入,
- 询问关于数据集的正确问题
- 想出新的算法来处理数据
- 从数据中提取信息并在以后使用
- 从小处着手构建复杂的解决方案
练习解决问题的最好方法是…通过解决问题。这是一项实用技能。你可以开始为小问题编写代码和实现算法,继续 Kaggle 并为自己找到一个数据集/问题。这一切都是为了发现新的问题并试图解决它们。
解决问题是一种心态,经过足够的练习,这种心态会变成一种技能。
交流和可视化
从非技术角度来看,作为一名数据科学家,您需要培养两项主要技能。
首先,你需要将你的结果可视化。那可能是
- 图表
- 热图
- 酒吧
- 一份报告
或者其他很多东西。重要的是,无论你选择哪种形式,你都需要清楚自己在展示什么——无论是对你还是对别人。可视化您的结果对理解数据和您每次试图解决的问题非常有帮助。尤其是当你面对一个新的大型数据集时,你不知道会发生什么。
然后,可视化可以极大地帮助向其他人展示为什么您的结果很重要以及如何使用它们,无论您是将它们展示给其他开发人员、数据科学家还是商业人士。视觉数据很容易掌握,因为你不必想象数字——你马上就能看到它们。
其次,以清晰、诚实的方式交流非常重要。如果你能就你的结果做一个简短的发言,同时用图表展示出来,你就做得很好,让其他人可以和你互动,学习和回应。当然,你不需要有任何公开演讲的技巧,我说的是几个人的小团队,你将向他们展示结果,但你能从你的数据中编出一个连贯的故事真的很重要。这对大公司、小公司和自由职业的数据科学家都有帮助。人们通过看比通过读或听更能理解。
基本数据科学技能
总而言之,作为一名数据科学家,您应该具备的最基本的数据科学技能是
技术技能:
- 统计和线性代数知识
- 精通 Python
- 问题解决
软技能:
- 形象化
- 沟通
如果你掌握了这些,你将成为一名了不起的数据科学家。
不仅如此,数据科学将成为你可能选择的最佳职业道路。
如果你想了解更多关于成为数据科学家的信息,可以看看我的其他文章:
- 2020 年你应该读的数据科学书籍
- 成为数据科学家的完整指南
- 成为数据科学家的实用指南
数据科学角色:一个分类问题
原文:https://towardsdatascience.com/data-science-roles-a-classification-problem-ebe6fae10169?source=collection_archive---------18-----------------------
从业者和思想领袖的观点
Photo by Nathan Dumlao on Unsplash
纵观数据科学领域,很明显这个领域不是一个单一的学科。在早先的帖子中,我写道:
“…数据科学——也是一门艺术——正在技术、人类好奇心和特定领域知识的交汇处发展…”
同样,职位头衔“数据科学家”也不是一个单一的角色。它本质上是一个包罗万象的术语,包含了广泛的知识体系以及复杂的技能和责任组合。在他列出的 30 个数据科学术语解释 中,亚历山大·埃金斯引用了美国第一任首席数据科学家 DJ·帕蒂尔的话:
“数据科学家是一种独特的技能组合,既能开启数据的洞察力,又能通过数据讲述精彩的故事。”
这篇文章将介绍一些团队尝试对各种数据科学角色进行分类的方法。它将关注两个拥有成熟数据科学项目的大公司如何组织职称,还将从一个较小组织的数据科学家的角度介绍一些基本的非技术技能。它将考虑行业从业者和思想领袖眼中的数据科学职业轨迹。最后,它将为获得一些数据科学“邻近”技能提供建议,以便在这个快速发展的行业中增加价值并保持相关性。
爱彼迎(美国短租平台)
截至 2018 年,Airbnb 雇用了 126 名数据科学家,而 2010 年只有一名。
Image per Elena Grewal, Ph.D.
Airbnb 数据科学主管 Elena Grewal 博士在她的 2018 LinkedIn 帖子 中描述了公司内部的快速增长(以及行业内标准术语的缺乏)如何导致了一个转折点:
在给定的公司中,这种多样性的负面影响是它可能会导致组织混乱和人员流失,因为合作伙伴团队不知道从数据科学家那里可以期待什么,而数据科学家自己可能也不清楚他们的角色。”
为了缓解这一问题,Airbnb 团队制定了战略,有意创造符合业务和人才需求的角色,同时也实现了预期的清晰化。结果是数据科学角色沿着三条轨道重组:
Image per Elena Grewal, Ph.D.
团队中的每一位数据科学家都应该至少在数据科学领域的三个专业领域中的一个领域拥有专业知识:
- 分析 — 仪表盘和可视化、数据探索和分析,通过提出好问题和提出建议来推动业务变革
- 算法 — 机器学习,通过生产数据创造商业价值
- 推论 — 统计学、经济学、社会科学、改善决策和衡量影响
虽然这种程度的数据科学专业化对 Airbnb 这样的“高速增长”公司很有效,但 Grewal 建议较小的公司从更通用的方法开始。
网飞
网飞依靠数据为全球 1.3 亿网飞会员提供个性化体验。据网飞科技博客报道:
每天有超过 1 万亿个事件被写入流接收管道,这些事件被处理并写入 100PB 的云原生数据仓库。每天,我们的用户针对这些数据运行超过 150,000 个作业,涵盖从报告和分析到机器学习和推荐算法的所有内容。
为了支持这项庞大的工作,网飞雇佣了三类数据专业人员:分析师、工程师和科学家:
Image per Netflix Tech Blog
虽然每个类别都有职位,但是角色之间的工具和职责可能会有一些重叠。
Image per Netflix Tech Blog
每个类别的数据专业人员可能会利用以下数据科学领域中至少两个领域的技能:
- 数据探索— ( 发生在项目早期) —查看样本数据、运行查询、统计分析、探索性分析和可视化
- 数据准备 —(迭代任务)— 数据的清理、标准化、转换、反标准化和聚合
- 数据验证 —(周期性任务)— 查看样本数据、运行查询、统计分析、汇总分析和可视化,用于数据探索、数据准备、开发、预部署和后部署
- 生产化 —(发生在项目后期)— 将代码部署到生产中,回填数据集,训练模型,验证数据,以及调度工作流
像网飞这样的大公司可能会提供许多分工明确的数据专业人员。与此同时,数据的庞大数量和复杂性可能要求每个数据科学家除了专业技能之外,还需要一些通用的交叉知识。
较小的组织呢?
Shubh Loans 的首席数据科学家 Oriol Mirosa 在他的文章 为我们其余的人提供数据科学 中,就为什么小公司的数据科学家应该特别关注非技术工作提出了他的观点。虽然承认技术技能是必不可少的,但他认为特定的软技能可能是成功的关键指标。
对于基础设施和明确定义的数据项目尚未完全开发的小型公司的数据科学家,Oriol 提供了以下建议:
- 一直索要数据
- 一直问问题
- 一直问为什么
- 一直求助
- 寻求机会分享你一直以来的发现
做这五件简单的事情所需要的批判性思维、好奇心、创造力和进取心的结合是不可低估的!这种“走来走去”的数据科学方法使数据科学家能够获得领域知识,理解业务数据和问题,并构思更好的业务指标和数据产品。通过与利益相关者密切合作获得的信誉也将使其更容易申请所需的资源,以在未来建立基础设施、数据和模型。
算法之外的数据科学
机器学习工程师的崛起
Emmanuel Ameisen 在他关于 2018AI 趋势的帖子中表示:
“谈到招聘,硅谷各个团队的招聘经理最常抱怨的是,虽然不缺乏能够在数据集上训练模型的人,但他们需要能够构建数据驱动产品的 工程师 。”
虽然数据科学家将执行构建机器学习模型所需的数据争论和统计分析,但他们可能并不总是拥有将原型模型集成到生产环境中所需的技能。这是机器学习工程师的专业知识越来越多地被利用的地方。
Image per Tomasz Dudek
机器学习工程师托马斯·杜德克解释说:
".。。必须有人将所有的“数据科学”和“软件”部分粘在一起。将训练好的模型用于高质量的生产环境。安排批处理作业重新计算 insight 表。实时服务模型并监控其在野外的表现。这正是机器学习工程师大放异彩的领域。”
Image per Tomasz Dudek
数据科学邻近技能
如前一节所述,具有前瞻性思维的数据科学家可能会考虑扩展他们的能力,以包括与机器学习工程师一致的技能。一些受欢迎的技能包括:
- Docker — 用于打包和部署定制应用的容器,包括所有必需的库依赖
- Spark — 面向大规模数据处理的统一分析引擎
- 酸洗 — 为将来存储对象、函数和类的方法
Photo by Reka Biro-Horvath on Unsplash
面向未来的数据科学家角色
在她的文章 中,数据科学不同于现在的 ,实践者和思想领袖维基·博伊基斯提醒我们:
“虽然优化模型、可视化和分析占据了你作为数据科学家的一些时间,但数据科学一直以来都主要是在一个地方获取干净的数据,用于插值。”
对于寻求职业生涯“未来证明”的数据科学家,她推荐了以下三项技能:
- 学习 SQL
- 非常好地学习一门程序语言
- 学习如何在云中工作
Photo by Dallas Reedy on Unsplash
结论
我希望这篇文章提供了一个对数据科学角色进行分类的框架,以及对数据科学工作不断发展的范围的一些见解。Airbnb 数据科学主管 Elena Grewal 博士就围绕标准分类术语的发展形成对话提出了以下思考:
“在数据科学领域,我们越是能够联手建立规范,我们的行业就会成熟得越快,我们作为个体也就越有能力驾驭这个行业。”
奖金!
如需更多视角,请查看 Hugo Bowne-Anderson 根据 35 位数据科学家 对 进行的 2018 年哈佛商业评论采访汇编。
Photo by CoWomen on Unsplash
感谢阅读!
数据科学:自学与大学
原文:https://towardsdatascience.com/data-science-self-taught-vs-college-b5482b68849e?source=collection_archive---------5-----------------------
几年来,数据科学一直是一个热门领域,讨论这个问题毫无意义。作为一名新人,你可能想知道进入这个领域的最佳方式是什么,以及多快能获得一些有价值的知识。
Photo by Avi Richards on Unsplash
在今天的文章中,我想讨论进入任何与技术相关的领域的两种最流行的方法,它们是:
- 通过自学
- 通过获得学位
此外,我还想探索这两种选择对于数据科学工作和前端开发人员工作是否有所不同。
开始之前,我先跟大家分享一点背景。我不是自学成才的数据科学家,我决定走大学路线。但是在报读硕士之前,我自学了编码,一点点 Java 和 Android,一点点 Python 和一般的数据。
因为两者我都尝试过,所以这篇文章应该不会有失偏颇。然而,如果你现在做决定,它应该只基于这篇文章。我强烈鼓励你做进一步的研究,因为有些东西会因人而异,因国而异,因大学而异。
因为我现在在上大学,所以大学的路线将是第一个要走的。事不宜迟,我们开始吧。
大学路线
Photo by Element5 Digital on Unsplash
大多数人都会选择大学这条路,这是有原因的。
如果你像我一样正在考虑注册数据科学硕士学位,这里有 3 个你应该知道答案的大问题:
1.你的国家甚至提供数据科学学位吗?
这是显而易见的,但是数据科学在大多数大学中还没有得到很好的认可和体现。当然,也许你会在普通计算机科学学位上钻研一下机器学习,但无论如何,那都不是数据科学专业。发展中国家可能仍然不提供数据科学学位,所以一定要先核实一下。
2.你准备好投入其中了吗?
在我报读硕士之前,我一直从 Android 跳到 Python 再跳到 Web 开发。我会从一种技术跳到另一种技术,只是因为那天我喜欢它。作为这个愚蠢策略的最终结果,一年后我对任何事情都一无所知。
现在我只致力于数据科学,我可以保证在过去一年左右的时间里,我学到了很多旧体制下 5 到 10 年都无法掌握的东西。这就是承诺一件事的意义。确保你也能这样做。
3.你买得起吗?
这不仅仅是你负担得起的问题,也是你是否愿意负担得起的问题。我的意思是,你可以通过自学在一些小公司找到一份没有任何学位的网页开发者或网页设计师的工作。这不会花你一毛钱(如果你知道如何谷歌),而且你最终还会得到一份高薪的工作。
大学路线的利与弊
上面的每一个问题你都如实回答了吗? 好。你现在应该看得更清楚了。
在这一部分,我想给大家提供我对做一名数据科学大学生的看法。我将与你分享什么是好的,什么是不太好的,希望你能感同身受。让我们先从好的方面开始:
赞成:连接
你会遇到很多了不起的人,他们的知识远远超过你在书上或在线课程中能找到的任何东西。最棒的是——人们在重要的地方认识人。这真的有助于展现你最好的一面,你永远不知道它什么时候会派上用场。
赞成:很酷的项目
这将因大学而异。我所在的学校是以项目为导向的,所以每学期从零开始做几个完整的项目是你能做的最好的事情来增加你的知识。这些项目在难度和使用的技术上各不相同,但是,嘿,你最终交付的是一个完全可行的解决方案。
如果你的大学只提供理论上的介绍,而没有实际应用,我认为不值得花时间和金钱。
教授:向专家学习
我知道,书籍和在线课程覆盖了 99%的内容。但数据科学有时可能很抽象,有人能回答你的困境是一座金矿。我的意思是,是的,你可以用谷歌搜索东西,但是我发现抽象的东西在谷歌搜索后变得更加抽象,因为不知道如何教学和解释的人喜欢使用大词。他们这样做主要是为了听起来聪明,显示他们在该领域的专业知识,而事实恰恰相反。
缺点:可能很贵
学位可能贵也可能不贵,你可能在乎也可能不在乎。因人而异,再讨论下去也没什么意义。
缺点:有点固定的时间表
我喜欢提前学习。如果我知道我们会在大学一周内讨论线性回归,我会在那堂课之前就学会。那堂课的重点是回顾一切,并向教授提问任何我没有 100%弄清楚的问题。
我就是这样,有时候会有问题。例如,我可能坐在教室里无聊死了,因为我对这个话题知道得够多了,我已经准备好继续前进了。但是不,我们坚持时间表。有时候会很糟糕。
自学路线
Photo by David Marcu on Unsplash
虽然这条路线更便宜,但也有一些缺点。例如,当周一没有到期的时候,你更有可能不及格,一般来说,自学需要很多训练。和大学路线一样,我们把它分解成一些利弊。
教授:按照你自己的速度学习
没人告诉你要继续前进。你想做什么就做什么,想怎么做就怎么做。现在当我想起来,这也可能是一个骗局,至少如果你没有很好的组织和纪律。
教授:学习对你来说重要的东西
你对机器学习比较感兴趣,对社交网络分析不太感兴趣?那太好了,多花点时间学习机器学习就好了。大学生必须两者都学,即使他们可能对某些领域不感兴趣。
利:省钱
这个很明显。与其把钱花在学费上,你可以买一两个 GPU,让深度学习任务执行得更快。你将节省的金额会因大学而异,而且可能相当可观。我不认为你应该在教育上省钱,但是,嘿,如果你负担不起,那你就负担不起。
缺点:缺乏结构
如果你是构建学习课程的人,而你不知道什么是重要的,什么是不重要的,这可能不会有好结果。你可以复制大学使用的课程,更快地浏览材料,主要关注你感兴趣的话题。然而,缺乏一些正式的结构会让你觉得没有动力,这就让我想到了下一个骗局。
缺点:容易戒掉
当没有最后期限时,第一次事情变得有点复杂时,很容易放弃。也许你会退出那个项目,或者整个想法。这很简单,因为你不必回答某人。遇到困难时,需要很大的决心才能度过难关。
就业市场
Photo by Marten Bjork on Unsplash
所以你已经通读了这篇文章,最好也通读了其他一些文章。最重要的是,你已经决定了什么对你来说重要,什么不重要。但是就业市场呢?有没有大学学历都能在同一家公司得到同样的工作吗?
简单的回答是不,你不能。让我们再讨论一下。
如果你想为有人力资源部门的大公司工作,而你不认识在那里工作的人,你没有学位就完了。让我们面对现实吧,如果有 100 个人申请这个职位,人力资源部门会立即抛弃你,因为对方有学位。我知道这不公平,但不管你的 GitHub 档案有多棒,那个人力资源部的人就是不在乎。
另一方面,如果你申请一份小公司的工作,最好是没有人力资源部门的,你可能会有很好的机会。如果你的简历很中肯,GitHub 展示了你的编码和思考能力,你很可能会获得面试机会。他们可能会问你为什么不去上大学,所以准备好回答这个问题。
总而言之,如果你没有学位,在小公司找工作会容易得多,因为你的简历不会自动被丢弃。这是你应该努力的方向,至少在你没有工作经验的时候。
数据科学的工作几乎都是拥有硕士学位的人,如果不是博士学位的话。我不认为正规教育水平与你的编码和思考能力完全相关,但不幸的是,大多数大公司都是如此。
在你离开之前
选择你要走的路线绝不是一个容易的决定。我希望这篇文章能帮助你更清楚地看到一些事情,但我要再次强调,你应该自己做更深入的研究。
自学之后,我走上了大学这条路,我发现这条路非常好。我花了一些时间探索感兴趣的领域,看看这是否是我长期想做的事情。一旦课程开始,一切都切换到涡轮模式。我喜欢这样。
感谢您的阅读。如果你有任何问题或顾虑,请不要犹豫,去评论区。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
数据科学简化版第 12 部分:重采样方法
原文:https://towardsdatascience.com/data-science-simplified-part-12-resampling-methods-e029db77fa9c?source=collection_archive---------11-----------------------
概念
机器学习算法有一种从数据中学习模式的方法。该方法是直观的。该模型从给定的数据集中确定潜在的模式。这个过程叫做训练模型。经过训练的模型在另一个它以前没有见过的数据集上进行测试。目标始终是找到最佳模型。努力达到模型在训练集和测试集上表现令人满意的最佳状态。
测试误差是模型根据新观测值进行预测时出现的平均误差。这一新的观察结果是以前的模型所没有的。训练错误率通常与测试错误有很大的不同,并且会极大地低估后者。
随着模型复杂度的上升,训练误差也随之下降。训练误差下降是因为模型的复杂性有助于它学习训练数据中发现的所有变化。这个过程被称为过度拟合。然而,由于测试样本是看不见的数据,过度拟合的模型在测试样本上表现不佳。
促成这种行为的成分是偏差和方差。
偏差定义为预测值与实际值的差距。
方差定义为估计值与其平均值相差的程度。
随着模型变得复杂,会发生以下情况:
- 当拟合度较低时,意味着偏差较高,方差较小。
- 随着模型复杂性的增加,偏差会下降。复杂模型可以适应数据点中的各种行为。
- 然而,方差也会增加,因为这意味着它必须估计越来越多的参数。
偏差-方差权衡是该模型渴望实现的最佳点。
模型训练的过程和它训练的数据一样好。那么,我们如何确保数据中的偏差不会渗透到模型训练中呢?我们如何确保模型足够一般化?
重采样方法用于确保模型足够好,并且能够处理数据中的变化。该模型通过对数据集中发现的各种模式进行训练来实现这一点。本文讨论了这些重采样方法。
验证集方法
验证集方法是一种用于训练和测试的简单抽样方法。数据被分成两部分。第一部分用于训练模型。该模型从训练数据中学习。数据的第二次分割用于测试模型。
验证集方法很简单。然而,它也有自己的缺点。
- 首先,模型基于训练数据学习的内容高度依赖于训练集中包含的观察值。如果训练集中包括异常值观察,则模型将倾向于从可能与实际数据不相关的异常值观察中学习。
- 第二,在训练集中仅包括观察值的子集。排除用于训练的观察值意味着模型将无法学习测试集中数据的细微差别。
一般来说,验证集误差倾向于高估测试误差。
k 倍交叉验证
我们已经看到了验证集方法的挑战。K-fold 交叉验证方法被用来克服这些挑战。这种方法的工作原理如下:
- 数据被分割成称为 fold (k)的东西。典型地,有 5 或 10 个相等的折叠。每个文件夹都有一组随机数据点。
- 在第一次迭代中,在(k-1)个褶皱上训练模型,并在一个遗漏的褶皱上进行测试。
- 重复该过程,直到模型在所有褶皱上被训练和测试。
让我们举一个例子。
- 在这个例子中,我们有一个数据集。这个数据集被分成十等份。
- 对于第一次迭代,使用九个折叠来训练模型,即折叠 2-10。
- 模型在第一次折叠时进行测试,即折叠#1。
- 为迭代 1 记录训练和测试错误。
- 在第二次迭代中,再次使用九个折叠来训练模型。但是,在这种情况下,折叠一与其他八个折叠一起用于训练。培训在第 1、3-10 折进行。
- 该模型在第二次折叠时进行测试,即折叠#2。
- 迭代 2 中记录了训练和测试错误。
- 这个过程一直持续到所有的褶皱都被训练一次,然后在所有的褶皱上对模型进行测试。
基于所有迭代的平均误差来计算模型的整体性能。
- 对于回归模型,所有折叠的平均误差可定义如下:
其中 MSE 是均方误差。
- 对于分类器,所有折叠的平均误差可定义如下:
其中 Err 可以是分类器指标,如 AUC、召回率、精确度等。
正如我们所看到的,k-fold 交叉验证方法消除了验证集方法的许多缺点。它主要做了一项出色的工作,确保偏见不会渗透到模型性能中。它通过对每个褶皱进行训练和测试来优雅地做到这一点。
然而,正如所预料的那样,与验证集方法所采用的简单方法相比,这种方法可能非常耗时。由于交叉验证方法比验证集方法多训练(k-1)倍,因此所消耗的时间是明显的。这个问题可能会更明显,尤其是当训练集很大的时候。
自助抽样
另一种数据抽样方法是使用 bootstrap 抽样方法。Bootstrap 是一种灵活而强大的统计方法,可用于量化与估计量相关的不确定性。引导过程采用以下方法:
- 我们不是从总体中重复获得独立的数据集,而是通过从原始数据集中重复采样观察值并替换来收集不同的数据集。
- 这些引导数据集的每一个都是通过替换采样创建的,并且与我们的原始数据集大小相同。
- 一个观察值可能在 bootstrap 样本中出现不止一次,也可能根本不出现。
让我们看一个例子来更好地理解它。
在上图中,有十个观察值。自举采样的工作方式如下:
- 原始数据集有十个观测值。
- 训练集是与原始数据集大小相同的,即训练是在 10 次观察的基础上完成的。然而,训练集中的观察结果是从原始数据集中重复的。在上面的例子中,对于第一次迭代,从原始数据集重复观测值 2、3、4 和 9。不重复观察#1。
- 一旦模型被训练,它就在看不见的数据上被测试。看不见的数据是那些不在训练数据集中但存在于原始数据集中的观察值。测试数据集是原始数据集——训练数据集。
对于自举样本#2,也重复这三个步骤。对于规定数量的引导样本(通常在 1000 个样本的范围内),该过程继续进行。总体 bootstrap 估计是从每个 bootstrap 样本估计中获得的估计的平均值。
与一般的训练测试分割机制相比,Bootstrap 估计在其估计中具有较低的方差。
自举抽样在实践中是有利的。
如果感兴趣的观测值相对较少,可以使用 bootstrap 采样对数据集中的相同观测值进行重复采样,以进行训练。
结论
本文阐述了三种重采样方法。总的想法是让模型尽可能多地学习。为了让模型尽可能多地学习,应该对基础数据集中的各种数据点进行训练。在实践中,简单验证方法用于快速创建模型。然后通过使用 K 倍交叉验证方法进一步增强。
参考
- 加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼。《统计学习导论:在 r .纽约的应用》: Springer,2013 年。
本文最初发表于 www.datascientia.blog
2020 年的数据科学技能
原文:https://towardsdatascience.com/data-science-skills-for-2020-9e71ff46fbc0?source=collection_archive---------29-----------------------
如何成为一名数据科学家
数据科学令人兴奋、有益且有趣。然而,许多人发现学习过程让人不知所措。我们的工作需要大量深入的技术数据科学领域的知识。
Data Science skills you need to hone in 2020 to progress
沟通和可视化
如果你正在考虑磨练你的数据科学技能,你应该首先考虑沟通。
沟通至关重要。沟通是一项很难学习和精通的技能。
清晰、简洁、有说服力的交流有助于用户理解你想要表达的意思。这也给其他人一个机会来解释他们的观点和提供他们的意见。仔细考虑你的交流方式将有助于观众对你的项目有最好的体验。
鼓励第三方参与,与你的社区建立关系是一项有价值的技能。
接下来是三重奏:
- 数据可视化
- 统计信息可视化
- 数据挖掘技术
在我看来,前两个对于发现潜在的问题更重要,而第三个对于创造伟大的产品是至关重要的。
为了方便开发者,我们也建议想出一个如何使用你的可视化来增强你的产品的主意。通常,它会导致一个新工具的开发,然后可以在过程的每一步使用。
尝试建立有用的仪表板,解释,注释和记录好你的项目!这样,其他人也可以利用他们的利益。
数据科学中的基本概念
鉴于“数据科学”涉及众多一般主题(例如,机器学习、推荐、基础设施、预测分析等。),我们来举几个例子。我将从一个狭窄的角度,主要从利用数据科学的角度来看。
最基本的数据科学概念是:
- 识别正在解决的问题:看一个问题,问什么问题是相关的,我们如何解决它们,是否有技术解决方案?
- 看一个问题,问什么问题是相关的,我们如何解决它们
- 解释问题:他们正在解决什么问题?我们如何衡量影响?
- 他们在解决什么问题?我们如何衡量影响?预测结果:我们期望看到多少结果?我们如何确定哪个结果可能是最积极的?哪种结果更有可能是我们想要的结果?
数据科学方面的技能
接下来可能是最重要的一步——你必须非常了解统计学。数据科学以统计学为基础,然后才是计算机科学。没有掌握概率论和线性代数,你将很难产生有趣的结果。
所以我建议你在深入机器学习这样的高级学科之前,先从统计学开始。
然后是 Python。你真的必须高效快速地编程,才能在比最基础的层次更高的层次上进行数据科学研究。这是因为数据科学是关于测试、处理数据和实验的。
你往往会有新的数据集,你需要能够快速建立一个原型,至少研究你的工作可能走向的可能方向。如果没有很好地学习 Python,你每次都会在简单的实现上损失数百个小时,而不是考虑算法。
最终名单
要求摆在桌面上:
- 有一些数据科学项目的经验(可以上 GitHub,供自己学习!),
- 能够编写安全可靠的代码,
- 与你的团队、客户和其他技术代表保持良好的沟通,
- 提供良好的性格(不要刻薄),
- 诚实直率。
祝你 2020 年一切顺利!
祝你好运!
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
缺失的数据可能是最好的数据
原文:https://towardsdatascience.com/data-science-sometimes-the-absent-data-is-the-best-data-ae2fe8b78db1?source=collection_archive---------26-----------------------
Photo by Sander Weeteling on Unsplash
作为一名数据科学家,你经常会收到一组数据和一个问题。良好的逻辑思维确实有助于梳理出解决方案,所以让我们从一个虚构的滑稽例子开始,让你的脑细胞运转起来。
疯狂猫人住宅
一个房地产开发商想进入多层退休建筑市场。给一点背景,他们解释说,该地区的老人往往有很多猫,老人可能会太热,往往让他们的窗户开着。
通过询问,他们发现竞争对手有大量的法律问题,比如猫从窗户上掉下来会死。这可能会导致坏名声,而且仅仅密封所有的窗户也不是一个解决方案,因为这会降低他们可以收取的租金,因为他们感觉质量较差,而且他们必须安装昂贵的空调来保持居住者凉爽。
他们问你的问题是“我们需要密封多少层楼的窗户,这样我们才能限制掉下来的猫的数量?”
不要这样做,蒂布斯!
Photo by Tucker Good on Unsplash
你得到的额外信息是,他们的盈亏平衡是,猫需要至少 85%的机会幸存下来,才能在经济上保持窗户不密封。他们没有关于身高的生存机会的信息,所以你努力去该地区的兽医那里,统计从瀑布带进来的猫的数量,并计算出存活的比例。
Fictitious data for cat survival rates from falls.
瞧啊。你的答案出现了。所以,现在让我们尝试一个更现实的例子。
让飞机在战争中停留在空中
在第二次世界大战期间,提高飞机(以及飞行员)的生存能力是一个迫切需要的领域。如果你能让你的飞机比你的敌人生存得更好,那么你就有明显的物质优势(随着战争的进行,这是紧张的战争经济的一个大问题),但也意味着你有更大的耐力,因为飞机可以被修理和返回,而不需要等待全新的飞机和潜在的新飞行员。
最简单的解决方案是通过增加整体加固来增加飞机的装甲。然而,这是令人难以置信的不可取的,因为它增加了飞机的重量,使用了更多的资源(包括建筑和燃料),并且总体上意味着它在对抗敌人的轻型(和灵活)飞机时表现不佳,实际上降低了它们的生存能力。
他们提出的问题是“哪里最急需盔甲?”
要做到这一点,你需要任何科学家或数学家的心血,数据!他们对返航的飞机进行了观察,对遭受的损坏进行了分类,并将其覆盖在飞机的图上。
Hypothetical distribution of damage caused by enemy action. Source
我们走吧!你可以清楚地看到装甲需要去哪里。但是当图表缺少一个关键的信息来源时,你能做到吗?
剧情转折!
Photo by Ben White on Unsplash
如果你假设敌人的火力有均等的机会击中飞机的任何部分,那么那些发动机和驾驶舱上有弹孔的飞机在哪里?答案是他们从来没有回家,他们的伤害也没有被记录到之前的图表中。
因此,这些空白区域是飞机最脆弱区域的标志,因为在那里受损的飞机不会再返回。
这实际上是一个真实生活的例子,由哥伦比亚大学的统计研究小组(SRG)在美国战争期间进行的。军方倾向于保护他们看到损坏的区域,但在 SRG 工作的亚伯拉罕·瓦尔德指出了这一错误的推断,甚至开发了复杂的统计数据来模拟缺失的数据(这里有一个重印的为任何有数学倾向的人提供的估计方法),这是一个今天仍在使用的工作领域。这实际上是我们都可能遭受的某个领域的偏见。幸存者偏差。
那是什么呢?
幸存者偏差是指在数据中得出错误的结论,这些数据只包括在选择或评价过程中幸存下来的个体。你通常不会意识到这种偏见,因为你并不容易获得这种选择所去除的数据,所以你根据你所拥有的进行推断。
例如,短语“他们不像过去那样制造它们”通常用来表示过去制造的东西比今天的物品质量高得多。这里的偏见是,经过这么长时间后,只有高质量和设计良好的产品仍将运行,但因为你不知道在中间的几年里所有其他已经损坏和被丢弃的产品,你会有偏见地认为它们都是这样的。同样的偏见也适用于这样一种观点,即建筑比今天的建筑建造得更好,更漂亮,因为只有那些拥有这些品质的建筑才有可能保留到现在。
另一个例子(也是基于真实的辩论)是我之前举的猫的例子。看着它,你可能会认为,在第五个故事之后,猫存活得更好,这可能是因为猫有时间做出反应,确定自己的位置,从而更好地着陆,减少了遭受严重伤害的机会。但即使在这里,你也可能遭受幸存者偏见。偏见可能是这些数据来自猫被带到兽医诊所后的存活率。如果猫死于摔伤,不太可能有人把它带到兽医诊所,这将会使结果产生偏差。
所以最简单的方法是:
幸存者偏见每天都在我们身边。当心你没有受到它的折磨。
丢失数据怎么办?
Photo by Erol Ahmed on Unsplash
沃尔德是一名训练有素的统计学家,他敏锐地意识到分析中可能出现的偏差。有了这些知识,他能够识别缺失的数据是最重要的,甚至想出了一种统计方法来近似它,以便得出正确的决策。
即使你不是这样的世界专家,在许多情况下,一旦你知道失踪幸存者的存在,你也能大致估计出他们的影响,让你的分析回到正轨。
意识到偏见在我们的领域非常重要,因为经常有人会指出一个非常成功的企业或技术,然后说“我想成为那样的人”,但是你通常不想研究那个目标企业,因为他们不能告诉你如何避免失败,因为他们天生就是成功的。相反,看看他们的竞争对手和类似的技术,看看他们为什么倒闭。
这是我在工作中遇到过几次的事情,最常见的问题是,当实验室中的东西转移到生产中时,它们会失败。这通常是因为实验室设备在使用过程中被专家高度修改和改变,而不是所有这些都被记录下来或在生产机器上执行。实验室机器仍然存在的事实意味着他们相信他们都会像这样,他们忽略了他们处理掉的所有坏掉的机器。
一个很好的例子是,当时一位同事不得不处理一个案例,一个更新产品的新生产运行没有通过质量测试,但用于验证它们的可靠性机器没有问题。发生的事情是,可靠性机器是一个较旧的标志,只是在必要的地方用较新的部件进行了升级,但核心部件留下了。这些可靠性机器是幸存者偏差的一个明显例子,因为留在可靠性测试池中的机器必然是因为它们的长寿命制造良好,严重磨损,严格测试,因此结果是高度可靠的。
他们有偏见地认为,因为旧机器运转良好,所以新机器也是一样的。这里正确的决定应该是识别旧机器不再代表新版本,并留出一些新的运行来执行测试。这将有助于发现他们后来发现的制造问题,节省他们的时间和金钱。
摘要
幸存者偏差是一个很难注意到的偏差,它会影响大量的分析。然而,即使数据不可用,你也可以通过它的缺失来估计它应该是什么样的,并且仍然可以得出一个好的结论。
如果你想知道更多,我在下面整理了一份进一步的阅读清单,以及这个伟大的 TedX 关于它的演讲:
TedX talk on how survivor bias skews perceptions
参考书目
- 维基百科:幸存者偏见
- 幸存者偏差例子
- 创始人关于幸存者偏见的博客
- 亚伯拉罕·瓦尔德在飞机生存能力方面的工作(利用统计学填补空白的例子)
零售业的数据科学战略
原文:https://towardsdatascience.com/data-science-strategy-in-retail-daed79ccfd25?source=collection_archive---------19-----------------------
数据科学和人工智能在零售业中的战略作用
Photo by Artificial Photography on Unsplash
数据科学和人工智能的作用正在以改变当今业务职能的方式增加 it 的足迹。除了 BFSI(银行、金融服务和保险)和其他行业之外,零售业和 CPG(包装消费品)可能是在游戏早期接受这些技术变革的最受关注的行业之一。大多数行业分析师强调,超过四分之三的组织计划到 2021 年在零售业部署数据科学和人工智能。从零售商的角度来看,重点显然是 a)通过个性化和所谓的超个性化来改善客户体验,b)提高效率和优化以降低成本,以及 c)尽可能多地实现自动化以体验增值。当然,这些是由“心态”、“态度”和“能力”驱动的,通过细节来完成战略方向。
Key focus elements
今天有哪些关键挑战?如果我们开始关注零售商,并记下他们的问题陈述或业务优先级,那么数据科学可以在许多不同的领域发挥作用,推动成功。例如,如果我们看一些问题,客户会要求更聪明的反应如下:如何提高客户体验;如何更好地学习客户的行为;如何优化成本,提高大多数运营的效率,无论是做得好的还是做得不好的;与客户先前获得的相比,如何向客户提供更好的价值;我们如何尽早处理并意识到客户群的具体变化,以便更好地应对这些变化;我们如何对产品和服务进行创新,以提高接受度、知名度和销售额等等。
根据分析师调查,近五分之一的公司已经在生产中部署了数据科学和人工智能解决方案,这意味着大约 70%-80%的范围存在,在设计阶段可以对现有解决方案进行即兴创作,可以实施新的解决方案,可以定义和规划新的战略,以实现人工智能的强大作用,从而实现商业价值及其影响。
7 大应用主题:未来几个季度,数据和人工智能在零售业的一些主要用途可能会继续如下:
- 超个性化(针对用户的产品个性化,针对一个用户、一组用户等的服务个性化。)
2.对客户的建议(例如 NBOs —次优产品等。)
3.仓库拣选的自动化设备或机器人(货物拣选和移动任务的自动化)
4.视觉搜索利用图像分析(使客户更容易找到他们要找的东西)和跟踪网络搜索
5.欺诈检测(总是想起来简单,处理起来复杂)
6.有效的定价策略(例如常规定价、促销期间定价或事件驱动定价等。)
7.虚拟现实或增强现实
客户分析和营销分析将继续发挥巨大作用,尤其是在商品销售、品牌管理、CRM 等领域。这些潜在的焦点是客户的实时高度个性化、基于财务和分类的商品规划、优化库存、需求预测、广告效果及其对销售的影响等。
关注业务影响:围绕这些战略的大多数战略和行动通过以下方式产生影响:
a)改善顾客体验;
b)根据客户行为跟踪快速做出决策,
c)网站流量、零售店流量或客流量的增加,
d)改进活动响应时间,
e)通过预测需求优化商店库存,
f)通过在非常具体的任务中实现自动化,提高劳动力生产率的有效性
Photo by Carlos Muza on Unsplash
方法:诗歌方法——“诗人”会将艺术加入科学,以便更好地推动结果。以下是数据科学的角色可能对零售商变得至关重要的原因:
- p:实用性和生产性——可行性、获取数据的方法、在给定数据质量和数据有用性的情况下如何应用以及应用哪种方法等。
- o:可操作性——监控、跟踪、执行多个实验,以便找出并评估哪个实验将是我们正在解决的问题的解决方案的选择。
- e:可解释性——对清晰非常重要。必须解释从步骤 1 到步骤 N 发生了什么,并且可以向相关的利益相关者清楚地说明。我们记录和展示 EDA、特征工程、实验和最终用户评估指标的步骤越多;越好。
- t:透明度、信任——正在做什么和如何做,展示哪些参数对预测目标产生影响,反映了哪些见解,考虑了哪种技术,为什么,基于什么实验和围绕它的度量标准。记录风险、合规性、数据敏感性方面将在更大程度上帮助最终用户。
结论:
关键是要更好地了解客户的期望,这可以通过一个可靠的方法和一个机制来实现,以便在市场发生动态变化之前了解这些变化并迅速采取行动。虽然有这么多的想法和实施,但要创造价值并将其添加到业务中并产生影响,仍有许多工作要做。数据和人工智能在这一旅程中对零售商发挥着重要作用,并将继续发挥作用。
免责声明 :这里的帖子是来自我的经验、想法和各种来源的阅读的个人观点,不一定代表任何公司的立场、策略或观点。
数据科学策略——研究数据科学的新途径
原文:https://towardsdatascience.com/data-science-tactics-a-new-way-to-approach-data-science-9c3be5cd7e5c?source=collection_archive---------32-----------------------
思考数据科学的有效方式
战术,是一系列的行动,旨在实现某一目标。战术一词源于军事战争,据说起源于 1626 年。其中一个经典的战术是在希腊战争中使用的斜序战术。第一次使用斜序战术的记录是在公元前 371 年希腊的 Leuctra 战役中,当时底比斯人打败了斯巴达人。这种战术的顺序如下
- 在这种战术中,进攻方集中兵力攻击一个侧翼。左翼比右翼更强大
- 左翼前进得更快,右翼则尽可能避免冲突
- 敌人左翼寡不敌众,被打败了
- 然后左翼去击败其他敌人的侧翼
Oblique Order tactic
在国际象棋中,战术指的是限制对手选择并可能导致实际收益的一系列走法。比如足球,高速反击就是一种战术。
在商业中,一个有用的策略是提供折扣以促销产品
战术是任何领域非常重要的一部分,无论是游戏还是商业。它有助于初学者理解什么是好战术,什么是坏战术。它有助于经理们,比如足球经理,根据为比赛制定的战术来规划球队
战术优势
那么为什么要有战术呢?它提供了一种在执行前思考和计划的方法。它提供了一种接近战争或游戏的方式。一个人不能在没有首先考虑方法的情况下发动一场战争或踢足球。利害攸关,所以有必要先想个办法。
战术也有助于每个相关人员的行动和交流。在足球比赛中,一旦比赛开始,考虑到比赛的速度,球员之间的距离以及所有的人群噪音,球员之间的交流不是很容易。但是有了适当的战术,球员可以根据比赛的情况迅速就位
战术也是领导者与团队沟通的一种方式。在任何足球比赛之前,经理都会召开一个简报会,向球员解释战术。想象一下在比赛前没有这样的简报的情况。球员们会对如何比赛感到困惑,这对球队来说将是一场灾难
战术发挥作用的最重要的方式之一就是与外界沟通。没有直接参与比赛或战争的人仍然有兴趣知道战争是如何进行的,或者一场比赛是如何获胜的。有各种各样的书籍和文章记录了这些策略。这些文件有助于理解哪些是制胜策略,哪些不是。这些从过去吸取的经验教训对该领域未来的领导人来说是非常有用的资源
在数据科学领域,战术意味着什么
战术的概念在数据科学领域并不常用。尽管这个概念非常有用,但战术这个词在数据科学家中并不流行。其中一个原因是没有尝试在数据科学领域引入战术思维。然而,将策略引入数据科学对于数据科学家和数据科学领域都是有用的
让我们先来看看,理解战术对数据科学世界意味着什么。正如上面提到的,战术提供了一种在执行前开发方法的方法。对于数据科学家来说,策略可以帮助决定解决业务问题的方法,并避免直接跳到算法。在许多情况下,数据科学家在考虑如何解决问题之前直接开始编码。这可能不会导致最佳结果和时间的有效利用。拥有战术知识可以带来一种“更高层次”的思考方式,以及探索不同的可能性
战术也有助于避免算法困扰的问题。如果你痴迷于算法,你会试图使用算法中的最新趋势来解决所有问题,而不会首先想到一种方法。然而,先考虑策略,再考虑算法也有助于选择适合问题的正确算法类型
就像在足球或象棋中,有一种方法可以知道过去的比赛是如何赢的。这是通过描述游戏中使用的战术来完成的。这些知识对于现在的教练和分析师来说非常有用,他们研究过去的比赛来决定他们的战术。在数据科学领域,没有对任何解决方案的如此高层次的描述。原因是没有通用的方法来描述数据科学解决方案。每位数据科学家都试图以自己的方式描述解决方案。而且大多数时候,解决方案的描述只是笔记本和代码。
通过使用战术概念,有一种方法可以开发描述任何数据科学解决方案的通用定义。这种通用的高级描述可以从高级方法的角度帮助数据科学解决方案,而不是通过代码或笔记本。
用分段说明数据科学中的策略
数据分割或聚类是非常重要的数据科学技术之一。它的目的是找到相似的数据记录,并将它们分配到一个簇或段中。相似数据记录的组称为簇或段。这两个术语都经常使用。
这种将许多数据记录分组为几个簇或段的能力在各种领域都非常有用。例如,在市场营销中,人们可以将数百万的客户分成几个部分。例如,一家服装零售商可以将其客户群划分为时尚爱好者、价格敏感者、折扣爱好者等群体..然后可以为每个细分市场设计具体的营销活动。
让我们看看不同的细分策略
策略 1:目测识别分段形成
策略 2:使用预定义数量的细分市场
策略 1:目测识别分段形成
从技术上讲,任何数据都可以被聚集。然而,最好是具有与其他集群分开的结构良好的集群。结构良好且独立的群集有助于赋予群集意义。如果群集过于接近或重叠,则很难理解群集的含义。
这种策略的目的是验证是否存在结构良好且独立的集群。建议进行这种验证,以确保任何聚类是否有意义。它还可以帮助决定应用哪种聚类算法。
说明战术的数据集
我们将查看包含汽车信息的汽车数据集。该数据集可在 UCI 机器学习知识库中获得。(* Dua d .和 Karra Taniskidou e .(2017 年)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml]。加州欧文:加州大学信息与计算机科学学院。)
该数据集包括三种类型的实体:(a)汽车在各种特征方面的规格,(b)其指定的保险风险等级,其与其他汽车相比在使用中的标准化损失。第二个等级对应于汽车比其价格显示的风险更大的程度
此处显示了数据集的快照
Automobile dataset
战术序列
这里显示了战术顺序。这将在下面的章节中解释
tactic sequence
集群目标
聚类练习需要有一个目标。这有助于选择相关的特征,赋予聚类以意义,以及将聚类的结果用于商业目的。在本例中,假设我们的聚类目标是根据技术特征对汽车进行分组。这将有助于确定基于技术特征可以形成多少个集群或组。这也有助于发现哪些汽车在技术特征上是相似的。
特征消除
在目标固定的情况下,我们只需要与技术特征相关的数据,而不需要与保险或损失相关的特征。因此,在运行聚类算法之前,您应该首先删除所有与目标无关的特征。
此外,我们将使用主成分分析(PCA)算法进行降维。一般来说,分类特征不会影响五氯苯甲醚。因此,我们也将删除分类特征
因此,我们只保留与此目标相关的连续特征,即:车门数量、整备质量、气缸数量、发动机尺寸、城市 mpg、公路 mpg、轴距、长度、宽度、高度、缸径、冲程、压缩比、马力、峰值转速
我们将删除所有与聚类目标无关的特征,如保险或损失。此外,我们还删除了所有分类特征,如品牌、燃料类型、车身风格等..
标准化
所有的分类特征都有不同的单位。例如,车门数量的单位与发动机尺寸不同。下面解释的降维技术是非常敏感的,并且会给出不同单位变量的错误结果。所以我们首先用标准差来表示所有的数字变量。
此处显示的是标准化后的原始值和缩放值的示例
standardisation
降维
即使去掉了一些特征,我们还有大约 15 个特征。有如此多的特征,绘制任何可视化都是不可行的。作为人类,我们能够以最大三维可视化数据
因此,在这一步中,我们使用降维技术将维度降低到两个维度,而不会丢失数据中的信息。PCA 或 TSNE 等算法对降维算法很有用。这里我们将使用 PCA 算法
对于二维 PCA,我们看到第一个主成分(我们称之为 PC0)捕获了 40%的方差,第二个主成分(我们称之为 PC1)捕获了 16%的方差。所以在二维情况下,我们获得了 56%的方差。由于这个值大于 50%,所以可以接受,因为前两个主成分应该包含大部分方差
pca components
让我们看看数据集中哪些特征对主成分影响最大。这种影响是由特征值给出的。每个特征和主成分的特征值如下所示。
pc0 eigenvalues
pc1 eigenvalues
我们可以看到,第一主成分在正向上受整备质量的影响最大,在负向上受公路里程的影响最大。类似地,第二主成分在正方向上受到峰值转速的影响,在负方向上受到高度的影响
视觉聚类分析
现在,我们可以基于两个主成分将数据集转换为二维。此处显示的是包含 15 个要素的数据集,现在绘制在 2D 散点图上。
scatter plot
视觉分析,我们看到数据集可能有三个集群。有一些数据点可以被认为是异常值
策略 2:使用预定义数量的细分市场
在这种策略中,我们将看到当分段(或聚类)的数量已知时如何进行分段。集群的数量可以由业务给出,例如需要分割成固定数量的部分。或者,已经用上面给出的策略直观地确定了簇的数量。
说明战术的数据集
我们将使用之前策略中使用的汽车数据集
战术序列
这里显示了战术顺序。这将在下面的章节中解释
tactic sequence
集群目标
与之前的策略相同
离群点剔除
由于我们将使用聚类算法进行分段,因此需要注意的是,聚类算法可能对异常值非常敏感。如果存在极端的异常值,那么聚类的结果可能会非常奇怪。因此,在使用聚类算法之前,最好先去除异常值。
正如我们在前面的策略中看到的(直观地识别段形成),数据集中有一些离群值可以直观地识别出来。下面显示的是之前策略中使用的 PCA 图。此外,异常值标有数据记录号
removal of outliers
可以基于数据记录号从数据集中移除这些可视识别的异常值。可以在数据集中识别数据记录号,如下所示,然后可以删除这些数据记录
outlier records
特征消除
在目标固定的情况下,我们只需要与技术特征相关的数据,而不需要与保险或损失相关的特征。因此,在运行聚类算法之前,您应该首先删除所有与目标无关的特征。
在前面的策略中,我们已经删除了分类特征,通常分类特征不会影响 PCA。然而,在聚类中,我们可以保持分类特征。它们必须经过一种特殊的处理,称为一键编码,这将在下面解释。
因此,让我们只保留与此目标相关的特征,包括数字特征和分类特征,如下所述:燃料类型、吸气量、门数、车身类型、驱动轮、发动机位置、轴距、长度、宽度、高度、整备质量、发动机类型、气缸数、发动机尺寸、燃料系统、缸径、冲程、压缩比、马力、峰值转速、城市英里数、公路英里数
相关性
在这一步中,我们将尝试找出哪些特征是相关的。我们这样做的原因是,我们将使用这些特征来分析聚类的结果。如后面的步骤所示,聚类分析是使用散点图进行的。高度相关(正相关或负相关)的特征可以用作散点图的轴。如果散点图的轴是相关变量,则散点图对于聚类分析非常有效
此处显示的是以热图形式显示的功能相关性。
correlation heatmap
非常浅的颜色表示变量高度正相关,非常深的颜色表示变量高度负相关。有许多颜色很浅或很深的盒子。因此,让我们选择几个这样的变量,如
-长度和宽度,这是正相关的
-公路-mpg 和宽度,负相关
标准化
与之前的战术相同(目视识别分段队形
一个热编码
对于分类变量,我们需要转换成数值。这是通过一种热编码算法来完成的
categorical to one hot encoding
例如,分类特征 body-style 被转换成多个特征,例如 body-style_convertible、body-style_hardtop、body-style_hatchback、body-style_sedan、body-style_wagon。将 1 放入对应样式的列中,否则值为 0
聚类
有不同的聚类算法。因为这里假设聚类的数量是已知的,所以我们可以使用 K-Means 算法。根据同一数据集的策略“视觉识别聚类形成”,我们得出结论,三个聚类将是一个不错的选择
在这一步中,我们使用 K-Means 算法将所有数据点聚类成三个簇。以下是每个数据点被分配到一个聚类的结果。如下图所示,2D 散点图基于使用 PCA 进行降维后获得的两个主要成分(如前面的战术中所述,目视识别片段形成)。点的颜色基于簇分配
pca clustering
这些簇形成得很好并且是分开的。群集有一些重叠,但这是最小的。集群 0 和集群 1 更紧凑,而集群 1 似乎有点分散。每个聚类的点数用这里显示的条形图表示
cluster size
另一种可视化方法是使用散点图,其轴是高度相关(正相关或负相关)的特征。正如我们在步骤相关中看到的,下面是相关变量的选择
-长度和宽度,这是正相关的
-公路-mpg 和宽度,负相关
下图显示了基于这些特征以及不同颜色的聚类的散点图
k means clustering
给集群赋予意义标签
分割的一个重要任务是给一个簇或段起一个有意义的名字。一旦创建了段,用一些有意义的名称而不是段 0、段 1 等来称呼它们是很方便的..对于商业用户来说,用一些有用的名字来交流细分的结果也更容易。在这个策略中,我们将看到如何赋予一个集群以意义
一种可能性是使用上面显示的散点图来解释集群。
我们可以看到集群 1 是具有小长度和宽度的汽车。因此,我们可以将该集群标记为小型汽车细分市场。群 2 有长度不小也不大的车厢。所以我们可以把它们归类为中型汽车。集群 0 具有长度和宽度更高的汽车。因此,我们可以将该集群标记为大型汽车细分市场。
这也有助于实际查看集群的一些成员,以便更好地理解结果。在这里,我们可以看到每个集群中几辆车的一些照片。根据照片,您会发现 Cluster1 拥有掀背式车身风格的汽车。集群 2 一般是轿车车身风格的汽车。群 0 有许多是货车的汽车
除了散点图,还有其他方法来确定一个片段的意义,我们将在其他策略中探讨
这里,您看到了聚类或细分所需的两种策略的一些示例。
Example of tactics
一旦你开始掌握策略,而不是算法,你将更好地控制数据科学的过程。在算法之前考虑战术将有助于您获得更好的数据科学方法。它还会帮助你变得不那么痴迷于算法,并开拓更广阔的视野。你将对数据科学有一个清晰的思考过程,而不是被无数的算法所困扰
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站进行零编码分析。https://experiencedatascience.com
请订阅每当我发布一个新的故事时,请及时通知我。
[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。
每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)
你也可以通过我的推荐链接加入 Medium。
[## 通过我的推荐链接加入 Medium—Pranay Dave
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)
https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接
数据科学。中心极限定理与抽样
原文:https://towardsdatascience.com/data-science-the-central-limit-theorem-and-sampling-b54245f2ea2d?source=collection_archive---------22-----------------------
理解中心极限定理
有很多工程师从未涉足统计学或数据科学。因此,要构建数据科学管道或将数据科学家产生的代码重写为适当的、易于维护的代码,工程方面会出现许多细微差别和误解。对于这些数据/ML 工程师和数据科学家新手,我做这个系列文章。我将尝试用简单的英语解释一些基本方法,并基于它们解释一些数据科学模型概念。
整个系列:
- 数据科学。概率
- 数据科学。贝叶斯定理
- 数据科学。概率分布
- 数据科学。措施
- 数据科学。相关性
- 数据科学。中心极限定理与抽样
- 揭秘假设检验
研究随机现象的实践表明,尽管单个观察的结果,即使是在相同条件下进行的观察,也会有所不同。但是对于足够多的观察结果,平均结果是稳定的,只有个别观察结果的微弱波动。随机现象的这一显著特性的理论基础是中心极限定理(又名大数定律)。
根据中心极限定理,随着样本量的增加,数据样本的平均值会更接近总体的平均值,会近似正态。这个定理的重要性来自于这样一个事实:不管人口的分布如何,这个定理都是成立的。
为了说明这个概念,请查看以下掷骰子的动画和代码:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plot
import matplotlib.animation as animation
from wand.image import Image
from wand.display import display# 1000 simulations of die roll
n, m = 200, 31# In each simulation, there is one trial more than the previous simulation
avg = []
for i in range(2, n):
a = np.random.randint(0, m, i)
avg.append(np.average(a))# Function that will plot the histogram, where current is the latest figure
def clt(current):
# if animation is at the last frame, stop it
plt.cla()
if current == n:
a.event_source.stop()plt.xlim(0, m)
plt.hist(avg[0:current])plt.gca().set_title('Expected value of die rolls')
plt.gca().set_xlabel('Average from die roll')
plt.gca().set_ylabel('Frequency')plt.annotate('Die roll = {}'.format(current), [3, 27])fig = plt.figure()
a = animation.FuncAnimation(fig, clt, interval=1, save_count=n)
a.save('animation.gif', writer='imagemagick', fps=10)
在现实世界中,为了了解一个群体的特征,科学家们通常对数据进行抽样,并对样本数据进行统计。他们通过处理样本来理解和概括对人口的认识。使用大样本量,中心极限定理允许我们在此过程中应用正态分布的特性。
我们已经知道正态分布是特殊的。我们也可以将它的一些性质用于严格来说不能称为正态的分布。
抽样
在此之前,我们讲过如何, 知道理论分布 , 知道概率论 , 知道分布 的参数,来评估样本对一般总体发生了什么。但是有一个问题,如果我们估计的样本设计不正确或者它不能代表总体,那么即使最好的理论和最了解的分布也不能帮助我们。
为什么要采样?
逻辑问题是:如果我们取一个样本,无论如何,我们会丢弃一些数据。为什么不把所有的数据和人口的所有元素结合起来?
第一,需要收集数据,而且非常贵。想想调查。即使我们不是在谈论所有美国人的人口,但我们要举个例子,所有 加州 的居民,那就是 3900 万人。要采访 3900 万人,我们需要预算,当然,我们没有。此外,即使我们有这样的预算,也几乎不可能覆盖任何一个州的所有居民。
一般来说,抽样的概念很简单——取一个很小的样本集,但是这个样本集在一些代表我们总体的关键标准方面是非常异质的。也就是说,不是采访所有的加州居民,而是采取某种方式来代表加州的重要标准。
取样的想法和喝汤的想法很相似。当我们煮的汤含有很多配料时,它们被不同地切割,在不同的时间添加,我们需要评估汤的质量。我们不需要吃完所有的汤来评价它有多美味。此外,如果我们需要吃完所有的汤才能明白它有多好,那么任何集体烹饪的想法都会有些荒谬。但是我们在做什么?我们把汤煮开,之后,我们拿起勺子,舀起来,根据这一小部分,我们试图评估我们是否已经把汤煮好了,或者我们需要改变汤里的一些东西。如果我们只是随便拿一些部分,比如从上面舀,那么我们会有满满一勺的水,它不会给我们任何关于食材(蔬菜或者肉)的概念。如果我们从底部舀,结果可能是我们只得到大块,但我们对小块一无所知。为了将汤的所有成分都放入样品中,以便品尝汤的味道,我们需要首先混合它,然后,在我们混合好之后,舀起它,我们会看到所有的成分都在勺子中——大的,小的,和水,所有的。也就是说,在这一部分,我们已经可以估计出汤里的所有配料准备得有多好。取样也是一样。
在采样的情况下,这种混合的模拟是随机采样。它是一种随机选择,其本质是确保样本中的每个元素以相等的概率得到,它为我们提供了样本的这种代表性。
可怕的是样本不具有代表性?
我将强调几个问题。最简单和最容易理解的例子——例如,如果我们选择一个可用样本。
就是我们研究年轻人的喜好,但是由于我们在某个大学学习或者工作,所以只采访我们大学的学生,说基于这个研究我们会了解所有的年轻人。显然,我们不会了解所有的年轻人,因为样本是一个非常特殊的群体。现有的样本给我们提供了部分情况,但并不完整。在这种情况下,相当一部分不在大学学习或在其他大学学习的年轻人将不会被我们的样本所涵盖。另一个问题是——我们只能选择那些想和我们交谈的人。也就是说,这种非代表性样本的问题在于,我们没有给不同的人平等的机会,让不同的观点在我们的样本中得到代表。随机抽样至少在形式上保证了这种表示的可能性。
概率抽样方法
最简单和最容易理解的方法是一个简单的随机样本,当我们有一个完整的总体元素列表时。例如,我们的人口都拥有纽约市的电话号码,我们有这些号码的完整列表。我们打开“随机数传感器”,选择我们需要的物品数量,然后拨打这些电话号码——一个简单的随机选择。
另一种选择是分层抽样。在这里我们不再做随机选择,但在这里我们知道一些关于我们的人口。我们知道它由几个同质的集群组成,这些集群需要在我们的样本中呈现。比如一男一女,对一些问题有不同的看法。我们首先将我们的人口分为男性和女性两类,然后我们在两类中随机选择,以保证这些类在最终样本中的代表性。
随机抽样的另一个变体是整群抽样。例如,当我们探索城市时,会用到这样的样本,而城市通常会被划分为区。一些地区彼此相似,一些不同,我们有这种类似的地区集群,比如说,在社会经济条件方面。我们首先把城市分成几个区,然后随机选择这些区中的一个,每次一个,这样就不用去所有的 12 个区,而是从 12 个区中随机选择 3 个,先把它们分成这些相似的类别,然后在这些区域内工作。
非概率抽样方法
还需要非概率抽样方法。而且,在某些情况下,非概率抽样是不可替代的。比如有一种抽样方法——滚雪球抽样。如果我们调查难以接触到的群体,或者我们不知道总人口的确切数量,这是必要的,然后我们与第一个人交谈,他与下一个人联系我们,下一个,下一个,我们有点像积累一个雪球。我们增加了样本,从一个开始,或者有时从几个这样的雪球开始,以保证群体的异质性。当然,这个样本在统计学上并不具有代表性,但是有些任务没有它我们根本无法完成。
结论
中心极限定理是统计学中的一个非常重要的概念,因此也是数据科学中的一个非常重要的概念。这个定理将允许我们测试所谓的统计假设,即允许测试假设对整个人口的适用性。我们将在后面的文章中讨论这个概念。
抽样是从人群中获取少量但有代表性的数据的一种廉价且容易理解的概念。对于大多数研究问题来说,概率方法是更可取的,但是对于有些任务,只有非随机样本才能有所帮助。有些任务是不可替代的,但在统计学意义上,非随机样本不具有代表性。因此,所有这些关于分布的理论知识,关于根据样本推断总体人口的理论知识,我们只能在随机样本上进行。
感谢您的阅读!
有什么问题吗?请在下面留下您的评论,开始精彩的讨论!
查看我的博客或者来打个招呼👋在推特或订阅我的电报频道。
规划好自己!
数据科学独角兽可能就在你的眼皮底下
原文:https://towardsdatascience.com/data-science-training-da13d0fbcbce?source=collection_archive---------17-----------------------
我们的社会以惊人的速度产生数据。据估计,每天有多达 250 万兆兆兆字节的新信息出现在世界各地的服务器上。这相当于 10 亿部 iPhones 手机所能容纳的数据量,0 和 1 的数量如此之大,以至于你需要 18 个 0 来计数。每一个。单身。日。
在畅销书 中,21 世纪的 21 个教训 作者尤瓦尔·诺亚·哈拉里说“数据将超越土地和机器,成为最重要的资产。”这种信息过剩产生了对有技能和意识利用信息的人的需求暴涨。数据科学预计将成为 IT 行业中发展最快的领域。IBM 预测,到 2020 年,对数据科学家的需求将增长 28 %,预计全国数据科学领域的工作岗位总数约为 270 万个。
但是合格的数据科学家的供给却落后了。根据最近的 LinkedIn 劳动力报告,全国有超过 150,000 个职位空缺,因为缺乏具有数据科学技能的候选人。如果 IBM 的预测成立,我们可以预计这一数字将增加两倍,因为数据科学领域的 364,000 个新职位将增加到经济中。
高薪数据科学家职位的空缺数量和合格申请者数量之间的差距已经变得如此明显,以至于雇主、教育工作者和决策者都在争先恐后地回答同一个问题:我们如何才能培养更多的数据科学家?
新的学位课程、认证和训练营在这个领域比比皆是,有助于缩小数据科学招聘的差距。但在推动产生更多数据科学家的过程中,许多这些项目忽略了填补这些角色的最有效和最可靠的候选人来源之一——已经在从事数据相关工作的人。
为了理解我这样说的意思,对数据科学家有一个清晰的定义是很有帮助的。数据科学家了解数据工程的原理,能够自信地对数据建模并解析模型以获得见解,并且能够有效地传达这些见解。
换句话说,数据科学家是一种多面手,可以同时部署多个学科的工具和方法。首先,一名高效的数据科学家需要了解收集信息的流程、存储数据的架构以及如何提供数据,这通常被称为“数据工程”
接下来,数据科学家需要牢固掌握解析数据所需的统计模型,并熟悉用于运行这些模型的语言、库和平台——Python、R、Hadoop、Tensorflow 等等。
我最喜欢的几个使用数据科学工具的项目:
用自然语言处理写诗用 Python
ADAM 是一个帮助你在 Spark 中并行化基因组数据的库
Rspotify是一个允许 R 程序员连接 Spotify API 的包
这个项目使用tensor flow让 Alexa 对手语做出反应
最后,数据科学家应该了解如何从数据中获得最有影响力的见解。这包括熟悉企业的总体目标,在规划项目时运用判断力,并能够以各种形式交流他们工作的利害关系和结果——书面信函、现场演示和/或数据的可视化表示。
数据科学家应该了解如何从数据中获得最有影响力的见解。
一个高效的数据科学家应该熟悉所有这些技能。目前,很难找到一个拥有如此广度和深度知识的人;这是招聘人员和雇主努力寻找数据科学领域合格候选人的一个原因。数据科学是一个较新的领域,培训计划尚未赶上市场需求。
但在寻找完全成熟的数据科学家的过程中,许多公司忽略了一个显而易见的人类潜力来源:当前员工。的确,拥有成为成功数据科学家的所有素质和技能的人可能相对较少,但许多公司的工资单上已经有人拥有许多这些关键技能。一个聪明有效的再培训计划可以让他们在不太熟练的领域提高速度。
但在寻找完全成熟的数据科学家独角兽的过程中,许多公司忽略了一个显而易见的人类潜力来源:当前员工
例如,一个软件开发人员可能已经掌握了操作数据的技术技能,给了一个统计建模的复习课程。一个已经知道如何交流想法并精通像 D3.js 这样的数据可视化库的设计师可以成为一名优秀的数据科学家,有机会学习更多关于信息系统架构的知识。
这种方法有几个好处。投资于员工再培训的公司可以确定,数据科学家职位的候选人已经了解业务,并且符合组织的文化,而不是将金钱和资源投入到昂贵的搜索过程中。
内部培训候选人也可以减少新员工熟悉公司软件栈所需的在职培训。
在职培训的前景让员工知道,他们的雇主致力于帮助他们建立职业生涯,这给他们一种稳定感,鼓舞士气,提高整体生产力。这也有助于留住员工,在去年的达沃斯世界经济论坛上,麦肯锡公司报告称“在人工智能领域投入巨资的 80%的首席执行官也公开承诺保留和再培训现有员工。
寻找能够帮助你进入像数据科学这样的新兴领域的人似乎令人生畏,但是首先要诚实地评估你的团队已经具备的能力和知识。你可能会发现你已经得到了你想要的东西。
2020 年的数据科学趋势
原文:https://towardsdatascience.com/data-science-trends-for-2020-78bda13032c7?source=collection_archive---------11-----------------------
数据科学现在无处不在。2020 年我们可以期待什么?
现在,人们已经在庆祝这个十年的结束(有趣的事实:2020 年代实际上从 2021 年 1 月 1 日开始)。去年的时候,我决定思考已经发生的事情,以及在我看来,关于 2020 年的数据科学,我们可以期待什么。
没想到我去年的反思帖有这么多阅读量。从反馈来看,人们觉得很有趣,没有进一步的原因,让我们深入今年的想法,保持论坛开放!
数据科学进入保守领域
2019 年,我们开始看到机器学习解决方案被应用于保守(监管更多)的领域,如医疗保健——现在,受到了重视!
今年我注意到的最有趣的挑战之一是在胸部 x 光片中识别气胸疾病。本质上,肺萎陷导致严重的呼吸困难。这可能是一个非常困难和微妙的条件,以确定。这将是另一个和其他挑战一样的挑战,但现在它包括了研究这种情况的实际机构的参与。我敢肯定,这些机器学习算法在四年前对我来说可能是很方便的…像这样的系统已经被 FDA 批准。
Pneumothorax impacts nearly 74,000 Americans every year [source: Venture Beat, GE Healthcare]
这一步骤的主要结果不仅仅是帮助受影响的个人,还有更高层次实体的显著参与,即决策者,使这些技术能够在以前对采用这些技术非常谨慎的领域中使用。正如许多数据科学家所知,这通常是新项目中最难克服的瓶颈之一。
另一个例子,不仅仅是从 2019 年开始,是使用数据科学来确定药物-补充相互作用( supp.ai )。如果你知道组合,你就能对我们正在谈论的事情的规模有个概念。
设计的数据隐私
随着用户越来越关心数据的处理和所有权,工程师和数据科学家不得不寻找方法来满足这些新的用户需求。如果公司实际上不拥有满足其业务需求的用户数据,无数的数据泄露(你可以看看这份令人印象深刻的 2019 年总结)可以得到缓解。
早在几年前,联邦学习就已经成为关于数据隐私的热门话题。本质上,
联合学习是一种机器学习设置,其目标是利用分布在大量客户端上的训练数据来训练高质量的集中式模型,每个客户端都具有不可靠且相对较慢的网络连接。[ 谷歌人工智能 ]
这可能不是灵丹妙药,但它可能有助于软件工程师和数据科学家按照设计隐私来构建系统。我们可以将此视为使用更少数据的机会,同时仍然能够创建有用的产品。
Federated Learning is a new a machine learning technique that trains an algorithm across multiple decentralized edge devices or servers holding local data samples, without exchanging their data samples [source: Google AI, Wikipedia]
用更少的资源做更多的事情(数据)。对数据科学来说有点反直觉,对吧?是的,可能是。但信任将是 2020 年的一个关键话题。你如何确保用户信任软件公司的数据?例如,使用联合学习来训练移动键盘的预测模型,而无需将敏感的打字数据上传到服务器( Hard,et al .,2018 )。
Servers (companies) do not need to know about every piece of data you generate. [Hard, et al., 2018]
如果联合学习对你来说是一个新概念,或者你希望更好地理解它,我完全推荐你从这个奇妙的漫画开始。你甚至可以开始用开源框架 Tensorflow Federated 创建自己的第一个系统!
减轻模型偏差和歧视
2019 年 11 月最大的头条之一与苹果/高盛信用卡(最有可能)性别歧视有关。用户们注意到,它给女性提供的信用额度似乎比男性少。即使这一切都是从大卫·海涅迈尔·汉森的病毒式推特开始的,它也提醒了我们全自动机器决策的老问题:导致最终决策的主要驱动因素是什么?至今没有人解释,而且现在很难得到人类的帮助。
As soon as a model is put into production it is up for scrutiny of users, specially if the decisions directly affect high stakes personal issues.
尽管看起来很可怕,但数据科学家知道,将性别作为模型的输入并不意味着你不能被指控性别歧视。现在阅读高盛的官方推特...从这些回答中,你可以看到一些公司在使用新技术时坚持的独创性。重要的是要记住,
[这就是]现代算法将导致“代理 歧视”的风险代理歧视是不同影响的一个特别有害的子集。像所有形式的不同影响一样,它涉及一种表面上中立的做法,对受保护阶层的成员造成了不成比例的伤害。[ 人工智能和大数据时代的代理歧视
我们应该始终记住,基于有偏见的数据训练的复杂模型可以学习歧视性模式,从而导致扭曲的决策。而且这些模型可以找到导致歧视的代理,甚至如果你实际上不包括你认为可能有历史偏见的实际特征。
It’s up to the data scientists (including machine learning engineers) to come up with new bias identification and mitigation algorithms to help mitigate harm on users [image source: Adeli, et al., 2019]
作为前进的道路,偏见歧视将继续成为主要话题之一,不幸的是,在公司认真对待这个问题之前,我们会看到更多类似的头条新闻。数据科学家可以通过执行示例性探索性数据分析来提供帮助,确保数据代表整个群体,并探索可以识别和减轻这些偏差的新架构。
Python 是数据科学的事实语言
当我五年前转到数据科学领域时,问题— 【对于数据科学】我应该专注于什么编程语言?——这个问题很难回答。随着岁月的流逝,随着 Python 的海量增长,已经变得更容易回答了。正如 Stack Overflow 在 2019 年 4 月发布的年度开发者调查中所述:
在我们的调查中,增长最快的主要编程语言 Python 再次在编程语言中排名上升,今年超过 Java,成为第二大最受欢迎的语言(仅次于 Rust)。
不仅仅是堆栈溢出,其他网站也提到 Python 是你可以做的最好的赌注之一,如果你打算开始编程,有一个巨大的支持社区在你身边,或者做一个快速原型。最后一个方面通常与当今的数据科学家最为相关。很难有任何其他编程语言能更好地帮助数据科学家。
回想一下,数据科学是 统一统计学、数据分析、机器学习及其相关方法 的一个概念(这要追溯到 1996 年与 Hayashi !).我喜欢给它加上“越快越好”。这就是 Python 的用武之地。
Python can safely be confirmed as the “de facto” data science programming language
我相信 Python 推动了数据科学的巨大发展(或者反过来?).如果对你来说这仍然是一个不确定的决定,那就去做一些研究来找出答案。
专注为“别烦我,我只想把事情做完”
聚焦 2020 年!由于每天都有如此多的新文章发表——截至 2018 年底,每天大约有 100 毫升的论文发表在arXiv.org上(是的,它们没有经过同行评审,但即使……)——聚焦必须是你添加到目标中的东西。
随着数据科学家独角兽(幸运的是)的想法消失,数据科学专业化的概念已经成熟。就像决策树的第一次分裂一样(很抱歉…),你可以有两种方法:
- 重型工程路径,专注于数据管道、生产化、软件工程。如果你是计算机专业出身,这个对你来说可能比较容易。
- 重分析路径,侧重统计、数据分析、业务知识。如果你来自应用数学、物理,甚至是社会领域,这对你来说可能是一个更容易的开始。
这并不意味着两条路永远不会交叉,但你应该追求其中的一条。如果你想进入更多的细节,你甚至可以找到更具体的工作名称,就像我去年提到的。
归根结底,更重要的是把事情做好!记住,你不需要从零开始创造东西来创造伟大的东西。基于其他优秀的开源工具构建,如 Tensorflow Extended 或 PyTorch 。这两种工具都能让你克服许多最初的头撞墙的时刻。
Keep your boat well steered as you enter 2020. Focus on what you really want to do. [source: Evelyn Paris]
祝 2020 年愉快!
2019 年是一次疯狂的过山车之旅…加入谷歌纽约对我来说是其中一个循环。祝 2020 年愉快!
雨果洛佩斯
数据科学 vs 人工智能 vs 机器学习 vs 深度学习
原文:https://towardsdatascience.com/data-science-vs-artificial-intelligence-vs-machine-learning-vs-deep-learning-9fadd8bda583?source=collection_archive---------1-----------------------
首次发布于我的博客。
这些天来,经常会遇到这些术语——数据科学、人工智能、机器学习、深度学习、神经网络等等。但是这些流行语实际上是什么意思呢?你为什么要关心这个或那个?在这篇文章中,我尽我所能来回答这些问题。但话说回来,我不是这方面的专家。这是我在过去几年的数据科学和机器学习之旅中获得的知识。我相信你们中的大多数人会比我有更好更简单的方法来解释事情,所以我期待着在下面看到你们的评论。那我们开始吧。
数据科学
数据科学就是关于数据的,我很确定你已经知道了。但是,您知道我们使用数据科学来做出商业决策吗?我很确定你也知道。那么这里还有什么新的东西呢?那么,你知道数据科学是如何被用来做商业决策的吗?没有吗?让我们看看那个。
我们都知道,每一家科技公司都在收集海量数据。而数据就是收入。这是为什么呢?那是因为数据科学。你拥有的数据越多,你就能获得越多的商业洞察力。使用数据科学,您可以发现您甚至不知道存在的数据模式。例如,你会发现某个去纽约度假的人很可能会在接下来的三周内花钱去威尼斯进行一次豪华旅行。这是我刚刚编造的一个例子,在现实世界中可能不是真的。但如果你是一家提供异国目的地豪华游的公司,你可能会有兴趣得到这个人的联系电话。
在这种情况下,数据科学被广泛使用。公司正在使用数据科学来构建推荐引擎,预测用户行为,等等。只有当你有足够多的数据时,所有这一切才有可能,这样就可以对这些数据应用各种算法,给你更准确的结果。
数据科学中还有一种称为规范分析的东西,它做的预测与我们在上面的丰富旅游示例中讨论的几乎相同。但作为一个额外的好处,规定性分析还会告诉你一个人可能对哪种威尼斯豪华游感兴趣。例如,一个人可能希望乘坐头等舱,但三星级住宿就可以了,而另一个人可能准备乘坐经济舱,但肯定需要最豪华的住宿和文化体验。所以即使这两个人都是你的富有客户,他们也有不同的要求。所以你可以用规定性分析来解决这个问题。
你可能会想,嘿,这听起来很像人工智能。实际上,你并没有完全错。因为在巨大的数据集上运行这些机器学习算法也是数据科学的一部分。机器学习在数据科学中用于进行预测,也用于发现数据中的模式。这听起来又像是我们在给我们的系统增加智能。那一定是人工智能。对吗?让我们看看。
人工智能
人工智能,简称 AI,从 20 世纪 50 年代中期就已经出现了。不一定是新的。但是最近由于处理能力的提高,它变得非常流行。早在 1900 年代,就没有实现人工智能所必需的计算能力。今天,我们拥有世界上有史以来最快的计算机。算法实现有了很大的改进,我们可以在商用硬件上运行它们,甚至是你现在用来阅读的笔记本电脑或智能手机。鉴于人工智能看似无限的可能性,每个人都想分一杯羹。
但是人工智能到底是什么?人工智能是一种可以赋予计算机的能力,它使这些机器能够理解数据,从数据中学习,并根据隐藏在数据中的模式做出决策,或者做出人类很难(几乎不可能)人工做出的推断。人工智能还使机器能够根据新的输入来调整它们的“知识”,这些输入不是用于训练这些机器的数据的一部分。
定义人工智能的另一种方式是,它是一组数学算法,使计算机能够理解不同类型和不同数据之间的关系,从而可以利用这种联系知识来得出结论或做出非常准确的决定。
但有一件事你需要确定,你有足够的数据让 AI 学习。如果你有一个非常小的数据湖用来训练你的人工智能模型,预测或决策的准确性可能会很低。因此,数据越多,人工智能模型的训练就越好,结果就越准确。根据训练数据的大小,可以为模型选择各种算法。这是机器学习和深度学习开始出现的地方。
在人工智能的早期,神经网络风靡一时。全球有多组人致力于改善他们的神经网络。但正如我在帖子前面提到的,计算硬件的局限性阻碍了人工智能的发展。但从 20 世纪 80 年代末一直到 2010 年代,机器学习就是这样。每一家大型科技公司都在机器学习上投入巨资。谷歌、亚马逊、IBM、脸书等公司。实际上是在拖 AI 和 ML PhD。大学毕业的人。但如今,就连机器学习也退居二线了。现在都是深度学习。在过去的几十年里,人工智能确实有了发展,而且一年比一年好。你可以从下图中看到这一演变。
Source: SAS
机器学习
现在来说说机器学习。机器学习(ML)被认为是人工智能的一个子集。你甚至可以说 ML 是 AI 的一种实现。所以每当你想到 AI,你就能想到在那里应用 ML。顾名思义,ML 用于我们希望机器从我们给它的大量数据中学习的情况,然后将这些知识应用于流入系统的新数据。但是你可能会问,机器是如何学习的呢?
让机器学习有不同的方法。机器学习的不同方法是监督学习、非监督学习、半监督学习和强化机器学习。在其中一些方法中,用户告诉机器什么是特征或自变量(输入),什么是因变量(输出)。因此,机器学习提供给机器的数据中存在的自变量和因变量之间的关系。提供的这些数据称为训练集。并且一旦学习阶段或训练完成,机器或 ML 模型就在该模型以前没有遇到过的一段数据上被测试。这个新数据集称为测试数据集。您可以通过不同的方式在训练数据集和测试数据集之间分割现有数据集。一旦模型足够成熟,能够给出可靠且高精度的结果,该模型将被部署到生产设置中,在生产设置中,该模型将用于全新的数据集,以解决预测或分类等问题。
ML 中有各种算法可用于预测问题、分类问题、回归问题等等。您可能听说过简单线性回归、多项式回归、支持向量回归、决策树回归、随机森林回归、K 近邻等算法。这些是 ML 中使用的一些常见的回归和聚类算法。还有很多。即使在训练模型之前,也有许多数据准备或预处理步骤需要处理。但是像 SciKit Learn 这样的 ML 库已经发展得如此之快,以至于即使是一个没有任何数学或统计背景,甚至没有接受过正式人工智能教育的应用程序开发人员,也可以开始使用这些库在现实世界中构建、训练、测试、部署和使用 ML 模型。但是知道这些算法是如何工作的总是有帮助的,这样当你为你的问题陈述选择一个算法时,你可以做出明智的决定。有了这些关于 ML 的知识,我们现在来谈一谈深度学习。
深度学习
深度学习(DL)是 ML 的一个进步。尽管 ML 对于大多数应用程序来说是非常强大的,但是也有 ML 不尽如人意的地方。这就是深度学习介入的地方。一般认为,如果你的训练数据集相对小,你就用 ML。但是,如果你有大量的数据可以训练一个模型,如果数据有太多的特征,如果准确性非常重要(尽管准确性总是很重要),那么你会选择深度学习的路线。
还需要注意的是,深度学习需要强大得多的硬件来运行(主要使用 GPU),它需要明显更多的时间来训练你的模型,并且与 ML 相比,它通常更难实现。但是当你试图解决的问题非常复杂的时候,你不得不做出一些妥协。
你可能听说过 TensorFlow,这是一个谷歌正在广泛使用并推向开发者的神经网络。嗯,那就是使用深度学习,因为神经网络是一种深度学习模型。我们在过去几年中开始看到的自动驾驶汽车,它们是自动驾驶的,这要归功于深度学习。在现代世界中,深度学习有许多这样的应用,它们都在幕后。例如,网飞等娱乐服务公司正在广泛使用深度学习来改善他们对你的推荐,并根据用户参与度来决定哪些节目值得继续制作,哪些节目需要砍掉,因为它们浪费时间和金钱。
我们今天看到的大多数虚拟助手,如 Alexa 和谷歌助手,都使用深度学习来理解你正在发出的请求(自然语言处理——NLP)、语气、你正在表现的情绪,并在某些情况下认证你的声音。假新闻在今天是一件大事。许多公司因未能控制社交平台上的假新闻传播而遭到起诉。因此,许多这样的公司已经开始使用深度学习来检测在其平台上传播的假新闻,然后采取必要的行动。所以是的,深度学习在今天是一件大事。
关于我在这篇文章中提到的所有这些不同的技术,还有很多可以写的。这些课题是如此的广泛,以至于成千上万的人为了人类的进步而献身于研究和改进这些技术。还有另一群人认为,人工智能的发展正在将人类推向灭绝。不过话说回来,我们谁也没见过未来,时间旅行还是不算事。也许,在未来的某一天,会有一个足够强大和聪明的人工智能来设计时间旅行机器。
但是现在我们在这里,亲身体验人工智能的革命性发展,我觉得我们应该拥抱这项勇敢的新技术,并找出我们可以利用它让世界变得更美好的方法。有如此多的组织和私人公司在研究我们如何在医疗保健中使用人工智能来早期检测疾病并防止生命损失。有很多研究正在进行,以找出人工智能如何帮助癌症治疗。人们正试图发现新的药物,这可能会打开一个全新的治疗机会之窗。像医学成像这样的东西也是人工智能在很大程度上被使用的一个领域。因为人们正在使用具有 GPU 核心(深度学习)的人工智能进行医学成像,并且因为图像的分析也是使用人工智能完成的,所以我们看到在早期检测疾病、准确检测疾病以及及时采取措施避免威胁生命的疾病的过程中取得了一些巨大的进步。
金融行业正在大量使用人工智能来检测金融交易中的欺诈行为。随着 Keras 和 TensorFlow 的日益增长,我们看到了欺诈检测和防范方面的新功能。银行和金融机构能够研究数百万人的交易、银行历史和信用评分,以检测和防止贷款和保险欺诈的发生。在过去几年里,这对于节省数十亿美元至关重要。
由于人工智能和自动驾驶汽车技术的创新,由机器人驾驶的奢华未来正在成为现实。我还会继续说,在未来,我们将拥有现代智能手机大小的小型设备,你可以放在家里监测你的健康和身体的各种参数。我们已经有了这样的血糖和血压监测器,最新的 Apple Watch 甚至还有心电图阅读器。所以,是的,随着技术和智能设备的进步,一旦你开始向他们提供足够的健康数据,这些设备和服务将能够发现你的健康模式并预测未来,这反过来将帮助你尽早做出调整。
你觉得你清楚这些不同技术之间的区别吗?我还试图给出一些这些技术的各种应用的例子。希望有帮助。如果你打算进一步学习这些知识,并亲自尝试机器学习或深度学习,我已经在 Udemy 上策划了一个前五名 ML 和深度学习课程的列表。也许将来你可以报名成为一名数据科学家。
在推特上关注我,了解更多数据科学、机器学习,以及通用技术更新。还有,你可以关注我的个人博客。
数据科学与商业智能:相同但完全不同
原文:https://towardsdatascience.com/data-science-vs-business-intelligence-same-but-completely-different-1d5900c9cc95?source=collection_archive---------6-----------------------
对你的第一个数据科学项目有什么期望?商业指南。第二部分
Image by analogicus from Pixabay
这是本系列的第 2 部分。参见第 1 部分此处
与大的科技公司不同,一般来说,企业只是刚刚涉足数据科学和人工智能。与早期采用一样,这并不容易——大多数项目没有超过概念验证阶段,从业务角度来看,这被认为是失败的。没有公布有多少数据科学项目失败的数字,但我敢肯定这甚至高于大数据项目 令人失望的 85%的数字 。
为什么故障率这么高?主要是因为数据科学是新生事物。它将新类型的协作、需求和文化引入到已建立的企业环境中。由这些新奇事物引起的复杂情况通常在开始时很难看到。但是当他们开始解开,他们经常在某些点上变得太困难。不幸的是,这些复杂因素通常不会在向企业销售人工智能和数据科学的各种营销宣传中列出。
商业智能是一个总括术语,描述了通过使用基于事实的支持系统来改进商业决策的概念和方法[1]。现代商业智能不仅仅是商业报告。这是一个成熟的系统,提供交互式仪表盘、假设规划、移动分析等。它还包括大型后端部件,用于维护对报告的控制和治理。
由于 BI 是一个总括术语,因此它可能因公司而异。对于一些公司来说,它可能只是所有支持基础架构的基本关键绩效指标(KPI)报告,其他公司可能使用基于统计模型和高级工具的高级预测方法。但是不管使用什么方法或工具,它们都根据业务利益相关者的需求为他们的决策提供事实。
但是嘿!数据科学不也是这样吗?是的,它是。
从业务流程的角度来看,数据科学和商业智能之间没有太大的区别,它们都支持基于数据事实的业务决策。可能这就是为什么在开始他们的第一个数据科学或人工智能项目的企业中,人们经常假设数据科学是同样的旧商业智能,但工作得更聪明。根据这一假设,可以在现有 BI 基础架构和流程的基础上开展数据科学项目。
这就是问题开始的时候:结果是一个数据科学家想要将数据以 CSV 文件的形式从系统中取出,但是公司的安全政策不允许这样做;数据科学家正在使用奇怪的库和软件构建他们的模型,基础设施团队在生产中不支持这些库和软件,等等。
任何公司的任何第一个数据科学项目都会从一开始就对现有团队产生新的挑战性需求。怎么会这样如果数据科学和 BI 做的一样,为什么会发生这种情况?为什么那些奇怪的要求?
在现实中,商业智能和数据科学之间的差异是如此之大,以至于它使一切都变得不同:期望、项目方法、相关人员等。但是人们必须从不同的角度去看它。
不同之处在于它们解决的问题类型:BI 使用一些可用的公式,为以前已知的事物提供新的价值。数据科学与未知事物打交道(见本系列第一部分),回答以前没有人回答过的数据问题,因此没有现成的公式。
在商业智能中,商业智能开发人员带着一个公式或方法来计算商业智能拥有的报告或 KPI。这意味着企业已经设计了 BI 方法,并且他们理解并乐于使用它。
在数据科学中,情况完全不同:业务带来的是实际数据和一些以前从未回答过的问题。现在由数据科学家来测试多种方法并选择最佳方法,在准确性、简单性、可用性和生产平台的功能之间进行平衡。一旦选择了模型并与业务部门达成一致,它就成为了回答问题的已知方法,成为了数据分析而非数据科学的主题。
您可能会注意到,上述关于 BI 的陈述是有争议的——它没有处理完全已知的事物——它可能有一个公式或方法,但它计算未知的 KPI 值,甚至使用批准的方法进行预测。为了解释这种双重性,我使用了一个很好的已知未知和未知未知的概念,这是由美国国防部长唐纳德·拉姆斯菲尔德在 2002 年关于缺乏证据证明伊拉克政府向恐怖分子提供大规模杀伤性武器的著名回答中推广的。
使用这一概念,我现在可以更简短地表述差异:
BI 处理已知的未知,而
数据科学处理未知的未知。
这是他们之间最大最根本的区别。起初,这似乎是一种纯粹的形式主义,专注于一个不那么重要的差异,但一旦你开始考虑后果,它就会改变。
首先,处理未知的未知,数据科学不能保证项目一开始就成功,预测解决方案会是什么样子以及实施起来有多困难。这意味着建立一个商业案例和计划一个项目要困难得多。如果你继续解开这些暗示,你可能会得出这样的东西:
所有这些差异实际上都源于这一区别,而这一区别起初似乎并不显著。事实上,当从一开始就不知道解决方案时,数据科学家会使用试错法。在这种情况下,明智的做法是使用允许快速转变想法的工具和方法,这样每个新的试验都不需要太多的准备时间:如果需要,新数据应该随时可用,实现下一个试验方法的新软件和库应该易于安装和下载,基础设施必须准备好支持新软件或框架,等等。
这就是为什么典型的数据科学家的工具箱和实践都是为灵活性和敏捷性而构建的。编程语言、开源库、微服务、容器、API 和 extreme agile 都在帮助数据科学家快速浏览想法并找到解决方案。
然而,所有这些工具在开放、敏捷和流动的环境中工作得最好,在这样的环境中,这些工具的使用不受某些外部因素的限制。这种环境通常可以在科技公司和初创企业中找到。
典型的企业环境非常不同——它是为控制和可靠性而构建的,通过严格的流程规则、共同责任、多级决策等来实现。
Photo by Joshua Hoehne on Unsplash
这意味着,大多数大型非科技公司的 IT 系统都受到严格监管,实施变革的速度很慢。这些公司中的任何数据科学项目都将面临多个令人分心的障碍:从业务系统中获取数据进行分析的漫长过程,由于当前的 IT 架构不支持容器和微服务,无法实施解决方案,等等。
维护企业系统的人也有非常不同的优先级和思维模式。他们不一定会对更改系统或添加新系统感到兴奋,他们可能会在签署对公司数据的访问权限时担心安全合规性,等等。企业终端用户可能也不会对将人工智能或数据科学引入他们的角色感到非常兴奋。他们可能会担心缺乏新领域的知识,或者担心自己工作的安全性,因为他们从媒体那里获得了对人工智能威胁的错误认知。
然而,所有这些人对于任何数据科学项目都是至关重要的。项目领导人和发起人必须考虑这些问题,以避免“文化冲突”,这可能会毁了任何项目。
项目负责人必须为数据科学家提供强有力的支持,否则他们会发现自己在充满敌意的过度监管环境中处于劣势。他们还必须传达为什么公司需要数据科学项目,并向人们保证这不会影响他们的工作安全。如果需要的话,项目发起人还需要能够在公司结构的所有层次上快速推动异常请求。
相比之下,商业智能已经是一个典型的企业景观的一部分,BI 项目基本上没有这些问题。BI 功能通常由已经整合到 IT 架构和流程中的单个或极少数平台提供。商业用户对它非常熟悉和自信。BI 项目将处理已知的未知,这意味着有一种方法可以找到这些未知,因此项目可以提前做好计划。BI 中没有太多的试错。最重要的是,一家公司通常会有成功的 BI 项目的良好经验和跟踪记录,并拥有良好的项目专业知识。
摘要
从业务角度来看,数据科学和商业智能在业务流程中扮演着相同的角色,它们都提供基于事实的见解来支持业务决策。但从另一个角度来看,它们是根本不同的,这使得一切都不同:期望、方法、使用的工具等。
区别在于他们处理的问题类型:BI 处理已知的未知问题,即使用已知的公式计算已知 KPI 的新值,而数据科学处理未知的未知问题,回答以前没有人回答过的数据问题。定义上的这一点点差异意义重大。在没有给出公式或方法的情况下,数据科学家使用试错法。在这种情况下,一般来说,数据科学无法在项目开始前保证成功,它无法预测找到解决方案需要多少步骤以及解决方案会是什么样子。
为了尽快找到解决方案,数据科学采用了针对速度优化的工具和方法:编程语言、库、Docker 容器、微服务架构等。这与典型的企业环境非常不同,在企业环境中,It 系统是为了控制和可靠性而构建的。仅这一点差异就给老牌公司的第一批数据科学项目带来了许多困难。
但这还不是全部!还有一个问题潜伏在眼前——使用 机器学习 。对于以设计和维护业务规则为己任的业务分析师来说,将 ML 引入业务环境可能是一个巨大的文化冲击。对于使用机器学习的解决方案,将不再需要这些规则!谁会喜欢这样的改变呢?在接下来的简短部分,我将触及机器学习给现有企业文化带来的结构性转变。
参考资料:
[1] D. J. Power,《决策支持系统简史》,4.0 版。(2007 年 3 月 10 日),DSSResources.COM。
你可以在LinkedInTwitter脸书 上找到我**
数据科学什么?
原文:https://towardsdatascience.com/data-science-what-ae9b5c7ffc22?source=collection_archive---------22-----------------------
到底是什么?这是为了什么?
Photo by drmakete lab on Unsplash
让我们把重点放在它的实用性上。
已经有很多关于数据科学的文章,但更多的是在技术方面,即“极客的东西”(我个人很喜欢),但没有多少文章从更受业务驱动的角度,讲述这种称为数据科学的专业领域的美丽融合的优势和实际影响。
我想提出一些论据来支持我的观点,即它是我们这个时代的一个关键部门、术语、专业领域(随便你怎么说)。它是如此广泛,以至于几乎每个与数据打交道的人都可以成为数据科学家(纯粹主义者、“pythonists”和“数据主义者”——暂时不要生我的气)。
除了深入细节、过于科学或教条之外,我将专注于数据科学的实际应用,它如何适应产品开发流程,以及我们如何从数据科学家(及相关人员)开展的大量活动中提取价值。
此外,我想写一下数据驱动和数据知情决策的概念,因为仍然不可能将我们所知的世界和人转化为数据库(还不行)——这让数据驱动方法的倡导者感到失望。
这一切是如何开始的?
Photo by Tanner Mardis on Unsplash
2008 年,领英和脸书的分析和数据主管 DJ Patil 博士和 Jeff Hammerbacher 创造了“数据科学”一词来描述新兴的研究领域,该领域专注于挖掘从零售和商业领域的接触点收集的数据中的隐藏价值。数据科学现在是一个总括术语,用于涵盖编程、统计、数据挖掘、机器学习、分析、商业智能、数据可视化和许多其他学科领域。科学是不断变化和发展的,因为它与技术和商业实践保持同步。
就像人类开始了解和接触的所有东西一样,人们有一种诱惑,那就是把它装进一个方形的盒子里,整理它,把它缩小到尽可能小的部分。
我们有一种趋势,也需要准确地定义和理解一切,以便我们能够在没有任何合理怀疑的情况下解释它(除了向世界宣扬我们所知的目标,以便我们可以被视为虚拟自我暴露时代的专家)。
然而,在数据科学的情况下,这仍然是不可能的。作为“到底什么是数据科学?”这个问题的答案,这是一个很难讨论的话题,很难找到共识没那么简单。然而,我会说…让它成长吧!让它扩展并证明它对我们在信息社会的未来是必不可少的。这是一个包含计算机科学、商业和数学的广阔、有影响力、包容、整体和美丽的领域,没有任何问题。
这一领域的大多数知识渊博的人都会同意,数据科学是一门科学和寻求真理的学科,它使用数据来提取知识和见解。数据科学是发展最快的功能之一,已经为各个行业和研究领域提供了巨大的价值。尽管如此,数据科学仍处于起步阶段,就像任何发展中的领域一样,给它的定义划定界限通常是很诱人的。我们认为,最重要的是为学科的有机发展留出空间,而不是对什么算数据科学或不算数据科学进行分类,或者争论为什么我们应该了解数据而不是数据驱动。
(通常,人们会在这里放一个维恩图,但我不会这样做。你可以从数百种已经生产的产品中选择一种,例如这里
Photo by Jacek Dylag on Unsplash
为什么数据科学很重要?
简答
因为我们的数字世界越来越复杂。
长答案 数字。网站。互联网。平台。很多。5G。生态系统。以及其他像这样的“单词”。
越来越多,这些世界在我们的日常生活中飞来飞去,好像我们在谈论水、面包或任何其他基本需求。我打赌你今天至少听过一次这样的话。除此之外,越来越多的产品、越来越多的互联网连接设备以及我们对“始终保持连接”的渴望的爆炸性组合,导致了用户生成数据的惊人增长,其中许多数据都与我们与数字系统的交互有关。例如,阅读这篇文章,我会看到你(某人)今天花了 x 分钟阅读这篇文章。因此,也因为我们是好奇的动物,人们对挖掘这些数据产生了极大的兴趣,以提取关键的见解,并希望构建更好的创新产品。智能手表就是一个明显的例子,这就引出了我的另一部分。
为什么数据科学家有这样的需求?
仅仅是因为它们(我的意思是,主要是数据)对产品创新、客户理解(包括购买过程)以及随后通过产品/销售增长带来的收入增长的预期价值。总是能实现吗?首先,这取决于你在寻找什么。
为了在竞争激烈的 accelerate 市场中获得、重新获得或保持竞争优势,公司的战略越来越基于他们如何从大量结构化和非结构化数据中收集、分析和提取见解(大数据分析在这里发挥着重要作用)—公司在这方面的能力可能是推动产品创新的巨大源泉。这就是为什么数据科学家、数据工程师、数据分析师等人才需求量大的原因,我认为这对我们的经济有好处。一个专业数据科学家团队可以在几乎每个行业对公司的未来产生巨大影响。
除了时髦的词语,就数据和产品开发的见解而言,以下是数据科学带给每个企业的一些例子:
预测和描述数据模型
也许,数据科学家最常见的角色是使用机器学习算法,利用之前经过预处理的可用数据来构建模型(即原型),或者实施数据挖掘模型,以更好地对数据进行分类,从而识别其中的模式。这些数据用于训练特定现象的机器学习模型(早期机器人),以预测未来趋势。这不是巫术,而是基于过去的数据和众所周知的统计模型。这不是天马行空的科学。深入到描述性分析模型,数据科学家可以对用户旅程进行更深入的探索和分析,以产生可操作的见解,最终为产品设定路线图和战略(例如,实施针对特定新客户群的全新金融产品)。正如你所看到的,公司可以从顶尖的产品分析专家那里获益良多。
构建正确的产品版本
许多公司在评估了所有可能的选项和试验的结果后,进行实验并交付产品。通常情况下,数据科学家会帮助设计正确的分析,以测试正确的功能,识别基于数据的现象假设,并使用收集的数据见解通过不断的反馈来指导产品团队。因此,这一数据科学家活动是一个重要的分析角色,可确保正确的产品以正确的功能进入市场。
你的生意健康吗?
数据科学家有能力访问企业健康状况。这项活动非常简单,因为业务成果就是数据。所以不需要想办法从复杂的来源获取数据。通常,数据已经在公司的信息系统中,可能在数据仓库或数据湖中。我认为,与上面的其他两项活动相比,评估一个产品或一个企业的健康状况相当“简单”。这通常是通过首先利用可测量的指标来定义产品成功来完成的。这些指标受到持续的监控,以确保公司有望实现目标。然而,由于世界并不完美(幸运的是),总会有异常值(“奇怪的”数据点),有经验的分析师将重点了解这些异常值背后的驱动因素、原因和可能的业务后果,通常采用数据可视化仪表板和报告。
Photo by Lukas Blazek on Unsplash
不是一种而是两种类型的数据科学家
数据科学的卖点是,它有助于构建下一代算法来改善决策(主要是在商业环境中),最重要的是,改善我们理解周围世界的方式(如果我们谈论社会和我们可以收集的关于自己的所有数据)。因此,数据科学专业人员分为两大类,一般来说:产品分析师和算法开发人员。
有些人会认为我们可以更好地区分专家和通才,但这两种分化类型并不相互排斥。然而,我们应该记住,数据科学家角色(以及相关角色)在其职业生涯中可能有多种形式,并且可能授予各种职能,这些职能在不同的公司和行业中可能会有显著或轻微的差异。毕竟,数据就是数据,但真正的数据科学家应该能够快速捕捉到她/他所工作的行业和业务的真正本质,这样,她/他在工作中脱颖而出的机会就会大得多。
一方面,产品分析师的角色是提供尽可能多的基于数据的分析。让我们想象一下,一个数据科学团队揭示了特定金融子产品购买量突然增长背后的原因。基于数据的决策将是根据该分析和特定原因采取行动,并引导投资组合策略的变化,而不是仅仅因为发现了趋势就调整整个银行金融服务投资组合。数据是有价值的输入,但不是做出决策时考虑的唯一因素。数据科学家的职责是利用手头的工具,更深入地分析问题/目标,从而能够为决策者提供尽可能好的信息。话虽如此,产品分析师有责任设定目标,并帮助定义产品路线和策略。专注于产品分析的 data scientist 的交付成果是一份解释可量化问题和识别机会的报告,以及基于数据的建议和解决方案。
另一方面,算法开发人员有责任将数据驱动的特性整合到产品中。两个简单易懂的例子是在 Google Photos 中引入面部检测算法,它可以检测照片中谁和你在一起,以及伟大的网飞推荐系统,它可以向用户显示他/她非常确定想要观看的电影/连续剧。这些专注于开发和升级算法的数据科学家利用数据来提高产品性能,以追求特定的最终目标,通常是预测结果。算法开发人员通常使用机器学习和其他复杂的算法技术,根据来自大量数据的输入进行预测。一般来说,算法开发人员会对提出的解决方案进行原型设计,并与工程团队密切合作,以在生产中实现它们。算法开发人员的可交付成果是提供给工程团队的原型代码和文档。
这两种类型的数据科学家都需要分析观点、定量技能和区分优先顺序的能力。虽然算法开发人员需要更复杂的技术知识和更接近工程师的软件工程技能水平,但产品分析师主要是问题解决者,他们基于业务、产品和与各种利益相关者有效沟通的能力而与众不同。由于算法开发人员技能的特殊性,他们可能不是一个组织所需要的。然而,所有公司,尤其是那些拥有大量用户的公司,都可以从团队中拥有产品分析师中受益匪浅,帮助整个组织解决产品战略和其他与数据相关的业务挑战。
数据驱动和数据通知的前景如何?
Photo by Franki Chamaki on Unsplash
想象一个世界,机器知道你的一切,比你自己知道的还多。它甚至可以根据你目前的维生素和营养素缺乏情况,知道你晚餐需要吃什么。用它对你的食物偏好的了解来总结这个,它实际上可以为你做饭。它还可以提前为你购物,并为你安排一周的用餐时间。它甚至可以知道你需要学习什么来实现你的职业目标,并为你推荐世界上最好的课程。最终,它知道你的选择并能为你做决定,知道什么对你是正确的,并计划你的生活。吓人?完美?也许吧。如果我们变成纯粹的数据驱动,如果我们允许人工智能接管我们生活中的大部分决策,这将是可能的。
在一个完美的世界里,有着完美的信息,并且完全了解你的系统的所有驱动因素以及它们如何相互作用,这两种方法将会融合。为了建立一个完美的模型,数据科学家需要很好地理解这种现象;数据和事件之间的关系可以用一个理想的模型来描述(以及一系列相关的特征)。为了将模型发展到这种完美的水平,我们需要继续通过其他主观措施来增强我们的决策,这些主观措施还不容易完全量化——因此,需要基于数据的决策。人类还有一句话要说。
智慧甚至难以用语言来表达。世界还不能变成完整的数据。随着人类开始对我们与物体的关系有更深入的感知,越来越多的过程将被自动化,未来将更加纯粹地由数据驱动。尽管如此,在未来几十年,基于数据的决策仍将极其重要,而基于数据的决策只会随着基于数据的人的进步而改进。
那么…你是数据驱动的吗?停下来。暂时如此。
这里就是人+机器出现的地方。
几年前,一项研究显示,在特定的国家和特定的月份,溺水人数的增加与同一个国家和月份冰淇淋消费量的增加之间存在着奇怪的巧合。研究人员试图找出这种强烈相关性的原因。然后,考虑了几个假设,从“这仅仅是一个巧合”到乍看起来可能合理的“人们去海滩时不应该吃冰淇淋”。
事实证明,下面的假设很快就被抛弃了。研究人员得出结论,实际上还有另一个事件导致了这两个事件的增加:是夏天经常性的炎热天气导致人们去海滩和吃更多的冰淇淋。这两件事并不相互依赖。事实上,它们是前者的结果。
这个故事很好地说明了一个众所周知的问题:因果关系和相关性不是一回事,如果思维模式完全由数据驱动,在数据分析活动中对这两个概念的误解可能会导致错误的结论和后续行动。例如,当两个变量(事件,在这种情况下,溺水人数和冰淇淋消费量)在同一时期显示出相同的统计趋势时,就是相关性,而因果关系则表明一个事件是另一个事件发生的结果。如果你想嘲笑其他一些例子,可以看看这些文章:第条 1、第条 2 和第条 3。
这对我们所有人都有意义,不是吗?当然,这是因为我们使用我们的智慧——我们一生中获得的关于世界的知识,在这里起着重要的作用。否则,如果在这种情况下必须纯粹由数据驱动决策(考虑到天气数据在分析中被低估),我们会看到政府机构错误地制定立法以避免更多的溺水死亡。
我们人类的智慧还不容易整合成完整的数据。
这是一个相当简单的例子,通常用于教授因果关系和相关性之间的区别,它很好地说明了人类需要依赖数据来做决策,但不要太依赖数据,不要纯粹由数据驱动,否则我们会犯很多错误。
在提高生产力和运营效率的背景下,生产系统就是一个很好的例子,说明了区分需要更多数据信息和简单数据驱动的决策流程的情况有多重要。对于像 James Finance 或 Feedzai 这样的公司来说,计算信用风险或识别任何交易的欺诈活动,对所有交易进行手动操作的成本高得惊人。
这个问题应用的另一个明显例子是在医学中,人工智能驱动的诊断和预后方法正在被使用。
因此,他们主要依赖数据科学和机器学习模型来增强他们的运营系统,并自动化所有必要的计算以达到他们的主要目标,要么计算最准确的信用风险,要么检测欺诈性的银行交易。
虽然在对结果统计相关性的信心水平较低的情况下,这些任务和决策制定中的大部分很可能是自动化的,但是决策过程并不纯粹是数据驱动的,而是经常是基于数据的。关于这个话题的一个很酷的故事在这里。
Photo by 2Photo Pots on Unsplash
世界将继续变得越来越由数据驱动;这就是为什么基于数据的决策会更有意义。所以,拥抱数据和数据科学。
它没有伤害,它很有趣,你将帮助社会实现它的目标。我预见,在数字信息时代,你对数据了解得越多,对数据流程组织得越好,你就能获得、保持或利用你的竞争优势。从长远来看,你所有的利益相关者都会满意,首先是你最大的资产:你的员工。数据科学在许多方面对任何企业都具有战略意义。
希望您更加了解数据科学在商业环境和整个社会中的重要作用。事实上,数据科学不仅可以应用于商业决策,还可以应用于广泛的垂直领域,包括生物统计学、天文学、分子生物学(不仅适用于银行、保险和零售等常见领域)。无论你在哪里找到大量的信息,你都会找到数据科学的应用。在我的下一篇文章中,我将关注数据科学对社会影响组织和公共机构的巨大潜在影响。这将引导我讨论一些数据科学驱动的倡议在非营利组织中发挥的关键作用,如数据科学促进社会公益和数据种类。
没有数据的数据科学
原文:https://towardsdatascience.com/data-science-with-no-data-b3c21acee17c?source=collection_archive---------20-----------------------
构建不访问数据集的 AI/ML 模型
在本文中,我们将演示如何生成数据集来构建机器学习模型。根据这个数据,医疗保险欺诈和滥用每年花费纳税人 600 亿美元。AI/ML 可以极大地帮助识别和防止欺诈和滥用,但由于隐私在医疗患者数据中至关重要,因此访问这些数据极其困难。这使得数据科学家无法生成可能对该领域产生积极影响的模型。有没有一种方法可以在不访问底层数据的情况下设计和开发模型?是的,你可以使用真实的随机生成的数据生成一个原型。具体来说,我们将建立一个自动生成的医疗保险数据集,并使用它来识别潜在的欺诈索赔。这些是我们将遵循的高级步骤:
- 生成患者数据集以开发模型预测。
- 预处理数据集以输入到模型中。
- 使用 K-最近邻算法训练模型以预测成本。
- 为了进行推断,我们将输入新的患者数据,并将实际成本与预测成本进行比较。如果差额超过阈值,我们会将其标记为潜在欺诈。
数据集
对于这个项目,我们将在 Jupyter 中使用 Python。完整的代码将发布在 Github 上。我们的数据集包含病人的人口统计信息以及他们的医疗费用。这些字段是:
其中:
- 年龄-1 到 100 之间的随机值
- 吸烟者——随机 0 或 1,调整为 30%的人口是吸烟者
- 性别—随机 0 或 1 (1 为女性)
- 身体质量指数—介于 5 和 45 之间的随机整数
- 糖尿病患者——随机调整 0 或 1,使 20%的人口患有糖尿病
- 成本=当年医疗费用。我使用的平均值是 9596 美元
成本是根据其他字段计算的。下面是创建患者数据的代码。
下一步是根据输入数据计算合理的成本。基本上,我们将为每个变量设定一个乘数,并将其应用于均值保险。对于年龄,我想使用如下所示的函数:
这种观点认为,儿童的健康成本在他们成年之前一直较高,然后随着年龄的增长又开始增加。在我看来,这是一个合理的分布,但整个过程的美妙之处在于,你可以调整公式,使之适合你。
其他字段很简单:
- 从上面的公式乘以年龄开始
- 将吸烟者的平均值增加 100%
- 为女性增加 25%的平均值(当我向我的同事展示这份草案时,这引起了争议。我用的数字来自这里。)
- 对于每一质量百分比,各添加 1%
- 将糖尿病患者的平均值增加 75%
我必须再次强调,所有这些值都可以调整到对你有意义的程度。我肯定不是医学领域的专家,但这些似乎只是一个很好的起点。稍后调整计算并生成新数据非常容易。最后一步是将计算出的成本作为正态分布的输入,在结果中引入方差。这里的想法只是为了获得一些我们可以在设计模型时利用的数据。下面是为数据集创建一行的代码。
此时,您可以调用 add_row 为您的数据集获取尽可能多的数据行。就是这样!现在您已经有了一些样本数据,可以用来开发模型原型。
预处理数据集以输入到模型中
下一步是将数据预处理成适合机器学习模型的形式。此流程的步骤如下:
- 将数据可视化,以确保它看起来合理。
- 将连续数据放入桶中。
- 将数据字段转换为一个热编码列。
可视化数据
在这里,我们希望确保我们生成的数据集看起来像我们期望的那样。我感兴趣的第一个字段是年龄字段,所以我绘制了它,以确保它与我上面显示的图表相对匹配。
它看起来非常接近我所期待的。随着我对数据和模型的了解越来越多,我可以随时回头修改公式来改进它。
将连续数据放入桶中
我们有两个字段,我称之为连续数据(即,它们不是布尔或分类)。这些字段是年龄和身体质量指数。年龄可以包含多达 100 个唯一值,身体质量指数可以有 40 个唯一值。这对于我们的模型来说可能变得难以处理,所以我们将它们分类到桶中。对于年龄和身体质量指数,我们将它们放入五个桶中。
现在让我们再次可视化数据,并确保一切看起来像预期的那样。
看起来相当不错,所以让我们进行下一步。
将数据字段转换为一个热编码列
如你所见,年龄组和身体质量指数组与糖尿病患者、吸烟者和性别的比例不同。例如,年龄组在 0 和 4 之间,而糖尿病患者在 0 和 1 之间。有很多方法可以解决这个问题,对于这个问题,我将使用一种叫做 one-hot 编码的技术。我们的想法是将 Age_group 列透视为包含零的五列,除了包含年龄组的列。例如,如果 Age_group ==2,则列的值将为 0,0,1,0,0。幸运的是,Python 有一个内置函数可以为我们完成这种转换。
运行上述代码后,我们的数据集看起来是这样的:
现在所有的输入字段都包含值 0 或 1。我们终于准备好开始建立一个基于数据的模型。
在此之前,我想说明两点。首先,我没有向这个模型添加任何空值检查或数据类型检查。当您开始处理“真正的”数据时,您会希望这样做。第二,您可能想知道为什么我首先要经历所有这些数据处理(也就是说,为什么我不生成一个看起来像完整过程的数据集。答案是,我想生成一个数据集,它看起来像是我可能从真实来源获得的。找到已经分桶和编码的数据集的可能性非常小。
训练模特
训练模型的第一步是将我们的数据分成训练集和测试集。我们将在训练集上训练模型,然后通过呈现模型没有看到的数据并将预测结果与实际结果进行比较来测试它。这被称为误差,,这是我们在训练模型时想要最小化的。在本教程中,计算误差的方法称为均方根误差,但您可以使用许多函数来计算。下面是分割数据的代码(在这种情况下,我们将 70%用于训练,30%用于测试)。
现在我们有了可用格式的数据,我们可以构建和训练一个模型来预测结果。在这个练习中,我们将使用K-最近邻模型。Python 支持我们可以利用的许多不同的模型,但是我觉得这是数据科学中最直观的模型。它是这样工作的:
假设我们有一个如下所示的数据集(X1 和 X2 是输入要素,而 Y 是结果值)。
现在,让我们绘制这些数据,看看它看起来像什么:
这样,我们可以通过对 K 个最近邻点的 Y 值进行平均来预测图上新点的 Y 值。对于这个例子,我们将设置 K = 4。红点将是我们新的输入点。
由于在本例中 K == 4,我们将取最接近新值的 4 个点的平均 Y 值,并用它来预测新点的 Y 值。在这种情况下,我们将使用突出显示的行:
对于我们的新点,Y 值的估计值是 60.5。
Python 的 sklearn 库有一个我们将利用的 K 近邻内置函数。唯一的诀窍是我们应该把 K 设为什么值?最简单的技术是用多个 K 值运行模型,并记录每个值的误差。我们可以利用这一点找到最佳的精确度。下面是实现这一点的代码:
运行上述代码后,我们可以绘制与 K 相关的错误率:
为了确定 K 的最佳值,我们将利用肘方法。图表的 Y 轴是误差值。X 轴是 K 值。查看图表,似乎 55 左右是 k 的最佳值。然而,“拐点”出现在 10 左右。之后,你的成绩开始变平,甚至变得更差。对于本教程,我将分裂的差异,并使用 K = 20。
对于这个模型和数据集,我们可以预测一个病人的医疗保健成本在 2400 美元以内(我们生成的数据的平均值约为 11,000 美元)。这不是很好,但是我们可以对我们的模型和数据生成进行许多改进。但是,它仍然有助于识别潜在的欺诈性索赔,这是我们接下来要做的。
识别欺诈索赔
现在,让我们看看我们是否能够识别一些欺诈性索赔。为此,我生成了 100 行新数据。这个项目的想法是,一名医生对保险索赔收取双倍费用。因此,90 行按原样使用 add_rows 函数,并将名为“欺诈”的标志设置为零。然后,我添加了 10 行,但我将成本增加了一倍,并将“欺诈”标志设置为 1。这是这个新数据集的图表。
绿点代表欺诈性索赔,而蓝点代表合法索赔。看起来我们有五个异常值需要调查。这种情况下,恰好都是诈骗。其他五个异常值隐藏在非欺诈声明中。发现 50%的欺诈性索赔似乎很不错,但我们能做得更好吗?
对于这个算法,我们将通过我们的模型运行所有 100 个索赔,并将实际成本除以预测成本(我将这个计算结果称为“错误”),并寻找异常值。下面是显示结果的图表:
在这张图表中,我们看到我们在识别异常值方面做得非常好。这是一个非常好的结果,有助于简化识别欺诈的流程。
结论
首先,我要感谢这篇文章,它介绍了使用 KNN 进行回归的过程。其次,我需要在这里澄清一下,让您知道我不是数学家,而且我相对来说是 Python 的新手,所以我很乐意得到您的反馈,告诉我如何在这两个方面改进代码。第三,代码已经发布在 GitHub 上,请随意在您的项目中使用它,并让我知道您的想法。
没有数学的数据科学
原文:https://towardsdatascience.com/data-science-with-no-math-fd502621728b?source=collection_archive---------14-----------------------
使用人工智能建立数学数据集
这是我的上一篇文章的附录,在文章的最后我必须补充一点,我不是数学家,而且我是 Python 新手。我添加这个是因为我努力想出一个数学公式来生成患者数据,这些数据将遵循对我有意义的趋势。本文的目标是生成 10,000 份将年龄与成本相关联的患者记录。我希望这种关联遵循如下模式:
Artists rendition of correlation pattern (not exact)
Y 轴是成本乘数;X 轴是年龄。这里的想法是,病人的费用开始时相对较高,随着他们接近某个年龄而降低,然后又开始增加。经过多次反复试验,我想出了一个公式,它可以生成一个类似这样的图形:
你可以明显看出这个公式有一些瑕疵。最明显的一点是,这意味着一旦病人到了 60 岁,费用就会稳定下来。在我想使用的相关性中,成本随着年龄的增长而不断增加。为了完成这篇文章,我觉得这已经足够了,我已经准备好开始编写实际的代码了。
在我发表文章后的几天里,我继续试图想出一个遵循我的相关性模式的公式,但没有成功。然后有一天我恍然大悟:为什么不让计算机算出公式。如果我能成功实现这一点,我就可以集中精力提高我的 Python 知识(这是我的首要目标),而不是找出一个数学公式。让我们使用机器学习来生成一个公式的近似值,我希望使用一些值作为输入。一旦我们训练了一个模型,我们就可以生成一个完整的样本数据集,输入到机器学习模型中。
第一步是设置一些值来训练我们的模型:
现在,如果我们绘制这个,你可以看到它大致遵循我在上面画的图:
我们现在可以使用这些数据作为神经网络的输入来建立一个模型,我们可以训练这个模型来预测我们进入的任何年龄:
from sklearn.neural_network import MLPRegressor
regr=MLPRegressor(hidden_layer_sizes=(30),
activation='tanh',
solver='lbfgs',
max_iter=20000)
model=regr.fit(np.array(age_df['Age']).reshape(-1,1),Age_df['Cost'])
MLPRegresser 中的 MLP 代表多层感知器,这是一种神经网络,是 sklearn Python 库的一部分。sklearn 库内置了许多回归器,使用它们来为您的应用程序找到最佳结果非常容易。所有回归变量都有一个拟合函数,用给定的输入来训练模型。
现在我们的模型已经训练好了,让我们生成一个测试数据集来看看我们的模型表现如何。
df = pd.DataFrame( {'Age': np.arange(0,100), 'Cost': model.predict(np.arange(0,100).reshape(-1, 1))})
在这种情况下,我们生成一个数据帧,其中包含 0 到 100 岁之间的每个年龄的一行,以及我们的模型为该年龄预测的成本。绘制结果给我们提供了:
这看起来更像我在文章顶部画的图。然而,我们不希望我们的模型预测一个时代的确切成本乘数。相反,我们希望使用预测作为基线来预测随机值。在这种情况下,我们将调整数据,使成本在预测的 20%以内。下面是在 Python 中如何做到这一点:
df['Cost'] = [i + i * random.uniform(-0.2, 0.2) for i in df['Cost']]
现在,如果我们绘制数据集,它看起来像这样:
现在,我们已经生成了 100 个值,大致符合文章顶部的图形。让我们使用这个模型生成一个 10,000 行的数据集。
df2 = pd.DataFrame( {'Age': (np.random.random_sample((10000,))*100).astype(int)})
df2['Cost'] = model.predict(np.array(df2['Age']).reshape(-1, 1))
这是这 10,000 个年龄/成本值的散点图,正如我们可以看到的,它仍然大致遵循文章顶部的绘图。
现在,我们将向数据集添加一些随机性,看看它看起来像什么:
df2['Cost'] = [i + i * random.uniform(-0.2, 0.2) for i in df2['Cost']]
我们现在可以将此作为数据集的一部分,使用年龄作为输入之一来预测医疗保健成本。这个概念可以有效地用来扩充 Kaggle 上的数据集,该数据集包含有价值的趋势,但只包含 1338 行。使用这种技术,我们可以生成我们想要输入到模型中的任意多的行。
擎天柱的数据科学。第 1 部分:简介。
原文:https://towardsdatascience.com/data-science-with-optimus-part-1-intro-1f3e2392b02a?source=collection_archive---------16-----------------------
第二部。
用 Python、Spark 和 Optimus 分解数据科学。你可以在这里阅读第二部《T4》。
Illustration by Héizel Vázquez
数据科学已经达到了新的复杂程度,当然也令人惊叹。我已经做了很多年了,我希望人们有一条清晰简单的道路来完成他们的工作。
我已经谈论数据科学和更多东西有一段时间了,但是是时候让我们一起动手编写代码了。
这是关于 Optimus、Spark 和 Python 的数据科学系列文章的开始。
擎天柱是什么?
https://github.com/ironmussa/Optimus
如果你关注我有一段时间了,你会知道我和铁-AI 团队创建了一个名为擎天柱的库。
擎天柱 V2 的诞生是为了让数据清理变得轻而易举。这个 API 被设计成对于新来的人来说非常简单,对于和熊猫一起工作的人来说也非常熟悉。Optimus 扩展了 Spark 数据帧的功能,增加了.rows
和.cols
属性。
使用 Optimus,您可以清理数据、准备数据、分析数据、创建剖面图和绘图,以及执行机器学习和深度学习,所有这些都以分布式方式进行,因为在后端,我们有 Spark、TensorFlow、Sparkling Water 和 Keras。
超级好用。就像熊猫的进化,有一块 dplyr,加入了 Keras 和 Spark。您用 Optimus 创建的代码可以在您的本地机器上运行,并且只需简单地更换主机,它就可以在您的本地集群或云中运行。
您将看到许多有趣的函数被创建来帮助数据科学周期的每一步。
Optimus 是数据科学敏捷方法的完美伴侣,因为它可以在过程的几乎所有步骤中帮助您,并且它可以轻松地连接到其他库和工具。
如果你想了解更多关于敏捷数据挖掘方法的信息,请查看:
[## 创建 ROI 驱动的数据科学实践的敏捷框架
数据科学是一个令人惊叹的研究领域,学术界和工业界都在积极发展…
www .商业科学. io](http://www.business-science.io/business/2018/08/21/agile-business-science-problem-framework.html)
安装擎天柱
安装过程非常简单。只需运行命令:
pip install optimuspyspark
你已经准备好摇滚了。
运行 Optimus(以及 Spark,Python 等。)
创建数据科学环境应该很容易。无论是尝试还是生产。当我开始思考这一系列文章时,我震惊地发现用免费工具为数据科学准备一个可再现的环境是多么困难。
一些参赛者是:
[## 谷歌联合实验室
编辑描述
colab.research.google.com](https://colab.research.google.com/) [## 微软 Azure 笔记本-在线 Jupyter 笔记本
提供对运行在微软 Azure 云上的 Jupyter 笔记本的免费在线访问。
notebooks.azure.com](https://notebooks.azure.com/) [## 主页- cnvrg
编辑描述
cnvrg.io](https://cnvrg.io/)
但毫无疑问,我的赢家是 MatrixDS:
[## 由数据科学家创建的数据科学家社区
编辑描述
matrixds.com](https://matrixds.com/)
有了这个工具,你就有了一个免费的 Python(用 JupyterLab)和 R(用 R Studio)环境,还有像 Shiny 和 Bokeh 这样的演示工具,等等。而且免费。您将能够运行回购中的所有内容:
[## FavioVazquez/ds-optimus
如何用 Optimus,Spark,Python 做数据科学?-法维奥巴斯克斯/ds-擎天柱
github.com](https://github.com/FavioVazquez/ds-optimus)
在 MatrixDS 内部有一个简单的项目分支:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
只要创建一个帐户,你就可以了。
旅程
Don’t worry if you don’t know what these logos are, I’ll explain them in next articles 😃
上面的路径是我将如何组织这个系列中不同的博客、教程和文章。我现在必须告诉你,我正在准备一门完整的课程,这门课程将从商业科学的商业角度介绍一些工具,你可以在这里看到更多信息:
[## 商业科学大学
从虚拟研讨会中学习,这些研讨会将带您了解解决问题的整个数据科学业务流程…
大学.商业-科学. io](https://university.business-science.io/)
第一部分在 MatrixDS 和 GitHub 上,所以你可以在 GitHub 上叉入,在 MatrixDS 上叉出。
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
在 MatrixDS 上,单击叉车:
[## FavioVazquez/ds-optimus
如何用 Optimus,Spark,Python 做数据科学?-法维奥巴斯克斯/ds-擎天柱
github.com](https://github.com/FavioVazquez/ds-optimus)
这是笔记本,但请在平台上查看:)
如需更新,请在 Twitter 和 LinkedIn 上关注我:)。
擎天柱的数据科学。第 2 部分:设置您的数据操作环境。
原文:https://towardsdatascience.com/data-science-with-optimus-part-2-setting-your-dataops-environment-248b0bd3bce3?source=collection_archive---------18-----------------------
用 Python、Spark 和 Optimus 分解数据科学。今天:数据科学的数据操作。..::此处第 1 部分::..在这里,我们将学习为我们的项目设置 Git、Travis CI 和 DVC。
Illustration by Héizel Vázquez
欢迎回到 Optimus 的数据科学系列。在第一部分中:
[## 擎天柱的数据科学。第 1 部分:简介。
用 Python、Spark 和 Optimus 分解数据科学。
towardsdatascience.com](/data-science-with-optimus-part-1-intro-1f3e2392b02a)
我们开始这个旅程,谈论擎天柱,火花和创造环境。为此,我们使用 MatrixDS:
[## 由数据科学家创建的数据科学家社区
数据社区的工作台 matrixds.com](https://matrixds.com/)
要访问回购,只需点击下方:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
在 MatrixDS 上,单击叉车:
GitHub 上也有回购:
[## FavioVazquez/ds-optimus
如何用 Optimus,Spark,Python 做数据科学?法维奥·巴斯克斯/ds-optimus
github.com](https://github.com/FavioVazquez/ds-optimus)
你只需要克隆它。
数据操作
来自数据厨房的优秀员工:
DataOps 可以提高数据分析团队创建和向用户发布新分析的能力。它需要敏捷的思维方式,还必须得到自动化平台的支持,该平台将现有工具整合到数据操作开发管道中。DataOps 涵盖了从数据采集到洞察交付的整个分析流程。
因此,对我来说,DataOps(来自数据操作)可以被认为是这些领域的交集:
其功能组件将包括:
你可以在我的朋友 Andreas Kretz 的出版物中读到更多关于这些话题的内容:
[## 数据科学管道工
数据科学背后的工程和大数据社区
medium.com](https://medium.com/plumbersofdatascience)
在 MatrixDS 上设置环境
https://matrixds.com/
我们将使用工具:TravisCI、DVC、Git 和 GitHub 在平台中创建一个简单(但健壮)的数据操作环境。
Git:
https://git-scm.com/
Git 是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小到大的项目。
在数据科学中,git 就像是我们的内部经理,拥有强大的记忆力。它会记住你做过的所有事情,你是如何做的,以及存储库中每个文件的历史。
Git 默认安装在 MatrixDS 中,但是我们需要设置两个配置。首先,让我们打开一个新的终端并键入:
**git config --global user.name "FIRST_NAME LAST_NAME"**
设定你的名字,然后
**git config --global user.email "MY_NAME@example.com"**
设置您的电子邮件。
我建议你放在那里的邮箱和你在 GitHub 上的邮箱是一样的。
要开始使用此存储库,只需克隆它:
**git clone** [**https://github.com/FavioVazquez/ds-optimus.git**](https://github.com/FavioVazquez/ds-optimus.git)
然后转到目录:
**cd ds-optimus**
因为这已经是一个 Git repo,所以您不需要初始化它,但是如果您是从零开始,您将需要键入:
git init
在您想要存储库的文件夹上。
DVC:
https://dvc.org/
DVC 或数据版本控制是一个用于机器学习项目和数据科学项目的开源版本控制系统。这段视频对此做了更好的解释:
因为我们使用的是 Python,我们将通过以下方式安装 DVC:
**pip install --user dvc**
正如文档所说,为了开始使用 DVC,你需要首先在你的项目目录中初始化它。DVC 不需要 Git,也可以在没有任何源代码控制管理系统的情况下工作,但是为了获得最佳体验,我们推荐在 Git 库之上使用 DVC。
重要评论:
现在 DVC 的 MatrixDS 中的一些配置有错误,所以为了运行 DVC,你必须在不同的文件夹中执行,而不是在/home/matrix 中。为此,请这样做(我假设您在默认文件夹中有原始项目):
cd /home/
sudo mkdir project
cd project
cp -r ../matrix/ds-optimus/ .
cd ds-optimus
因此,要开始在我们的回购中使用 DVC,我们只需键入:
**dvc init**
如果由于某种原因,这在 MatrixDS 上对您不起作用,请为 linux 安装 DVC:
**wget https://dvc.org/deb/dvc.list
sudo cp dvc.list /etc/apt/sources.list.d/
sudo apt-get update
sudo apt-get install dvc**
如果由于某种原因,您得到了错误:
W: chown to root:adm of file /var/log/apt/term.log failed - OpenLog (1: Operation not permitted)
模仿
sudo su
然后键入:
apt-get install dvc
好的,如果你在这个回购上运行 dvc init ,你会看到:
Adding '.dvc/state' to '.dvc/.gitignore'.
Adding '.dvc/lock' to '.dvc/.gitignore'.
Adding '.dvc/config.local' to '.dvc/.gitignore'.
Adding '.dvc/updater' to '.dvc/.gitignore'.
Adding '.dvc/updater.lock' to '.dvc/.gitignore'.
Adding '.dvc/state-journal' to '.dvc/.gitignore'.
Adding '.dvc/state-wal' to '.dvc/.gitignore'.
Adding '.dvc/cache' to '.dvc/.gitignore'.You can now commit the changes to git.+-----------------------------------------------------------------+
| | | |
| DVC has enabled anonymous aggregate usage analytics. | | |
| Read the analytics documentation (and how to opt-out) here: | | |
| [https://dvc.org/doc/user-guide/analytics](https://dvc.org/doc/user-guide/analytics) | | |
| | | |
+-----------------------------------------------------------------+What's next?
------------
- Check out the documentation: [https://dvc.org/doc](https://dvc.org/doc)
- Get help and share ideas: [https://dvc.org/chat](https://dvc.org/chat)
- Star us on GitHub: [https://github.com/iterative/dvc](https://github.com/iterative/dvc)
然后提交您的工作(如果您更改了文件夹,您可能需要再次配置 Git):
git add .
git commit -m "Add DVC to project"
特拉维斯 CI:
https://travis-ci.org/
Travis CI(持续集成)是我最喜欢的 CI 工具。持续集成是指频繁地合并小的代码变更,而不是在开发周期结束时合并大的变更。目标是通过以较小的增量开发和测试来构建更健康的软件。
这里隐藏的概念是自动测试你在做什么。当我们编程时,我们一直在做很多事情,我们在测试新的东西,尝试新的库等等,把事情搞砸并不罕见。CI 可以帮助你,因为你将开始做你的工作,用 Git 提交一点点,你应该有必要的测试来看看你做的新代码或分析是否影响(以好的或不好的方式)你的项目。
关于 Travis 和 CI 工具还有很多要了解的,但这里的计划是使用它,您将在途中学习。所以你要做的第一件事就是去:
[## Travis CI——满怀信心地测试和部署您的代码
编辑描述
travis-ci.org](https://travis-ci.org/)
并使用您的 GitHub 个人资料创建一个帐户。
然后你会去(我在这里假设你已经成功地从 GitHub 获得回购)然后在https://travis-ci.org/account/repositories你会选择 ds-optimus:
然后激活回购
如果一切顺利,您会看到类似这样的内容:
好的,现在这个是空的,因为我们还没有任何东西可以测试。这很好,将在下面的文章中讨论这个问题。但是现在我们需要构建将触发“travis builds”的基本文件。
我们需要一个. travis.yml 文件,这是它应该包含的基本内容:
language: python
python:
- "3.6"
# Before upgrade pip and pytest
before_install:
- pip install --upgrade pip
- pip install pytest
# command to install dependencies
install:
- pip install -r requirements.txt
# command to run tests
#script: pytest
正如你所看到的,我们还需要一个 requirements.txt 文件,在我们的例子中,现在只有 optimus。
如果你在 GitHub 上有一个项目的分支,确保将我的主人添加为上游,因为文件已经在那里了。
如果你不知道如何添加一个上游,以下是方法:
[## 如何使下游的 git 存储库跟上上游存储库的变化
本文演示了如何在您执行…
medium.com](https://medium.com/sweetmeat/how-to-keep-a-downstream-git-repository-current-with-upstream-repository-changes-10b76fad6d97)
然后,我们必须提交将“. travis.yml”添加到项目中的提交。
当你再次去特拉维斯时,你会看到你的第一件作品:
现在它会给我们一个错误,因为我们还没有创建任何测试来运行:
但是不要担心,我们以后会讲到的。
感谢您看到更新,并开始为此项目设置您的环境。如果您有任何问题,请在此写信给我:
[## 法维奥·瓦兹奎-科学与数据公司创始人/首席数据科学家| LinkedIn
加入 LinkedIn ‼️‼️重要提示:由于 LinkedIn 技术限制,我现在只能接受连接请求…
www.linkedin.com](https://www.linkedin.com/in/faviovazquez/)
擎天柱的数据科学。第 3 部分:理解您的数据。
原文:https://towardsdatascience.com/data-science-with-optimus-part-3-understanding-your-data-4b01c12c5907?source=collection_archive---------29-----------------------
第一部分,第二部分。
在疯狂地创建模型之前,你首先需要理解你的数据。本教程将向您解释如何在我们正在设置的环境中做到这一点。
Illustration by Héizel Vázquez
正如我之前所说:
数据第一。
但即使在那之前(像宇宙大爆炸之前),你也需要理解数学、微积分、统计学和你正在解决的问题。
大型科技公司使用的秘密武器是对他们的数据的深刻理解和对项目非常具体的定义。
正如您可以想象的那样,数据现在是公司的重要资产(可能是最重要的资产)。所以在你可以应用机器学习或深度学习之前,你需要拥有它,知道你拥有什么,理解它,治理它,清理它,分析它,标准化它(也许更多),然后你才能想到使用它。
这篇文章是对一个用熊猫做的伟大回购的修改,为什么?因为你可以比较所有的代码,看看如何在熊猫和用火花和擎天柱。这是原始回购协议:
[## 吉普萨莫拉/熊猫 _ 练习
练习你的熊猫技能!在 GitHub 上创建一个帐户,为 guipsamora/pandas_exercises 开发做贡献。
github.com](https://github.com/guipsamora/pandas_exercises)
获取数据和代码
对于这里的一切,我们使用矩阵。有了这个工具,你就有了一个免费的 Python(用 JupyterLab 和 Jupyter Notebook)和 R(用 R Studio)环境,还有像 Shiny 和 Bokeh 等演示工具。而且免费。看一看:
[## 由数据科学家创建的数据科学家社区
数据社区的工作台 matrixds.com](https://matrixds.com/)
要访问回购,只需点击下方:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
在 MatrixDS 上,单击叉车:
GitHub 上也有回购:
[## FavioVazquez/ds-optimus
如何用 Optimus,Spark,Python 做数据科学?法维奥·巴斯克斯/ds-optimus
github.com](https://github.com/FavioVazquez/ds-optimus)
你只需要克隆它。
如果您回忆起其他部分的图像:
我们现在将关注数据争论和数据可视化部分。
第 0 部分。为 Optimus 设置环境
首先创建一个 JupyterLab 会话,打开终端并键入:
sudo update-alternatives --config java
你会看到:
There are 2 choices for the alternative java (providing /usr/bin/java).Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1101 manual mode
2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
选择数字 2。我们需要它,因为 Spark 和 Optimus 与 Java 8 配合得最好。
现在,确保您已经安装了 Optimus,如果没有,只需键入:
pip install — user optimuspyspark
第一部分。获取和了解您的数据(基础)
我们将使用的第一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
你可以看到她所有的细节:
第二部分。过滤和排序您的数据
我们将使用的下一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
GitHub:
第三部分。将您的数据分组
我们将使用的下一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
GitHub:
第四部分。连接您的数据
我们将使用的下一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
GitHub:
第五部分。创建数据统计
我们将使用的下一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
GitHub:
第六部分。可视化您的数据
我们将使用的下一个笔记本是这样的(MatrixDS):
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
GitHub:
https://gist . github . com/FavioVazquez/1700 B1 a 941 b 17532 fa 6 BF 09 e 9 DFD 8 e3e
感谢继续阅读这些文章,它们制作起来非常有趣。如果您有任何问题,请通过我的 LinkedIn 或 Twitter 联系我:
[## 法维奥瓦兹奎-教员,教授和数据科学的中小企业-荣誉退休研究所…
拉斐尔·乌达内塔大学计算工程、科学计算活动和社会学士学位…
www.linkedin.com](https://www.linkedin.com/in/faviovazquez/) [## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特
Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…
twitter.com](https://twitter.com/faviovaz)
没有计算机科学的数据科学
原文:https://towardsdatascience.com/data-science-without-the-computer-science-a9484dea7fcb?source=collection_archive---------20-----------------------
无需学习 Docker,运行可重用的独立 Jupyter 环境的更简单方法
我们都有一些战争故事。无法在 Windows 上托管特定 conda 包的 virtualenv。试图进行 Python 升级,清除了操作系统的本机二进制文件。或者一个精心策划的 virtualenv 最终做了我们需要的一切;但是我们不敢进行下一步的配置更改,以免打乱我们迄今为止的所有努力…
环境管理对数据科学家来说很重要,但是您真的希望它全部正常工作。我从多位数据科学家那里听到了这样的评论:我们可能应该使用 Docker 或其他东西来标准化和隔离我们的环境——但我们不想学习更多的计算机科学。
ContainDS 是用于 Windows 或 Mac 的新软件,提供了一个简单的用户界面,用于在 Docker 提供的独立虚拟环境中运行 Jupyter Lab 或笔记本电脑,而无需学习如何从命令行控制 Docker。
Jupyter Logo © 2019 Project Jupyter
基于一系列现成的环境(例如安装了 Tensorflow 的 Jupyter 或 SciPy),您只需指定一个工作区(即您计算机上用于存储笔记本文件和任何数据的文件夹),然后单击 ContainDS 将启动一个虚拟的 Linux“容器”,您可以在 web 浏览器中通过 Jupyter 直接访问该容器。它甚至照顾 Jupyter 的密码令牌,所以你不必复制和粘贴它…
您可以安装您需要的任何其他 conda 或 pip 包,然后克隆您的环境以供其他项目重用或与您的同事共享。
让我开始
虽然 ContainDS 试图保护你远离 Docker 的细节,但是你当然需要让 Docker 在你的计算机后台运行。
所以在你的电脑上安装 Docker 桌面’(社区版)。包括系统要求在内的更多细节在 Docker 网站上,如果你在 Docker Hub 上注册了一个帐户,你可以在那里下载安装程序。更直接的是,你可以使用链接直接下载安装程序:T2 Docker 桌面 Windows 版 T3 或 T4 Docker 桌面 Mac 版 T5。
接下来,从我们的下载页面安装 Windows 或 Mac 的 ContainDS。
选择基本环境
一旦 ContainDS 启动并运行,并且检测到 Docker 在您的计算机上正确运行,您将看到“新容器”屏幕:
选择一个推荐的 Jupyter 图片——也许是“datascience-notebook ”,开始使用 NumPy、Pandas 等安装 Python。单击选择,然后您将看到配置屏幕:
您真正需要输入的只是一个工作空间路径。这只是您要存储笔记本文件和任何数据的文件夹的位置。如果您已经知道要处理哪些文件,它可以是一个现有的文件夹,或者您可以输入 ContainDS 将为您创建的新文件夹路径。
或者,您可以更改容器名称以供将来参考,并且您可以通过取消选中“Jupyter Lab”复选框来选择启动 Jupyter Notebook,而不是最新的 Jupyter Lab web 前端。
单击创建开始下载图像并创建容器。第一次使用特定图像时,可能需要一段时间来下载,但它会被缓存以供将来使用。
直接发射到木星
当容器准备好时,您将看到熟悉的 Jupyter 控制台日志:
单击 web 按钮,您的默认 WEB 浏览器将会打开,并且已经连接到 Jupyter:
您会注意到 web 端口是由 ContainDS 自动分配的,您不需要复制和粘贴任何令牌或密码,因为 ContainDS 已经为您完成了这项工作。
完善您的环境
大概就是这样。现在你有了 Jupyter 环境,你可以像以前一样与它互动。
要安装其他软件包,您可以在 Jupyter Lab 中打开一个终端窗口(单击+图标,然后从启动器中选择终端)。本质上,此时您只是在 Linux 操作系统中——这可以使一些软件包的安装支持更加容易。Jupyter 图像都基于 conda 虚拟环境,因此您可以使用conda install
或pip install
。
或者,直接在你的笔记本里使用魔法命令(如!pip install <package>
)。
不要完全忘记 Docker
所以使用 ContainDS 意味着您不必学习任何 Docker 命令!当然,知道您的环境是通过 Docker 运行的仍然很重要。你需要让 Docker 在后台运行。如果您使用 ContainDS 中的 stop 按钮停止容器运行,那么如果您以后重新启动它,它可能会分配一个新端口—因此您可能需要再次单击 WEB 按钮,在新端口上启动一个新的 Jupyter 会话。
如果您完全删除一个容器,那么它不会影响您的工作区文件夹,但是您当然会丢失您对 conda 环境所做的任何修改。要首先保留此类环境更改,并使您能够在将来重用该环境,请单击 ContainDS 中的 Clone 选项卡来拍摄快照。
集装箱真正为我做了什么?
在这个阶段,您真正要做的是基于 Jupyter 映像启动一个 Docker 容器,这个容器可以通过 Docker 命令行获得。ContainDS 使这变得更容易,特别是在“绑定”工作区文件夹、处理 Jupyter 令牌和定位 web 端口方面。
ContainDS 实际上是建立在 Docker 自己的捆绑 GUI 应用程序之上,名为kite matic——为数据科学家更新和定制。
展望未来,数据科学家可能需要 Docker 完成许多任务和配置,ContainDS 的目的是继续为您完成这些任务。为此,我们需要您的反馈和想法!因此,请与联系,让我们更多地了解您希望通过新的集装箱化 Jupyter 环境实现的目标…
Photo by frank mckenna on Unsplash
拥有一个根据你的需求定制的 GUI 可以让事情变得更快更简单,并且省去了学习 Docker 更多细节的麻烦。但是如果你确实想看到一些 Docker 命令,你可能需要手动实现它,请参阅 Dataquest 的教程:为数据科学运行 Docker 化的 Jupyter 服务器。
你需要知道的数据科学-诊断线性回归
原文:https://towardsdatascience.com/data-science-you-need-to-know-linear-regression-2b6d966bc4a8?source=collection_archive---------16-----------------------
这是我的“你需要了解的数据科学系列”的一部分,探索数据科学中经常被忽视的方面。 第一部 和 第二部 推荐阅读。第 3 部分即将推出!
在本帖中,我们将介绍大多数学生最先学习的机器学习算法之一,线性回归。
你会看到很多跨越数据分析和数据科学的线性回归,不幸的是,很多都很弱。这通常有两个原因:
- 回归模型严重违反了一个或多个关键的统计假设
- 回归没有提供详细的诊断,因此无法评估其稳健性(以及其结论)
在这篇文章中,我们将学习如何避免这些问题,以及如何有效地评估和评论已发布的回归模型。我们将从 A/B 测试评估的角度来处理这个问题,但是同样的原则也适用于生产化的回归模型(即后端的模型)。
理论:回归独立数据
在我们建立回归模型之前,重要的是要彻底研究数据(例如通过配对图和密度图)并理解我们的 A/B 测试的统计能力(参见 第 1 部分 和 第 2 部分 )。
一旦我们探索了数据,我们就可以开始建立一个线性模型。用于线性回归的 R/Python 代码的简单性可能具有欺骗性。虽然你可以通过简单的lm(x,y),
产生结果,但你需要了解这些结果是否可靠。
线性回归有一组与其相关的假设和警告,在我们解释回归结果之前,需要对其进行检查。如果我们违反这些假设,那么代码仍将运行,您仍将获得系数、p 值和预测(等等),但它们很可能毫无意义!
一点数据科学可能是一件危险的事情!
好模型的标准
在我们着手模型构建之前,最好在头脑中有一个好模型的定义。我们将根据以下标准定义一个好的模型:
- 模型能够解释/预测 Y 值的全范围
- 模型可以准确地提供置信区间,以告知我们对不确定性(和重要性)的理解
- 异常值不会扭曲模型
我们可以通过满足以下线性回归标准来满足这些要求:
- X 和 Y 之间的关系是线性的,或者可以是线性的。
- 误差与 X 无关(也称为同质性)
- 变量大多彼此不相关
- 残差呈正态分布
因此,为了构建一个好的模型,我们需要理解和评估上面概述的基本假设。我们将通过一系列的图来实现这一点,这些图检查了许多东西,但也许最重要的是模型的残差:
- 残差是模型预测值和实际观测值之间的差值。
我们将首先通过一个表现良好的回归来探索这些图,以了解这些图在最佳情况下的样子,然后这些图如何对异方差和非线性做出反应。
理论:表现良好的回归
首先,一个表现良好的回归模型。我们将(希望)记住直线的定义:
Y=β。X+c
其中,β是系数矩阵,X 是常数矩阵,c 是截距。
我们将使用这个等式来理解回归,并添加一个 e 项来表示我们观察值周围的独立误差。运行回归时,我们的目标是确定:
Y=β。X+c+e
这样我们就可以精确地确定系数 β 的大小(因此我们的处理效果)和 e (因此我们可以确定其显著性)。
让我们用一个实例来演示回归是如何工作的。首先,让我们定义我们的关系(目的是从回归结果中恢复这些值):
- 截距= 10
- β = 2
- 误差项= 3
现在,我们将基于该等式模拟 200 个独立值:
set.seed(111)
ex1 <- data.frame("Xvals"=runif(1:200, min=1,max=10) )
ex1$Yvals = 10 + 2*ex1$Xvals + rnorm(200,0,3) *# y = \beta . X +c +e*
head(ex1[c("Xvals","Yvals")])
屈服:
## Xvals Yvals
## 1 6.336832 24.47252
## 2 7.538330 21.59567
## 3 4.333798 19.98488
## 4 5.634314 21.88319
## 5 4.398969 16.70039
## 6 4.765036 16.75019
现在让我们将 Xvals 回归到 Yvals,来问:“Xvals 和 Yvals 之间有什么关联?”。
exreg1 <- lm(Yvals~Xvals, data=ex1)
由于我们的回归相对简单,只有一个独立变量,我们可以很容易地用一个简单的图来显示结果:
我们可以看到黑线很好地描述了Xvals
和Yvals
之间的关系。还要注意,蓝点距离回归线相对等距离;这是我们在回归分析中非常关心的事情。从每个点(蓝色)到模型(黑线)的距离称为残差,我们将这些收集在一起(pl。残差)来了解我们的模型性能(下图)。
在分析模型残差之前,让我们快速检查一下回归总结:
在继续之前,让我们回顾一下这些术语的含义:
- P 值:P 值来源于检验零假设系数= 0 。如果 p 值低于某个阈值(通常为 0.05),那么我们拒绝零假设并将结果称为“显著”。注意,统计学中的显著性是指“可靠”之类的意思。因此,系数可能非常小,但仍具有统计学意义(可靠)。
- 系数:当所有其他预测因子保持不变时,每个系数估计 X 中每单位增加的平均响应的变化。
- 常数:我们方程中的截距项。
- 观察值:数据帧中的行数。
- R^2 R 平方是数据与拟合回归线接近程度的统计度量。它也被称为决定系数,或多元回归的多重决定系数。r 平方=解释偏差/总偏差。r 平方不能确定系数估计和预测是否有偏差,这就是为什么您必须评估残差图。r 平方并不表示回归模型是否合适。对于好的模型,可以使用低 R 平方值,对于不符合数据的模型,可以使用高 R 平方值!
- 调整后的 r^2调整后的 r 平方比较包含不同数量预测因子的回归模型的解释能力。调整后的 R-squared 是 R-squared 的修改版本,已针对模型中的预测因子数量进行了调整。只有当新项对模型的改善程度超过偶然情况下的预期时,调整后的 R 平方才会增加。当预测者偶然对模型的改进小于预期时,它会减少。调整后的 R 平方可以是负值,但通常不是。它总是低于 R 的平方。
- F 统计量变量的加入是否整体上改善了回归模型?F 统计报告了零假设,即我们当前的模型与仅截距模型无法区分。拒绝这一假设(p < 0.05)表明包含变量是有帮助的。
我们可以看到,我们很好地恢复了截距和系数项(加上一些与误差项成比例的置信区间):
- 截距 = 9.79
- β = 2.07
接下来,让我们检查诊断图,以评估模型如何满足我们上面陈述的假设:
让我们一个接一个地分析这些情节:
- 该图显示了模型残差与拟合值。理想情况下,我们希望残差在 0 处的黑色虚线周围均匀分布。红线表示平均残值,理想情况下位于 0.0 黑线上
- 不平坦的红线表示我们的数据可能是非线性的(使用上面的“Xvals vs Yvals”图,思考这是为什么)。
- 在 0.0 线周围具有不均匀或不对称散布的点代表异方差或非线性(再次思考为什么会这样)。
- 这是残差的 QQ 图。趋势偏离对角线(代表完全正态)表明我们的残差是非正态的(更多信息参见 AMP 第 1 课)。我们在这里看不到残差的任何趋势(高低 X 处的分散较小且不明显,因为它不构成趋势)。
- 比例-位置图显示了作为拟合值函数的标准化残差的平方根。这类似于我们上面的残差与拟合图,应该以类似的方式解释。
- 最后,杠杆图测量每个点对我们最终产出的影响与该点的剩余。本质上,这个图表将帮助我们发现对我们的模型有巨大影响的数据点。如果一些点具有高杠杆和高(绝对)残值,那么它们将比其他数据点更多地扭曲我们的模型。库克距离(虚线)是一个结合了剩余规模和杠杆的度量。
- 请注意,我们在上面没有看到任何库克的距离线,因为我们的库克值太小了(这是一件好事!)
总的来说,这些图看起来很合理,我很高兴我们满足了线性模型的要求。
总之,这种回归看起来非常有效:
- 残差与拟合图显示了一条平坦的直线,并且在残差中没有明显的模式
- 残差的 QQ 图看起来也很合理。虽然我们可以从虚线上看到一些偏差,但这些并不是我所说的“趋势偏差”。我们可以对残差进行夏皮罗检验来证实这一点(p= 0.2613),但一般来说,我建议简单地检查 QQ 图,而不是重复进行假设检验。
- 我们的比例-位置图同样是平坦的,没有模式
- 我们的残差与杠杆图没有显示任何明显的异常值。
理论:非线性关系
现在让我们来看一个表现不佳的回归,具体来说,我们将检查由非线性关系产生的诊断图,并将它们与上面的图进行比较:
嗯,很明显,我们已经尝试用线性模型来拟合非线性关系了!因此,这个模型是无用的(记住我们在本节开始时对好模型的定义)。请注意,虽然我们可以清楚地看到我们的模型很糟糕(即,在给定一组 x 的情况下,它在预测 Ys 方面做得不好),但我们仍然能够实现 0.856 的巨大 R 平方。不要盲目追随 R-squared 而被遗忘!
让我们看看诊断图:
将这些图与表现良好的回归图进行比较,以了解它们在非理想条件下如何变化。同样,花一些时间尝试理解这些图与上面简单的 X-Y 图的关系。
例如:
- 我们可以注意到,在残差与拟合图中,我们的残差与零相交两次,我们的回归线也与非线性数据点趋势相交两次。
- 同样,我们的比例位置图
- 还要注意我们的残差与杠杆图,我们清楚地看到了一个更高杠杆和更高残差的趋势(因为我们的数据点离我们的趋势线越来越远)
如果我们更仔细地检查我们的 QQplot:
- 我们会注意到,我们的残差图总结了我们在 Xvar、Yvar 图中看到的内容。在 X 的极值处,我们倾向于偏离拟合线。
花一些时间检查这些图中的关系,以提高你快速诊断违反了哪个线性模型假设的能力。
理论:表现不佳的回归,异方差数据
最后,让我们看看极端异方差是什么样子的(记住:异方差是当我们的误差项依赖于 X 时):
注意锥形数据表明异方差。
同样,将其与我们表现良好的回归进行比较,以了解异方差数据如何出现在回归图中(提示:仔细检查残差与拟合图,以及尺度位置图)。
记住——在一个多因素的真实回归分析中,你不会有一个简单的 Xvar-Yvar 回归图来轻松地诊断你的模型,所以你需要习惯于单独使用这些诊断!
最后,我想介绍一个图,它不是由 R 自动生成的,但是在回归诊断中非常有用。在此图中,我们将绘制拟合值与真实(观察)值的对比图,以了解模型的表现,让我们为上述回归示例绘制这些图表:
花些时间检查和理解这些图,以及这些模型如何与我们上面概述的标准进行比较:
- 模型能够解释低 Y 值和高 Y 值
- 模型可以准确地提供置信区间,以告知我们对可变性(和显著性)的理解
- 异常值不会扭曲模型
- 给定一组 x,我们的模型可以准确地预测 Ys
理论:数据转换
改进回归诊断图的方法之一是转换数据。一般来说,要么 X 变量,要么 Y 变量都会被转换。我们将在这里集中讨论 Y 变量转换,因为它们更常用。
常见的 y 变换包括:
- ln 或 log10 转换
- 简单的幂变换(平方根或平方)
通常假设,当 y 变量被转换时,我们可以简单地对模型系数进行反向转换(即,应用反函数)以使其可解释。
这是不对的!用以更复杂的方式改变系数来转换 y 变量!
通常,对 y 变换数据的系数进行反向变换需要求解复杂的微分方程(这里有一个明显的例外,将在本课的后面讲述),并且不像反向变换那样简单。让我们通过返回到我们表现良好的回归来证明这一点:
还记得我们计算 Y 使得 Y=10+2βX+eY=10+2βX+e(其中 e 是我们的误差项)。我们可以看到这种回归很好地将这个反馈给了我们。
相反,让我们回归 Y 的平方根,我们可以看到我们的诊断图看起来仍然合理:
我们的系数是:
这次我们得到的截距是 3.079,β是 0.253。如果我们平方这些(平方是平方根的倒数),那么我们得到:
- 截距= 9.48
- Xvals = 0.064
显然,这些与原始公式或原始回归都没有关系!
如果变换变量是必要的,那么选择一个保留一些物理意义的变换是明智的。例如求面积的平方根(这将产生长度)。转换的一个重要危险是在数据中引入新的责难,例如,将“客户支出(美元)的变化”平方会使所有数据为正,从而使模型解释变得不可能。
这些转换的一个显著的例外是自然对数(在 r: log()
中)。当 Y 数据进行对数变换时,系数可以解释为 x 增加一个单位时 Y 的预期变化百分比。
摘要
- 不要盲目的变换和反变换数据!
- 转换后的数据通常会产生无法解释的系数(没有求解适当的方程)
- 自然对数转换是这个规则的一个重要例外。ln 变换产生系数,其中 X 增加一个单位,y 增加β÷100β÷100。
帖子摘要:
- 回归有一些假设,必须满足这些假设才能产生有意义的结果和良好的预测。
- 诊断图将允许您评估您的模型满足这些假设的程度。
- 数据的转换需要仔细考虑。
- 始终为您创建的任何模型提供诊断图!您可以将这些内容放在文档/演示文稿末尾的附录中。
数据科学最被误解的英雄
原文:https://towardsdatascience.com/data-sciences-most-misunderstood-hero-2705da366f40?source=collection_archive---------0-----------------------
为什么像对待二等公民一样对待分析会伤害你
This article is an extended 2-in-1 remix of my HBR article and TDS article about analysts.
小心你崇拜的技能,因为不明智的选择会带来毁灭性的影响。除了管理不善的团队和不必要的雇佣,你会看到真正的英雄辞职或重新教育自己以适应你今天的动机。这种现象的一个主要例子是在分析。
购买奖品
在数据科学的顶级奖杯是难以捉摸的,这并不奇怪:“全栈”数据科学家意味着掌握机器学习、统计和分析。当团队找不到三合一的博学家时,他们会着眼于在单一来源专家中吸引最令人印象深刻的奖项。谁得到了基座?
当今数据科学的时尚偏爱带有一丝科幻色彩的浮华精致,使得人工智能和机器学习成为招聘圈的宠儿。阿尔法点的另一个挑战者来自统计学,这要归功于长达一个世纪的严谨和数学优势的声誉。分析师呢?
作为二等公民的分析
如果你的主要技能是分析(或数据挖掘或商业智能),那么当你前面提到的同胞从你身边走过时,你的自信心很可能会受到打击,就业市场会毫不隐晦地暗示你要提高技能加入他们。
优秀的分析师是数据工作取得成效的先决条件。让他们放弃你是很危险的,但是如果你低估了他们,他们就会这么做。
门外汉很少理解的是,数据科学保护伞下的三种职业彼此完全不同。他们可能使用相同的方程式,但这就是相似之处。优秀的分析师绝不是其他数据科学的马马虎虎,而是数据工作取得成效的先决条件。让他们放弃你是很危险的,但是如果你低估了他们,他们就会这么做。
尊严相同
与其让分析师发展他们的统计或机器学习技能,不如考虑鼓励他们首先寻求自己学科的高度。数据科学是一种野兽,一个领域的卓越胜过两个领域的平庸。
三个数据科学学科各有所长。统计员带来严谨,ML 工程师带来性能,分析师带来速度。
在 peak expertise,这三家公司都同样受人尊敬,但它们提供的服务大相径庭。为了理解其中的微妙之处,让我们来看看在每一个数据科学学科中真正优秀意味着什么,它们带来了什么价值,以及在每份工作中生存需要哪些性格特征。
卓越的统计学:严谨
作为在数据之外得出安全结论的专家,统计学家是你在这个不确定的世界里防止欺骗自己的最好保护。对他们来说,草率地推断比让你的大脑一片空白更大的罪过,所以期待一个好的统计学家给你的繁荣踩刹车。他们总是小心翼翼,非常关心所用的方法对于问题来说是否正确,并且为从手头的信息中得出哪些推论是有效的而苦恼。
大多数人没有意识到的是统计学家本质上是认识论者。因为没有魔法能把不确定性变成确定性,所以他们的角色不是产生真相,而是把合意的假设和可用的信息进行合理的整合。
结果呢?帮助领导者以风险可控的方式做出重要决策的视角。
毫不奇怪,许多统计学家对那些学习方程式却没有吸收任何哲学的“暴发户”反应激烈。如果与统计学家打交道似乎令人疲惫不堪,这里有一个快速解决办法:不要得出任何超出你的数据的结论,你就不需要他们的服务了。说起来容易做起来难,对吗?尤其是如果你想做一个重要的发射决定。)
卓越的机器学习:性能
如果你对“【T4,我打赌你无法建立一个以 99.99999%的准确率通过测试的模型”的回答是“【T6,看我的”,那么你可能是一名应用机器学习 /人工智能工程师。“随着编码印章建立原型和生产系统工作以及几年来每小时都失败的顽强韧性(如果这是必要的话),机器学习专家知道他们不会在教科书中找到完美的解决方案。相反,他们将参与一场试错的马拉松。对他们尝试每个新选项需要多长时间有很好的直觉是一个巨大的优势,比算法如何工作的深入了解更有价值(尽管两者都有很好)。
“I’ll make it work.” -Engineer
结果如何?一个能够很好地自动化棘手任务的系统,足以通过统计员的严格测试,并提供商业领袖所要求的大胆性能。
性能不仅仅意味着明确一个指标,它还意味着在生产中表现良好的可靠、可伸缩和易于维护的模型。卓越的工程设计是必须的。
宽与深
前两个角色的共同点是他们都为特定的问题提供高强度的解决方案。如果他们处理的问题不值得解决,你最终会浪费他们的时间和你的钱。商业领袖们经常感叹的是,我们的数据科学团队毫无用处。而问题通常在于缺乏分析学的专业知识。**
统计学家和机器学习工程师是又窄又深(顺便说一下,是兔子洞的形状)的工人,所以让他们指出值得努力的问题真的很重要。如果你的专家正在小心翼翼地解决错误的问题,你在数据科学上的投资当然会遭受低回报。为了确保你能很好地利用窄而深的专家,你要么需要确定你已经有了正确的问题,要么你需要一个宽而浅的方法来找到一个。
卓越的分析:速度
最好的分析师是速度快如闪电的程序员,他们可以快速浏览大量数据集,比其他专家所说的“白板”更快地发现和展现潜在的见解。他们半马虎的编码风格困扰着传统的软件工程师…直到把他们远远甩在身后。速度是最高的美德,紧随其后的是不会错过潜在有用的宝石的特性。掌握信息的视觉呈现有助于解决大脑方面的速度瓶颈:美丽而有效的情节可以让大脑更快地提取信息,这在潜在洞察力的时间方面有所回报。
在统计学家和 ML folk 慢的地方,分析师是决策者和其他数据科学同事灵感的旋风。
****结果:企业把握住了脉搏,看到了以前未知的未知。这产生了灵感,帮助决策者选择有价值的任务,派统计学家和 ML 工程师去做,把他们从数学上令人印象深刻的无用兔子洞的挖掘中拯救出来。
草率的胡说八道还是一流的故事?
“但是,”反对统计学家,“他们所谓的见解,大部分都是废话。”他们的意思是他们的探索结果可能只反映噪音。也许吧,但事情不止如此。**
分析师是数据故事讲述者。他们的任务是总结有趣的事实,并小心翼翼地指出,在没有统计数据的情况下,任何偶然出现的诗歌灵感都不会被认真对待。
买家请注意:有许多冒充数据科学家的数据骗子。没有魔法能把不确定性变成确定性。
优秀的分析师对他们职业中的一条黄金法则有着坚定不移的尊重:不要得出超越数据的结论(并阻止你的观众也这样做)。不幸的是,相对来说,很少有分析师是真材实料——买家请注意:有很多数据骗子冒充数据科学家。这些人兜售胡说八道,以无纪律的方式超越数据,以基于一厢情愿的想法“支持”决策。如果你的道德标准松懈,也许你会把这些蛇油推销员留在身边,把他们安置在你生意的营销黑艺术部分。就我个人而言,我宁愿不要。
优秀的分析师对他们职业中的一条黄金法则有着坚定不移的尊重:不要在数据之外得出结论。****
只要分析师坚持事实()“这就是事实。”但这意味着什么呢?“只有:这就是这里的东西。”不要把自己看得太重,他们犯下的最大罪行是浪费别人的时间。出于对黄金法则的尊重,优秀的分析师会使用柔和、模糊的语言(例如,不是“我们得出结论”,而是“我们受到启发去思考”),并通过强调每种观点的多种可能解释来抑制领导者的过度自信。
虽然测试假设需要统计技能,但分析师是你首先提出这些假设的最佳人选。例如,他们可能会说“这只是一种相关性,但我怀疑它可能是由……”之类的话,然后解释他们为什么会这样想。
这需要对数据之外可能发生的事情的强烈直觉,以及向决策者传达选项的沟通技巧,决策者通常决定哪些假设(许多假设)足够重要,值得统计学家努力。随着分析师的成熟,他们将开始掌握判断什么是重要的,什么是有趣的,让决策者远离中间人的角色。
在这三个品种中,分析师是最有可能继承决策宝座的。
因为主题专业知识对帮助您更快地发现数据中的有趣模式大有帮助,所以最好的分析师会认真熟悉该领域。不这样做是一个危险信号。随着他们的好奇心推动他们发展对业务的感觉,预计他们的输出将从一堆虚假警报转变为决策者更可能关心的一系列明智的见解。
为了避免浪费时间,分析师应该把他们想说的故事摆出来,从几个角度戳穿它,并进行后续调查,看看它是否站得住脚,然后再提交给决策者。如果决策者因为一个鼓舞人心的故事而面临被迫采取重要行动的危险,那就是一个蝙蝠信号,让统计学家扑入并检查(当然是在的新数据中),根据决策者愿意接受的假设和他们的风险偏好,这一行动是一个明智的选择。
分析师和统计学家的混合体
对于坚持事实的分析师来说,没有错,只有慢。将统计专业知识添加到“正确做事”中,在一个重要的方面错过了要点,特别是因为在探索性数据分析和统计严谨性之间有一个非常重要的过滤器:决策者。负有决策责任的人必须签署追求分析师洞察力的业务影响,这值得专家花费大量时间。除非分析师和统计学家的混合体也是一个熟练的决策者和商业领袖,否则他们的技能组合会形成一个中间有裂缝的三明治。
然而,弥合这一差距的分析师,其价值不亚于黄金。珍惜他们!
机器学习和人工智能分析
机器学习专家通过算法输入一堆潜在的数据,调整设置,并不断迭代,直到产生正确的输出。虽然这听起来好像没有分析的作用,但在实践中,一个企业往往有太多的潜在成分要一下子塞进搅拌机。
你的分析师是短跑运动员;他们快速帮助你了解和总结现状的能力对你的过程来说是一种超能力。
一种筛选出有希望的集合的方法是领域专长——询问对事物如何工作有意见的人。另一种方式是通过分析。打个烹饪的比方,机器学习工程师非常擅长在厨房里修修补补,但现在他们正站在一个巨大而黑暗的仓库前,里面装满了潜在的食材。他们可以随意抓起它们,把它们拖回厨房,或者派一个带着手电筒的短跑运动员先穿过仓库。你的分析师是短跑运动员;他们快速帮助你了解和总结现状的能力对你的过程来说是一种强大的力量。
分析师和 ML 专家的混合体
分析师加速机器学习项目,因此双重技能非常有用。不幸的是,由于分析和 ML 工程之间在编码风格和方法上的差异,很难在一个人身上看到顶尖的专业知识(更难得的是,这个人在需要时表现得缓慢而富有哲理,这就是为什么真正的全栈数据科学家确实是一只罕见的野兽)。
长期低估的危险
专家分析师不是机器学习工程师的劣质版本,他们的编码风格是为了速度而优化的——故意的。他们也不是糟糕的统计学家,因为他们根本不处理不确定性,他们处理事实。“这是我们的数据,我的工作不是谈论它在现有数据之外的意义,但也许它会启发决策者与统计学家一起探讨这个问题…”
初学者没有意识到的是,这项工作要求顶级分析师比其他应用品种更好地掌握数据科学的数学知识。除非任务足够复杂,需要发明一种新的假设检验或算法(研究人员的工作),统计学家和 ML 专家可以依靠检查现成的软件包和测试是否适合这项工作,但他们通常可以跳过不得不面对方程本身。
例如,统计学家可能会忘记一个t-测试的 p 值的等式,因为他们是通过点击软件包上的 run 来获得的,但他们永远不会忘记如何以及何时使用一个等式,以及对结果的正确哲学解释。另一方面,分析师不打算解读。他们在寻找一个血淋淋的,巨大的,多维数据集的形状。通过了解 p 值方程分割数据集的方式,他们可以形成原始数据集中的模式的反向视图,以产生他们看到的数字。如果不懂得数学,你就不会有这种观点。然而,与统计学家不同的是,他们不关心数据的测试是否正确。他们关心的是 t 检验能让他们对当前数据集中发生的事情有一个有用的了解。区别很微妙,但很重要。
统计学家处理数据之外的事情,而分析师坚持数据之内的事情。
在 peak excellence,两人都有深厚的数学功底,他们经常使用相同的方程式,但他们的工作完全不同。
类似地,分析师经常使用机器学习算法来分割他们的数据,识别引人注目的分组,并检查异常情况。由于他们的目标不是性能而是灵感,他们的方法是不同的,在 ML 工程师看来可能显得草率。同样,这是在不同的工作中使用相同的工具。
用一个类比来总结一下:别针被外科医生、裁缝和办公室工作人员使用。这并不意味着工作是相同的,甚至是可比的,鼓励你所有的裁缝和办公室职员学习外科以在职业生涯中取得进步是危险的。
每个企业需要的唯一角色是决策者和分析师。如果你失去了你的分析师,谁来帮你找出哪些问题值得解决?
如果你过分强调机器学习和统计学中的招聘和奖励技能,你会失去你的分析师。到时候谁来帮你弄清楚哪些问题值得解决?你将会剩下一群可怜的专家,他们不断被要求从事毫无价值的项目或分析任务,而他们并没有签约。你的数据将毫无用处。
研究人员的护理和喂养
如果这听起来还不够糟糕的话,许多领导者试图聘用博士,并过分强调统计学家和 ML 工程师的 研究——而不是应用版本……而没有一个有价值、重要且已知不可能用现有算法解决的问题。
这只有在你投资于一个研究部门,并且不打算询问你的研究人员最近为你做了什么的情况下才可以。为研究而研究是一项高风险投资,很少有公司能够承担得起,因为从中得不到任何有价值的东西是一种非常现实的可能性。
只有当你有合适的问题让他们解决时,研究人员才属于研究部门之外——他们的技能是从零开始创造新的算法和测试,而现成的版本并不存在——否则他们将经历一个悲惨的西西弗螺旋(这将完全是你的错,而不是他们的错)。研究人员通常会花上十年以上的时间进行培训,这至少值得尊重,因为他们不会从事完全不相关的任务。
当有疑问时,在其他角色之前雇佣分析师。
因此,在你的分析师帮助你确定了一个有价值的项目,并且试图用应用数据科学家完成它的努力已经失败之后,才是雇佣他们进行应用项目的合适时机。那是当你带来职业发明家的时候。
笑点是
如果有疑问,在其他角色之前雇佣分析师。欣赏他们,奖励他们。鼓励他们成长到自己选择的职业高度(而不是别人的)。在这个故事中提到的角色中,每家企业都有数据需求的只有决策者和分析师。其他的只有当你确切知道你需要它们做什么的时候才能使用。从分析开始,为你新发现的睁开眼睛看到面前丰富而美丽的信息的能力感到骄傲。灵感是一种强大的力量,不可轻视。
VICKI JAURON, BABYLON AND BEYOND PHOTOGRAPHY/GETTY IMAGES image used with the HBR article. My favorite interpretation is that the human is a business leader chasing away flocks of analysts while trying to catch the trendy job titles.
如果你喜欢这篇文章,请查看我的数据科学领域指南这里或前往我的 YouTube 频道…
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
Enjoy the entire course playlist here: bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用此表格取得联系。
企业中的数据科学家
原文:https://towardsdatascience.com/data-scientist-in-a-business-46ed161798b1?source=collection_archive---------9-----------------------
数据科学家的角色会有很大不同,达成单一定义是不现实的
Photo by Carlos Muza on Unsplash
作为数据科学之旅的一部分,人们将听到关于在商业环境中成为数据科学从业者意味着什么的非常有价值但不同的观点,从传统的数据分析和报告到复杂的机器学习模型开发和部署,这也恰好需要在 STEM 领域的高级学位。此外,为了在这个并不精确的世界中追求精确,人们试图明确定义数据分析师、统计师、数据科学家、数据工程师、机器学习工程师、开发人员、数据架构师或其他相关角色,甚至在他们内部分成不同的级别。然后是围绕数据科学教育学位(或一般的高级 STEM 学位)的重要性的讨论,其数量似乎正在快速增长。因此,它很快变得令人困惑。
在这个不精确的世界里,我们是在试图精确吗?
尽管不同的视角对于更多地了解该职业以及确定潜在的改进领域极其重要,但我认为定义工作本身是一项永无止境的任务,原因如下:
- 业务概况和需求千差万别,从只有数百或数千个数据点的传统企业,到每天有大量数据流的高度数字化企业。在某些情况下,趋势分析或逻辑回归可能就足够了,但在其他情况下,只有持续挤压 AUC 的微小改善以及实时模型部署才能提供竞争优势。
- 行业内和行业间的采用率会有所不同;不可避免的是,一些公司在如何从数据科学中获取价值方面将比其他公司更先进,处于前沿的公司不仅建立了复杂的数据科学团队,还对大部分员工进行了数据科学基础知识的培训。
- 数据科学本身作为一门学科正在发展。在统计学习中,许多概念都非常古老,但已经发生变化的是计算能力的使用,从单台计算机到云服务,以及数据科学相关编程语言和应用程序的可访问性。然后你还有一个像 XGBoost 这样的算法,这是一个最近的有影响力的发展。
那么,我们该何去何从呢?让我们来看看这张经典图表:
The Data Science Venn Diagram (by Drew Conway)
你知道有多少人拥有这三个主要领域的专业知识?想象一下在企业中工作——销售、运营、客户服务、行政管理、营销等。—对于几个(或许多?)年,然后(或之前,或同时)获得数学和计算机科学方面的同等专业知识。难怪被称为“数据科学”的子集的真正代表经常被比作独角兽,其出现的频率可能与初创企业中的独角兽并无不同。您可以在本文的中获得数据科学技能的更详细概述。虽然这种数据科学专业知识的三足鼎立令人向往,但却很难确定(您如何知道自己是这三个领域的专家?),这可能有助于解释为什么数据科学通常作为团队运动效果最佳…我指的是科学(在能够负担整个团队的公司中)。
好吧,隧道的尽头有光吗?是的,一个务实的。
Photo by Joshua Sortino on Unsplash
我认为一个更好的方法是考虑三个基本支柱,而不是一个业务中数据科学从业者的精确定义:
- 商业专长
- 技术保密
- 性格特征
商业专长
Photo by Nik MacMillan on Unsplash
通常,在成为数据科学家的建议中,业务理解和经验被忽视、简单假设或简单提及,然而这是成为有效从业者的重要因素。面向企业的数据科学旨在解决实际问题,其中数据是发现和/或解决方案不可或缺的一部分。这种专长有三个方面:
- 对商业战略、经济学和模型的理解
- 特定于个体公司及其行业的商业洞察力和直觉
- 能够引导公司寻找项目来源,交流结果,并实施建议
这对于任何人来说都是一个棘手的问题——尤其是在有等级或专业结构的大公司工作时。虽然商业基础知识可以在工作中和学校里很快学到,但更深刻的直觉来自经验。这种学习有很多好处,从不用高管浪费时间解释基础知识,到能够识别和组织相关数据,发现并解决企业真正关心的问题,以及将技术语言转换为业务用语。此外,业务视角有助于确定优先级,有时,在继续下一个项目之前,用 10%的努力获得 90%的结果可能就足够了。第三波数据科学家文章中有更多关于这个的讨论。
“…我鼓励您不要将数据科学视为一个需要学习的新知识领域,而是一套可以在当前专业领域应用的新技能。”
Jake VanderPlas,Python 数据科学手册
然而,如果没有下一个支柱——技术支柱,企业将无法理解数据科学可以完成什么,不能完成什么,可以提取什么价值,以及如何走向(几乎)客观、中立的轶事和数据驱动的现实。
技术诀窍
Photo by Nicolas Thomas on Unsplash
这个支柱是关于能够实现业务所需的数据支持解决方案,这是在 Moneyball 中观察到的早期主要例子之一。如果你在网上搜索“如何成为一名数据科学家”或“什么是数据科学家”,你很可能会找到专注于该职位技术方面的文章。似乎有一个巨大的光谱需要学习。
为了帮助理清问题,我将技术方面分为两个角度:一个是不适合的(核心,适用于大多数(如果不是所有)企业的数据科学工作,但可能无法满足所有特定公司的需求,尤其是如果公司在数据科学应用方面处于领先地位)和一个是过度适合的(适应特定公司的需求和数据科学团队设置,因此在被公司雇用之前很难预测)。
以下是我认为“未充分满足”观点包含的内容:
- 统计/机器学习——相关统计/数学知识与其在现代编程语言中的实现的结合。与分别学习统计和编程不同,它们可以协同学习——对我来说,它们是数据科学背景下同一枚硬币的两面。幸运的是,只要你坚持使用在线和 PDF 版本,就可以以无与伦比的免费价格获得优秀的课程(特雷弗·哈斯蒂和罗布·蒂布拉尼的统计学习,斯坦福大学是其中之一)和书籍(统计学习介绍,以及对那些更倾向于数学的人来说,统计学习的要素)。我个人也关注吴恩达的教育内容,部分原因是他雄辩地解释复杂概念的能力以及对商业应用的日益关注。关于这个主题有很多世界级的内容。
- 数据项目工作流程——包括伦理、项目设计、数据收集、处理、建模以及得出结论/预测/解释。通常,编程(最常见的是 Python 和/或 R ,还有关系数据库的 SQL)将处于这项工作的最前沿,但我们会错误地忽略“拖放”的演变,即“无代码”或几乎无代码的数据科学平台,以及自动化机器学习解决方案。我仍然认为编程是必不可少的,因为现有的数据科学库已经提供了很多便利和足够的抽象,而不会分散注意力(允许人们接近数据和模型的“底层”,即实际了解代码的每一行发生了什么),但随着时间的推移,这可能会改变。无代码并不意味着“数据科学”的“科学”部分会变得更简单,但是我确信会有忘记这一点的诱惑。虽然可供选择的内容——通过 MOOCs、训练营、书籍和学术界——非常多,但我想强调的是 R for Data Science 和Python Data Science Handbook是优秀的免费起点。在应用数据科学(而非研究)中,编码和数据科学平台现在都处于可访问阶段,它们在有 STEM 学位和没有 STEM 学位的人之间充当最终的均衡器;然而,我怀疑对 STEM 学位的一些偏见将继续存在,因为许多当前的数据科学家拥有这样的背景(并希望根据他们的知识招聘),也因为缺乏非 STEM 候选人。
- 视觉化——虽然通常是数据工作流程的一部分,但我会把它挑出来,因为我相信一个人可以把知道如何通过视觉讲述一个故事作为整个职业生涯。例如,通过可视化,人们可以使以前对用户不友好的“干”数据——有吸引力的、困难的模型——更容易理解,以及大数据——得到清晰的总结。此外,我预计至少一些可视化软件提供商将扩展其在整个数据工作流中的存在(而其他数据科学软件公司将改进其可视化组件)。同样,有许多选择可以学习,从 Edward R. Tufte 的经典著作到应用书籍、MOOCs,以及可视化图书馆和软件提供商提供的大量示例。
有人可能会说,尽管“吃不饱”,但这似乎仍然很多。我同意——数据科学是一个跨学科的、相当复杂的领域——但我认为这方面的知识非常容易获得。培训资源非常丰富,而且通常是负担得起的,尤其是在初级到中级水平——人们只需要时间和愿望来学习和练习。此外,同行支持(例如 Stackoverflow 和 Stackexchange )和专业网站(本文提供了其中几个网站的链接)允许获得各种问题的答案,这些问题可能过于具体,无法在任何培训中涵盖。我认为,尽管“能力不足”,但技术知识加上业务专长对于任何数据科学家来说都是一个出色的背景。
好吧,那么什么属于“过度适合”的观点呢?答案是——可以与最广泛的数据科学理解相联系的所有其他东西(概率加权),这就是我认为数据科学家定义中的许多可变性开始出现的地方。例如,可能需要也可能不需要:
- 知道(或凭直觉)更多的数学知识(特别是。微积分、线性代数、概率、统计)——但不太可能需要高等数学、因为许多艰苦的工作已经在各自的数据科学库中为我们完成了
- 在生产模式下部署模型——或者请求 IT /程序员的帮助
- 使用云技术
- 扩展和应用人工智能的知识
- 使用大数据/ Apache Hadoop / Apache Spark
- 使用 NoSQL 数据库/ Apache Cassandra
- 管理团队
- 处理非表格数据,包括图像、空间、语音、文本和 web
- 担心延迟、可扩展性、安全性、存储和实时数据(例如 Apache Kafka)
- 利用除 Python、R 和 SQL 之外的编程语言以及各种操作系统
- 专攻并深入钻研一个狭窄的学科
- 维护知识图谱-了解数据科学相关领域的广泛范围,并了解最新发展,例如,是否有新的算法、云技术解决方案或深度学习研究突破。
久而久之,上面的一些可能就不再是“可能”了。不用说,除了商业和技术基础知识之外,学习并不断实践所有这些知识(甚至更多)对一个人来说是不现实的,尽管他很有抱负。对某些领域有个人兴趣,或者预测个人业务的需求,可能是开始涉猎广泛知识的好方法。在某些方面,在数据科学领域工作类似于在研究生院:你知道总有更多的东西要学,你觉得自己总是落后,但时间有限,因此你必须选择战斗并处理它。
然而,尽管提高这些技能需要时间和精力,但重要的是不要忽视第一支柱——业务。否则,团队就有被视为利基数据处理者的风险,总是需要被告知做什么和解决什么业务问题。
选择个性特征
Photo by Andrew Seaman on Unsplash
你可以成为一名成功的商业人士,并拥有坚实的技术背景,但有一些性格特征将这一切结合在一起,并有可能进一步放大你作为数据科学家的成功:
- 如果你在矩阵里,你每次都会吃红色药丸去追求知识,而不是传播“民间智慧”、方便的真理、假设、偏见或者矩阵本身。武术是选修的。
- 如果你是一名侦探,你将成为现实生活中的赫丘里·波罗,运用铁甲般的方法和逻辑来解决复杂的数据之谜——并且能够以清晰的方式与听者回顾整个过程,尽管其中隐含着复杂。你把复杂的声音变得尽可能简单,但不能再简单了。
- 如果你是一个强化学习代理人,你会平衡利用你已经拥有的知识和追求新知识的探索。你接受新奇的挑战,保持创造力和求知欲。
- 如果你是一名跑步者,你通常会跑长距离——毅力是许多数据科学项目的关键。
总之,尽管由于上述原因,很难单独定义数据科学家的角色或道路,但专注于业务和“不适合”的技术背景可能是该领域任何职业生涯的重要基础-认识到不同公司是否认为足够将有所不同。
最后但同样重要的是,考虑到数据科学发展如此迅速,并且正在经历某种范式转变,我强烈推荐阅读托马斯·库恩的《科学革命的结构》 。这是一本永不过时的书。
数据科学家不是唯一的数据科学角色!
原文:https://towardsdatascience.com/data-scientist-is-not-the-only-data-science-role-4756b642d26?source=collection_archive---------19-----------------------
关于主要数据科学角色的简明信息。
“数据科学”这个术语并不新鲜。它让大量技术人员涌入这个领域。相对于计算机科学和商业世界中的其他领域,数据科学是一个广阔的领域。为什么?因为它是两个世界的集合!
涉及典型数据科学角色的技能:
虽然这个领域提供了丰厚的报酬,但它也要求个人拥有一系列的技能。主要要素如下所列:
数学(尤其是统计学,但不仅仅是统计学!)
算法和数据结构
批判性思维和解决问题
软件工程
软技能
创意
主要数据科学角色:
数据科学的主要角色如下:
数据工程师
数据分析师
机器学习工程师
数据科学家
让我们一次了解一个角色。
数据工程师
任何典型的数据驱动型公司的工作流程都是从收集各种来源的原始数据开始的。这是数据工程师的基本职责。他们是软件工程师,设计、构建和整合来自各种资源的数据。这些工程师针对大数据编写复杂的查询,以确保大数据易于访问且运行顺畅。他们必须确保来自资源的数据流不会中断。
数据工程师在项目的整个管道的早期工作。
核心技能和资源:
- 扎实的数据库知识(SQL 和 NoSQL)
- 数据仓库(Hadoop、HIVE、Apache Spark)
- 基本的机器学习知识
没有大数据分析,公司就像瞎子和聋子,像高速公路上的小鹿一样在网络上游荡——杰弗里·摩尔,作家兼顾问
数据分析师
数据工程师和数据分析师在管道的早期阶段携手合作。数据分析师解释数据,并将其转化为最适合项目需求的信息。数据分析师的主要职责如下:
- 收集和解释数据
- 分析结果
- 识别模式和趋势
- 想象洞察力
核心技能和资源:
- 统计分析
- 可视化(表格)
- 大数据(Hadoop、Hive)
- 机器学习(张量流,火炬)
除了这些技术技能之外,数据分析师还需要很强的商业和人际交往技能,因为他们与客户密切合作来安排数据。
“我们的目标是将数据转化为信息,将信息转化为洞察力”——惠普公司前总裁兼董事长卡莉·菲奥莉娜说。
机器学习工程师
一个机器学习工程师在流水线的中间阶段工作。这些工程师将处理项目早期阶段安排的大数据。这些工程师负责创建自动训练计算机(特定模型)的程序和算法。大数据顾名思义,就是海量的数据。
随着数据集中的维度数量不断增加,人类很难感知数据并对其进行操作。
因此出现了机器学习算法。
核心技能和资源:
- 机器学习算法和库(Scikit-Learn、TensorFlow)
- 数据建模和评估
- 软件工程(REST API 调用、模块化、版本控制、测试)
数据科学家
数据科学家既是数学家,又是计算机科学家,还是趋势观察者。他们的日常职责包括:
- 收集原始数据并将其转换成可用的格式
- 从数据中获得洞察力和模式
- 训练模型来预测看不见的实例
- 应用机器学习,深度学习
- 与技术和业务团队沟通和协作
“数据科学家是 21 世纪的炼金术士”
核心技能和资源:
- 通讯技能
- 商业头脑
- 数据库ˌ资料库
- 数据库
- 数据可视化
- ML 和 AI
数据科学是一门艺术。人们可以利用不断改变世界的大数据做些什么,这很有趣。虽然数据科学家是收入最高的工作,但在我看来,所有角色在项目的每个阶段都同等重要,因为数据科学项目通常不是“独角戏”。
数据科学家的知识和技能
原文:https://towardsdatascience.com/data-scientist-knowledge-and-skills-a437b00ebda5?source=collection_archive---------12-----------------------
数据科学家从数据中创造知识;并且具有统计学、编程和所研究领域的知识和技能。
数据科学家通过定量和编程方法从数据中创造知识,以及所研究领域的知识。数据科学是数据科学家工作的领域。
知识和技能领域
数据科学家应具备以下领域的技能和知识:
- 数据、统计或其他定量方法。
- 编程、计算机科学或工程。
- 正在调查的领域。
这些领域相辅相成,造就了一名全面的数据科学家。擅长统计学并不一定能让一个没有运行高级机器学习和部署生产模型的编程技能的人成为优秀的数据科学家;或者解释结果的领域知识。
拥有这些领域的知识和技能并不一定意味着数据科学家是该领域的深度专家,这是一种被称为独角兽数据科学家的不合理情况。
更合理的期望是,数据科学家在所有这些领域都足够全面,能够在数据科学领域发挥作用。正是这些领域的广博(而非专业)知识和技能的结合造就了数据科学家。
Photo via Unsplash
数据、统计或其他定量方法
数据科学的核心是将数据转化为知识。这种知识可以包括对事物的分类或估计。分类或分类是对离散值(即整数值或类别)的预测,可能包括将电子邮件分为垃圾邮件或非垃圾邮件,估计或回归是对连续变量的预测。例如,预测客户的未来收入。
数据是基于在世界上观察到的事物而产生的。它几乎总是现实的样本,因为不可能观察到所有的现实。数据样本来自一个数据群体——完全观察到的宇宙。
为了创造知识,数据科学家应该理解描述性统计和推断性统计。描述性统计描述现实样本的特征,包括中心(如均值、中值)分散(即观察值如何分布)形状(如分布的偏斜度)。如果测量不止一个变量,它还测量变量之间的相关性。
推断统计根据对样本数据的描述,得出关于总体的结论。数据科学家需要了解先进的推理技术,如 机器学习——这些技术基于观察和手头任务性能的测量来创造新知识。
数据科学家可能还知道其他定量方法,包括预测。这方面的一个例子包括服装店的未来销售预测,这取决于季节。
数据科学家遵循数据分析流程来创造知识。一个常见的流程是数据挖掘的跨行业标准流程 (CRISP-DM),包括以下六个步骤:
- 业务理解:下一节将要介绍的领域知识。
- 数据理解:描述性统计和数据质量评估。
- 数据准备:数据清理,构造新变量,合并数据集。
- 建模:一个模型是对数据观测样本的假设结构的描述。建模包括技术的选择(机器学习有许多构建模型的算法)和运行它们。
- 评估:评估所选择的模型满足商业目标的程度。
- 部署:部署模型,以便用户可以将它与未来的数据一起使用,并制定维护计划。
数据科学家需要很好地理解数据收集和一般的数据管理方法。
他们还需要使用适当的数据可视化来传达数据中的发现。这些可视化包括饼图、条形图和折线图。
Person Using Laptop Computer on Brown Wooden Table by www.rawpixel.com is licenced under Free to use.
编程、计算机科学或计算机系统工程
编程是构建执行任务的计算机程序的过程。编程通常是计算机科学和计算机系统工程等领域的中心。
数据科学家需要高级编程技能来处理数据、计算复杂指标和进行高级机器学习。这些程序需要在可维护性和性能方面有良好的结构——来自计算机科学或计算机系统工程的技能和知识。编程语言包括 Python,R,SAS,SPSS。
数据科学家需要了解一些数据存储技术,包括数据库、数据仓库和数据湖。
数据科学家不一定需要成为合格的计算机科学家或计算机系统工程师,但他们需要在这些领域的技术方面有足够的知识,以便有效地进行数据科学研究。
Seated Woman Typing on Apple Mighty Keyboard in Front of Turned-on Silver Imac by negativespace.co is licenced under CC0 License.
领域知识
数据科学家还需要很好地理解领域知识库,以便为领域贡献更多有价值的知识。
领域知识也有助于更好地定义问题,确定什么是已知的,并准确地解释结果。
领域知识是一条捷径,这样数据科学家就可以使用已有的知识来更好地创造新知识,并有助于将研究范围缩小到该领域中尚未了解的内容,这样数据科学家就不会重复研究。
Low Angle Photography of Buildings Under Blue and White Sky by Jimmy Chan is licenced under Free to use.
技能的结合增加了价值
数据科学家不一定是这三个领域的专家。然而,他们肯定需要有良好的跨学科知识,以便从数据中创造有价值的领域知识。
数据科学家简介
原文:https://towardsdatascience.com/data-scientist-profiles-22505e4888db?source=collection_archive---------13-----------------------
走向数据科学专业化的定义
数据科学缺乏一个合适的领域定义,导致术语和高要求技能的怪异混合。
这篇文章强调了如何获得满足您业务需求的最佳数据科学配置文件。首先,这篇文章旨在帮助那些无力组建大型数据科学家团队并希望优化投资的公司。
我很幸运能与来自不同国家和背景的数据科学家团队共事。不过,我们都是数据科学家,有着不同的思维模式和专业。
数学家、物理学家、统计学家、经济学家和计算机科学家。我的团队由不同背景、不同学历层次的人组成:学士、硕士和博士。
好吧,那么…我如何找到合适的数据科学家?让我们首先尝试定义它们。
纯分析数据科学家
每个数据科学家都应该善于分析。然而,纯粹的分析数据科学家是一个数字处理器。线性代数和统计是其解决方案的核心。
这类数据科学家的典型背景是数学、统计学、物理学家,甚至经济学。通常,这些人精通数字,但对复杂的软件和数据管道缺乏经验。但是,给他们数据和问题,他们会解码。或者更好,让他们定义问题!
我什么时候需要一名纯粹的分析数据科学家?当你的问题的核心解决方案是基于统计和数学时,你可能需要这种档案。通常,项目的软件需求要么已经被另一个团队满足,要么非常简单。
现实世界的例子:
- 银行风险分析。你的公司是一家银行。它习惯于使用经典的好的数学模型。你不需要复杂的软件,但需要复杂的分析。如果有人精于财务分析,并且不怕处理 Excel 电子表格,那会有所帮助。
- 年度投资优化。贵公司研究如何优化今年的营销投资。你有前几年的数据,你需要有人以数据驱动的方式帮助你做决策。数据科学家负责根据严格的数学分析,向高管传达优化投资的最佳方式。
- 统计假设验证。你的公司是一家制药公司。你想测试你的新药的性能。当我们谈论医学领域时,我们必须非常精确。研究实验的评估和验证是一个至关重要的要求。你的候选人非常了解分布和假设检验。
那么,分析数据科学家能提供什么呢?复杂分析包括报告、结论和决策建议。
他们通常使用什么工具? R,SAS,Python,MATLAB,Excel,...
什么时候你不应该去找这个简介?在线端到端模型,大数据(当你的数据不适合 RAM 时),你的公司不需要解决具有挑战性的分析解决方案等。
黑客数据科学家
数据科学家喜欢靠近它工作。这些配置文件是 Unix 用户,不喜欢复杂的图形用户界面。他们可能对 Docker 甚至 Kubernetes 有所了解。
典型的背景有计算机科学、电气工程、信息系统等。那么,对他们有什么期待呢?他们能够融入 IT 团队。因此,他们可以与 IT 和/或 BI 团队一起开发端到端的机器学习模型或数据系统。如果你不把这些人撇在一边会有所帮助。
现实世界的例子:
- 线上产品推荐。你拥有一家零售电子商务公司。您不希望您的公司在个性化的世界中落在后面,它决定基于您的用户的日常交互来构建推荐系统。建立一个好的、可靠的推荐系统比你想象的更有挑战性。事实上,我们需要数据工程师和数据科学家合作来解决这个问题。黑客数据科学家应该乐于讨论可伸缩性、延迟、部署等。
- AIOps 。您希望利用自己生成的大量数据来改善公司内部的 IT 运营。您希望开始预测机器何时会出现故障,何时需要水平扩展等。你最好找一个熟悉 IT 环境的数据科学家!
- 图片搜索引擎。你的用户可以通过使用关键词和过滤器写下一个查询来查询你的搜索引擎。但是,您希望开始使用图像作为输入查询的新来源。你已经了解了基本点检测器 (SIFT,SURF 等)。)、CNN、和深度特征表示。解决方案就在那里,你需要一个懂算法和技术的人来把你的搜索引擎安装到位。同样,如果你有一个可以融入 it 团队的人,那是最好的。该算法可能需要直接集成到前端,你的候选人应该知道这意味着什么!延迟是一个问题;我们的用户不想等待超过一分钟;图像处理必须在前端逻辑内部进行。
那么,黑客数据科学家能提供什么呢?端到端原型 API、机器学习模型、Python 库等。
他们通常使用什么工具? Python (scikit-learn,pandas,Keras,seaborn,Flask 等。)、PySpark、SQL (essential)、Unix 系统、Docker、云计算(AWS/GCP/Azure)、Git 等。
你什么时候不需要这个档案?当你的公司使用 Windows 时,候选人可能会立即放弃。在那些不需要交付在线系统的情况下,技术和创新不是优先考虑的,等等。
研究数据科学家
最后,我们不能忘记研究数据的科学家。这些配置文件在实验室环境中工作,远离生产系统。他们正在构建新的最先进的算法,这将颠覆整个行业。他们在重要会议上发表论文,花时间阅读研究论文,并可能拥有博士学位或更高的学位。
一些拥有这些档案的知名公司有 Google DeepMind、Zalando AI、OpenAI 等。在这些情况下,工作机会可能不是来自数据科学家的名字,而是他们正在寻找的专业。然而,并不是只有拥有强大研究团队的顶级公司才能拥有这些专业化的角色;你的公司可能也需要它们!
让我们举几个例子来说明哪家公司会对此类档案感兴趣:
- 产品合成 AI 一代。你听说过生成性对抗网络吗?嗯,这种神经网络在一个发生器和一个鉴别器之间展开了一场战斗。你可能会问这意味着什么。好吧,你要知道这些神经网络可以生成合成图像,从而生成你的内容比如新产品,设计,艺术,甚至人脸!你想颠覆时尚生成人工智能设计吗?马上雇佣一名研究数据科学家!
- 实时跟踪和人脸匹配。您是否拥有一家安保公司?你希望你的客户追踪他们的宠物吗?您希望仅在摄像头上的人脸不匹配时触发警报吗?然后,你可能需要一个有计算机视觉经验的研究数据科学家。
- 机器人的强化学习。你拥有一家机器人公司。你希望你的机器人开始更灵活地解决不同的任务。你有这些要素:代理人,环境,以及需要解决的事情。你听说过不仅数学分析和动态系统可以解决你的问题,机器学习也可以。具体来说,你可能听说过一个叫做强化学习的子领域。是时候雇人开始你的自动学习之路了!
那么,一名研究数据科学家能提供什么呢?最先进的算法和解决方案、会议论文、研究等。
他们通常使用什么工具?视情况而定。但是,大多数科学库都是 Python 和 MATLAB 的。深度学习底层框架如 TensorFlow、PyTorch 等。,在 AI 界都很有名气。
你什么时候不需要这个档案?当您想要一个可以通过 Amazon Rekognition、Google Vision API 或其他 SaaS 提供商更便宜、更简单地解决的解决方案时。当你不想投资纯粹的创新和研究时。
这些数据科学家概况不是僵化和不相交的定义。在大多数情况下,您可以找到混合了这些类型的数据科学家。然而,根据你的需求的深度和广度,你可能会寻找一个更全面的或专业的职位。此外,人们必须把这些真实世界的例子仅仅当作例子。一个数据科学家应该是领域不可知的,只要你有一个可以被公式化为数学问题的问题。****
如果你想拥有的是一个能一下子破解一切的人,那么我建议你看看我的另一篇文章:https://medium . com/@ joelqv 8/the-data-scientist-unicorn-8c 86 CB 712 DDE
最后一个简介,数据科学家独角兽永远不会让你失望。
数据科学家 vs 数据工程师
原文:https://towardsdatascience.com/data-scientist-vs-data-engineer-f7345a3d0412?source=collection_archive---------23-----------------------
谁更好?
What is your natural gifts and talents that inspire other people?
“数据科学家连续 4 年是最好的工作”
“数据科学家是最有前途的 10 大工作之一”
“数据科学家的薪水高于平均水平”
荣誉还在继续……
数据是新的石油。如果开采得当,企业在利润方面以及风险管理、合规和社会服务等其他方面的成功率将呈指数级增长。
数据工程师专注于使数据可用和结构化。这涉及到与 IT 合作将数据接收到数据仓库中。此外,优秀的数据工程师会将数据转换成人类可用的形式。因此,与传统的 ETL 相比,ELTL(Extract-Load-Transform-Load)是一种新的过程模式。
数据科学家专注于将统计算法应用于数据。虽然他们具备连接不同数据仓库(云和本地)的良好知识,但他们并不精通上游数据接收流程。当数据适合人类理解时,数据科学家是有能力的。此外,他们是统计学/应用数学专家,在制作与业务相关的人工智能模型方面具有出色的商业敏锐性。
Soccer is a team work
想象一场足球比赛。我们有著名的前锋,如克里斯蒂亚诺罗纳尔多或路易斯苏亚雷斯。然而,如果没有防守队员向前传球,他们就无法赢得比赛。想想伟大的名字,如蒂亚戈席尔瓦或塞尔吉奥·拉莫斯。罢工者需要他们的支持和帮助。
跟随你的真心
在我的工作中,我遇到许多渴望成为数据科学家的数据工程师。通常有两类:
- 数学相关学科的新毕业生
- 具有深厚数据工程背景的经验丰富的候选人
关于第一类,它是实践经验和良好指导的结合。关于第二类,我鼓励他们重新评估自己的动机和才能。
数据工程师拥有极其宝贵的技能,并在高增长领域工作。我有一个很好的朋友,他很自豪成为一名数据工程师,从事云数据支持、端到端数据解决方案交付和数据摄取自动化方面的工作。最近在云中的发展,如 Google 云平台和云数据仓库(如雪花)都属于数据工程领域。此外,数据科学支持方面的最新发展,如 AWS SageMaker 或 Azure ML,是由数据工程师推动的,以满足数据科学家的需求。
“比较就是绝望。
感激和谦逊是解决心中升起的许多不安全感的方法。
每个人都将对他们如何使用他们被给予的天赋/角色负责…而不是他们如何想象他们会使用他人的天赋/角色”Paul J. Kim
追随我们的天赋至关重要。大多数人都梦想成为体育明星或名人。然而,我们最终发现我们的生活在召唤一些不同的东西。不是每个人都需要成为数据科学家,因为这看起来很“酷”。与数据工程师和所有其他职业类似,数据科学家也有自己平凡的工作问题。
但是,如果我们努力成为我们自己,成为我们生来就有的、优秀的和充满激情的人,它将会把平凡转变为创新的想法。事实上,数据工程师在分析/技术行业也享受着企业成功、高薪和认可的公平份额。你会接受挑战,成为数据科学家或数据工程师的先驱吗?
总而言之,数据科学家和数据工程师是相辅相成的。
这两者都是实现大数据承诺所必需的。两者都需要不断创新人工智能和机器学习的前沿。两者都需要把世界变得更好。
如果你喜欢这篇文章,并想看更多的内容,请考虑加入媒体会员,使用下面的链接来支持我和其他作者:
[## 通过我的推荐链接加入 Medium-Albert Suryadi
阅读艾伯特·苏亚迪(以及媒体上成千上万的其他作家)的每一个故事。您的会员费直接支持…
albertsuryadi.medium.com](https://albertsuryadi.medium.com/membership)
关于作者:Albert sur yadi是蓝筹股组织中实现高级分析和数据科学能力的公认领导者。他被公认为分析团队(实践社区)的领导者,该团队授权并激励他人超越现状。
数据科学家是思想家
原文:https://towardsdatascience.com/data-scientists-are-thinkers-a36cc186d570?source=collection_archive---------7-----------------------
Photo by Mitchell Hollander on Unsplash
执行与探索及其对您的意义
数据科学家服务于一个非常技术性的目的,但这个目的与其他个体贡献者有很大的不同。与工程师、设计师和项目经理不同,数据科学家是探索优先,而不是执行优先。
考虑到数据科学的起源,这并不奇怪。如果你快速浏览一下这个领域的早期历史,你会发现事情是从学者们研究计算统计学的可能性开始的。这种研究员般的思维模式仍然根植于我们的 DNA 中。
我们不断被代表大规模业务、产品和客户的数据所包围。这让我们可以从 30,000 英尺的高度看问题,而其他角色大部分时间都在基层工作,致力于执行。重要的是我们要意识到这个事实,更重要的是我们要充分利用它。
执行与探索
大部分老牌公司的技术集成电路都专注于执行。这很直观。为了让一个公司成功,它必须完成提供价值的事情。
数据科学角色略有不同。根据团队结构和规模的不同,它们会有很大的不同,但一般来说,执行并不是我们最擅长的地方。我们最有价值的工作往往来自探索。
当涉及到复杂的问题和假设时,执行不是答案。必须有人投入进去,在更深的层次上解决问题。他们必须彻底地分析和探索这个问题。数据科学家是承担这一任务的最佳人选。
思考,产生直觉,然后探索这种直觉的行为是被犯罪低估的。如果处理得当,这项工作不仅会产生有趣的结果,还会推动决策制定。这是数据科学家真正繁荣的地方。
如果您查看某些角色在执行探索谱中的最终位置,您会得到如下结果:
这并不是说数据科学家不能或不应该执行。我们花了大量的时间来构建模型、编写产品代码和自动化常见任务。事实是,我们拥有多样化的技能组合,允许我们探索和执行。这就是为什么很难找到数据科学家,也是这个领域如此激动人心和富有挑战性的原因。
找到平衡
数据科学家是不是应该彻底流氓化,为所欲为?大概不会。我们不能公然无视积压的 JIRA 门票,而去调查前一天晚上凌晨 2:00 想到的一个假设。这里必须有一个平衡。
我们必须支持我们的利益相关者。这意味着及时交付他们需要的东西,以便他们能够有效地做出决策并推动事情向前发展。
然而,我们同样有义务利用我们独特的地位和分析技能。我们通过花时间思考新的想法,产生假设,并浏览数据来做到这一点。
但问题依然存在:这在实践中看起来像什么?在一个持续关注执行力的世界里,这样想并不容易。最近,我一直在做三件不同的事情来保持探索第一。我对目前的结果很满意。
封锁时间
首先,我建议每天留出一个小时左右的时间进行深入思考和探索。最适合你的时间会因人而异。我更喜欢早上做的第一件事,但是你也可以在下午留出一个小时。安排好这个时间是极其重要的。
通过每天与自己定期会面,创造一个成功的系统。这是一次你不能错过或重新安排的会议。对自己负责。这是你思考的时间。
把一切都写下来
如果你没听说过,文档是很重要的。你的思维实践也不例外。不管你的想法有多好,把它写下来。创建一个流动的文档或一个记事本,在那里你可以让这些想法、问题和假设继续存在并被重温。
保持好奇
作为一名数据科学家,好奇心是你的北极星。有时你会陷入执行模式,忘记发展和探索自己的想法。当这不可避免地发生时,好奇心会把你带回来。我强烈推荐这篇来自多线程的优秀文章,以了解关于数据科学中的好奇心的更多信息。
“让您的数据科学家能够提出您以前从未想过的想法。”—埃里克·科尔森
转变你的心态
基于执行的工作在数据科学中最受欢迎。你能责怪我们吗?更容易量化。您可以看到构建模型或将代码推向生产的结果。
从一个下午对一个新想法的修补中很难看到具体的结果。这个新想法可能不会导致任何有意义的事情。也许只有 10%的赌注最终会有所收获。不要因此而气馁。10%是值得的。10%是真正变革性工作的来源——这一切都始于思考。
感谢阅读!请随意查看下面我的一些类似文章,并订阅我的时事通讯中的以获得有趣的链接和新内容。
- 为新的和有抱负的数据科学家汇编建议
- A 型数据科学家的颂歌
- MVA:最低可行分析
你可以在 Medium 上关注我更多类似的帖子,也可以在 Twitter 上找到我。想了解更多关于我和我在做什么,请查看我的网站。
数据科学家是 AI 无法取代的
原文:https://towardsdatascience.com/data-scientists-cant-be-replaced-by-ai-841a0a2a8df9?source=collection_archive---------15-----------------------
A Robot Helping A Data Scienist (photograph by author)
一个成功的数据科学家会做两件人工智能无法训练完成的事情:倾听和销售。
虽然我并不严格地与人工智能打交道,但数据科学家与人工智能打交道的想法非常普遍,以至于对它是什么保持半只眼睛是有用的,只要你能向人们解释为什么那不是你做的事情。
自 1944 年以来,计算机在常规计算方面做得更好,但这并没有导致统计学家的工作减少,当时他们还存在,或者最近,数据科学家也存在。事实上,除了回归之外,普遍使用的机器学习算法是为了利用计算机比人类更擅长常规计算而明确发明的,从 teh 开始
如果不是常规的统计计算,那么数据科学家到底在做什么呢?我的论点是,数据科学家在计算和编码上只花了相对较少的时间,或者至少,花在这个领域的时间并不是数据科学家创造的最大价值的来源。
不要错误地认为,应用算法只是数据科学家时间的一小部分,是因为 80%的时间都被数据准备占用了,这将有一天通过人工智能来完成。数据操作只占用项目中的大部分时间,而这些项目是预先打包好的,有明确的目标。一旦数据科学家参与定义项目的目标,或者人们开始使用模型并开始有疑问,数据准备和建模都会被其他活动挤掉。
价值不是建模和数据操作,而是在将客户的需求或顾客的需求(这些词的含义略有不同,但这种差异在这里并不重要)转化为某种模型,并以一种有用的方式实现它的过程中创造的。有用性是在用户的眼里,所以这意味着你需要两次了解你的客户的需求。首先,弄清楚你应该建立什么样的模型,其次,当你有了模型,你需要了解客户将如何使用它。
这里至关重要的一点是,与客户交谈的人必须知道什么是可能的,并且必须了解实施所涉及的内容。这实际上意味着与客户交谈的最佳人选总是数据科学家,而不是 BA 或产品负责人或销售人员。
比无法告诉客户数据科学能做什么的问题更糟糕的是,业务代表将失去客户问题的重要部分,而您需要这些部分来为客户提供正确的工作。有两个显而易见的原因——在人与人之间传递信息肯定会丢失信息并引入噪音。第二,非数据科学家很难理解哪些部分重要,哪些部分不重要
‘现在我们透过玻璃,黑暗地看着’
这项任务的难点在于了解你的客户想要什么。数据科学家应该熟悉信息论,信息论旨在量化信息的哪些部分对信息的传递至关重要,因此是无损压缩等技术的基石。
最近在一次数据科学会议上,我看到了噪音传播概念的一部分,这是通过一个游戏来说明的,在这个游戏中,人们试图通过让每个人给站在他们后面的人表演来沿着一排人传播舞蹈动作。不出所料,到最后,这些动作完全乱码了。
圣保罗是个乐观主义者。即使你们面对面站着,理解另一个人试图给你的信息也是非常困难的,除非他们自己也能很好地理解,并且是一个优秀的沟通者。你的客户通常不是数据科学家,所以他们通常不明白该告诉你什么。
因此,了解客户真正想要和需要的是数据科学家最难掌握也是最重要的技能。
然而,由于沟通是双向的,向用户解释模型实际上是做什么的相关技能,它如何与用户的问题相关,以及在他们的业务环境中使用它的最佳方式几乎同样重要,也同样困难。
说服人们使用该模型是值得的这一阶段与获得工作机会的初始阶段一样是销售任务。这是人工智能尚未涉足的领域——人工智能有时可以提供答案,但它无法说服人们信任它。
在某种程度上,IBM 的 Watson 是这种脱节的一个例子,该产品的性能似乎至少是足够的,但预期用户——医生——在他们的工作流程中没有看到它的位置。这里的问题可以用马丁·科恩的一句话来概括——“仅仅证明你拥有强大的技术是不够的。向我证明它实际上会做一些有用的事情——它会让我的生活更好,也让我的病人的生活更好。"
事实上,向某人证明你的技术改善了他们的生活需要你解释他们自己如何做到这一点——你需要解释他们如何改变他们的工作方式,以便你的技术实际上使他们更有效率。
这部分是最容易出错的部分,但也是最重要的部分,至少它是最有可能出错的部分,因此最值得关注。然而,到目前为止,没有人工智能关注这个主题,也没有在最常为数据科学家创作的书籍和培训材料中给予大量关注。
对这一误解有一个合理的解释。大多数面向数据科学家的培训材料都侧重于算法和数据争论。很少有人关注软技能。这可能有几个原因。可能作者认为对这些技能没有需求——尽管我自己不相信这是真的。然而,他们可能认为没有需求的一个原因是,他们认为这些技能是显而易见的,因为它们是人类固有的。
同样,我不同意。我认为,即使是那些有争议的技能也只是人类的权限,一些人——他们可能不是数据科学家——发现它们很容易掌握,这并不意味着它们是显而易见的,或者每个人都可以立即学会。这只是意味着人类可以通过合理的努力来学习它们,尽管它们超出了人工智能研究的范围。
因此,任何花时间适当开发正确的软技能的数据科学家(至少在技术方面有能力)都处于人工智能无法取代的地位——他们也处于非常有可能领先于其他数据科学家的地位。掌握这些技能既是防止人工智能失业的最佳保护,也是与其他人类相比的最佳区别。
罗伯特·德格拉夫是《管理你的数据科学项目的作者,将于 2019 年 7 月中旬由阿普瑞斯出版社出版。
数据科学家:这个假期,关于你的职业生涯,你需要问自己五件事
原文:https://towardsdatascience.com/data-scientists-five-things-to-ask-yourself-about-your-career-this-holiday-season-1699a995876c?source=collection_archive---------34-----------------------
对于数据科学家来说,机会是无穷无尽的——你应该反思一下自己目前的处境
又到了假日季节——似乎一年比一年来得快,不是吗?我当然不是在抱怨。我总是需要休息,这是放松、放松、打开礼物、玩电脑游戏、看电视、当然还有吃大量节日食物的好时机。
但对我来说,这也是一个反思和评估的时间。分析和数据科学领域正在像一列货运列车一样前进,以不可阻挡的步伐向前迈进。新技术和方法正以我们大多数人都难以跟上的速度涌现。关于工具和理论的会议比比皆是。公司正在疯狂地雇佣数据科学家——他们无法从我们这里获得足够的数据,尽管有些人不知道该拿我们怎么办。
这可能不会永远持续下去,所以我们应该尽可能充分利用数据科学牛市,假期是一个很好的时间来问自己是否处于一个好位置,或者是否可以做得更好。为了帮助你,这里有五个我在每个假期都会问自己的问题。
1.我有影响吗?
数据科学家应该能够看到他们的工作是如何帮助他人的。数据科学家可以通过许多方式产生影响-他们可以产生有助于重大决策的致命见解,他们可以让周围的人更容易获得数据和测量结果,他们可以教授新的做事方法。
有人或事从你的工作中受益吗?你为你付出的努力有意义和效果而高兴吗?如果你觉得自己在粗制滥造,但不知道为什么或出于什么目的,也许是时候重新思考了?
2.我被理解和尊重了吗?
数据科学家的角色——他们被训练做什么,他们能带来什么技能——应该被你工作的权威人士很好地理解。如果不是,你可能会发现一些与数据科学无关的工作正在向你走来,或者你根本没有什么有趣的工作可做。
你觉得你是基于对自己技能的正确理解而被聘用的吗?你为之工作的人知道如何充分利用你吗?你和你带来的技能是否得到了足够的重视和尊重?如果没有,至少值得一谈,你不觉得吗?
3.我在不断学习吗?
按照这个领域的发展速度,如果你不能不断学习和跟上发展,几年后你就不太容易被录用了。
你的工作场所在他们分配工作给你的方式上是否有助于你学习新技能?他们支持你花时间学习相关的新知识吗?你是否被鼓励(或至少被允许)与社区互动并参与有助于你学习和了解发展的活动?如果没有,你不就是为了赚一两块钱,又开始了一年生产老一套产品的日子吗?
4.我有我需要的技术吗?
跟上数据科学中的技术基础架构与跟上内容一样重要。您当前工具的 1.0 版可能会在几年内变成 8.0 版,甚至可能是完全不同的版本。
随着工具链的发展,您可以访问您需要的工具链,您对此感到高兴吗?您的环境在调整其技术基础设施以支持您的需求并使您保持最新方面是否具有支持性和灵活性?如果没有,你应该让别人听到你的声音!
5.我在建立信心吗?
这不仅仅是技术发展的问题,数据科学家需要在职业生涯中树立信心。他们需要成为更好的沟通者,在自己的领域更具权威性——从长远来看,他们需要激励和指导未来的数据科学家,他们永远不会落后。
你觉得你处在一个鼓励你建立自信、表达和沟通技巧的环境中吗?你是否处于促进这些技能发展的环境中?你以为别人看到你的存在感一年比一年大?如果没有,就采取行动——不要被贴上可靠的后台数据科学家的标签。
这些是我每年都会思考并给别人建议的一些事情。希望他们帮你盘点。享受假期!
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。
数据科学家们,是时候大声疾呼了
原文:https://towardsdatascience.com/data-scientists-its-time-to-speak-up-5962125a6202?source=collection_archive---------27-----------------------
性格,而不是代码,将决定你的 ML 职业生涯
59%的人工智能工人从事他们认为可能对社会有害的产品;27%的人因担忧而辞职;而 81%的人工智能工作者希望有更多的机会来评估他们工作的潜在影响。
Photo by Markus Spiske from Pexels
准备好接受不舒服的感觉。你选择了一个正处于开创历史先例和建立基于人工智能和对机器信任的新时代的职业。我们希望从分析跨语言、行业和职业的数百万个数据点中获益。但是我们人类自己没有能力做到这一点。实际上,一个人不可能查看或理解这么多数据点。这意味着我们将别无选择,只能依赖机器做出的决定,尽管我们可能没有能力理解为什么会做出这些决定。这需要对机器学习及其设计师……数据科学家的信任。
说你正在构建的作品将对整个社会产生深远的影响,这是一种委婉的说法。这意味着,如果你不学会如何在机器学习能力的发展中大声疾呼并挑战不负责任的行为,我们都将陷入困境。
如果你目前工作情况不好,我很抱歉,我理解。上面的统计数据至少应该告诉你,你并不孤单。让我们承认,有些时候,你会或已经被要求作为数据科学家做一些你不同意的事情。有时,你甚至可能开始一个看起来相对良性的项目,但一旦深入其中,你就会发现存在重大问题。出于许多原因,你可能会觉得有义务继续下去。你可能签了合同,或者觉得火车离站太远,已经没有回头路了。你不会想成为兴风作浪的人。但是我要告诉你,只要你有决心,总有办法阻止坏事发生。正是在这些时刻,是你的性格,而不是你的代码,决定了你的职业生涯,甚至你的人生。
这些关于性格——而不是代号的时刻,将会定义你的职业生涯。
机器学习创新有办法模仿从事这些创新的人和团队。如果首席数据科学家懒惰、不道德,并且不关心如何确保数据完全符合目的,那么代码和训练数据集就有办法成为这样的精确产品。ML 的创新结果并没有获得信任,甚至更糟,实际上可能是有偏见的或不安全的。我的观点是,如果你在一个 ML 项目中妥协了,如果你没有坚持最高标准——无论是道德上还是其他方面,你的工作和团队的工作都会反映出这一点。考虑到你的工作可能会涉及武器、汽车、健康诊断工具、机器人辅助手术或技术,这些技术可能会影响一个人找到工作、获得贷款或拥有高质量生活的能力,这是不行的。
会有关键时刻,你需要做出决定。你必须决定是让动力推动项目前进,还是停止项目,坚持额外的时间来调查数据和结果,因为这不太对。不管怎样,是你的角色决定了这个时刻。你正在建立一个小小的知识球,一点点你自己的个人道德,进入你涉足的每一个狭窄的人工智能系统。虽然你在想“这只是代码,我从 GitHub 得到的,每个人都在使用它”…看得更深!不仅仅是代码。代码很便宜。那只是外壳的东西。真正的事情发生在你选择的数据和你选择使用它的方式中。对你来说,简单地将数据转换成你需要的格式是不够的。在弄乱这些数据之前,你必须仔细查看。你必须真正理解它所代表的生活或事物;它具有和的上下文将被使用。数据是我们生活的证据。例如,您可能认为您正在跟踪城镇周围的手机信号,但这些信号背后有人。这些“信号”中的每一个都是你正在偷听并形成观点的一个人的生活…以及在企业系统中用分数标注。
虽然你可以讲述很多关于这些“信号”的故事,但是你要知道,当你这么做的时候,这些信息将被用来在此基础上构建其他东西。因此,如果你搞砸了,你只是通过将数据永久保存到云中并出售或交换给下一个最高出价者,标记了一组“人”与“信号”。关键是…确保这是你最大的努力。在你看来,如果你正在分析一个人的数据,确保你是在通过你所做的事情帮助他们,而在没有做这些事情。如果在任何时候这种平衡被打破了,那么你应该停下来重新评估这个项目。
如果你觉得自己做了一些不光彩的事情,那就说出来!你不仅仅是一个大机器中的一个齿轮,对你所做的事情不负任何责任。我听到了你接下来要说的话。我保证;真的。我多次从崭露头角的数据科学家那里听到这种说法。“但如果我说出来,我的职业生涯将会受到影响。我再也不会得到有趣或有挑战性的项目了。资助或发起这些项目的人不理解他们要求我做的事情的性质。”
“但是如果我说出来,我的事业将会靠边站。我再也不会得到有趣或有挑战性的项目了。资助或发起这些项目的人不理解他们要求我做的事情的性质。”
然后让他们明白。以同样的方式,你以有意义的方式为你的项目呈现数据,使用这种技能让他们理解当你产生有偏见或不安全的 ML 资产时会发生什么。除了你之外,还有其他人能告诉他们你的 ML 项目中固有的缺陷吗?还有人愿意站出来吗?如果“当权者”真的在乎呢?你给他们机会知道陷阱了吗?在你和他们谈话之前,你认为他们有不良企图吗?许多资助人工智能项目的企业高管希望了解可能导致公共关系噩梦、安全风险的问题,当然最重要的是公众和客户的安全问题。这些危险中的任何一个都可能导致企业倒闭。
以下是我对你能做些什么的建议。
这些都取决于你的情况,所以要清楚你选择做什么最适合你的工作环境。我不打算撒谎;你需要做的事情可能意味着你要转移到一个不同的项目、部门甚至公司。但我保证,优秀的、有道德的数据科学家将永远受欢迎。另外,你将能够在晚上睡觉,并且知道你在为社会的进步做贡献。
从具体和准备开始。
写下你看到的所有问题的要点;以及你认为对这些问题合理适当的解决方案。带着问题而来却没有解决方案只会让人沮丧。你想要改变;所以准备好告诉人们需要什么样的改变。如果他们不同意你的建议,那么请他们贡献自己的想法,让他们成为解决方案的一部分。
说出你认为继续这种不负责任的行为会带来的影响。你可以这样写,“如果我们继续不允许至少 5 周的时间来研究来自 3 级数据经纪人的数据,我们最终可能会得到一份招聘申请,这将加剧护理行业的偏见。这将造成对该行业男性的偏见,并加剧该行业正在努力缩小的性别差距”。该声明将问题(低质量的培训数据)和解决方案(5 周的额外调查时间)与结果(加剧了护理中的性别差距)联系起来。这样拼出来谁能说不呢?
记录每次会议达成的协议和决议,并达成一致的行动计划。令人惊讶的是,有多少次人们同意一个概念(例如,偏见是不好的),然后当你采取措施解决问题(例如,将应用程序发布时间延长 5 周)时,他们声称他们不同意解决方案“如何”实现。然后你又回到了僵局,没有任何改变发生。每次会议结束后,立即发送一份信息,确保每个人都同意会议内容以及如何完成。那么你有同意这个计划的书面记录。
当你展示不负责任地做一个创新项目的后果时,做好手心出汗和心跳加速的准备。其中一些步骤是对话,而不是演示。你展示或讨论的内容以及你展示的方式决定了一切。为下面的每一步考虑你的观众。他们会回避一个正式的演示,还是会期待一个?他们是想要一种情感诉求,还是需要用数字和其他事实来说服他们。为你的特定听众准备演讲或陈述,然后排练。另外,准备一份你认为他们可能会问你的问题清单,并预演你会对他们说些什么。尽量简洁。尽量不要用责备的语气或语言。记住你想要改变。你必须和那些你可能不同意的人一起工作,才能实现真正的改变。如果你用你的要求建立一个对抗或争斗的环境,那将很难改变人们的想法。在你走进会面地点之前,祈祷、冥想或用心练习,或者做任何你需要做的事情来消除你心中的仇恨。如果你没有带着爱和热情来,你将不会得到你所寻求的改变。要有勇气。你能做到的!
以下是在企业环境中通常可以接受的步骤:
1.和你的同事一起检查;如果合适的话。
如果是他们提出了不负责任的做事方式,找出是什么驱动了这种行为,然后呼吁他们改变。首先尝试单独上诉,这样群体动力就不会发挥作用。如果团队中有其他人和你有同样的感受,看看你能否让他们也畅所欲言。提出你的问题和你希望看到的解决方案,并寻求他们的帮助来带来改变。如果你打算迈出这一步,一本好书值得一读,那就是《关键对话:当风险很高时的对话工具》。
如果这不起作用,那么是时候采取下一步措施了。但首先要知道,如果你能在需要更高层人士介入之前说服团队和解,这通常会被视为伟大的领导举措。
2。 去找你经理。
大多数通情达理的经理都欢迎在你去找公司其他人之前有机会了解情况和你的观点。他们通常会把自己视为你在公司的代言人,并试图与你合作,代表你进行干预。董事或副总裁通常会问你是否尝试过与有问题的人解决问题,以及是否与你的直接经理达成了解决方案。跳过这一步通常被视为不好的形式。如果你已经采取了这一步,但没有达成一致,或者如果经理是问题的主要部分,那么继续下一步。继续推动并记录对话。在每次谈话后发送一份摘要信息,并抄送给你自己和相关人员。你想要积极的改变;所以记得用逻辑来推动对话,而不是高度情绪化的对话。
3.向你经理的老板或不同的部门求助。
如果你仍然没有一个令人满意的解决方案,那么你必须决定是继续留在你的管理层还是求助于不同的保密来源。如果你决定去一个可以调查的秘密来源,那么你可以选择人力资源、法律、隐私、数据官(如果他们不是你的报告线)、合规和道德。如果你在一家大公司工作,也很可能有某种内部匿名举报热线。如果你在一家小公司工作,比如人工智能初创公司,那么你可能没有太多选择。你必须直接上诉。不断推动行动计划,沟通和记录。如果这不起作用,你终于束手无策了。是时候进入下一步了。
4.决策点:断绝关系,继续前进
如果你觉得公司没有做任何违法的事情,但你无法忍受他们继续不负责任行为的意图,你可以简单地与他们断绝关系,不参与开发你不同意的事情。
5.决策点:焦土
这些是最极端的选择,应该被视为最后的手段,因为它们对你或你的同事的伤害不亚于这些行为的实施者。后果可能包括:关于你的负面报道、针对你的法律诉讼、公司倒闭、数千人失业、监管行动以及其他严重后果。在阅读了关于一些使用人工智能的公司和大学缺乏道德领导力的曝光后,如果你认为必须不惜一切代价阻止一家公司或组织,似乎在极少数情况下你别无选择,只能烧焦你身后的土地。
a.如果你觉得公司正在做一些公众需要知道的事情,比如克里斯·威利关于剑桥分析的事情,你可以通过匿名或公开的方式向媒体揭发。
b.你可以举行一次罢工,或者像他们在谷歌所做的那样,向公司的执行管理层提交一封公开信。
c.你可以向大学机器学习研究人员通风报信,然后他可以对你观察到的问题进行彻底的客观调查。如果这是匿名完成的,这不一定是焦土的情况。
d.你也可以(匿名或公开)向监管者或国会人士通风报信。监管机构可以展开调查,国会议员可以举行听证会。这是给监管机构的密报,最终导致 Theranos 垮台。在剑桥分析公司的情况引起国会注意后,国会将脸书的马克·扎克伯格带到了一个公共听证会上;并将脸书的做法公之于众。
只有你能决定对于你正在经历或看到的情况你需要做什么。也许你能做的最好的事情就是我选择做的事情,在人工智能伦理方面工作,帮助人们更广泛地理解人工智能系统可能出错的地方。但是,请为了世界上我们所有人的爱,如果你看到一些可能伤害人们或他们生活方式的事情,不要选择简单的沉默。大声说!
数据科学家,你应该知道的 5 种图形算法
原文:https://towardsdatascience.com/data-scientists-the-five-graph-algorithms-that-you-should-know-30f454fa5513?source=collection_archive---------0-----------------------
因为图表分析是未来
作为数据科学家,我们已经对 Pandas 或 SQL 或任何其他关系数据库驾轻就熟。
我们习惯于以行的形式看到用户,以列的形式看到他们的属性。但是现实世界真的是那样的吗?
在一个互联的世界中,用户不能被视为独立的实体。它们彼此之间有一定的关系,我们有时希望在构建机器学习模型时包括这种关系。
现在,虽然在关系数据库中,我们不能在不同的行(用户)之间使用这种关系,但在图形数据库中,这样做是相当简单的。
在这篇文章中,我将谈论一些你应该知道的最重要的图算法,以及如何用 Python 实现它们。
此外,这里有一个由 UCSanDiego 在 Coursera 上提供的大数据图形分析课程,我强烈推荐学习图论的基础知识。
1.连接的组件
A graph with 3 connected components
我们都知道集群是如何工作的?
你可以用非常通俗的术语把连通分量想象成一种硬聚类算法,它在相关/连通的数据中寻找聚类/孤岛。
举个具体的例子: 假设你有连接世界上任意两个城市的道路的数据。你需要找出世界上所有的大洲以及它们包含的城市。
你将如何实现这一目标?来吧,考虑一下。
我们使用的连通分量算法是基于 BFS/DFS 的一个特例。我不会在这里过多地谈论它是如何工作的,但是我们将看到如何使用Networkx
让代码运行起来。
应用程序
从零售的角度来看:比方说,我们有很多客户使用很多账户。使用连通分量算法的一种方法是在数据集中找出不同的族。
我们可以基于相同的信用卡使用、相同的地址或相同的手机号码等假设客户之间的边(道路)。一旦我们有了这些连接,我们就可以在相同的上运行连接组件算法来创建单独的聚类,然后我们可以为这些聚类分配一个家族 ID。
然后,我们可以使用这些家庭 id 根据家庭需求提供个性化建议。我们还可以使用这个家族 ID,通过创建基于家族的分组特征来推动我们的分类算法。
从财务角度:另一个用例是使用这些家庭 id 来捕获欺诈。如果一个帐户在过去进行过欺诈,则关联的帐户很可能也容易受到欺诈。
可能性只受到你自己想象力的限制。
密码
我们将使用 Python 中的Networkx
模块来创建和分析我们的图表。
让我们从一个用于我们目的的示例图开始。包含城市和它们之间的距离信息。
Graph with Some random distances
我们首先创建一个边和距离的列表,我们将添加边的权重:
edgelist = [['Mannheim', 'Frankfurt', 85], ['Mannheim', 'Karlsruhe', 80], ['Erfurt', 'Wurzburg', 186], ['Munchen', 'Numberg', 167], ['Munchen', 'Augsburg', 84], ['Munchen', 'Kassel', 502], ['Numberg', 'Stuttgart', 183], ['Numberg', 'Wurzburg', 103], ['Numberg', 'Munchen', 167], ['Stuttgart', 'Numberg', 183], ['Augsburg', 'Munchen', 84], ['Augsburg', 'Karlsruhe', 250], ['Kassel', 'Munchen', 502], ['Kassel', 'Frankfurt', 173], ['Frankfurt', 'Mannheim', 85], ['Frankfurt', 'Wurzburg', 217], ['Frankfurt', 'Kassel', 173], ['Wurzburg', 'Numberg', 103], ['Wurzburg', 'Erfurt', 186], ['Wurzburg', 'Frankfurt', 217], ['Karlsruhe', 'Mannheim', 80], ['Karlsruhe', 'Augsburg', 250],["Mumbai", "Delhi",400],["Delhi", "Kolkata",500],["Kolkata", "Bangalore",600],["TX", "NY",1200],["ALB", "NY",800]]
让我们使用Networkx
创建一个图表:
**g = nx.Graph()**
for edge in edgelist:
**g.add_edge**(edge[0],edge[1], weight = edge[2])
现在 我们想从这张图上找出不同的大陆和它们的城市。
我们现在可以使用连通分量算法来实现这一点,如下所示:
for i, x in enumerate(**nx.connected_components(g)**):
print("cc"+str(i)+":",x)
------------------------------------------------------------
cc0: {'Frankfurt', 'Kassel', 'Munchen', 'Numberg', 'Erfurt', 'Stuttgart', 'Karlsruhe', 'Wurzburg', 'Mannheim', 'Augsburg'}
cc1: {'Kolkata', 'Bangalore', 'Mumbai', 'Delhi'}
cc2: {'ALB', 'NY', 'TX'}
如您所见,我们能够在数据中找到不同的组件。仅仅通过使用边和顶点。这个算法可以在不同的数据上运行,以满足我上面提到的任何用例。
2.最短路径
继续上面的例子,我们得到一个图表,上面有德国的城市以及它们之间的距离。
你想找出如何从法兰克福(起点)到慕尼黑的最短距离。
我们用来解决这个问题的算法叫做 Dijkstra 。用 Dijkstra 自己的话说:
从鹿特丹到格罗宁根的最短旅行方式是什么,一般来说:从给定的城市到给定的城市。是最短路径的算法,我用了大概二十分钟设计的。一天早上,我和我年轻的未婚妻在阿姆斯特丹购物,累了,我们坐在咖啡馆的露台上喝咖啡,我在想我是否可以这样做,然后我设计了最短路径的算法。正如我所说,这是一个 20 分钟的发明。事实上,它是在三年后的 59 年出版的。该出版物仍然可读,事实上,相当不错。它如此漂亮的原因之一是我没有用铅笔和纸来设计它。我后来才知道,不用铅笔和纸进行设计的一个好处是,你几乎是被迫避免所有可以避免的复杂性。最终,令我大为惊讶的是,这个算法成了我成名的基石之一。
— Edsger Dijkstra,在与 Philip L. Frana 的访谈中,ACM 通讯,2001【3】
应用程序
- Dijkstra 算法的变体在谷歌地图中被广泛用于查找最短路线。
- 你在沃尔玛超市。你有不同的过道和过道之间的距离。您希望为顾客提供从通道 A 到通道 d 的最短路径。
- 你已经看到 LinkedIn 如何显示一级关系,二级关系。幕后发生了什么?
密码
print(**nx.shortest_path**(g, 'Stuttgart','Frankfurt',weight='weight'))
print(**nx.shortest_path_length**(g, 'Stuttgart','Frankfurt',weight='weight'))
--------------------------------------------------------
['Stuttgart', 'Numberg', 'Wurzburg', 'Frankfurt']
503
您还可以使用以下方法查找所有对之间的最短路径:
for x in **nx.all_pairs_dijkstra_path(g,weight='weight')**:
print(x)
--------------------------------------------------------
('Mannheim', {'Mannheim': ['Mannheim'], 'Frankfurt': ['Mannheim', 'Frankfurt'], 'Karlsruhe': ['Mannheim', 'Karlsruhe'], 'Augsburg': ['Mannheim', 'Karlsruhe', 'Augsburg'], 'Kassel': ['Mannheim', 'Frankfurt', 'Kassel'], 'Wurzburg': ['Mannheim', 'Frankfurt', 'Wurzburg'], 'Munchen': ['Mannheim', 'Karlsruhe', 'Augsburg', 'Munchen'], 'Erfurt': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Mannheim', 'Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']})('Frankfurt', {'Frankfurt': ['Frankfurt'], 'Mannheim': ['Frankfurt', 'Mannheim'], 'Kassel': ['Frankfurt', 'Kassel'], 'Wurzburg': ['Frankfurt', 'Wurzburg'], 'Karlsruhe': ['Frankfurt', 'Mannheim', 'Karlsruhe'], 'Augsburg': ['Frankfurt', 'Mannheim', 'Karlsruhe', 'Augsburg'], 'Munchen': ['Frankfurt', 'Wurzburg', 'Numberg', 'Munchen'], 'Erfurt': ['Frankfurt', 'Wurzburg', 'Erfurt'], 'Numberg': ['Frankfurt', 'Wurzburg', 'Numberg'], 'Stuttgart': ['Frankfurt', 'Wurzburg', 'Numberg', 'Stuttgart']})....
3.最小生成树
现在我们有另一个问题。我们为一家水管铺设公司或互联网光纤公司工作。我们需要使用最少的电线/管道连接图表中的所有城市。 我们如何做到这一点?
An Undirected Graph and its MST on the right.
应用程序
- 最小生成树在网络设计中有直接的应用,包括计算机网络、电信网络、运输网络、供水网络和电网(它们最初就是为此而发明的)
- MST 用于近似旅行推销员问题
- 聚类-首先构建 MST,然后使用簇间距离和簇内距离确定一个阈值来断开 MST 中的一些边。
- 图像分割—它用于图像分割,我们首先在图上构建一个 MST,其中像素是节点,像素之间的距离基于某种相似性度量(颜色、强度等)。)
密码
# nx.minimum_spanning_tree(g) returns a instance of type graph
nx.draw_networkx(**nx.minimum_spanning_tree**(g))
The MST of our graph.
如你所见,上面是我们要铺设的电线。
4.Pagerank
这是长期以来为谷歌提供动力的页面排序算法。它根据输入和输出链接的数量和质量给网页打分。
应用程序
Pagerank 可以用在任何我们想要评估任何网络中节点重要性的地方。
- 它已经被用于通过引用来寻找最有影响力的论文。
- 已经被谷歌用来对网页进行排名
- 它可以用来对 tweets 进行排序——用户和 Tweets 作为节点。如果用户 A 关注用户 B,则在用户之间创建链接;如果用户发推文/转发推文,则在用户和推文之间创建链接。
- 推荐引擎
密码
在这个练习中,我们将使用脸书的数据。我们有 facebook 用户之间的边/链接文件。我们首先使用以下公式创建 FB 图:
# reading the datasetfb = nx.read_edgelist('../input/facebook-combined.txt', create_using = nx.Graph(), nodetype = int)
看起来是这样的:
pos = nx.spring_layout(fb)import warnings
warnings.filterwarnings('ignore')plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (20, 15)
plt.axis('off')
nx.draw_networkx(fb, pos, with_labels = False, node_size = 35)
plt.show()
FB User Graph
现在我们想找到具有高影响力的用户。
直观地说,Pagerank 算法会给一个有很多朋友的用户更高的分数,而这个用户又有很多 FB 朋友。
pageranks = nx.pagerank(fb)
print(pageranks)
------------------------------------------------------
{0: 0.006289602618466542,
1: 0.00023590202311540972,
2: 0.00020310565091694562,
3: 0.00022552359869430617,
4: 0.00023849264701222462,
........}
我们可以使用以下方法获得排序后的 PageRank 或最有影响力的用户:
import operator
sorted_pagerank = sorted(pageranks.items(), key=operator.itemgetter(1),reverse = True)
print(sorted_pagerank)
------------------------------------------------------
[(3437, 0.007614586844749603), (107, 0.006936420955866114), (1684, 0.0063671621383068295), (0, 0.006289602618466542), (1912, 0.0038769716008844974), (348, 0.0023480969727805783), (686, 0.0022193592598000193), (3980, 0.002170323579009993), (414, 0.0018002990470702262), (698, 0.0013171153138368807), (483, 0.0012974283300616082), (3830, 0.0011844348977671688), (376, 0.0009014073664792464), (2047, 0.000841029154597401), (56, 0.0008039024292749443), (25, 0.000800412660519768), (828, 0.0007886905420662135), (322, 0.0007867992190291396),......]
以上 id 是针对最有影响力的用户。
我们可以看到最有影响力的用户的子图:
first_degree_connected_nodes = list(fb.neighbors(3437))
second_degree_connected_nodes = []
for x in first_degree_connected_nodes:
second_degree_connected_nodes+=list(fb.neighbors(x))
second_degree_connected_nodes.remove(3437)
second_degree_connected_nodes = list(set(second_degree_connected_nodes))subgraph_3437 = nx.subgraph(fb,first_degree_connected_nodes+second_degree_connected_nodes)pos = nx.spring_layout(subgraph_3437)node_color = ['yellow' if v == 3437 else 'red' for v in subgraph_3437]
node_size = [1000 if v == 3437 else 35 for v in subgraph_3437]
plt.style.use('fivethirtyeight')
plt.rcParams['figure.figsize'] = (20, 15)
plt.axis('off')nx.draw_networkx(subgraph_3437, pos, with_labels = False, node_color=node_color,node_size=node_size )
plt.show()
Our most influential user(Yellow)
5.中心性测量
有许多中心性度量,可以用作机器学习模型的特征。我将谈论其中的两个。这里可以看看其他措施。
中间中心性:不仅拥有最多朋友的用户很重要,将一个地理位置与另一个地理位置联系起来的用户也很重要,因为这让用户可以看到来自不同地理位置的内容。 中间中心性量化了一个特定节点在两个其他节点之间的最短选择路径中出现的次数。
度中心性:简单来说就是一个节点的连接数。
应用程序
中心性度量可以用作任何机器学习模型中的特征。
密码
下面是寻找子图中间中心性的代码。
pos = nx.spring_layout(subgraph_3437)
betweennessCentrality = **nx.betweenness_centrality(**subgraph_3437**,normalized=True, endpoints=True)**node_size = [v * 10000 for v in betweennessCentrality.values()]
plt.figure(figsize=(20,20))
nx.draw_networkx(subgraph_3437, pos=pos, with_labels=False,
node_size=node_size )
plt.axis('off')
您可以在这里看到根据介数中心性值确定大小的节点。他们可以被认为是信息传递者。断开任何具有高介数中心性的节点都会将图分成许多部分。
结论
在这篇文章中,我谈到了一些最有影响力的图算法,它们改变了我们的生活方式。
随着如此多的社交数据的出现,网络分析可以在改善我们的模型和产生价值方面提供很大帮助。
甚至对世界多一点了解。
有很多图形算法,但这是我最喜欢的。如果你愿意的话,一定要更详细地研究这些算法。在这篇文章中,我只是想获得该领域所需的广度。
如果你觉得我把你最喜欢的算法留在了评论里,请告诉我。
下面是 Kaggle 内核的全部代码。
如果你想阅读更多关于图算法的内容,这里有一个由 UCSanDiego 在 Coursera 上开设的大数据图分析课程,我强烈推荐你学习图论的基础知识。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。