无服务器世界中的数据科学
利用托管服务构建数据产品
在大公司中,通常有单独的团队来训练机器学习模型,并将这些模型投入生产。数据科学团队可能负责特征工程、模型选择和超参数调整,而机器学习工程团队负责构建和维护服务于训练模型所需的基础设施。随着云平台提供越来越多的托管服务,这种关注点的分离不再必要,数据科学家现在可以构建生产系统。处于数据科学和机器学习工程交汇点的数据科学家通常被称为应用科学家,这是一个可以为公司提供重要价值的角色。
谷歌云平台(GCP)和其他云提供商现在为数据库、消息传递、监控、容器、流处理和许多其他任务提供无服务器和完全托管的解决方案。这意味着团队可以快速构建端到端的机器学习管道,同时减少供应和监控基础设施所需的时间。In 使数据科学家能够构建生产级的数据产品,其中设置了监控,并且系统可以从故障中恢复。除了只关注模型训练,应用科学家还可以构建服务于 ML 模型的生产系统。
为什么单个团队能够利用托管服务构建端到端的机器学习管道非常有用?
- **快速开发:**让一个团队负责模型构建和模型部署通常会导致项目更快的迭代,从而在扩展系统之前产生更多的原型和测试。使用托管服务,如 GCP Redis 上的 Memorystore,使团队能够用应用程序数据库制作数据产品的原型,而不必担心启动和监控基础架构。
- **简化翻译:**当不同的团队执行模型构建和模型部署时,通常会使用不同的工具集,并且可能需要将使用 Python 训练的模型翻译成不同的编程语言,例如 Go。当团队同时负责这两项任务时,通常会使用相似的工具来完成这两项任务,比如使用 Python 来进行模型训练和模型服务。这种翻译的减少对于构建实时系统特别有用。
- **发展专业知识:**构建端到端系统意味着数据科学家将获得使用标准工具之外的工具的实践经验,例如使用 NoSQL 工具和 Kubernetes。
虽然让单个团队使用托管服务构建数据产品有几个优点,但也有一些缺点:
- **成本:**当您达到一定规模时,托管服务通常比托管解决方案更昂贵。例如,无服务器功能非常适合原型开发,但是对于大容量管道来说成本太高。
- **缺失功能:**云提供商可能没有针对您需要使用的服务的完全托管产品,或者该产品可能无法提供应用所需的性能要求。例如,一些组织使用 Kafka 代替 PubSub 进行消息传递,因为延迟要求较低。
- DevOps: 让一个数据科学团队构建和部署机器学习管道意味着该团队现在需要数据产品,这可能不是该角色的期望。对于关键应用程序,与工程或云运营团队合作非常有用。
数据科学团队使用托管服务构建端到端数据产品会是什么样子?我们将概述在 GCP 上为移动应用程序服务的实时模型。
数据收集管道
数据收集
为这个数据产品设置的第一个组件是从移动应用程序收集事件的管道。我们需要将数据从移动设备传输到 BigQuery,以便为训练模型提供历史数据。对于模型应用,我们将使用 Redis 来执行实时特征工程。我们需要为这个管道创建两个组件:一个 web 服务将 HTTP post 事件转换成 JSON 消息并将事件传递给 PubSub,一个数据流作业将 PubSub 设置为数据源,将 BigQuery 设置为数据接收器。web 服务可以使用 Python 中的 Flask 或 Java 中的 Undertow 编写,而数据流作业可以使用 Python 或 Java 编写。我们可以使用以下服务通过 GCP 上的托管服务来构建收集管道:
- **负载平衡:**该服务提供第 7 层负载平衡,以提供一个端点,移动设备可以调用该端点来发送跟踪事件。要设置负载平衡器,我们首先需要在 Kubernetes 上部署跟踪服务,并使用节点端口公开该服务。
- Google Kubernetes 引擎(GKE): 我们可以使用 Docker 将 web 服务容器化,并使用托管的 Kubernetes 托管服务。该服务接收 HTTP posts 形式的跟踪事件,并将 post 有效负载转换为 JSON 字符串,然后传递给 PubSub。
- PubSub: 我们可以使用 PubSub 作为消息代理,在管道中的不同服务之间传递数据。对于收集管道,消息从 web 服务传递到数据流作业。
- **云数据流:**数据流作业定义了一组要在数据管道上执行的操作。对于这个管道,作业将执行以下操作:使用来自 PubSub 的消息,将 JSON 事件转换为 BigQuery 记录,并将记录传输到 BigQuery。
- BigQuery: 我们可以使用 BigQuery 作为托管数据库来存储来自移动应用程序的跟踪事件。
一旦这些组件建立起来,我们就有了一个收集跟踪事件的管道,可以用来建立机器学习模型。在下面列出的帖子中,我提供了类似管道的代码示例。
收集关于应用程序使用和用户行为的数据,如玩家在游戏中的进度,对于产品来说是无价的…
towardsdatascience.com](/a-simple-and-scalable-analytics-pipeline-53720b1dbd35)
模型培训渠道
模特培训
有了 GCP,我们可以使用 Google Colab 作为托管笔记本环境,通过 scikit-learn 等库来训练模型。我们可以使用 Python notebook 环境来训练和评估不同的预测模型,然后将性能最佳的模型保存到 Redis 中,供模型应用程序服务使用。如果应用服务不是用 Python 编写的,那么使用诸如 ONNX 这样的可移植模型格式是很有用的。下面的帖子介绍了 Google Colab 平台。
沮丧和困惑的基本教程
towardsdatascience.com](/getting-started-with-google-colab-f2fff97f594c)
模型服务管道
特征工程和建模服务
一旦我们有了一个我们想要服务的训练好的模型,我们将需要构建一个应用程序,该应用程序将基于跟踪事件实时更新每个用户的特征向量,并且还实时服务于模型预测。为了将编码跟踪事件的特征向量存储到用户配置文件中,我们可以使用 Redis 作为一个低延迟的数据库,在这里我们检索和更新这些值,如下面列出的博客文章中所述。对于模型服务,我们需要构建一个 web 服务,该服务从 Redis 获取用户配置文件,应用存储在 Redis 中的模型,该模型是使用 Google Colab 训练的,并将模型预测返回给模型应用程序,在模型应用程序中,模型预测可用于个性化应用程序。与跟踪管道类似,通过将这些应用程序容器化,web 服务可以托管在托管的 Kubernetes 上。
使用流式数据构建用户配置文件
towardsdatascience.com](/nosql-for-real-time-feature-engineering-and-ml-models-93d057c0a7b8)
监控组件
监视
为了监控应用程序,我们可以使用通过 Stackdriver 提供的 GCP 中的日志和监控托管服务。我们可以记录来自 GKE 上托管的服务的事件,以及从数据流作业到堆栈驱动程序日志的事件。我们还可以将这些服务的自定义指标发送到 Stackdriver monitoring,在那里可以根据阈值设置警报。通过设置这些数据流,可以设置对管道的监控,其中触发警报并将其转发给 Slack、SMS 或 PagerDuty,并且可以使用 Stackdriver 查看应用程序日志。下面的帖子中提供了使用 Stackdriver 进行监控和日志记录的代码示例。
为模型服务部署生产级容器
towardsdatascience.com](/devops-for-data-science-with-gcp-3e6b5c3dd4f6)
结论
使用托管服务可以减少设置和监控基础架构所需的开发运维工作量,从而使数据科学团队能够着手将模型投入生产。虽然支持数据科学团队构建端到端管道可以加快数据产品的开发,但过度依赖托管服务可能会大规模推高成本。在本帖中,我们讨论了一些在 GCP 可用的托管服务,数据科学家可以利用这些服务来构建实时 ML 模型。
本·韦伯是 Zynga 的一名杰出的数据科学家。我们正在招聘!
黑天鹅时代的数据科学
第 1 部分:理解你的因果链
图片鸣谢迪克·丹尼尔斯:https://commons . wikimedia . org/wiki/File:Black _ Swan (Cygnus _ atratus) rwd . jpg
在他的书《黑天鹅》中,作者纳西姆·塔勒布将黑天鹅事件描述为那些不可预测的、带来严重后果的事件,而人们事后将其描述为完全可预测的。我认为这三个条件都适用于新冠肺炎造成的疫情是合理的。在这段时间里,实际上日常生活的每一部分都被改变了。这就提出了大多数预测模型有效性的问题。在这种时候,评估你的模型的潜在假设是特别重要的,有一个统计背景是有帮助的。
重温链式法则
在我成为数据科学家之前,我是一名粒子物理学家。粒子物理学是独一无二的,因为你研究的是肉眼看不见的现象。信号极其稀少。通过组合留在各种电子检测器中的签名来识别信号事件,得到的电子签名被很好地描述为随机事件。虽然机器学习正被用来更有效地识别这些类型的罕见事件的信号,但这些技术并没有很快被采用。除了物理学家的固执之外,这个事实的原因是在这个领域中,潜在的一连串事件被很好地模拟了。理解这些潜在过程的变化本身就很有趣,因为它可以表明一种新的物理现象的存在。
对随机的,通常是罕见的事件进行分类是机器学习最适合的任务之一,也是它最普遍的应用。然而,与上述场景不同,机器学习通常应用于中间步骤没有得到很好研究的场景。在大多数情况下,最终结果的有效模型是有用的,即使因果链中的每一步都没有被完全理解。虽然电子以光速穿过气体听起来很难建模,但它甚至没有触及人类行为带来的复杂问题的表面。
例如,考虑一个应用于医疗保险人群的模型,该模型试图预测某个成员是否会因流感住院。作为一个功能集,您将利用患者的医疗账单历史以及人口统计信息。虽然看起来这是一件简单的事情,但实际上在这个过程中会发生很多事情。首先,一个人需要接触流感。第二,这种暴露导致感染严重到需要住院治疗。当然,即使这张图片也过于简化了,但它对于说明性的目的是有用的。
作者图片
当我们训练一个模型时,它只是简单地学习 P(I|M),而不是对过程中的中间步骤进行建模。大多数情况下,这是可以的,因为有理由假设大多数人在每个流感季节都会接触到流感,而我们真正了解的是 P(即|E,M)。在这个社会距离越来越远的时代,最初的假设是站不住脚的。在正常情况下,P(E|M)将被建模为高常数。然而,在疫情期间,这一假设将不再成立。因果链中的第二步,P(即|E,M ),在这段时间内很可能不会发生变化。
理解含义
所有这些都有点理论化,但是这些想法对模型的有效性有现实世界的影响。社会距离的测量已经使关于 P(E|M)的最初假设无效。连锁反应是整个医疗保健系统的利用率急剧下降。真正的问题是,你需要重新培训你的模型吗?答案是它依赖于上下文,特别是围绕模型部署的上下文。
医院部门可能会使用流感模型的一个用例来尝试预测住院资源的总体负载。我们模型的输出将给出我们人口中各种成员住院的概率,当与一些简单的算法(或一些奇特的蒙特卡罗模拟)结合时,可以产生对预期医院负荷的预测。这是一个模型部署的例子,由于违反了因果链中的初始链接,该模型部署将完全无效。解决这个问题将会非常复杂。如上所述,在正常情况下,P(E|M)可以被建模为一个高常数。社会距离措施对这种分布的影响非常不均衡。虽然这将是一个净减少,一些群体不太能够自我隔离。您可能需要结合当前数据重新训练模型。
一个完全独立的用例是基于人群进行预测,并确定如果感染流感最有可能出现急性并发症的个体。如今,大多数人对去医院接受非急症治疗保持谨慎,这是理所当然的。这种行为对大多数人来说是谨慎的。也就是说,对于那些最容易患流感并发症的人来说,注射流感疫苗仍然是个好主意。对于大多数人来说,知道他们是否接种流感疫苗会更好是一个艰难的决定,大多数人会默认呆在家里。在这种情况下,因果模型保持不变。尽管个人暴露于流感的概率没有很好地建模,但在此应用中,这不是考虑的主要问题。利用这种模式的护理管理团队实际上是在试图传达因果链 P(即 M)中的第二步。即使抛开数学不谈,你也可以想象护理经理向会员传达的信息可能是这样的:“虽然我们希望你保持安全,但我们认为如果你今年患了流感,那么你就有出现不良反应的风险。”护理经理会合理地传达因果模型的第二部分,而不提供任何这样做的想法。在这种情况下,模型完成了它的工作,它在这个上下文中的应用不会受到影响。
接下来呢?
如果上下文没有把你的模型放进垃圾箱,并不意味着你应该仔细检查它。在我的下一篇文章中,我将讨论数据漂移,并看看我们如何评估模型的基础条件是否已经改变到需要重新训练模型的程度。
原载于 2020 年 10 月 8 日https://closed loop . ai。
电晕时代的数据科学
现在我们都被安全地锁在家里,一个新的危险正在逼近。我们失去了重心,不再为企业创造价值。
今天,世界上几乎所有的数据科学家都在家里工作。我们的工作不要求我们去任何地方,但要有稳定的互联网连接。我们可以自由地做我们最擅长的事情:在笔记本电脑屏幕后面生成代码、数据、特性和模型。
但是危险正在逼近。我们与那些我们正在——或者应该——传递的人失去了联系。我们钻研细节,忘记了推动业务向前发展。我们忘记了我们的价值取决于我们设法增加的价值。我们忘记了我们发现的重要信息需要到达前线防御。
🇨🇭·克劳迪奥·施瓦茨| @purzlbaum 在 Unsplash 上拍摄的照片
数据科学主要是通信…
…通信需要发送者和来源。
数据科学项目需要对某个主题进行深入研究,理解数据。检查再检查。并再次检查。数据科学家通常在这一领域非常全面和熟练。他们的分析非常细致,直到他们对自己的发现有百分之百的把握。通常这是好的,你会发现商业利益相关者对你的交付很苛刻,在这里我们找到了一个微妙但重要的平衡:准确性和交付。
数据科学就像在严谨和交付之间走钢丝。
企业促进了创新、改变、测试和尝试新事物的需求。分析团队促进对数据、数据质量和建模技术的深入了解。尽管通常会有紧张,但正是在这个十字路口**,我们可以交付重要的项目**。
然而,持续的危机已经极大地改变了企业和商业格局。顾客的行为有所不同。公司的经营方式也跟着改变了。由于每个人都在家工作,会议变得不那么活跃,在咖啡机旁遇到某人变得更加困难(除了一个你仍然被允许亲密接触的室友)。
每天在办公室里,你会有无数的偶遇。偶遇换了部门的同事或者项目中见过一面的人。虽然它们可能发生在任何地方,但咖啡机仍然是最有可能获得这些意外收获的地方。这些相遇给我们带来的不仅仅是愉快的社会交往。它们让我们看到其他地方正在发生的事情,并有机会看到项目之间潜在的重叠;如果必须的话,协同作用。
改变消费者,改变企业…
这些不断变化的景观对团队创建的许多分析或模型都有影响。通常是因为数据科学家假设(或不得不假设)世界的行为相当有规律。甚至不规则性也被刷成某种总体规则性。去年夏天发生的事情,今年将再次发生。我们称之为季节性效应。
甚至不规则性也被刷成某种总体规则性。
因此,一个人天真地认为世界行为相当有规律,外部性是静态的。这种想法在危机时刻很快就破灭了。现在,情况不再是这样了。一切都可能不同。
顾客们迅速购买旅游保险,希望能以此为由索赔未来被取消的假期。或者顾客对取消的航班同时向保险公司和航空公司提出索赔——两者都有超负荷的要求。
我们的业务,我们的模型都在一些(通常是隐含的)规律性概念下运作。我们认为我们了解事情是如何运作的,因为它们在过去是如何表现的。但是这些变化的时代意味着我们应该更新我们的模型,包括技术和心理上的。我们应该更重视过去的事情,我们应该将这些变化告知企业。
进入客户洞察中心…
为了给企业提供“实时”洞察,我们在建立了一个客户洞察中心。这是一个数字化的地方,我们可以在这里分享关于顾客的信息,关于我们看到的不同或奇怪的行为,关于顾客购买的变化以及所有相关(或无关)的事情。总而言之,这是一个技术人员可以向商业观众展示技术成果的地方。
实际上,这是一个团队渠道,我们在这里分享新的发现,但由集成的 PowerBI 仪表板支持。商界人士可以订阅该频道,随时了解最新消息。更重要的是,他们可以分享自己的轶事证据,并激励数据科学家和分析师去创造新的见解。在咖啡机旁搭起偶遇的桥梁。
各种清单…
- 让团队采取修补和完成事情的心态。对你来说可能微不足道的事情对其他人来说可能是一个启示,所以分享你的发现。
- 主动接触业务利益相关者——他们现在比以往任何时候都更需要你的洞察力。即使他们没有向你伸出手,也要向他们伸出手。
- 问问你自己,你是否有任何信息需要与其他团队、经理或领导分享?如果答案是肯定的,那就上吧!
- 检查你的发现,问问你自己你会根据这些信息提出什么建议。给出建议和你的数字,这对企业来说通常更容易和更可行。
注意安全,呆在家里,保持理智!
金融中的数据科学
Python 中历史股价数据的移动平均策略回溯测试
马库斯·斯皮斯克在 Unsplash 上的照片
在这项工作中,我将从 Yahoo Finance 中提取特定股票代码的历史价格数据,并检查一个简单的策略,看看它是否可以盈利。你可以通过我的 Github 账号访问这部作品的源代码。
几年前,当我想投资股票市场时,在没有 python 知识的情况下测试一个策略会花费我在各种网站上订阅的费用。坦率地说,在大多数情况下,我对数据筛选和入围的标准并不满意。
让我们定义一些将在这项工作中使用的概念:
简单移动平均线(SMA):这是一个趋势跟踪指标,可以通过对一组给定的值进行算术平均来计算。换句话说,一组数字或者金融工具的价格相加,然后除以这组数字中的价格数(更多细节请参见 i nvestpedia )。
例如:如果我们想计算当前点的 SMA_20 值,我们可以将过去 20 天(或其他时间间隔)的收盘价相加,然后除以 20。
移动平均线策略建议当短均线穿过长均线时买入,当短均线穿过长均线时卖出。下图是买入信号(SMA_20,红线穿越蓝线,SMA_50)和出场点,反之亦然。
1-数据提取和准备
历史股价数据可以从各种来源找到,但最简单的是雅虎财经。为此,我们需要导入 yfinance 库和其他相关的库,它们将用于使用 pandas 进行数据操作。
import numpy as np
import pandas as pd
import yfinance as yf
import datetime as dt
import matplotlib.pyplot as plt
import mplfinance as mpf
首先,我们需要定义我们将检查策略的时间范围。要使用 yfinace 库,日期格式应为 YYYY-MM-DD。将开始日期定义为你最喜欢的时间。你可以对结束日期做同样的事情,但是我更喜欢今天作为结束日期。我们可以将其定义如下:
start = '2016-01-01' # format: YYYY-MM-DD
end = dt.datetime.now() # today
在下一步中,将您最喜欢的股票代码 ticker 字符串存储在 stock 变量中。我们打算用它在雅虎财经库中作为数据框下载:
stock='AMD'
df = yf.download(stock,start, end, interval='1d')
df.head()
在这里,我选择了 AMD ticker (Advanced Micro Devices,semiconductor)并使用 yfinance 的下载属性将价格数据存储在数据帧中。有几个参数,我们应该包括如股票名称,开始和结束日期。默认的采样间隔是一天,但是您也可以选择其他间隔。数据框的最后一列是开盘价、最高价、最低价、收盘价、调整后收盘价和交易量。
要查看我们可以为下载功能定义哪些参数,我们可以在 jupyter 笔记本(如下图)中点击功能括号内的 shift + Tab 键。如果你向下滚动,它也有每个参数的解释。
2- 移动平均计算
我们来定义短、长简单移动平均线,SMA 变量,并把它们存储在这里名为 SMAs 的列表中。
short_sma= 20
long_sma = 50
SMAs=[short_sma, long_sma]
我们可以使用滚动和均值函数逐个计算每个 SMA 的移动平均值,但是为了使它更灵活地用于两个以上的 SMA,我们可以使用 for 循环,例如:
for i in SMAs:
df["SMA_"+str(i)]= df.iloc[:,4].rolling(window=i).mean()
这一行代码表示,将在预定义的时间窗口中使用滚动函数计算每个 SMAs,调整后的收盘价位于数据框的第 5 列。然后,每个 SMA 将被添加为一个新列,名称为 SMA,后缀为我们准备的时间窗口。
为了检查结果,我们可以调用 tail 函数来查看数据帧的最后几行。增加了 SMA_20 和 SMA_50。
3- SMAs 相对位置识别
这部分是均线策略回溯测试的主干。应该定义这两个 SMA 的相对位置,以识别趋势方向。它有简单的基本原则:如果短均线高于长均线,我们在上升趋势区域,在相反的条件下建仓卖出。让我们看看代码:
position=0 # 1 means we have already entered poistion, 0 means not already entered
counter=0
percentChange=[] # empty list to collect %changes
for i in df.index:
SMA_short=df['SMA_20']
SMA_long =df['SMA_50']
close=df['Adj Close'][i]
if(SMA_short[i] > SMA_long[i]): #line 9
print('Up trend')
if(position==0):
buyP=close #buy price
position=1 # turn position
print("Buy at the price"+str(buyP))
elif(SMA_short[i] < SMA_long[i]):
print('Down trend')
if(position==1): # have a poistion in down trend
position=0 # selling position
sellP=close # sell price
print("Sell at the price"+str(sellP))
perc=(sellP/buyP-1)*100
percentChange.append(perc) #line 23
if(counter==df["Adj Close"].count()-1 and position==1):
position=0
sellP=close
print("Sell at the price"+str(sellP))
perc=(sellP/buyP-1)*100
percentChange.append(perc)counter+=1
print(percentChange)
这是一个 for 循环代码块,它将迭代我们先前读入 df 变量的数据集。在从数据框架中定义收盘价、短和长 SMA 后,它将根据短和长 SMA 值使用 if 语句进入两个不同的分支(第 9 行)。如果短均线在长均线之上,它打印出趋势方向(“上升趋势”),如果投资组合中没有现有头寸,它将根据当天的收盘价买入头寸(信号)。如果短 SMA 的读数比长 SMA 的读数小,则它处于下降趋势。如果我们已经有头寸,我们应该以调整后的收盘价卖出。使用 pandas 中的 append 函数(第 23 行),我们将把结果存储到一个 percentChange 变量列表中,如前一行所定义的。块代码的最后一部分,从第 24 行开始,是检查是否有一个开放位置,我们正在向下计数到数据帧的末尾。
在上图中,你可以看到屏幕打印的 lat 部分,它显示了趋势打印、买入和卖出信号以及存储在列表中的所有交易。
4-统计
在定义了一些变量(如收益和损失)和它们的数量后,我们可以对 perecntChange 中的单个值再次使用 for 循环来找出统计信息。列表中的正值表示增益,将在增益变量中累加。负值是损耗,将存储在损耗变量中。我们可以将总回报以百分比的形式打印出来,并将数值四舍五入到小数点后两位。
gains=0
numGains=0
losses=0
numLosses=0
totReturn=1
for i in percentChange:
if(i>0):
gains+=i
numGains+=1
else:
losses+=i
numLosses+=1
totReturn = totReturn*((i/100)+1)
totReturn=round((totReturn-1)*100,2)
print("This statistics is from "+str(df.index[0])+" up to now with "+str(numGains+numLosses)+" trades:")
print("SMAs used: "+str(SMAs))
print("Total return over "+str(numGains+numLosses)+ " trades: "+ str(totReturn)+"%" )
在这个例子中,这个策略建议了 2016 年初的 10 笔交易。这只股票的总回报率超过 850%。
为了计算平均收益和损失,我们可以简单地使用 if 语句来查看收益的数量是否大于零。如果是这样,平均增益可以通过增益除以增益数来计算。如果损失数量为正值,它还会计算平均损失。最大的收益和损失也是交易策略的一个吸引人的地方。
if (numGains>0):
avgGain=gains/numGains
maxReturn= str(max(percentChange))
else:
avgGain=0
maxReturn='unknown'if(numLosses>0):
avgLoss=losses/numLosses
maxLoss=str(min(percentChange))
ratioRR=str(-avgGain/avgLoss) # risk-reward ratio
else:
avgLoss=0
maxLoss='unknown'
ratioRR='inf'
print("Average Gain: "+ str(avgGain))
print("Average Loss: "+ str(avgLoss))
print("Max Return: "+ maxReturn)
print("Max Loss: "+ maxLoss)
print("Gain/loss ratio: "+ ratioRR)
在这个例子中,一支股票的平均收益是 62 美元,平均损失几乎是 8 美元。最大收益 153,最大亏损 16 美元。
击球率的计算方法是将收益数除以总交易数。对于 0 到 1 之间的位置范围,这可能是输入准确性的标志。1 是最准的蝙蝠。
if(numGains>0 or numLosses>0):
batAvg=numGains/(numGains+numLosses)
else:
batAvg=0
print("Batting Avg: "+ str(batAvg))
在这个例子中,击球率是 0.6。
5-绘图
虽然您可以使用 seaborn 或 matplotlib 库来绘制股票价格,但是 mplfinance 库是专门为绘制股票价格而设计的。它的函数接受各种属性,如图形大小、价格绘图类型(直线、蜡烛线等)和移动平均线。
mpf.plot(df, type = 'ohlc',figratio=(16,6),
mav=(short_sma,long_sma),
volume=True, title= str(stock),
style='default')
结论
使用 python 和其他库,我们能够提取历史股票价格数据,并检查数据上的各种策略。均线策略是一个简单的概念,基于短期和长期均线的价格趋势以及它们之间的相对位置。在这项工作中,我们展示了使用 for 循环和 if 语句方法,我们可以很容易地在历史数据集上检查这种策略。
如果您有问题或需要更多的澄清,请随时与我联系。
声明:这篇文章不是财务建议。它有教育目的。
食品安全中的数据科学
MDX 食品安全黑客马拉松
大卫·坎特利在 Unsplash 上拍摄的照片
这个知识库是我提交给迪拜米德尔塞克斯大学组织的食品安全黑客马拉松的一部分。那里…
github.com](https://github.com/aastha12/MDX-Food-Safety-Hackathon)
介绍
每年,世界上几乎十分之一的人因食用受污染的食物而生病。不安全的食品对每个人都构成了全球性的健康威胁,尤其是婴儿、幼儿、孕妇、老人和有潜在疾病的人。食品安全的重要性可以从以下事实中得到理解:食源性疾病给卫生保健系统带来压力,损害国民经济、旅游业和贸易,从而阻碍社会经济发展。不安全的食物造成了疾病和营养不良的恶性循环。因此,很明显,食品安全、营养和可持续经济发展是密不可分的。对于我们来说,改善当前的食品安全措施变得至关重要,不仅可以减少食源性疾病,还可以改善经济和社会背景。
为了参与改善当前的食品安全措施,米德尔塞克斯大学与 RUBICS Smart Solutions、DataCon Dubai 2020 和 Beinex 合作组织了“食品安全分析黑客马拉松”,该黑客马拉松的目标是开放的,但也给了我们一个发挥创造力的机会,提出创新和可持续的解决方案来改善食品安全措施。
目录
数据
作为黑客马拉松的一部分,我们获得了 10 个 csv 文件:
- 警报级别
- 属性
- 日期
- 设备
- 门
- 组
- 位置
- 阅读
- 服务
- 存储单元
“Reading”文件有 200 多万行,包含主数据集,而其他文件就像查找表一样。
我最初尝试使用 Dask(一个流行的并行计算库-https://dask.org/)来组合所有的表,并使用整个数据集进行分析,但是我无法这样做。Dask 能够合并所有的表,但由于内存问题,我无法将其转换为 pandas 数据框架,因此我无法处理整个数据集。
相反,我决定对数据集进行随机抽样(原始数据集的大约 10%)。我连接了所有的表,最终的数据集有 271,897 行。
然后,我继续清理数据集,删除任何空值,并确保所有列都是正确的格式。
以下是最终数据集的快照:
清理的数据
注意:最终数据集的列数比上面快照中描述的多。
方法学
我将首先执行探索性数据分析,以更好地理解我们的数据,并从数据中找到任何有趣的观察结果。然后,我将尝试执行逻辑回归来将案例分类为警报或不警报,并使用它来预测警报案例的概率。
我还将尝试使用 python 自动处理 WhatsApp 消息,这样无论何时我们的模型预测到一个警报案例,健康和安全主管都会首先得到通知。
我还在一个 web 应用程序上部署了逻辑回归模型,这样任何人都可以访问它(链接:预测预警案例 Web 应用程序)。最后,我将讨论分析的结果和推论。
第一部分:探索性数据分析
我将根据以下内容分析数据:
组名与警报名称类型
针对集团名称的案例分布
从上面的图中,我们可以看到最高的警报和警告案例是在冰柜和水果冷藏器中,最低的是在果汁冷藏器中。
存储名称与警报名称类型
根据存储名称分配案例
最高警戒级别的案例(左图)在小冰箱、房间 4 和房间 2 中,而最高警告级别的案例(右图)在房间 3、房间 2 和房间 4 中
位置名称和服务名称
根据位置名称分配案例
根据服务名称分配案例
从左图中,我们可以推断出大多数警报和警告发生在储藏室。从右图中,我们可以推断出所有警报和警告案例都是由于违反最佳温度水平而发生的。
设备名称
根据设备名称分布病例
从左图中,我们可以看到最大警报案例来自 SF-冷却器、R4-冷冻机和 R2-冷冻机。从右边的图中,我们可以看到最大的警告案例来自 R3 冷冻机、R2 冷冻机和 R4 冷冻机。
警报类型与小时
每小时案件分布
从左边的图中,我们可以看到最高的警报案例是在上午 11 点到下午 4 点。从右边的图中,我们可以推断出最高的警告案例发生在上午 9-11 点和晚上 9-10 点。
警报类型与夜间
夜间病例分布
大多数警报和警告案例发生在白天,这可能是因为阿联酋白天的温度较高,而且冰柜在一天中会多次打开,从而降低冰柜中的温度,进而导致警告或警报案例。
警报类型与当月周
现在,让我们来看一下警报和警告案例在每月某周的分布情况。
按月周分布案例
一个月中警报案例几乎是不变的,但是接近月末时警报案例会下降。虽然在第一周警告案例较少,但随后开始增加,但接近月底时警告案例也会下降。有趣的是,警报和警告案例似乎在本月的最后一周下降。
案例类型与季度
预警和警告案例在年初(即第一季度)较少,在第三季度最多。
案例对比季度
预警案例 vs 值
预警案例分布对比值
当该值为-9.9 时,出现了最高的警报案例。进一步的调查显示,所有值为-9.9 的警报案例都发生在储藏室的冷冻室中,而-9.9 表示温度,这意味着最佳温度。没有得到满足。可能的情况是,该冷冻箱需要适当的维护,以确保冷冻箱内保持最佳温度。
第二部分:逻辑回归
我从数据集中注意到的一个缺点是,我们只能在警报案例发生后才能识别警报案例。但是,使用机器学习算法,您可以根据某些输入参数预测某个案例是否会成为警报案例。这种方法将帮助组织从分析过去的数据以了解发生了什么以及为什么会发生的思维模式转变为更加复杂和具有前瞻性思维的思维模式,在这种思维模式下,我们可以预测将会发生什么?这将有助于组织提前识别任何威胁。
为了实现这一点,我使用逻辑回归将案例分类为警报案例(1)或非警报案例(0)。该模型能够预测一个案例是否会成为警报,它还会告诉我们一个案例成为警报案例的概率,准确率为 97% 。
分类报告和混淆矩阵
分类报告
混淆矩阵
-精度是精度的度量,假设已经预测了类别标签。它由下式定义:精度= TP / (TP + FP)
——回忆是真阳性率。它被定义为:召回= TP / (TP + FN)
- F1 得分:F1 得分是精度和召回率的调和平均值,其中 F1 得分在 1 时达到最佳值(完美的精度和召回率),在 0 时最差。这是一个很好的方式来表明一个分类器具有良好的召回率和精确度。
最后,我们可以知道这个分类器的平均准确度是两个标签的 F1 分数的平均值,在我们的例子中是 0.97 (即 97% )。
第 3 部分:将警告案例自动化为 WhatsApp 消息
黑客马拉松直播( Youtube 黑客马拉松直播)中提到的一个关键问题是,工程师是监控案例的人,大多数时候他们不知道哪个案例需要紧急关注,因为他们不是食品健康和安全方面的专家。为了提高这个过程的效率,我认为如果健康&安全主管能够在 WhatsApp 上获得警报案例,那么我们可以减少任何延迟,这将是有帮助的。
因此,对于这个项目,我已经发送了我们的分类器已经预测到警报的案例,以及该案例成为警报案例的概率%。
我在这个项目中使用了 Twilio API。你可以在这里阅读更多信息- Twilio 文档。
为了这个项目,我已经把我的号码,我将发送的情况下,该案件的概率是一个警报是 100%。让我们在 WhatsApp 上发送通知,以便在实际警报发出之前立即采取行动。
WhatsApp 截图
从上面的截图可以看出,我收到了案例为警报案例的概率为 100%的案例的索引号。现在从上面的截图中,你可以看到这个信息不是很丰富,但是我们可以调整这个信息来包含更多的细节。
第 4 部分:将我们的模型部署为 web 应用程序
网络应用
为了让我们的项目被其他人实际使用,我们需要在应用程序上部署我们的模型。我们不能给组织中的每个人发送代码文件,并期望他们运行它并解释结果。因此,我在一个 web 应用程序上部署了逻辑回归模型(link:Predict Alert Cases Web App)。该应用程序的设计不是很美观,也不是用户友好的,因为 css 不是我的专业知识,但该应用程序功能齐全,可以用来预测一个案例是否会成为警报案例。显然,如果这要在一个组织中实现,我们将不得不对它进行一点调整,使它对用户更加友好。
结果和讨论
从我们的分析中,我们注意到最高的警报和警告案例发生在冷冻和水果冷藏组。
我们还注意到,警报级别最高的案例出现在小冰箱、房间 4 和房间 2 的存储单元中,而警报级别最高的案例出现在房间 3、房间 2 和房间 4 的存储单元中。这表明【T12 号房& 4 号存储单元可能存在一些技术或维护困难,因此我们看到了大量的警报和警告案例。
我们还推断,所有警报和警告案例都是由于最佳温度水平的突破而发生的。
大多数警报和警告案例发生在白天,这可能是因为阿联酋白天的温度较高,而且冰柜在一天中会被打开多次,从而降低冰柜中的温度,进而导致警告或警报案例。
一个月中警报案例几乎是恒定的,但是接近月末时警报案例下降。虽然在第一周警告案例较少,但随后开始增加,但接近月底时警告案例也会下降。有趣的是— 警报和警告案例似乎在本月最后一周下降。
最高警报案例发生在值为-9.9 时。进一步的调查显示,所有值为-9.9 的警报案例都发生在储藏室的冷冻室中,而-9.9 表示温度,这意味着最佳温度。没有得到满足。可能的情况是,该冷冻箱需要适当的维护,以确保冷冻箱内保持最佳温度。
现在来看我们的逻辑回归模型,我们能够以 97%的准确率预测一个案例是否会成为警报案例,以及它成为警报案例的概率。该模型将帮助组织在警报案例实际发生之前识别任何警报案例,并允许他们使用其数据将其转化为未来的见解。
我们还能够通过 WhatsApp 自动发送最有可能(即 100%概率)的警报案例,以减少延迟。
最后,我们还能够将我们的模型部署到一个 web 应用程序中,这样每个人都可以访问它。
高增长公司中的数据科学
苹果 | 谷歌 | SPOTIFY | 其他
Solmaz Shahalizadeh 在 TDS 播客
背景图片由萨曼莎·加德斯拍摄
编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。可以听下面的播客:
在过去的几个月里,我看到越来越多的主题之一是数据科学中产品思维的重要性。随着新的和有抱负的数据科学家深化他们的技术技能,并投入无数时间在 leetcode 上做练习题,产品思维已经成为许多申请人的一个非常严重的盲点。随着新工具的出现,这个盲点变得越来越重要,这些新工具抽象出了大量过去数据科学的日常工作,让数据科学家有更多时间发展主题专业知识,并专注于产品等式的商业价值方面。
如果有一家公司因在数据科学领域引领以产品为中心的思维而闻名,那就是 Shopify。如果 Shopify 有一个人在以产品为中心的数据科学方面花了最多时间,那就是 Shopify 的数据科学和工程主管 Solmaz Shahalizadeh。Solmaz 有着令人印象深刻的职业生涯,包括在 2013 年 IPO 前加入 Shopify,并见证了 Shopify 数据科学团队从少数几个人成长为一个关键的组织范围的努力,成千上万的商家今天依靠它谋生。
Solmaz 非常友好地加入了我的最新一集《走向数据科学》播客。以下是我最喜欢的一些外卖食品:
- Shopify 在以产品为中心的数据科学领域取得成功的关键之一是其数据科学角色的垂直整合。在 Shopify 中,一名数据科学家不仅负责数据清理和模型构建,还负责将机器学习部署到生产中的每一步。在某种程度上,Shopify 的数据科学家是完全的产品所有者 Solmaz 认为这很重要,可以确保他们可以将他们正在处理的整个问题保存在 RAM 中,并利用从内外了解您的堆栈中获得的所有见解。
- 复杂的模型并不总是最好的解决方案。事实上,他们通常不是。Solmaz 指出,在预测的可靠性非常重要的情况下(在 Shopify 就是如此,商家的生计依赖于此),简单且易于解释的模型通常是最好的。这并不是说 Shopify 不做深度学习或前沿 ML——但这不是他们的首选。毕竟,当一个简单的模型——甚至一个基于规则的系统——就足够好的时候,为什么要建立一个有许多活动部件的花哨模型呢?
- Solmaz 鼓励有抱负的数据科学家建立他们关心的项目,而不是通过 Kaggle grinder。如果你处于学习过程的早期阶段,股票数据集是不错的,但只有当你进入你关心的数据集(最好是你自己收集的数据集)时,你才能展示你构建有用东西的能力,而不是 AUC 分数高但没有明确商业价值的模型。
- Shopify 正在招人😀你可以访问他们的职业页面这里。
查看 Shopify 的数据科学与工程博客,或者点击这里在 Twitter 上关注他们。
你也可以在 Twitter 上关注 Solmaz 这里,在这里关注我。
心理健康中的数据科学
变更数据
机遇和进步
医疗保健数据科学几年来一直在快速发展,尽管使用数据来理解和解决心理健康问题已经落后于该领域的其他部分。然而,在许多方面,精神健康完全适合数据科学方法:美国精神疾病的负担是巨大的,往往没有得到解决,也没有被完全理解,这为数据驱动的研究和解决方案创造了巨大的潜力。在这篇文章中,我将强调将数据科学方法应用于精神健康问题的重要性,浏览代表该领域重要进展的 3 个案例研究,并描述我自己的一个使用谷歌搜索数据评估自杀行为的研究项目。
医疗保健中的数据科学
随着新数据源和分析技术的出现,数据科学在医疗保健领域的地位越来越重要。尽管几十年来一直是医疗保健不可或缺的一部分的学术研究和临床试验与“数据科学”新保护伞下的工作之间的界限有些模糊,但不可否认的是,新技术和数据源在医疗保健中的使用已经蓬勃发展。
除了传统的医疗保健数据来源,如患者病历、手写医生笔记、账单和索赔数据以及来自临床试验的数据,研究人员和数据科学家现在还可以访问基因组数据、电子病历(EMR)数据、来自可穿戴和移动设备的数据,以及代表社交媒体和互联网活动的数据。计算机化的发展和自然语言处理等分析技术的发展释放了现有数据源的新潜力,通过使用新数据源本身以及与这些现有数据源相结合,可以收集更多的见解。
数据科学在医疗保健领域最突出的三个应用如下:
- 用于诊断目的的图像识别(例如,恶性肿瘤和器官异常)
- 使用基因组学数据(如美国国立卫生研究院的 1000 个基因组项目)的精准医疗发展,倾向于关注心脏病和糖尿病等慢性病
- 医院运营分析,通常看起来像标准的业务分析(例如,预测急诊室何时需要更多员工)
这三个例子代表了医疗保健数据科学的重要发展,但也证明了医疗保健数据科学通常专注于慢性疾病和医疗保健的业务方面。虽然有了很大的进步,但是心理健康方面的数据科学却落后了。
心理健康问题的负担
在美国,精神疾病的负担是非同寻常的。大约五分之一的美国人患有精神疾病,在年轻人、女性、LGBTQIA+人群和某些少数群体中,这一比例甚至更高。在 10 至 34 岁的人群中,自杀是第二大死因。
图片来自:https://www . nimh . NIH . gov/health/statistics/mental-disease . shtml
不幸的是,大多数有心理健康问题的人没有得到适当的治疗。2018 年,只有 43.3%患有精神疾病的成年人接受了治疗。在那些最终接受治疗的人中,症状出现和治疗开始之间的平均延迟是惊人的 11 年。虽然这种治疗差距有几个促成因素,但无法获得精神卫生服务提供者是最重要的因素之一。大约 40%的美国人生活在指定的精神卫生保健短缺地区,低收入美国人无法获得许多精神卫生专业人员,因为他们没有参加保险计划。
图片由 rhi hub(https://www.ruralhealthinfo.org/charts/7)许可使用,数据来自健康资源和服务管理局(HRSA)。
精神疾病得不到治疗会给患者及其社区带来巨大的后果。有心理健康问题的人更有可能出现心血管和代谢疾病等身体状况,辍学,失业,无家可归,并被监禁。
数据科学如何提供帮助
很明显,在美国有巨大的心理健康需求没有得到满足。数据科学可以通过两种主要方式帮助弥合这一差距。
首先,数据科学可以帮助我们更好地理解心理健康问题。谁在经历心理疾病?哪些体征和症状是重要的诊断线索?是什么让一个人更有可能参与并坚持治疗?不同人群的心理健康问题是什么样的?
能够回答这些问题的数据越来越多,或者至少有可能收集。来自可穿戴设备的数据可以用于识别与精神疾病相关的生理标记,社交媒体和互联网活动可以提供对精神健康行为方面的洞察,医生和治疗师的笔记可以越来越多地使用自然语言处理进行分析,大脑扫描可能是诊断图像识别的理想候选。
其次,数据科学可以帮助我们更好地理解和有效地实施心理健康问题的治疗。许多患者在找到适合自己的方法之前,尝试了许多治疗师、治疗技术和药物。考虑到大多数患者在接受任何护理之前要等待多长时间,以及与尝试多种选择相关的成本和情感困难,这种寻找适当护理的广泛过程尤其成问题。因此,重要的是能够评估一种给定的治疗方法(正式的精神病治疗或其他)是否有效。如果是,它为谁工作?怎样才能让更多人接触到?
这些问题中的一部分可以通过标准的临床试验来解决,尽管它们经常受到小样本和非代表性样本的限制。评估自我指导治疗应用程序和聊天服务等新技术的分析对于评估这些干预措施的质量也至关重要。最终,基因组学和精确医学的进步可能会帮助患者找到一种比标准方法更有效地满足他们个人需求的治疗方法。此外,基于机器学习的聊天机器人和其他相关的人工智能仍处于起步阶段,但已经显示出作为最终治疗替代方案的巨大潜力。
使用数据科学改善精神卫生保健状况的机会很多,但更多的公司、提供商和个人必须推动这些可能性成为现实。
挑战 s
在推进心理健康数据科学的道路上,有几个值得注意的挑战,尽管它们远非不可克服。
精神健康问题仍然被高度污名化,这既提出了资金问题,也提出了数据问题。尽管对精神健康的兴趣和意识肯定在增长,但对癌症这样的疾病仍然没有广泛的支持。此外,相对于与其他健康问题相关的数据,患者可能更关心如何使用代表其精神健康问题的数据。对许多人来说,考虑正在分析的最近一次膝盖手术的医生笔记,可能比考虑最近一次治疗会议的笔记更容易接受。与治疗师相比,患者也更容易对他们的骨科医生诚实,所以这些治疗记录实际上可能是质量较低的数据。这种耻辱也有助于保持心理健康相关数据的私密性和安全性。
此外,我们现有的治疗和诊断能力还有很大的改进空间。虽然随着时间的推移,数据科学肯定可以帮助解决其中的一些问题,但使用数据来诊断我们完全了解的疾病要比我们不了解的疾病容易得多。如果有明确的生物标志物或其他指标可以用来衡量治疗效果,那么评估治疗也更容易。许多研究现在依赖于患者的自我报告,这可能无法真正捕捉特定治疗的影响。
最后,仍然很难获得好的数据。当然,有用的数据比以往任何时候都多,而且有很多事情要做,但维护和共享精神卫生保健相关数据的基础设施往往很差。HIPAA 法律通常也会给获取任何医疗保健数据带来一些挑战。使数据质量进一步复杂化的是,大多数人没有接受精神健康问题的治疗,这意味着任何治疗数据都代表接受治疗的人口,而不是需要治疗的人口。
个案研究
尽管心理健康领域的数据科学不如医疗保健其他领域的数据科学发达,但这一领域已经开始了极其重要和令人难以置信的工作。下面,我将描述 3 个有前景的案例研究,它们展示了数据科学在彻底改变美国精神卫生保健状况方面的巨大潜力。
案例研究 1:危机文本行
危机短信热线由训练有素的志愿者通过短信提供免费的全天候危机咨询。自 2013 年热线开通以来,这些志愿辅导员已经处理了超过 500 万次短信对话。作为一家技术公司,Crisis Text Line 认为使用他们的数据来改善他们提供的护理并增强我们对心理健康问题的更广泛理解非常重要。
有时,需要危机干预的短信发送者数量超过了可用的志愿者。虽然这种情况对任何需要帮助的人来说都是不理想的,但危机短信热线知道,有些人比其他人更迫切需要帮助。该公司使用机器学习模型来识别表明自杀风险较高的单词和表情符号,使他们能够将最高风险的短信发送者移到队列的前面。这些模型使用了导致积极救援(即使用紧急服务)的文本对话数据,这是一种新的非常重要的数据。众所周知,预测自杀企图和自杀死亡是非常困难的,该领域缺乏有效的筛选工具或其他有效的预测机制。因此,具有通过文本消息行为预测这些事件的能力,具有最终以更广泛的方式解决这种诊断弱点的巨大潜力。
这些机器学习模型产生的发现强调了在心理健康中使用数据驱动方法的重要性,因为较高自杀风险的指标不是特别直观。事实上,使用“Advil”和“Ibuprofen”这两个词比使用“cut”、“die”、“suicide”或“kill”这两个词对自杀企图的预测性要高 14 倍,而哭丧着脸的表情符号比“自杀”这两个词的预测性高 11 倍依靠数据而非直觉,危机短信热线能够更准确、更高效地识别处于严重危机中的人员,并更迅速地提供援助。
除了开发这种风险检测工具,危机文本热线还致力于将他们的数据用于精神健康的整体改善。除了发布从他们的数据中收集的见解的常规博客之外,危机文本热线还拥有一个根据他们的数据构建的互动仪表板,允许用户探索美国各地情绪困扰的模式。用户可以按主题和地理区域进行过滤,以探索共同出现的问题、地理差异、时间序列模式以及描述特定问题的常用语言:
www.crisistrends.org 的屏幕截图
危机短信热线也采取措施,确保短信发送者与他们分享的敏感数据的安全。发短信的人可以随时要求删除他们的数据,一个内置的算法删除个人身份信息,比如姓名、电话号码和地点。
案例研究 2:三维聊天机器人埃莉
艾莉在行动:https://www.youtube.com/watch?v=ejczMs6b1Q4
上图中的“埃莉”是由南加州大学创新技术研究所的研究人员创造的。该项目由国防高级研究计划局资助,目标是解决退伍军人中的 PTSD 问题。
艾莉的创造者基于她的身体语言和言语模式来自描述现实生活中心理健康专家的许多小时的录制视频,她允许病人比他们在真人面前更开放和诚实。如果患者害怕被评判或识别,他们通常不愿意透露信息,这在退伍军人中尤其如此,因为在这个群体中,精神疾病被视为一种强烈的耻辱。
Ellie 不能取代传统治疗,而是被设计成一个“数据收集器”来改进诊断过程。当患者对 Ellie 说话时,会收集关于他们语速和回答问题前停顿时间的数据,以及患者脸上 66 个独特点的运动和位置。这一过程表明,患有创伤后应激障碍的患者比没有创伤后应激障碍的患者更频繁地触摸他们的头和手,如果没有埃莉收集和分析的大量数据,这一诊断线索可能会被完全遗漏。事实上,在一项针对阿富汗患者的研究中,埃莉发现了比标准的退伍军人部署后健康评估更多的 PTSD 症状。
目前,Ellie 是一个非常有价值的、数据驱动的治疗支持工具。然而,这一模型的成功提供了希望,即类似人工智能的进步可能能够为传统疗法提供替代方案。这种技术可以增加获得护理的机会,并解决美国如此普遍的治疗短缺问题。
案例研究 3:四方健康
Quartet Health 是一家总部位于纽约的心理健康科技公司,致力于通过四管齐下的综合方法提高心理健康护理的质量和可及性。
他们模式的第一部分包括与需要精神保健的人建立联系。这可以通过提供者转介、直接患者注册和对可能需要护理的人进行筛查来实现。这种创新的筛选过程是数据科学的切入点,因为机器学习模型被应用于患者的病史和行为模式,以寻找未诊断的精神健康问题的迹象。这种分析策略导致了几项有趣的发现,例如,一名患者反复测试心脏问题呈阴性表明他可能患有焦虑症。
接下来,识别出的病人被匹配到适当的护理形式。在选择护理类型时,患者的个人偏好、临床适应症和保险范围都要考虑在内。可能性包括传统疗法和精神护理,以及在线项目。
四方模型的第三个方面与该公司使用数据驱动的决策来改善精神卫生保健的整体方法相一致。一旦患者被纳入护理,这种护理的质量是由四方监测随着时间的推移。通过持续收集和分析关于患者情况的数据,Quartet 可以快速识别治疗方法何时不起作用,并调整给定患者正在接受的护理。
最后,四方确保在整个过程中支持登记的患者。转诊提供者通常不会收到任何有关其患者精神健康治疗经验的更新,但 Quartet 将转诊提供者和精神健康护理提供者联系起来,以确保这些至关重要的利益相关者之间的沟通。四方还通过他们的“关爱导航员”团队为那些需要帮助的人提供额外的支持
这种数据驱动的模式已经被证明是有效的,并且正在被保险公司采用。Quartet 已经能够识别在困难的诊断或治疗后可能有心理健康问题的患者,已经将一些患者的急诊次数减少了 15-25 %,并且与传统方法相比,在更短的时间内将更多的患者与心理健康护理联系起来。
使用谷歌搜索数据理解新冠肺炎对自杀的影响
我的最后一个例子来自一项我个人参与的研究。随着新冠肺炎在 3 月和 4 月迅速在美国蔓延,我和我的团队开始好奇这种病毒以及用于遏制它的封锁可能对自杀倾向和自杀风险因素产生的影响。
我们推测疫情可能影响以下自杀风险因素:财务紧张和失业、孤独、焦虑、悲伤和压力水平增加。出于几个原因,我们决定使用谷歌搜索(通过谷歌趋势数据)来评估这些风险因素。首先,谷歌趋势数据在 4 月份可以立即访问,并且不依赖于被新冠肺炎患者淹没的医疗系统。此外,有重要的前期研究建立了谷歌搜索行为和自杀行为之间的联系。
我们分析了代表四个领域的 18 个查询:
- **自杀特定查询:**自杀小队,自杀,自杀,自杀方法,自杀,快速/简单/快速/无痛自杀
- **求助查询:**危机短信热线、全国自杀预防热线+全国自杀热线、灾难求助热线+灾难求助热线
- **一般心理健康查询:**抑郁、惊恐发作、焦虑
- **财务困难查询:**失业、失业、下岗、休假、贷款
- **未分类查询:**孤独
我们使用了从 2020 年 3 月 1 日到 2020 年 4 月 18 日的每周搜索数据,出于这项研究的目的,我们将这一时期定义为早期疫情时期。自回归综合移动平均(ARIMA)模型根据一年的数据(2019 年 3 月 3 日至 2020 年 2 月 29 日)进行训练,并用于预测疫情早期的每周相对搜索量。然后计算观察值和预期值之间的百分比差异:
对于所有包含的查询,95% CIs 的百分比差异。图片作者。
具有 95% CIs 的百分比差异,限于具有较小百分比差异的查询,用于可视化目的。图片作者。
从上文可以看出,代表经济困难(自杀的一个已知风险因素)和灾难求助热线(在疫情早期得到广泛推广)的查询大幅增加。财务困难查询的提升尤其令人担忧,一项研究甚至发现搜索“下岗”是延迟 2 个月的实际自杀的最强预测因素。
当我们放大那些与金融查询的变化相比相形见绌的查询时,我们看到与自杀明确相关的搜索实际上适度减少了。这可能是因为在疫情的早期阶段,我们都在一起努力应对眼前的压力,形成了国家的社区意识。这种模式是有先例的,因为在国家灾难(如 911 袭击)后,自杀率下降。然而,不幸的是,在 1918 年的流感和 2003 年的非典爆发后,自杀死亡人数出现了长期增长,我们预计,如果不采取适当的干预措施,自杀和自杀死亡人数可能会出现长期增长。
像我们这样的研究很重要,因为它们已经被用来吸引注意力和资源来研究新冠肺炎对精神健康的影响。我们的研究发表在 2020 年 7 月 24 日的《PLOS 一号》上,可以在这里找到。
结论
尽管心理健康领域将从数据科学使用的增加中受益匪浅,但该领域的发展落后于医疗保健其他领域。也就是说,一些组织已经取得了令人振奋的进步,如危机短信热线、南加州大学创新技术研究所和四方健康组织。这些项目的成功强调了数据科学应用在心理健康中的重要性和潜在益处。
生产中的数据科学:构建 Flask APIs 以最佳实践服务 ML 模型
由 Jay Kachhadia 与 Canva 一起建造
在我之前关于全栈数据科学:下一代数据科学家群体的博客获得大量关注后,我决定开始一个关于生产中的数据科学的博客系列。本系列将介绍技术栈和技术的基础,您可以熟悉这些技术,以面对真正的数据科学行业,例如机器学习、数据工程和 ML 基础设施。这将是一个如何通过部署你的模型和用行业中使用的最佳实践创建 ml 管道来把你的学术项目带到下一个层次的演练。
生产中的数据科学
听起来可能很简单,但这与在行业中为你的副业项目或学术项目实践数据科学是非常不同的。它在代码复杂性、代码组织和数据科学项目管理方面要求更多。在这个系列的第一部分中,我将带你们了解如何通过构建 API 来服务于 ML 模型,以便你们的内部团队可以使用它,或者你们组织之外的任何人都可以使用它。
在课堂上,我们通常会从 Kaggle 获取数据集,对其进行预处理,进行探索性分析,并建立模型来预测一些或其他事情。现在,让我们进入下一个层次,将您构建的模型和对数据的预处理打包到 REST API 中。嗯,什么是 REST API?等等,我很快会详细说明一切。让我们从定义我们将使用什么和它背后的技术开始。
REST APIs
API 是应用程序编程接口,这基本上意味着它是一个计算接口,帮助您与多个软件中介进行交互。什么是休息?REST 是代表性的状态转移,是一种软件架构风格。让我用一个简单的图表向你们展示我所说的:
图片来自 astera.com
因此,在我们的情况下,客户端可以通过使用我们构建的模型与您的系统进行交互以获得预测,并且他们不需要我们构建的任何库或模型。如果你参加面试或申请高等教育,展示你的项目会变得更加容易。这是他们可以看到的工作,而不是写在你简历上的三行狗屎之类的东西。
在这里,我们将构建服务于我们的机器学习模型的 API,我们将在 FLASK 中完成所有这些工作。Flask 也是 python 的一个 web 框架。你一定听说过业内的两个大公司,Flask 和 Django。Flask 和 Django 都是令人惊叹的 python web 框架,但是在构建 API 时,Flask 速度非常快,因为它不太复杂,设计也很简单。Wohoo!因此,我们将再次经历行业中普遍使用的一些东西。在不浪费更多时间的情况下,让我们开始研究一些代码,并为 ML 模型构建我们的 API。
设置您的环境
第一步总是设置您自己的项目环境,这样您就可以将您的项目库及其版本与本地 python 环境隔离开来。有两种方法可以专门为你的项目设置 python 环境: Virtualenv 和 Conda 。只是为了保持一致,我将在整个项目中使用 Python 3.8.3,但你可以使用任何版本,这应该没问题。
用 pip 和 virtualenv 创建虚拟环境
用公寓创建虚拟环境
在您的终端中执行上述任何命令后。您将处于项目自己的虚拟环境中。如果你想在虚拟环境中安装任何东西,它就像普通的 pip 安装一样简单。在您从事任何项目时,创建虚拟环境始终是业内的标准做法。
一旦你进入虚拟环境,使用来自 github repo 的 requirements . txt:https://github.com/jkachhadia/ML-API
将机器学习模型作为 API。在 GitHub 上创建一个帐户,为 jkachhadia/ML-API 开发做贡献。
github.com](https://github.com/jkachhadia/ML-API)
请确保将 requirements.txt 文件从 repo 复制到您的项目文件夹中,因为我们稍后将使用它,我还将向您展示如何创建您自己的 requirements.txt 文件。将文件复制到项目文件夹并确保您处于刚刚创建的环境中之后,在终端中运行以下命令来安装项目所需的所有依赖项。
现在,一切都准备好了。
构建您的 ML 模型并保存它
对于这个项目,我们的主要目标是以 API 的形式打包和部署我们构建的 ML 模型。因此,我们将使用 Kaggle 的初始数据集和一个带有特征工程的基本逻辑回归模型来构建我们的模型。如果你想知道我是如何构建基本模型的。代码可以在这个 Github repo 上找到。你可以在 model_prep.ipynb ipython 笔记本中找到代码(假设你熟悉 ipython 笔记本)。这段代码的灵感来自于我发现的一个 kaggle 内核,因为这不是这里的主要目标。
我们将使用 pickle 库来保存模型。反过来,您的模型是一个 python 对象,包含所有的方程和超参数,可以用 pickle 序列化/转换成字节流。
保存模型的示例代码
上述代码也可以在 model_prep 笔记本中找到。
有趣的部分——Flask API 创建和文件夹管理
我们现在将创建一个具有最佳实践的 Flask API。什么最佳实践?例如,如何创建一个干净的代码,可以交付到生产环境中,并且在出现任何问题时易于调试。
因此,首先,我们将创建一个 helper_functions python 脚本,其中包含我们需要的所有预处理模块。同样,这是您将在 model_prep 笔记本中找到的相同的预处理代码,但是我们用它来创建函数,以便在其他任何地方重用。
helper_functions.py 的代码
现在,我们不会硬编码我们将在最终 API 脚本中使用的变量或名称。因此,我们可以创建一个名为 configs.py 的单独的 python 文件,出于安全目的,它将基本上存储我们的所有变量。
让我们开始构建我们的 API。我们将从一个简单的开始:只是 hello world 的一个新版本。创建一个名为 app.py 的新文件,让我们导入启动和运行 API 所需的所有库。
我们已经导入了上述代码中的所有库,以及所有的帮助函数和变量配置。现在让我们初始化一个 flask 应用程序实例。
首先,让我们编写一个简单的 flask 类型 hello world,并为我们的 flask 应用程序创建一个新的路由。路由通常是功能支持的 URL。
恭喜你。你写了你的第一个烧瓶路线。现在让我们通过运行我们用 Flask 启动的 app 对象来运行它。
是啊!我们差不多完成了我们的第一次迷你演出。让我们在本地运行这个。打开您的终端并运行 app.py(确保您位于 app.py 所在的项目文件夹中,并且您位于我们之前创建的虚拟环境中)
呜哇!我们的 Flask 应用程序应该运行在 http://127.0.0.1:5000 上。如果你用浏览器去那个网址。我们应该得到我们在第一个路由中添加的消息:“你好,来自泰坦尼克号数据的 ML API!”。超级爽!
让我们开始构建我们的新路线,这将是我们展示 ML 模型的方式。
在上面添加了预测/的新路径中,如果有人向 flask 应用程序的 URL 发送 get 请求以及 JSON 形式的原始数据,我们将按照创建模型的方式预处理数据,获取预测并发回预测结果。
request.get_json()将基本上为我们提供与 get 请求一起发送的 json 数据。我们将数据转换成数据帧,使用我们辅助函数 preprocess()来预处理数据帧,使用配置文件中的 model_name 和列名来加载带有 pickle 的模型,并对切片的数据帧进行预测。
做出预测后,我们将创建一个包含预测和预测标签元数据的响应字典,最后使用 jsonify 将其转换为 JSON,并将 JSON 返回。记住 200 是因为它是成功的。编辑后保存 app.py 后,仍在运行的 flask 应用程序将自动更新其后端以合并新的路线。
在本地测试我们的 API
为了在本地测试我们的 API,我们将只编写一个小的 ipython 笔记本,或者您可以在 github repo 中使用一个名为 testapi.ipynb 的笔记本
如果您在 python 终端或 ipython 笔记本中运行上述代码,您会发现您的 API 工作起来非常神奇。万岁!您已经成功地公开了您的模型,但是在本地:(
在 Heroku 上部署 ML API
Heroku 是一个云平台,帮助你在他们的云上部署后端应用。是的,我们将在云中部署我们的 ML 模型 API。
让我们开始吧。在 heroku.com 的上创建您的账户。一旦你这样做,并前往仪表板,你将不得不创建一个新的应用程序。
Heroku 仪表板上部
你点击创建新的应用程序,并相应地命名为我命名为’ mlapititanic ’
我的不可用,因为我已经创建了它:p
厉害!现在,你可以点击你的应用程序,进入设置,将 python 添加到你的 buildpack 部分。
你也可以通过安装 Heroku CLI 来实现这一点,我们最终将不得不这样做来部署我们的应用。
安装 CLI 后,您还可以从命令行创建一个应用程序,如下所示:
我喜欢 CLI 方式,因为我已经是一个 Ubuntu/Mac 用户 5 年了。
现在,我们将向该文件夹添加两个文件,即 Procfile 和 runtime.txt。
那是我的版本,但是你的可以不同
Procfile 基本上会用 gunicorn 运行你的应用。确保您的虚拟环境中安装了该软件。现在,正如我告诉你的,我们将讨论如何创建你自己的 requirements.txt 文件。
这基本上会将您的所有应用程序/虚拟环境的依赖项转储到 requirements.txt 文件中。
现在,如果你去 heroku 的部署部分,他们有关于如何部署的非常清楚的说明,但我会把它们放在下面。
这些命令会将您的代码推送到 heroku cloud,并使用依赖项构建您的 flask 应用程序。恭喜你!您已经将 ML API 部署到云/生产中。
现在你可以进入 https:// .herokuapp.com/
现在我们将测试部署的 API!
如果它正在运行。你都准备好了!呜哇!
结论
因此,我们用行业中使用的最佳实践构建了我们自己的 ML 模型 API,这可以用在你的其他项目中,或者你可以在你的简历中展示它,而不仅仅是像以前那样填写。这是真实的,互动的,证明你真的建立了一些东西。
在 gmail dot com 的[我的名字][我的名字]上提问,或者在 LinkedIn 的上联系我们。
生产中的数据科学:使用 Dash 为您的数据科学项目快速构建交互式用户界面
这篇博客讲述了如何使用机器学习创建 dash 应用程序,以及如何将您的数据科学项目部署到云中。
封面由 Jay Kachhadia 和 Canva 共同设计
在我之前的一篇关于全栈数据科学:下一代数据科学家群体的博客获得大量关注后,我决定开始一个关于生产中的数据科学的博客系列。本系列将介绍技术栈和技术的基础,您可以熟悉这些技术,以面对真正的数据科学行业,例如机器学习、数据工程和 ML 基础设施。这将是一个如何通过部署你的模型和用行业中使用的最佳实践创建 ml 管道来把你的学术项目带到下一个层次的演练。这是本系列的第二部分,你可以在这里看一下第一部分:生产中的数据科学:构建 Flask APIs 来服务具有最佳实践的 ML 模型
这篇博客将讲述如何快速构建使用机器学习的交互式 web 应用程序,以及如何将这些应用程序部署到 Heroku cloud 中。简历上任何可以展示的东西都比仅仅是文本的东西增加了 10 倍的价值。
Dash:构建数据科学应用的 web 框架
Dash 是由 Plotly 专门为数据科学和人工智能应用而构建的开源 web 框架。通常需要前端、后端和 DevOps 团队的全栈应用程序可以由数据科学家使用 Dash 在几个小时内完成构建和部署。是啊!你可以用 Python 做任何事情,这就是 beautiful❤.
我们将从头开始建造这整个东西(用 Canva 创建)
Dash 构建在 Flask、Plotly.js、React 和 React Js 之上,但在本练习中,我们将用 python 编写大部分代码,并嵌入一些 html 和 css 元素。
设置您的环境
第一步通常是建立您自己的项目环境,这样您就可以将您的项目库及其版本与本地 python 环境隔离开来。有两种方法可以专门为您的项目设置 python 环境: Virtualenv 和 Conda 。只是为了保持一致,我将在整个项目中使用 Python 3.7.3,但你可以使用任何版本,这应该没问题。
用 pip 和 virtualenv 创建虚拟环境
用 Conda 创建虚拟环境
在您的终端中执行上述任何命令后。您将处于项目自己的虚拟环境中。如果你想在虚拟环境中安装任何东西,它就像普通的 pip 安装一样简单。在您从事任何项目时,创建虚拟环境始终是业内的标准做法。
进入虚拟环境后,使用 app 文件夹中 github repo 的 requirements . txt:https://github . com/jkachhadia/IPL-prediction/tree/master/app
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/jkachhadia/ipl-prediction/tree/master/app)
现在,一切都准备好了!
预处理和构建模型
让我们让这变得更有趣一点,所以我们将为板球比赛建立预测模型,我们将使用来自 https://www.kaggle.com/nowke9/ipldata 超级联赛(IPL)上的 Kaggle:的数据集。IPL 时钟达到 4.62 亿,第 12 季电视观看时间为 3380 亿分钟。
逐球印度超级联赛(IPL)板球数据集
www.kaggle.com](https://www.kaggle.com/nowke9/ipldata)
如果你已经克隆了上面分享的 repo,这里有一个 ipython 笔记本,向你展示如何预处理一个球接一个球的数据和匹配数据。这有点复杂,所以我不会在这里解释预处理步骤,因为这不是我们的主要目的。该笔记本产生 6 个预处理数据集,我们稍后将在 Dash 应用程序中使用这些数据集。我们将以这样一种方式构建应用程序,任何用户都可以调整模型参数来获得所需的预测。我们将建立 3 个模型:分数预测器,第一局后的获胜概率预测器,以及还剩 10 局时的获胜概率预测器。
构建我们的 Dash 应用程序
我们现在将开始处理一些代码来构建我们的 dash 应用程序。让我们创建一个名为 app.py 的新文件,并从导入我们需要的库开始。
现在让我们声明我们将在多个函数中使用的所有全局变量。
我们将导入所有预处理的训练数据,以节省我们的应用程序在预处理上的时间。所有的预处理步骤都在 ipython 笔记本中。
现在,让我们用一个外部 css 样式表启动我们的 dash 应用程序(样式表部分不是必需的)
设计应用布局
我们现在将使用 dash 的内部 html 组件定义来设计 web 应用程序的外观。有一些 html 和 css 知识是很好的,但不是必要的,因为它并不太复杂。
我们想要设计的布局
这是我们想要设计的 webapp 的布局,在 UI 设计方面非常简单。我们必须在 dash 布局中定义 UI 中的每一个元素。我们必须指定每个元素的 id 和样式,以便能够控制和获取数据,并在后端进行处理。理解的一个好方法是阅读和编写下面的代码,并与上面的 UI 进行比较。
我们想让它完全动态,这样当随机森林或神经网络被选中时,我们就可以选择调整模型参数,否则看不到它们。因此,当下拉选项改变时,我们将使用回调来动态地改变 UI。
这六个回调将使参数设置的可见性完全动态化,并且非常容易,因为当算法的下拉列表发生变化时,只需要一些条件语句来检查值和设置属性。
为 ML 添加逻辑
现在,我们将进行有趣的部分,即制作动态 ML 组件,当我们更新特征或模型参数时,该组件将快速更新预测。当特性或参数组件发生变化时,我们将再次使用 dash 回调来更新页面的预测组件。
正如你在上面看到的,我们增加了 3 个回调来更新预测。现在您需要的只是一些运行服务器的代码。
是啊!我们差不多完成了我们的第一次迷你演出。让我们在本地运行这个。打开您的终端并运行 app.py(确保您位于 app.py 所在的项目文件夹中,并且您位于我们之前创建的虚拟环境中)
Wohoo!您的应用应该在 http://127.0.0.1:8050/ 上启动并运行!
在 Heroku 上部署 IPL 预测应用
Heroku 是一个云平台,帮助你在他们的云上部署后端应用。是的,我们将在云中部署我们的 dash 应用程序。
让我们开始吧。在 heroku.com 的上创建您的账户。一旦你这样做,并前往仪表板,你将不得不创建一个新的应用程序。
Heroku 仪表板上部
你点击创建新的应用程序,并相应地命名为我的命名为“iplpredict”
我的不可用,因为我已经创建了它:p
厉害!现在,你可以点击你的应用程序,进入设置,将 python 添加到你的 buildpack 部分。
你也可以通过安装 Heroku CLI 来实现这一点,我们最终将不得不这样做来部署我们的应用。
安装 CLI 后,您还可以从命令行创建一个应用程序,如下所示:
我喜欢 CLI 方式,因为我已经是一个 Ubuntu/Mac 用户 5 年了。
现在,我们将把两个文件 Procfile 和 runtime.txt 添加到 app 文件夹中。
Procfile
runtime.txt
Procfile 基本上会用 gunicorn 运行你的应用。确保您的虚拟环境中安装了该软件。现在,我们将介绍如何创建自己的 requirements.txt 文件。
这基本上会将您的所有应用程序/虚拟环境的依赖项转储到 requirements.txt 文件中。
现在,如果你去 heroku 的部署部分,他们有关于如何部署的非常清楚的说明,但我会把它们放在下面。
这些命令会将您的代码推送到 heroku cloud,并使用依赖项构建您的 flask 应用程序。恭喜你!您已经将 dash 应用部署到云/生产环境中。
现在你可以进入 https:// .herokuapp.com/。还有,你可以在这里查看我的 app 版本:http://iplpredict.herokuapp.com
如果它正在运行。你都准备好了!呜哇!
结论
因此,我们构建了我们自己的 dash web 应用程序,这可以用于您的其他项目,或者您可以在您的简历中展示它,而不仅仅是像以前一样填写您所做的内容。这是真实的,互动的,证明你真的建立了一些东西。Dash 还提供许多其他功能,比如构建实时可视化和仪表盘。
在 gmail dot com 的[myLastName][myFirstName]上提问,或者在 LinkedIn 的上联系我们。
你准备好成为数据科学家了吗?
学校与工作中的数据科学
伊万·班杜拉在 Unsplash 上的照片
3 年前,我毕业于一所大学,获得了商业分析(大数据)学士学位。我渴望成为一名数据科学家,并希望应用我在学校学到的所有机器学习模型来改变世界。是的,“改变世界”甚至是我在那段时间的许多采访中使用的短语,因为我相信如此。
现在回顾过去 3 年,我会说我太年轻,对数据科学在现实世界中的应用过于理想化。在这篇文章中,我想谈谈数据科学在学校和实际工作中的区别。我希望这篇文章能够引起一些当前数据科学家的共鸣,也有助于为未来渴望成为数据科学家的人设定期望。
因素 1:数据可用性
对于数据可用性,我指的是数据数量和数据质量。它分解成多个问题。
我们有没有首先需要的数据?
我们是否有足够数量的案例数据来创建有效的机器学习模型(用于训练和测试数据集)?
数据质量如何?(缺失数据?良好的行业分布?)
数据集的更新程度如何?
数据是否以您想要的格式存在?
在学校:老师会提供一个数据集,或者我们需要去寻找自己的数据集。即使我们被要求找到我们自己的数据集,我通常做的是去世界银行,使用它的一个宏观经济数据集。这是因为世界银行的数据集是完整的,而且通常质量良好。
我们的大部分努力都集中在建立机器学习模型上,而不是找到一个好的数据集或清理数据。
不幸的是,除非你属于谷歌或脸书这样的科技巨头,否则数据集不容易获得,尤其是高质量的数据。我们需要从网上搜集数据或者从第三方供应商那里购买数据。
由于样本大小或预测因子数量的数据限制,有时我不能应用随机森林算法或甚至训练测试分裂,因为它们需要最少的数据行或列。此外,如果我从事数据科学项目,我大约 90%的时间都在做数据工程或清理数据集,以确保它处于良好状态。
因素 2:业务需求
图片来自 Unsplash的 Sharon McCutcheon】
这听起来有点不公平,因为学校并不是一个正常的商业实体。然而,这正是不同之处。学校并不依赖你的机器学习模型来盈利,因此启动项目所需的业务水平存在很大差异。
**在学校:**我可以拿起任何问题陈述,用我的机器学习模型去解决。尽管由于实现的难度,这个问题可能没有太大的价值,但我仍然可以做到。
例如,在学校,我将 GDP 与预期寿命联系起来,这似乎没有直接的商业价值。
**在工作中:人们做的每一个项目都会得到报酬,公司绝对不想把钱浪费在低商业价值的项目上。在我们开始一个数据科学项目之前,我们需要确保这是一个值得探索的问题陈述,**或者理想情况下,问题陈述应该来自业务所有者。
在项目过程中,我们会不断地与企业主就我们正在建设的东西进行沟通,并检查我们是否朝着正确的方向前进。这是因为最终企业主将是使用你的产品或见解的人。
因素 3:数据科学或数据分析或数据可视化
这与前面的业务需求因素有关。当你有一个问题陈述和数据集时,你会应用机器学习模型或简单的数据分析还是简单地在 Tableau 上可视化数据?这肯定取决于具体的使用案例,但在学校和工作中可能会有所不同。
**在学校:**作为一名数据科学的学生,我曾经把尽可能多的机器学习模型放到学校的项目中。
好的,我们可以在这里进行情感分析,对数据集进行聚类,然后对每个聚类进行回归
这听起来很酷,但是有时问题可以通过不同组的简单平均来解决。
不,那太简单了,不酷,教授不会喜欢的
工作中:我会努力寻找最简单的解决方案。最后,我意识到许多问题可以通过数据可视化来解决,比如散点图或简单的数据集合。在现实生活中,许多数据问题并不复杂,也不适合使用数据科学方法。
因素 4:结果的呈现
我的代码输出结果(左)**影响房价的因素——你更喜欢哪个?**作者的简单图解(右)
我喜欢这个话题。当我第一次在工作中向业务部门展示我的数据科学结果时,我使用了 Jupyter 笔记本中我的回归模型结果的截图,并向他们解释了我的 R 平方、P 值等。当我看着他们的脸,我知道有什么不对劲…
**在学校:**如果你以前上过学校的统计或数学模块,你可能会遇到以下几件事:
- 一本很厚的教科书(我家里还有一本叫《概率》的,我现在用它来增加显示器的高度)
- 一页一页的公式和证明
- 教授可能会在黑板上绘制一些图表,这些图表对用户不友好,可读性差,并试图向我们解释每一个细节。
是的,当人们在学校听到我关于数据科学项目的报告时,可能会有这种感觉。我可以创建许多幻灯片,其中许多是证明概念的数学公式。当谈到解释的结果时,通常只是代码结果的截图,很少强调业务接下来可以做什么。遗憾的是,如果我们在做小组陈述,我们总是让一个弱势的队友来陈述“发现或后续步骤”,因为这很容易解释。
**在工作中:**我们应该避免在演示中使用技术术语,因为观众很可能一点也不懂。如果我们向企业展示,他们并不关心我们做了多少艰苦的工作才得出这样的结论,比如造了多少模型,创造了多少新功能。他们想听到的只是结果和他们如何利用你的模型的见解。我们应该避免使用回归结果的截图,而是使用用户友好的图表来说明变化或差异。
因素 5:模型性能预期
很抱歉,我不得不在这里使用一些术语。回归模型的 r 平方表示模型可以解释的目标变量的变化百分比。R 平方越高,你的模型越好。
**在学校:**我通常会选择质量好、能给我带来好结果的数据集。我不想在一个项目上花几个星期,最后得出的结论是没有相关性。对于我的回归输出,我通常可以得到 R 平方≥0.8,这意味着 80%的变量变化可以用模型来解释。我记得有一次我的模型只给了我 0.3 R 平方,我想谁会使用这种模型< 0.5 R 平方。
**工作中:**对于工作中的第一个数据科学项目,我的最佳调整 R 平方是 0.1,这意味着该模型只能解释 10%的变化。我非常失望。原来我至今在工作中的数据项目中,从来没有得到过任何模型≥0.8 R 平方的。有一定的道理因为如果 R 平方这么大,可能意味着结论或多或少是常识,然后为什么我们首先需要开始这个项目。这里的要点是,我们不应该期望我们的机器学习模型在我们的工作中达到同样的健康水平和令人敬畏的性能,因为现实生活中有太多意想不到的因素或噪音。
结论或建议:
我并不是想阻止人们成为数据科学家,不同公司的情况可能不同。但是,我觉得当人们作为数据科学家进入职场时,有一个合理的预期是好的。我从 3 年的工作经验中学到的几点:
- 数据工程很重要。即使你不渴望成为一名数据工程师,掌握一些这方面的知识和技能也是很好的,也是必要的。
- 数据可视化非常重要。人们可能不理解你的模型,但大多数人更容易接受可视化图表和图形。我喜欢使用 Tableau,因为它是交互式的和简单的,但是 Python 库也是免费的和强大的。
- 模型结果的解释和展示非常重要。如果你不能很好地解释一个模型,它是没有用的。即使你的预测准确率是 99%,如果你不能很好地解释这些发现或见解,它也不会被采纳。
- 在我个人看来,理解商业问题是最重要的。我们应该就数据科学模型能够带来什么以及用户需要什么达成一致。我们应该用最简单有效的方法来解决用户的问题,这可能需要领域知识。
如果您对想要阅读的新数据主题有任何反馈或建议,请在评论框中提出!感谢阅读!
加速时代的数据科学
一个数据科学家的日记
数据科学家、他们的经理和高管如何在数据科学的加速跑步机上保持不变
穆罕默德·马哈茂德·哈桑插图
2004 年,谷歌发布了一份描述 MapReduce 的白皮书,这是一种用于并行处理大数据的创新编程模型。2013 年,作为一名数据科学家,我的公司出资让我参加了 MapReduce 课程。但到了 2014 年,谷歌已经放弃将 MapReduce 作为其处理大数据的主要模型,这引发了一些问题,比如,MapReduce 已经过时了吗还是过时了吗?与更新的替代产品相比,使用它有什么好处吗?【MapReduce 还有未来吗?
作为一名数据科学家,在短短的 7 年时间里,我见证了许多技术的发展和消亡。有些,像 MapReduce,我不得不关注它们的衰退和废弃。其他的,比如计算笔记本,我作为一个从业者开始使用,并且一直使用到今天。然而,对于像深度学习框架这样的新框架,我管理的数据科学家有时间和接触来掌握它们,而我只对它们的设计和使用提供战略建议。
这些技术的加速生命周期部分是由于数据科学的婴儿期和我进入管理领域的进展,但它在很大程度上反映了我们的世界如何工作的彻底的结构性转变。正如托马斯·弗里德曼在 谢谢你迟到:一个乐观主义者的加速时代繁荣指南 中所说,世界正在经历一系列加速——跨越技术、全球化和气候变化——随着世界在许多领域发生变化,这要求人们更多更快地适应。
数据科学作为一种职业也不例外。
为学习而优化
作为一种职业,数据科学的加速发展对数据科学家的工作方式以及他们的经理和高管如何雇用、指导和留住他们产生了重大影响。具体来说,他们要求每一个小组都进行优化学习。
数据科学家
我毕业后的第一份工作是在华特·迪士尼公司做数据科学家。它要求我用 SAS 编程,建立生产级别的机器学习模型,并向客户咨询。在我工作的第一天,我从来没有在 SAS 中编写过代码,做过顾问,或者构建过这样的模型。
随着我事业的发展,事情并没有改变。在担任高级数据科学家的第二份工作之前,我从未领导过数字分析团队。在担任首席数据科学家之前,我从未为银行建立过欺诈模型。在担任数据科学主管之前,我从未发展和领导过数据科学实践。在我目前管理一个专注于法律经济学的数据科学团队之前,我没有与律师或经济学合作过。
在整个过程中,我不得不为学习而优化:直接和间接从更高级的同事和直接经理那里吸收知识,从 StackOverflow 等问答网站和 Coursera 等学习平台在线自学,阅读技术书籍,参加数据科学会议活动和会议。
我没有尽可能快地学会所有我应该学会的东西,但我学会了足够多的东西来成长为一名数据科学家,并最终成为一名数据科学经理。一路上我犯了很多错误,但我从每个错误中吸取了教训,并没有随着时间的推移而重复错误。这并不总是容易或简单的,但为学习而优化帮助我作为一名数据科学家继续前进。
数据科学经理
每次我被聘为数据科学家时,我都缺乏一种关键的角色或特定领域的专业知识,而这种专业知识是我获得成功所必需的。作为一名招聘经理,我也面试和聘用过一些数据科学家,他们并不具备在我的团队中工作所需的全部经验。我写的工作描述和我与我的团队创建的面试流程都预见到了这一点。
我不能总是雇佣已经做过同样工作的人——有时,工作类型对已经做过的人来说太新了。我也不能总是雇用有完美证书的人——大多数专业数据科学家没有数据科学学位,这是一个相对较新的现象。
即使我找到了一位以前做过相同工作的数据科学家,或者拥有适合这份工作的数据科学学位,一年后我聘用他们的角色可能会有所不同:这将需要新颖的技能,使用新技术,并涉及解决不同的问题。
作为一名招聘经理,我的目标是找到并雇用好奇的修补者:具有求知欲和一般资质(技术或其他方面)的数据科学家,以确定他们的工作需要的技能,以及足够快和足够好地掌握这些技能的热情和能力。
我试图将学习优化从招聘扩展到指导:为我团队中的数据科学家提供时间、空间和资源,以满足他们对修补的好奇心。我期望在他们工作的技术细节、他们为自己的角色带来的背景以及他们在工作中获得的新技能方面不如他们精通。但我的目标是就他们提出的问题、他们优先考虑的学习内容、他们如何应用知识以及他们如何交流工作来指导他们。
米勒·戴维斯有句名言,“不是你弹的音符,而是你没弹的音符。”同样,作为一名数据科学经理,我经常需要弄清楚团队中的数据科学家何时比我知道得更多或更好,这样我就可以避开他们。
数据科学高管
作为迪士尼的一名数据科学家,我很幸运有一位了解优化学习重要性的经理和执行领导。他们为我参加的技术课程付费,并给我时间来修补他们团队中新的编程语言,最终同意我的工作应该包含这些不同的语言。
在 Capital One 和优步,高管层投资于企业版在线学习平台,供像我这样的数据科学家学习和提高技能。这些公司还为我提供津贴,让我参加数据科学会议并在会上发言,在会上我可以了解最新的最佳实践,并向其他数据科学家学习。
团队或组织中有数据科学家的高管通过提供可用资源和建立制度化的流程来优化学习,并鼓励在职学习。这使得数据科学家的工作成果与他们职业的加速变化保持同步,使他们随着时间的推移更加有效和高效。
但这也成为雇佣和留住数据科学家的竞争优势。如果你雇佣了或者正在雇佣合适的人,数据科学家将会热衷于在工作中学习,并且不想停止成长。
数据科学是一台加速的跑步机
我在自己的职业生涯中亲身经历过,也在我的同事和团队中的数据科学家的职业生涯中看到过。我们进化——而且很快——否则就会落后。我很幸运从指导我的同事和经理以及尊重并认识到数据科学不断变化的雇主那里受益匪浅。
截图来自 YouTube
数据科学的这一特征并不是该行业独有的,但在数据科学家如何工作以及他们的经理和高管如何雇用、指导和留住他们的过程中,认识到这一点并尊重它是非常重要的。
数据科学不会停止加速发展。快速适应,坚持跑,尽量不要掉下来。
云中的数据科学
Azure vs AWS vs GCP
数据科学领域是多种多样的,如今在这个过程中涉及到许多不同的角色和职责。数据科学工作通常涉及处理非结构化数据、实施机器学习(ML)概念和技术、生成见解。这一过程通常以数据驱动的洞察力的可视化呈现结束。
机器学习是该过程的关键要素,但训练 ML 模型通常是一个耗时的过程,需要大量资源。过去,获取 ML 资源既困难又昂贵。今天,许多云计算供应商提供云中数据科学的资源。
本文回顾了 AWS、Azure 和 FCP 上的机器学习选项,以帮助您决定哪种资源满足您的 ML 需求。
云计算对数据科学的重要性
机器学习和深度学习模型的训练涉及成千上万次迭代。您需要这些大量的迭代来产生最精确的模型。例如,如果您有一组只有 1TB 数据的训练样本,该训练集的 10 次迭代将需要 10TB 的 I/O。当计算机视觉算法处理高分辨率图像时,输入数据集的大小非常大。您可以通过消除任何相关的网络延迟来减少处理时间。这可以帮助您确保读取源数据的最佳 I/O 性能。
云计算使您能够模拟存储容量和大规模处理负载,或者跨节点扩展处理。例如,AWS 提供具有 8–256 GB 内存容量的图形处理单元(GPU)实例。这些实例按小时定价。GPU 是专门为复杂图像处理而设计的处理器。Azure 为高性能计算算法和应用提供 NC 系列高性能 GPU。
AWS 机器学习服务和工具
亚马逊提供了几种机器学习工具和服务。这些服务使组织和开发人员能够提高计算密集型和高性能计算模型的性能。下面的列表回顾了其中的一些服务。
亚马逊 SageMaker
SageMaker 是一个完全托管的机器学习平台,面向数据科学家和开发人员。该平台运行在弹性计算云(EC2)上,使您能够构建机器学习模型、组织数据和扩展运营。SageMaker 上的机器学习应用包括语音识别、计算机视觉和推荐。
AWS 市场提供您使用的模型,而不是从零开始。然后,您可以开始训练和优化您的模型。最常见的选择是像 Keras、TensorFlow 和 PyTorch 这样的框架。SageMaker 可以自动优化和配置这些框架,或者您可以自己训练它们。您也可以通过在 Docker 容器中构建算法来开发自己的算法。你可以使用 Jupyter 笔记本来构建你的机器学习模型,并可视化你的数据。
亚马逊 Lex
Lex API 旨在将聊天机器人集成到应用程序中。Lex 包含基于深度学习的自然语言处理(NLP)和自动语音识别功能。
API 可以识别口头和书面文本。Lex 的用户界面(UI)使您能够将识别的输入嵌入到许多不同的后端解决方案中。除了独立的应用程序,Lex 还支持为 Slack 、Facebook Messenger 和 Twilio 部署聊天机器人。
亚马逊认知
Rekognition 是一种计算机视觉服务,它简化了图像和视频识别应用程序的开发过程。Rekognition 使公司能够根据业务需求定制应用程序。Rekognition 的图像和视频识别功能包括:
- 对象检测和分类 —使您能够在图像和视频中找到并识别不同的对象。例如,您可以检测正在跳舞的人或正在灭火的火。
- 人脸识别 —用于人脸检测和匹配。例如,你可以用它来检测图像和视频中的名人面孔。
- 面部分析 —用于分析面部表情。你可以检测微笑,分析眼睛,甚至定义视频中的情感情绪。
- 不当场景检测 —使您能够确定图像或视频是否包含不当内容,如露骨的成人内容或暴力。
Azure 机器学习服务和工具
与 AWS 相比,Azure 机器学习产品在开箱即用的算法方面更加灵活。Azure 机器学习产品可以分为两大类——Azure 机器学习服务和 Bot 服务。
Azure 机器学习(Azure ML)服务
Azure ML 是一个巨大的预训练、预打包的机器学习算法库。Azure ML 服务还提供了一个环境来实现这些算法,并将它们应用到现实世界的应用程序中。Azure ML 的 UI 使您能够构建结合多种算法的机器学习管道。您可以使用 UI 来训练、测试和评估模型。
Azure ML 还为人工智能(AI)提供解决方案。这包括可视化和其他可以帮助理解模型行为的数据,并比较算法以找到最佳选项。
Azure ML 服务产品包括:
- Python 包 —包含用于计算机视觉、文本分析、预测和硬件加速的函数和库。
- 实验 —使你能够构建不同的模型,比较它们,将项目设置为特定的历史配置,并从那时起继续开发。
- 模型管理 —提供一个环境来托管模型、管理版本和监控运行在 Azure 或内部的模型。
- 工作台 —一个简单的命令行和桌面环境,带有仪表盘和模型开发跟踪工具。
- Visual Studio Tools for AI —使您能够添加用于深度学习和其他人工智能项目的工具。
Azure 服务机器人框架
Azure Service Bot 提供了一个使用不同编程语言构建、部署和测试 Bot 的环境。Bot 服务不一定需要机器学习方法,因为微软提供了五个预定义的 bot 模板。这包括基本、形式、主动、语言理解和问答。只有语言理解模板需要先进的人工智能技术。
您可以使用 Node.js 和。NET 技术来用 Azure 构建机器人。你可以在 Skype、Bing、Office 365 电子邮件、Slack、Facebook Messenger、 Twilio 和 Telegram 等服务上部署这些机器人。
谷歌云机器学习服务和工具
谷歌在两个层面上提供机器学习和人工智能服务——面向经验丰富的数据专业人士的谷歌云机器学习引擎和面向初学者的 Cloud AutoML 平台。
谷歌云汽车
为没有经验的用户构建的基于云的机器学习平台。您可以上传数据集、训练模型并将其部署到网站上。AutoML 集成了谷歌的所有服务,并将数据存储在云中。您可以通过 REST API 接口部署训练好的模型。
您可以通过图形界面访问许多可用的 AutoML 产品。这包括结构化数据、图像和视频处理服务的培训模型,以及自然语言处理和翻译引擎。
谷歌云机器学习引擎
Google Cloud ML 引擎使您能够大规模运行机器学习训练作业和预测。你可以使用谷歌云 ML 通过利用 GPU 和张量处理单元(TPU)基础设施的来训练一个复杂的模型。您还可以使用该服务来部署外部培训的模型。
Cloud ML 自动执行所有监控和资源配置流程,以运行作业。除了托管和训练,Cloud ML 还可以执行影响预测准确性的超参数调整。如果没有超参数调整自动化,数据科学家需要手动试验多个值,同时评估结果的准确性。
张量流
TensorFlow 是一个开源软件库,使用数据流图进行数值运算。这些图中的数学运算由节点表示,而边表示从一个节点传输到另一个节点的数据。TensorFlow 中的数据表示为张量,即多维数组。TensorFlow 通常用于深度学习研究和实践。TensorFlow 是跨平台的。您可以在 GPU、CPU、TPU 和移动平台上运行它。
结论
您很容易迷失在云中各种可用的数据科学解决方案中。它们在算法、特性、定价和编程语言方面有所不同。此外,解决方案列表总是在变化。很有可能你会选择一个供应商,突然另一个供应商会发布更适合你的业务需求的产品。选择的时候,先搞清楚你想用机器学习达到什么目的,然后选择能帮助你完成目标的服务。
大数据分析在控制方面有哪些优势和障碍?
现实世界中的数据科学
控制中的大数据分析
在我们关于大数据分析在控制中的第一篇博客中,我们分享了关于大数据分析在控制中的当前成熟度的结果,这在德国处于初级阶段。近年来,大数据分析在控制中的使用有所增加,但分析工具的潜力比目前已知的更大。将大数据分析纳入控制仍面临**众多障碍和阻碍,**这可能是一些受访者对未使用大数据分析且仍未拥有自动化流程的控制者评价很低的原因。在这篇博客中,我们将分享我们关于大数据分析在控制方面的潜在障碍和优势的发现。
最近的研究表明,虽然数字化影响了整个公司,但管制员面临着新的潜力和挑战。财务总监可以利用数据分析技术来回答有关潜在销售发展的问题。
特别是预测分析软件解决方案已经在组织中获得了关注。预测分析可以被视为商业智能的一部分,商业智能侧重于未来预测,以实现更好的规划和决策,而商业智能侧重于报告和分析历史数据。
在竞争激烈的行业中,准确的销售预测对于通过预测销售数据来管理风险至关重要。预测准确性会影响公司规划流程的效率、目标实现程度、总成本和客户需求满足程度。文献中广泛记载了导致错误销售预期的失败预测过程。
对使用数据的兴趣导致采用大数据分析来改善决策过程的趋势日益增长。大数据分析被定义为“高级分析技术在大数据集上运行的地方”。回归分析、机器学习和模拟等各种大数据分析技术有助于分析数据并提供新的见解。越来越多的组织将投资集中在大数据分析上,以获得有价值的见解,从而为管理会计部门带来竞争优势。
由于数据驱动市场的竞争日益激烈,企业正在采用最先进的信息技术来获得竞争优势。控制或管理会计部门的的角色直接受到大数据分析工具的影响,因为在使用信息支持管理方面,控制者是公司的核心单位。挑战之一是从这些无处不在的信息量中获得洞察力。然后,收到的见解将用于制定决策和调整组织流程以产生价值。
大数据分析对控制的影响
虽然“审计员”一词在德语国家很常见,但“管理会计师”在美国和英国等英语国家是一个公认的术语。在比较这两种职业时,审计员的任务通常在一个范围内考虑,不仅侧重于会计问题,也侧重于管理问题。在我们的博客中,术语“控制者”和“管理会计”的意思是一样的,在控制和管理会计文献中很常见。
近年来,技术发展对管理会计的影响在国际上得到广泛的规范分析。最近的研究表明,尽管数字化影响了整个公司,但管理会计面临着新的潜力和挑战。大数据分析的成功使用需要技术的实施,技术可以处理、存储和收集大量涉及数据多样性、可变性、速度和价值的数据。这些技术使这项任务能够从各种未开发的数据源中发现以前未知的模式、相关性和信息,从而通过及时和更明智的决策,在利润和效率、速度和服务、产品方面提高竞争力。
利用预测分析的组织将投入大量资源来收集、处理、准备并最终分析预测数据,因此期望获得更深入的见解和知识。对于任何类型的数据来说,除了大小之外,最重要的是高质量。
公司中的人员需要开发支持性的文化、适当的能力以及知识,而结构(即协作和组织部门结构)需要支持预测分析计划。特别是,IT 相关部门和业务部门的协作对预测分析起着重要作用,因为组织应该将技术和领域知识结合起来。
大数据分析的功能有助于高级分析从分散在不同数据库中的琐碎信息构建事件、场景或感兴趣的对象的图片。公司,特别是其控制单位,可以应用他们从大数据分析中获得的洞察力来增强他们的决策流程,以成功实现他们的业务目标。大数据分析的总体重点是提取基本见解,它基于数据挖掘和统计技术。以前基于直觉的高管行动现在可以通过数据驱动的数学模型来实现。
现在,管制员还可以利用大数据分析场景,并考虑季节性波动。预测的准确性会影响公司规划过程的效率、目标实现的程度、总成本和满足客户需求的水平。
随着新的预算实践的出现,大数据和信息在预算编制中可能是有用的。企业资源规划系统数据可以与外部和非财务数据相结合,预算编制可以有新的发展。
因此,公司的决策是基于来自分析结果的证据,而不仅仅是他们经理的直觉。还必须考虑商业文化方面和技术方面,例如合适的基础设施和用户友好的界面,以获得大数据分析的竞争优势。
大数据分析在控制方面的障碍和优势
在国际管制员协会(ICV)的“管制员大会”期间,我们通过调查收集数据。这次会议于 2019 年 5 月在慕尼黑举行,口号是“为你的未来做好准备——想法。学习。网络”。它被认为是欧洲最大的控制会议。
使用大数据分析当然有一些优势,但也涉及风险。必须考虑到,并非所有受访者都指出了一个或多个优势或风险。因此,这项研究假设受访者在每种情况下在我们的关系。我们刚刚在第一篇博客中看到,组织已经慢慢采用大数据分析。
为了确定采用大数据带来的潜在好处,我们的调查问道:“如果您的组织实施了某种形式的大数据分析,使用大数据分析会带来哪些好处?”最有可能的益处(见图 2 顶部)是调查受访者最常选择的,随着列表的向下进行,益处的可能性下降
**实现高效快速的控制:**最常见的输入是效率的提高(25%)。在做决策时,用精益(9%)和自动化流程(9%)来指导业务会是一个巨大的优势。及时获得信息并尽早做出决定至关重要。
**获得透明度:**就管理公司而言,预测是最重要的学科之一。16%的受访者提到预测是一项优势。此外,还提到了通过大数据分析获得洞察力(9%)。
**为控制者赋权:**在控制者向业务合作伙伴转变角色方面,对新能力的渴望(13%)似乎是在控制中实施大数据分析的一大优势。
图二。大数据分析在控制方面的优势
为了了解哪些障碍比其他障碍更有可能,该报告的调查问道:“在您的组织中,实施大数据分析的最大潜在障碍是什么?最有可能的障碍(见图 3 顶部)是调查受访者最常选择的障碍,随着列表向下,障碍的可能性下降。
高实施成本:毕竟,实施这种大数据分析工具的成本最有可能被提及(32%)。
**技能不足:**调查受访者指出缺乏专业知识(24%)是不使用大数据分析的原因。
**错误指示和质量差:**最常见的情况是,缺乏工具作为决策的依据,导致错误决策(17%)。也许还造成了糟糕的数据质量(17%)。
图三。大数据分析在控制方面的障碍
本文旨在通过提出一个理论上成立的解释模型,整合来自不同学科现存研究的经验验证的发现,来提供对观察到的发现背后的基本原理的增强理解。根据定量研究的结果,成本被确定为最大的挑战。行业内的公司似乎不准备为这样的实现支付高成本。因此,他们将无法看到使用大数据分析的可持续优势。
最常提到的好处是效率的提高。通过大数据分析应用程序获得的洞察力可以使公司经理实时获得需求预测,自动做出更换决策,并确定成本低效率的根本原因。这些措施可以减少交付周期、成本、延迟和流程中断,从而最终创造价值。此外,从供应商方面来看,可以通过分析供应商的数据来监控绩效,从而提高质量或价格竞争力。因此,本文假设这些优势可以节省成本,但是高昂的投资成本仍然是一个障碍。
网络图和风险资本
如何使用网络图来监控风险投资基金之间的共同投资
介绍
风险投资家努力投资有潜力在未来引领市场的新兴公司。尽管投资于科技公司,但风投基金的日常活动过去过于手工化,基于感觉和印象,而不是数据。
当然,大多数时候,数据是不可用的,决策必须由主观方面来指导。在这种情况下,经验和基金的网络非常重要。有时,数据是可用的,创投资本家可以用它来指导他们的决策。
在本文中,我将展示如何根据共同投资来可视化风险投资基金之间的联系。为此,我们将借助网络图。
网络图—示例
为什么是网络图?
我们的网络图对希望了解竞争对手互动的风险投资基金、打算创建多元化投资组合的基金的基金,甚至是计划路演的初创公司都很有用。网络图也是进行详细聚类分析的好工具。
在这里,我们将关注算法,解释将在第二篇文章中详述。我们将使用 Python 和库 Networkx,它非常灵活,适合我们的需要。在我们的无向网络图中,每个节点代表一个风险投资基金,边厚表示两个基金之间共同投资的数量。
边缘颜色:
- 黑色虚线:1 个共同投资
- 蓝色:2 项共同投资
- 绿色:3 项共同投资
- 红色:4 项共同投资
- 紫色:5 项共同投资
- 7 项共同投资
- 橙色 16:共同投资
你可能想知道为什么联合投资的数量从 7 跳到 16(最大值)。这是两家政府支持基金的特例。
下图显示了我们网络图的一部分。我们可以看到,一些基金有许多共同投资,根据共同投资标准,有三个主要类别。
网络图—输出
在继续之前,让我们了解我们的数据来源!
数据
数据只来自 Crunchbase。在现实生活中,我们从不同的来源收集数据,如风投基金网站、媒体和公开文件。这很重要,因为相关比例的投资并不在 Crunchbase 的平台上。
在这篇文章中,我只关注巴西的基金和创业公司,但它可以很容易地复制到任何其他国家。l 也没有考虑每个基金的投资或投资组合公司的数量,但它可以很好地反映在节点大小中。
数据清理
我们来编码吧!
现在我将展示如何根据 Crunchbase 的输出来组织数据。
首先,我们导入所有的库。
import matplotlib.pyplot as plt
import networkx as nx
import pandas as pd
import numpy as np
from itertools import combinations
我们需要读取两个数据集。df_investors 包括总部设在巴西且至少有一项投资的所有机构风险资本基金的名称。df_startups 包括资金总额超过 30 万美元的巴西初创公司的名称,以及它们的投资者的名称。
# Investors datasetdf_investors=pd.read_csv("Investors.csv")
print(len(df_investors))# Startups datasetdf_startups=pd.read_csv("companies.csv")
print(len(df_startups))
让我们看看数据集是什么样子的。
df_investors.head()
df_startups.head()
df_startups 数据集中的列“Investors”包括所有的投资者。我们将筛选出巴西投资者。
# each investors in one row
# we will use .split() and .stack()df_startups = (pd.DataFrame(df_startups.Investors.str.split(',').tolist(), index=df_startups.Organization)
.stack().reset_index([0,"Organization"]))df_startups.rename({0: 'Investors'}, axis=1, inplace=True)
df_startups["Investors"] = df_startups["Investors"].str.lstrip()# merging the datasets to get only the brazillian investorsdf=pd.merge(df_startups, df_investors, how="outer")df=df[df["Location"]=="Brazil"].dropna().drop(["Location"],axis=1).reset_index(drop=True)df.sample(5)
有更有效的方法来获得上面的结果,但是当我们有不同的数据源时,合并数据集很容易实现。
现在我们将排除只有一个投资者的创业公司,因为它们与我们的分析无关。
# we only want startups with more than one investor# df_aux with the number of investors per startup
df_aux=pd.DataFrame(df["Organization"].value_counts().reset_index())
df_aux.rename({"Organization": 'Number_of_investors',"index":"Organization"}, axis=1, inplace=True)# merging the datasets
df=pd.merge(df, df_aux, how="outer")# filtering the dataset to get only the startups with more than one investors
df=(df[df["Number_of_investors"]>=2].sort_values(by=['Organization','Investors'])).drop(["Number_of_investors"],axis=1)df.head()
现在我们有 207 条记录,代表了导致至少一个联合投资的投资数量。实际数字比这个大,但由于我们的数据来源和采用的标准,这就是我们的数字。
在继续之前,让我们创建一个投资者所有可能组合的列表。很快就有用了。
# unique investors name
comb=df["Investors"].sort_values().unique()# list with all the combinations of investors
cc = pd.Series(list((combinations(comb,2))))
印刷(梳)
cc.head()
现在,我们将创建一个字典,其中每个键代表一个风险投资基金,值将是该基金支持的初创公司。
# creating a dictionary
# each key represents one investorsco_investments = { i : None for i in comb }for investors in df["Investors"]:
co_investments[investors]=set()# each value represents the investments
for startups,investors in zip(df["Organization"],df["Investors"]):
co_investments[investors].add(startups
现在,我们将创建一个新的数据框架,它将负责存储风险投资基金之间的共同投资计数。“共同投资”列是投资者的 2 长度组合,“ #共同投资”显示每个组合的共同投资数量。每个创业公司有两个以上投资者是很常见的,我们正在考虑。
感谢Daniel Gribel,帮助我修正和完善这一步!
#let's create a new df, which will be in charge to store the countage of the co-investments# new data frame
data=pd.DataFrame(data = {'Co-investment': cc.apply(lambda x: str(x)[1:-1].replace("'",""))})
data=pd.concat([data, data["Co-investment"].str.split(', ', expand=True)], axis=1).rename({0:'Fund1', 1:'Fund2'}, axis=1)#let's count the intersection among the investments
count=[]
for fund1,fund2 in zip(data["Fund1"],data["Fund2"]):
count.append(len(co_investments[fund1].intersection(co_investments[fund2])))
data["# Co-investments"]=count# filtering to get only the pairs with co-investments
data=data[data["# Co-investments"]!=0]data.sample(5)
上面的数据框将作为网络图的输入。
绘制图表
Networkx 使用 Dijkstra 算法在加权网络中寻找最短路径。让我们从创建一个无向图开始。
G = plt.figure(figsize=(30,15))
G = nx.Graph()
现在,我们将读取数据帧 df_network_1,以在图中添加加权边。我们还将设计我们的图表,根据共同投资的数量,在边缘添加不同的颜色和厚度。
# adding the edges with the information from df_network_1
for i,j,w in zip(data["Fund1"],data["Fund2"],data["# Co-investments"]):
G.add_edge(i,j,weight=w)# weights represents the number of co-investments
# the max values is 16 co-investments
s1 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 1]
s2 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 2]
s3 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 3]
s4 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 4]
s5 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 5]
s6 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 7]
s7 = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] == 16]pos = nx.spring_layout(G) # positions for all nodes# nodes
nx.draw_networkx_nodes(G, pos, node_size=50, node_color="gray")# edges
nx.draw_networkx_edges(G, pos, edgelist=s2,
width=2, alpha=1, edge_color='blue')nx.draw_networkx_edges(G, pos, edgelist=s1,
width=1, alpha=1, edge_color='black',style="dashed")nx.draw_networkx_edges(G, pos, edgelist=s3,
width=3, alpha=1, edge_color='green')nx.draw_networkx_edges(G, pos, edgelist=s4,
width=4, alpha=1, edge_color='red')nx.draw_networkx_edges(G, pos, edgelist=s5,
width=5, alpha=1, edge_color='purple')
nx.draw_networkx_edges(G, pos, edgelist=s6,
width=7, alpha=1, edge_color='pink')nx.draw_networkx_edges(G, pos, edgelist=s7,
width=16, alpha=1, edge_color='orange')plt.axis('on')
网络图:至少一个共同投资
上图是我们最终的结果!为了更好的可视化,我隐藏了这些名字,但是它们在详细的分析中很有用。我们可以注意到,一些基金有很强的联系,这意味着它们有许多共同投资。
我在图表中突出显示了一些组。第一组包括第一批巴西风险投资基金,他们从政府那里筹集资金来培育生态系统。第二组包括最活跃的基金,那些有大量投资、退出和独角兽的基金。第三组包括私人风投和政府支持的风投,它们通过投资农业综合企业初创公司而联系在一起。
下图是从flouring输出的,这是一个平台,它允许我们在不编码的情况下将电子表格转化为交互式在线图表。
网络图—蓬勃发展
最终意见
上面的图表代表了巴西风险投资基金之间的联系,为了获得结论性的结果,我们需要寻找除 Crunchbase 之外的其他数据来源(funds 的网站就是一个很好的来源!).跨时间的网络图也是一个很好的方式来形象化新资金是如何进入市场的。
监控共同投资的网络图只是风险投资如何在日常活动中使用数据的一个例子。自从我开始从事数据驱动型风险投资基金的工作以来,我发现了几种利用公开和专有数据丰富投资决策的方法。
如果你发现任何错误,请不要犹豫联系我!我最近开始在数据科学世界中冲浪,尽管我热爱它,但我是一个业余爱好者。
数据科学基础设施和 MLOps
苹果 | 谷歌 | SPOTIFY | 其他
卢克·马斯登在 TDS 播客
编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris、Edouard Harris 和 Russell Pollari 主持。他们一起经营一家名为sharpes minds的数据科学导师创业公司。可以听下面的播客:
你训练你的模型。您可以使用验证集来检查它的性能。你调整它的超参数,设计一些特征,然后重复。最后,您在测试集上试用它,它工作得非常好!
问题解决了?嗯,可能不会。
五年前,您作为数据科学家的工作可能已经结束了,但数据科学生命周期正在逐渐扩展,包括基本测试之后的步骤。这不应该令人惊讶:现在机器学习模型正被用于生死攸关和任务关键的应用程序,数据科学家和机器学习工程师面临越来越大的压力,以确保可靠地解决特征漂移等影响,确保数据科学实验是可复制的,以及确保数据基础设施是可靠的。
这一集的嘉宾是卢克·马斯登,他让这些问题成为了这部作品的焦点。卢克是数据基础设施初创公司 Dotscience 的创始人兼首席执行官,该公司正在为数据科学版本控制开发一个类似 git 的工具。Luke 在职业生涯中的大部分时间都致力于解决大规模基础设施问题,并对数据科学和 MLOps 的发展方向有很多看法。以下是我最大的收获:
- 在传统的软件工程中,版本控制允许开发人员在不影响彼此的情况下为相同的代码库做出贡献。这是一个重要的工具,但它在数据科学中的对等物要难得多。这是因为除了静态代码,数据科学版本化还必须考虑不同的数据集版本和不同的超参数值,所有这些都需要指定,以确保结果的可重复性。
- 在生产环境中,模型性能不会随着时间的推移而保持不变。当然,你的模型在第一天可能会工作得很好,但是随着世界的变化,或者用户需求的发展,一个曾经工作得很好的推荐器或者预测模型在将来可能会变得完全不可靠。这就是为什么持续的性能监控是生产过程中的一个关键因素。
- 开源是一件值得参与的大事,尤其是在数据科学领域。Luke 的建议是从摘容易摘到的果子开始(即使是一个简单的改进文档的拉请求也会帮你弄脏你的手!).
- 尽管工作描述在不断变化,但科学家今天需要的许多基本技能数据在未来很可能仍然至关重要。这些通常包括数据分析、统计和定量推理的能力。
- 额外收获:如果你对学习一些 git 感兴趣,Luke 推荐 katacoda,一系列互动教程,你可以从你的浏览器中探索。
我们正在寻找能与我们的观众分享有价值的东西的客人。如果你碰巧知道谁是合适的人选,请在这里告诉我们:publication@towardsdatascience.com。
数据科学实习面试问题
图片来自 Pixabay
介绍
数据科学是一个有吸引力的领域。这很有利可图,你有机会从事有趣的项目,而且你总是能学到新东西。因此,进入数据科学领域竞争非常激烈。开始数据科学职业生涯的最佳方式之一是通过数据科学实习。
在这篇文章中,我们将看看要求的一般知识水平,典型面试流程的组成部分,以及一些面试问题示例。请注意,强调“一般”一词是因为具体情况因公司而异。
数据科学实习面试需要什么?
数据科学实习面试和全职数据科学家之间的最大区别是,通常不会期望你知道关于机器学习或深度学习概念的极其具体的细节。
然而,您将被期望拥有能够在其上构建的基本构建块——这包括 Python、R 或 SQL、统计和概率基础,以及基本的机器学习概念。
下面是一个基本知识和技能的列表,它将使你成为一个有吸引力的候选人:
Python 还是 R
来自 TechVidan 的 Python 数据科学库
你应该有脚本语言的编程经验,最好是 Python 或 r。如果你是 Python 程序员,你还应该对流行的库有基本的了解,如 Scikit-learn 和 Pandas。
**你应该知道的:**你应该知道如何编写基本的函数,对各种数据结构及其用途有基本的了解。您还应该了解 Scikit-learn 的基本(但也是必不可少的)功能,如 test_train_split 和 StandardScaler。对于 Pandas 来说,您应该能够轻松地操作数据帧,就像使用 SQL 编写查询一样。
例如,您可能需要构建一个简单的机器学习模型来预测产品的销售量。在这种情况下,如果您是 Python 用户,理解 Scikit-Learn 库将非常有用,因为它已经提供了许多预构建的函数,就像上面提到的那些。
**如何准备:**尝试 Kaggle 上的数据科学项目或面试查询上的带回家作业,以了解您可能需要完成的项目。
为了更好地了解 Scikit-Learn,使用它建立一个简单的机器学习模型或浏览一些其他人已经完成的数据科学项目将是一个好主意。
最后,尝试在面试查询中练习 Python 问题,以了解他们可能会问你什么。 了解更多 如何解决 Python 数据科学面试题 。
结构化查询语言
来自黑客和黑客的 SQL 数据库
你不需要在关系数据库方面有太多的经验,但至少你应该知道 SQL 是如何工作的。如果你在竞争一份数据科学家的实习工作,那么你很可能会为一家拥有海量数据的公司工作。你需要自己浏览这些数据来解决问题。
**你应该知道:**你应该能够编写基本的查询,你应该知道如何使用 SQL 查询操作数据。公司将 SQL 纳入他们的家庭案例研究中是非常常见的,因此您非常了解 SQL 是非常重要的。
例题:
编写一个 SQL 查询,从表中获取第二高的薪水。例如,给定下面的雇员表,查询应该返回第二高的薪水。如果没有第二高的薪水,那么查询应该返回
**如何准备:**模式为学习基础 SQL 提供了很棒的资源,在这里可以找到。此外,您可以在网上找到大量的 SQL 练习题和练习案例研究。
统计与概率
图片来自 Unsplash
**你应该知道的:**你应该对基本概念有一个坚实的理解,包括但不限于概率基础、概率分布、估计和假设检验。统计学的一个非常常见的应用是条件概率,例如,假设客户购买了产品 C,那么他们购买产品 B 的概率是多少?
如何准备:如果这些概念对你来说听起来很陌生,你可以利用一些免费的资源,比如可汗学院或佐治亚理工学院。
机器学习概念
来自福布斯的机器学习
虽然不指望你成为专家,但你应该很好地理解基本的机器学习模型和概念。如果工作描述说你将从事建筑模型的工作,这种情况尤其明显。
**你应该知道的:**这包括但不限于线性回归、支持向量机和聚类等概念。理想情况下,你应该对这些概念有一个基本的理解,并且明白什么时候使用各种机器学习方法是合适的。
例如,您可能需要对产品的价格点进行线性回归,以确定销售量。也就是说,作为实习生,你不需要生产或部署机器学习模型。
了解如何应对不同的 机器学习面试问题这里。
领域知识
你应该拥有你所申请的领域的领域知识(如果你没有,你应该去学)。
例如,如果你申请营销部门的数据科学职位,了解不同的营销渠道(如社交媒体、联盟、电视)以及核心指标(如 LTV、CAC)将是一个好主意。
数据科学实习面试流程
图片来自 Unsplash
同样,面试过程最终取决于你申请的公司。但是一般来说,大多数公司(如果不是全部的话)在面试过程中都有一般的步骤,我会在下面解释。
作为一名实习生,你能做的最糟糕的事情就是不去研究这家公司做什么,以及它的文化使命和价值观。
初步筛选
通常,公司的招聘人员或招聘经理会进行初步筛选(通常是电话筛选)。这样做的目的是让受访者更好地了解角色,面试官也能更好地了解受访者。
你应该预料到他们会问你对这个职位和公司的兴趣,为什么你认为你很适合,以及与你过去经历相关的问题。在极少数情况下,你也可能会被问到一两个简单的技术问题。
面试官只是想确定你真的对这家公司感兴趣,你是一个很好的沟通者,并且你没有发出危险信号。
带回家的箱子
对于现在的许多数据科学实习来说,公司会要求你完成一项带回家的挑战。这意味着他们会给你一定的时间来完成他们给你的案例研究,这通常反映了你在实际工作中会遇到的问题。
这样做是为了看看你将如何处理一个问题(即你的思维过程),以及你是否具备解决这个问题所需的基本知识。案例的例子包括清理数据集和建立机器学习模型以做出给定的预测,或者查询数据集和分析数据,或者两者的结合。
现场面试
最后是现场面试,包括一到六轮面试。这些面试由行为和技术面试问题组成。在其中一轮比赛中,你可能还需要当场完成一个案件。
虽然他们试图确保你对成功担任该角色所需的基础知识有深刻的理解,但他们也会评估你的行为、动机,并最终评估你是否适合该团队。确保你有最好的表现,但不要忘记做你自己!
面试问题
下面是 10 个你应该知道的面试问题:
- 什么是 p 值?
- 什么是正规化,它试图解决什么问题?
- 你怎么能把年龄和收入之间的关系转换成线性模型呢?
- 如果你有两个重量相等的骰子,得到和为 4 的概率是多少?
- 在争论和清理数据集时,您会采取哪些步骤?
- 什么是交叉验证,为什么需要交叉验证?
- 举例说明在确定机器学习模型的有效性时,准确度何时不是最佳指标。
- 内部连接和外部连接有什么区别?
感谢阅读
- 更多独家面试解说,查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
- 在面试查询博客上找到更多数据科学面试指南,如 T he 新毕业生获得数据科学工作指南 或亚马逊数据分析师面试指南 。
原载于 2020 年 7 月 14 日 https://www.interviewquery.com。
数据科学面试问题—初学者指南
在数据科学面试中,你应该期待什么样的问题?
塞巴斯蒂安·赫尔曼在 Unsplash 上的照片
各位数据从业者好
众所周知,数据科学正在崛起。
我相信你们很多人都知道,数据科学家被称为 21 世纪最性感的工作**,不管这意味着什么。**
数据科学家的谷歌趋势
这很酷,但数据科学行业仍然相对较新,在这个行业中,流行词汇被公然抛出,责任模糊,头衔凭空产生。
想想吧。
数据科学是关于数据如何工作的知识。让我们回到 20 世纪,在那个时代,企业没有我们今天拥有的奢侈技术。企业用笔和纸记录下他们的交易,以后他们会用这些来了解他们的业务。
- 一周中的哪一天,企业产生的收入最多?
- 在所有的产品中,哪一个卖得最好?
- 客户通常会花多少钱购买该业务?
这些类型的问题可以通过一点数学计算和数据处理来轻松回答。那时,企业雇佣你所谓的“统计学家”来做这件事。因此,统计学家和数学家从那时起就继承了的报告角色,这就是为什么数学和统计学是今天成为报告数据分析师的一些核心先决条件。
然而,事情发生了变化。随着互联网的发展,商家开始在网上经营。人们把大部分时间花在互联网上,这就是为什么你现在正在阅读我的文章。
根据 digitalcommerce360 。仅电子商务市场一项就稳步上升。
随着每年约 20%的支出增长,
电子商务市场在 2019 年达到了超过 3.46 万亿美元。
现在,企业经营网站和应用程序,而不是实体店。现在可以在数据库中找到数据,而不是纸和笔。
这就是你进来的地方。
克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片
数据科学家
你应该拥有足够的数学知识来处理数据,以及编程知识来知道如何以一种有效的方式存储、操作和建模数据。
时至今日,大多数雇主都雇佣数据科学家来管理、组织他们的数据,并从中提取真知灼见,用于描述性分析和预测性分析。
他们中的少数人
将工作分成数据工程、数据分析和数据科学,在这些领域中,角色得到了更好的定义。
因此,如果你想得到这样一个职位,你需要具备广泛的数据知识。
如果你仍然对数据科学家的角色感到困惑,
我会在这里深入讨论这个角色
数据工程师重要吗?
towardsdatascience.com](/why-are-data-engineers-equally-as-important-as-data-scientists-545898929444)
为什么你应该关心
作为一个新兴行业,数据科学的角色在公司中的定义并不严格。
你问问周围,不同公司的数据科学家职责不同。
他们中的一些人管理整个数据仓库,包括 ETL/ELT 管道、仓库架构和表结构
其中一些更加面向分析,产生惊人的可视化效果并与企业主交流
他们中的一些人通过建模数据创造数据产品如图像和音频识别
他们中的一些人做到了以上所有的事情
因此,与通常会收到编码问题的传统软件工程师不同,没有人真正知道在数据科学面试中会遇到什么——这就是为什么你应该从曾经经历过的人那里收集经验。
我的背景
您可以在这里 查看我的作品 的完整作品集。
我叫梁家杰。
我是我国访问量最大的网站/应用之一的商业智能/数据团队的一员,该网站/应用为用户提供了一个买卖二手物品的市场。我在这里已经快两年了。
现在,我的角色包括一些核心职责。我已经完全构建并设计了 ELT 管道,它从相关来源提取数据到我们的数据仓库中,方便业务分析师使用。
我已经在这里写了。
[## 数据工程 Apache 气流的基础——构建您的第一条管道
如果你从事技术工作,你很有可能需要管理数据。
towardsdatascience.com](/data-engineering-basics-of-apache-airflow-build-your-first-pipeline-eefecb7f1bb9)
我在改进我们的数据仓库功能方面做了很多工作,包括实现流管道、适当的元数据管理、表结构等等。我还大量参与了 机器学习项目 的技术角色,将新的数据产品引入我们的网站和 app。除此之外,我还执行相关的分析以协助产品经理做出商业决策,并维护所述分析的自动化以备将来使用。
在此之前,我在两家大型金融机构工作,其中一家是我国最大的银行。两个角色都在数据团队中,第一个是实习生,第二个是业务分析师。
在我所有的工作转换中,我接触到了大量与数据科学相关的面试,从首席执行官最近可能涉及或可能不涉及欺诈案件的大型航空公司,到销售床垫的中型公司。
当我开始的时候,我不知道在这些采访中会遇到什么,也不知道当时在网上能找到什么有用的资源。因此,我将分享我对数据科学面试问题的看法,揭示面试官经常问的问题和期望。
让我们深入研究一下。
你的工作
他们通常从平常开始。你的背景、你的激情和你的目标。一旦解决了这个问题,他们就会想要检查你的一些工作。
我总是会想到这样的问题:
- 你做过什么样的项目?
- 在你目前的职位上,你的职责是什么?
- 到目前为止,你有哪些显著的成就?
我知道,你认为这太明显了,不是所有的面试官都会问这些问题吗?
好吧,如果这是显而易见的,为什么大多数受访者缺乏一个平台/空间来展示他们的工作?
有备而来,如果你能主持一个网站,用适当的文档和代码展示你所有的成就,那会给你加分不少。你会惊讶于如今这种情况是多么罕见。
如果你是应届毕业生,展示一些你的项目。这是引出话题的好方法。
如果你缺乏前者,你需要非常好地解释你的工作。
尽量避免先确立你的团队已经取得的成就。相反,更多地关注你做了什么,越具体越好。
确保提及您使用的技术,如 GCP 平台和神经网络。
技术问题
我参加过一些面试,他们一个技术问题都不问。另一方面,我参加过一些面试,为了获得面试机会,我不得不完成一个 4 小时的技术测试。各不相同。
如果你能像我之前提到的那样有效地展示你的作品,我就不会那么担心这部分了。但是,一个数据科学家在技术上受到考验是很正常的。因此,你可以期待这类问题。
结构化查询语言
数据科学家必须从某个地方获取数据。公司通常将所有数据存储在 SQL 数据仓库中,供像你这样的分析师查询。
如果你不能流利地使用 SQL,这是你面试失败的危险信号之一。
除了基础知识,以下是你应该知道的主要话题:
- 连接
- 总计
- 过滤器
- 联盟
- 案例陈述
他们通常测试你的方式是给你一个数据集,并要求你给出一个结果作为回报。下面是我遇到的最棘手的一个例子:
Given customerID, date and revenue columns.
For each date, how do I show the highest revenue row for each customer?
如果你能在脑子里算出答案,并立即读出来,而不是试图写出答案,这会给你加分。
Select * from (
Select
date,
customerID,
revenue,
sum(1) over (partition by date order by revenue desc rows unbounded preceding) as row_num
from dataset ) where row_num = 1
理论问题也会冒出来。像“左连接是如何工作的”这样的问题根本不应该促使你写出任何解决方案。相反,你的解释显示了你对 SQL 的理解程度。下面用我自己的话回答一下。
left join works by joining 2 tables with a key while keeping all the rows from the left table.
我也遇到过无法回答的问题,比如:
How does an outer join work?
我友好地回答说,我以前从未在查询中使用过外连接,
,因此无法回答这个问题。
有许多方法来解决一个 SQL 查询。我通常想到的解决方案涉及左连接和内连接,这就是为什么我缺乏外连接知识。
不要害怕承认你不知道某事,只要你能很好地解释你的理由。
请记住,数据科学仍然是一个不断发展的行业。
甚至对于谷歌云平台,在撰写本文的几个月前他们刚刚发布了一个新的管道解决方案谷歌云融合。
不可能有人知道最新的每一个技术和编程语言。因此,只要你有选择,承认这一点是可以的。
数据操作
在获得数据后,数据科学家通常不得不
操纵数据成他们想要的形式。使用什么方法并不重要,但是复杂的操作至少需要某种编程语言。
根据您的角色,对编程语言的要求会有所不同。如果你更多的是在业务方面工作,普通的 excel 可能会有用。如果你更多地从事工程方面的工作,公司可能会要求你掌握某些编程语言。
这是由于该公司正在使用的技术堆栈的限制。
这里有一个例子,一家公司正在使用谷歌云数据流将数据摄取到**谷歌 BQ 中。**默认情况下,数据流只允许 Java 或 Python 作为它们的编程语言。因此,如果你的角色涉及数据流,你将需要掌握其中一种语言。
数据科学家角色的要求
有些公司要求你掌握特定的编程语言来进行数据操作。如果你能用不同的语言展示你的能力,你就能很快学会第二种语言,一定要告诉他们这一点。
以下是我被问到的关于处理数据的主要话题:
- 自然语言处理
- 熊猫
- Numpy
- 矩阵
- 列表和词典
- For 循环+ If/else
- 正则表达式
这些主题可能会出现理论问题。
类似这样的事情:
- 什么是矩阵的转置?
- 普通链表和 Numpy 数组有什么区别?
- 什么是 tokenize?
有些公司会针对这一部分进行代码测试。
我通常会得到一个包含特定主题数据的 CSV 文件。
然后他们会要求具体的调查结果作为回报。
这里有一个例子。
样本数据集
Given the CSV file regarding searched queries, what are the top 5 keyword phrases that has the highest click-through-rate on weekends? Document your steps and demonstrate the method you have used
我不会详细讨论这个解决方案,因为它太长了。
涉及的步骤有:
- 使用自然语言处理来识别关键词
- 写一个函数来识别周末
- 为 CTR 创建新列
- 可视化结果
这个问题需要很强的熊猫和自然语言的知识。
这里有一篇关于 熊猫 的文章,可能会帮助你掌握基础知识。
10 分钟内完成数据探索指南
towardsdatascience.com](/python-for-data-science-basics-of-pandas-5f8d9680617e)
机器学习
安迪·凯利在 Unsplash 上拍摄的照片
啊是的。大家最喜欢的话题。
*忘掉人工智能吧——在大数据这个勇敢的新世界里,我们应该提防的是人工白痴。——*汤姆·查特菲尔德
在处理了描述性的(过去的)数据之后,我们现在有能力使用机器学习来预测未来的价值。代替 if-else 语句,我们让机器通过提供数据来发现数据集中的规则。
机器学习带来了许多可能性。然而,它仍然是一门新的学科,只有很少一部分数据从业者能做好。
因此,当你知道机器学习与你的角色有关时,用机器学习的核心知识来武装自己就显得尤为重要。
理论
我多次被问到机器学习的问题,
通常是从我进行过什么样的机器学习项目开始,如果有的话。
我的回答永远是是的,我一定会给他们看我的作品。对话就是从这个时候开始的。
例如,我给他们看了我做的一个分类项目这里。
如何正确执行分类机器学习并对其进行评估
towardsdatascience.com](/python-for-data-science-a-guide-to-classification-machine-learning-9ff51d237842)
他们通常以此为基础开始提问。他们通常会问一些理论性的问题,比如:
- 分类和回归有什么区别?
- 回归算法有哪几种?
- 你为什么选择使用这种特殊的算法?
- 如何处理不平衡数据?
如果你了解机器学习的核心,你应该能够流利地回答这些问题。这里有几个可供阅读的主题:
- 机器学习算法
- 数据预处理
- 取样操作
- 特征选择
- 培训模型
- 评估模型
之后,他们会决定你是否能胜任这个角色。一些公司也为机器学习分发代码测试。我已经得到了一些,让我给你看一个例子。
**Prediction Model development****Problem Statement:** Based on customer search behaviour you have to predict whether a customer will buy additional products/services.
机器学习数据集
我不会详细介绍这个解决方案,因为它是一个全面的机器学习过程。
涉及的步骤有:
- 处理数值和分类数据
- 培训模型
- 评估模型&拣选算法
- 视觉化的发现
我还被详细问到如何评估我的模型。
仅仅回答准确性是不够的,你必须明白它们是评估你的模型的多种不同的指标
- 精确
- 回忆
- f1-分数
产品
由 Kon Karampelas 在 Unsplash 上拍摄的照片
作为一名数据科学家,您也应该对产品有一些基本的了解。在实现您的模型/数据产品之后,您应该知道如何跟踪该产品的成功。
你的沟通技能在这里发挥了巨大的作用,因为你通常需要向非技术人员传达你的发现。并不总是非黑即白。通常是来来回回的讨论来找出你对事物产品方面的思考过程。
这里有一个产品问题的例子。
A **classifieds** business company had just revamped their site from legacy stack into the new react stack. Hence, the website looks different aesthetically. There are some function changes as well, for example, a page usually displays 20 listings, but now it displays 10 per page.**Explain how you would prove that the revamp of the site is a success.****Explain how functions like the listing change affects our metrics.**
同样,答案是主观的。
I would start off by asking what are the success metrics the business was tracking before the revamp and continue tracking those. The usual metrics would be daily/weekly/monthly active users and time spent on site. We should also look at page load times, as new revamps may cause performance issues.For the function changes, we should look at them separately. For the listing change, I assume the listings are bigger due to the decrease in amount. Hence, it may cause an increase of CTR into the listings. That’s the first thing I would look at.Having lesser listings will also mean that customers spend less time on a page and more time navigating through pages. Hence, I will also look at the time spent per page and pagination clicks.
他们可能会用一些假设/论点反驳你。这是你的思维过程和经历(如果有的话)闪耀的地方。
产品知识需要经验。通常情况下,如果你是这个行业的新人,你不会被问及这个问题。
摘要
卡洛斯·阿瑟·M·R 在 Unsplash 上拍摄的照片
谢谢你走了这么远。这意味着你真的对在数据行业谋得一个职位充满热情。我很高兴。
请理解我不可能在这篇文章中包括所有的内容。相反,这些是我的个人经历,也是我被问得最多的话题。我知道有些话题没有被提及。
- 重数学相关
- 深度学习(严重依赖经验)
- 深度可视化
这样的例子不胜枚举。请记住,数据是不断发展的,每天都会有新的技术需要学习。这是工作描述的一部分。这就是它的有趣之处。
如果你已经掌握了我在这篇文章中提到的所有主题。你从根本上为在数据行业工作做好了准备。自信一点,打扮一下,展示一下。在朋友面前练习,你就可以开始了。记住,不是他们寻找合适的人选,而是你寻找合适的公司。
最后,拒绝是完全正常的。
听我的。在我的团队中,我们在某个时间点突然需要更多的人数,但是没有任何候选人。如果有人提交申请,他们会马上被录用。另一方面,我看到更多合格的候选人申请我的团队,但我们没有能力接纳他们。
求职就是在正确的时间出现在正确的地方。不要把拒绝放在心上,保持一致。
在你走之前
我们的数据之旅还没有结束。在这个行业缺乏人才的情况下,用适当的数据和机器学习知识来教育自己将使你在获得数据角色方面具有优势。请继续关注,在我的下一篇文章中,我将讨论如何为自己创建数据科学投资组合,以及更多数据行业的故事、指南和经验。与此同时,请随意查看我的其他文章,以暂时填补您对数据的渴望。
像往常一样,我引用一句话作为结束。
消费者数据将是未来两到三年的最大区别。谁能打开大量数据并战略性地使用它们,谁就能赢。”——安吉拉·阿伦茨
订阅我的时事通讯,保持联系。
感谢 的阅读!如果你想与我取得联系,请随时通过 nickmydata@gmail.com 或我的 LinkedIn 个人资料 联系我。你也可以在我的Github中查看之前写的代码。**
数据科学面试复习者
在大型面试前刷新
我创建了个人学习指南,以确保在华盛顿特区的一家领先咨询公司获得数据科学职位
照片由 Ridwan Meah 在 Unsplash 上拍摄
介绍
我从多个来源精心制作了这个学习指南,以使它尽可能全面。这个指南帮助我为招聘公司的面试做好了技术和行为方面的准备。请注意,本指南并不详尽,也不是初学者指南,而是作为常见数据科学术语和算法的 复习工具 ,并帮助您准备一些行为问题的答案。对于有大量参考资料和资源的更详细的解释,我强烈推荐这个指南。
我使用的资料来源 是其他媒体文章(通篇超链接)、在线学术期刊以及我本科应用机器学习课程的个人笔记。
指南概述
- 一般问题和答案
- 常用术语
- 机器学习算法和概念
- 附加个人准备
- 面试后要问的问题
第 1 部分:一般问题和答案
在指南的第一部分,我准备了一些面试官可能会问的与数据科学作为一种职业相关的常见问题以及常见的行为问题。
**什么是数据科学?**可能答案:数据科学是将数据转化为可操作的见解。这些见解有助于公司赚更多的钱,优化工作流程以提高效率,并做出计算数据驱动的业务决策。
怎样才能成为一名优秀的数据科学家? 可能 答案:能够与一个非技术人员交流技术问题和解决方案,是成为一名优秀数据科学家的关键。将不同的数据点转化为可操作的见解的行为可能会很复杂;传达这些结果对于对业务产生有意义的影响至关重要。
其他需要思考的常见行为问题:
- 说说你自己吧。
- 你的优点和缺点是什么?
- 你认为自己在 5-10 年后会怎样?
- 告诉我你不得不向一个非技术人员解释一个技术问题的时候。
- 为什么公司【x】?
第 2 节:常用术语
在下一部分中,我将定义一些常见的数据科学术语,面试官可能会要求您定义这些术语来检查您的基础知识。
- 过拟合与欠拟合: 使用过拟合模型,您可以对训练数据进行非常准确的预测,但对测试和真实世界数据的预测却不太准确。当模型过于复杂并捕捉到数据的噪声时,就会发生过度拟合。欠拟合模型过于简单;它不会找到数据的潜在模式。训练和测试结果中都存在不准确的预测。覆盖所有组合的数据不足或不恰当的随机化可能会导致模型拟合不足。
- 归一化与标准化与正则化: 归一化将参数值的范围重新缩放到设定的范围(例如,[0,1]或[-1,1])。标准化将方差“标准化”。标准化将单位方差转换为平均值为 0、标准差为 1 的标准正态。异常值表示为平均值以上的 3 个标准差。正则化是在你的模型中建立一个惩罚来防止过度拟合的想法。例如,我们不想要一个过度拟合的模型,所以我们添加了一个惩罚模型复杂性的参数。即 L1-诺姆(拉索)和 L2-诺姆(山脊)。 点击此处了解更多信息
- 偏差与方差: 偏差会导致过度简化/欠拟合。就是预测值和实际值的差距。方差是你的预测相互之间的分散程度。低方差会导致过度拟合,因为模型遵循异常值或数据中的噪声。总的来说,随着模型复杂性的增加,方差也增加(过度拟合增加)。随着模型复杂度的降低,偏差也随之降低(欠拟合增加)。目标是找到这种权衡之间的平衡。
- 监督与非监督学习: 监督学习使用标记数据训练模型。我们知道因变量和我们试图预测的值,例如随机森林、SVM 和线性回归。无监督学习不需要你训练一个模型。您不知道因变量,例如 K-均值聚类。
- 分类 vs 回归: 分类预测一个离散的类标签输出,例如:高、中、低→多分类或正/负→二元分类。回归预测连续的数量输出,例如温度。
- 熵: 随机性/方差的度量。数值越高,越难下结论。熵为 0 的结果意味着完美的分类。一种贪婪算法试图通过减少熵来快速均匀化数据。
- GIT(版本控制): Commit —将更改添加到本地存储库,Push —将提交转移到远程存储库,Pull Request —用指定分支上的内容更新主/主要分支
- ***I 型与 II 型错误:***I 型→假阳性(数值分类为阳性,实际为阴性)。类型 II →假阴性(数值被分类为阴性,但实际上是阳性)
- 接收机工作特性(ROC): 分类问题的性能度量。ROC 曲线是不同阈值下真阳性率和假阳性率之间对比的图形表示。曲线下面积(AUC) 值为 0.5 表示随机。小于 0.5 的值意味着模型预测的是相反/倒数。 点击此处了解更多信息
FP =假阳性, FN =假阴性, P =全部阳性, N =全部阴性
- 错误率= (FP+FN)/(P+N)
- 准确度= (TP+TN)/(P+N)
- 精度= TP/(TP+FP)
- 灵敏度/召回率(真阳性率)= TP/P
- 特异性(真阴性率)= TN/N
第三节:机器学习算法
本节从较高的层面讨论常见的 ML 算法。我已经列出了我认为面试官希望你知道的几点。
决策树
- 主要用于解决分类问题,但也可用于回归问题。
- 这些树从一个根节点开始,接着是产生分支的分裂。分支然后链接到形成决策点的叶子。
- 当叶子不再产生新的分支并导致终端节点时,进行最终分类。
- 目的是让决策树尽可能小。选择一个起始变量,以最佳方式将数据分成同类组(最小化分支中的熵)。 点击此处查看示例
增压
- 将弱模型合并成一个强模型。最常见的情况是,单个决策树聚集在一起。
- 为每棵树使用随机选择的输入构建多个决策树,这些输入已经用替换进行了采样。注意:该算法并不总是必须这样做,例如,正常的梯度增强使用所有数据在增强过程的每一步建立梯度。
- 初始决策树(或其他基础算法)是数据的不良预测器,但它使用权重进行迭代。
- 基于先前树中的误分类情况,将较高的权重添加到树中;正确的分类权重较小。这种类型的提升被称为 AdaBoost ,因为它沿着细化的样本权重迭代。 点击此处了解更多信息
- 由于重复以前的错误,升压容易导致过拟合。对于包含异常值的更复杂的数据,随机森林更好(见下文)。
梯度增强
- 梯度推进不是为每棵树(或其他基本算法)选择变量的随机组合,而是选择变量来提高每棵新树的准确性。
- 算法通过在每次迭代中计算梯度来最小化定义的损失函数。
- 树是按顺序生长的(非平行),因为每棵树都是从前一棵树派生而来的。
- 重复这个过程,直到误差很小。最终结果是所有预测的加权平均值。
装袋
- 自举聚合 的简称
- 使用随机选择的输入为每棵树构建多个决策树(或其他基本算法),这些输入已经用替换进行了采样。通过平均(回归)或投票(分类)来组合结果。
- 自举分量来自对不同的树输入进行采样时固有的变化和随机性。
- 这种方法对于处理异常值和降低单个决策树发现的方差是有效的。
随机森林
- 与 bagging 相关,因为两种算法都利用了自举采样和随机化。
- 通过限制考虑的变量数量,人为地限制变量的选择。他们不能在每个分区考虑 n 个变量。
- 这意味着由于随机性,最终的树是可变的。
- 随机森林是一种弱监督学习技术,其中所有的树被一起并行训练(非顺序)。
- 建议从 100 到 150 棵决策树开始。
神经网络:
- 当一项任务对人来说很容易,但对计算机来说很难时使用。当您拥有包含复杂模式的大型数据集时也很有用。
- 第一层是输入数据(值、文本、像素等)。)并分为节点。每个节点通过网络的边缘向下一层发送信息。
- 网络中的每条边都有一个数字权重,可以根据经验进行更改。如果连接边的总和满足一个阈值,称为 激活函数 ,这将激活下一层的神经元。
- 如果它不满足阈值,则功能失败,这导致全部或什么都没有的安排。
- 边上的权重是唯一的,这阻止了相同的结果。
- 神经网络可以被监督。在这里,算法将结果与实际输出进行比较,并计算成本。降低成本,直到预测与实际产出相匹配。这是通过逐步调整网络权重直到获得最低成本来实现的。
- **反向传播:**从右边的输出层反向滚动到左边的输入层。
- 卷积(CNN): 为图像制作。接受固定大小的输入并返回固定大小的输出。非常适合图像和视频处理。
- 轮回(RNN): 为序列制作。处理任意长度的输入/输出数据。可以使用内存来处理任意序列的输入。他们使用时间序列信息(即,我最后说的话会影响我接下来说的话)。非常适合文本和语音分析。
K-最近邻聚类
- 对新数据点进行分类的监督算法。
- 类似投票制或者人气大赛。
- 选择邻居的数量( k )至关重要。过低的 k 会增加偏差,过高的 k 会使算法计算量大增。将 k 设置为奇数,这样在投票过程中就不会出现平局。
- 不适合大型数据集。
- 例如,我们正在尝试将新点分类为红色或蓝色:如果 k =3,并且新点周围的 3 个点中有 2 个是蓝色的,那么它将变成蓝色。继续这样做,并添加新的点,直到它们都被分类(分组)。
K 均值聚类
- 用于识别新数据点组的无监督算法。
- 选择一个 形心。 然后使用欧几里德距离将点分配到最近的质心。质心被更新以反映聚类的平均值。一旦没有数据点在聚类之间切换,算法就完成了。
- 用一个 小块图 (肘法)确定 k 。它比较每个总分类计数的误差平方和(SSE)。随着发现更多的簇,SSE 下降。也可以设置 k = sqrt(n/2)。
支持向量机(SVM)
- 用于回归和分类的监督算法。如果你的训练数据集中有 n 个特征, SVM 会尝试在 n 维空间中绘制这些特征,每个特征的值就是一个特定坐标的值。
- SVM 使用 超平面 根据提供的核函数分离出不同的类。超平面是帮助分类数据点的决策边界。
- 超平面的维数取决于特征的数量。如果输入特征的数量是 2,那么超平面只是一条线。如果输入特征的数量是 3,则超平面变成二维平面。当特征的数量超过 3 时,变得难以想象。
- 支持向量 是距离超平面较近的影响超平面位置和方向的数据点。使用这些支持向量,我们最大化分类器的余量。
- 在 SVM 算法中,我们希望最大化数据点和超平面之间的间隔。
- 不同的内核:线性(基地),sigmoid,径向,多项式和更多。非线性核将图抽象成更高维度,其中数据可以用平面或其他东西而不是线来分隔。
主成分分析
- 当您希望减少变量数量时使用;确保变量相互独立。
- 用于特征提取的技术 —它以特定的方式组合输入变量,然后丢弃“最不重要”的变量,同时仍然保留所有变量中最有价值的部分。
- PCA 后的每个“新”变量都是彼此独立的,这是因为线性模型的假设。
第 4 部分:额外的个人准备
除了了解上面的术语和算法,我还建议研究和准备以下内容:
- #1 最重要的——过去的项目:这绝对是你需要完成的最重要的个人准备。无论你是在争取大学实习还是在申请你的第五份新工作,你都需要能够清晰地说出你过去参与的项目。如今,经验比学位更受重视,所以熟练地交流你所做的工作不仅会展示你的沟通技巧,还会真实地展示你对工作的理解和你的能力。如果你没有可以参考或交流的项目,可以考虑在空闲时间开始一个新的项目,提供令人信服的数据集和有意义的分析。
- 了解你的简历:确保对你的简历了如指掌。视频面试时,我面前放着一份拷贝,以备不时之需。了解你的技能和成就很重要,并且能够回答任何关于它们的问题,或者提供展示它们的例子。一定不要在简历上夸大任何东西;风险远高于回报。
- **公司信息:**了解公司的规模,他们的总部在哪里,关于他们的其他办公室,他们的核心价值观和使命是什么,他们做什么类型的工作,他们的客户是谁。你可以在公司的网站上找到很多这方面的信息。我鼓励你浏览他们的网站,寻找任何你在面试中可以参考的有用信息——这将显示出你的积极主动和充分准备。向面试官证明你很适合这家公司是最重要的,所以确保你知道他们的使命并理解公司文化。
- **案例研究(如果适用)😗*我申请的那家公司在其网站上有数据科学案例研究,这些研究是由他们的员工策划的。这很有用,原因有几个。我能够 1)了解该公司的更多工作,2)在面试中简要引用这些案例研究以显示主动性,3)将这些案例研究中使用的关键词和语言与我的面试对话相匹配。
第 5 部分:要问的问题
我认为这些问题显示了你的兴趣,并且在面试结束时问这些问题很重要。总是问问题。
- 这个角色的日常工作是怎样的?
- 团队有多少人,他们是什么角色?例如,数据科学家、全栈开发人员、数据工程师、业务分析师等。
- 你喜欢在【x】、公司工作吗?你喜欢什么?
- [特定咨询]客户在哪里,我需要多久去一次他们的办公室?我多久会和他们直接交流一次?
- 面试过程的下一步是什么?
- 我什么时候能得到你的消息?
对新的数据科学职位的面试可能会很复杂。你不仅需要了解这份工作的技术方面,还需要准备好展示你的能力和对公司的了解,回答行为问题,展示能力和主动性等等——所有这些都要在一个小时左右的时间内完成。不要忘了给你的面试官发一封感谢信,如果有机会的话,就和他谈一谈你的薪水/福利。我希望这份复习资料能在你准备下一次面试时对你有所帮助。
数据科学访谈:机器学习
机器学习技术指南和 20 个挑战性问题
马库斯·温克勒在 Unsplash 上拍摄的图片
概观
这篇文章将在数据科学访谈中提供关于机器学习理论的技术指导。它并不全面,但旨在突出每个主题中的关键技术点。讨论的问题来自这个数据科学采访时事通讯,其中有来自顶级科技公司的问题,并将涉及到即将出版的书。
数学先决条件
随机变量
随机变量是概率和统计中的一个核心话题,面试官通常希望了解原理和操纵它们的基本能力。
对于任何给定的随机变量 X,它具有以下性质(下面我们假设 X 是连续的,但是类似的情况适用于离散的随机变量)。期望值(平均值)由下式给出:
方差由下式给出:
对于任何给定的随机变量 X 和 Y,协方差(关系的线性度量)由下式定义:
协方差的归一化是 X 和 Y 之间的相关性:
概率分布
概率分布有很多种,面试官通常不会测试你是否记住了每种分布的具体属性(尽管了解基本属性很有帮助),但更多的是为了让你能够将它们恰当地应用到具体的情况中。正因为如此,数据科学面试中最常讨论的一个就是正态分布,它有很多现实生活中的应用。对于单个变量,均值和方差参数的概率密度由下式给出:
对于拟合参数,有两种通用方法。在最大似然估计(MLE)中,目标是在给定似然函数的情况下估计最可能的参数:
由于 X 的值被假定为 i.i.d .,则似然函数变为:
取对数是很方便的(因为 log 是一个单调递增的函数,最大化对数似然等于最大化似然):
拟合参数的另一种方式是通过最大后验估计(MAP ),其假设先验分布。
其中以前的相似对数似然适用。
线性代数
一般来说,除非有具体的机器学习重点,否则面试官不会指望你深入钻研线性代数。然而,复习基础知识仍然是有帮助的,因为它有助于理解各种算法和理论基础。线性代数中有许多子主题,但有一个子主题值得简单讨论,那就是特征值和特征向量。在力学上,对于某些方阵 A,我们有一个向量 x 是 A 的一个特征向量,如果:
由于矩阵是线性变换,特征向量是这样的情况,即矩阵在该向量上的结果变换产生与之前相同的方向,尽管有一些比例因子(特征值)。特征值和特征向量有很多现实生活中的使用案例:例如,识别大型数据集的方向(在 PCA 中讨论),或者对于动力系统(系统如何振荡以及它将多快稳定)。
将方阵分解成其特征向量称为特征分解。注意,虽然不是所有矩阵都是正方形的,但是通过奇异值分解(SVD ),每个矩阵都有一个分解:
尽管数学细节超出了本文的讨论范围,但在技术面试之前,特征分解和奇异值分解都值得仔细研究一下。
偏差-方差权衡
由于过度拟合和模型选择的相关性,这是采访中偶尔会问到的话题。对于任何模型,我们通常都试图估计一个真实的基础:
其中 w 通常是零均值和高斯随机变量的噪声。如前所述,MLE 和 MAP 是推断参数的合理方法。为了评估模型的拟合程度,我们可以将 y 的误差分解如下:
- 偏差(这些值与真实的潜在 f(x)值的接近程度)
- 方差(基于训练输入的预测变化量)
- 不可减少的误差(由于固有的噪声观测过程
在偏差和方差之间有一个权衡,这是一个思考不同模型如何运作的有用框架。总体目标是控制过度拟合(而不是从样本中很好地概括)以产生稳定和准确的模型。
线性回归
这种方法是最常教授的方法之一,有许多现实生活中的应用,从预测房价到研究医学试验的功效。面试官问这个问题通常是为了评估你对基本公式的理解,偶尔也会评估一些理论与现实生活应用的相关性。
在线性回归中,目标是估计以下形式的 y = f(x ):
其中 X 是数据点矩阵,β是权重向量。在最小二乘法中,线性回归使残差平方和(RSS)最小,其计算公式如下:
在回归分析中,可以通过多元高斯函数使用 MLE 来估计β值:
这导致与最小化 RSS 相同的结果。对于映射上下文,可能存在β的先验,这导致岭回归,该岭回归惩罚权重以防止过度拟合。在岭回归中,目标函数变成最小化:
降维
主成分分析
这个话题在采访中不太常见,但在讨论数据预处理或特征工程时经常被提及。将数据分解成更小的变量集对于汇总和可视化数据非常有用。这个整体过程被称为降维。一种常见的降维方法是主成分分析(PCA),它将数据重构到一个较低的维度设置中。它寻找向量 x(假设它是 p 维的)的少量线性组合来解释 x 内的方差。更具体地说,我们希望找到权重的向量 w,以便我们可以定义以下线性组合:
受以下条件限制:
因此,我们有下面的过程描述,其中首先我们找到具有最大方差的第一个分量,然后找到与第一个分量不相关的第二个分量,并迭代地继续这个过程。这个想法是以 k 维结束
使用一些代数,最终结果是 X 的协方差矩阵的特征分解,由此第一主分量是对应于最大特征值的特征向量,等等。
分类
总体框架
由于现实生活中的大量应用,分类是面试中经常被问到的问题。科技公司喜欢询问如何将客户和用户分成不同的类别。
分类的目标是将给定的数据点分配到 K 个类中的一个,而不是一个连续值(如在回归中),有两种类型的模型。第一种是生成型,它对 X 和 y 之间的联合概率分布进行建模。也就是说,对于输入 X,我们希望使用以下类标签对任意数据点 X 进行分类:
X 和 Y 之间的联合分布由下式给出:
对于每个给定的 k 类,我们有:
最大化后验概率的结果意味着类之间将存在决策边界,其中所得后验概率相等。
第二种是鉴别性的,其通过选择最大化后验概率分布的类来直接学习决策边界:
所以这两种方法最终都选择了一个最大化后验概率的预测类;区别只是在方法上。
逻辑回归
一种流行的分类算法是逻辑回归,在面试中经常与线性回归一起被问到,作为一种评估分类算法基础知识的方法。在逻辑回归中,我们采用线性输出,并使用 sigmoid 函数将其转换为 0 到 1 之间的概率:
在矩阵形式中,决策如下所示,其中如果输出至少为 0.5,则 1 是目标类:
逻辑回归的损失函数是对数损失:
注意,后验模型是直接建模的,因此逻辑回归是一个判别模型。
线性判别分析
线性判别分析(LDA)在面试中不是一个常见的话题,但却是一个有趣的话题,因为它是一个生成模型,而不是判别模型(如逻辑回归)。它假设给定某个类 k,来自该类的任何数据的分布遵循多元高斯分布:
回想贝叶斯规则,最大化标签上的联合概率等同于最大化后验概率,因此 LDA 的目标是最大化:
特别是,我们有:
其中每个 k 的 f(x)是类密度函数。LDA 假设密度是多元高斯的,并且还假设协方差矩阵在所有类中是公共的。产生的判定边界是线性的(因此得名),因为也有二次判别分析,其中边界是二次的。
决策树
决策树和随机森林在面试中经常被问到,因为它们是灵活的,在实践中通常表现良好的模型。特别是,它有助于对两者如何被训练和使用,以及特征分裂如何发生(熵和信息增益)有一个基本的理解。
培养
决策树是一种可以用树的方式表示的模型,其中在每次分裂时,都有基于特征的分离,从而产生各种叶节点,由此产生结果(分类或回归)。在本次讨论中,我们将重点讨论分类设置。它们从根开始以贪婪和递归的方式被训练,其中目标是选择增加特定数据点属于哪个类的最大确定性的分裂。
熵
随机变量 Y 的熵量化了其值的不确定性,对于具有 k 个状态的离散变量 Y,由下式给出:
对于简单的伯努利随机变量,当 p = 0.5 时该量最高,当 p = 0 或 p = 1 时该量最低,这与定义直观一致,因为如果 p = 0 或 1,则结果没有不确定性。一般来说,如果一个随机变量具有高熵,那么它的分布比偏斜分布更接近均匀分布。
考虑任意拆分。我们有 H(Y)从开始的训练标签,并说我们有一些特征 X,我们想分裂。我们可以用信息增益来表征不确定性的降低,信息增益由下式给出:
该数量越大,通过在 x 上进行分割,Y 中的不确定性减少得越多。因此,一般过程是评估考虑的所有特征,并选择最大化该信息增益的特征。然后,递归地继续两个结果分支的过程。
随机森林
通常,单个决策树可能容易过度拟合,因此在实践中,随机森林通常会产生更好的样本外预测。随机森林是一种集合方法,它利用许多决策树并对它们的决策进行平均。它通过两种方法来减少过拟合和树之间的相关性:1) bagging(自举聚合),其中一些 m < n(其中 n 是总数)的数据点通过替换被任意采样并用作训练集,2)在每次分裂时考虑特征的随机子集(以防止总是在任何特定特征上分裂)。
使聚集
聚类是一个受欢迎的采访主题,因为有许多现实生活中的应用。这通常是为了数据可视化,并可用于识别异常值,这在欺诈检测等情况下很有用。这也有助于对在这种情况下如何学习参数有一个基本的了解,与先前的 MLE/MAP 方法相比。
概观
聚类的目标是将数据集划分为仅查看输入要素的各种聚类。这是无监督学习的一个例子。理想情况下,聚类有两个属性:
- 给定聚类内的点彼此相似(高聚类内相似性)
- 不同聚类中的点彼此不相似(低聚类间相似性)。
k 均值聚类
k-均值聚类将数据划分为 k 个聚类,并通过任意选择 k 个聚类中每个聚类的质心开始。迭代地,它通过将点分配到最近的聚类来更新分区,更新质心,并重复直到收敛。
数学上,K-means 通过最小化以下损失函数(给定点和质心值)来解决以下问题:
迭代过程继续,直到聚类分配更新不再促进目标函数。
高斯混合模型
高斯混合模型(GMM)是一种模型,其中对于任何给定的数据点 x,我们假设它来自 k 个聚类之一,每个聚类具有特定的高斯分布。
也就是说,在我们拥有的 K 类中:
其中,π系数是聚类的混合系数,经过归一化处理,总和为 1。设θ表示 K 个类别中每个类别的未知均值和方差参数,以及 K 个混合系数。那么可能性由下式给出:
因此对数似然是:
可以使用期望最大化(EM)来迭代计算参数,这将在下面讨论。
期望最大化
期望最大化(EM)是一种估计潜在变量参数的方法,例如上面的 K-means 和 GMMs 的两个例子,其中一些变量可以直接观察到,而其他变量是潜在的,不能直接观察到。特别是,对于聚类,聚类分配是潜在变量,因为它不是直接观察到的。一般步骤如下,以 Z 为潜变量,X 为观测变量,未知参数θ。
假设电流参数由下式给出:θ’。第一步是估计:
使用当前的参数估计。第二步是估计最有可能使数据对数似然最大化的θ*,计算公式如下:
并且迭代地继续直到收敛。
20 个机器学习面试问题
- 假设我们有一个分类器,它为特定贷款申请欺诈的可能性产生一个介于 0 和 1 之间的分数。在这种情况下:a)什么是假阳性,b)什么是假阴性,以及 c)就美元而言,它们之间的权衡是什么,以及应该如何相应地对模型进行加权?
- 假设您需要为欺诈检测生成一个二元分类器。您会查看哪些指标,每个指标是如何定义的,每个指标的解释是什么?
- 你会得到一个非常大的单词库。你如何识别同义词?
- 描述生成模型和判别模型,并分别给出一个例子。
- 什么是偏差-方差权衡?它是如何用方程式表达的?
- 定义交叉验证流程。使用它的背后动机是什么?
- 假设您正在对新上市公司的年收入进行建模。你会使用哪种功能?需要采取什么样的数据处理步骤,运行什么样的模型?
- 什么是 L1 和 L2 正则化?两者有什么区别?
- 定义函数凸的含义。一个机器学习算法不是凸的例子是什么,并描述为什么是凸的。
- 描述梯度下降和随机梯度下降背后的动机。
- 解释什么是决策树中的信息增益和熵。
- 描述助推背后的理念。举例说明一种方法,并描述它的优缺点。
- 假设我们正在运行概率线性回归,它很好地模拟了一些 y 和 x 之间的潜在关系。现在假设所有输入都添加了一些噪声ε,这与训练数据无关。新的目标函数是什么?你是怎么计算的?
- k-means 聚类中对于 k 个聚类和 n 个样本点使用的损失函数是什么?使用 1)批量梯度下降,2)使用学习率ε对聚类 k 的聚类均值进行随机梯度下降来计算更新公式。
- 假设我们使用高斯混合模型(GMM)对欺诈性交易进行异常检测,将传入的交易分为 K 类。用公式描述模型设置,以及如何评估后验概率和对数似然。我们如何确定一项新交易是否应被视为欺诈?
- 什么是期望最大化?它什么时候有用?用公式描述设置的算法。
- 阐述 SVM 背后的背景,并展示其旨在解决的优化问题。
- 在机器学习的背景下描述熵,并在数学上展示如何在假设 N 个状态的情况下最大化熵。
- 假设您正在运行线性回归,并将误差项建模为正态分布。说明在这种设置中,最大化数据的可能性相当于最小化残差平方和。
- 假设 X 是一个单变量高斯随机变量。X 的熵是多少?