TowardsDataScience 博客中文翻译 2021(七百四十八)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

为什么我成为了一名数据科学家而不是数据工程师

原文:https://towardsdatascience.com/why-i-became-a-data-scientist-over-a-data-engineer-968e750acf7?source=collection_archive---------5-----------------------

意见

帮助你决定你的职业

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由un splash【1】上的 Nick Fewings 拍摄。

目录

  1. 介绍
  2. 产品利益相关者协作
  3. Python 优于 SQL
  4. 面向实验
  5. 摘要
  6. 参考

介绍

长话短说,当然,比起数据工程师,我更喜欢做数据科学家,但是为什么呢?也许我将分享的这些来自我个人经历的原因可以与你的想法联系起来,或者至少可以帮助你决定是否要追求其中的一条道路,或者重新考虑转换到另一个角色。虽然这两个角色有着相同的第一个单词,但是这两个位置之间有着巨大的差异。

很容易将数据工程视为之前,将数据科学视为之后。我们将深入探讨这一说法,但从本质上讲,数据工程师提供了数据科学赖以发展并从中获益的基础和结构。需要注意的是,有些职位的要求是重叠的,有些公司甚至将这两种角色结合在一起。然而,我认为最好假设这些是独立的角色,因为它们的关注点有很大的不同。话虽如此,让我们看看数据科学优于数据工程的原因。

产品利益相关者协作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰森·古德曼Unsplash【2】上拍摄的照片。

在某种程度上,数据科学家有点像产品经理,这在您的决策或推理中可能是赞成或反对的。我喜欢定义问题陈述、确定数据在哪里以及如何获取数据(通常由数据工程师协助)、特征工程、模型比较、最终模型部署以及对产品用户影响的分析。

以下是一些数据科学家关于产品利益相关者协作的经验,你可能喜欢,也可能不喜欢:

  • 识别用户面临的产品缺陷
  • 用算法开发解决方案
  • 在应用程序的前端和中心查看您的产品变化
  • 分析你对企业及其用户的影响,并以此为荣
  • 更多地与产品团队合作
  • 更多地关注产品战略

当然,这些角色之间总是会有一些重叠,即使有上面讨论的这些经历。然而,数据工程师更关注数据本身,而数据科学家往往更关注产品项目。

数据工程师的用户往往也是工作场所的雇员,因为数据科学家可能是数据工程产品 pr 项目的用户。对于数据科学家来说,情况通常相反,产品倾向于面对更多的外部用户,即客户,但数据科学家仍然可以使用内部工具。

Python 优于 SQL

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

戴维·克洛德在 Unsplash 上拍摄的照片。

这些编码语言非常不同,大多数公司通常希望你精通这两种语言,不管你是数据科学家还是数据工程师。但是,对于数据工程师来说,重点通常是 SQL,而对于数据科学家来说,则是 Python ( 或 R )。也就是说,如果您不喜欢 SQL 或查询,但仍然喜欢数据本身并使用它,那么您很可能属于数据科学的阵营。

以下是数据科学家如何使用 Python 以及何时使用 SQL 的一些示例:

  • Python 在流行的库中使用
  • 包含大部分数据科学部分的 Python 库——机器学习算法
  • Python 也可以用于部署
  • SQL 通常用于预先查询数据集,或者 SQL 用于查询模型的结果,但是,有些查询可以在 Python pandas 查询库模块中完成

同样,你可能会在两种职业中都用到这两种语言,但不同的是在日常工作中你更喜欢用哪一种。如果您只关注模型本身,有时您可能会两周不使用 SQL,而其他时候您可以每小时使用一次 SQL。

面向实验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

少女在Unsplash【4】上带着红色帽子的照片。

作为一名数据工程师,你当然可以进行关于时间消耗、内存、成本等方面的实验。,但我所讨论的实验是传统的想法。

作为一名数据科学家,以下是您可能会做的一些实验:

  • 具有重要意义的传统 AB 测试
  • 特征/重要性的比较
  • 模型比较
  • 准确性或误差度量的比较
  • 业务指标比较(KPI—关键绩效指标
  • 以图形/视觉方式比较以上所有内容
  • 比较非常适合与利益相关者和非数据科学家用户进行讨论

这些实验是数据科学工作的核心,实验和比较可以应用于几乎任何工作,但对于算法和静力学来说,实验是关键。

摘要

无论你更喜欢产品方面而不是严格的工程方面,更喜欢 Python 而不是 SQL,并且喜欢测试实验情况,那么数据科学可能比数据工程更适合你。

总而言之,以下是我更喜欢数据科学而不是数据工程的一些原因,也许这些与您的想法不谋而合,或者对您来说可能是新的:

* Product Stakeholder Collaboration* Preference for Python over SQL* Experimentation Oriented

我希望你觉得我的文章既有趣又有用。如果您同意或不同意这些选择数据科学的理由,请在下面随意评论。为什么或为什么不?你认为我们还可以讨论哪些重要的原因或情况?这些当然可以进一步澄清,但我希望我能够阐明一些更独特和具体的为什么我选择数据科学而不是数据工程。感谢您的阅读!

我不属于这些公司中的任何一家。

请随时查看我的个人资料、 Matt Przybyla和其他文章,并通过以下链接订阅接收我的博客的电子邮件通知,或通过点击屏幕顶部的订阅图标 点击关注图标 的订阅图标,如果您有任何问题或意见,请在 LinkedIn 上联系我。

订阅链接:https://datascience2.medium.com/subscribe

参考

[1]照片由缺口编号防溅板上拍摄,(2018)

[2]Jason Goodman 在 Unsplash 上拍摄的照片,(2019)

[3]照片由大卫·克洛德Unsplash(2018)上拍摄

[4]照片由带着红色帽子的女孩un splash(2021)上拍摄

为什么我选择全栈数据分析作为我的职业道路

原文:https://towardsdatascience.com/why-i-choose-full-stack-data-analytics-as-my-career-path-d7b3986e0285?source=collection_archive---------17-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

埃斯特万·洛佩兹在 Unsplash 上的照片

不是数据科学家,不是 ML 工程师,也不是统计学家。只是一个普通的白色分析扭曲。

类似于寻找伴侣,我认为职业道路是非常私人的事情。没有唯一完美的答案,这完全取决于你的特点、需求、偏好、目标和使命。但是你可以做研究,向其他已经找到配偶的人学习——合适伴侣的特征,并思考这些是否是你自己想要的。

作为数据领域的新人,我最初是一名分析师,与产品经理、业务开发/战略团队以及其他数据英雄一起工作:数据工程师、数据科学家、统计学家、机器学习工程师和数据产品经理。

在观察和体验了几年数据角色的实际工作和行业最佳实践后,我决定追求 (全栈)数据分析 路径。不是作为一名数据科学家(尽管被大肆宣传为 21 世纪最性感的工作),也不是作为一名 ML 工程师(尽管报酬更高),也不是任何其他与数据相关的角色。

我所指的全栈数据分析师是指能够利用数据处理、统计和机器学习方法来提供战术见解并解决产品或业务问题的人。他知道各种数据处理技术,从查询和数据可视化到高级推理统计和机器学习,并且能够利用适当的 T21 来处理某些数据集。他还对业务环境有着广泛的理解,因此能够识别相关的数据点和要提供的见解。

它超越了回答像“我们上个月的销售额是多少”这样的直接描述性问题。"对于类似于"诊断性、预测性和规范性问题,客户满意度的驱动因素是什么?"和"我们如何立即识别滥用/欺诈客户?”。

作为一名全栈数据分析师,我喜欢的 4 件事

1.广泛曝光和动态

数据分析是一个广阔的领域,不同的组织对此角色有不同的期望,他们也有不同的角色命名。它们可以出于不同的目的存在于组织中的不同部门。一般来说,这项工作包括以下内容:

  • 识别与业务问题相关的数据(领域知识)
  • 收集、操作、综合和总结数据(技术知识:查询、统计、数据建模等
  • 向利益相关者展示见解(数据可视化、讲故事和沟通技巧)
  • 将洞察作为数据产品实施——数据工具、启发式、模型部署(技术:工程和机器学习)

考虑到工作的广泛性,很自然地,你需要掌握许多不同的技能来学习和探索。我一直很享受这条职业道路提供的商业和技术知识、硬技能和软技能的混合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据分析技能集(作者提供图片)

商业敏锐度和领域知识因你所工作的团队而异。作为一名数据分析师,你与众多利益相关者密切合作解决问题。你的利益相关者会有所不同,从产品团队、工程团队,到战略、营销或设计团队。为了理解他们的问题,你需要了解他们的背景。当你是产品增长的数据分析师时,你可能会熟悉营销渠道、数字营销,甚至不同的产品促销方案。当您是运营团队的数据分析师时,您可能会熟悉业务流程和效率指标。有趣的是,因为利益相关者需要数据来进行重大决策,你将获得利益相关者方面发生的事情的第一手资料

数据分析师的技术暴露差异很大。它肯定涵盖了基本的数据库、查询、描述性统计和数据可视化。当你进行全栈时,你可以一直进行推理统计、机器学习和产品集成。作为一名数据分析师,除了创建报告/仪表板和生成见解,我还一直在开发自己的技术知识,以进行启发式规则集和简单的预测建模这并不仅限于书面见解,我还有机会将它们应用到产品实现中!

2.走进未知,获得灵感!

在某些方面,数据分析工作就像侦探工作。可能会有一些犯罪现场、演员或证据等待检查和审问,但你永远不知道你是否会得到那个谜的“答案”。同样,在数据分析中,有大量的数据有待发现,而在你探索这些数据之前,你不知道你会从中获得什么。

(众多的)利益相关者会带着不同的问题来找你。即使在同一个领域,随着市场的发展,业务问题也是动态的。我总是对研究新问题感到兴奋,一头扎进数据中,探索转换单个数据集的无限方法。一旦开始,好奇号将开始继续探索,并在途中揭开洞见。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:https://image . free pik . com/free-vector/cat-monster-realistic-composition _ 1284-23966 . jpg;有修改

你最有可能期待的是对利益相关者来说非常鼓舞人心的见解,一些以前没有想过的有趣的东西。不是所有的数据分析结果都是这样的,不管你用的是哪种技术。这完全没问题,因为洞察力可以以多种形式出现。洞察可以是新信息,可以拒绝/验证假设的事实,甚至只是一个非结论性的结果,证实你没有正确的数据来回答问题。当我得到最后一个数据时,我将考虑一个数据代理,并研究如何为我的下一次数据探索获得正确的数据:)

3.速度和实用性

引用凯西·科济尔科夫 这里最好的分析师是闪电般快速的程序员,他们能快速浏览大量数据集,比其他专家说的“白板”更快地遇到并展现潜在的见解。与数据科学中的其他角色相比,数据分析项目的生命周期要快得多。统计学家将需要不同的统计测试来达到一定的置信水平,而 ML 工程师将需要多个过程和培训来提供一个健壮的数据模型。另一方面,数据分析师可以快速浏览当前数据并获得见解,而不会影响质量,因为他们实际上只是强调事实。

我曾在一家超高速发展的初创公司工作过,那里的事情变化非常快,问题需要马上得到回答。

作为一名数据分析师,我能够始终如一地产生影响,即使市场在发展

当然,这只能通过我在过程中确定的一些策略来实现:有更多的战术分析块(而不是宏大的基础分析),并且总是**使分析可重复——**保存查询并记录下来,或者更好的是,您可以使用 Python/R Notebook 快速重新运行。

我还对分析结果带来的直接和无形影响着迷。在大多数情况下,数据分析师的交付成果是一组可操作的见解,用于利益相关方的决策。一些关键的决策可以改变一个组织的整体方向,想象一下它来自于你的探索!

也有可能可交付成果是一组启发性的规则,用于改进当前的系统。实施变更后,您可以直接看到您的工作以及工程和运营工作对组织的影响。

4.做桥梁和翻译

我开始意识到技术人员(主要是工程师)和非技术人员(商业、管理、创意等)之间存在偏见。通常这些技术人员生活在他们自己的世界里,很难沟通。作为一名对技术感兴趣的工科毕业生,我正在通过成为一名数据分析师来消除这些偏见。

如上所述,数据分析师需要具备多种技术专长。他们需要知道如何使用数据库(PostgreSQL、MySQL、BigQuery,随便你怎么说!)、统计编程语言和库(Python/R)、数学和计算术语、多种数据处理软件(从老好人 Stata 到 Tableau)。可以肯定地说他们是技术人员,但是他们也被期望以一种易于理解的方式向非技术利益相关者交付他们的工作。

为了能够以正确的方式交付,您需要很好地了解您的利益相关者——他们是谁,他们的需求是什么,他们已经知道了什么。通过这种方式,你对他们和他们的问题感同身受,让你对组织的现实问题有所了解。最终,你可以通过数据故事来实现 洞察。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:https://image . free pik . com/free-vector/statistics-concept-illustration _ 114360-172 . jpg

在某些情况下,可以使用数据模型或其他工程工作进一步扩展洞察交付,作为数据分析师,您可以成为促成协作的推动者。您可以用*“人类”语言向业务涉众解释问题和潜在收益,用“技术”语言*与数据工程师和/或数据科学家讨论架构解决方案。

结束语

我想再次重申,职业道路的选择确实是个人偏好和决定。而且有时候角色名相同的人在不同的组织里可以做非常不同的事情(好吧,片头戏可不是闹着玩的!).在我的职业生涯中,我一直在一家高速增长的初创公司和一家科技巨头中从事全栈数据分析,这是我真正喜欢的事情。

令我沮丧的是,数据分析的作用被大大低估了,而且还有一些情况下分析被视为二等公民,这肯定会伤害组织和整个行业。这可能是由于组织没有能力很好地利用他们的分析功能,以及不想发展自己的数据分析师 —学习更多数据建模和工程方面的知识。

我分享这些东西是因为我觉得分析*(做得好)*与我的个性产生了难以置信的共鸣,我非常确定它也可以与其他人相匹配。我建议每个进入数据科学领域的人考虑自己的个人适合度,不要被某些数据科学角色的宣传所拖累。毕竟,你将不得不长期坚持和发展你的工作,所以不妨做一些让你兴奋的事情,对吗?😃

为什么我选择了数据科学硕士学位而不是训练营

原文:https://towardsdatascience.com/why-i-chose-a-data-science-masters-degree-over-a-bootcamp-e538bb305962?source=collection_archive---------32-----------------------

如何驾驭决策过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

维多利亚诺·伊斯基耶多在 Unsplash 上的照片

在我意识到我想转向一个更加以数据为中心的职业之前,我在本科毕业后的专业领域工作了两年。我当时是一名 IT 风险顾问,就前景和发展而言,这是一份很棒的工作,但这不是我的长期激情所在。

我当时的角色有点技术性,但我没有接触到我想要的那么多数据和编程。因此,我做出了艰难的决定,去寻找其他机会,让我在数据科学和分析领域打下坚实的技术基础。让我告诉你,我当时从培养这些技能的渠道方面考虑了一切,包括数据科学训练营、硕士课程和免费在线课程(MOOCs)。最终,我参加了一个我认为最适合我的情况和目标的认证硕士项目,但在这个决定过程中,我花了很多时间来权衡我的不同选择。

为了理解我的决策,我将分享我采取的步骤和考虑。我的希望不是为那些考虑从事数据职业的人指定一条特定的道路,而是分享我的经验以及可以补充或帮助你自己做出决定的东西。

不要重新发明轮子——去寻找那些经历过的人

首先要做的是——尽可能多地了解潜在的训练营,并从其他人那里获得硕士学位。当你没有那么多选择或信息需要筛选时,做决定是容易的,但这并不总是意味着你做出了最好的决定。

通过一个项目的网站在网上寻找信息是很容易的,但是你的研究不应该就此停止。如果一个训练营或大学有一个开放参观或信息会议,试着去参加,准备好几个问题。最好的问题是那些能给你新信息或让你听到个人观点的问题,这些观点是你在阅读小册子或网站时无法找到的。例如,我在纽约市参加了许多训练营的开放会议,在那里当前的成员向未来的雇主、网络和像我一样的未来候选人展示他们的最终项目。这让我对学生们完成的工作和他们的背景有了一种感觉。这也让我可以直接联系他们,并在最后问他们一些具体的问题,比如:

“你在寻找什么样的工作机会,这个项目具体如何帮助你与招聘公司取得联系?”

现在——不是每个人都能轻松参加这样的现场活动(尤其是在全球疫情期间),但幸运的是,我们生活在一个日益数字化和虚拟化的世界。尝试参加任何提供的虚拟会议,或者至少参加一次——在 LinkedIn 上联系你感兴趣的项目的前校友或现学生。具体来说,我每天的目标是在 LinkedIn 上联系至少 3 个我正在关注的项目中的人,他们目前在我感兴趣的公司工作或担任我感兴趣的角色。我甚至在我的日历上安排了一个每日事件来让我掌握它。一开始,在网上接触陌生人似乎有点冷漠和不真诚,大多数时候你会被拒绝,但你会惊讶地发现,如果被适当地询问,有很多人愿意分享他们的经验或联系。

这是我在 LinkedIn 上发给某人的一条真实信息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

幸运的是,这一信息导致了与校友成员的直接对话,在那里我解释了我的背景和考虑该项目的兴趣,并了解了他们的经验。最后,那个人强烈反对我参加这个项目。很多时候,像这样的负面消息实际上比支持你确认偏见的正面消息更有帮助。

比较选项,找到那些壕沟

在过去的 10 年中,数据科学和以数据为中心的职业越来越受欢迎,随之而来的是迎合这一领域的新学术项目和训练营的数量增加。实际上,这也使得人们越来越难以根据各种项目提供的好处来区分它们。然而,在看了足够多的这些之后,就每一个提供的优点和缺点而言,有一些共同的主题:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者创建的表格

这个列表并不详尽,我遇到的每一个都有很多其他的好处,但是这真的取决于你正在看的具体项目。例如,许多训练营似乎非常适合已经拥有行业经验和强大的工程师技术背景的专业候选人,或者拥有相关博士学位并希望补充技能以适应特定职业的专业候选人。然而,也有训练营,在那里你可以学到初级技能,它们可以适合任何人,不管你以前有什么经验。

也就是说,我所做的(也是我所建议的)是看一看所有的利弊,确定哪些好处对我来说是最有价值的,然后仔细比较两条路径,以了解哪些确实有突出的好处,而如果我选择另一条路径,则无法轻松实现或根本无法实现。我的意思是每一个的护城河是什么。护城河是由非常成功的投资者沃伦·巴菲特推广的一个术语,指的是一家公司(或本案例中的数据科学机构)相对于竞争对手的明显竞争优势。

举例来说,虽然训练营可以在项目和与行业专家一起工作方面提供更多实践经验,但我在参加硕士课程时,难道不能多花一点努力来培养这种能力吗?如果是这样的话,我真的不认为这是训练营独有的护城河。通过为我的顶点选择一个特定的项目,与一位教授合作研究应用程序,或者完成实习,我也可以获得实际的现实生活中的数据科学应用。

评估什么最适合你

一旦你很好的理解了不同的优点和缺点,根据你的首要任务来确定什么是最适合你的。对我来说,我最优先考虑的事情,没有特定的顺序,是:

a)获得真实和实用的行业经验

b)能够同时工作并维持财政支持

c)在数学和技术上挑战自我

对于 A-boot camps 是高度激励的,让我在最后得到一份工作,但没有一个是有保证的,再加上工作是在我的经历结束时得到的,我可能喜欢也可能不喜欢。另一方面,提前在研究生项目实习来试驾特定角色的想法非常有吸引力。对 B 来说——读研是一件很容易的事,因为我看到的大多数训练营每天都有紧张的日程安排,很少或根本没有时间工作或承担其他真正的责任。对 C 来说,它实际上只是提供更多理论和统计课程的学术项目,这是我在旅程中的薄弱领域。

最后几轮决定

一旦你决定了你想走什么样的渠道,剩下要做的就是找到你最感兴趣的学校并申请。成本、时间表、课程设置、声望和地点都是需要考虑的重要因素。请记住,在旅程结束时,没有一种方法可以让你成为数据科学家、机器学习工程师或“插入你想要的头衔”。希望这能帮助你更好地找到最适合你的方法。

参考

[1]勇敢,克里斯。(2019 年 7 月 7 日)。*什么是经济护城河?*收自 http:http://www . investopedia . com/articles/investing/022415/ten-worst-missons-beginner-investors-make . ASP

为什么我选择 AI 和数据科学的硕士而不是博士

原文:https://towardsdatascience.com/why-i-chose-masters-instead-of-ph-d-for-ai-data-science-b59f78b04661?source=collection_archive---------26-----------------------

选择硕士和博士学位的三大因素

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

瓦西里·科洛达在 Unsplash 上的照片

介绍

在我之前的帖子中,我描述了我获得计算机科学本科学位的经历。我也保证过我会让你们知道我接下来要做什么。所以… 【鼓声】……我将前往卡内基梅隆大学攻读计算数据科学硕士学位!

对我来说,读硕士的决定并不容易。事实上,我一直认为我要去读博士。在这篇文章中,我希望分享两个项目和之间的关键差异,以及最终导致我申请硕士项目的原因。

当我刚开始的时候,我有一个想法,我想成为人工智能和人工智能领域的顶尖人物。这意味着为自动驾驶创造最好的图像识别模型、最具互动性的聊天机器人或最高效的神经网络。换句话说,我希望能够深入学习某个特定领域,这样我就能够成为该领域的专家,并提出能够以最先进的方式执行的全新算法。我认为,博士学位是一条出路,因为它涉及研究。

嗯,我没有错,因为如果你想一想,研究是提出新的模型或算法的过程,这些模型或算法要么改进现有的工作,要么处理全球研究界尚未积极研究的有趣问题

然而,在本科期间经过近两年的探索,我意识到博士可能并不是我的理想道路。在这两个选项之间做出决定时,我考虑了 3 个主要因素。

工程师 vs 研究

虽然博士侧重于在特定领域进行深入研究,但大多数(专业)硕士项目强调让你具备实用技能,为你进入职场做准备。在对 AI & ML 上的众多项目进行研究后,我逐渐意识到我可能不会像喜欢构建产品那样喜欢研究。我从提高 1%的技术水平中获得的满足感,无法与看到一个有用的功能性产品出现时的完全兴奋相提并论。简而言之,我想比起研究,我更喜欢工程。

人与知识

在我看来,我相信建筑产品对人有更大的贡献,而进行研究则有助于相应领域的知识。虽然可以说研究也对人类和社会有贡献,但我认为产品和应用程序是为日常消费者提供帮助和便利的更直接的方式。看你更喜欢影响人还是知识,可以适当选择硕士或者博士。对我来说,我一直梦想建立一家科技创业公司,解决现实世界的问题,帮助那些需要帮助的人。对我来说,硕士似乎是一个更好的计划,因为我可以学到构建既快速又可扩展的产品所需的实用技能。

宽与窄

我想每个人都会同意,攻读博士学位需要定义一个特定的研究领域来做研究工作。另一方面,如果你完成硕士学位并开始在该行业工作,你会注意到你将能够从事各种不同的产品,从设计数据管道到构建推荐系统到评估垃圾邮件检测的不同分类方法。总的来说,你将能够在更多样化的领域工作,而不是一个特定的研究课题。因为我相信未来有很多 AI 趋势,像自然语言生成,对话式系统,多模态深度学习等。我发现很难准确找到我最感兴趣的一个。如果可以的话,我当然希望能够灵活地与所有这些人合作。因此,我认为硕士对我来说是一个更好的选择。

