课堂之外的数据科学
苹果 | 谷歌 | 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 !
宣传之外的数据科学—您真正需要什么样的技能?
数据科学的宣传周期即将结束,成为数据科学家的技能也在发生变化。除了摆弄最佳性能的机器学习模型,让数据科学产生商业影响比以往任何时候都更重要。在柏林 达泰库 举办的分析&数据科学会议上,我讨论了当前有助于定义和构建数据科学工作流以交付真正价值的技能组合。我演讲的幻灯片你可以在这里找到。
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 年你应该读的数据科学书籍
目前最好的数据科学书籍是什么?
数据科学无疑是目前最热门的市场之一。几乎每个公司都有数据科学职位空缺或正在考虑。这意味着这是成为数据科学家的最佳时机,或者如果你已经是一名数据科学家,并且想要晋升到更高的职位,磨练你的技能。
本文涵盖了你现在能找到的一些最受欢迎的数据科学书籍。
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)
数据科学训练营:我会再做一次吗?
项目启动一周年的思考
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 过程模型的数据科学职业反思
如何与商业分析和数据科学领域的硕士生分享自己的专业经验?鼓励他们自我反省?最近,当我应邀在一所应用科学大学做客座演讲时,我问了自己这个问题。我的方法是采用 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 上
数据科学案例研究:优化零售中的产品布局(第二部分)
商业模拟导论。
欢迎来到 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%20Pages/Maximax,%20maximin%20and%20minimax%20regret.aspx) [## AlphaGo |深度思维
专家们将这篇论文描述为“在复杂领域走向纯粹强化学习的重要一步”。我们做了…
deepmind.com](https://deepmind.com/research/alphago/) [## 蒙特卡洛树搜索简介—杰夫·布拉德伯里
游戏 AI 的课题一般是从所谓的完美信息游戏开始的。这些是回合制游戏,其中…
jeffbradberry.com](https://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/)
数据科学代码重构示例
当学习为数据科学编码时,我们通常不会考虑修改我们的代码以在性能方面获得特定的好处。我们编码来修改我们的数据,产生可视化,并构建我们的 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 是纽约公共图书馆的数据科学家。他是我在数据科学领域的第一位导师。是他让我更加意识到代码重构。
感谢阅读!希望你喜欢这个代码重构的例子,并考虑重构你的代码。你认为你将重构哪些代码?
如果你喜欢在媒体上阅读,并愿意进一步支持我,你可以使用我的推荐链接注册一个媒体会员。这样做可以用你的会费的一部分在经济上支持我,我将不胜感激。
直到下一次,
约翰·德杰苏斯
数据科学速成班
在 60 分钟内学习数据科学的基础知识
数据科学正在蓬勃发展。它不仅有趣,而且在任何领域或行业都有惊人的应用。在我所有的职业活动中,我尽我所能以一种所有人都能接触到的方式来推广数据科学。我还试图填补知识空白,尤其是在数据科学的商业应用方面。这就是创建数据科学速成班的想法。
你的第一道菜
那么,你如何着手创建自己的课程呢?对我来说并不难。作为一名数学博士,我有很多机会为我的学生创造大学水平的课程。但这次我想要不同的东西——快速、专注、高效。这就是为什么我决定建立这个课程。
它的目标是让你熟悉你可能已经听过很多次的数据科学的基本概念:监督学习、非监督学习、Anaconda、Python、pandas、json、NumPy、scikit-learn 等。我在介绍中解释了这一点:
从那以后只会变得更好。
蟒蛇和朱庇特笔记本
数据科学最基本的工具是 Python,通过为它安装一个框架 Anaconda,您将开始一些实验。
复习数学
下一步就是复习一些线性代数和统计。你需要能够操作向量和矩阵,知道什么是均值、方差和偏差,并且能够计算一些概率。
使用数据
做完这些准备后,我们就可以进入主要部分了。第一步是处理数据:从 jsons、XML、电子表格和文本文件导入数据。一旦你导入它,你就必须存储它:pandas 中的 NumPy 数组和 DataFrames 运行良好。
现在是时候拿一些实际数据来做实验了。有几个来源你可能会用到:
- 古登堡图书计划
- 社交媒体洞察的 Twitter API
- 抓取你最喜欢的网站(当然是中号!)
你可以走了!
机器学习
现在是时候讨论算法了。你有数据,你知道如何处理它,让我们用它做一些有趣的事情。我谈到了监督学习和非监督学习之间的区别,因此分类与聚类问题,或者换句话说:数据集有标签或没有标签的情况。
在这两种情况下都有许多标准技术,我会在视频中介绍它们。
可视化和交流
从事数据科学的最后一部分是与他人交流您的成果。唯一的方法是视觉化:要么把它们标在图上,要么就此写一份报告。最好的方法是使用 matplotlib 和 Dash,然后把你的代码放到 GitHub 上。
我们的 60 分钟课程到此结束!
如果您已经完成并观看了所有视频,您应该已经准备好用数据科学解决一些现实生活中的问题。
祝你好运!
数据科学-创建带有异常值的描述性统计数据的 Google 工作表浏览功能
通过分解数据中的异常值,了解如何进行正确的数据和描述性统计及分析的实用方法
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,并在获得数据的平均值和标准差之前过滤异常值。
下载
反馈和跟进
欢迎您的任何反馈,因为我相信这是我们成长和成熟的方式。欢迎随时在 LinkedIn 或 Twitter 上关注我。
数据科学网络犯罪具有可怕的潜力。
等等……什么?
自八十年代中期以来,网络攻击一直是困扰计算机的一个严重问题。自那以来,恶意软件攻击一直在以惊人的速度增长,仅在 2019 年第一季度就有近 1200 万起恶意软件案件。早在 2017 年,“WannaCry”攻击引起了人们对这一问题的关注,当时有近 20 万人受到一种蠕虫的影响。这些感染包括但不限于:
医院、政府和企业。
不幸的是,随着技术的发展,恶意软件也在发展,技术问题的实际解决方案可能很快成为恶意软件开发的垫脚石。网络安全是一个巨大的话题,坦率地说,我不太参与,但显然;当我们所有的个人信息,包括信用卡、银行对账单和地址都在网上数据库中时,安全性是极其重要的。
W 虽然我们都知道网络攻击是危险的,也许我们应该避免访问任何这种事情超出我们控制的网站,但一种新型蠕虫很有可能在未来几年袭击互联网。近年来,机器学习一直在以惊人的速度推进我们的技术发展。但任何新技术,无论是枪、刀、弓、矛、火,甚至是机器学习,都会带来不满。
一个基于数据的蠕虫有着惊人的潜力,因为与其他任何蠕虫不同;它有自我提升的潜力。通常,传输和效果是由软件的创造者在蠕虫的制作中精心安排的。然而,基于机器学习的恶意软件有可能彻底摧毁这种方法。一个适应它收集的数据的病毒是一个可怕的概念,但总的来说诚实是完全可能的。
用《狂热未来学家》中马修·格里芬的话说,
“无论好坏,人工智能都是网络安全游戏的改变者,我们需要为即将到来的事情做好更好的准备。”
事实上,在最近的攻击中,机器学习模型实际上已经被入侵者反复使用,试图窃取密码和用户输入。如果我们想继续安全地生活,没有蠕虫持续攻击我们的数据,网络安全本身可能必须改变。这不一定是数据伦理的话题了,因为当恶意软件产生时,伦理很少发挥作用。在典型的法律数据科学中,我们有一种称为数据匿名化的东西,这是一种保护参与者数据并保持其匿名的行为准则。违反这一概念就是违反传统的数据伦理,这是一种解释如何以及何时收集数据的伦理思想。
T 通常,恶意软件可以分为不同的类别,有些目标完全不同。
数据窥探
数据窥探是收集和记录通常经过加密的敏感信息。窥探攻击往往是更多攻击的开始,不仅会危及你的姓名和地址,还会危及你的银行账户和法律信息。此外,数据窥探通常是更深入、更典型的攻击的前兆。
渗透
渗透被认为是一种非常负面的情况,因为恶意软件现在正在您的计算机内部执行您不允许的具有管理权限的任务。通常当感染进入渗透阶段时,除非创建者另有指示,否则计算机将完全成为病毒的奴隶。
广告软件
广告软件稍微轻松一些,但仍然是一个严重的问题。广告软件不一定是带有恶意的软件,但在未经您允许的情况下自行安装后,通常会扰乱系统并降低系统速度。这通常是通过粗略的安装程序完成的,安装菜单混乱,当用户意外接受安装时,安装菜单会“附加”广告软件。广告软件当然是一个对参与者来说有经济收益的市场,允许从广告软件中赚钱的公司与他们分享利润。
勒索软件
勒索软件通常是渗透后可以观察到的东西。勒索软件的故事通常是对加密数据的勒索。这在包含员工和客户敏感信息的计算机化市场中尤其有害。想哭(如上所述)是勒索软件的一个很好的例子。
有了机器学习的巧妙伪装,一切皆有可能:假公司,假承诺,是的,假身份。鉴于机器学习因其图像识别和视频处理而闻名,它在右手掌权的情况下有一些严重的潜在损害。
A video using machine-learning to fake a speech made by Barrack Obama.
在最近的新闻中,一次又一次地解释说,人工智能在黑客攻击方面击败了人类,并且凭借其自然适应能力,无法对抗大多数网络安全努力。那么,对于一个主观目标是感染尽可能多的系统的人工大脑,我们能做些什么呢?当然,我们听过“不要去这里,不要去那里”的古老故事,但如果这些真的有用,为什么我们仍然担心这种威胁?
这是一个关于技术的可怕、可悲的现实,其中一些总是习惯于负面的接受。更有趣的是网络安全本身的未来。截至目前,有许多人以从事网络安全研究为生。机器学习已经被用来防止广告软件和垃圾邮件,所以看看 ML 在未来会提供什么样的安全功能会很有趣。
从伦理上讲,恶意应用程序中提出的建议在道德上与大多数机器学习爱好者所代表的东西是并列的……但机器学习技术正变得越来越容易获得,这已经不是什么秘密。随着机器学习的普及和全球化,很难相信它不会被用于任何负面的方面。毕竟,这正是大多数负面事物最初的样子。
作为 UX 问题的数据科学有效性
我们数据科学家花了这么多精力来帮助你了解你的用户……你忘记了我们也是用户 。
数据科学家也是用户。
在很多情况下,感觉就像有人试图为数据科学家制作一个数据科学工具,却从未见过一个真正的工具。如果你采用那种产品开发方法,你会让我想起那些试图闯入卫生棉条市场的兄弟们,他们从来没有咨询过女人。什么可能会出错…?
如果你是一个从未听说过用户体验(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
统计学中 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 通常用作解释拟合线如何最好地解释数据的方法。创建线性回归模型后,平均值被用作基线,并与新拟合的线进行比较。
为了更好的身体的数据科学
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
似乎我最应该意识到的是,在每个月的 中旬 左右,我的热量摄入会变得过高。
在这里,你可以尽情发挥创造力。关键是将你的数据分割成对你的生活有意义的变量,并努力改善那些不太重要的数据。
这就是我给你的全部!我希望这有助于给你的健康跟踪之旅更多的形状和方向。 祝好运,感谢阅读~
决策者的数据科学
斯泰利奥斯·坎帕克斯博士访谈
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 岁——第一部分
下面的文章将试图解释一个对我来说非常有趣的经历,与算法音乐作曲 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.***
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
热门歌曲预测的数据科学
算法能预测热门歌曲吗?让我们来探索如何仅使用音频特征来成功构建热门歌曲分类器,如我的出版物 (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 页)。斯普林格,查姆。
数据科学促进我们的智力发展
情感是人类社会的基本要素。仔细想想,一切值得分析的东西都是受人类行为影响的。心怀不满的员工对网络攻击影响很大,他们可能会忽视尽职调查,或者参与内部人员滥用。股票市场取决于经济气候的影响,而经济气候本身又取决于大众的总体行为。在交流领域,众所周知,我们说的话只占信息的 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 数据科学家和人工智能产品设计指南 。
创业公司的数据科学:容器
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)。与这些环境所提供的关注规模不同,我们将关注获取一个现有的脚本并将其包装在一个容器中。
这篇文章演示了如何使用 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 恶作剧公司的顾问。
我们其他人的数据科学
或者为什么小公司和新公司的数据科学家应该特别关注非技术性工作
Photo by Samuel Zeller on Unsplash
几天前,我读了 Randy Au 的 Medium story“在小公司/初创公司中成功成为数据科学家”,正如我在 Randy 文章的评论中所写的,我立即感觉到他触及了一个需要数据科学界给予更多关注的主题。让我把它全部大写,这样我可以强调这一点的重要性:我们大多数人都不在谷歌工作。
当然,我并不是说在谷歌工作有什么不好(也不是说我怨恨什么),当我说谷歌时,我真正的意思是“一家拥有大量数据、大规模基础设施和成熟的数据驱动文化的公司。”我想象在这些公司中的一家工作就像一种数据科学天堂,当你早上打开工作站时,你跳到一张柔软的毯子上,平稳地处理一系列定义明确的问题,具有无尽内存和 GPU 的服务器,以及迫不及待地祝贺你在运行 BERT 网络方面所做的惊人工作的支持性老板,这使公司在午餐时间又赚了 100 万美元。好吧,我可能有点忘乎所以,不知道在这个特定的数字鸿沟的另一边生活是什么样的,但我想说的是,所有关于“数据科学家”是 21 世纪最性感的工作的谈论,以及所有关于最新机器学习技术的宣传,确实投射了一个与战壕中的生活不相符的数据科学家的形象。
当然,我们不厌其烦地重复数据科学家将大部分时间花在清理数据上,我们开始听到一些声音说,在数据科学的工作环境中,并不是所有东西都是绿色的(我听说维基·博伊基斯最近的文章已经让不止一名即将毕业的训练营学生患了轻微的心脏病)。然而,当我们看到那些正在考虑从事数据科学职业的人可以获得的资源,特别是许多提供工作保证的教育初创公司推出的营销时,我们很难不认为数据科学是一条迷人的职业道路,它将允许你凭借自己磨练好的数学技能走向成功和财富的未来。
现在,不要误会我的意思:数据科学确实提供了惊人的机会,如果我卑微的经历中的 n=1 可以作为证据,这是一份充满兴奋和智力刺激的美妙工作(我会在任何一天接受它,而不是我作为大学教授的旧工作)。然而,我相信大多数进入该领域的人都不知道在成千上万的小型和新组织中进行数据科学涉及到什么,这些组织希望加入数据科学的行列,并在不清楚他们希望我们做什么的情况下扣动雇用数据科学家的扳机。因此,Randy 文章的重要性以及为什么我决定借鉴他的成果并分享我对此事的看法:与其再写一篇关于逻辑回归的教程,不如让我们告诉那些正在考虑从事数据科学工作的人我们生活中不光彩的部分,这样他们就不会感到被欺骗,也不会知道他们将面临什么。
我计划写一个关于未来在小公司和创业公司进行数据科学的挑战的完整系列,但今天我想专注于我认为数据科学工作的基石:帮助建立一种将严格的数据分析置于所有决策中心的组织文化。现在,阅读这篇文章可能会让你精神紧张,但并不是所有的公司都认同数据的作用。更多的是:许多公司认为他们是数据驱动的,而事实上他们对数据的使用是不稳定和不一致的。是的:他们正在雇佣数据科学家。
我提到这一点的原因并不是要痛斥和羞辱这些公司,恰恰相反。我想说的是,数据科学家应该把做这些公司需要的事情视为我们工作的核心部分,而不是解雇这些公司并在其他地方寻找工作。一家拥有健康数据文化的成熟公司会确切地知道自己需要什么,并雇佣某人来做具体的工作(提示关于不同类型的数据科学家的 2 、 3 、 5 、 7 或 10 的越来越多的文献)。但是许多组织还没有达到这一步,为他们工作的数据科学家不可能把所有的时间都花在构建超激动人心的十亿层人工神经网络上。通常,不仅数据或基础架构不存在,甚至预期或感知的需求也不存在。当没有人真正关心 X 公司的数据时,我们新的数据科学家会做什么?以下是我认为她应该做的事情(当然不完整):
- 一直要求数据,比如,不断地:可能有很多有才能的人知道他们在组织中的工作,但他们充其量从未想过系统地使用数据来为他们的决策提供信息,或者在最坏的情况下,对告诉他们如何工作的任何人都充满敌意。请不要骄傲自大,表现得趾高气扬,因为你知道这里有什么梯度推进机。收集你能得到的任何数据,要求人们记录他们做的事情,即使是在随机的电子表格中,以有利于分析的方式放置,并试图收集将改善公司工作方式的见解。以一种谦逊的、建设性的、非威胁性的方式展示它们,人们最终会开始使用它们。然后你会被大量的求助信息淹没,你再也不会离开办公桌去吃午饭了。
- 一直问问题:通常,人们不知道他们不知道的事情,通过问问题,对新的和/或系统的数据的需求就会出现。这也将为您提供数据科学家真正高效所需的领域知识。如果你不明白什么样的特征是相关的,什么是重要的预测以及为什么,你的随机森林将不会有很大的帮助。您需要了解业务及其需求,以便考虑度量和测量,并且您将影响其工作的人需要将您视为了解他们所面临的挑战的人。当你的问题没有明确的答案时,你将有机会推动数据收集、系统化和分析。
- 一直问为什么:很多时候,事情都是以某种方式完成的,因为事情一直都是这样做的。有些时候,当前的工作流程背后有一个很好的理由。其他人,很好的理由是过去的方式,它不再是一个相关的因素。还有一些时候根本没有理由,现状只是特别的决定和意外收获的固化结果。学会识别哪些地方没有做事情的好理由,哪些地方需要用数据对问题进行深入探讨。如果你能为改变过程建立一个好的案例(例如,一个能给组织带来切实利益的案例),人们会开始看到你的方法的优点,并更有可能接受它。
- 一直寻求帮助:前面几点的目标是帮助你的组织发展一种数据文化。如果你孤立地工作,只是偶尔从你的洞穴中出来向其他人展示你有多聪明,你不仅会完成得更少,几乎没有实际影响,而且人们会带着明显的敌意看你(可能会从冰箱里偷你的酸奶)。这一次,你肯定会错过重要的东西,这将使你很容易放弃你的工作。但更重要的是,人们需要看到你在他们认为相关的问题上与他们一起工作。所以你才会找他们要数据,问他们问题。如果那些将被你的工作产品影响的人对它有一种主人翁感,他们更有可能参与并采纳它。
- 寻求机会分享你一直以来的发现:你可能听说过沟通是数据分析的核心(如果没有人理解你为什么使用它或它的作用,你的新算法有什么意义?),但是我不能过分强调交流你所学到的东西的重要性。注意,我说的是“你学到了什么”,而不是“你做了什么”没有人关心支持向量机做什么,我所说的交流与你工作的技术方面没有什么关系。你对反向传播的美妙如此兴奋,这很好,但你公司的人想知道如何解决和改善他们每天在销售、生产、营销、客户关系或你甚至不知道存在的任何其他组织领域中处理的问题。与人交谈不仅是为了向他们学习,也是为了弄清楚与他们谈论你的职业及其重要性的最佳方式是什么。不要理所当然地认为每个人都想听你发表意见,因为你有一个梅蒂斯结业证书钉在你的隔间墙上。参与双向对话,用他们自己的方式展示你所做的对他人是多么有用*。***
所有这些观点听起来可能并不迷人,对一些人来说甚至听起来像是常识。但我还是要看到教授这些概念的学校,或者试图评估相关技能的面试官。让我再次强调:我不是说技术技能不重要,在许多工作中,它们可能是数据科学家最重要的资产。但在许多情况下,你的非技术技能将是你成功的更好预测,无论是个人还是对组织的影响。更重要的是,一旦数据、基础设施和对分析的需求到位并得到很好的确立,你的软技能和你对公司文化的影响可能是你在未来做有趣的事情的唯一方式。
我希望你也敏锐地察觉到我的微妙暗示,并看到我在上面提倡的所有“要求”都需要伴随着某种态度,这种态度结合了谦逊和真诚参与。在公司中,学习是一个集体过程,数据科学家的主要角色是通过使用公司能够收集、处理和利用的所有数据来帮助公司学习和改进。你无法独自做到这一点,了解你在企业文化中的位置以及你如何对其产生有意义的影响是数据科学家可以带来的最重要的软技能之一。**
天气预报的数据科学:如何证明一个有趣的理论
我们要做什么?
在描述这个实验是关于什么的之前,我需要给你一些背景。我的同事 Aouss Sbai(本文的合著者)和我正在寻找一个有趣的项目。所以我们问我们的导师普拉门·内德尔切夫(思科杰出的工程师)他是否有什么股票,他和我们分享了他对加州圣何塞天气的理论。他告诉我们,他能够仅仅根据 5 月 19 日、20 日和 21 日的温度来预测夏天是否会热。他要求我们证明这一点。
你没看错,根据 3 天预测 3 个月的平均天气。坦率地说,我们并不真正相信它,并以极大的怀疑态度对待这项任务。然而,我们开始尝试去理解我们如何去证明这样一个原始的陈述。
数据收集
第一个障碍
在任何数据科学问题中,任何事情的出发点都是数据。
我们到底想要什么数据?记住我们的目标:预测圣何塞市 5 月 3 天(19 日、20 日和 21 日)的平均夏季温度。
所以我们开始寻找历史温度数据的数据库或档案。你猜怎么着?对我们来说,没有一个是足够完整或简单的😬。我们找到的唯一信息来源是一个网站,旧农民年鉴,它列出了自 1945 年以来每天的平均气温。太棒了,任务完成了!嗯,不完全是…
这是 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 年的数据,看看它是否能正确预测夏季的平均温度。虽然结果肯定不会非常准确,但它仍将是一个很好的指标,表明夏天是否会热。
在未来,我们希望通过研究可能解释这一现象的其他因素来加强这一分析,并通过使用不同的分析方法来改进我们的模型。
数据科学基础:了解你的数据。真的,真的,知道吗
了解你的数据,它来自哪里,里面有什么,意味着什么。一切都从那里开始。
如果有一条建议是我一直给每一个刚起步的数据人的,不管他们是要成为分析师、科学家还是可视化专家,那就是这条。
直到现在,我大部分时间都在这座山上度过,到了痴迷的程度。这是一个沉睡但非常重要的兔子洞。
但是为什么呢?
我不认为我见过一个真正的从业者相信熟悉一个数据集和周围的系统是可选的,但这是不熟悉该领域的人在涉足该领域时会想到的事情。
生活不是一次偶然的周末旅行。向您的工作数据扔一个随机森林就像向您的数据库服务器扔一个盆景一样有效。它会损坏您的服务器,并让您到处清理污垢。
你在商界的同事,尽管不是数据人员,但也不是任何类型的白痴(希望如此)。他们是领域专家,非常了解这个行业。不要做一个初级分析师,在向首席执行官展示一个辉煌的新发现时,被问及“那么,你有没有拿出我们的 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 测试
我们用一个简单的例子来探究 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 贷款
数据科学基础®:从 Excel 导入数据— readxl
导入和导出文件有多种方式。我们上次讲过 xlsx 这次我们会通过 readxl,同样,也有一些参数需要设置,尤其是导入文本的时候。
其他导入和导出包在系列中讨论。
数据科学基础®:从 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/
- 数据科学基础®:从文本文件导入数据— textreadr & readtext
- 数据科学基础®:导入&导出 Excel 中的数据— xlsx
- 数据可视化技巧(Power BI)——将分类变量转换为虚拟变量
- 形状各异的中文词云(Python)
- 用 Python 制作一个让孩子学英语、玩得开心的游戏
数据科学基础®:从 Excel 导入和导出数据— xlsx
**数据科学是一个非常广泛的话题,在进入这个巨大的森林之前,你应该知道正确导入和导出数据这一最基础的部分。**没有数据,你就无法执行所有的机器学习技术或得出有见地的分析。你可能认为导入和导出非常容易,只需要一个简单的代码和里面的文件名。我以前也有同样的感觉,但是后来,我意识到有一些关键的参数需要更改(尤其是如果数据涉及到文本),否则,您将不会以您想要的方式获得数据。你会看到下面的例子。
这篇文章会给你一个使用 R 包的总结, **xlsx**
**。**您将了解如何导入和导出具有不同功能的 excel 文件,以及它们之间的区别。
其他导入和导出包在系列中讨论。
数据科学基础®:从 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/