结论

在这篇简短的帖子中,我列出了三个主要因素,如果你决定在人工智能或数据科学领域攻读硕士或博士学位,你可以考虑这些因素。

  • 工程师 vs 研究:你更喜欢建筑产品还是做研究
  • 人 vs 知识:你更关心直接影响人还是贡献知识
  • 宽泛与狭隘:你是喜欢做不同事情的灵活性还是喜欢专注于一个主题

就这些了,希望你从这篇文章中有所收获。请随时关注我的最新文章,干杯!

作为一名数据科学家,我为什么选择 MacBook Air 而不是 MacBook Pro

原文:https://towardsdatascience.com/why-i-chose-the-macbook-air-over-the-macbook-pro-as-a-data-scientist-9207f309db0c?source=collection_archive---------0-----------------------

基准测试和其他考虑因素,帮助您在最新和最好的苹果笔记本电脑之间做出选择

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由 Iewek Gnos 拍摄的照片

目前是升级到新 Mac 的好时机,因为苹果正在推出他们改变游戏规则的苹果硅(M1)芯片。我最近想买一台新笔记本电脑,主要竞争对手是 2020 MacBook Air2021 MacBook Pro。

在本文中,您将从数据科学家的角度找到 MacBook Air 和 MacBook Pro 的详细比较,包括一些常见数据相关任务的基准测试。这篇文章的标题破坏了结尾(我选择了空气),但我会提供如何决定哪个选项适合你的建议。

我的背景

为了建立背景,这里有一些关于我的信息,以及我对个人笔记本电脑的期望。

  • 我喜欢在空闲时间从事与数据相关的项目(有时候我会写一些关于它们的东西!)。这通常意味着大量的数据处理、数据分析,有时还需要复杂的机器学习模型。
  • 我的项目通常涉及足够小以适合内存的数据集。我很少会在我的个人项目中使用真正庞大的数据集。
  • 我不经常使用深度学习模型。偶尔我会训练一个深度神经网络,但我通常使用更传统的建模技术。稍后我会解释为什么这会影响你的决定。
  • 除了业余爱好数据项目,我还做大量的照片编辑,偶尔做一些小的视频编辑。我不会用我的笔记本电脑玩任何严肃的游戏或者其他太费事的事情。
  • 我使用苹果生态系统已经很多年了,所以我没有认真考虑过任何其他选择。抱歉,所有的 Windows 或 Linux 爱好者。

注意:我也是一名专业的数据科学家,但我是在购买一台个人笔记本电脑,而不是为了工作。你是购买个人电脑还是专业电脑也会影响你的决定。

竞争者

苹果在过去一年左右发布了两款出色的笔记本电脑:采用 M1 芯片的 2020 MacBook Air 和采用 M1 Pro 或 M1 Max 芯片的 2021 MacBook Pro 。与前几代 MacBook 使用的英特尔芯片相比,苹果硅芯片已经表现出巨大的性能和效率改进。

这些机器有大量可能的配置选项,我不会一一列举(前往苹果网站亲自探索)。相反,我将它缩小到四个选项,我认为这四个选项将满足大多数人的需求,包括大多数数据科学家。以下是这四个选项及其相关的技术规格:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这四个选择之一很可能是你理想的笔记本电脑。图片作者。储存来自 Pixabay 的笔记本电脑图片。

注意:Air 和 Pro 之间还有其他的区别,我没有包括在上表中。其中一些可能会影响你的决定。我将在本文后面讨论这些差异。

**MacBook Air 总结:**苹果阵容中最便宜的笔记本电脑(虽然起价 999 美元,但还是挺贵的)。它也是最小最轻的 MacBook。但不要认为它很弱——由于 M1 芯片,它的性能优于前几代的高端 MacBooks。我列出的“升级”选项是内存、CPU 和 GPU 的最高配置。

**MacBook Pro 总结:**苹果最强大的笔记本电脑,但是哇它太贵了…它起价1999 美元。如果你愿意,你可以将规格(和价格)推得更高,尤其是如果你选择 M1 Max 芯片的话。它有 14 英寸和 16 英寸两种尺寸,可用的规格和价格都非常相似——你是喜欢便携性还是更大的屏幕,这取决于你。

缺什么?如果你熟悉苹果的产品系列,你会注意到我没有提到 M1 Max MacBook Pro。如果你主要使用笔记本电脑进行数据科学/工程任务,你可能不需要 M1 Max 芯片的所有功能。或者,如果你这样做了,你花在 M1 最大的额外的钱可能花在其他地方更好。我还忽略了 2020 年的 M1 MacBook Pro,因为我认为它对任何人来说都不是一个好的选择——它的规格与 MacBook Air 非常相似,但价格要高出几百美元。

基准测试

让我们带着每台笔记本电脑转一圈,看看这些规格如何转化为性能。我购买了所有四种配置,并对它们进行了一系列基准测试。(然后我把不想要的退了——感谢你的轻松退货流程,苹果!)

由于我计划将我的笔记本电脑用于数据科学项目,所以我在设计基准测试时考虑了数据科学任务。具体来说,我测试了三个常用于数据科学任务的 Python 库:

  • **熊猫:**测试一些基本的数据操作。具体来说,将一些大型数据框架连接在一起,然后旋转一个大型数据框架。测量每个操作需要多长时间。 这主要是一项记忆密集型任务。
  • LightGBM: 使用 LightGBM 库在大型数据集上训练多类分类模型。测量模型训练时间。 这主要是一个 CPU 密集型的任务。
  • TensorFlow: 使用 TensorFlow 库拟合神经网络,该库允许在 MAC 上进行 GPU 加速。具体来说,在知名的 MNIST 数据集上训练一个卷积神经网络(CNN),在 horse2zebra 数据集上训练 CycleGAN 模型。测量每个时期的平均时间。 这主要是一个 GPU 密集型的任务。

你可以在 GitHub 上找到测试的全部细节,包括你自己运行测试的所有源代码和指令。

结果

下面的图表显示了我测试的五台笔记本电脑的性能。以下是轴标签的关键字:

  • **基础 MBA:**M1 基础型号 MacBook Air(见上图)
  • **升级版 MBA:**M1 升级版 MacBook Air(见图)
  • **底座 MBP:**M1 Pro 底座型号 MacBook Pro(见图示)
  • **升级版 MBP:**M1 Pro 升级版 MacBook Pro(见图)
  • **2019 年 MBP:**16 英寸 MacBook Pro,配有 16 GB 内存和英特尔 i7 6 核 CPU 和 AMD 镭龙 Pro 5300m GPU——这是上一代英特尔的一款相当高性能的 MacBook(这是我的工作笔记本电脑)

让我们一个一个地检查每个测试的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注释显示 RAM 的数量。图片作者。

Pandas 基准测试要求在内存中存储和操作大型数据帧。三台 16 GB 内存的 M1 机器(升级版 MBA、基本版 MBP 和升级版 MBP)的性能比 8 GB 内存的机器(基本版 MBA)高出约 50%。不要太在意确切的数字——由于 RAM 被机器上的其他任务使用,所以会有一些差异。你应该认为这三种中间型号的性能是一样的。

一个非常有希望的结果是,base M1 MacBook Air 在这次测试中的表现优于 2019 年的 16 英寸 MacBook Pro,即使旧机器的内存是旧机器的两倍。似乎 8 GB 内存的 M1 芯片将击败 16 GB 内存的英特尔芯片。太神奇了。

**要点提示:**加倍你的记忆使记忆密集型任务的速度(大约)比预期的快两倍。如果 Air 和 Pro 具有相同的内存容量,它们的性能将相同。M1 踢了英特尔的屁股。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注释显示 CPU 核心的数量。图片作者。

LightGBM 适合大型数据集上的梯度增强树分类模型。这是一项 CPU 密集型任务——在运行测试时,所有 CPU 内核都达到了极限。

让我们从 M1 Pro MacBook Pro 的测试结果开始。升级后的 MBP 内核数量增加了 25%,性能提升了 15%。有些收益递减,但是增加 CPU 内核对性能有非常好的线性影响。

现在让我们来看看 MacBook Air 的测试结果。虽然 Air 和 base Pro 都有 8 核 CPU,但它们并不相同-Air 有 4 个性能和 4 个效率核心,而 Pro 有 6 个性能和 2 个效率核心。这有多大的区别呢?嗯,基准测试表明,差异是可测量的,但并不巨大。base Pro 的性能比 Air 高出约 8%。换句话说,两款 Pro 机型的差距是 Air 和 base Pro 机型差距的两倍。

**要点:**增加 CPU 内核以可预测的方式提高性能。尽管有效率和性能核心分布,MacBook Air 的性能仍在 MacBook Pro 的 8%以内。再说一次,即使是最弱的 M1 芯片也比英特尔芯片强。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注释显示了 GPU 核心的数量。图片作者。

我将两个 TensorFlow 测试合并到同一个总结中,因为它们讲述了相同的故事。在这两个测试中,神经网络模型都是在数据集上训练的。TensorFlow 能够在 MAC 电脑(M1 和英特尔)上使用 GPU 加速,因此这主要是对 GPU 的测试。

同样,这些结果与我们从规格中得到的预期非常接近。升级后的 MBP GPU 比基本的 MBP 多 14%的内核,而基本型号慢 10%。基础 MBP 的内核是基础 MBA 的两倍,MBA 慢 75%(两次测试的平均结果)。虽然回报有所减少,但正如预期的那样,增加 GPU 核心的数量可以提高基准测试的性能。

这是我们看到的 M1 和英特尔机器之间的最大区别。所有的 M1 机器主宰了 2019 年的英特尔 MacBook Pro。(我预计随着时间的推移,这种差异会变得更加明显——tensor flow在 M1 的 GPU 上工作,但它可能还没有优化。我期待 TensorFlow 库的一些改进,这将在未来几年内逐步提高 M1 机器的性能。)

我没有在任何 M1 Max 机器上测试,但它们显然会实现更好的性能。你可以指定 M1 最大 32 GB 的 GPU 核心(如果你愿意花超过 3100 美元)。您可以从 TensorFlow 基准测试图表中推断出该芯片的性能。

这里值得注意的另一点是,MacBook Air 没有风扇。这通常没有关系,因为 M1 芯片的效率使温度得到控制,但在长期工作负载下(如训练深度神经网络),计算机会变热。很有可能你会在某个时候看到一些热节流,这将在某种程度上减慢速度。我的基准测试运行的时间不够长,没有注意到任何节流,所以我无法评论影响会有多大。MacBook Pro 有一个风扇,所以它受节流的影响较小。

**关键要点:**增加 GPU 核心以可预测的方式提高 TensorFlow 性能,因此这是 MacBook Pro 的一大胜利,与 MacBook Air 相比,它的 GPU 更大。与旧款 MAC 电脑相比,所有芯片的性能都非常好。

*相关说明:*并不是所有流行的库都集成了 M1 GPU。例如,PyTorch 目前不支持 Mac (M1 或英特尔)上的 GPU 集成,也不清楚他们未来是否会添加支持。如果你是 PyTorch 用户,这是你必须解决的问题,要么使用 TensorFlow,要么购买云计算资源,要么购买单独的 Linux 机器和 GPU 进行机器学习。

技术规格之外的其他考虑

在提出建议之前,我想确认一些可能会影响你选择笔记本电脑的其他因素,因为我们大多数人并不使用笔记本电脑只是来处理数据。

很明显,苹果为从事密集图形设计、3D 渲染、视频工作等的人设计了最新的 MacBook Pro。他们将从 M1 Pro 和 M1 Max 芯片的强大功能中获益最多。这些用户应该为升级型号付费,因为市场上没有更好的替代产品。如果你除了数据科学之外还做(很多)这类工作,你会想要一台 MacBook Pro。否则,很有可能你并不真的需要那些权力。

MacBook Pro 上的 Liquid Retina XDR 屏幕比 MacBook Air 上的 LED 屏幕大了一英寸,远远好于后者。对于从事照片和视频工作的人来说,这是一个巨大的卖点,但对于看电影等日常任务来说也很好。Pro 的网络摄像头分辨率也更高(1080p 对 720p),这对参加大量视频通话的用户来说可能很重要。

MacBook Pro 有一个 HDMI 端口、一个 SD 卡插槽和一个 MagSafe 充电端口,因此连接永远不是问题 MacBook Air 仅限于两个 Thunderbolt/USB-C 端口。Pro 可以连接多个外部显示器,而 Air 只能连接一个。可能不是交易破坏者,但这些功能有价值。

记住 MacBook Air 也有一些优点。它的电池续航时间更长,而且比 Pro 更轻(2.8 磅,而 14 英寸 Pro 为 3.5 磅)。而且这是个人喜好,不过我觉得 MacBook Air 的楔形设计比新款 MacBook Pro 好看多了。

MacBook Air 没有风扇既有利也有弊——一方面,你可能偶尔会遇到一些热量节流,但另一方面,你永远不会被嘈杂的笔记本电脑风扇所困扰。

当然还有价格!所有这些笔记本电脑都很贵,但 MacBook Pro 真的很贵。你必须决定是真的花那么多钱买一台笔记本电脑,还是把钱花在别的地方更好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。

MacBook Air 已经有一年的历史了,所以你现在可以在 T2 找到从苹果翻新而来的产品,这是一笔更划算的交易。我买了我的翻新,我很高兴我这样做了。而且有时候不直接从苹果买也能找到交易(比如从亚马逊)。

推荐

终于到了推荐几款笔记本电脑的时候了!下面的建议考虑了基准测试的结果和我描述的其他考虑因素。

选择 MacBook Air (M1 芯片),如果…

您有轻度到中度的数据科学工作负载。如果你的大部分工作是数据操作和清理,基本的数据分析,和/或拟合非深度学习模型,你很可能就是这种类型的用户。我属于这一类(如果你想了解更多细节,请重读“我的背景”一节)。

MacBook Air 将为您提供充足的动力,并且可能比您升级的任何笔记本电脑都要快。7 核或 8 核 GPU 对于一些深度学习工作来说已经足够强大了——如果你正在做大量这种类型的工作,并且决定你真的需要你的模型训练得更快,你只需要考虑升级到 MacBook Pro。

轻度用户可以使用基本型号和 8 GB 内存,但对于大多数数据科学家来说,升级到 16 GB 内存可能是值得的。您最常执行的任务,如转换大型数据集,将会更快,您的工作效率也会更高。

如果你同意 256 GB 的硬盘,我会继续使用基本的 7 核 GPU 选项。如果你想要 512 GB 或更大的硬盘,那么我会建议升级到 8 核 GPU 选项,这只会多花 50 美元。

选择 MacBook Pro (M1 Pro 芯片),如果…

您有非常繁重的数据科学工作负载,并且/或者您有非数据科学需求,这些需求将受益于更强大的 GPU。如果你始终如一地利用 M1 Pro 芯片中强大的 GPU,你将获得足够的回报。在数据科学中,这可能意味着你要进行大量的深度学习。在数据科学之外,如果你做大量需要强大 GPU 的设计或视频工作,你可以证明这一购买是合理的。

10 核 CPU,16 核 GPU 的机型是否值得升级,就看你自己了。它比基本型号增加了 200 美元,并且在性能上有了微小但可测量的提高(参考基准测试)。你还可以对这台机器进行更多的升级,但是价格也会相应提高。

选择 MacBook Pro (M1 Max 芯片)如果…

您有需要强大 GPU 的非数据科学需求,例如设计或视频工作。我不认为 M1 Max 是大多数数据科学家的正确选择。

你可能会认为,如果你做了大量的深度学习,M1 Max 将是一个伟大的选择,你会是正确的…某种程度上。显然,M1 Max 是最适合 GPU 优化模型训练的 MacBook。但是这将花费你很多钱——24 核 GPU 选项的最低价格为 2899 美元,如果你进行任何其他升级,价格会更高。

对于繁重的深度学习工作负载,我建议你购买更便宜的 Mac 电脑(Air 或 M1 Pro),并在需要时使用节省下来的资金购买云计算资源。您的笔记本电脑仍然能够胜任较小规模的工作,当您确实需要额外的功能时,您可以支付资源费用,并且仍然可能在成本方面领先。记住,有些东西,比如 PyTorch,不能在任何 Mac 上很好地工作,即使是 M1 Max,所以你无论如何都要把工作卸载到其他地方。或者,考虑买一个 Linux 盒子和 Nvidia GPU,用于机器学习。

(如果你想了解更多关于深度学习硬件的信息,请查看来自 Nir Ben-Zvi 的这份令人敬畏的指南。他说的一件事是“深度学习笔记本电脑已经不存在了”——你最好使用云资源或建立一个桌面。)

如果出现以下情况,请选择较旧的 MacBook Pro(英特尔芯片)

您确实希望避免对现有环境、工作流或数据管道造成中断。如果您正在从英特尔 Mac 迁移,这种转变不会是一帆风顺的。由于新 MAC 的 ARM64 和旧 Intel 型号的 x86 架构之间的差异,你将不得不重新安装许多东西。例如,您需要安装新版本的 Python、Conda 和其他工具,并且需要将软件包重新安装到您的环境中。期望做一些故障排除。

也就是说,对于大多数人来说,这种改变是值得的。在过渡阶段之后,你将拥有一台更好、更快的机器。对于中断可能会中断生产代码的专业用例来说,兼容性问题可能更值得关注。您可以在短期内使用 Rosetta 来运行专为英特尔处理器/x86 架构设计的应用和程序。

选择其他东西(非苹果笔记本电脑),如果…

你想要更差的操作系统和用户体验。(开个玩笑!)

不要太在意个人对操作系统的偏好,在数据科学用例中,MAC 有一些缺点。比如 PyTorch 就没有对 MAC 的 GPU 支持。如果你做了大量的深度学习,特别是如果你使用 PyTorch,你可能会更好地服务于 Windows 或 Linux 机器与 Nvidia GPU。(或者反正弄个 Mac,花钱买云计算资源!)

结论

我希望这次讨论可以帮助您决定哪种笔记本电脑适合您,或者至少让您更好地了解您应该寻找什么样的笔记本电脑。综上所述,这是之前的同一张图,但添加了一些建议:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片作者。储存来自 Pixabay 的笔记本电脑图片。

到目前为止,我对自己选择的 MacBook Air 非常满意。是的,MacBook Pro 在性能方面确实更好,但我宁愿多花 1000 美元(或更多!)别处。老实说,我多年来一直期待这款 MacBook Pro 的发布,但它最终并不是我的正确选择。这是一台很棒的电脑,但 Air 更能满足我的需求。我想很多人会得出和我一样的结论,但是你会对这个系列中的任何一台电脑感到满意。

【2022 年 4 月更新:苹果翻新的 MacBook Pro 现已上市。你可以在原价的基础上节省 200 美元,这可能会让它更有吸引力。如果你想要 MacBook Pro,我肯定会买翻新的。然而,我认为更便宜的 M1 MacBook Air 对大多数人来说仍然是更好的选择。

成为媒体会员访问成千上万作家的故事!

为什么我停止申请数据科学的工作

原文:https://towardsdatascience.com/why-i-stopped-applying-for-data-science-jobs-7b93b3b8153b?source=collection_archive---------3-----------------------

以及为什么你应该考虑效仿

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本·怀特在 Unsplash 上的照片

九月已经来临,现在是 2020 年;新冠肺炎疫情仍然完全有效。雇主的自由休假期即将结束。从 10 月份开始,所有公司都必须为所有被解雇的员工支付全薪的 20%到 80%——如果他们想留住这些员工的话。

我是一名无薪工人。

我记得 HR 联系过我……”不幸的是,Kurtis,我们得出了一个结论,你作为机器学习工程师的角色将被解雇——“从那时起,我完全迷失了方向。

该死!

我在那里度过了过去的 18 个月,却没有任何表现。我可以指责,因为从来没有任何计划将数据驱动的决策引入公司的工作流程,但我很愿意为我的失误负责。此外,新冠肺炎严重打击了公司。他们没有豪华员工的空间。我是一名奢侈品员工。

够疯狂的是,我早就在考虑离开。我知道我在那里的日子屈指可数,但我只是没想到会这么快,或者以这种方式。

我想我可以多拿几张薪水支票,同时为我即将做出的决定做好准备。老实说,我觉得我的直线经理打卡了。在办公室的最后几天里,他情不自禁地注意到了我时尚感的转变。

"哇,KP…好漂亮的鞋子。那就不再买高级运动鞋了?他会脸上带着假笑说。

不管怎样,这是最终决定。我不可能匆忙回到一份新工作中。就好像我刚从一段有害的关系中走出来——我还没准备好再次做出承诺。

深度学习和自然语言处理在我 2020 年的“学习”清单上排在前列。也许这是上天给我们的一个信号,让我们认真对待,不要再拖拖拉拉了——我的 LinkedIn 收件箱正被自由职业者的机会所困扰,这可能证实了这一点。

我跟着直觉走。

自从我上次做全职工作以来,已经过去了几个月。我添加了一些很酷的新项目来美化我的 Github 组合,利用我在 Coursera 上参加深度学习专业化和自然语言处理专业化所学到的新技能。

我记得我告诉我的朋友“在我的一生中,我从来没有像现在这样觉得自己已经做好了工作的准备”。终于是回到全职工作的时候了。

那不会持续很久…

我只花了 15 份申请就开始了我的下一次冒险,然后我突然意识到…

也许申请工作不一定是成为数据科学家的最佳方式

我知道这听起来适得其反。听我说完。

为了得到一份工作,得到关注

毫无疑问,数据科学工作的需求很大——看看一个工作角色上传到 LinkedIn 上时收到的申请数量。我曾经和一位招聘人员交谈过,他们告诉我他们每天收到 150-250 份工作申请**。**

这让我大致了解了我所面临的情况,但同时,这也让我想知道我如何才能在所有这些申请人中脱颖而出。

有些人选择不同的配色方案,而不是传统的黑白简历。有些人会向他们认为可能对招聘过程有影响的人发送一堆冷冰冰的电子邮件和电子邮件(LinkedIn)——有趣的是,我也遇到过这样的情况。要是他们知道就好了。

一般来说,人们有很多方法试图让他们的应用程序脱颖而出。

在我看来,我相信获得一份数据科学的工作就是让你在招聘人员面前脱颖而出。

你是否是这份工作的合适人选取决于看你申请的人的理解——少谈影响他们当天决策的各种其他因素。

当我说一份简历永远不能真实地反映一个人能带来什么时,我不相信我是唯一的一个。然而,我意识到让公司去见每一个递交申请的人会适得其反。

那你怎么让自己脱颖而出呢?

如果我回想我做过的每一份自由职业,我会发现一个非常有趣的模式正在形成…

我从来没有申请过任何一个!

我只是做我的生意,在 LinkedIn 上与人交流,分享我出于个人兴趣而不是希望找到工作而创作的内容和项目。在我知道之前,人们来敲我的门要求我的服务。

一开始,我并没有刻意采用这种策略,因此它导致了许多随机的工作机会。当我意识到人们只是根据他们对我的看法来接近我,而我根据我分享的内容来决定人们在网上对我的看法时,我创造了一种策略,这种策略更专注于我实际想要解决的问题类型。

这个故事的寓意是,分享你正在做的令人兴奋的事情,人们就会来找你。此外,对你分享的内容尽可能深思熟虑总是好的。

:下面这篇文章深入探讨了这种方法。它最初是出于自由职业的考虑而创建的,但通过实施这一策略,我也收到了相当一部分永久性的邀请(我没有接受,因为这不是我想要的)。

https://medium.datadriveninvestor.com/5-ways-to-attract-freelance-data-science-clients-to-you-b79fdb76eab

自由职业的兴起

自由职业已经存在很长时间了,但是今天,它在工作中变得越来越普遍。人们决定做自由职业者的原因有很多,从创造自己的工作时间的灵活性,赚取额外现金的能力,在某些情况下比全职工作赚得多得多,以及决定你希望从事的项目类型的能力。

雇主们也见证了雇佣自由职业者而不是全职员工的诸多好处。因此,市场上这类机会稳步上升。

最初,自由职业只是我在没有全职工作的那几个月里为了经济上过得去而做的事情。我从未申请过自由职业,也不知道如何申请,因此我不禁对自己的未来感到不安。

“如果他们终止合同怎么办?”

“如果我做不了这份工作怎么办?”

“我得到差评怎么办?”

“那我的员工福利呢?”

一开始,我没有当员工时一半的安全感——当然,现在我知道这只是一种幻觉——但随着时间的推移,我在 LinkedIn 的收件箱里继续收到越来越多的自由职业邀请。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个在 LinkedIn 上联系我的人的例子——Idententy 因为保密而被模糊化了;作者图片

我知道我非常幸运有人带着工作来找我,我永远感激我在这个位置上。然而,不言而喻,我已经做了大量的工作,把自己放在这个位置上,即使是现在,我也一直在想办法提高自己,以吸引更好的机会。

有了这样的选择,我究竟为什么要决定通过申请工作来给自己施加压力呢?

哦,我忘了补充…我现在做自由职业者比做全职工作时挣得多… 我少工作了 20 个小时。

逆向法则

这个原因给这个混合体注入了一点哲理…

反向定律,或称反向努力定律,是由哲学家艾伦·瓦茨提出的。它传达了一个想法,你越是追求感觉更好,你就越不满足,因为追求一些东西只会强化你首先缺乏它的事实。例如,如果你极度渴望变得富有,那么不管你目前挣多少钱,你都可能会感到更加贫穷和不值得。

“当你试图停留在水面上时,你会下沉;但是当你试图下沉时,你会浮起来”——艾伦·沃茨

话虽如此,但毫无疑问,我想成为一名数据科学家。想到与真正聪明的人一起从事令人兴奋的数据科学项目,他们分享了我让世界变得更美好、更安全的热情,这足以让我去健身房锻炼。

落后定律强调,由于过于关注结果,我们最终会把结果放在一个基座上;从本质上说,专注于你渴望的东西只会强化你的潜意识,让你知道你目前正缺少那个东西。

相反,我们应该更加关注实现目标所需的行动。这在我们的脑海中建立了一个潜意识的自我形象,与实现目标的人相对应,因此,我们会像我们想成为的人一样思考和行动——这意味着它在现实世界中出现只是时间问题。

把它放在上下文中…

通过将我的注意力集中在数据科学家执行的动作上,并持续执行相应的动作,我将为我的潜意识提供足够的证据,以形成我已经成为我希望成为的数据科学家的信念——与希望让世界变得更好、更安全的真正聪明的人一起从事令人兴奋的项目——这将影响我的行动以及思维模式,从而采取相应的行动,直到它在现实世界中真正实现。

最终想法

我知道我的情况与其他可能阅读这篇文章的人不同。我并不是说每个人在构建自己的职业生涯时都应该遵循我的策略。一天结束时,这一切都归结为什么策略最适合你,什么让你感觉最平静。

对一些人来说,向大量的职位空缺提交大量的申请可能是一件令人愉快的事情——尽管我还没有遇到真正喜欢这个过程的人。对我来说,这种方法不太受欢迎。如果你喜欢以你一直在做的方式成功,那么你也可以继续,但如果不是,那么也许是时候改变了。

感谢您的阅读!

在 LinkedIn 和 T2 Twitter 上与我保持联系,了解我关于数据科学、人工智能和自由职业的最新消息。

相关文章

https://medium.datadriveninvestor.com/how-freelance-data-science-has-changed-my-life-4c387aa6164d </5-tips-for-beginner-freelance-data-scientists-e2b421f239d> 💔-traits-all-great-data-scientist-have-c43ab2de6e64>

我为什么写数据科学

原文:https://towardsdatascience.com/why-i-write-about-data-science-75667a5ef0ae?source=collection_archive---------39-----------------------

撰写数据科学文章的 6 大好处

今天是我在 Medium 上发表第一篇数据科学文章的一周年。它做得出乎意料的好,最初的成功给了我很大的动力。从那以后,我又发表了 11 篇文章。不幸的是,很明显,当其他人做得不好的时候,我成了新手运气的牺牲品。即便如此,我还是坚持不懈地撰写和发布文章。这是因为我不仅受到观点的激励,也受到写作的许多其他好处的激励。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源: flaticon

学习和提高技术技能

第一个好处是,它帮助我了解了更多关于数据科学的知识。当你离开大学时,你失去了所有的结构,你必须把你的教育掌握在自己手中。写文章是我做这件事的方式。无论我想学习一些新的理论还是如何应用 python 框架,我都把一篇文章作为一种目标。在学习新概念时,它给了我一些急需的指导。

我是说真正的学习!阅读和应用概念是一回事;解释它们是另一回事。当你试图把你的想法写下来时,你会意识到你理解中的所有漏洞。我经常发现,在我能把一个概念用语言表达出来之前,我不得不回过头去试着正确地理解它。最终,文章提供了学习的方向和对我理解的检验。

提高沟通技巧

当你进入职场,你首先会意识到的一件事就是沟通技巧非常重要。他们在 STEM 学位中经常被忽视。你可以学习编码,但不知道如何解释代码是如何工作的。在现实中,你必须一直这样做。更糟糕的是,你试图向其解释的人通常没有技术背景。显示编码或给出数学函数不会削减它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

同样,当我写作的时候,我想接触尽可能多的读者。这些人不一定是机器学习方面的专家,但他们仍在学习。无论是使用可视化还是书面解释,我必须找到直观的方式来解释事情。这是在我的日常工作中解释技术概念的很好的练习。老实说,我认为这些改进的沟通技巧比我获得的任何技术技能都更有价值。

沟通和技术技能的交集是编写干净、可读的代码。编写有效的代码是一回事,但编写人类能够理解的代码是另一回事。我的几篇文章是编码教程。我花了很多精力让代码变得容易理解,每一次教程,我都觉得自己在进步。这再次帮助了我的日常工作。当你在团队中工作时,能自我解释的代码会节省你很多努力。

建立工作关系网

我不只是在 medium 上发文章。我也在推特和 Instagram 上分享它们。我已经慢慢发展了一批追随者,并与同样对数据科学感兴趣的人建立了联系。这已经带来了一些机会。就我的写作而言,他们给了我一些有价值的反馈,我经常能得到新文章的好主意。比如下面 Instagram 上的问题,很多人用“情绪分析”回复。于是,我以为题写了一篇教程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

建立你的声誉

写作可以帮助你脱颖而出。通过写关于一个主题的文章,你正在确立自己作为专家的地位。文章是你知道某件事并能解释它的证据。这些技术和沟通技能在你的简历上看起来不错。这一点,加上上面提到的更大的关系网,可以帮助你打开许多机会。

你可以赚钱

更多的机会可以带来更高收入的工作,但也有直接的经济利益。特别是,在媒体上,你可以通过写作赚钱。在你兴奋之前,它不是很多。我想如果我必须计算每小时写作的收入,我的收入会远远低于最低工资。这仍然是一笔不错的奖金,而且是被动收入。一旦你写了一篇文章,它就可以永远继续赚钱。希望随着我的观众人数的增长,这个数字会变得更大。

创意出路

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到目前为止,提到的好处可能并不那么令人惊讶。我没想到的一点是,我真的很喜欢写作本身。开始的时候,很难,我的话感觉很笨拙。通过练习,我发现我的想法更容易地在指尖流动。我觉得我还有很长的路要走,但我已经发现表达自己更容易了。将来,我想写一些我的其他兴趣。甚至可能是一点虚构。

回想起来,我很高兴我开始写作。我从中学到了很多东西,我觉得它让我成为了一名更全面的数据科学家。重读我的第一篇文章,我觉得去年我进步了很多。希望一年后我会有同样的感觉。如果你对那篇文章感兴趣,你可以在下面阅读它。

图像来源

所有图片都是我自己的或从www.flaticon.com获得的。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

为什么我要花一年时间来讲故事

原文:https://towardsdatascience.com/why-im-devoting-a-year-of-my-life-to-storytelling-ed5cd2349cff?source=collection_archive---------61-----------------------

当我让人们知道我一周有一半的工作时间都沉浸在数据科学课程中时,我不确定他们首先想到的是讲故事。但这是我应得的。

Gif via Giphy

让我们倒回去一点。当我 19 岁搬到华盛顿特区,开始在一个被《纽约时报》称为“数字精英大学之外的另一种选择”的项目中当学徒时,我的技术技能非常有限。我不知道命令行是什么,除了最基本的 HTML 之外,我看不懂任何代码。

当我看到我的第一个命令行时的确切感觉

Gif 通过 Giphy ,音频通过作者

然而,我得到的是一份运用战略帮助营销活动发展的简短背景,以及成为一家公司不可或缺的一部分的强烈渴望。

我的学徒生涯让我进入了一家名为 Brazen 的初创公司。可能值得一提的是,在那里驻扎了一年后,该公司增长了 5 倍以上,筹集了另一轮资金,更改了名称,并在 DC 的初创企业中获得了一个又一个认可。在这个角色中,我获得了一个家庭。就像任何一个家庭一样,尤其是在我最易受影响的几年里,一个植根于快速发展的科技初创企业的家庭,他们留下了相当深的印记。

这个印记的一个方面是一项新技能,它完全改变了我的思维方式和我未来的轨迹——编程语言 MySQL。现在,MySQL(发音为 My-Ess-Que-Ell)允许人们查询数据库,本质上是询问和回答不同复杂程度的问题。

我不确定我们的 CTO Jason 是否知道他通过 Brazen 的软件即服务(SaaS)在在线课程和现实应用之间架起了一座桥梁,但我对公司的价值提升了。我成了我的非技术同事的资源,给我们的开发人员更多的工作时间,这对我们公司的健康发展是不可或缺的。我很快就扮演了一个真正独一无二的角色,为各部门的同事提供支持,帮助我们的客户定义成功是什么样的,并通过发现我们平台用户的新信息来支持我们的资金筹集。当我利用数据的力量时,这种感觉一直伴随着我。这改变了我对世界的看法,也改变了我如何处理出现的问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个同事画的实际白板,宣称我是候选人报告中的女王

快进到今天。我过去两年的工作让我接触到了我们国家一些最伟大的故事讲述者——他们中的许多人都专注于为我们世界上一些最昏暗的地方带来光明。

其中一位特立独行的人,艾娃·杜瓦内和她的公司 Array ,与参与者媒体合作,通过学习伙伴带你越过屡获殊荣的网飞系列,深入探讨围绕刑事定罪和不平等问题的核心,从而更深入地了解像这样的故事。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

片段来自当他们看到我们学习同伴,感谢 Array

另一个有影响力的故事讲述者**,**斯科特·布尼克和他的公司 One Community ,之前推出了电影 Just Mercy 并曝光了被错误监禁的已故沃尔特·“约翰尼·d·”麦克米兰。尽管有几十个人可以证明他的不在场证明,包括一名警察,陪审团还是建议判他无期徒刑。沃尔特的故事以及后来由于布莱恩·斯蒂文森的努力而上映,主要是通过演员迈克尔·B·乔丹、杰米·福克斯和布丽·拉尔森来传达的。Just Mercy 在全球筹集了超过 5000 万美元,并为史蒂文森的平等正义倡议赢得了新的支持。

一个社区说它的使命是“利用讲故事的力量来激励和鼓励世界发生积极的变化”。现在,跟我做一个快速练习,用 数据 代替讲故事。这些格式真的可以以创新的方式携手并进,开始弯曲数据结束的地方和故事开始的地方。跟着我。

我们的世界正变得越来越多样化,我们要求故事更好地反映我们的现实。正如传媒公司 MACRO 的第一卷《新世界》https://uprising.staymacro.com/thenewworld所言,“与现状不合,与文化同在。与过去的方式不同,与未来的方式相同。”

同样,我相信我们会看到创新的使用案例,真实世界的数据为引人注目的叙事和独特的真相讲述和传播结构提供信息。随着技术继续呈指数级发展,我们的技术人员越来越多样化,谁说数据科学家不应该在 Array 或 One Community 这样的组织中拥有一席之地。我们将有机会根据数据来讲述故事,并对叙事方向提出建议。能够决定一个角色如何穿越,这是基于一个意图,即揭露以前在阴影中的、被认为没有市场的故事。产生共鸣的能力给了我们一个案例和财务手段来收集越来越清晰的数据,并创造出为我们服务的算法。我们将扮演一个不可或缺的角色,使系统向我们展示社会需求的真实所在,并引导我们不仅想象一个不同的未来,还可能证明我们将如何到达那里。

我看到了数据和真相之间的正相关关系,即如何增加揭露我们权力体系现实的叙事,可以直接带来意识和积极的变化,从而更好地满足我们的需求,成为一个值得我们拥有的体系。我相信数据科学和讲故事之间的距离还没有完全确定,我们还有很多工作要做。我还看到人们将这些点连接起来,并在今天建设基础设施。想象一下,我们世界上最伟大的故事讲述者在一位授权和多才多艺的数据科学家面前可以做些什么。

所以,是的,我会花一年时间(至少)讲故事,因为我们作为数据科学家有能力进一步揭露目前影响我们世界的格局和权力体系。还有许许多多的故事有待发掘和探索。

“摆脱现状,融入文化。与过去的方式不同,与未来的方式相同。”

想加入我吗?点击此处获取电子邮件更新或直接发消息给我。

为什么我在 Jupyter 笔记本上使用 VSCode

原文:https://towardsdatascience.com/why-im-using-vscode-for-jupyter-notebooks-abd2a6a157b9?source=collection_archive---------4-----------------------

VSCode 是一个很棒的 Python 编辑器,而且正如我意外发现的那样,对于 Jupyter 笔记本也很有用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

朱庇特笔记本——作者图片

我第一次使用 VSCode 打开 Jupyter 笔记本完全是一个意外。

我使用 VSCode 编写独立的 Python 脚本和 Flask 应用程序,但我一直使用标准的浏览器界面来运行 Jupyter 笔记本。坦白地说,我从来没有想过要做别的事情。

但是有一天,我在浏览我的文件管理器,寻找一个特别的笔记本,不知何故,我在组成我的 D: drive 的项目文件夹的迷宫中丢失了它。我最终找到了它,出于某种原因——我想是默认行为——我双击了它。现在,正如我所说的,VSCode 是我的默认 Python 编辑器,所以双击 Python 文件会在编辑器中显示该文件。我是不是也把它设为了 ipynb 文件的默认设置?我不记得了,但我想我一定有,因为 VSCode 立即行动起来,打开了笔记本。

哦不!那不是我想要做的。

我打算打开一个命令行窗口,导航到我的笔记本文件夹,输入jupyter notebook,等待 Jupyter 服务器启动,浏览器运行,打开我想要的笔记本,最后开始编辑它。

我基本上通过简单的双击做了完全相同的事情。也许我发现了什么。至少,使用 VSCode 打开笔记本的简单性让我觉得它应该值得一看。

事实证明确实如此。

实际上,在 VSCode 中编写和运行笔记本与在浏览器中做同样的事情没有什么不同。您仍然需要安装 Python 和 Jupyter,可用的功能基本相同。但是对 VSCode 的熟悉,打开笔记本的方便,以及我经常打开它的事实意味着它已经迅速成为我默认的 Jupyter 编辑器。

还有智能感知和变量窗口——稍后会详细介绍。

VSCode 接口

您可以在文章顶部的主图像中看到 VSCode 窗口。这是常见的 VSCode 界面,但在编辑器窗口上方是 Jupyter 笔记本功能的菜单栏,除了打开新文件或保存当前文件等文件功能外,您不需要太多其他功能。

这是一个典型的代码单元格和主 Jupyter 菜单选项的特写。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

像往常一样,通过选择一个单元格并键入 ctrl-Enter 来运行它(在单元格的左侧应该还有一个运行符号,您可以单击它)。

降价单元也是相似的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按 ctrl-Enter 键,您将得到这个:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请注意,在最后一个图像中,工具栏已经移动到右侧。这没有什么神奇的;我通过选择选项并从下拉菜单中选择一个选项来切换它的位置,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

单元格工具栏选项—按作者排序的图像

这也允许你插入新的单元格,合并它们,分割它们…你可以在截图中看到这些选项。

智能感知

我很喜欢这个。有时我会忘记如何使用一些不常使用的函数:那个函数叫什么名字,我使用什么参数?智能感知来拯救我们。

正如你在下面看到的,如果你开始输入一个对象的名称(这里是一个熊猫数据框),当你点击.时,智能感知会提示你有哪些可用的选项以及如何使用它们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

变量

变量窗口是另一个好处。Variables是 Jupyter 主工具栏中的一个选项,可打开如下窗口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,它给出了到目前为止已经定义的每个变量的名称、类型、大小和值。

出口

导出功能与标准 Jupyter 界面中的相同(导出到 Python、HTML 或 PDF ),但您也可以直接从图像右侧的图标保存图像,这在您创建文档时会很有用。

结论

老实说,我并不总是使用 VSCode,我也喜欢基于浏览器的 Jupyter 编辑器(它似乎在我的小平板电脑上的触摸屏上工作得更好一些——但这可能只是这种特定硬件的一个缺点)。

但是我从中得到的是,VSCode 很方便,可以做你想用 Jupyter 笔记本做的任何事情。为什么不试一试呢!

一如既往,感谢阅读。如果你想知道我什么时候发表新文章,请考虑在这里注册一个电子邮件提醒

如果你不是一个媒体订阅者,那就注册吧,这样你就可以每月花 5 美元阅读尽可能多的文章。在这里注册,我将赚取一小笔佣金。

此外,如果你碰巧对熊猫的数据可视化感兴趣,可以看看我的可下载书籍这里

为什么 Bandcamp 盈利而 Spotify 不盈利?

原文:https://towardsdatascience.com/why-is-bandcamp-profitable-and-spotify-isnt-3444ad63e7fb?source=collection_archive---------5-----------------------

实践教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这篇报道最初发表于 组件

2022 年 3 月 9 日:我的 对史诗般收购 Bandcamp 的反应

8/16/2022: A 小分析看收入分配 关于 Bandcamp。

总结

这份报告认为,Bandcamp 的基本商业模式是增强人们购买物品的各种冲动,并允许这些冲动自由地相互作用、调节和混合,这种模式已经将该公司变成了硅谷最荒诞的公司之一:一家依靠过时技术运营的盈利创业公司。它认为,这与 Spotify 形成了鲜明对比,Spotify 经常亏损,因为该公司最终的长期目标是垄断和完全移除人类音乐家。最后,它认为 Bandcamp 的营销和软件开发努力,尽管意图良好或至少是中立的,但仍有巨大的增长潜力尚未开发。

简介

在 2008 年推出时,Bandcamp 的创始人设想该网站是一个“音乐人的发布平台”,它将为唱片艺术家做 WordPress 和 Blogspot 为作家所做的事情:为他们提供保持可靠、完全可定制的网络存在的方法。但在让音乐人能够将歌曲和专辑上传到他们的页面时,Bandcamp 的工程师很快意识到,他们无意中发现了一种草根在线市场的架构,这种架构代表了当时占主导地位的 iTunes 商店的一种有吸引力的替代方案。Bandcamp 没有效仿苹果,设定一个标准化的价格结构,而是参考了电台司令在一年前树立的榜样,当时的选择是允许粉丝支付任何他们想下载的 In Rainbows 的费用,这使得这张专辑在全球引起轰动。“也许你的专辑有 200 首歌,而你花了 10 年的时间,”Bandcamp 的创始人之一伊桑·戴蒙德(Ethan Diamond)在最近的一次采访中说。“但你应该能够自己定价,因为你比我们更了解你的观众,如果有人愿意出比你设定的最低价格更高的价格,那就太好了。”

Bandcamp 通过主页上的直播发布每件商品的销售情况。我们通过每分钟一次驱动这个销售提要的端点来检索数据,因为更频繁地点击端点不会产生更多的结果。然后,我们将这些数据与单独检索的单个相册中的数据结合起来。总的来说,大约有 670 万张销售记录在案,成功检索了 120 多万张专辑。

分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

以下是 2020 年 9 月初至 12 月底平台活动的简要概述。随着我们的继续,我们将对其中的许多数字进行更详细的分解,我们将在整个图表中使用大量的语言和符号,其中一些可能不会立即清楚,所以让我们分解两个可能不言自明的术语:

支付价格与挂牌价格的“平均比率”是苹果与苹果之间的货币比较。例如,如果一件物品的价格为 1000 挪威克朗,而买方支付 3000 挪威克朗,则比率为 3。在整个 Bandcamp,人们为他们的商品支付的价格平均是卖家标价的 1.24 倍。(Bandcamp 的销售反馈数据既包括以卖家本国货币支付的金额,也包括以美元支付的金额——据我们所知,后者遵循 PayPal 的转换率。如果一件商品来自挪威,买家花费的金额会同时以克朗和美元列出。)

“$0 商品”是指没有底价的商品,并且是纯按需付费的商品(PWYW)。请记住,即使在购买“0 美元商品”时,买家通常仍然需要支付一些东西来支付加工费,据我们所知,为这些商品支付的价格总是大于 0 美元。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

周五通常是网站最大的日子,也是艺术家更有可能发行专辑的时候,尽管可能性有多大超出了这项研究的范围。

超过 300,000 的数字是周五狂欢日(我们称之为 BCF),在这一天,公司放弃通常从每笔交易中抽取的 15%的提成。自从 BCF 推出以来,艺术家们开始相应地调整发行,BCF 现在不仅是人们购买最多的一天,也是发行最多音乐的一天。

11 月 13 日的非 BCF 销售超过 100,000 辆怎么办?那一天,菲比·布里杰斯发行了咕咕娃娃的《蝴蝶花》的封面,她卖出了 43942 张,总价 178735 美元。该曲目在有限的时间内可用,并且项目页面不再在 Bandcamp 上。碰巧的是,Bridgers 出售这首歌非常重要,我们将在最后回到这个话题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这是销售如何按商品类型细分的。简而言之,“捆绑”指的是数字唱片,其中艺术家以折扣价出售他们的全部或许多专辑。这里的比率只包括标价大于 0 美元的项目。

Bandcamp 现在是世界上最大的实体音乐销售商之一,包括黑胶唱片、CD、盒式磁带。实物商品占所有销售额的 22.9%,但占支出的 49.1%。这一巨大份额主要来自实体专辑,仅实体专辑就占总支出的 36.7%。

成本可能会在某种程度上调节慷慨程度,因为人们为低价歌曲支付的费用要高于数字专辑。尽管艺术家们对他们的专辑收取的费用比商品和实体专辑更高,但人们仍然选择为他们支付比实体专辑更高的价格。此外,人们在购买通常更贵的商品时,并不比购买实体专辑更慷慨。移除异常值会改变每个产品类别的平均比率,但不会改变整体关系。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

确定一个买家是否表现慷慨——也就是说,他们是否支付了比他们应该支付的更多的钱——是一项模糊的任务。对他们是否支付了高于最低标准的费用的基本比较会遇到几个问题。如果有人把一个 3.99 美元的东西四舍五入到 4 美元,他们慷慨吗?如果有人为纯 PWYW 产品支付任何高于 0 美元的费用呢?既然买家必须支付一些东西来支付加工费(通常计算出来大约是 0.40 美元),你如何确定他们什么时候只是支付最低限度的费用?

出于本研究的目的,包括本图表和所有其他我们探讨该术语的图表,“慷慨”是指至少支付 2 美分/便士等。高于商品价格。理想情况下,这可以控制那些只取整便士(或者卖方所在国家的任何便士)的人,并表明某种慷慨的意图。此外,我们只研究有价格下限的商品,因为设立门槛将是一项注定失败的事业,因为不可能设定一个对所有货币都有意义的单一标准。

这里的比率仅适用于至少支付了 2 美分/便士等慷慨门槛的人。高于最小值。这意味着,与第一个图表中的常规付款比率不同,平均值和中值不包括销售价格和商品价格相同的销售额。我们在其他图表中使用了这两个指标,并且会指出何时使用它们。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

2020 年 3 月,该公司在周五推出了第一个乐队营,这是一项通过放弃通常在销售额中抽取的 15%来支持艺术家的举措。这项活动非常受欢迎,以至于该公司一直在此后每个月的第一个星期五举办这项活动。

当你对比观察 BCF 日和正常日的买家行为时,会发现一些有趣的现象。比平时多了不到 3%的人在 BCF 上支付或超过了慷慨阈值,这可能很重要,但也可能不重要。但是,尽管对于有价格下限的商品,慷慨程度是一样的,人们在 BCF 上花在零价格商品上的钱比他们在其他所有日子里花的都多。

这可能是因为行为经济学家所谓的框架,即买家根据他们得到的信号行事。在 BCF 上,购买的背景是一个特殊的日子,意在支持艺术家——这种行为通常被认为是利他的。对于价格为 0 美元的商品,这种信号可能比有价格的商品更明显,因为有价格的商品本身就是竞争信号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从地理上看,Bandcamp 主要是一个美国平台。它的大部分销售额来自美国,超过 75%的销售额来自排名前五的国家,其中只有一个国家——德国——不是英语国家。

与此同时,Bandcamp 的架构已被证明足够灵活,足以让该平台获得惊人的影响力:用户几乎从地球上的任何地方被吸引到该网站,代表了不同地区、语言和全球收入阶层。

Bandcamp 上的活动与乡村人口相关的确切程度没有被探究。乍一看,这两个变量之间没有明显的关系可以完全解释这份名单的构成,这意味着差异来自其他地方——人均收入、使用其他方式收听和购买音乐、文化偏好等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这是排名前 50 位国家的慷慨度计算结果。这里的平均值和中位数是衡量慷慨度的比率——也就是说,对于那些花了2 美分/便士/T2 的人来说。高于物品价格,他们这样做的幅度。⁴

在确定慷慨购买者的比例时,没有任何因素被控制,包括货币、人均收入等。如果这些控制措施被包括在内,这些国家可能会转变,也可能不会。然而,极不可能的是,这一指标捕捉到的差异完全变平,结果至少表明,地理是决定人们为什么为自己所做的事情付费的一个变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

每个国家旁边是一个衡量该国买家支付给本国艺术家的价格,与他们支付给其他国家艺术家的价格相比。为了说明这一点,让我们假设你有一个尼日利亚艺术家和一个尼日利亚买家。艺术家在₦800 为他们的作品定价,买家向₦1600.付款比例是 2。现在让我们说,同一个买家从一位法国艺术家那里购买了一张定价为€1 英镑的专辑,他们向€支付了 1.5 英镑。比例为 1.5。如果那个买家是尼日利亚唯一的买家,并且他们只购买了这些东西,那么尼日利亚在这个图表中的比率就是 2 / 1.5 = 1.33。大于 1 的比率表明该国用户在国内购买的支出多于国际购买,而小于 1 的比率则意味着相反。

一般来说,买家对本国艺术家更加慷慨。这并非特定于某些国家或地区,似乎与相对货币实力无关。对被研究的前 50 个国家中的每一个国家来说都是如此,对前 50 名以外的国家来说也可能是如此。

充分阐明这个图表的意义需要几卷;在这个项目的早期构想中,它是报告的主要焦点。但是我们还没完成一半,所以我们会尽量简短:人们被迫花钱买他们认同的东西。⁵

对这张图表最合理的解释是,它捕捉到了共同自我认同的多个时刻:认识每个 other,⁶人的人对当地地理环境感到有亲和力,共同的文化更有可能在一个国家出现,甚至艺术家的经历导致音乐更有可能与听众产生共鸣的可能性。

重要的是,身份的许多突触和以不同方式燃烧的感觉,以及共同的国籍撒下了一张足够宽的网,足以同时捕捉其中的许多人——尽管 Bandcamp 是一个促进音乐全球化的平台。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在这张图表中,我们只分析了价格在 1 美元到$10,⁷之间的专辑(而不是歌曲),以及出现在至少 500 次销售中的流派标签。我们探索了分析 Bandcamp 流派标签的挑战之前,因为艺术家可以自由添加他们喜欢的任何标签。更深入地挖掘每一种类型实际上指的是什么,既肯定了上图中出现的联系和身份的假设,又使之复杂化了。

比如,“、Brony 、【BLM】、【LGBT】/【LGBTQ】都是比较明确的以身份为中心的标签实例。“慈善”和“募捐”本身不是。事实证明,这些标签实际上反映了两种类型的联系。

风格标签“阿拉米达”是指海湾地区的城市。这个数据集中唯一带有“阿拉米达”标签的专辑是 【斯卡曲风反对种族主义】 ,这是一张收入归反种族主义组织所有的专辑。同样,“一个羽绒的系统”指的是该乐队发行的两首曲目 EP,为亚美尼亚-阿塞拜疆冲突的受害者筹集资金。⁸“硬摇滚”标签不成比例地与同一个 EP 相关联,同现类似于“Brony”和“Pony”。甚至“LGBT”/“LGBTQ”也不是严格意义上的身份认同,因为其销量最高、比例最高的专辑之一与慈善事业有关。⁹“棒球”/“棒球”这两种与西雅图乐队 The Garages 有关的流派的高比例,主要是在一张专辑中捕捉到的,这张专辑的收入捐给了一个儿童慈善机构。

讨论

这给我们留下了什么?什么重要,什么不重要?

关键是这一切都很重要。项目类型很重要,交易双方当事人的所在地也很重要。出售的慈善性质很重要,出售者的身份也很重要。重要的是买方和卖方是否见过面,或者他们是否是陌生人。无论一件物品的价格是 0 美元还是 20 美元,无论是在艺术家收获全部还是大部分销售的日子,这些都很重要。数据中的一切都很重要,数据之外的几乎一切也可能很重要,从项目在页面上的描述方式到专辑中的曲目数量,到它是否是限量版的专辑封面。

一旦你从 Bandcamp 的数据中找到了所有可以直接测量的东西,你就必须考虑所有你不能测量的东西。买家在购买时是坠入爱河还是正处于狂躁期?他们是在音乐氛围中长大的吗?他们生活在 100 万人以上的大都市吗?他们是长期尼古丁使用者吗?

这份报告我们已经完成了一半,希望你能读到最后。但是如果你没有,那就带着这个离开: Bandcamp 已经成为一种极其罕见的公司类型,一家盈利的初创公司,它只不过是为人类经验的混乱变量在经济交易中的互动提供了一个陈旧的平台。这个基本模型是如此的有效,以至于不管网站的其他缺点是什么,它都能工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

事实上,乐队营是有利可图的,一家初创企业可能会让一些人感到意外。2010 年,Bandcamp 获得了两笔首轮投资:一笔来自位于门洛帕克的风险投资公司 True Ventures,另一笔来自投资者布拉德·加林豪斯(Brad Garlinghouse)。True Ventures 的成功退出包括 Peloton 和 Fitbit,它们都上市了,还有被亚马逊收购的 Ring。自 2017 年以来,加林豪斯一直是 Ripple 的首席执行官,截至本文撰写之日,Ripple 是市值第七大的加密货币,在 2017 年的繁荣时期,其价值飙升了 3600%以上。

做一点餐巾纸数学,这是我们估计该公司去年的总收入,包括 BCF 销售额,并考虑了一些基于项目价格的支付的更高层次的差异等等。我们没有考虑专辑和曲目之外的项目类型的差异。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

这是我们估计该公司去年从 15%的费用中得到的。该数字不包括 BCF 销售额,同样也考虑了基于正常天数与 BCF 的价格差异,以及项目价格。

Bandcamp 首席执行官戴蒙德表示,他的公司自 2012 年以来一直盈利。如果我们除了这个估计之外没有其他信息,我们会相信他。2100 万美元足以支付公司的运营成本,包括员工工资、服务器成本以及办公室和奥克兰实体唱片店的租金。

但是我们不仅仅只有这个估计。我们知道,自 2010 年 A 轮融资以来,该公司没有再进行投资,而且灯还亮着。我们知道,它还没有被一家在不良资产中看到了机会的私人股本公司蚕食。没有理由怀疑戴蒙德的说法。

记住这一点,让我们看最后一个图表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

尽管人们可能不知道 Bandcamp 是盈利的,也是一家初创公司,但他们通常也不知道 Spotify 根本没有盈利。在很大程度上,Spotify 除了赔钱什么都不做。购买播客的独家版权,支付大量唱片公司许可费,同时向用户收取不超过 9.99 美元(该公司可能会提高的月订阅费),其中大多数人选择不付费,这是很昂贵的。

这是因为 Spotify 对人类作为经济行为者的理解几乎是最大限度的简化、过时和有根本缺陷的。

它的误解始于一个简单的音乐误解:考虑到听众的情绪,Spotify 应该为他们提供与这种情绪相匹配的音乐。这是首席执行官丹尼尔·埃克从一开始就明确的使命宣言,也是其“适合每种情绪的音乐”广告活动背后的理念,该活动一直持续到去年。如果有人要在秋天去公园散步,应该给他们提供秋游音乐。如果他们已经和某人分手了,应该给他们提供分手音乐。如果你曾经遇到过一个名字可笑的 Spotify 管理的播放列表,比如白日梦者、背景中的钢琴电影放松,你已经瞥见了这个野心。

这里的结局并不难理解:如果秋天的散步和白日做梦最好伴随着某种音乐,并且我们可以弄清楚那些声音是什么,为什么艺术家们还要制造它们呢?该公司对这一未来的暗示如此强烈,以至于几乎要发布一份新闻稿。与此同时,该公司通过与 Joe Rogan 等明星播客的独家交易以及收购 Gimlet Media 等公司来寻求主导地位,实际上购买了播客的市场份额,试图垄断市场并控制相当于音频广告的谷歌广告。

在这两个方面,Spotify 都在追求标准硅谷商业模式的两个方面,即一家公司烧钱,直到人类完全消失(就像优步的无人驾驶汽车一样)和/或直到消费者几乎没有其他地方可以去购买他们之前从各种来源购买的东西(就像亚马逊一样)。拼车公司发现,做第一件事并不总是成功。做第二件事需要很长时间,而且之所以可能,是因为美国薄弱的反垄断机构几十年来一直允许掠夺性定价(即以低于成本的价格排挤竞争对手)和不问问题的并购,而这一机构正在迅速纠正方向。

但 Spotify 的业务不仅仅建立在错觉和非法性之上——这也是一个明显愚蠢的模式,它无视过去几十年的行为经济学研究,坚持将用户视为理性行为者,他们只是以最低的价格寻求最多的商品。

克里斯·古林斯基在加州大学圣地亚哥分校的博士论文研究了 Bandcamp 用户,他向我们指出,Spotify 的模式甚至忽略了一个基本原则,即 20%的买家通常会购买 80%的商品。相反,每个 Spotify 用户的价值以每月订阅价格为上限。⁰通过拒绝买家与卖家建立直接经济关系的可能性,Spotify 别无选择,只能继续追求其妄想的、非法的、愚蠢的商业模式,这种模式对寻找人们为音乐付费的方式不太感兴趣,而是对推广一种人们只是勉强付费的收听模式更感兴趣。

所以 Bandcamp 是盈利的,Spotify 不是。一个建立在价值创造的基础上,另一个建立在投机热情的基础上。Bandcamp 建立了一个现代商业模式,而 Spotify 建立了一个过时的商业模式。

为什么投资人把钱都往一个里倒,而不是另一个?True Ventures 和 Garlinghouse 作为该公司唯一的上市投资者,很可能是 Bandcamp 的董事会成员,为什么不推动该公司实现架构现代化,积极推销自己,并要求风险投资者采取各种措施,有效地将枪对准首席执行官的脑袋,告诉他们要么成长,要么死亡?

这是一个完全错误的推测,但仍然是一种可能性:

具有讽刺意味的是,这可能是因为该公司的盈利能力。风险投资的理念是,在一个由 10 家公司组成的投资组合中,9 家公司失败了,其中一家 100 倍。乐队既没有失败,也没有壮大。相反,它已经成为一家利润适中的公司,没有任何接管世界的明确意图。在这种情况下,它变得不像硅谷投资者追逐的超高增长股票,而更像 90 年代的公司债券或 IBM 股票,它们可靠地支付股息,但不会让任何人像 Peloton 或 Ripple 那样富有。进一步投资成为不必要的风险,危及安全的收入来源。

如果这是真的,有两个发展可以动摇这种自满。

首先,投资者押注一家初创企业最终可能 100 倍于至少部分依赖于市场中不受监管者质疑的非法活动。像脸书、亚马逊和谷歌这样的公司发展到今天的规模,靠的是一些策略,即使是政治上温和的政策制定者现在也认为这些策略是犯罪。随着他们的规模越来越大,他们也从风险公司手中收购投资组合公司,允许投资者退出。随着监管机构审查拆分科技巨头的可能性,以及他们更密切地审查收购,这两种退出途径——成为垄断企业或被垄断企业收购——都可能会缩小。

其次,在 Bandcamp 于 2008 年成立十多年后,其他投资者、创始人和卖家已经发现,那些确实能促进卖家和客户之间经济关系的企业——让无数变量随心所欲地互动——实际上启动和投资成本更低,成功的速度也更快。Spotify 大约 70%的成本用于唱片公司的授权费。Patreon、OnlyFans 和 Substack 没有这样的成本,同时也利用了各种经济经验,允许人们满足他们必须支付的大量冲动。

就在我们结束这篇报道的时候,Twitter 和 Square 首席执行官杰克·多西宣布,Square 将收购长期陷入困境的挪威音乐流媒体服务 Tidal——这一宣布是在 Twitter 收购时事通讯平台 Revue 之后。“Square 为卖家和个人创造了工具生态系统,我们也将为艺术家做同样的事情,”多尔西在他关于 Tidal 收购的推特帖子中说。“我们将致力于全新的聆听体验,以拉近粉丝之间的距离,为 merch 销售提供简单的集成,现代协作工具,以及新的补充收入流。”

不清楚杰克对 Tidal 和 Revue 的热情到底是什么。最坏的情况可能涉及到 NFTs。一个不太复杂也可能更有可能的情况是,这只是创新平台的新惯例。买家想直接付钱给创作者,创作者想得到报酬。除了统治世界,成为一个允许这种基本交易发生的平台比拒绝它更有利可图。

如果这些是市场实际上发出的信号,这可能意味着 Bandcamp 不再是公司债券或蓝筹股,而是更接近于 True Ventures 和 Garlinghouse 十年前首次投资时所希望的成长型公司。

考虑到这一点,以下是 Bandcamp 应该做的事情的一个非常不完整的列表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

首先,该公司应该从技术和品牌惯性状态中解脱出来。尽管 Bandcamp 深受艺术家和听众的喜爱(在这一点上,不言而喻,对我们来说也是如此),但这个平台在创建后就感觉自己已经钙化了。网站很慢。它的布局元素怪异地违反直觉。你不能在应用程序中下载音乐,应用程序只允许低质量的流媒体。API 没有提供有意义的方法来将平台与外部服务集成。

与此同时,除了该网站的内部音乐出版物《Bandcamp Daily》和奥克兰市中心的一家大多数人永远不会遇到的实体唱片店之外,该公司似乎没有营销,主要依靠艺术家自己来营销他们自己的工作平台。如果我们描述我们的研究在多大程度上引导我们接触到了那些甚至没有听说过 Bandcamp 的人(有点令人沮丧的是,这个群体中包括一些知名唱片公司的决策者),该公司的管理人员会感到不安。

该公司还应该进入一个更具实验性的运作模式,一个完全以行为为导向的商业模式需要充分发挥作用。如果人们在与他们共享一个城市的艺术家身上花费更多,看看直接在他们的城市推广工作是否会导致更多的花费。如果出现像 Buy Music Club 这样的网站,一个独立创建的分享 Bandcamp 播放列表和推荐的网站,收购该网站并将其整合到应用程序中。构建 API,例如,NTS RadioDJ 可以轻松地将专辑/曲目页面集成到曲目列表中。诸如此类。

第二,该公司应该积极吸引更多大型艺术家在平台上发布音乐,不仅带来更多收入,还能使平台超越其利基地位。说服一些较大的艺术家发布一张在⁴流媒体平台上没有的 EP,看看会发生什么。根据 Spotify 的人气评分,菲比·布里杰斯(Phoebe Bridgers)与查莉 XCX 不相上下,她在 Bandcamp 上独家发布的一首限量版歌曲为慈善机构筹集了超过 17.8 万美元的资金。如果这些钱都不捐给慈善机构会怎么样?⁵10%吗?如果是整张专辑而不是一首曲目呢?

同样,我们不知道,但这首歌的销售确实开始证明这样的说法是错误的,即大艺术家的粉丝被动地吸收了艺术家发出的任何声音——事实上这其中有关系,因此,这是一种经济学。虽然人气如何影响付费意愿的数据尚不清楚,但古林斯基的研究得出结论,至少,喜欢更受欢迎的艺术家的人不会因此减少使用 Bandcamp 本身的可能性。然而,值得一提的是,电台司令粉丝自愿向乐队付费的意愿是该公司的基本观察结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

第三,由于我们所有的命运都是交织在一起的,宇宙中的事物都是相连的等等,Bandcamp 应该认识到,在某些有利于它的市场条件下,它可以增长最多。对 Bandcamp 最有利的条件是那些有利于价值创造和不赞成空洞的投机和犯罪的条件。为此,该公司应该考虑与其他有望从严格的反垄断执法中获益的公司会面,如 DuckDuckGo、Affinity 和其他许多公司,组建一个贸易团体,并聘请一些游说者。

目前,唯一存在的相关团体是应用公平联盟,这是一个由 Basecamp 和 Epic Games 组成的贸易团体,主要兴趣是降低苹果 30%的应用商店费用。从长远来看,降低这些费用可能对 Bandcamp 达到一定的增长水平很重要:Bandcamp 不允许应用内购买的全部原因是,它可以保留与艺术家的收入分成,而不必同时削减一家万亿美元的公司。在撰写本文时,该联盟已经成功地让亚利桑那州众议院通过了一项法案,该法案将迫使苹果和谷歌允许替代支付方式来绕过他们的把关。

Bandcamp 或许应该加入,但应该不止于此。该联盟的成员之一是 Spotify,该公司多年来一直讽刺性地指责苹果和谷歌的垄断行为。这可能是 Spotify 唯一能从解决反垄断问题中获益的了。在这种情况下,Spotify 和 Bandcamp 的利益异乎寻常地一致。但有利于 Bandcamp、DuckDuckGo、Affinity 和其他公司的市场条件远远超出了 app store 的范围,深入到了我们经济的核心。据我们所知,目前没有贸易团体在这一领域进行宣传。乐队营应该帮助启动它。如果事实证明有一个存在,它应该加入。

但是,尽管美国立法者最近做出了反垄断努力——其中许多将直接影响今天的音乐产业——band camp 的最佳举措可能超出了北美。UCL 伦敦最近提交的一份报告描述了英国创意产业内部的广泛危机,描述了所有新兴和已建立的创意部门的代理和收入的重大损失。除了当地的经济政策,该报告认为垄断的科技平台是这场危机的主要驱动力。Bandcamp 在反对这种形式的反垄断方面立场独特,其专业知识可以为知识产权改革、数字发行立法、定价阈值、所有权等提供信息,是更大战略地位的一部分。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

最后,如果这些建议对公司过去的投资者来说太难接受(推测/假设/等等)。),创始人和/或员工应该看看是否有办法买断它们。希望事实正好相反,投资者实际上明白,创办一家新的 Spotify 并不明智,政治潮流已经发生了变化,Bandcamp 通过创造价值而不是违反反垄断法规,成为他们最初希望的投资组合巨鲸的可能性现在比十年前更大。

结论

我们将以这个音符结束:

我们认为这份报告中有足够的信息让不同的读者带走他们认为有价值的东西,忽略或摒弃他们不认为有价值的东西,只要他们记住最重要的一点:Bandcamp 的模式是反脆弱的,而 Spotify 的不是,这就是 Bandcamp 盈利而 Spotify 不盈利的原因。我们将增加一个不可谈判的要点,即 Bandcamp 是由尊重音乐的人创立的公司,而 Spotify 不是。这是两者之间的区别,其他一切都源于此。

Spotify 永远不会提供其艺术家们无休止地呼吁的东西:公平的报酬和不涉及贿赂或类似音乐 SEO 的艺术家发展的诚信途径。它不会这样做,因为超出基本荷尔蒙调节的音乐的存在不会引起它的兴趣,因此,音乐家的存在也不会引起它的兴趣。Apple Music(第二大流媒体平台)和 Amazon Music(第三大流媒体平台)在多大程度上也是如此还有待商榷,但在大多数情况下,它们并没有在相反的方向做出明显的姿态。

也许所有这些都夸大了两个生态系统之间的竞争;在许多方面,它们可以被视为互补的,因为流媒体提供了音乐发现的途径,而 Bandcamp 提供了经济关系的途径——戴蒙德曾经将 Spotify 比作收音机,一个发现新艺术家的地方。除了虽然 Bandcamp 可能会将流媒体平台视为补充,但亚马逊、苹果和 Spotify 在过去十年里吞噬了整个市场,很少将自己视为任何东西的补充。

在这项研究的过程中,我们中的一个人向在流媒体平台上独家发布艺术家音乐的唱片公司的某人建议,他们应该在 Bandcamp 上放几首歌,看看会发生什么。这位人士说,他们会向公司的其他人提出这个想法,“作为任何想要追求‘地下’外观的艺术家的一个想法。”

这里提出的每一个建议都是一个忠告的一个方面:乐队营竭尽所能,这样就不会有人再发这样的电子邮件了。

致谢

特别感谢凯德·迪姆(新设计大会)、克里斯·古林斯基(惠普)、阿伊莱特·格尼兹(加州大学圣地亚哥分校拉迪管理学院)、方敏雅·钟(NYU 斯特恩商学院)和马特·斯托勒(美国经济自由项目)在整个项目中的交流和反馈。

如果你喜欢这篇报道,你可以在这里订阅我们的时事通讯

如果您没有,并且想要投诉,请联系 mail@components.one

脚注

由于 Spotify 在流媒体市场中的地位、对其他参与者的巨大影响以及我们对编辑简洁的兴趣,Spotify 是本报告中唯一一个与 Bandcamp 进行认真研究的流媒体服务。值得承认的是,Spotify、亚马逊、Tidal、苹果、SoundCloud(尤其是)等等之间确实存在差异。

在分析过程中,公司的声明和我们的结果之间出现了一些差异。例如,《卫报》报道说,在周五的第一次乐队营上,“乐迷们在 24 小时内在乐队营上购买了 80 万张唱片,总计价值 430 万美元的音乐和商品。”这一原始数据比我们在四个星期五的乐队营中捕获的任何一个都要高。然而,各自的销售数字大致相同——我们记录的上周五的乐队营收入约为 470 万美元,但仅包含约一半的销售额。目前还不清楚为什么会存在这样的局部差异,但这是值得指出的。来源。⇗

也就是说,没有对此进行显著性测试。

⁴平均数和中位数比率都排除了支付价格超出每个国家平均数三个标准差以上的异常值。

⁵用另一种方式说,“人们增加了与陌生人合作的程度,他们认为这些陌生人是即使是最少触发的团结团体的一部分。”来源。⇗

⁶很难不认为这解释了卢森堡这个微型国家的特别大的比率。

⁷:我们根据 Bandcamp 的换算来衡量美元价格。

⁸这个相册页面已经不可用了。

⁹:这张专辑的页面也不再可用,确切的慈善机构也无法回忆起来,所以与慈善机构的关联来自记忆(以及特定专辑的> 9 比率)。

⁰用另一种方式(这可能会让一些人翻白眼,但无论如何),Bandcamp 是抗脆弱的,因为通过利用其用户行为的多样性,它捕捉了多个局部最优定价,而不是寻求单一的全局最优。创业界最有趣的讽刺之一是,其成员声称对抗脆弱性等概念感兴趣,同时却在最脆弱的模型上建立公司。收益/成本也是双向的:正如安德鲁·威尔金森(Andrew Wilkinson)令人信服地指出的那样,即使是乔·罗根(Joe Rogan)也可能通过拒绝 Spotify 的交易并直接从他的听众身上赚钱来赚更多的钱。

虽然 Bandcamp 移动应用程序的功能并不丰富,但它提供的功能几乎完全可以正常工作。

这与公司购买市场份额或竞争对手的非法收购不同。事实上,这就是合法收购的意义所在。

或任何东西,只是用 API 做任何事情。

⁴:这又不同于 Spotify 与罗根等人的排他性交易。在那种情况下,该公司将以前开放的文件标准限制为封闭的标准。在这个假设中,艺术家仍然可以自由地出售文件、磁带等等。此外,即使艺术家在 Bandcamp 上独家发布,这里建议的策略是,公司只是吸引艺术家在平台上发布,而不是在合同中约束他们。

⁵:她以前在这个平台上发行过专辑,但是 a)我们的数据中没有所有的销量,b)它们并不是在那里独家发行的。

为什么数据治理被打破了?

原文:https://towardsdatascience.com/why-is-data-governance-broken-5a9c0275120b?source=collection_archive---------33-----------------------

我们一直缺少一些重要的东西来使它变得有效和适应性强

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杰克逊在上煨un splash

本文更多的是一种明智的观点,而不仅仅是对数据治理的描述。我已经在数据治理领域工作了很长时间。在某种程度上,我们自私地试图澄清我们的信息,并把影响组织的问题归结为其基本的、令人痛苦的组成部分。但在某种程度上,我们也揭露了我们都知道的事实:数据治理存在于大多数组织中,但它未能实现高管们期望的价值。

它有助于识别问题及其根源。这是找到持久解决办法的第一步。

这篇文章旨在激发高层领导的对话,让他们更好地理解问题出在哪里,并研究我们如何解决这些问题。

我们是怎么到这里的?

传统的数据治理是多年前设计的,当时 IT 需要让业务部门参与数据决策。它从系统访问、数据质量和数据定义开始。从那时起,它已经发展到管理更多的事情。

但是相当多的压力迫使我们重新考虑如何管理数据。让领导特别为难的是,我们习惯于观察一个问题,然后解决它。但是更多需要解决的问题正在慢慢地向我们袭来。我们只是没看到他们过来!

如果我们稍微退后一步,这些趋势的结合创造了完美风暴:

  • 我们正在管理和生成越来越多的数据。
  • 云有无限的性能,但是把所有东西都搬到那里需要时间。因此,我们发现有越来越多的环境存放数据或保存数据的副本。
  • 人工智能、分析和自动化意味着我们需要在更多的用例中使用这些数据。
  • 也许这与用例的激增有关,但可以肯定的是,没有人会认为更多的人需要数据来完成他们的工作。
  • 隐私监管现在在政治上很时髦,而且理由很充分。规则越来越严格,尤其是在 B2C 领域。
  • 既然我们可以自动化决策,我们需要担心偏见、道德,并负责任地这样做,否则会将组织置于风险之中。

这场风暴的影响是还有很多事情要做。在以下领域,需要新的流程来创造价值并防范数据风险:

  1. 理解数据。
  2. 处理数据。
  3. 确保数据质量。
  4. 使用和共享数据。
  5. 安全数据。

从历史上看,数据治理在处理或使用/共享数据方面做得并不多。数据隐私和自动化决策正在改变这一点。但我们想要的是增强数据治理,而不是制造更多的孤岛,例如,数据隐私是通过一套完全不同的流程来管理的。

数据治理能为组织带来什么?

正如梅尔文·尤德尔(杰克·尼克尔森饰演的角色)在电影《尽善尽美》中所说的,“我在这里溺水,而你却在描述水!”。我们无法控制那些让我们陷入困境的外部因素。幸运的是,我们可以从这种情况中获得有用的和可操作的信息。

数据隐私是每个人的工作

现在,信息泄露和黑客攻击成了新闻,公司必须认真注意保护机密信息,更不用说大多数公司遵守的法律了。问题是保护数据和遵守规则要求我们管理流程和数据,而不仅仅是数据。

在过去,数据仓库中的数据质量可能是 IT 部门的责任,由项目或领域数据管理员提供一些指导。如果你仔细想想,确保信息的隐私远不止这些。只要想想数据是如何被使用或共享的,它的范围就会迅速扩大。你如何控制每个人都遵守规则?

我们必须认识到,就像我们必须制定数据质量 KPI 来管理数据质量一样,围绕数据安全和数据隐私制定 KPI 需要协调和统一所有利益相关方的参与方式。法规变得越来越具体和规范。根据数据的生命周期阶段、位置、聚合方式或使用方式,相同的数据可能需要不同的方法来符合规则。

通过管理管理数据的流程,我们可以

  • 检查流程是否到位;
  • 流程是否足以支持合规性;
  • 如果某人或某个团体有责任执行流程;
  • 如果过程已经完成并提供了预期的结果。

很明显,我们可以创建 KPI 来跟踪这些内容。

太大了,手动做不了

许多组织仍在通过临时、手动或过时的工具实施数据治理策略和标准。数据团队尝试和审查报告和数据集,在所有地方设置自定义规则,并比较预期的数字。技术堆栈和数据爆炸意味着这种旧方式效率低下且无法扩展。

即使问题变大了,还是要管。我们将把工作分配给合法的所有者,并自动确认其完成。无论流程所有者在价值链中带来什么价值,他们都将通过技术自动化来优化他们负责的一些流程,这可能会使用人工智能来完成一些繁重的工作。

这些是我们已经习惯的技术,包括沿袭和映射、数据质量监控等。但是由于这个问题的巨大规模(参见上一节关于我们如何走到这一步的内容),我们不能把它留给各种利益相关者或数据管理员去解决。我们需要在每个人需要如何参与的“编排”中加入纪律;我们需要管理数据或操纵数据的过程。

管理管理数据的流程

我们多年来为数据治理开发的实践主体仍然很好。但是还有更多的事情要做。我们留给数据管理员去解决的问题将不再有效。我们必须详细规划流程,因为无论如何审计都需要这些流程。好消息是,它将推动数据操作。

随着隐私法的改变,管理数据而不仅仅是数据的过程也会有所帮助。我们需要敏捷性来了解运营影响并快速做出反应。

增加一个流程管理层将为组织中的每个人提供更多的可见性,对于那些不知情或不得不相信某人在防止数据泄露方面做得很好的高管来说也是如此。

为什么数据建模这么难?

原文:https://towardsdatascience.com/why-is-data-modeling-so-difficult-bc03b661cad0?source=collection_archive---------25-----------------------

数据库规范化入门

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片

数据建模是所有数据工程师工具集中的一项基本技能。然而,在我职业生涯的早期,我发现数据建模极其困难:一部分是因为没有一种公式化的方法来建模数据,另一部分是因为可用的信息是基于集合论的,这是我从来没有过的乐趣(不悦?)的学习。然而,随着经验的积累,我发现数据建模变得越来越容易。虽然它永远不可能是一门精确的科学,但考虑到业务的相互依赖性,我发现了一种多年来一直对我有效的方法。

让我们设计一个关系数据模型…我该怎么做呢?

设计数据模型不是一件容易的事情。在创建模型之前,数据工程师必须考虑许多因素,例如业务需求、单个业务流程、读/写比率等。然而,由于许多这些都是视情况而定的,所以让我们假设我们已经做了必要的准备工作,并准备开始数据模型设计。设计步骤如下:

第一步:选择主要实体,或者表格

第二步:确定实体关系类型。

第三步:确定哪些属性属于哪些实体。

第四步:确定主键和外键约束。

第五步:根据业务逻辑设置属性约束。

第六步:正常化

很简单,对吧?创建几个表格,用几个键把它们连接起来,瞧!数据建模完毕,准备就绪!

可惜,事情没这么简单。您可能能够快速完成步骤 1-5,但是步骤 6 可能是一个挑战,它通常需要大量的迭代。让我们关注第 6 步。

标准化数据

简单地说,规范化数据意味着采用一个结构不良的表集,易于创建、更新和删除异常,并将其塑造成一个定义良好的表集。要做到这一点,您需要完成上面的步骤 1-5,根据标准形式测试模型,如果通过,您就成功地定义了您的数据模型!否则,修改现有的数据模型并重复。但是什么是范式呢?

范式

范式可以被认为是规范化的“层次”;也就是说,每个表单都有一个定义,如果数据模型通过,您就可以进入下一个级别。这就像一个电子游戏:你不能跳到第二级而不先在第一级打败老板。三种主要范式是:

第一范式(1NF) :如果一个关系有唯一的属性名,属性值不是多值的,属性在整个关系中不变,关系有主键属性,数据的排序无关紧要,则该关系在 1NF 中。

第二范式(2NF) :一个关系在 2NF 中如果它在 1NF 中 每个非主键属性在功能上都依赖于主键。例如,如果我们有一个具有三个属性(id、car_make、price)的实体,其中 id 是主键属性,那么属性 car_make 和 price 应该只依赖于属性 id。如果价格取决于汽车制造商(很可能是这样),那么这将违反 2NF。2NF 的目的是去除部分依赖,减少冗余。

第三范式(3NF) :一个关系在 3NF 中若在 2NF 中所有非素数属性都不具有传递依赖。这一点比较难理解(至少对我来说)。假设我们有三个属性(A,B,C ),其中 A 是主键属性。从数学的角度来看,如果 A-B 和 B-C 为真,则关系式 3NF 不成立,因为 C 传递地依赖于 A (A-C)。在现实世界的例子中,如果在一个具有附加属性的实体中有“State”和“Country”属性,您可能会看到这种情况,因为“Country”在传递上依赖于主键属性。

如果一个数据模型通过了 3NF,那么它就被认为是充分规范化的。有更多的正常形式,但那些最好是在非常特殊的情况下使用。在大多数应用中,一旦你的模型达到 3NF,你就可以停下来庆祝了!

最后的想法

标准化通常需要相当多的迭代。对数据模型的某些更改会破坏您可能已经准备好的其他修复。规范化一个数据库并不容易,但是如果你想要有弹性的数据结构,那就没有办法了。

在我职业生涯的早期,我发现规范化相当困难,可能是因为我缺乏经验。要完全理解正常化,练习,练习,再练习。它最终成为第二天性,随着您避免常见的陷阱并认识到具有某些类型属性的模式,迭代的数量会减少。

祝你好运!

DAX 为什么难学?

原文:https://towardsdatascience.com/why-is-dax-difficult-to-learn-4fc792d6f801?source=collection_archive---------22-----------------------

每个 Power BI 开发人员的眼中钉

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

汉斯-彼得·高斯特在 Unsplash 上拍摄的照片

您打开 Power BI Desktop,连接到一个 excel 文件,并将您的第一个可视化拖到画布上。你的眼睛会因为从这个强大的工具中创造出有用的东西而兴奋得发亮。现在你选择为你的下一个图表计算一些东西。您添加的前几个公式与 excel 公式没有太大区别,您会兴奋得毛骨悚然。世界是你的。

然后你注意到了。等等!数字是错误的。也许不同的计算方法会有用?让我谷歌一下。在网上找到有同样问题的人,你点击链接找到他们的解决方案。突然你掉进了一个兔子洞,感觉有点像爱丽丝梦游仙境。你找到的解决方法很难理解。享受没有了。眩晕消失了。你的头很痛,制作你所设想的有洞察力的图表的前景似乎很暗淡。

欢迎来到达克斯。

数据分析表达式(DAX)是微软在 2009 年发布的,是其多维表达式(MDX)语言在数据立方体方面的发展。从那时起,它开始渗透到它的数据平台中,包括 PowerPivot、Power BI 和 SQL Server Analysis Services。虽然有些 DAX 公式的工作方式就像我们熟悉和喜爱的 Excel 公式一样,但有些却不是。它的功能目的是处理关系数据并动态地执行聚合*。它应该是易学易用的。但事实并非如此。*

*

如果你熟悉结构化查询语言 SQL,你就会知道有些查询会给你带来挑战。但是一般来说,你理解数据模型,你知道语言本身在做什么。所以这只是解决一个非常切实的问题。如何用已知的命令集让底层数据以特定的方式显示出来?这很简单,即使有时很复杂。

SQL 和关系数据库在精神层面上非常具体。通过我们在 SQL 查询中使用的命令,很少猜测数据或数据经历的过程。但是达克斯不是那样的。

达克斯将这些概念隐藏在幕后。这使得 DAX 在底层数据结构、查询上下文以及它到底在做什么方面变得非常抽象。如果 SQL 90%具体,10%抽象,那么 DAX 就是 5%具体,95%抽象。

它的抽象本质使得学习 DAX 更具挑战性。

如果你是一名程序员,你可能已经面临过类似的经历:

  • 还记得你第一次从函数式编程转换到面向对象编程的时候吗?令人眩晕。你确信你的开发生涯已经结束了。
  • 或者,也许,当您第一次使用 Angular 并不得不将数据绑定到它的前端元素时。生活似乎结束了。
  • 或者说,你第一次遇到 Hadoop 怎么样?很明显,一个疯子发明了 Hadoop。

然而,DAX 比上面的例子更难。拉开窗帘,以一种看得见摸得着的方式看到后台发生的事情几乎是不可能的。这就像在拼图游戏中,没有完整的图片作为参考。不过,好消息是,这也像《多希和巫师》。一旦你看到窗帘后面,你会意识到那只是一个小老头。无害,但以他自己的方式强大。

DAX 适合抽象的学习者。

有些人天生是更具体的学习者。这就是从看别人的代码样本中捡起 C#或者 Python 的人。其他人是更好的抽象学习者。数学家、天文学家或在细胞或亚原子水平上研究事物的人。这些人往往更擅长抽象学习。

具体的学习者需要更加努力地学习 DAX,而抽象的学习者会更自然地成功。但是,对于少数既抽象又具体的学习者来说,DAX 根本不是问题。然而,我们其他人不应该放弃希望。只要有足够的时间和努力,几乎任何人都可以学会 DAX。

掌握 DAX 的秘诀是先学习理论。

公式很简单,但是过程很慢。从研究 DAX 如何看待底层数据模型开始。然后理解 DAX 对上下文的使用。最后,研究 DAX 函数,了解它们在幕后实际上在做什么。刚开始你会觉得脑子小,头疼。你可能会想放弃。但是,随着时间和练习,它会变成第二天性。*

杆蓖麻 帮助企业获得分析权!他帮助国际组织和小型企业改善他们的数据分析、数据科学、技术战略和技术领导力。除了咨询,Rod 还喜欢公开演讲、教学和写作。你可以在 rodcastor.com**和通过他的 邮件列表 了解更多关于 Rod 和他的工作。

为什么三角洲湖越来越受欢迎?

原文:https://towardsdatascience.com/why-is-delta-lake-becoming-increasingly-popular-1e45c29cc7d2?source=collection_archive---------14-----------------------

行业笔记

讨论数据湖- 带来的益处超过传统挑战,ACID 合规性、版本化拼花文件等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

📷由加斯顿Unsplash

对于初学者来说,理解三角洲湖和数据湖之间的区别可能会令人困惑。与以前的存储层一起工作了一年多,现在我分享了 delta lake 的特殊优势,以及它如何通过一些示例克服传统数据湖体系结构的挑战。

这些例子是为了使它更加直观和非技术性。我相信这将作为一个很好的策展,从不同的来源,三角洲湖可以带来什么。

根据定义,delta lake 不是一个独立的存储容器,而是一个运行在现有数据湖和对象存储之上的开源存储层。让我们把它看作是现有数据湖之上的附加功能,如下所示。

它由一个 delta 引擎驱动,而 delta 引擎又由一个名为 Photon 的本地执行引擎驱动。这是一个用 C++从头开始编写的矢量化查询引擎。在撰写本文时,它正在公开预览中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖建筑(图片由作者根据[ 原文 ]创作)

数据湖——是什么让它充满挑战?

它是一个存储原始数据的容器。把它看作是一个尚待处理的纯原始数据的垃圾场。

数据湖的一些重要特性包括——它的扁平架构,只有当你做读操作时,模式才被执行(读模式)。因此,它可以以低延迟轻松存储非结构化数据。

然而,原始数据给🧱带来了严峻挑战

挑战 1:可靠性和质量——原子性

数据湖不能很好地处理损坏的数据。当我们在数据加载过程中发现故障时,将需要完全重新处理。

delta lake 在这个场景中提供的解决方案是通过引入原子性。这意味着要么有一个完整的写/提交(或)没有写(又名原子可见性)。

在执行提交操作时,它是二进制的。因此,在作业完成之前,我们会知道数据中何时出现问题。

有一个单一的真理来源被用来服务于这个目的。它被称为事务日志(增量日志文件),,它跟踪所有被写入增量表的原子事务。Spark 然后在每次交易后更新用户端的表格。

增量日志文件是 JSON 文件(00000000000000000000.json, 00000000000000000001.json等)。)与临时的检查点文件一起放在_delta_log子目录中。

在增量日志文件中,还有 commitInfo、partitionValues 和 stats 信息,它们是不同的元数据属性,用于跟踪数据更改,有助于提高查询效率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖中的原子性(图片由作者提供)

考虑以下简单的信用交易,一旦数据被写入,在服务启动并运行后,它应该用正确的值 110 更新(或者)保持为 100,而交易日志不捕获提交信息。这就是原子提交的样子。

只有一个客户端可以通过一次原子提交来实现对象的创建。

部分执行可能导致非原子提交,这在服务器故障(或)其他问题期间发生在数据湖中。

挑战#2:缺少数据一致性

当涉及到丢失数据时,有两种情况会产生问题:

  • 批处理和流处理数据需要使用 lambda 架构风格,将数据写入两个不同的容器。在数据湖中,这两种工作负载类型的统一是不可能的。
  • 覆盖操作期间(基本上是删除和写入),有一个时间点表中没有数据,如果在此瞬间发生任何故障,我们在查询时将看不到任何数据。

在 Delta lake 中,这种数据不一致性是使用称为乐观并发控制的概念来处理的,通过这个概念,由多个用户同时(或)由不同类型(批处理/流)写入的数据是以序列化的方式完成的。我们可以将源用作批处理表,将流表用作接收器。

在一些特殊的场景中,并发操作无法乐观地执行,在此期间,增量引擎会抛出一个错误。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖的一致性(图片由作者提供)

当出现连接丢失(或)某种形式的失败(或)多次写入时,要提交的数据不应丢失,而是在事务日志中捕获,并以序列化方式执行提交。

挑战#3:并发操作-隔离

如一致性一节所述,并行发生的操作需要串行隔离,以避免冲突。这允许数据模型(批处理和流)的统一,这在数据湖的情况下是不可能的。

这就是隔离机制应对挑战的方式:尚未完成的提交被互斥规则隔离。只有当提交成功时,它才允许对 delta lake 进行写/合并/删除操作。

这还带来了对 delta lake 数据使用标准(删除、更新、合并)命令的功能,这有助于使您的数据符合 CCPA/GDPR 法案。

有一些特殊的场景,其中两个操作会导致增量表中的冲突,这里的https://docs.delta.io/latest/concurrency-control.html#avoid-conflicts-using-partitioning-and-disjoint-command-conditions捕获这些冲突以供进一步参考。简而言之,通过对 filter 命令中使用的列进行分区,可以避免这些冲突。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖中的隔离(图片由作者提供)

这里,事务 T1T2 被隔离,并使用事务日志信息顺序执行。因此,在任何给定的时刻,它们都不会与数据相矛盾。

挑战#4:消失的数据-持久性

考虑在操作过程中出现故障和服务器端的情况。这又会导致数据丢失(或)大量损坏的记录。这在典型的数据湖中是无法避免的。

然而,由于事务日志磁盘存储持久性,即使在系统(或)服务器端出现故障时,数据也将持续存在。因此,非易失性存储器在三角洲湖中起着至关重要的作用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖的耐久性(图片由作者提供)

这里,当服务器停机时,更新操作可能失败和/或读取可能失败。因为事务存储在磁盘上,所以可以从增量表中读取最新值,直到最后一次提交。

挑战#5:真实性-模式检查

就真实性而言,当我们试图改变写入数据湖的数据类型时,会导致损坏和丢失记录。因此,需要对模式的有效性进行检查。

在 delta lake 中,在任何提交之前都会执行模式验证。默认情况下,不同的模式无法执行覆盖。这样,写入数据的模式格式应该总是与最初定义的模式相匹配(也称为写模式*)。*

如果需要重写,模式进化可以拯救。这可以通过在执行写操作时设置配置选项来实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三角洲湖的模式实施(图片由作者提供)

这里,对于简单的插入操作:当mergeSchema被设置为true时,有一个从 Float 类型到 Long 类型的类型转换。还有一个名为overwriteSchema的选项,将其设置为true将完全忽略旧数据,并在其位置创建一个新表。

挑战#6:数据时间旅行的版本化

现代大数据系统在进行频繁的大容量数据更改方面是一致的。需要有一个审计系统(或)回滚机制来监控正在发生的变化。数据湖中没有这种支持。

但是,在增量表中,数据的当前状态是表内事务日志(_delta_log/)子目录中记录的所有提交的总和。

它充当了从零开始构建数据到其当前形式的方法。这种通过遍历事务日志来创建数据的能力称为时间旅行(或)数据版本控制。

增量表中数据的先前版本可以通过时间戳(或)版本号来访问。增量表中的数据最终存储为版本化拼花文件

这允许用户执行更简单的回滚操作,返回到数据正确的时刻,并撤销错误的提交。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

增量表中的时间旅行(图片由作者提供)

每个表都有一个版本号(或)时间戳,可以从一个DESCRIBE HISTORY <table_name>命令中获取。无论是使用子句VERSION AS OF (or) TIMESTAMP AS OF,我们都可以获得该时刻的表的快照。

挑战#7:数据的数据-元数据管理

元数据是数据的数据。它由表的模式、列名、类型和事务信息组成。

随着原子提交被记录在增量日志中,元数据被连续生成。这可用于跟踪由于所有来源而发生的所有变化。

这种元数据管理在 Spark 中是可伸缩的,它的处理就像数据一样分布在各个节点上。这将捕获模式、原子提交的创建时间、GUID ( 全局唯一标识符)、文件格式和其他配置选项。

在本机对象存储中,读取/列表操作的开销很大,而在增量湖的情况下,元数据读取是从集群上的日志并行进行的。

这可以使用DESCRIBE HISTORYDESCRIBE DETAIL SQL 命令来完成。它运行在并行处理引擎上,并提供底层元数据信息。进一步参考,你可以在这里看到文档

*-- get the full history
**DESCRIBE** HISTORY '/data/balanceTable/'        
**DESCRIBE** HISTORY delta.'/data/balanceTable/'-- get the metadata of delta table
**DESCRIBE** DETAIL '/data/balanceTable/'
**DESCRIBE** DETAIL delta.'/data/balanceTable/'*

结束语

总之,数据湖带来的所有这些挑战都通过使用 delta 湖得到了解决。它通过保持数据流的一致性和持久性,大大降低了原始数据处理的复杂性。

关键要点是,当有大量原始数据时,使用 Delta lake,重点是提高查询性能、数据一致性和持久性。

请提供您的建设性想法、意见(或)建议。

另外,请随时在 LinkedIn 上与我联系。下次见!

为什么 Kaggle 的所有人都痴迷于 Optuna 进行超参数调优?

原文:https://towardsdatascience.com/why-is-everyone-at-kaggle-obsessed-with-optuna-for-hyperparameter-tuning-7608fdca337c?source=collection_archive---------1-----------------------

让我们通过试用来了解一下…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 博美 Pixabay。 除特别注明外,所有图片均为作者所有。

介绍

原来我一直生活在岩石下。

虽然每一个 MOOC 都教我使用 GridSearch 进行超参数调整,但 Kagglers 几乎已经专门使用 Optuna 两年了。这甚至早于我开始学习数据科学的时间。

Kaggle 社区以其残酷的竞争而闻名,对于一个达到这种统治水平的包来说,它需要该死的好。在平台上活跃了一个月之后(并且获得了两级专家资格,我看到 Optuna 几乎在任何地方都被每个人使用。

那么,是什么让 Optuna 被最大的机器学习社区如此广泛地接受呢?在本帖中,我们将通过动手操作这个框架来回答这个问题。我们将了解它是如何工作的,以及它如何从任何模型中挤出每一点性能,包括神经网络。

https://ibexorigin.medium.com/membership

获得由强大的 AI-Alpha 信号选择和总结的最佳和最新的 ML 和 AI 论文:

https://alphasignal.ai/?referrer=Bex

什么是 Optuna?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Optuna 标志

Optuna 是完全用 Python 编写的下一代自动超参数调优框架。

它最突出的特点是:

  • 使用循环和条件来定义 Pythonic 搜索空间的能力。
  • 与平台无关的 API——您可以调优几乎任何 ML、DL 包/框架的估算器,包括 Sklearn、PyTorch、TensorFlow、Keras、XGBoost、LightGBM、CatBoost 等。
  • 内置了大量具有提前停止和修剪功能的优化算法。
  • 简单的并行化,只需很少或不需要修改代码。
  • 内置对搜索结果可视化探索的支持。

在接下来的章节中,我们将尝试验证 Optuna 文档中的这些过于乐观的说法。

Optuna 基础

让我们通过调优一个类似 (x-1) + (y+3) 的简单函数来熟悉 Optuna API。我们知道该函数在 x=1y=-3 时达到最小值。

你可以在这里找到这篇文章的笔记本。

让我们看看 Optuna 是否能找到这些:

导入optuna后,我们定义一个目标,返回我们想要最小化的函数。

在目标的主体中,我们定义了要优化的参数,在本例中,是简单的xy。参数trial是 optuna 的一个特殊的试验对象,它为每个超参数做优化。

其中,它有一个suggest_float方法,采用超参数的名称和范围来寻找其最佳值。换句话说,

x = trial.suggest_float("x", -7, 7)

和做 GridSearch 时的{"x": np.arange(-7, 7)}差不多。

为了开始优化,我们从 Optuna 创建一个study对象,并将objective函数传递给它的optimize方法:

相当接近,但没有你想要的那么接近。这里,我们只做了 100 次试验,可以看到:

>>> len(study.trials)100

现在,我将介绍 Optuna 附带的第一个魔法。如果我们对结果不满意,我们可以在优化完成后继续优化!

与其他类似工具相比,这是一个明显的优势,因为搜索完成后,他们会完全忘记之前的试验历史。Optuna 没有!

要继续搜索,用所需参数再次调用optimize。在这里,我们将再运行 100 次试验:

这一次,结果更接近最佳参数。

关于 Optuna 术语和约定的说明

在 Optuna 中,整个优化过程被称为研究。例如,以日志损失为度量来调优 XGBoost 参数是一项研究:

研究需要一个可以优化的函数。通常,该函数由用户定义,应命名为objective,并应具有以下签名:

它应该接受一个optuna.Trial对象作为参数,并返回我们想要优化的指标。

正如我们在第一个例子中看到的,研究是一组试验的集合,其中每个试验,我们使用来自给定搜索空间的一组超参数来评估目标函数。

研究中的每个试验都被表示为optuna.Trial类。这个类是 Optuna 如何找到参数的最佳值的关键。

为了开始一项研究,我们用direction创建一个研究对象:

如果我们想要优化的指标是像 ROC AUC 或准确性这样的绩效分数,我们将方向设置为maximize。否则,我们最小化损失函数,如 RMSE、RMSLE、对数损失等。通过将方向设置为minimize

然后,我们将调用研究的optimize方法,传递目标函数名称和我们想要的试验次数:

接下来,我们将进一步研究如何创建这些目标函数。

定义搜索空间

通常,您在目标函数中做的第一件事是使用内置的 Optuna 方法创建搜索空间:

在上面的目标函数中,我们创建了一个随机森林超参数的小搜索空间。

搜索空间是一本普通的字典。要创建可能的值进行搜索,您必须使用试验对象的suggest_*函数。

这些函数至少需要超参数名称、最小和最大范围,以搜索分类超参数的可能类别。

为了使空间更小,suggest_floatsuggest_int有额外的steplog参数:

上图中,我们将n_estimators的分布宁滨了 200 个区间,使其更加稀疏。另外,learning_rate是以对数标度定义的。

如何对可能的参数进行采样?

在底层,Optuna 有几个负责参数采样的类。这些是:

  • GridSampler:同 Sklearn 的GridSearch。不要用于大搜索空间!
  • RandomSampler:同 Sklearn 的RandomizedGridSearch
  • TPESampler:树形结构 Parzen 估计器采样器——使用核拟合的贝叶斯优化
  • CmaEsSampler:基于 CMA ES 算法的采样器(不允许分类超参数)。

我不知道最后两个采样器是如何工作的,我不希望这会影响我与 Optuna 的任何交互。

默认情况下使用 TPE 采样器——它试图通过提高上一次试验的分数来对超参数候选者进行采样。换句话说,您可以期待使用这个采样器从一次试验到另一次试验的增量(也许是边际)改进。

如果你想切换采样器,你可以这样做:

使用梯度推进回归器的端到端示例

让我们把学到的一切都变成有形的东西。我们将使用一些数字和分类特征来预测企鹅的体重。

我们将使用 Sklearn GradientBoostingRegressor建立一个基本分数,并通过使用 Optuna 进行调整来提高它:

现在,我们将创建objective函数并定义搜索空间:

我们构建了一个包含 5 个不同范围的超参数和一些静态超参数的网格,用于随机种子和早期停止。

上面的目标函数略有不同——它接受数据集、得分和cv的附加参数。这就是为什么我们必须将它包装在另一个函数中。一般来说,您可以使用如下的lambda函数来实现:

如果您想传递接受多个参数的objective函数,这是推荐的语法。

在不到一分钟的时间里,我们实现了显著的分数提升(就日志错误而言,0.004 是相当不错的)。我们只做了 100 次试验。让我们大胆地再跑 200 圈,看看会发生什么:

分数确实提高了,但幅度不大。看起来我们在第一次运行中达到了最大值!

最重要的是,我们使用常规网格搜索可能需要几个小时的搜索空间,仅用了 2 分多钟就获得了这个分数。

我不知道你怎么想,但是我被说服了!

使用视觉效果获得更多见解和更智能的调整

Optuna 在其visualization子包下提供了广泛的地块。这里我们只讨论 2 个,我认为是最有用的。

首先,让我们绘制最后一个study的优化历史:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个剧情告诉我们,Optuna 只经过几次尝试就让分数收敛到了最小值。

接下来,让我们绘制超参数重要性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个情节非常有用!它告诉我们几件事,包括:

  • max_depthlearning_rate最重要
  • subsamplemax_features对最小化损失没有用

当调整具有许多超参数的模型时,这样的图很方便。例如,您可以进行 40–50 次试验,并绘制参数重要性。

根据情节,您可能会决定丢弃一些不太重要的参数,并为其他参数提供更大的搜索空间,这可能会减少搜索时间和空间。

有关 Optuna 支持的绘图类型的更多信息,您可以查看文档的本页。

摘要

我想我们都同意 Optuna 没有辜负我在介绍中对 T2 的大肆宣传。太棒了。

本文只给出了使用 Optuna 可以做的基本工作。事实上,Optuna 有更大的能力。我们今天没有谈到的一些关键话题:

最酷的是:

请务必查看相关文档页面的链接。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

您可能也会感兴趣…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么可解释性现在如此重要?

原文:https://towardsdatascience.com/why-is-explainability-so-important-right-now-60f1b850023a?source=collection_archive---------22-----------------------

随着人工智能系统和机器学习驱动的工具在我们的日常生活中激增,从业者和批评者都越来越强烈地要求知道他们如何产生他们所做的结果。不知道的代价——经济的、社会的、技术的——已经变得太高了。本周,我们邀请你阅读三篇将可解释性放在最前面和中心的优秀文章。(如果你的兴趣不在这里,不要担心:我们还会拓展到自动泊车、棋盘游戏和其他主题——所以请继续阅读……)

  • 获得可交代的基本权利 。在 ML 的上下文中,可解释性可以有不同的含义,这取决于你所关注的产品生命周期的特定时刻。幸运的是, Aparna Dhinakaran 带来了一本既通俗易懂又全面的入门书,为进一步的学习和更深入的理解奠定了基础。
  • 围绕 XAI 重构你的思维。在花费数年时间研究可解释的人工智能之后,布莱斯·默里邀请我们少考虑算法,多考虑终端用户。为什么?正如 Bryce 在他的文章中所说,“设计的可解释性给了人工智能工程师最大的自由来开发相关的解释,以增强算法用户的能力。”
  • 学习如何用 Python 解释你的 ML 模型。对于可解释性问题的更实际的方法,看看 Khuyen Tran 关于 SHAP 和 Shapely 价值观的一步一步的可视化教程就知道了。这是一个耐心的演练,涵盖了从基本定义到详细实现的许多内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由安德鲁·尼尔Unsplash 上拍摄

如果你正在寻找其他深入的话题,本周你会有所收获——TDS 的贡献者们最近讨论了很多。

感谢您本周加入我们!如果你喜欢这些阅读推荐的主题过山车,我们希望你能考虑通过成为媒体成员来支持我们和我们的作者。

直到下一个变量,
TDS 编辑器

我们策划主题的最新内容:

入门

实践教程

深潜

思想和理论

为什么标注非结构化数据仍然很难?

原文:https://towardsdatascience.com/why-is-labeling-unstructured-data-still-hard-56b5eb4152a3?source=collection_archive---------29-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两只被标记的负鼠,图像来自像素

D 数据标记是机器学习项目生命周期中最关键的任务之一,也是目前最难管理、扩展和监控的任务之一——而且原因也不对

人工智能先驱吴恩达的使命是改变人工智能生态系统,使其更加以数据为中心。Ng 将他的研究建立在多年来收集的数据(嗯,你应该已经看到了)的基础上,这些数据是关于 ML 从业者如何提高他们的模型性能的。正如 Ng 所说,数据是改善率的最重要因素,而良好的标签是首要原因。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于心智模型的改善率表——来源: deeplearning.ai ,图片作者

此外,将模型的成功建立在数据点的数量上,而不是数据点的质量上,会降低潜在的改进率。准确和一致的标记数据增加了我们的模型学习模式的可能性,这将有助于它成功地预测事件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于给定数据的改善率图表,来源: deeplearning.ai ,图片作者

标记非结构化数据的挑战是什么

知道标签是项目生命周期中的一个重要因素,为什么管理、扩展和监控仍然是一项如此艰巨的任务?在 DagsHub,我们采访了来自数百家公司的 ML 专业人士,试图弄清他们工作流程中的问题。在检查贴标阶段时,我们遇到了 5 个主要挑战:

  • 管理数据标签。
  • 批注版本控制。
  • 在整个贴标过程中进行沟通。
  • 劳动力管理。
  • 需要领域知识。

管理数据标签

绝大多数标注工具都需要将数据移动到其工作空间。如果我们有一个 DevOps 团队,他们可能会帮助我们传输或提取数据的一个版本,而在大多数情况下,我们将不得不复制它。当我们逐渐添加新的原始数据或对其进行修改时,我们还需要更新标注工具工作空间中的数据。为此,我们需要整理丢失的内容,创建一个副本并将其移动到标签工作区,这本身就是一项繁琐的任务。但是,当我们有多个互不相同的数据版本时,会发生什么呢?这将需要更多的工作来编写自动化程序,以同步存储和标记工具。

最重要的是,当将数据移动到工作区时,我们会丢失它在项目环境中的结构。它将只保留文件的名称,而不保留其在原始项目中的路径。有些工具甚至需要修改数据结构,以至于我们不得不放弃目录结构,使用平面目录。丢失或修改数据结构使得管理标注任务和控制数据版本变得更加复杂。

批注版本控制

标记是一项很难掌握的任务。它取决于各种难以预定义的参数,并且在大多数情况下,将需要多次迭代。与我们在数据科学项目中的任何实验一样,我们希望有一种方法可以轻松地修改注释、测试、分析,在某些情况下,还可以检索和重现以前的结果。然而,大多数标注工具不支持数据血统,使得迭代过程不明确,这将可能导致石器时代版本化(data_annotation1,data _ annotation-11–02–2020,data_annotation_backup 等。).

在整个贴标过程中进行沟通

贴标签是一项抽象的任务,没有一个可以轻松测试的黄金标准。例如,“使用边界框来指示负鼠的位置。”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外面有两只负鼠,图像来自像素

会导致以下任何一种结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两只被标记的负鼠,图片来自像素

正如吴恩达指出的,影响模型性能的最重要因素之一是数据的噪音,或者换句话说,标签的一致性。将任务的模糊性与其准确结果的重要性结合起来,可以得出这样的结论:评审过程应该是细致的。然而,大多数工具不支持评论者和贴标签者之间关于标签上下文的交流渠道。因此,许多组织在第三方平台上完成审查过程,或者更糟糕的是,在电话中完成审查过程,这使得很难随着时间的推移跟踪和管理变化。

劳动力管理

因为贴标签可能是一项繁琐而耗时的任务,许多公司试图通过使用外包解决方案或雇佣指定的内部专家团队来扩大规模。这两种选择都是有效的,可以帮助我们更快地移动,但它们确实有一些盲点。

外包贴标任务的挑战

  • 利益冲突-通常,数据标注者根据他们提供的标注数据的数量获得报酬。因此,在尽可能短的时间内标记尽可能多的数据符合他们的最大利益,不管这些数据有多嘈杂。然而,作为数据消费者,我们希望收到最好质量的数据标签,知道它如何影响模型的性能。由于很难监控贴标机的工作质量,当考虑外包任务时,这种冲突会成为一个真正的问题。
  • 高前期投资-培训数据贴标机可能是一个艰巨的旅程,特别是如果需要独特的领域知识。它需要大量的前期投资,其结果是未知的,可能实际上不值得。

雇用指定内部贴标团队的挑战

  • 缩小规模—在许多情况下,贴标签不是一项持续的任务。我们将在项目开始时投入大量精力来标记所需的数据,然后缩小规模,仅致力于改善有噪声的样本。当雇佣一个内部团队时,伸缩幅度会急剧缩小,我们必须为他们提供一致的工作。
  • 资源——雇佣和培训内部贴标团队需要大量的资源,包括财务、时间和人员。此外,它将需要我们更多的日常注意力来管理团队和控制产品的质量。

需要领域知识

许多项目需要先验知识来标记它们的数据。例如,标记 x 光胸部图像并对其进行肺炎分类将需要很少标记者具有的医学背景。因此,由于贴标机数量少、成本高或需要长时间的培训,许多项目被叫停或需要大量资金。

摘要

近年来,由于大量的数据在人工智能从业者的能力范围之内,人工智能领域迅速发展和演变。然而,以数据为中心的范式已经证明,拥有大量数据是不够的;我们需要高质量的标记数据来实现 SOTA 结果。掌握标记任务仍然是一项正在进行的工作,一旦我们能够轻松地扩展和管理它,实现这些结果将不再是一个 MI。

如果你正面临我在这里没有提到的挑战,或者你能想到什么可以帮助我们克服这些挑战,我很乐意听听!

为什么给事物命名这么难?

原文:https://towardsdatascience.com/why-is-naming-things-so-hard-a2cbee1d39c9?source=collection_archive---------42-----------------------

构建产生最佳实践的框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由heylogostechie拍摄的照片

一旦你意识到你写的代码是给人类阅读的,而不仅仅是给机器执行的,一个有趣的转变就发生了。

一个很大的变化是,编写代码显然比正确的代码优先。

阅读代码包括建立一个心智模型,知道每件事情应该做什么,以及这些事情如何相互作用。然而,最好的代码会缩短读取所有内容的时间。您不用阅读实现,而是使用变量和函数名、注释和其他线索来解决问题。

这是组块。你把事物结合在一起,并一起记住它们。举个例子,一个国际象棋的开局,像皇后的走法,就是一大块。一个forEach循环也是如此:仅仅通过名字,你就可以知道它将对数组的每个元素做些什么。

一旦你为一个forEach循环构建了一个程序块,你就不必阅读forEach的实现来理解它将做什么。这是非常强大的,因为它允许您返回到代码,而不必再次阅读所有的实现。

因此,一个好的名字就是一大块编码了重要信息的东西。

我们把信息压缩到名字里。这几乎总是有损压缩。此外,压缩的行数越多,损失就越大,因为您希望自己的名字不超过 80 个字符。

好的命名的目标是最小化这种损失。

由于这种压缩,给事物命名很困难。英语不像 C++那样精确,所以从精确的语言压缩成模糊的语言会增加损失。另一个重要原因是很难选择最重要的内容。你会注意到大多数关于命名的分歧都集中在这两个轴上:要么这个名字不适合你想做的事情(是assign还是setup还是link还是mangle?).或者名字没有抓住功能的重要部分。

我认为这是我听说过的大多数最佳实践的生成函数,因此比一个具体的指南更有价值。

生成最佳实践

让函数做一件事

当一个函数做多件事情时,它的名字需要编码更多的信息,比如link_user_to_trial_and_enable_downloads_and_set_charge_date()。这是一个很长的名字,也是丢失太多信息的一个标志:这个名字应该公开关于充电日期和允许下载的什么语义?

这些副作用很难在名字中体现出来。

保持功能小

长函数,比如做很多事情的函数,需要在名字中编码很多信息。由于名称长度是有限的,在压缩这个长名称时,您会丢失更多的信息,从而导致名称质量更差。

避免无意义的名字

因为我们编写的代码是供人类阅读的,所以不压缩任何信息的名字不会帮助我们构建程序块。这使得阅读更加困难,因为你必须向下一层抽象。您需要解析实现来理解这段代码做了什么。

避免太抽象的名字

对于任何函数来说,do_things()都是一个合适的名字,但是压缩的损失太大了——你几乎丢失了所有的信息,并且需要解析主体来弄清楚它做了什么。不太好。这几乎是一个毫无意义的名字。

保持一致

当您在整个代码库中构建类似的块时,通过分块,更容易进入另一个抽象层。例如,继续以试验管理系统为例,您将有 3 件事情要做:

  1. link_user_to_trial_agreement_given_email()
  2. enable_research_downloads_for_user()
  3. set_charge_date_for_user()

因为它们在同一个域中运行,所以你可以上升一级到setup_user_for_trial()来完成这三个任务。

扰乱最佳实践

最佳实践的生成器允许您对最佳实践不是最佳前进方式的情况进行推理。

例如,考虑到一致性,使用 camelCase 命名变量。您的整个代码库都使用 camelCase。你正在编写一个非常不标准的新函数。它做一些不适合你现有模型的神秘事情。您需要它,因为遗留集成/业务需求等。实际上,你不希望任何人在阅读时忽略它。

所以,你保持一致,并保持在骆驼的情况下?或者,你切换到 snake_case?

目标是让事情变得清晰。我将切换到 snake_case 来展示它与其他产品的不同之处,并提供一些注释来解释它所做的神秘事情。

用词精确

口语是非常不精确的。有很多歧义,双重含义,以及没有任何意义的句子。

然而,代码需要精确。正如我们在上面看到的,这是一个麻烦的来源,因为我们试图将一种精确的语言压缩成一种不精确的语言,这使得寻找正确的英语单词更加困难。

这些想法也适用于命名代码之外的东西!当你有了一个东西的名字,它突然变得清晰可辨。

考虑一下:你看到你周围的一些人测试他们是否可以做一次事情,如果失败就放弃。其他一些人不断尝试,直到他们学会如何做。第一组珍视其智力,而第二组珍视其勤奋。然后,当你听到固定与增长心态时,事情马上就明朗了。

在这里选择正确的名字也很难。随着时间的推移,每一个失去其细微差别的最佳实践都可以归因于一个没有编码必要信息的名称。人们传递了这些想法,却没有解释其中的细微差别。

或者,考虑把两个名字等同起来。“堕胎就是谋杀”——将两个不同的名字等同起来,在情感和事实之间创造了一种有趣的动态。每个名字都有不同的含义,把它们组合在一起,你就把一个名字的含义传递给了另一个。这未必是一件好事。你必须非常小心不精确语言中的等式操作符。

结论

优化清晰、易于理解的代码。读取它的成本高于执行它的成本。

要做到这一点,利用组块:写出有意义的名字,并在名字中编码尽可能多的信息。

但是,写有意义的名字是有损压缩。每一个命名准则都源于最小化这种损失。

最后,同样的想法也适用于命名现实世界中的事物。只不过,这更难,因为它是从一种不精确的语言编码到另一种不精确的语言。至少代码在执行时是明确的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 你可能会质疑这一点,正确性是第一位的,但是如果阅读起来很清楚,PR 评论会很快发现正确性错误。或者,如果没有人发现错误,然后出现问题,如果您的同事能够清楚地阅读您的代码,他们就更容易解决问题。
    脚注对脚注:这是认真对待创意的一个例子。
  2. 有时,糟糕的命名会妨碍工作,产生一个不正确的工作模式。在这里,你别无选择,只能阅读实现。
  3. 理想情况下,您应该正确地解决问题,这样就不需要这样的事情了。但是,默认情况下,这样的事情会分散在一个巨大的代码库中。

Python 为什么这么慢,如何加速

原文:https://towardsdatascience.com/why-is-python-so-slow-and-how-to-speed-it-up-485b5a84154e?source=collection_archive---------2-----------------------

看看 Python 的瓶颈在哪里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们看看 Python 引擎是如何工作的,这样我们就可以走得更快(图片由 Unsplash 上的凯文·布茨提供)

在这篇文章中,我们会发现 Python 并不是一门糟糕的语言,只是非常慢。它针对其构建目的进行了优化:简单的语法、可读的代码和开发人员的大量自由。然而,这些设计选择确实使 Python 代码比其他语言如 C 和 Java 慢。

理解 Python 在幕后是如何工作的将向我们展示它为什么慢的原因。一旦原因清楚了,我们就能解决它。读完这篇文章后,你会清楚地了解:

  • Python 是如何设计和工作的
  • 为什么这些设计选择会影响执行速度
  • 我们如何解决这些瓶颈,从而显著提高代码的速度

这篇文章分为三个部分。在第一部分中,我们来看看 Python 是如何设计的。然后,在B 部分中,看看这些设计选择如何以及为什么会影响速度。最后,在C 部分中,我们将学习如何解决 Python 设计中产生的瓶颈,以及如何显著提高代码速度。
走吧!

A 部分——Python 的设计

让我们从定义开始。维基百科将 Python 描述为:

Python 是一种解释型高级通用编程语言。它是动态类型化和垃圾回收的。

信不信由你,读完这篇文章后,你就会明白上面的两句话了。这个定义很好地展示了 Python 的设计。高级的、解释的、通用的、动态类型和垃圾收集的方式为开发人员减少了很多麻烦。

在接下来的部分中,我们将讨论这些设计元素,解释它对 Python 性能的意义,并以一个实际例子结束。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 就像一只风筝;容易使用并且不是超级快。c 就像战斗机;速度超快,但不太容易操作(图片由 ShyamUnsplash 上提供)

缓慢与等待

首先,让我们谈谈当我们说“慢”时,我们试图测量什么。你的代码可能会因为很多原因而变慢,但并不是所有原因都是 Python 的错。假设有两种类型的任务:

  1. 输入/输出任务
  2. CPU-任务

输入输出任务的例子是写一个文件,从一个 API 请求一些数据,打印一个页面;它们涉及等待。尽管它们会导致你的程序花费更多的时间来执行,但这不是 Python 的错。它只是在等待回应;更快的语言不能等待更快。这种缓慢是而不是我们在本文中试图解决的问题。正如我们稍后将看到的,我们可以线程化这些类型的任务(在本文 的 中也有描述)。

在本文中,我们解释了为什么 Python 执行 CPU 任务比其他语言慢。

动态类型与静态类型

Python 是动态类型的。在像 C、Java 或 C++这样的语言中,所有的变量都是静态类型的,这意味着你要写下像int my_var = 1;这样的变量的具体类型。在 Python 中,我们只需输入my_var = 1。然后我们甚至可以分配一个完全不同类型的新值,比如my_var = “a string"。我们将在下一章看到它是如何工作的。

尽管动态类型对于开发人员来说非常容易,但是它有一些主要的缺点,我们将在接下来的部分中看到。

编译与解释

编译代码意味着将一种语言的程序转换成另一种语言,通常是比源代码更低级的语言。当你编译一个用 C 语言写的程序时,你把源代码转换成机器码(CPU 的实际指令),然后你就可以运行你的程序了。

Python 的工作方式略有不同:

  1. 源代码不是编译成机器码,而是编译成平台无关的字节码。像机器码一样,字节码也是指令,但是它们不是由 CPU 执行,而是由解释器执行。
  2. 源代码在运行时被编译**。Python 根据需要编译文件,而不是在运行程序前编译所有东西。**
  3. 解释器分析字节码并将其翻译成机器码。

Python 必须编译成字节码,因为它是动态类型的。因为我们没有预先指定变量的类型,所以我们必须等待实际的值,以便在转换为机器代码之前确定我们试图做的事情实际上是否合法(比如将两个整数相加)。这就是解释器所做的事情。在静态类型的编译语言中,编译和解释发生在运行代码之前。

总之:代码会因为运行时发生的编译和解释而变慢。相比之下,静态类型的编译语言编译后只运行 CPU 指令。

用 C 语言编写的编译模块来扩展 Python 实际上是可能的。 这篇文章 这篇文章 演示了如何用 C 语言编写自己的扩展来加速代码 x100

垃圾收集和内存管理

当你在 Python 中创建一个变量时,解释器会自动在内存中挑选一个足够大的地方来存放变量值,并将它存储在那里。然后,当不再需要该变量时,内存槽再次被释放,以便其他进程可以再次使用它。

在编写 Python 的语言 C 中,这个过程根本不是自动化的。当你声明一个变量时,你需要指定它的类型,这样才能分配正确的内存量。垃圾收集也是手动的。

那么 Python 如何跟踪哪个变量要进行垃圾收集呢?对于每个对象,Python 会跟踪有多少对象引用了该对象。如果一个变量的引用计数是 0,那么我们可以断定这个变量没有被使用,它可以在内存中被释放。我们将在下一章看到这一点。

单线程与多线程

一些语言,比如 Java,允许你在多个 CPU 上并行运行代码。然而,Python 被设计成在单个 CPU 上是单线程的。确保这一点的机制被称为 GIL:全局解释器锁。GIL 确保解释器在任何给定时间只执行一个线程。

GIL 解决的问题是 Python 使用引用计数进行内存管理的方式。需要保护变量的引用计数,防止两个线程同时增加或减少计数。这可能会导致各种奇怪的内存泄漏错误(当一个对象不再需要但没有被删除时),或者更糟糕的是,错误地释放内存。在最后一种情况下,一个变量被从内存中删除,而其他变量仍然需要它。

简而言之:由于垃圾收集的设计方式,Python 不得不实现一个 GIL 来确保它在单线程上运行。尽管有办法避开 GIL,阅读 这篇文章 ,线程化或多重处理你的代码并显著加速*。*

B 部分——引擎盖下的一瞥:实践中的 Pythons 设计

理论讲够了,让我们来看看实际行动吧!现在我们知道了 Python 是如何设计的,让我们看看它是如何工作的。我们将比较 C 和 Python 中变量的简单声明。通过这种方式,我们可以看到 Python 如何管理它的内存,以及为什么它的设计选择会导致执行时间比 c 慢。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们已经完全解构了 Python,让我们把它放回一起,看看它是如何运行的(图片由 Jordan BebekUnsplash 上提供)

在 C 中声明变量

让我们从在 C 中声明一个名为 c_num 的整数开始。

*int c_num = 42;*

当我们执行这行代码时,我们的机器会执行以下操作:

  1. 在某个地址(内存中的位置)为整数分配足够的内存
  2. 将值 42 分配给上一步分配的内存位置
  3. c_num 指向该值

现在内存中有一个对象,看起来像这样:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一个名为 c_num 的整型变量的表示,值为 42(图片由作者提供)

如果我们给 c_num 分配一个新号码,我们就把这个新号码写到同一个地址; 覆盖 ,以前的值。这意味着变量是可变的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们给 c_num(作者图片)赋值 404

请注意,地址(或内存中的位置)没有改变。想象一下,c_num 拥有一块足够容纳一个整数的内存。您将在下一部分看到这与 Python 的工作方式不同。

在 Python 中声明变量

我们将做与前一部分完全相同的事情;声明一个整数。

*py_num = 42*

这一行代码在执行过程中触发以下步骤:

  1. 创建一个对象;给一个地址分配足够的内存
  2. 将 PyObject 的 typecode 设置为整数(由解释器决定)
  3. 将 PyObject 的值设置为 42
  4. 创建一个名字叫做 py_num
  5. py_num 指向对象
  6. 将 PyObject 的 refcount 增加 1

在引擎盖下,首先要做的是创建一个对象。这就是“Python 中的一切都是对象”这句话的含义。Python 可能有intstrfloat类型,但是在幕后,每个 Python 变量只是一个对象。这就是为什么动态类型是可能的。

注意 PyObject 是而不是Python 中的对象。它是 C 语言中的一个结构,表示所有 Python 对象。如果你对这个 PyObject 在 C 中的工作方式感兴趣,可以看看这篇文章**,在这篇文章中,我们用 Python 编写了自己的 C 扩展,提高了执行速度 x100!**

上述步骤在下面的内存中创建(简化的)对象:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

内存中的 Python 整数(简化版)(图片由作者提供)

您会立即注意到,我们执行了更多的步骤,需要更多的内存来存储一个整数。除了类型和值之外,我们还存储 refcount 用于垃圾收集。您还会注意到,我们创建的变量 py_num 没有内存块。该内存由新创建的 py_num 指向的对象所拥有。

从技术上讲,Python 没有像 C 语言那样的变量;Python 有名字。变量拥有内存并可以被覆盖,名字是变量的指针。

那么当我们想给 py_num 赋一个不同的值时会发生什么呢?

  1. 在某个地址创建一个新的对象,分配足够的内存
  2. 将对象的类型码设置为整数
  3. 将 PyObject 的值设置为 404(新值)
  4. 指向对象的指针
  5. 将新的 PyObject 的 refcount 增加 1
  6. 将旧对象的引用计数减少 1

这些步骤会改变记忆,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

给 py_num(作者图片)赋值后的内存

上图将展示我们没有给 py_num 赋值,而是将名称 py_num 绑定到一个新对象。这样我们也可以分配一个不同类型的值,因为每次都会创建一个新的对象。Py_num 只是指向一个不同的 PyObject。我们不像在 C 中那样覆盖,我们只是指向另一个对象。

还要注意旧对象上的 refcount 是 0;这将确保它被垃圾收集器清理掉。

C 部分——如何加快速度

在前面的部分中,我们已经深入挖掘了 Pythons 的设计,并且已经看到了实际效果。我们可以得出结论,执行速度的主要问题是:

  • 解释:由于变量的动态类型化,编译和解释发生在运行时。出于同样的原因,我们必须创建一个新的 PyObject,在内存中选择一个地址,并分配足够的内存。每次我们创建或“覆盖”一个“变量”时,我们都会创建一个新的 PyObject,并为其分配内存。
  • 单线程:垃圾收集的设计方式强制 GIL:将所有执行限制在单个 CPU 上的单线程上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

是时候用这款喷气发动机加速我们的热腐了(图片由 Kaspars EglitisUnsplash 上拍摄)

那么,有了这篇文章的所有知识,我们如何补救这些问题呢?以下是一些提示:

  1. range()一样使用 Python 中的内置 C 模块
  2. I/O 任务释放 GIL,因此它们可以被线程化;您可以等待许多任务同时完成(更多信息 这里 这里 )
  3. 通过多重处理并行运行 CPU 任务( 更多信息 )
  4. 创建自己的 C 模块并导入 Python 你可以用比 Python 快 100 倍的编译 C 代码来扩展 Python。( 信息 )
  5. 不是有经验的 C 程序员?编写类似 Python 的代码,由 Cython 编译成 C,然后整齐地打包成 Python 包。它以 C 语言的速度提供了 Python 的可读性和简单语法( 更多信息 )

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这才叫快!(图片由 SpaceXUnsplash 上拍摄)

结论

如果你还在读这篇文章,那么这篇文章的复杂性和篇幅并没有吓退你。向你致敬!我希望已经阐明了 Python 如何在幕后工作以及如何解决其瓶颈。

如果你有建议/澄清,请评论,以便我可以改进这篇文章。与此同时,请查看我的其他关于各种编程相关主题的文章,比如:

编码快乐!

—迈克

页(page 的缩写)学生:比如我正在做的事情?跟我来!

为什么重新训练 ML 模型很重要?

原文:https://towardsdatascience.com/why-is-re-training-ml-models-important-a-product-managers-perspective-91d906d1ebe0?source=collection_archive---------30-----------------------

产品经理的视角

作为产品经理,你有责任衡量你的产品的持续成功。这可能包括启动前的验证、启动时测量 A/B 测试中的提升,以及跟踪核心 KPI。如果你正在管理一个机器学习产品,你的产品的长期成功将取决于保持你的模型是最新的。在这篇文章中,我将解释为什么这是一个重要的问题,以及如何通过模型再训练来确保持续的成功。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果你不训练你的 ML 模型,它会恶化到你再也不知道发生了什么的地步!(作者未命名的拼贴画,2020 年)

为什么您应该重新培训您的 ML 模型

ML 模型依赖于数据来“理解”特定的问题,并生成期望的输出。在大多数情况下,您的模型所依赖的数据会逐渐改变;例如,由于用户偏好的变化,也由于产品的性质而发生巨大变化;例如,由于黑色星期五这样的销售活动,或与 COVID 相关的旅行限制。由于系统中不可预见的变化,数据也可能发生变化,例如在没有预先通知的情况下,货币从美元兑换为美分的方式发生了变化。

在这篇文章中,我将使用两个你可能熟悉的例子。一个推荐歌曲的产品,一个从照片中检测植物种类的产品。我将解释这两个例子对于模型重新训练的不同之处。

你不知道你不知道什么

你应该知道你的模型是如何执行的,所以在投资模型再训练之前,确保你的 ML 系统(不仅仅是模型)有监控,使你能够看到性能是否随着时间的推移而下降。没有这些关键信息,你根本不知道你可能会遇到多大的问题——这应该是非常可怕的!👻

  • 因为大多数模型依赖于这样一个前提,即他们在训练期间看到的数据的分布与他们将来会看到的数据相同,所以监控特征漂移对于何时重新训练是一个很好的指示。
  • 监控预测漂移预测精度可能是重新训练需求的一些最佳指标,因为这些指标衡量了模型的输出如何随着时间的推移而变化和执行。
  • ML 模型并不是孤立存在的,因此从用户体验的角度来衡量模型的输出非常重要——如果您想了解更多关于这个主题的信息,我强烈推荐来自 ACM RecSys’18 会议的 Lina Weichbrot “衡量建议的运营质量”的这个非常有趣的演讲。

决定多长时间重新培训一次您的 ML 模型

一些模型可以处理看不见的值并做出很好的预测,而一些模型在这方面有很大的麻烦。如果您的数据变化非常快,您可能希望构建一个能够很好地处理未知值的模型,并比数据变化缓慢时更频繁地重新训练。这对于推荐系统来说尤其重要。

从照片中检测植物物种的应用程序可能会使用颜色和形状检测器作为区分植物的特征。因为~ 每年有 2000 种新的植物物种被发现和命名你应该确保你的系统能够识别最新的植物物种,方法是用这些植物的图像重新训练 ML 模型,并在新物种进入市场时更新你的模型。然而,如果你的产品是为研究人员设计的,它应该总是与最新的发现保持同步,以支持他们的研究。

对于有人类互动的系统,一个非常有趣的问题是行为的改变,以及理解你的模型如何处理它。我们称之为“漂移”。如前所述,行为改变可以是缓慢的、稳定的、可预测的,也可以是急剧的、意想不到的。例如,音乐品味随着人们的成长而改变,每年都有新的流派出现和流行,但有时一首歌会像病毒一样传播开来,每个人都在听它,或者又到了圣诞节,人们在世界的一些地方听圣诞颂歌;推荐音乐时,应该考虑这两种情况。

如果模型很容易更新,甚至完全更新其参数,并且与重新训练模型相关的成本很低;你可能会决定定期安排再培训,然后忘记这篇文章的其余部分。然而,当问题是一个高风险的问题,或者重新培训一个模型的成本非常高( GPT-3 重新培训可能花费 460 万美元),优化你应该重新培训的频率可以让你赚很多钱或者为你节省很多钱!

同样,您可能希望进行参数网格搜索来为您的机器学习模型找到最佳参数集,您应该对模型进行时间感知评估,以在离线评估设置中定义重新训练频率参数(我在之前的中帖的中谈到了离线评估)

  • 模型需要多少数据样本才能达到最佳性能?众所周知,对于大多数算法来说,拥有更多训练样本的投资回报会在某个点达到峰值。其他人可能需要数据。
  • 旧数据怎么处理?你可以忽略它,或者让算法给它“较低的重要性”
  • 当然,当模型已经 N 天没有被重新训练时会发生什么。

如何让你的模型保持最新?

根据您的需要,有三种主要方法可以使您的模型保持最新。

  • 轻度更新,模型被重新训练,看到新数据,可能忘记一些旧数据。
  • 当问题发生很大变化时,需要进行大量更新,因此需要再次重新计算模型参数。
  • 有时数据变化相当大,所以是时候完全重新考虑你的模型,甚至创建一个新的;想想新冠肺炎式的改变。

通过自动化来避免人为错误

当然,让某人查看监视器并手动决定何时重新训练模型会非常昂贵,并且也容易出现人为错误。您应该为您的模型投资一个自动化管道,根据一个事件(一个指标的恶化)或者定期地重新训练它。我将在以后的文章中更详细地讨论这个话题。

当再培训不够时

我们希望重新训练一个模型能够解决所有与模型性能损失相关的问题。然而,情况可能并非如此,有时事情会出错。很多时候事情会出错,并可能引发错误警报。例如,由于跟踪中断,数据的分布可能会改变。可能会出现新的特性值,因为另一个团队更改了价格格式,并且忘记告诉您。在这些情况下,重新培训可能不是解决问题的正确方法,但适当的监控将帮助您快速发现问题。

总之,在这篇博客中,我强调了一些问题,在决定如何在周围的世界发生变化时保持模型的性能之前,你应该回答这些问题,你应该监控哪些指标来自动化或标记模型重新训练的需求,以及你可以做些什么来跟上变化。

由您决定 ML 模型应如何适应变化,并考虑(1)这样做的技术复杂性,(2)与保持更新相关的成本,当然还有(3)投资回报。我强烈建议投资监控作为起点,不要去了解你的问题是否存在,而是了解问题有多大,然后继续跟进。哦,安全第一

为什么自学这么难?

原文:https://towardsdatascience.com/why-is-self-learning-so-difficult-1f2d594c3d7?source=collection_archive---------7-----------------------

以及你能做些什么来使它变得更容易

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的窗口拍摄

几天前,我的朋友找到我,让我帮她编辑一个她正在制作的视频。那是为了一项大学作业。

她告诉我,她的免费视频编辑服务将在两天后到期,她需要尽快完成。

我问她为什么不购买订阅,因为它只有几美元。

她的回答让我吃惊。

她说两天的期限是她尽快完成视频的动力。

否则,她会花数周时间来完成它。

我们都需要一个好的理由来完成一件事。在学校,我们必须完成作业,这样我们就不会受到惩罚。

在大学里,如果我们想通过这门课,就必须按时交作业。

在工作中,每项任务都需要在截止日期前完成。

我们做这些事情是因为我们必须这样做。因为如果不这样,我们知道后果会很可怕。

我曾经在考试的前一天在学校开夜车,在一个晚上把所有的材料都塞进去。

我那样做的唯一原因是为了取得好成绩。

如果我们没有考试或作业评分,我根本不会花那么多精力去学习这些材料。我可能整个学年都不会翻开我的课本。

我们几乎一生都在做事,因为我们不得不这样做。我们完成事情是因为我们有截止日期,我们想要好成绩。

这就是自学之路如此艰难的原因。

当你自学时,没有竞争,也没有截止日期。

保持主动完成事情的动力是很难的,因为如果你没有完成事情就不会有任何后果。

然而,如果做得好,自学可以说是最有效的学习方式之一。

可能没有老师或指导,但你只是出于兴趣在学习一些东西。你在学习你真正想理解的材料,而不是被迫在最后期限前死记硬背。

我之前的文章里也提到过,我走的是自学路线,自学编程和数据科学。

我的学习还远未完成,但我想分享一些我用来保持动力的技巧。

在这篇文章中,我会给你一些让自学更有效的建议。只要你保持专注,随着时间的推移,学习新技能并提高它们是可能的。

长期目标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安特·汉默斯米特在 Unsplash 上的照片

长期目标是你想在几年内实现的事情。可能是这样的:

  • 成为数据科学家
  • 掌握编程语言
  • 成为机器学习专家

我上面列出的一切都是长期目标。它们是你踏上自学之旅的原因,也是你继续前进的主要动力来源。

然而,长期目标还有几年的时间。它们太大了。如果你不正确地分解它们,你可能永远也到不了那里。

短期目标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

este 扬森斯Unsplash 上拍摄

我喜欢把长期目标分成短期目标(大约 2-5 个月)。例如,如果我的长期目标是真正精通一门编程语言,那么我的短期目标就是用这门语言完成一个项目。

以下是短期目标的样子:

  • 在 Python 中创建疾病分类的端到端机器学习模型,并在仪表板上可视化该模型。
  • 读完一本关于情感分析的教科书
  • 完成统计学课程,为数据科学打下良好的基础

所有这些都是短期目标。它们是将你的短期目标分解成更小的任务。

当做一个像上面这样的项目时,你会对数据科学的不同领域有更好的理解。学完本课程后,您将会对 Python 有更好的了解,并理解数据可视化工具。

短期目标和长期目标是相辅相成的,你可以把短期目标看作是朝着长期目标努力的一种方式。

衡量进展

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Isaac SmithUnsplash 上拍摄

你需要一种方法来记录你的长期和短期目标。我建议把你的短期目标分成每周任务,这样你的工作就可以平均分配了。

为了衡量进展,我建议使用以下一项(或全部):

  • 待办事项应用
  • 保留一份清单
  • 愿景板
  • 时间表

你可以使用待办事项列表或清单来确保在截止日期前完成每一项任务。愿景板通常用于长期目标。你可以在你的墙上贴一个愿景板,这样你每天早上醒来都可以看着它。

时间表对你从起床开始计划一天中的每一件事很有用。

埃隆·马斯克通常会提前计划好自己的一天。

从早上醒来到晚上睡觉,所有他想完成的任务都是前一天计划好的。

这是我强烈建议你尝试的事情。你不需要浪费任何时间来决定下一步做什么。相反,你可以专注于手头的任务。

激情和纪律

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

伊恩·施耐德在 Unsplash 上拍摄的照片

麻省理工学院人工智能研究员莱克斯·弗里德曼(Lex Fridman)表示,激情和纪律是相辅相成的。

我们通常出于激情开始做事,比如学习如何编码,或者构建新的东西。

虽然激情帮助你开始,但它有时会消失。

有时,你可能会在早上醒来时感到没有动力,对继续下去完全没有兴趣。可能有时候你会觉得你几乎什么都没学到,而且你不想继续下去。

正是在这些时候——激情让我们失望的时候,纪律成了我们的救命恩人。

你需要有纪律来制定一个每日时间表(例如:每天学习五个小时)。

即使你不喜欢,你也需要遵守时间表。

纪律会带你走过困难的部分,确保你坚持你开始做的事情,即使激情让你失望。

持续对学习某样东西充满热情是不可能的。当处理一个特别困难的问题时,很容易放弃,不想再看它。很容易变得消极。

如果你正在做大学作业,或者准备考试,你会坚持通过困难的部分,因为你不得不这样做。你必须这样做,否则你可能会失败。

自学的时候,放弃是没有后果的。然而,度过这些困难的部分也同样重要。做到这一点的唯一方法是自律,并对自己负责。

培养一种习惯

上学时,我总是在考试前一周开始学习。那时,这些材料一直萦绕在我的脑海中,我不会忘记。

然而,我花了一些时间才意识到,学习一个新概念和为考试而学习是完全不同的两回事。

如果你的目标是学习如何编码,或者学习数据科学,你需要养成学习的习惯。

你应该每天都这样做,至少要坚持几年,直到你达到一个能力水平,让它成为你的第二天性。

每天花一分钟做一件事比每年花一整天做一件事要好。

如果你想学习如何编程,但有一份全职工作,那么你可能会在周末花时间学习。

我的建议是,下班后多花一个小时编程。

如果你不能花整整一个小时,试着做 20 分钟。

这可能看起来不多,但它会帮助你培养每天编程的习惯。

一旦你发现自己养成了这个习惯,20 分钟可能会变得更长,编程会慢慢开始成为你的第二天性。

最小化所有干扰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Unsplash 上的 dole777 拍摄

学习桌上不能有手机。

每次我的手机带在身边,我都会有每十分钟连续查看我所有社交媒体账户的冲动。

你的手机是你最大的干扰,不同的人采取不同的方法来处理这个问题。

有些人根本不使用社交媒体,因为它容易上瘾,而且耗费时间。其他人对他们每天的屏幕时间设置了限制,不要超过这个限制。

就我而言,我更喜欢在学习时不带手机。

学习或工作时需要相当长的时间来获得动力,但当出现干扰时,很容易分心。

如果你计划学习五个小时,那么在整个五个小时里最好不要把手机放在房间里。您也可以将手机保持在“请勿打扰”状态,或将您的帐户状态设置为“忙碌”,这样您就不会在这段时间收到电话或信息。

做你感兴趣的事情

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由珍·西奥多Unsplash 拍摄

不断地从教科书中学习材料并试图理解新概念可能是困难的。

连续几个月做相同的 Coursera 专业可能会变得枯燥乏味,你可能会开始变得不感兴趣。

在我的学习中,我总是加入一些我感兴趣的东西,这给了我继续学习的理由。

如果我开始研究神经网络背后的基本概念,我会给自己一个令人兴奋的目标,比如

  • 创建一个 GAN(生成对抗网络)来生成真实的名人面孔,并让人们猜猜他们认为是谁

当学习变得无聊时,这些小的、令人兴奋的目标会让我坚持下去。我知道一旦我完成了,我将能够从我学到的概念中获得乐趣,并用它来建造一些很酷的东西。

我喜欢把这看作是基于奖励的学习。每次我学到新的东西,我都会从中获得一个有趣的项目。

独自开始一件新的事情并坚持下去会很困难,尤其是当事情变得困难的时候。

然而,如果你每天朝着你的目标努力,并有纪律来带领你度过困难时期,你将能够轻松掌握新技能。

真正擅长数据科学和编程等领域需要时间和努力。如果你愿意自己投入时间和努力,没有最后期限或外部动机,你将能够走得很远。

我是一个努力学习的普通人。没有奇迹般的人。碰巧他们对这个东西感兴趣,他们学习所有这些东西,但他们只是人。—理查德·费曼

为什么斐波纳契数列的封闭形式没有在竞技编程中使用?

原文:https://towardsdatascience.com/why-is-the-closed-form-of-the-fibonacci-sequence-not-used-in-competitive-programming-674b805da341?source=collection_archive---------3-----------------------

著名的斐波那契数列具有这样的性质:每一项都是前两项之和。我们从基本情况的 f(0)=0,f(1)=1 开始。然后, f(2) 成为前两项之和:f(2)= f(1)+f(0)= 1;f(3)=f(2)+f(1)=2 以此类推。总的来说,我们得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式(1):定义斐波那契数列的中心递归。

以下是该系列中的前几个术语:

0,1,1,2,3,5,8,13,21,34,55,89,144,…

编写一个程序来计算第 n 个项可能是最简单的动态规划问题,也是技术面试中的主要问题。它在 Leetcode 上被标记为 easy(这增加了你在数据科学面试中遇到它的机会)。标准的动态编程解决方案是 O(n)时间。通过一些数学,我们也可以得到一个封闭的表达式(这涉及到黄金分割比例、 ϕ )。这个问题也出现在需要非常大的斐波那契数的竞争性编程中。你会认为封闭形式的解决方案及其所有的优点是自然的选择。但是人们倾向于接受第三种选择,这种选择不那么优雅。为什么会这样?如果你想跳过细节,只要浏览到最后一节(5)就知道了。

1 简单的技术面试问题

解决这个问题最简单的方法可能就是递归。我将在下面添加 Python 代码,你应该能够理解,因为它非常类似于伪代码。

斐波纳契的简单递归实现。

一个简单的递归函数。这个函数的运行时间随着 n 以一种被计算机科学家讨厌的方式指数增长。这是因为对该函数的每个调用都会产生两个额外的调用。

调用堆栈可以在树中可视化。我计划在图 1 中画出 f(10)的整个树,但是我的手累了,空间不够了,所以没有完成就放弃了,进一步强调了这一点。树的高度是 O(n ),我们每向下一层,树叶的数量就会增加一倍。所以,我们大概翻了 n 倍,使得时间复杂度为~O(2^n).

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:来自简单递归算法的 f(10)的调用栈,可视化为一棵树。

您将看到调用堆栈中有许多值被反复计算(您计算了多少个 4)。如果我们将第 I 个斐波那契数存储在一个数组中,我们可以在计算后从那里读取它,不需要每次都分支整个调用树。这将使得时间复杂度为 O(n)而不是指数,并且由于所需的存储(存储所有 n 个数)而增加了空间复杂度 O(n)。但是仔细想想,在计算任何特定的数字时,我们只需要前两个数字。因此,我们甚至不需要存储整个数组,只需要存储任意给定时间的前两个元素。这导致了以下的锐化版本,即 O(n)时间和 O(1)空间(仅存储前两个元素)。

但是我们可以做得更好。

2 具有生成函数的封闭形式

我最喜欢的获得递归的封闭形式的方法是使用母函数。参见第 2.2 节此处的相同技术的应用,以计算从循环开始的二分搜索法树的数量。

对于自然数 n 上的任意序列 f(n) ,生成函数定义为(求和从 0 到∞):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式(2)斐波纳契数列的生成函数。

接下来,我们插入已知为真的递归关系。我们将求和中的前两项分开,以避免处理 f(-1) 和 *f(-2)。*这个避免碰到 f(-1)f(-2) 的简单小技巧,是我很久以后回过头来想重新推导的时候一直忘记的东西。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式(3)斐波纳契数列的母函数的表达式。

如果您不能立即看到这一点,请不要担心,但是请注意几何级数, 1/(1-a) = a+a +a +… 上面的表达式告诉我们,第 n 个斐波那契数(它是表达式中 z^n 的系数)是我们仅使用 1 和 2 得到 n 的不同方式的数量。很明显,该序列将满足签名递归(等式(1))。 因为要用这种方法得到 n 你可以先得到 ( ∗ n − 2 ) 你可以先得到( *n-2) 你可以先得到(n2)* 并添加一张 2 美元的钞票或者得到 (n-1)$ 并添加一张 1 美元的钞票。

但是我们现在如何得到 f(n) ?首先,你找到分母的两个根(它是一个二次多项式,所以有两个根),ϕ和ψ,其中ϕ是黄金分割比:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ψ = 1-ϕ.因此,等式(3)中的表达式可以等价地写成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简化生成函数

我忽略了上面方程式中的许多细节。本页有更详细的演练。但是从这里开始,斐波纳契数列的封闭形式就在眼前了,因为 f(n) 只是 z^nF(z)中的系数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式(4):斐波那契数列的封闭形式

3 快速取幂

注意 ϕ > 1 的大小,而 ψ < 1 的大小。所以当 n 变大时,我们可以忽略 ψ^n 项,因为它会迅速变小。但是我们还是要把 ϕ 提升到 n 次方(用它自己乘以 n-1 倍)。这是否意味着我们没有从第 1 节的动态编程解决方案中获得任何好处(运行时间仍然是 O(n))。不完全是,因为有一个计算指数的有效算法。我们要找 ϕ^n. 如果 n 是偶数,我们可以说:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在 ϕ^(n/2) 可以计算一次,然后与自身相乘。这将使我们的计算成为 (n/2+1) 而不是( n-1) 。但是我们也可以对*【ϕ^(n/2】*项做同样的事情,一路递归下去。使用这种分治算法,所需的乘法次数将从 O(n)减少到 O(log n)。

关于这一点的维基百科文章强调了一般的洞察力:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们现在有了一个优雅的封闭形式的表达式,可以在 O(log n)时间内计算。但是当寻找大的斐波那契数的问题出现在竞争性编程中时,人们就忽略了它。为什么会这样呢?

4 使用矩阵

首先,让我们来看一个策略,即在竞争性编程中用于寻找大的斐波那契数。我们可以将等式(1)中的递归写成方程组:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,我们可以用矩阵形式表示这些方程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

继续延伸到 f(0)f(1) ,我们将得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式(5)作为矩阵的斐波那契数

现在,第 2 节中的快速取幂技巧对矩阵和标量同样有效。这样,我们可以在 O(log n)时间内完成 A^n 的取幂运算,而不是 O(n)时间。然后在此基础上进行 O(1)次运算,得到 f(n) 。对于斐波那契数的这种想法的实现,见这里

即使在复杂性方面,这种涉及矩阵快速取幂的方法与封闭形式的解决方案相同,但它涉及的乘法比封闭形式多得多,因为每次 A 与其自身的乘法需要八次乘法,而不是当我们提高 ϕ^n 时的一次乘法。那么为什么它比封闭形式更受欢迎呢?

5 数值考虑

等式(4)中的封闭形式包括多次将无理数 ϕ 与自身相乘。ϕ是无理数,不能完全用计算机用来存储实数的浮点数来表达;只是近似的(十进制展开永远继续,我们必须在某处停止)。随着我们将ϕ提升到一个更大的幂,这种精度损失的重要性也在增加。这导致产生的 ϕ^n 在很大程度上关闭。 n 变得越大,由于精度损失导致的误差越大。事实证明,当 n 超过 100 时,这种因精度损失而产生的误差就成了一个真正的问题,我们开始得到明显偏离的结果。

另一方面,对于等式(5)的矩阵表达式,矩阵中的所有元素都是整数。所以,我们最后做的所有乘法都不会离开整数域。因此我们永远不会失去精度。因此,尽管等式(5)需要的乘法次数是等式(4)的八倍以上,但我们为了数值精度付出了这一代价,最终仍然得到了 O(log n)算法。

除了将浮点数(尤其是无理数)提升到大指数,数值分析中的另一大禁忌是减去两个大数。乍一看,这可能是等式(4)中的一个危险。然而,第二个 ψ^n 项实际上非常小,因为 |ψ| < 1 实际上可以忽略。因此,在这一特定案例中,这不是一个问题。

顺便说一句,方程(5)中的矩阵 A 可以进行特征分解,乘法甚至可以更有效地完成(详见维基百科文章的“矩阵形式”)。但是,唉,本征分解将再次给我们 ϕψ 项,我们将回到数值不稳定性的问题。事实上,我们也可以通过特征分解方法从方程(4)中获得闭合形式(参见维基百科文章)。事实上,如果矩阵 A 的任何元素都只有一个浮点数,那么在大多数情况下而不是进行特征分解并对其执行快速取幂运算是没有意义的(参见本文 stackoverflow 帖子)。


如果你喜欢这个故事,成为推荐会员:)

https://medium.com/@rohitpandey576/membership

为什么训练数据是 NLP 的瓶颈?多语言 BERT 示例。

原文:https://towardsdatascience.com/why-is-training-data-the-bottleneck-for-nlp-a-multilingual-bert-example-44b86c11f5a?source=collection_archive---------51-----------------------

迁移学习已经改变了自然语言处理领域的范式,但它在更广泛的应用方面的鲁棒性仍然有限。

当你看到那些“人工智能(AI)将对人类构成危险”的讨论时,这些讨论如今无处不在,你是否也问过“为什么会这样”?根据谷歌的VP 之一,当你向一个最复杂的语言模型(LM)问‘内布拉斯加州以南是什么州’时,它的答案是‘南内布拉斯加州’。那么,这种水平的艺术真的会比我们所知的宇宙中最聪明的物种,即智人,更聪明吗?好吧,我们已经从青铜时代走到了现在,所以答案可能是“是”,指的是未来的某个时间。然而,有这么多的箍,我们需要跳过,以提高目前的人工智能能力。

我不得不承认,当我第一次读到迁移学习时,我真的很激动。我认为,当有人看到 ImageNet 和 BERT 等模型,并阅读一些关于这些模型的“炒作”文章时,他们可以认为我们实际上已经非常接近电影“她”这样的东西。然后,当我开始在企业环境中作为数据科学家工作,并接触到医疗保健行业的一些关键业务问题时,我意识到现实世界的应用程序涉及一些不同于标准任务的问题,如 SOTA 或胶水。我见过不同迁移学习包、初创公司和潜在供应商公司报告的不同任务的+95%准确率值,当我在一些不同的数据集上应用他们的模型时,所有这些花哨的模型都在某个角度和/或某个级别上失败了。所以这幅图对我来说更清晰了,我从自然语言处理领域的迁移学习中得出了一个更实际的结论;大多数这些迷人的人工智能结果只在非常特定的测试集上有效,这些测试集可能是在训练集附近精心选择的。因此,在一个语言学相关的例子中(我的知识主要是自然语言处理(NLP),我对计算机视觉不是很熟悉,所以我将继续只给出这个领域的例子),人们可以认为 AI 并不真正理解人类语言,因为它已经在一些来源中得到推广,例如一些新闻文章,作为一个例子,它只理解它以前看到的语料库的某些方面,并试图将其理解推断到一个新的数据点。这个论点对你们中的一些人来说可能听起来是多余的,因为我们不应该等待人工智能对一些与训练集非常不同的数据给出神奇的答案。我当然同意这一点,但如果我们想向更广泛和实际的人工智能应用进军,并在迁移学习方面作为一个社区表现出色,我们最好有一个坚实的路线图,也有这个目标的坚实问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·斯皮斯克在 Unsplash 上的照片

随着迁移学习应用的激增,训练数据的关键性,尤其是在自然语言处理领域,已经成为近几个月的热门话题。你也可以通过观察市场上越来越多的众包或数据标签创业公司来把握这一趋势。在 ACL 2020 上发表的最近的一篇论文中阐述了一个非常有趣的解决这个障碍的方法,我发现这是一个非常不同的观点。虽然这项研究可以被认为是对科学哲学和一些严格定义的术语(如语言学范围内的“意义”、“形式”和“交际意图”)的巨大关注,但它提出了一个非常清晰的结论:在 BERTology 论文中有证据表明,大规模的 LMs 可以学习语言形式结构的各个方面,并利用训练数据中的人工产物,但他们不理解人类如何交流,或者他们不记得事实知识或理解文章中指出的问题背后的意图。关于这种说法的一些快速失败的例子(用 GPT2 生成)可能会在另一个有趣的博客中找到,作者在博客中提出了一种叫做“心智模型”的想法,这种想法有点模仿人脑在迁移学习协议中消化语言的方式。这个想法基于这样一个事实,即我们可以根据非常不同的因素赋予句子和短语非常不同的含义。让我们来看看这个非常随意的句子,例如:“…迈克尔·乔丹现在如果他得到布莱顿·拉塞尔对拜伦·拉塞尔的快速交叉传球,迈克尔停了下来,把球埋了起来…”。我假设铃声已经响起,让一些人想起了 1998 年的 NBA 总决赛,即使你没有共鸣,“Bryon Russel”和“Micheal Jordan”,“cross-over”和“shot”一起可能会告诉你,这句话实际上是在描述一个发生在过去的事件,在一个挤满了数千人的体育场里,在犹他州或芝加哥。尽管迁移学习模型通过从不同角度查看整个句子的每个单词和模式,对语义有一定程度的理解,但它们不知道这些显而易见的(对人类而言)细节和联系,这就是为什么“心智模型”提供了一些初步的障碍解决方案。不过,我希望在另一篇文章中讨论这个新想法。

另一个非常有趣的概念叫做“压力测试”,在这篇文章中已经讨论过,其思想是除了标准验证和测试集之外,对模型进行更广泛的测试。我知道这听起来很荒谬,但是我个人很喜欢能够从现实世界的应用角度来评估模型的想法。我认为,如果我们有一份关于每种迁移学习模式的详细的真实世界效果报告,那就太好了。这个想法听起来非常数据饥饿,但只是一个想法,我将在本文中尝试运行一种压力测试,希望它会很有趣。

我喜欢通过相对简单和容易理解的模型来讨论不同的想法、观点和人工智能的潜在未来影响,但这可能是足够多的介绍,所以让我们开始讨论模型。M 迄今为止,我的观点是展示和讨论训练集的重要性,以及这一基础组件的各个方面如何在当前迁移学习研究和潜在的更广泛应用之间引入差距。在我阅读并思考了上述问题后,我想在一些 LM 上做一个非常快速、突出的压力测试(感谢 mighty HuggingFace,如果只有 Tensorflow 或 PyTorch,生活会更加耗时),以确定同一 LM 架构的不同训练集的效果。我在这篇文章中试图演示的是对一些基于 BERT 的屏蔽语言模型(MLM)之间的差异的直观解释,这是不同语言的微调集之间的差异的结果。我的希望是通过探索不同的语言 LMs 来巩固训练集的效果。

因为我需要在不同的训练集上训练的 BERT 模型的数量,所以我考虑了不同的语言。我的目标是用一些主观问题对这些不同的 LM(不同的语言)进行压力测试,同时利用非常易于使用的 transformer 管道。BERT 已经在各种不同的任务上进行了微调,包括但不限于掩码标记预测、文本分类、命名实体识别以及问题回答;然而,由于问题抽取需要上下文输入,我决定对 MLM 采用类似的过程。因此,我通过屏蔽其中一个标记(理想地将主观性引入到句子中的标记)生成了 15 个相对较短的句子,并将所有这些屏蔽的句子分别输入到经过英语、德语、法语和土耳其语训练的基于 BERT 的 MLM 中。我相信展示代码将是描述这个工作流的最好方式,所以我将通过展示包和句子来深入研究:

正如你可能看到的,我试图指定或多或少主观的或正在进行的辩论问题(以上大部分,如果不是全部),可以用一个词来回答。想法是观察不同的 LM(在不同的语言学语言上训练)将如何预测这些记号。我最初的期望之一是,我是否能看到任何文化、习惯或社会相关的差异,这些差异通过训练语料库反映到模型输出中。因为这将是训练集如何影响迁移学习预测的一个显著的例子。我不能 100%确定我是否做到了这一点,但我希望你能做出决定并让我知道!

我只把变形金刚用于迁移学习部分,而 google-translator 只用于将预测的单词翻译成英语。第一次翻译是用变形金刚管道在句子层面完成的,除了我的母语土耳其语,手动翻译对我来说更容易。这里一个重要的警告是,我和我的前同事和朋友 Emir Kocer 和 Umut Soysal 一起运行了德语和法语翻译,并试图最小化翻译引起的对屏蔽令牌的错误预测。

下一步是将这些句子输入到各自的 MLM 中,提取屏蔽的标记预测并将其转换为英语,以便我们可以更容易和全面地评估结果。由于这最后一个翻译阶段是在单词级别,我使用了谷歌翻译。你知道,有时你只是想测试一个新的软件包,即使它做同样的工作…

朋友们,是时候拿起你们的零食了,如果你们想吃的话,我们就要看有趣的部分了。我不能说结果看起来是开创性的,但相当有争议,我很喜欢进一步的集思广益和建设性的批评。这是结果和我的观察,试图围绕这张看起来很奇怪的桌子形成一个故事。由于这篇博客已经比我预期的要长,我只涉及一些数据点。我没有忘记,这是的完整代码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“here”标记只以法语出现在第 0 行的食物上,这似乎非常有趣,我找不到快速突出显示数据,所以我无法在这里进行数据驱动(真可耻),但甚至有一个 quora 问题:“为什么法国人认为他们有地球上最好的美食?”。

对于德国,假设‘意大利’token 在这句话的范围内指的是意大利菜,根据这次调查,我发现意大利菜在德国比德国菜更受欢迎。你认为社会中的这些趋势会投射到迁移学习上吗?或许,或许,或许…

根据统计数据,我对英语中“巧克力”的唯一解释是美国在零食消费中占主导地位,但这可能是一种微弱的关系,所以我实际上只是大声说出这一点…

对于第一行的度假句子,英语、法语和土耳其语中都出现了“这里”这个词,根据世界旅游晴雨表,这些国家是世界上最受欢迎的 6 个地方中的 3 个。因此,另一条线索表明,这些国家的一些特征差异可能已经从训练语料转移到了模型预测中。

土耳其的伯特在第二排预测了“医生”的标记,这立刻引起了我的共鸣,因为我的经验也告诉我,在这个国家对医生职业有多么痴迷。我不是随口说的,也不是因为我在土耳其长大,这是一项调查。

对于第 9 行的宗教相关句子,“坏的”和“危险的”标记仅在德语和法语中输出,这两个国家在宗教重要性排名中远远低于美国和土耳其。另一个潜在的信息流可能通过训练数据和迁移学习从社会心态流向机器学习预测。

在这个结果数据框架中仍然有很多东西需要解开,还有一些我现在还无法解释的非常奇怪的预测。例如,黄色不仅在土耳其语中是最令人愉快的颜色,Iphone 也仅在德语中被预测为最佳智能手机,尽管英国人伯特似乎对冷战的获胜者非常有信心,美国不是其预测的最强大的国家,只有法国人 LM 对大麻有强烈的仇恨。当然,更不用说可能由于语法或翻译错误而对屏蔽标记进行的一些停用词预测了。

我相信,我们也可以通过比较不同语言的语料库来讨论这些结果的数据偏差,事实上,训练数据中的偏差是另一个要讨论的大主题,但我不会超出这一点,我只是想现在向你们介绍这一相关的观点(不确定我是否会在另一个博客中提到这一点,也许…)。

你可能会提出与我这里不同的解释,请记住,我也希望听到更多。所以让我总结一下最终让这架飞机着陆的一些要点:

  • NLP 是人工智能的一个快速发展的领域,最近有了显著的改进,支持研究和企业级别的不同应用。然而,对于现有技术的大量夸大,忽略了训练语料选择的重要性、依赖性和后果。
  • 对于有监督的 NLP 工作的训练语料库方面,如压力测试,有不同的想法和讨论,本文背后的动机是在相同的迁移学习架构上应用一种非常短的压力测试,以识别训练数据导致的预测差异。
  • 我想展示一个引人注目的迁移学习的例子,重点是由于训练集的差异而产生的差异。通过输入不同的主观掩蔽句,选择并测试了不同语言的 LMs。
  • 不同语言对同一句子的标记预测存在很大差异。我已经为这些差异找到了一些补充数据,但并不是全部,希望本文中提供的数据能够引发您的思考,得出这样一个结论:训练数据限制了迁移学习模型在广泛应用中的有效性和正确性

正如我常说的,请随时在 Linkedin 上与我联系,进一步讨论这篇文章,反馈是我们成长的关键。

https://www.linkedin.com/in/tolga-akiner/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值