数据科学家必备的统计数据
在 Unsplash 上由 Carlos Muza 拍摄的照片
统计学中最重要和最基本的概念
初学者通常会忽略最基本的统计知识。为了更好地理解不同的模型和各种技术,这些概念是必不可少的。这些是数据科学、机器学习和人工智能中涉及的各种概念的基础知识。
下面是本文涵盖的概念列表。
- 集中趋势测量
- 传播的量度
- 人口和样本
- 中心极限定理
- 取样和取样技术
- 选择偏差
- 相关性&各种相关系数
让我们开始吧!
1 —集中趋势的度量
集中趋势的度量是试图通过识别一组数据中的中心位置来描述该组数据的单个值。用作中心测量的三个最常见的值是,
— Mean 是数据中所有值的平均值。
“n”个数据值的平均值
— Median 是排序数据的中间值。中位数是比平均值更好的中心度量,因为它不受异常值的影响。
—模式是数据中出现频率最高的值。
2 —扩散的测量
分布测量描述了某一特定变量(数据项)的一组观察值的相似程度或变化程度。分布的度量包括范围、四分位、四分位间范围、方差和标准差。
—范围是数据中最小值和最大值之差。
—四分位数将有序数据集分成四个相等的部分,并引用四分之一之间的点的值。
下四分位数(Q1) 是介于最低的 25%值和最高的 75%值之间的值。它也被称为第 25 百分位。
第二个四分位数(Q2) 是数据集的中间值。它也被称为第 50 百分位,或中位数。
上四分位数(Q3) 是最低的 75%和最高的 25%之间的值。它也被称为第 75 百分位。
四分位数的分布(图片由作者提供)
四分位数范围(IQR) 是上四分位数(Q3)和下四分位数(Q1)之间的差值,描述了从最低到最高排序的中间 50%的值。IQR 通常被视为比极差更好的分布度量,因为它不受异常值的影响。
— 所有均值为μ的数据点的方差,每个数据点用 Xi 表示, N 个数由下式给出:
方差的数学公式
****标准差是方差的平方根。总体的标准偏差由 σ表示。
在分布较小的数据集中,所有值都非常接近平均值,从而产生较小的方差和标准差。数据集越分散,值就越远离平均值,从而导致更大的方差和标准差。
3 —总体和样本
- ****群体是可能的数据值的整个集合。
- 数据集的样本包含总体的一部分或子集。样本的大小总是小于被抽取样本的总体大小。
说明人口和样本的简单草图(图片由作者提供)
例如,一个国家所有人的集合是’ 人口 ‘,而一个人的子集是’ 样本 '通常小于人口。
4 —中心极限定理
中心极限定理是概率论中的一个关键概念,因为它意味着适用于正态分布的概率和统计方法可以适用于许多涉及其他类型分布的问题。
CLT 表示,“使用足够大的样本量从总体中取样,样本的平均值,即样本平均值,将是正态分布的。不管人口分布如何,都是如此。”
不管总体的分布如何,抽样分布都是正态的。(图片来自维基百科)
其他来自 CLT 的 acumens 是,
- 样本均值以概率收敛,并且几乎肯定收敛于总体均值的期望值。
- 总体的方差等于样本的方差与每个样本中元素数量的乘积。
5—取样和取样技术
抽样是一种统计分析技术,用于选择、操作和分析数据点的代表性子集,以识别所观察的较大数据集中的模式和趋势。
从数据中抽取样本有许多不同的方法;理想的取决于数据集和手头的问题。常用的取样技术如下:
- ****简单随机抽样:在这种情况下,样本中的每个值都是完全随机选择的,总体中的每个值都有同等的机会或概率被选中。
- ****分层抽样:在这种方法中,首先将人群分成具有相似特征的亚组(或阶层)。当我们可能合理地预期不同子群之间的兴趣测量不同,并且我们想要确保所有子群的代表性时,使用它。
- ****整群抽样:在一个整群样本中,总体的子群被用作抽样单位,而不是单个数值。人群被分成称为集群的子群,这些子群被随机选择包括在研究中。
- ****系统抽样:每隔一段时间从抽样框中选取一个数值。选择间隔以确保足够的样本量。如果你需要一个样本大小为 x 的总体中的 n 的样本,你应该选择每个 x/n 个体作为样本。
6 —选择偏差
选择偏倚(也称为抽样偏倚)是由于总体中的非随机样本引起的系统误差,导致总体中的一些值比其他值更不可能被包括在内,从而产生有偏倚的样本,其中所有的值不是同等平衡或客观表示的。
这意味着没有实现适当的随机化,从而确保获得的样本不能代表要分析的人群。
在一般情况下,仅靠现有数据的统计分析无法克服选择偏差。通过检查相关性可以评估选择偏差的程度。
7 —相关性
简单地说,相关性是衡量变量(或特征或样本或任何组)相互关联程度的一个指标。几乎在任何数据分析中,数据科学家都会比较两个变量以及它们之间的关系。
以下是最广泛使用的相关技术,
- 协方差
- 皮尔逊相关系数
- 斯皮尔曼等级相关系数
1.协方差
对于两个样本,比如说 X 和 Y ,设 E(X),E(Y) 分别为 X,Y 的平均值,‘n为数据点的总数。X,Y 的协方差由下式给出:
X,Y 的协方差的数学公式
协方差的符号表示变量之间线性关系的趋势。
******
当协方差(X,Y)分别为正和负时,X,Y 的示例图(图片来自维基百科**
2.皮尔逊相关系数
皮尔逊相关系数是一种统计量,它也测量两个特征之间的线性相关性。对于两个样本,X,Y 设σX,σY 分别为 X,Y 的标准差。X,Y 的 PCC 由下式给出:
X,Y 的 PCC 的数学公式
它的值介于-1 和+1 之间。
******
PCC 值分别在-1 和 0、0 和+1 之间的变量样本图** **
值分别为 PCC -1,0,1 的变量样本图**
3.斯皮尔曼等级相关系数
*斯皮尔曼等级相关系数(SRCC)评估两个样本之间的关系可以使用*单调函数(无论线性与否)描述的有多好,其中 PCC 只能评估线性关系。
两个样本之间的 Spearman 等级相关系数等于这两个样本的等级值之间的 Pearson 相关系数。 Rank 是变量内观测值的相对位置标签。
直观地说,当两个变量之间的观测值具有相似的等级时,两个变量之间的 Spearman 等级相关系数会很高,而当两个变量之间的观测值具有不同的等级时,该系数会很低。
Spearman 等级相关系数位于+1 和-1 之间,其中
- 1 是一个完全正相关****
- 0 是不相关****
- —1 是一个完美负相关****
要了解更多相关技术以及何时使用哪种技术,请查看下面的文章。
简单地说,相关技术
medium.com](https://medium.com/towards-artificial-intelligence/looking-for-connections-in-your-data-correlation-techniques-come-to-rescue-53121a149f96)
谢谢你的阅读。我也将在未来写更多初学者友好的帖子。请在媒体上关注我,以便了解他们。我欢迎反馈,可以通过 Twitter ramya_vidiyala 和 LinkedIn RamyaVidiyala 联系我。快乐学习!**
数据科学家应该知道软件工程的最佳实践
意见
成为不可或缺的数据科学家
在 Unsplash 上拍摄的 ThisisEngineering RAEng
介绍
我一直在急切地研究、与朋友交谈并测试一些新的想法,这些想法将有助于使我成为一名更不可或缺的数据科学家——当然,如果不与帮助我取得进展的人分享,我就无法尝试在职业生涯中取得进展(如果你不知道,那就是你们!)
最近,我在我的 LinkedIn 个人资料上进行了一项民意调查,我惊讶地发现,有这么多的人认为数据科学家必须了解编程标准并遵循工程最佳实践。
图 1:投票结果
统计学家经常对许多数据科学家(包括我自己)缺乏基本的统计知识感到失望。数学家认为,在应用之前,必须对各种情况下应用的原理有一个坚实的理解,我承认我没有。软件工程师希望数据科学家在遵循基本编程原则的同时进行他们的实验。
最刺痛我的是,每个“是”投票者目前都是数据科学家,他们中的许多人(在投票时)担任领导职务——包括 4x Kaggle 特级大师 Abhishek Thakur 这样的人。好吧,我承认,你想要的角色决定了需要对统计学和概率、线性代数、微积分等其他数学概念有多深的理解——虽然基础是绝对必要的——但是软件工程实践呢?
我曾经是数据科学家之一,认为我们仅仅是数据科学家,而不是软件工程师,因此我们的责任是从数据中提取有价值的见解,这仍然是一个事实,但是这次调查打破了我的思维模式,让我陷入了深刻的思考…
当职位名称是数据科学家时,为什么我必须知道软件工程的基础知识?
我记得自己的目标——成为一名不可或缺的数据科学家。我是不是在说,如果我不知道/不学习软件工程的基础,我就不是不可或缺的? 嗯,嗯。基本上 —注意,这种说法是假设的,例如你是一名数据科学家,正在编写最有可能投入生产的代码。
在这一点上,我已经策划了一个软件工程的基本原则,应该适用于数据科学家的事情列表。由于没有软件工程背景,我咨询了许多软件工程师朋友来帮助我列出清单,并教我如何编写更好的产品代码。
以下是数据科学家应该知道的一些最佳实践:
干净的代码
注意:我想首先向 R 用户道歉,因为我没有对 R 中的编码做太多研究,因此许多干净的代码技巧主要是 Python 用户提供的。
我学习的第一门编程语言是 Python,因为我英语说得很流利,对我来说 Python 和英语非常相似。从技术上来说,这指的是 Python 编程语言的高可读性,这是 Python 的设计者在认识到代码被读的次数比被写的次数多之后有意实现的。
当一个经验丰富的 Python 开发人员(Pythonista)称部分代码不是“Python 化的”时,他们通常意味着这些代码行没有遵循通用的准则,并且没有以被认为是最好的(听起来:最可读的)方式表达其意图。—Python 的搭便车指南
我将列出一些构成干净代码的因素,但我不打算说得太详细,因为我相信有许多很好的资源比我更好地涵盖了这些主题,例如 PEP8 和Python 中的干净代码:
- 有意义和可发音的命名约定
- 清晰胜过一致
- 可搜索的名称
- 让你的代码易于阅读!
记住,不仅别人会阅读你的代码,你也会,如果你不记得什么意思,那么想象一下别人会有什么希望。
模块性
沃洛季米尔·赫里先科在 Unsplash 上拍摄的照片
这可以部分归咎于我们学习数据科学的方式。如果一个数据科学家不能旋转 Jupyter 笔记本并开始做一些探索,我会感到惊讶。但这就是 Jupyter 笔记本的全部用途,**实验!**不幸的是,许多关于学习数据科学的课程并没有很好地将我们从 Jupyter 笔记本转移到脚本,而脚本对于生产环境来说要有效得多。
当我们谈到模块化代码时,我们指的是被分成独立模块的代码。有效地执行,模块化允许包装,测试和可维护的代码,可重复使用。
在下面链接的视频中,Abhishek Thakur 为 Kaggle 比赛制造了一台机器学习包,这是我第一次接触模块化。过去,我也曾听 Abhishek 提到,他学习模块化和软件工程最佳实践的方法是通读 Github 上的 Scikit Learn 代码。
有助于编写好的模块化代码的其他一些东西是:
- Don tREPE atYyourself(DRY)——不要重复你自己(DRY,或者有时不要重复你自己)是软件开发的一个原则,旨在减少软件模式的重复,用抽象代替它或者使用数据规范化来避免冗余。(来源:维基百科)
- 单一责任原则(SRP)——单一责任原则(SRP)是一项计算机编程原则,它规定计算机程序中的每个模块、类或函数都应该对程序功能的一个部分负责,它应该封装这个部分。(来源:维基百科
- 开闭原则——在面向对象编程中,开闭原则陈述“软件实体(类、模块、函数等)”。)应该对扩展开放,但对修改关闭”;也就是说,这样的实体可以允许其行为被扩展,而无需修改其源代码。(来源:维基百科)
重构
代码重构可以被定义为在运行时不改变代码的外部行为的情况下,重构现有的代码的过程。
重构旨在改进软件的设计、结构和/或实现(其非功能性属性),同时保留其功能性。— 维基百科%2C%20while%20preserving%20its%20functionality.&text=By%20continuously%20improving%20the%20design,and%20easier%20to%20work%20with.)
重构我们的代码有许多优势,例如,提高我们代码的可读性和降低复杂性,这反过来导致我们的源代码更容易维护,并且我们配备了内部架构,提高了我们编写的代码的可扩展性。
此外,我们不能在不谈论提高性能的情况下谈论代码重构。我们的目标是编写一个执行速度更快、占用内存更少的程序,尤其是当我们有一个终端用户要执行某个任务时。
有关 Python 中重构的更多信息,请参见下面的链接!
[## 为简单性重构 Python 应用程序——真正的 Python
你想要更简单的 Python 代码吗?你总是带着最好的意图、干净的代码库和漂亮的…
realpython.com](https://realpython.com/python-refactoring/)
测试
照片由 Antoine Dautry 在 Unsplash 上拍摄
注意:在部署机器学习模型 udemy 课程中,我简要了解了测试(以及这篇文章中涉及的大多数其他想法)。
数据科学是一个有趣的领域,从某种意义上说,即使我们的代码中有错误,我们的代码仍然可以运行,而在软件相关的项目中,代码会抛出一个错误。因此,我们最终会得到误导性的见解(也可能没有工作)。因此,测试是必要,如果你知道如何做,你的价格就会上涨。
以下是我们进行测试的一些原因:
- 确保我们获得正确的输出
- 更容易更新代码
- 防止将损坏的代码投入生产
我相信还有更多原因,但现在我就说到这里。查看下面的链接,了解更多关于测试的信息。
在这篇深入的教程中,您将看到如何创建 Python 单元测试,执行它们,并在您…
realpython.com](https://realpython.com/python-testing/)
代码审查
奥比·费尔南德斯在 Unsplash 上的照片
代码评审的目的是通过推广最佳编程实践来提高代码质量,从而使代码为生产做好准备。此外,这对每个人都有好处,因为它往往会对团队和公司文化产生积极影响。
代码审查的主要原因是捕捉错误,尽管审查对于提高可读性以及确保符合编码标准非常有用。
一篇更深入的真正伟大的文章链接如下…
互联网提供了大量关于代码评审的材料:关于代码评审对公司文化的影响,关于正式的…
medium.com](https://medium.com/palantir/code-review-best-practices-19e02780015f)
包裹
公平地说,这肯定是一大堆要学的东西,但出于同样的原因,它增加了数据科学从业者的价值。能够快速制作一台 Jupyter 笔记本已经不足以让你成为一名数据科学家,因为每个人都可以做到这一点。如果你想高于平均水平,你必须做高于平均水平的事情,在这种情况下,可能需要学习软件工程的最佳实践。
让我们继续 LinkedIn 上的对话…
[## Kurtis Pykes -人工智能作家-走向数据科学| LinkedIn
在世界上最大的职业社区 LinkedIn 上查看 Kurtis Pykes 的个人资料。Kurtis 有两个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/kurtispykes/?originalSubdomain=uk)
数据科学家:21 世纪最肮脏的工作
40%是吸尘器,40%是清洁工,20%是算命师
根据哈佛商业评论,数据科学家拥有 21 世纪最性感的工作。在大数据的世界里,他们采用人工智能/深度学习方法,发现无价的商业见解。
对我来说,拥有“数据科学家的头衔已经五年了,我仍然没有完全弄清楚我的哪一部分是性感的。除了可能是我新烫的头发让我看起来像个韩国 Oppa ( 通常用来指韩剧男主角)。
事实上,云的出现和企业向互联网的转移导致了数据的爆炸。这推动了一些行业对数据科学家的需求和短缺。
但是数据科学家的工作每天都需要做些什么呢?
我们可以通过分析 LinkedIn 上的招聘信息来找到这个问题的答案。我给你总结一下比较受欢迎的:
- 了解业务和客户,验证假设
- 建立预测模型和机器学习管道,执行 A/B 测试
- 对业务利益相关者进行概念化分析
- 开发算法以支持商业决策
- 试验和研究新技术和方法,以提高技术能力
这些听起来很性感,不是吗?
除非你的工作包括处理 Kaggle 数据集,否则这些工作描述只是数据科学家的一小部分。
CrowdFlower 的以下调查结果总结了数据科学家典型的一天:
数据科学家花最多时间做的事。【摘自众筹
从上面的图表中可以看出,数据科学家的大部分时间都花在了收集数据集、清理和组织数据上。
21 世纪的高性能数据真空
数据湖是存储公司所有数据的集中存储库。它们使组织能够使用这些数据来建立机器学习模型和仪表板。不幸的是,有些人认为数据湖是数据转储场,或者是一个超级大的硬盘驱动器。
许多组织在不清楚如何处理收集的数据的情况下开始实施数据湖。“让我们收集所有的东西吧,”他们说。虽然数据湖的目的是将公司的所有数据放在一个地方,但根据具体项目需求设计数据湖仍然是至关重要的。不做计划几乎就像创建一个新的“无标题文件夹,然后将公司的全部数据复制粘贴到那里。
当您将桌面视为数据转储地时
从历史上看,糟糕的规划导致很少甚至没有定义良好的元数据,这使得任何人都难以搜索(和找到)他们需要的数据。数据科学家经常发现自己为了数据联系不同的部门。他们可能需要从各种数据所有者那里寻找有关数据的信息。仅仅存储数据而不进行分类是一个很大的错误。拥有一个有用的数据湖的关键是确保元数据定义良好。
由于数据治理或数据所有者的繁忙,他们通常是来自不同部门的利益相关者,可能需要数周时间才能获得重要数据。等待游戏结束后,数据科学家可能会发现数据是不相关的,或者有严重的质量问题。
当数据科学家最终获得数据时,他们需要花费大量时间来探索和熟悉它。他们必须将杂乱的数据重新组织成新的表格,以符合他们的项目需求。
Oleksii Hlembotskyi 在 Unsplash 上拍摄的照片
21 世纪的高需求数据看门人
每个和数据打交道的人都应该听说过“*脏数据”*这个术语。脏数据破坏了数据集的完整性。脏数据的一些特征是不完整、不准确、不一致和重复数据。
数据不全是一些本质特征为空的时候。比如说你的任务是预测房价。让我们假设房子的区域对于做出一个好的预测是至关重要的,但是它不见了。这对你来说可能很有挑战性,你的模型可能表现不好。
不准确和不一致的数据是指这些值在技术上是正确的,但在上下文中是错误的。例如,当一个雇员改变了他的地址,它没有更新。或者有许多数据副本,而数据科学家得到的是一个过时的版本。
重复数据是常见问题。给大家分享一个我在电商公司工作时发生在自己身上的故事。根据设计,当访问者点击“领取优惠券”按钮时,网站会向服务器发送响应。这使我们能够衡量收集优惠券的用户数量。
这个网站运行得很好,直到有一天发生了变化,而我对此一无所知。前端开发人员增加了另一个当有人成功收集凭证时的响应。理由是一些代金券可能缺货。他们想跟踪点击按钮的访问者和收集优惠券的人。
此时,两个响应被发送到同一个日志表。看着我的报告工具,收集的凭证数量似乎在一夜之间翻了一番!由于我在前一天已经部署了一个模型,所以我认为我的新模型就是那么令人印象深刻。我记得给了我的小模型一个精神上的起立鼓掌,但后来,我意识到这只是重复计算。
此外,在过去五年作为一名数据科学家,我收到的一些数据是由公司员工手工输入的。这些数据在 Excel 电子表格中;许多是不准确、不完整和不一致的。
无论数据来自人工输入还是机器日志,数据争论是现实世界中发生的很大一部分。数据科学家必须处理它。为了让监督学习发挥作用,我们需要可靠的、有标签的数据。除非数据被正确标注,否则无法建立预测模型。但是没有人喜欢给数据贴标签。
许多人将此描述为 80/20 法则。数据科学家只花 20%的时间建立模型,其余 80%的时间收集、分析、清理和重组数据。脏数据是典型数据科学家工作中最耗时的方面。
需要指出的是数据清理非常重要;杂乱的数据不会产生好的结果。你可能听说过这样一句话,“垃圾进*,垃圾出*”。
数据科学家在数据中游泳时确实会有所发现,但在数据科学家开始训练任何模型之前,他们必须首先成为数据管理员。数据需要清理,数据需要标记。
奥利弗·黑尔在 Unsplash 上拍摄的照片
我是一名数据科学家…
我不觉得我的工作性感。我 40%是吸尘器,另外 40%是看门人。
还有最后的 20%……一个算命的。
如何跟上最新最酷的机器学习进展
towardsdatascience.com](/7-essential-ai-youtube-channels-d545ab401c4) [## 如何用机器学习改善假期行程
用这个超棒的策略完善你的旅行计划——省时、省力、省钱!
towardsdatascience.com](/how-to-improve-holiday-itinerary-with-machine-learning-6b3cd3c79d1)
数据科学家与业务分析师。区别就在这里。
意见
他们有多大不同?他们有什么共同的特点?
Jonas Leupe 在Unsplash【1】上的照片。
目录
- 介绍
- 数据科学家
- 商业分析员
- 差异
- 类似
- 摘要
- 参考
介绍
虽然你可能没有必要像比较数据工程或机器学习一样比较数据科学和业务分析,但这两个角色之间仍然有惊人的大量重叠。许多共同的目标也是一样的。然而,如何才是区别它们的地方。此外,这两个角色在技能、概念和目标方面都有一些模糊之处,从而提供了更多的重叠。下面,我将从我个人的角度概述这两种立场的细节,以及它们的相似之处和不同之处。
数据科学家
由 Vlad Tchompalov 在Unsplash【2】上拍摄的照片。
数据科学家是利用机器学习算法从数据中创建模型,最终帮助企业提高效率的人。成为一名数据科学家需要具备哪些主要技能,以及他们各自的目标?
数据科学家的主要技能包括但不限于:
技能
- Python、R、SAS 和 SQL ( 或某种形式的数据争论)
- Jupyter 笔记本
- 面向对象编程
- 机器学习算法
- 解决问题
- 了解业务
- 理解数据
- 向利益相关者传达业务问题
- 传达可能的解决方案
- 结果和影响的交流
如您所见,数据科学既涉及技术,也涉及软技能。仅仅成为一名程序员或统计学家是不够的,还需要能够交流建立问题陈述、开发问题陈述以及向业务部门分享相应解决方案的过程。
数据科学家的主要目标包括但不限于:
目标
- 提高业务效率
- 使解决方案更加准确
- 降低解决方案的成本
您可以看到,这里的目标都不一定是技术性的,它们只是最终以某种方式改进业务的要点。然而,你达到目标的方法需要专业技术。
商业分析员
在Unsplash【3】上 Marten Bjork 拍摄的照片。
也许业务分析师和数据科学家最大的相似之处在于描述角色的词语本身。数据科学家被期望在他们的角色中执行业务分析,因为这本质上决定了他们的数据科学目标。一个业务分析师可能不会关注机器学习算法来解决业务问题,而是关注表面异常、变化和趋势,以及业务的关键兴趣点。
业务分析师的一些关键技能是:
技能
- 擅长
- SQL ( 有时是)
- MS Office ( 以及)
- 熟悉可视化工具( Tableau、Looker、Google Data Studio 等)。)
- 质量保证
- 解决问题
- 分析思维
- 信息技术
- 预测
- 会见利益相关方
- 会见数据科学家和产品经理
这里的技能包括用于分析性地回答问题的工具。在这个角色中同样重要的是解决问题和突出业务改进的关键领域的能力。
以下是对业务分析师的一些期望目标:
目标
- 确定 KPI(关键绩效指标)
- 浮出水面的见解
- 使用数据解决公司内部的问题
这里的目标更广泛,最终是指利用数据来帮助业务。
差异
Sylvie charron在Unsplash【4】上拍摄的照片。
当然,这两个角色之间有一些关键的区别。最大的区别之一是机器学习仅用于数据科学家。另一个不同之处是,业务分析师比数据科学家更有可能与利益相关者沟通(有时数据科学家的工作可能更低调,不需要 那么多 会议)。这里有一个总结,你可以从中发现这些职位之间的差异。
差异
- 数据科学融合了机器学习算法
- 数据科学涵盖了更多的功能工程
- 业务分析师交流并展示更多的发现(通常是)
- 业务分析师使用不同的工具,这些工具并不总是需要编程
- 数据科学需要更侧重于软件工程的背景
- 数据科学往往比业务分析更具预测性
- 然而,业务分析确实需要预测,但也更重视汇总和描述性指标
- 所需的学校教育或培训不同/更专业
类似
Jonny Clow 在Unsplash【5】上拍摄的照片。
这两个角色有着共同的目标。每一种都需要使用类似的工具深入研究数据。沟通的过程也是类似的——与公司的利益相关者一起检查业务问题、解决方案、结果和影响。这里总结了数据科学家和业务分析师之间的主要相似之处。
类似
- 使用数据
- 解决业务问题
- 与利益相关者合作
- 使用像 Tableau 这样的可视化工具
- 分析过去的数据,为新数据提供信息
- 预测建模
摘要
这两种角色因公司而异。保持不变的是每个角色的目标和影响。也许最大的区别是你如何得到解决方案或表面发现的方法。一些业务分析师可能会发现自己最终会成为数据科学家,反之亦然。这取决于你对完成工作所需的技能和工具的偏好。
感谢您的阅读!我希望你觉得这篇文章既有趣又有用。请随意在下面评论您发现或体验到的数据科学和业务分析之间的一些相似之处和不同之处。
如果你想看我写的关于数据科学家和数据工程师的区别(以及相似之处)的文章,这里有链接[6]:
这两个角色之间的主要相似之处和不同之处将在下面概述和讨论。
towardsdatascience.com](/data-scientist-vs-data-engineer-heres-the-difference-14f7798e3432)
参考
[1]照片由 Jonas Leupe 在Unsplash(2019)上拍摄
[2]Vlad Tchompalov 在 Unsplash 上拍摄的照片,(2019)
[3]照片由 Marten Bjork 在Unsplash(2018)拍摄
[4]Sylvie charron 在 Unsplash 上拍摄的照片,(2019)
[5]照片由 Jonny Clow 在 Unsplash 上拍摄,(2018)
[6] M.Przybyla,数据科学家 vs 数据工程师。区别就在这里。(2020 年)
数据科学家 vs 数据分析师面试。区别就在这里。
面试指南。
塞巴斯蒂安·赫尔曼在 Unsplash 上的照片。
目录
- 介绍
- 数据科学家访谈
- 数据分析师访谈
- 异同
- 摘要
- 参考
介绍
Medium 上的许多读者都希望成为数据科学家或数据分析师,因此对每个职位的面试流程都很感兴趣。以我的经验,我已经面试过几家公司的这两个职位。下面,我将详细介绍这两个角色的流程,并强调它们的相似之处和不同之处。
数据科学家访谈
数据科学家有望在其公司实现手动流程的自动化。使用 sklearn 和 TensorFlow 等库中的机器学习包,数据科学家将摄取数据,清理数据,训练和评估模型,并为最终用户输出建议或预测。一些过程集中于编码和算法,而另一部分过程集中于软技能,如开发业务问题和向最终用户解释结果。你将使用像 Jupyter Notebook 这样的工具和像 Python 和 R(有时是 SAS)这样的编程语言。
数据科学家面试可能会令人生畏,让人不知所措,但通过我下面概述的步骤,我希望能对这个过程有所启发,让你在下一次数据科学家面试中更加自信。
总的来说,这个过程包括招聘人员和招聘经理的电话筛选。然后,与团队会面进行概念和编码面试(一些面试不包括编码,而是需要对您将来在公司可能遇到的常见业务问题进行评估)。接下来,您将向另一位数据科学家或高级产品经理等高层领导成员解释您的发现。最后,你要总结你从之前的面试中学到的所有东西,并列出你最适合这个职位的理由。
数据分析师访谈
数据分析师可以查询数据库表,执行连接、子查询,并报告数据请求。您将与几个利益相关者一起收集每个请求的需求。您将使用类似 SQL 和 PostgreSQL 或其他查询平台的工具,以及 Tableau、PowerBI 和其他仪表板工具。
数据分析师访谈将分享相当多的类似步骤,尤其是在整个流程中。然而,差异和独特之处在于面试的概念和编码挑战。你应该和你的招聘人员和招聘经理通电话。然后,您将与团队中的其他数据分析师会面,讨论数据库等关键概念。之后,您将执行一个编码挑战,通常包含一些常见的 SQL 问题,需要您加入和子查询。接下来,您将向另一位数据分析师或利益相关者(如客户成功经理)解释结果。最后,你将向招聘经理讨论你之前的面试以及你对这个团队的看法,并概述为什么你应该成为这家公司的数据分析师。
异同
照片由 Maranda Vandergriff 在Unsplash【2】上拍摄。
流程
正如您将在下面看到的,数据科学和数据分析面试有一个相似的流程。虽然过程可能是相似的,但是过程的细节可能是不同的,我将在后面提到这一点。以下是面试过程中各个步骤的共性:
共性
- 初始招聘人员电话屏幕—与招聘人员通话
- 招聘经理屏幕——与你未来的招聘经理通话
- 专家概念访谈—每个角色的专家(您将参与的团队中的另一名数据科学家和数据分析师)
- 专家编码面试—每个角色的专家(您将参与的团队中的另一名数据科学家和数据分析师)
- 领导访谈—向非技术用户解释结果
- 招聘经理最终面试——总结为什么你认为自己非常适合这个职位
常用工具:SQL、Tableau 和吉拉(票务平台)
差异
虽然流程是相同的,但主要的区别通常在于流程的专家部分。
—专家概念访谈
**Data Science:** Common machine learning algorithms like random forest and logistic regression for exampleCommon buckets of machine learning and data science like unsupervised vs supervised learning**Data Analyst:**Differences between joins like inner, outer, left, and right joinsSub-queriesIndexingGroup byWhere clauses
—专家编码面试
**Data Science:**Programming in Python (for loops, arrays, and functions)Programming in RProgramming and commenting code in a Jupyter NotebookSometimes, instead of a coding interview, you will have a take-home assignment that will require merging of data, exploratory data analysis and cleaning, model building, and output and explanation of results**Data Analyst:**SQL queringTableau (not coding, but a specific skill where you will need to know common functions and calculations in the popular interface)
—领导访谈
**Data Science:**Explaining models and its predictions to non-technical users**Data Analyst:**Explaining a query and its results to non-technical users
摘要
正如你所看到的,这些角色和他们各自的面试过程之间的相似之处可能比你想象的要多得多。许多相似之处源于整个面试过程,以及一些常用工具,如 SQL。其他相似之处是你在开发新项目和会见不同的利益相关者时需要知道的软技能。毫不奇怪,这些角色在专业方面存在重大差异,例如,对于数据分析师来说,更复杂的 SQL 查询和 Tableau 报告;对于数据科学家来说,则侧重于决策树和时间序列等常见机器学习算法的理论,以及用 Python 编写一些典型函数和 for 循环,这些都是您在未来的角色中会用到的。
如果您想了解数据科学家面试流程,请点击此处查看我的另一篇文章[3]:
以下是获得这份工作的方法。
towardsdatascience.com](/so-you-want-to-be-a-data-scientist-d42848c47895)
我的个人资料中还有更多关于数据科学和数据分析的文章[4]:
阅读 Matt Przybyla 在媒体上的文章。SMU 大学数据科学硕士。专业数据科学家。作者-面向数据…
medium.com](https://medium.com/@datasciencehacker)
我希望这篇文章对你有用而且有趣。感谢您的阅读!
参考
[1]照片由 Sebastian Herrmann 在Unsplash(2019)上拍摄
[2]图片由 Maranda Vandergriff 在 Unsplash 上拍摄,(2019)
[3] M.Przybyla,所以你想成为一名数据科学家?,(2020)
[4] M.Przybyla,中型剖面图,(2020 年)
数据科学家 vs 数据工程师。区别就在这里。
意见
这两个角色之间的主要相似之处和不同之处将在下面概述和讨论。
克里斯蒂娜@ wocintechchat.com 在Unsplash【1】上的照片。
目录
- 介绍
- 数据科学
- 数据工程
- 摘要
- 参考
介绍
在我们开始之前,让我们承认这些角色因公司而异。尽管如此,数据科学家和数据工程师的每个特定角色仍然有一些通用的主题来区分他们。简单来说,每个角色的技能和工具可以看到大量的重叠,但概念和目标有很大的不同。我将更详细地讨论这两个职位之间的技能、概念、相似性和差异。请阅读下面关于数据科学和数据工程的讨论;是什么让它们相似,又是什么让它们不同。
数据科学
定义数据科学家角色的一些关键技能和概念是什么?有很多要讨论的,所以我将包括一些我个人工作过的或者在几个职位描述中看到的。数据科学家可以有不同的定义,有不同的观点,但对我来说,我认为数据科学家是一个利用数据和机器学习算法来有效解决业务问题的人。因此,根据这一定义,我将讨论相关的技能。
以下是数据科学以及数据工程方面的技能、概念、相似性和差异。
对于技能,这些用于查询数据、清理数据、应用转换、为机器学习算法准备数据,以及可视化探索性数据分析和数据科学模型的结果。数据科学家也经常使用像 Jupyter Notebook 这样的平台(或其他类似的平台)来进行研究,包括代码和注释,以一种很好的方式来可视化和组织他们正在进行的工作。
技能
- Python、R、SQL 和 SAS
- Jupyter 笔记本
- 可视化——Tableau、Google Data Studio、Looker 等。
下面的这些概念是要记住的,因为数据科学不仅仅是代码和编程,而是帮助解决业务问题的角色。效率和省钱是相辅相成的,对于数据科学家来说尤其如此。这些对于任何角色都是有用的,但对于数据科学来说,目标是从机器学习算法的好处中自动化一个过程。反过来,这种模式将节省资金和时间。您需要知道特定算法是如何工作的,这样您也可以优化最佳算法。了解统计数据是很重要的,尤其是当你对一个产品进行 A/B 测试和设置实验时。
在数据科学中,最重要的是沟通能力。在查看公司数据并开始数据科学模型构建流程之前,您很可能需要与产品经理或利益相关方一起检查业务中的弱点。
概念
- 统计数字
- 建立业务问题
- 用模型解决这个问题
- 效率
- 省钱
- 算法如何工作
- 沟通
下面这些相似之处是两个角色都使用的技能和工具。两者主要使用的是帮助部署数据科学模型的编程语言和工具。根据公司的不同,数据科学家可能会在部署方面做更多的工作,数据工程师也是如此。
与数据工程的相似之处
- Python,R,SQL
- 协作/跨职能
- 气流
- 火花
- 自动警报系统
下面的差异概述了数据工程师如何关注数据的维护和开发,以及他们如何使模型或数据变得可集成。
与数据工程的差异
- 不需要知道机器学习算法的绝对细节
- ETL 过程
- 大数据管道和架构
- API 集成
数据工程
在一些公司,数据工程围绕数据科学过程工作,但它也可以完全独立。我将更多地讨论这两个角色和过程之间的关系。在数据科学家执行其模型构建流程之前,他需要数据。数据工程师可以帮助数据科学家(和业务中的许多其他人)收集、接收、转换和加载数据,并将其转换成可用的格式。数据库通常由数据工程师建立或增强。帮助推动数据科学模型的建议或预测的过程有时也是由数据工程师构建的。例如,数据工程师可以使用服务来存储训练和测试数据以及可以注入到新数据库表中的模型结果。
值得注意的是,有时数据工程师可以扮演机器学习操作工程师(MLOps)的角色。同样,软件工程师可以担任数据工程师或 MLOps 工程师——这真的取决于公司。
下面是数据工程的技巧和概念。相同点和不同点与上一节相同,但分别颠倒过来。
就技能而言,他们甚至与数据科学家有相似之处。然而,更多的是每个角色所关注的内容。例如,数据科学家使用 SQL 作为他们的角色,但是他们通常不创建表。
技能
- 更侧重于 SQL
- 可以期望了解或使用另一种编程语言,如 Java
- 库伯内特斯
- 码头工人
对于概念,数据工程师可能不需要处理模型本身——例如,调整参数、发现模型的新特性以及考虑模型的准确性,但是他们仍然需要熟悉模型,以便能够帮助集成。这里需要注意的是,一些数据工程师根本不接触数据科学模型。还是那句话,要看公司。
如果对数据科学和数据工程角色有任何困惑,最好的事实来源是招聘经理——他会不合时宜地安排你日常工作的基础,以及你是否更注重 SQL、Python 或机器学习部署的期望。此外,这将取决于公司的需求在哪里和是什么。
概念
- 与服务的集成
- 数据管道
- 数据库
摘要
数据科学和数据工程共享的不仅仅是文字数据。技能和工具在两个角色之间是共享的,而不同之处在于每个角色各自的概念和目标。例如,数据工程师将使用 Python 以及数据科学家(或另一种编程语言),但数据工程师将使用 Python 进行脚本或集成,而数据科学家将使用 Python 访问 Pandas 库以及其他 Python 包来执行 ANOVA 以测试统计显著性。
我希望我已经向您介绍了这两个非常相似但又不同的角色的定义。这些职位变化的原因可能是因为数据科学是一门较新的学科,因此数据工程师可以像过去一样专注于更多的数据 ETL 工作,或者他们也可以与数据科学家合作来帮助构建和部署模型。
欢迎在下面发表评论,讨论作为一名数据科学家或数据工程师,你需要具备哪些技能。也许作为一名数据工程师,您根本不使用数据科学模型,而是纯粹专注于数据仓库,或者您实际上专注于从 SQL 查询中严格创建功能,这些功能最终将被注入到由数据科学家测试的机器学习算法中。
感谢您的阅读!
参考
[1]照片由克里斯蒂娜@ wocintechchat.com在Unsplash(2019)上拍摄
[2]照片由 Ioan F 在Unsplash(2020)上拍摄
[3]照片由杰弗逊·桑托斯在 Unsplash 上拍摄,(2017)
数据科学家 vs 高级数据科学家。区别就在这里。
两种立场的异同
照片由克里斯蒂娜@ wocintechchat.com 拍摄。
目录
- 介绍
- 数据科学家
- 高级数据科学家
- 摘要
- 参考
介绍
本文面向希望在职业生涯中获得提升的当前数据科学家,以及将职业生涯转向数据科学领域并希望了解高级角色的界限和定义的人。值得注意的是,不是每个工作场所或公司都会提供这两个职位;然而,如果你满足高级数据科学家的特征,你也许能够向你的公司证明,为什么获得这个头衔对你和他们来说是值得的。
高级数据科学家的职位不仅仅意味着你是一个有一定经验的数据科学家。相反,这是一个需要对你的数据科学或机器学习模型对你工作的企业的影响承担不同责任的职位。
这两个职位不仅有关键的区别,而且每个角色的机器学习、商业智能和产品管理的数量也有一些有趣的区别和重叠。下面,我将讨论我在这两个职位上的经历以及区分这两个头衔的参考资料。
数据科学家
照片由克里斯蒂娜@ wocintechchat.com拍摄。
数据科学家是定义业务问题、提取数据、执行探索性数据分析、开发机器学习模型,并最终执行该模型以向最终用户显示可用结果或预测的人。虽然普通职称和高级职称在所需技能、编程语言和总体知识方面有很大重叠,但主要区别在于这两种职称侧重于什么,即它们在数据科学过程中各自方面的责任。正如您将在本节和下一节中看到的,高级职位的角色侧重于数据科学流程的开始和结束部分,而非高级职位则更侧重于同一流程的中间部分。下面,我将概述这些关键的定义特征。总的来说,主要流程按顺序通常如下:
*1\. defines the business problem (SR)**2\. develops data (SR)**3\. exploratory data analysis**4\. builds the model**5\. explains results to stakeholders (SR)*
虽然这种设置因每个公司及其各自的职位描述而异,但从我的个人经验来看,我认为这种设置通常是有意义的。
普通数据科学家职位侧重于模型构建,高级职位侧重于定义陈述并使用该模型作为解决方案,最终将在与高级领导层或公司董事会的会议中进行描述。
以下是传统的非高级数据科学家将关注的整个流程的两个部分:
- 探索性数据分析*——*一旦有了数据或数据集,您将寻找缺失值、测试正态性、检查类是否平衡、特征工程等来润色您的模型输入数据。
- 建立模型*——*流程的下一步是建立基础模型,不关注超参数,而是关注问题是有监督的还是无监督的,(时间序列等……)。一旦你建立了适合使用的模型和库,它将被应用到你的 Jupyter 笔记本或平台中,其中包含你所有的探索性数据分析。接下来,您将对该模型执行迭代并调整超参数,然后要么自己部署它,要么依靠机器学习工程师将该模型部署到生产中(同样,每个公司都不一样)。
高级数据科学家
照片由克里斯蒂娜@ wocintechchat.com 拍摄。
高级数据科学家能够并且应该能够执行典型数据科学家的所有任务,同时还能够更频繁地与面向业务的一方进行交互。您将与利益相关者、主题专家和公司领导层合作,以最大限度地利用该模型并对您的业务产生积极影响。
- 定义业务问题 —虽然传统的数据科学家将专注于模型本身,但高级职位通常需要概念验证。您将向企业解释模型将推动的价值,以及可能的复杂性、所需的资源,以及谁将与预测或结果进行交互。这个角色有时可以被看作是产品经理,他组织过程以确保特定的合作者都是一致的。当数据科学在工作场所(相对于学术界)进行时,你将与主题专家、软件工程师、数据工程师和 UX/UI 设计师一起工作。这部分操作在学校里被忽略了,因为学校的主要焦点是建立模型。
您可以构建一个非常精确的模型,但是如果它不能通过自动化以前的手动流程或推动价值来帮助业务,那么您就是在浪费时间和金钱,并且该模型已经过时。
高级职位将确保整个模型是有效的,每个人都在正轨上。
- 开发数据 —一旦通过建立业务问题陈述和解决方案证明了模型的概念,您就必须找到您的数据源。同样,这一点在学术界也没有受到太多的强调,它是你职位中极其重要的一部分,因为创建数据集可能需要几天或几周的时间。你可能需要向软件和数据工程师引用一个 API ( 应用编程接口)或者跨数据库和表执行复杂的连接。
摘要
如果我的公司没有高级职位空缺怎么办?
—如果你满足了上述条件,你应该概述你在数据科学流程中的所有步骤,以向招聘经理或领导层证明你配得上这个高级头衔。如果你像产品经理一样建立模型并管理整个项目,你应该被认可,因为这实际上是你扮演的两个角色。
是的,这些描述和例子在你的公司可能会有所不同,但总的来说,从我的经验来看,特别是查看数百份 LinkedIn 简介和工作描述,共识是一个正常的非高级职位专注于模型,而高级职位专注于同一模型如何与你的业务互动。此外,在某些地方,高级职位可以被描述为在若干年中拥有更多工作经验的人,但是随着工作经验的增加,数据科学家将采用我在上面的高级数据科学家职位中描述的流程的各个方面。
对于高级和非高级之间的正式区别,不一定有一个官方的说法,但有几篇文章和工作描述对这种描述进行了类似的总结。这里的 [4]是一篇概述高级数据科学家职位的文章,很有帮助。
我希望你觉得这篇文章有趣并且有用。感谢您的阅读!
参考
[1]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄
[2]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄
[3]照片由克里斯蒂娜@ wocintechchat.com(2019)拍摄
[4]皮达尔·科伊尔,成为一名高级数据科学家意味着什么?(2020 年)
数据科学家:适应或死亡!
AutoML 会帮助我们还是杀死我们?
在 Unsplash 上由 Steve Knutson 拍摄的前数据科学家的照片
哈佛商业评论在他们 2012 年的著名文章“数据科学家:最性感的工作”中标志着数据科学家的繁荣,随后是过去十年难以维持的需求。[3]
"…需求超过了供给。事实上,数据科学家的短缺正在成为一些行业的严重制约因素。”
麦肯锡公司&刚刚发表了一篇文章(2020 年 8 月),建议我们根据更新的自动化技术(AutoML)重新思考我们到底需要多少数据科学家。[4]
“从长远来看,仍然需要纯粹的技术数据科学家,但数量远低于大多数人目前的预测。”
这描述了我们已经走了多远https://quanthub.com/data-scientist-shortage-2020/
在每一个繁荣周期中,你都会遇到人才短缺、冒名顶替者或资质较差的人涌入的情况(例如,dot.com y2k,如果你会拼写 Java,说明你是一名软件工程师)。随着领域的成熟,工具和自动化淘汰了那些不真正合格或者没有做高价值工作的人。数据科学也不例外。
肮脏的秘密
由 Kristina Flour 在 Unsplash 上拍摄的照片
*不幸的是,数据科学秘密并不像名人性秘密那样令人兴奋。*在这份“性感”工作的背后,是数据科学 项目 所需的大量繁重工作——其中包括:
- 数据来源、验证和清理
- 尝试功能组合和工程功能
- 测试不同的模型和模型参数
大多数人认为,数据准备工作是任何 ML/DS 项目的 80 %[ 1 ],这导致了数据工程专业[2]。剩下的时间花在尝试特性和测试模型上,以挤出百分之几的准确度。这仅仅需要 ***大量时间——***虽然经验、直觉和运气允许科学家缩小场景范围,有时最佳解决方案需要尝试许多额外的非典型(几乎是随机的)场景。一种解决方案是自动化,并使用名为 AutoML 的新型工具来利用强力计算周期。
AutoML——它像天网吗?
自动机器学习(AutoML)是一种软件,它以一种有组织的方式为你自动化重复的工作。(获取 H2O 或 DataRobot 的演示,亲自体验一下)。给它输入数据,设定目标,并在它反复研究特性、模型和参数时小睡一会儿。虽然它缺乏领域专业知识和精确性,但它用蛮力和高超的簿记/报告(当然还有一些逻辑和启发)弥补了这一点。
它何时以及是否会取代科学家是 5 年前在 KDNuggets 上进行的民意调查——最近的想法是,对我们中的一些人来说,时间很快。
https://www . kdnugges . com/2020/03/poll-automl-replace-data-scientists-results . html
当然,不是每个人都同意。
快速的雷切尔·托马斯。AI:"关于机器学习人才的稀缺以及声称其产品自动化机器学习并完全消除对人工智能专业知识的需求的公司的承诺,媒体标题经常出现。[7]**
托马斯博士似乎觉得 AutoML 是被误解的和相当数量的炒作。她提出了令人信服的观点来帮助我们理解整个 ML 循环,以及什么是 AutoML 什么不是。它不会取代专家的工作,但它确实大大增加了他们的工作——还不是天网,但给它一些时间…
那我的工作要被解雇了吗?
谷歌大脑的联合创始人吴恩达经常表示担心人工智能和人工智能导致的迫在眉睫的失业[5]——然而大多数分析都集中在运营和蓝领工作上。我们轻松的数据科学工作怎么办?麦肯锡描述了等待我们的可能未来:
麦肯锡在线反思人工智能人才
好的一面是,数据科学家没有被完全取代(图表显示 29%……)—但让我们关注麦肯锡的观点,重新思考所需科学家的数量和技能。当你把 AutoML 加入你的团队时,每个项目的科学家数量可能会下降(像 TARS、R2D2 或 HAL 这样的机器人),但大多数研究仍然表明,对人类(科学家)的总需求至少在未来 5 年以上将继续增加。
大量在线文章[9]清楚地表明,数据科学家并没有死。但大多数人认为 AutoML 已经成熟,甚至在今天也在改变项目和人员的构成。我们都需要发展,作为一名数据科学家,你需要学会利用 AutoML 和相关的技术进步,否则就有落后的风险。
自动化是一件好事——我们可以专注于更高价值的工作,消除无聊和重复的任务(尽管无聊和重复的工作报酬很高……)。我认为我们知道这是有道理的,当他们可以支付一个更便宜的机器人时,为什么要支付我们呢?因此,下次你在做一个项目时,问问自己,我是在做专家数据科学家的工作,还是我的日子屈指可数了?
“请真正的数据科学家站起来好吗?”
净外卖——DS/ML 的未来是光明的,但你需要拥抱变化,否则你将从数据科学家变成 死亡的 科学家。“反抗是徒劳的”——但在这种情况下,同化会有回报。
参考和启示
[1] Ruiz,“80/20 数据科学困境”——https://www . infoworld . com/article/3228245/The-80-20-data-science-dilemma . html
[2] 安杰洛夫,《数据工程师的崛起》——https://towards Data science . com/the-Rise-of-the-Data-strategister-2402 Abd 62866?_ branch _ match _ id = 764068755630717009
[3] HBR 最性感的工作文章——https://HBR . org/2012/10/data-scientist——21 世纪最性感的工作
[4]麦肯锡关于人工智能人才的再思考—https://www . McKinsey . com/business-functions/McKinsey-analytics/our-insights/re thinking-AI-Talent-strategy-as-automated-machine-learning-comes-age
[5]https://www.youtube.com/watch?v=aU4RQD-莱克吴恩达对乔布斯和艾的看法
[6]回顾 2015 年 AutoML 上的民意调查—https://www . kdnugges . com/2020/03/Poll-AutoML-replace-data-scientists-results . html
[7] FastAI 的 Rachel Thomas 谈到了 AutoML 的宣传,ML 科学家做了什么以及 AutoML 能做什么—https://www.fast.ai/2018/07/12/auto-ml-1/
[8]对科幻人工智能/机器人的各种引用——星际争霸中的 TARS,2001 年的 HAL,星际迷航中的 Borg 同化,当然还有终结者的天网。
[9]关于汽车与人类的各种文章 KDNuggets 、 Wired 和 Medium 。
数据科学家和权力伦理,第一部分
数据科学家拥有什么样的权力,有什么样的道德含义?
克林特·帕特森在 Unsplash 上拍摄的照片
到现在,提到算法如何有偏见(尽管更准确地说,训练数据有偏见),或者人工智能如何被用来系统地歧视某些群体或阶层的人(例如,通过’标记)。最近一些著名的例子包括麻省理工学院前媒体实验室主任伊藤穰一的《各种宣言》、 抵制缩减 *、*等,这些文章考察了人工智能和人工智能的社会应用中固有的伦理问题。
同样,计算机科学家 Joy Buolamwini 和 Timnit Gebru(也来自麻省理工学院)发表了性别阴影:商业性别分类中的交叉准确性差异,调查了“交叉”群体(如黑人女性)面部识别系统的准确性差异。
这些都是很好的例子,说明拥有多元化的声音如何有助于更好、更公平地使用人工智能,以及更好地发挥民主的作用。约翰·杜威会点击“喜欢”按钮。
检查人工智能/人工智能伦理的各种近期作品;来源:作者
但是我仍然觉得在关于伦理 AI/ML 的一般学术和流行讨论中存在差距,特别是数据科学的伦理。在这种讨论中,焦点往往集中在技术上,而不是构建、维护和使用它的人。我们需要研究数据科学家在社会中的角色以及由此角色衍生的道德责任,尤其是在跨国公司环境中,在这种环境中,物理边界不适用,但一般数据保护法规适用。
责任的新范式:积极数据科学
我们需要一剂 Karwat 等人(2015) 所说的*活动家工程。*我想到了类似的东西:激进的数据科学。这是对激进数据科学基本原则的第一次尝试:
活跃的数据科学家既聪明又谦逊,足以知道数据科学的工具和方法无法独自解决他们面临的问题。活跃的数据科学家认识到何时需要其他手段,如社会或政治行动,来解决问题,如 AI/ML 中的“偏见”。激进的数据科学家明白,他们并不是独自工作和生活,独立于更广泛的社会群体和政治体系,拥有自己的传统和历史,各种社会实践从中获得意义。活跃的数据科学家提醒自己,他们不是独立的、相同分布的数据点,而是更像是法律、社会、文化、经济和道德信仰和实践的复杂、互联网络中有肉体覆盖的、有位置的和有意识的节点,它们本身潜在地受到数据科学本身活动的影响,并通过数据科学本身的活动构成。
因此,活跃的数据科学家在开展工作时,会认真、自觉地对待他们在这个网络中的角色以及相关的期望、规范和责任。他们意识到,除非面对我们集体道德想象中的“应该”,否则当前的“是”有可能保持不变。
如果你对“是-应该”的区别及其在数据科学中的作用感兴趣,你可能想看看我的另一篇文章算法的不公正和事实-价值的区别。无论如何,现在让我们进入这篇文章的主题。我将不得不在另一篇文章中发展激进数据科学的想法。
让我们关注人,而不是技术
令人惊讶的是,对于科学家在我们的数字社会中拥有的集体权力数据以及这种权力的伦理含义,几乎没有研究。
请注意我是如何表述上述语句的。我没说算法有力量。我说数据科学家有。**数据科学家是负责决策的道德代理人,**而我们,全球互联网平台的用户,是他们的道德病人。但是,作为道德病人,我们有什么权利?作为道德代理人,数据科学家对我们有什么义务?这就是我们需要解决的问题。这样做的一部分将需要弄清楚世界各地的数据科学家所掌握的权力的范围和程度。
各种责任
责任的概念在哲学上是一个棘手的问题。首先,我们可以区分因果责任和道德责任。因果责任意味着你的行为在时间上接近某些(负面)影响。在法律术语中,当确定责任问题时,我们称之为“近因”。例如,您可能将招聘分类算法的一些代码推送到 Github repo 中,这些代码与您公司的其他数据科学家团队共享。当您的代码最终部署到生产环境中时,它会导致性别歧视。你对代码的推动是导致这个结果的原因。这是一个进一步的法律决定,你的行为是否实际上是这个结果的近因。很可能不是。
道德责任是一个不同但相似的问题。道德责任意味着承担责任。从上述意义上说,我们可能负有因果责任,但对某些行为不应受到指责。例如,你的老板用枪指着你的头,告诉你要更新功能,否则后果自负。在这里,我们不能责怪你这样做,尽管严格地说,你对所造成的伤害负有(某种程度上的)因果责任。正如你可能已经发现的那样,自由意志的问题决定了可责备性的问题。在实践中,因果责任和道德责任之间的区别是模糊的,因为社会和政治压力决定了责任的归属。在日常语言中,我们倾向于将这两种意思混为一谈。我们为此付出的代价是道德混乱。
然而,我们是积极的数据科学家,我们不害怕含糊或复杂。我们没有回避这些问题,而是直面它们,进行辩论和思考。
关注算法的责任是一个类别错误,就像说“这食物尝起来很帅”或者“计算机有感情”指责一个算法“有偏见的人工智能”就像我指责我的咖啡桌,因为我的脚趾踢到了它的一条异常倾斜和隐藏的腿。我的咖啡桌没有选择坐在我客厅里的位置;我选择了。在应用数据科学的情况下,一些人决定收集这些数据,以这种方式测量它们,聚合,清理,并以某种方式对它们进行降维。一些人员使用交叉验证选择了 XYZ 车型进行比较。良好的数据科学培训包括学习如何做出良好的数据科学选择*。正如我上面试图说明的,自由选择意味着(道德)责任。*
自动化 ML 和道德外包
即使在所谓的“自动化 ML 解决方案”的情况下,一个选择而不是选择,这本身就是一个选择*。而且通常是坏消息。抱歉亚马逊,谷歌,微软。如果你是一个数据控制者并且你不理解 ML 是如何工作的,你可能不应该在你的业务中使用它。事实上,如果你不明白它是如何工作的,我几乎可以向你保证,一个聪明、年轻的物理学毕业生,一份 MS Excel,以及两周 Youtube 上关于 vlookups 和宏的教程,就能让你 99%地做到这一点。*
需要明确的是,当输入数据不是个人数据时,使用自动化的 ML 并不一定在道德上有问题。但是,如果您的业务依赖于个人数据的收集和处理,那么解释为什么需要自动化解决方案的责任就落在了您这个数据控制者的身上。请注意,GDPR 明确处理了这个问题——它被称为 【自动个人决策(或分析)】——并给予数据主体明确的选择退出的权利(参见上文链接的第 22 条)。
我们不能将道德责任外包给机器,因为如果我们沿着因果链追溯足够远,我们最终会发现一个人在某个地方做决定。在这一点上,我们必须问这个人是否可以不这样做。*如果不是,他们只是因果责任。如果是这样,*他们在道德上是无可指责的。然而,有一点是清楚的:
人们不能用“黑匣子”的借口来逃避道德责任的问题。
请参见 Rudin (2019): 停止解释高风险决策的黑盒机器学习模型,改用可解释模型 。在第一位使用黑盒算法的决定受制于道德判断。例如,一个人可以进行什么样的道德计算,使他相信准确性比可解释性更重要?相反,我们应该把辩论的焦点放在编写和部署算法的人的责任上,而不是比特和字节本身。
我们需要复杂网络和规模的新伦理
在这一点上,不被看好的德裔美国技术哲学家汉斯·约纳斯在他 1979 年的书中写道,所有迄今为止发展的伦理体系都需要更新,因为他们错误地假设“die Reichweite menschlichen Handelns und daher menschlicher Verantwortung is eng umgeschrieben。”*【翻译:人类活动的程度以及人类的责任可以被狭义地定义*。**
乔纳斯的观点是,传统的伦理学方法,通常基于功利主义或道义论(基于主体)的考虑,是在完全不同的社会条件下发展起来的。在信息时代,小的局部原因可以产生全球性的影响,正如我们从新冠肺炎疫情看到的那样。错误信息可以在世界范围内迅速传播。一个数据科学家在印度的工作可以影响欧洲或美洲的数亿个数据主体。
所以,在乔纳斯之后,我认为是时候重新审视伦理了。我们必须发展一种数据科学的伦理,这种伦理可以作为行动指南,例如,亚马逊、脸书或谷歌等平台上的分类算法可以影响全球潜在的数十亿人的在线体验。我们已经在脸书的情绪传染实验中看到了量表的道德重要性,该实验与《PNAS 国家科学院学报》的一篇社论表达了关注。简而言之,在数字网络和监控资本主义时代,是时候重新思考伦理了。
约翰·多恩 1623 年的诗《沉思》非常感人地抓住了这种情绪(并为海明威最伟大的著作之一提供了书名):
没有人是一座孤立的岛屿;每个人都是这块大陆的一部分。如果一个土块被海水冲走,欧洲就少了,就像一个海角,就像你的朋友或你自己的庄园一样。任何人的死亡都是我的损失,因为我与人类息息相关;因此永远不要派人去打听丧钟为谁而鸣;它为你而鸣。
什么是权力?
在这一小段中,我不想把重点放在明显的涉及身体力量或暴力的权力形式上。正如米歇尔·福柯在《T2》中指出的,在中世纪的欧洲,犯罪被认为是对国王权力的个人侵犯。罪犯的尸体实际上是王室的财产,可以在公共绞刑架上被拉走、分尸、砍死和摊开。国王“拥有”罪犯的身体。这是压制的力量。
这不是科学家拥有的那种权力数据。大多数人都是善良、谦逊的人,担心对社会公正产生积极影响和贡献。这与其说是不良意图的问题,不如说是激励错位的问题:问太多问题对你的工作安全感不利。见鬼,即使是德高望重的统计学家 RA Fisher 临终前也在为烟草公司辩护吸烟致癌的指控:
“不幸的是,大量的宣传正在发展,以使公众相信吸烟是危险的……也许很自然的是,应该努力去怀疑提出不同观点的证据。”
不,数据科学家拥有的那种力量更像是一种无形的力量,福柯在他的概念话语中捕捉到的那种力量。这是一种无形的力量,因为亚马逊、谷歌或脸书的大多数普通用户(实际上,没有人会阅读这篇博客)不知道算法是如何工作的,甚至不知道数据科学家是做什么的。我可以肯定地说,至少对我妈妈来说是这样,可能对你妈妈也是这样。但是仅仅因为话语是无形的,不可见的,并不意味着它的效果也是不可见的。话语的影响可能非常真实。这种不可见性的另一面意味着,只有那些适应这种不可见性的数据科学家才能察觉到它,并对此采取行动。
作为话语的权力
在福柯的分析中,权力不是其持有者的财产,而是反映了个人或群体之间无形的社会关系。对于福柯来说,话语是一套(隐含的)规则,为知识的分类和归类制定了规范。从这个意义上说,话语定义并设定了评估对象之间关系的规则。这是一种决定和定义什么算什么的权力?谁被贴上神智正常和谁被贴上疯子*?这些社会标签很重要,因为它们决定了谁会被送进精神病院(精神病患者),谁会被判死刑(杀人犯)。如今,这些标签决定了谁获得哪种服务,或哪种产品,以什么价格,在什么用户体验配置中。*
福柯的洞察力在于认识到,拥有权力意味着能够给人和事物贴上标签,然后在这些标签的基础上,根据某些规范对待它们。福柯指出,我们越来越依赖“专家”的指导来规定这些规范,并从什么是越轨中定义什么是正常*。他担心,在这样一个社会中,个人——这些标签和分类的对象——可能最终会将这些标签内在化,从而实际上压抑自己。正是在这一点上,当权力关系完全内在化时,权力才真正达到顶点。恰恰是在权力最不可见的时候,它才是最强大的。这一观察结果与数据科学家的工作直接相关。*
希望您现在看到了这种权力的概念与数据科学家在个人数据的基础上对数据主题进行聚类、分类和分段的日常工作之间的关系。我们已经从通过体罚(压制性权力)从字面上表达权力,到现在使用身体的权力——以行为大数据的形式——来设定话语的术语,定义什么是正常的和异常的,并将这些分类用于一些经济目的(福柯称之为“生产力”或“生物权力”)。一直以来,驱动这一过程的大部分人类“燃料”(BBD)都幸福地不知道发生了什么。
科学话语与后现代状况
甚至在 20 世纪 70 年代,法国哲学家们就奇怪地意识到技术作为一种话语是多么强大。也许这要归功于万维网的前身,法国人发明的迷你电话。例如,在 1979 年,江泽龙·利奥塔出版了《T2 的后现代状况》,他在书中写道:
“科学知识是一种话语。公平地说,在过去的 40 年里,“领先的”科学和技术与语言有关:音韵学和语言学理论、通信和控制论的问题、代数和信息学的现代理论、计算机及其语言、翻译问题和计算机语言兼容性领域的探索、信息存储和数据库问题、远程信息处理和智能终端的完善、悖论学。”
如果你想知道,悖论学是研究表面上的悖论,但却有真理价值。哥德尔的不完全性定理就是一个最好的例子。总之,利奥塔在这里的要点是,与现代工业时代不同,在后现代时代,知识现在是“生产力的主要力量”我还想在这里补充一点,在后现代时代,权力——以话语的形式——是全球信息网络规模的函数。
认识到数据科学家所拥有的知识采取了大量行为大数据的形式,并不需要很大的推理飞跃,这些数据为四大科技公司的机器学习算法提供了燃料。
权力移交还是权力移交?
在继续讨论之前,我们也许应该停下来澄清一下我们讨论的主要术语。围绕权力的争论的关键实际上是它是否应该被认为是对的权力还是对【】的权力。我是什么意思?
我的意思是,权力是否应该被理解为 1)只有在物理上或社会上实现时才存在的东西——对的权力;或者 2)不管是主观体验还是物理实现都存在的东西——力量。换句话说,它是必须被实际运用才能存在的东西吗(即,它是陈述性的吗?)还是更像是一种潜在的能力(即无论是否有人经历过都存在)?
围绕权力的另一个复杂问题是,我们对权力的概念可能会受到我们的理论和政治假设的影响。具有讽刺意味的是,正如马克思、尼采和其他人早就指出的那样,阐明关于权力和权力关系的想法的行为本身可能是由我们社会中当前运作的权力关系塑造的,就像一种福柯式的话语。我们可能无法逃脱话语的语言和概念的限制。
试图定义权力
以下是社会学家史蒂文·卢克的重要著作《权力:激进观点 》中关于权力的一些有影响力的定义。一些定义将这一概念理解为对的权力,而另一些定义更多地将其视为对的权力。挑一个看起来最适合科学家可能拥有的那种能量数据。我们需要从某个地方开始辩论。
史蒂文·卢克斯:
“[权力]是一种潜力,而不是现实——实际上是一种可能永远不会实现的潜力。”
汉娜·皮特金:
“[权力]是一种……使某人有能力做某事的东西。权力是能力、潜力、能力或必要手段。”
罗伯特·达尔:
“在某种程度上,A 对 B 有权力,他能让 B 做一些 B 不会做的事情。”
米歇尔·福柯
“如果我们谈论权力的结构或机制,那只是在我们假设某些人对其他人行使权力的范围内。”
马克斯·韦伯:
“[权力是]一个社会关系中的一个行动者不顾阻力而能够实现自己意愿的可能性……”
汉娜·阿伦特
“[权力]不仅对应于人类行动的能力,也对应于人类协同行动的能力。权力从来不是个人的财产;它属于一个群体,只要这个群体团结在一起,它就存在。”
伯特兰·罗素:
“[力量]是预期效果的产生。”
我将在第二期继续这篇文章。在那篇文章中,我将检查上面的一些定义,并查看一个旨在捕捉现代数据科学家角色的特定权力公式。最后,我们将探讨道德主体(集体)责任的条件。
就目前而言,
这些公式中有哪些适合四大科技公司之一的数据科学家的角色?
参考资料:
福柯,M. (2012)。规训与惩罚:监狱的诞生。复古。
乔纳斯·h .(1987 年)。这是一项基本原则。这是一种技术伦理。
Lukes,S. (2004 年)。权力:一种激进的观点。麦克米伦国际高等教育。
利奥塔,J. F. (1984)。后现代状况:一份关于知识的报告。明尼苏达大学出版社。
[1]https://priceonomics . com/why-the-father-of-modern-statistics-not-believe/
[2]亲爱的读者,既然你已经了解了作为话语的权力,你就可以开始注意到它在你周围的社会世界和工作中的微妙影响了。
数据科学家来自火星,软件开发人员来自金星(上)
数据科学家来自火星,软件开发人员来自金星(上)
软件与模型
图 1:数据科学家来自火星,软件开发人员来自金星
火星和金星是非常不同的行星。火星的大气层非常稀薄,会变得非常冷;而金星的大气层非常厚,会变得非常热——热到足以熔化铅!。然而它们是离我们最近的姐妹行星。他们也有许多相似之处。两者的大气中都有高浓度的二氧化碳,并且暴露在没有保护磁场的太阳辐射下。
软件工程师和数据科学家来自两个不同的世界——一个来自金星,另一个来自火星。他们有不同的背景和思维方式,处理不同的问题。他们也有许多共同之处。在这篇和随后的博客中,我们将着眼于它们之间的主要区别(和相似之处)以及为什么这些区别存在,以及我们需要在它们之间建立什么样的桥梁。在这篇博客中,我们探索了软件和模型之间的根本区别。
软件与模型
在传统的程序设计中,人们为计算机提供逐行指令(通常称为算法)来处理输入数据,以产生与给定软件规范相匹配的期望输出。逐行指令可以是许多计算机语言中的一种,例如 Lisp、Prolog、C++、Java、Python、Julia 等。
在数据科学中,提供输入数据,并且在某些情况下(例如,受监督的机器学习)提供输出数据的样本,以构建能够识别输入数据中的模式的模型。与传统编程不同,数据科学模型通过提供输入数据(或输入和输出数据)来进行训练,以识别模式或做出推断。经过充分的训练、验证和测试后,他们对新数据进行预测或推理。
模型是一种正式的数学表示,可以应用或校准以适应数据。Scott Page 提供了许多模型的例子,以及如何用它们来做决策。模型可以是机器学习模型、系统动态模型、基于代理的模型、离散事件模型或许多其他不同类型的数学表示。在本文中,我们将主要关注机器学习(ML)模型。
图 2:软件和模型定义
软件和模型在五个关键方面有所不同。这些尺寸如图 3 所示。
图 3:软件和模型之间差异的五个关键维度
输出
软件的输出是确定的。例如,考虑一种用于对数字数组进行排序的算法(例如,bubblesort)。bubblesort 算法将一个数字数组作为输入,通过一系列步骤迭代产生一个按升序或降序排序的输出数组。对于任何给定的数组,bubblesort 算法都会产生一个排序后的数组作为输出。其输出不存在不确定性。如果程序已经被正确测试,算法将总是产生结果,并且结果将是 100%准确的。
相比之下,以一个已经在大量图像上训练过的深度学习模型为例,它能够识别不同品种的猫。当模型被提供作为猫图像的输入时,它使用该模型来预测猫的品种。然而,它可能不总是提供 100%准确的答案——事实上,准确性往往低于 100%。图 3 说明了深度学习模型的输入、深度学习网络层和输出。该模型预测图像包含一只虎斑猫,准确率为 45%,可能是一只埃及猫,准确率为 23%。换句话说,来自模型的预测通常是*不确定的。*这种预测的不确定性对于企业来说是一个难以把握的概念。我们将在随后的博客中回到这个维度对模型开发的影响。
图 3:深度学习图像识别模型
决策空间
软件和模型之间的第二个区别是决策空间。我们所说的决策空间是指软件或模型用于决策的环境。当我们构建软件时,我们通常有一个被编码为算法的规范或用户需求。软件经过测试,完全测试后即可使用。软件被执行以产生结果。这个决策空间是固定的或者是静态的。如果用户的需求改变,算法必须被修改或重建和测试。没有算法学习或修改自身的承诺。图 4 展示了软件如何被使用的背景(改编自关于预测机器的书中的模型使用方式)
图 4:软件决策空间
说到模型,决策空间更加动态。考虑一个基于机器学习的聊天机器人,它已经被训练为提供与智能手机相关的查询的初级支持。当模型被训练时,它将被训练有关于不同智能手机的品牌、型号、配件的历史数据。一旦部署,聊天机器人将能够在市场上的所有智能手机上回答客户的查询。让我们假设,当聊天机器人无法回答超过一定准确度的查询时,它会将查询发送给人工客户服务代理。这种聊天机器人在几个月内可以正常工作,但当市场上推出新的型号和配件时,聊天机器人将无法响应客户的查询,并将越来越多的呼叫逐步转移到人工代理,最终使聊天机器人变得无用。
模型依赖于历史数据,当历史数据不再相关时,需要用更新的数据来刷新它们。这使得模型运行的环境更加动态。虽然用户需求或软件规格也可能发生变化,但它们发生的频率较低。此外,当规范改变时,也不期望软件能继续运行。在模型的情况下,有一个明确的预期,即当模型的性能恶化时,至少我们会得到这种恶化的警告(通常称为模型漂移),或者最好的结果和新数据被用于持续改进模型(我们将在后续的博客中回到这个持续改进的问题)。图 5 展示了如何使用模型的背景。注意从结果到训练的反馈循环(红色虚线是从预测机器的原始图表中添加的,以示强调)。正是这种反馈过程使得模型的决策空间更加动态。
图 5:模型决策空间
推理
传统软件通常使用演绎推理机制,而机器学习模型基于归纳推理。如图 6 所示,软件规范作为开发代码的理论。代码可以被看作是假设,需要用基于观察的理论来证实。观察只是代码产生的输出,需要根据规范重复测试。
模型是从观察数据中得出的模式。初始模型的作用类似于假设,需要迭代地改进以确保模型与观察数据最匹配。经过验证的训练模型捕获了数据背后的理论。需要足够小心以确保模型不会过度拟合或欠拟合数据。
由软件完成的从理论到观察的转变可以说比由模型完成的从观察到理论的转变更容易。这也突出了围绕第一个维度中讨论的输出的确定性/不确定性的挑战。
图 6:软件和模型中的推理
显色法
软件开发的过程也从根本上不同于典型的模型开发方式。软件开发通常遵循瀑布方法或者敏捷方法。瀑布方法经历了从规范到设计到编码到测试和部署的一系列步骤。在敏捷方法的情况下,软件开发过程是迭代的,并且通常包含一套以用户需求和自组织、跨职能团队为中心的原则。软件开发通常需要一到四周的冲刺。每一个连续的 sprint 编码附加的功能,导致发布给用户的最小可行产品。
模型开发过程需要遵循稍微不同的方法。数据的可用性、质量和标签,以及估计所需精度或更一般的算法性能的难度,意味着模型开发需要采用组合方法。数据科学家需要开发大量模型,这些模型的子集可能符合性能标准。因此,模型开发过程需要遵循更科学的实验、测试过程,并从这些实验中学习,以完善下一组实验。这种假设-测试-学习的过程并不适合敏捷软件开发生命周期。在随后的博客中,我们将重新审视模型开发过程,以及它如何与敏捷方法集成。
心态
到目前为止,我们提到的四个维度清楚地将构建软件的人和构建模型的人的思维模式分开。软件开发人员通常有一种工程思维模式——他们致力于架构蓝图、不同组件之间的连接,并且通常负责生产软件。软件工程师通常具有计算机科学、信息技术或计算机工程背景或教育背景。他们开发创建数据的软件产品。
另一方面,模型开发人员有更多的科学思维——他们从事实验,更擅长处理模糊性,通常对创新而不是生产模型感兴趣。一个数据科学家是一个用编程来分析数据和开发数学模型来增强他们的数学和统计学背景的人。他们使用数据来获得洞察力并影响结果。
在随后的博客中,我们将看到这些差异在软件和模型如何在组织中开发的含义。我们还将详细研究模型开发过程,它们如何与敏捷软件开发相集成,以及像 ModelOps 和 MLEngineers 这样的新角色的出现。
数据科学家是新的投资银行家
意见
21 世纪初,我在一所顶级商学院上学时,我所有的同学都想成为投资银行家
这是一篇观点文章。我很想在下面的评论中听到你的想法。
在本世纪初就读于一所顶级商学院时,我们都想成为投资银行家。
快进 10 年,每个人都想成为数据科学家。
他们的共同点比你想象的要多。
数据科学家和投资银行家都是多面手
数据科学是编码、统计和商业的结合。我们通过建立数据模型来解决问题,然后将结果呈现给决策者。
投资银行家产生“投资”想法,用金融模型支持它们,并向客户推销。
在前一种情况下,数据几乎总是专有的。工具包括 python 和用于分析、可视化和 ML 的相关包。后者大量使用付费数据源,如彭博、路透社和 Capital IQ。工具包括用于自动化的 excel、SAS 和宏。
两者都提取、清理、建模和分析数据,然后呈现结果。
虽然 IB 不太技术性,但我会提出数据科学的未来也不太技术性的观点。
投资银行包括各种各样的活动,如交易、并购和融资。
没有编码背景的商科毕业生正在转向数据科学
商学院毕业生经常向我寻求进入数据科学领域的建议。我也遇到了一些前银行家,他们现在在初创公司担任分析职位。
在某些时候,数据变得很酷,银行削减了员工数量,出现了一些金融科技初创公司。商学院随后跟进分析流。
2008 年金融危机之前,“数据科学”还不是一个词,商科毕业生都想去华尔街工作。非理性繁荣制作了如下荒谬的视频,我们会在金融课上观看。
但是时代变了。现在正是数据科学如此受欢迎。
数据科学正在成为一种商业角色
数据科学是一个总括术语,用于许多涉及数据的角色。
但如果你从中减去其他离散的工作,如人工智能研究,ML 工程,数据工程和软件工程,剩下的看起来更像是商业/分析角色。
概念化的问题,解释数据,可视化的结果,并向非技术利益相关者展示。在某种程度上,这就是投资银行家的工作。
随着数据科学的成熟和分析基础设施通过 SaaS 开箱即用,我们将看到这一趋势加速发展。对技术感兴趣的人可能会选择软件工程,而 MBA 类型的人会填补数据科学的空白。
两者都是外表光鲜,但内心却是痛苦的
数据科学被宣布为 21 世纪最性感的工作。但有趣的是,这项工作的很大一部分变成了数据争论。
1987 年原版《T2》中的戈登·壁虎说服了整整一代金融毕业生进入银行业。但现实并不像“戈登壁虎”那样,更多的是在周末建造滑梯甲板,更新金融模型直到午夜。
你可以在这两方面都赚很多钱
句号。
以下是一些公司对 IB 分析师的薪酬。右边的“高”数字意义重大。考虑到“分析师”是投资银行图腾柱上的最低级别,这一点更令人印象深刻。
玻璃门:美国投资银行分析师工资
数据科学也是如此。
玻璃门:美国数据科学家的薪水
数据科学暂时就业多,竞争少。但我很想知道,整整一代人都想进入这个领域,这对他们的薪资会产生什么影响。
如果你不进入管理层,这两种工作都没有前途
脸书员工的平均年龄是 29 岁。
超过 30 岁就不能成为投行分析师。
一个有家庭的人不会整夜熬夜调整一个新的模型或纠正沥青书上的错别字。但是一个没有爱好的 25 岁的人往往会。我跑题了,但我的一位前银行业同事曾“吹嘘”说,在华尔街工作时,他在桌子底下放了一个睡袋。
这两种职业都是“数字处理器”。虽然深领域的专业知识很重要,但有效性在某些时候会停滞不前。
要在这些环境中取得长期成功,需要进入管理角色,管理人员和项目,聪明地工作和授权,以及做更多的销售。
我将此与软件开发进行对比。虽然它也遭受年龄歧视,但大公司通常有个人贡献者轨道,这些轨道逐渐成为非经理人员的架构师角色。
科技公司是新的银行
在 Apple Pay 和脸书的 Libra 之间,科技公司正在变成银行,拥有金融基础设施。
此外,考虑到北美是落后的曲线。腾讯旗下的微信支付被中国 80%的中小商户使用。
在我们的社会中,任何拥有我们共同的财务和浏览历史的公司都在决策桌上拥有一个事实上的席位。那是很大的力量…这让我想起了银行。
结论
与其说这是一次严肃的学习,不如说是一次思考练习。
尽管如此,在金融和人工智能的交叉领域工作了几年后,我看到越来越多的前银行家和准银行家进入科技领域并取得成功。
随着银行部门自动化的升温,以及“技术”角色变得不那么“技术”,我认为我们会看到更多的金融专业人士进入 PM 和数据科学角色。
每个人都想做数据科学。
数据科学家,经常问自己:那又怎样?
多年前我曾在一家全球管理咨询公司工作。作为一名新同事,当我展示我的工作成果时,我经常会停下脚步说,“真有趣。但是什么是 那么什么是这里的
“那又怎样”是几件相关事情的简写。
- 这里有什么可操作的吗?
- 因此,我们应该告诉客户怎样做与众不同?
- 如果我们继续沿着这条路走下去,会让我们更接近最终目的地吗?
新同事很快养成了在展示任何东西之前考虑他们的发现的习惯。虽然开始时很痛苦,很卑微,但这被证明是一个非常有用的习惯。它帮助我们避免了“沸腾的海洋”,在时间压力下表现得更好,并使我们更有效率。
我认为数据科学家会从培养这种心态中受益。
数据科学工作涉及的活动充满了分散注意力的机会。获取数据,探索数据,了解变量之间的关系,制定问题,创建常识基线,构建模型,调整超参数等等。
优秀的数据科学家往往有求知欲,这当然是一件很棒的事情。但这也意味着他们很可能捕捉到路边闪亮物体的微光,并跟着它进入兔子洞。虽然这几乎总是智力上的乐趣,但有时有用,有时没用。
为了确保你明智地使用你的时间,你应该定期停下来问自己,“这里有什么 那么这里有什么 ?”。
我能从中得到什么具体可行的东西吗?它是否让我更接近解决我正在研究的终极问题?
你对“那又怎样”这个问题的回答不必详细或精确。它只需要通过一个直觉检查,即至少有一个从你当前的痴迷到有用的东西的概念路径。如果你找不到路径,你应该重新评估你是否应该把你的注意力转移到别的事情上。
当你开始处理一个新问题时,这个习惯特别有用,尤其是由别人提出并呈现给你的问题。当你试图理解并明确需要解决的问题时,你可能会意识到所定义的问题实际上不值得解决,因为其他的事情才是瓶颈,需要首先解决。
拥有一个“所以是什么”的心态能让你更快地理清思路,另外,还能在组织中树立你作为一个务实、思路清晰的数据科学家的声誉。
尽管如此,一个重要的警告。
适度地问“那又怎样”。我不是建议你成为一个毫无幽默感的机器人。
去你的好奇心带你去的地方可能是有用的——你可能会在随机探索中偶然发现一些有价值的东西。*更重要的是,这对一个人的幸福显然是必要的。*如果我不能随意检查东西,漫无目的地发挥创意,我会发疯的。
所以,探索,跟随你的好奇心,享受乐趣。但是有一个后台进程在你的大脑中运行,它会周期性地弹出并询问“什么是 ,那么什么是 ”。
数据科学家们,当心新世界!
意见
基于微扰理论解决 COVID19 时代分析问题的框架。
埃德温·胡珀在 Unsplash 上的照片
数据科学是一项令人谦卑的工作,因为大多数时候,数小时的创造性和深思熟虑的建模在现实面前会导致令人失望的结果,因为现实并不关心我们的模型。
我预计,在接下来的几个月和几年里,我们在进行分析练习和建模时应该更加小心。
特别是,我们如何处理数据生成分布函数的扰动?
COVID 之前/之后思考世界的框架 19
COVID19 前后世界的四个阶段
为了理解这种扰动的影响,您可以将时间轴分为四个阶段:
- **第一阶段:**均衡 A,前 COVID19 时代,用 2017 年的数据训练你的模型几乎和用 2018 年的数据训练一样好。
- Phase2: 冲击波、COVID19 和隔离时代,此时所有的赌注都结束了。这是一片混乱,每天都在改变指导方针,医疗保健系统被一种新的疾病所淹没,许多零售和餐馆停业,交通减少,等等。
- **第 3 阶段:**后冲击波时代,第二波颠覆来自于尝试开放业务和管理 COVID19 对业务的影响,这些业务正在努力应对新的规范和新的消费者行为。例如,在医疗保健领域,所有被推迟的程序(诊断)都将导致医疗保健需求的高峰。这个系统仍然不稳定,远远没有达到平衡。想一想实验室和放射程序的更长等待时间及其对消费者的影响。医疗系统将试图自我修复,管理不堪重负和超负荷工作的医生和护士的能力。
(均衡 B!=均衡 A),欢迎使用新的数据生成分布函数,其中可能你的 2018 年(或 2020 年)数据与你的 2021 年建模不相关。
- **第四阶段:**均衡 B(均衡 B!=均衡 A),我们很可能不会回到之前的均衡。我们过去的一些数据点对于预测未来可能不太相关。
此外,由于失业率高于正常水平,远程医疗和在家工作的采用率更高,人们很可能会对过敏症状和更多不必要的急诊室就诊反应过度,流感疫苗注射激增(或如果你观看阴谋论视频,则下降),等等,你的实验都将停止。
欢迎使用新的数据生成分布函数,也许你 2018 年(或 2020 年)的数据与你 2021 年的建模并不相关。
小心谨慎,但当生活给你一个柠檬时,把握住这个机会
虽然这些干扰会给你的建模/分析带来麻烦,但是你也应该保持警惕。世界已经发生了变化,没有人真正知道这意味着我们正处于新机遇和商业模式的沃土上。
也就是说,在你未来的分析工作中要更加谨慎:
- 如果建立一个新的模型,确保你正确地处理第二和第三阶段(如何处理?).这也适用于所有未来的机会发现/规模确定。
- 随着失业率的急剧变化和全球经济衰退的可能性,了解 2007 年至 2010 年利用率趋势的变化可能是有益的。也许这将部分地给我们一些指导,告诉我们应该期待什么,以及我们应该应用什么样的发型和修正因子。
- 如果您正在运行需要暂停的 AB 测试。这是/曾经是进行 A/A 测试的绝佳时机!你有一个测试和支持小组,但他们都没有收到任何信息。运行您的测试/活动分析,看看您是否看到任何重大差异!如果你做了,那就有问题了!可能你一直都有!对于使用全局支持的实验来说尤其如此。现在调试你的实验。你再也没有机会了!
- 问问你自己,对于你正在处理的机会类型,你预计 COVID19 中断后需求会激增吗?如果是,你能做些什么来利用这个机会和波动性吗?
COVID19 对您的日常工作有何影响?你认为你的世界发生了怎样的变化?
数据科学家不能忽视可怕的“战略会议”。
有时,我们不得不抬起头来,理解我们在一个组织中更广泛的目标。
对一些战略会议唯一理智的反应。
在上周的 JIRA 争议之后,我想下一步自然会是看看苹果是如何扼杀你的生产力的,以及真正的数据科学家是如何使用 Linux 的…
这是个笑话 。苹果粉丝——请不要在 LinkedIn 上给我发仇恨邮件。
相反,让我们转向我最近一直在纠结的一个问题,“策略”。如果你像我一样,当你听到这个词时,你可能会退缩。它让人联想到胡言乱语的咨询师,头发浓密,皮肤晒得古铜色,令人难以置信。炫目的幻灯片可能会出现在某个地方,就像长时间的会议一样,每个人都在点头,但没有人会明白。
几乎每一个和我交谈过的数据科学家都对“策略”有同样的感觉。但这引发了一个有趣的问题:为什么?是什么引发了这种反应?数据科学家应该首先关心这些东西吗?我想让你相信,作为一名数据科学家,你应该这样做,而且有工具可以让整个事情不那么痛苦。
那么这个“策略”到底是什么呢?
数据科学家鄙视(好吧,我在这里概括)“战略思维”的原因之一是,它看起来很模糊。然而它不应该。战略思维的根源在于军队——想想 19 世纪留着令人印象深刻的小胡子的普鲁士人,在地图上移动木制士兵。作为数据科学家,我们喜欢好的定义,并且存在非常好的战略工作定义。
现在,这是一个数据科学博客,而不是一个组织文化博客,所以我将不得不掩盖战略思维从军队传播到工作世界的有趣方式。但是为了我们的目的,我要用一个重复美国军方使用的战略定义。不出所料,那些家伙对这个 想了很多。
战略是一个组织如何通过部署其资源来实现其目标。
你可以看到为什么军方喜欢这种想法——我们赢的意思是什么,我们必须做什么才能赢,以及我们有什么工具来做这些事情。然而,如果你不是军事隐喻的粉丝,这也与西蒙·西内克和他的“首先是为什么,然后是什么,然后是如何”**【4】**非常相似。
这样看来,任何组织都应该有某种战略,这似乎是无可争议的。然而,不知何故,我们最终还是筋疲力尽、毫无启发地蹒跚走出战略会议。
好吧,也许组织需要一个策略,但我是一个科学家。别把我扯进来!
在经历了许多许多小时的数据战略会议后,我感受到了你们的痛苦。然而,有两个原因很难保持这一立场,一个愤世嫉俗/现实,另一个可能更有趣。
现实主义者的立场是,如果你不帮忙制定战略,别人会帮你制定。你真的想让别人来定义你和你的团队的目的,你将被衡量的目标和你拥有的资源吗?好吧,也许不是所有的组织都卷入了预算的角斗,但是你仍然需要在这些讨论中提高你的声音。否则,数据工程中那些狡猾的某某人会把一大堆额外的责任推给你,而不给你任何额外的人来履行这些责任。
我开玩笑。我喜欢我的数据工程同事。但是你明白这一点——某个地方的某个人会试图让你做很多额外的工作,却不付钱。
然而,关注战略还有另一个不那么愤世嫉俗但更有趣的原因。请允许我稍微“术语化”一下,在上面的定义中, 策略是一个分形概念 。
当你放大到一个组织的更小层次时,你会看到整体的结构,即为什么、做什么和如何,一直向下重复**。根据这种观点,组织中一个层级的“为什么”是为了完成它上面的层级的“什么”。**
海龟一路向下[6]
现在谈论分形概念,可能听起来有点模糊。事实上,你可能会认为我自己也参加了太多的战略会议。这是一个数据科学的具体例子。
想象一下,你是一家量化对冲基金的亿万富翁所有者。感觉很甜蜜,对吧?你的对冲基金的目的可能是进行长期的宏观经济投资。要做到这一点,除了其他事情之外,它必须建立比竞争对手更好的宏观经济数据来源。因此,您将创建一个数据团队来完成这项工作。在这个对冲基金的策略中有一个目的(宏观投资)、目标(建立更好的数据源)和资源部署(创建一个数据团队)。太好了!你已经完成了你的亿万富翁工作,你可以回到你的私人岛屿/山城/任何你正在花钱的地方。
现在假设您管理数据团队。你的目的是建立一个比任何人都更好的宏观经济数据来源,也就是说,你的目的是你的上级组织的目标。你必须为自己设定一些目标来实现你的目标。一种可能是让彭博这样的供应商提供所有宏观经济数据的标准来源。你可以 100%确定做交易决定的人会想要这个。
然而,这只能让你与其他基金持平。你的目的是比他们做得更好,记得吗?对冲基金并不羞于解雇那些没有达到目的的人。所以你给自己设定了额外的目标,让下注的人(咳咳,我指的是“投资”)使用其他基金没有的替代数据源。这可能是你从新闻报道中提取的信息,或者是从卫星照片中测得的信息。为了实现这些目标,你雇佣一群工程师来构建来自彭博的数据源,雇佣一群数据科学家来研究替代数据。
现在假设你负责数据团队的另一半数据。你的目的是提供可供交易决策人员使用的替代数据源。所以你和定量分析师交谈,发现他们对工作情绪数据感兴趣。现在您有了一个目标——提取工作情绪数据——并且您设置了一个数据科学家来从《华尔街日报》的自由文本文章中提取这些信息。这位幸运的数据科学家现在有了自己的目标,所以他们为自己设定了一系列目标(获取数据、绘制数据、基本清理数据),然后制定出他们必须做什么来完成这些目标,即如果他们勇敢,就使用 NLP,如果他们聪明,就使用 Ctrl-C、Ctrl-V 方法。
简而言之,这是一家运营良好的对冲基金,其高层战略已向下传递至机构的各个层面。在这个世界上,战略会议是有原因的。每个人都需要知道自己的目标,以及如何融入组织的其他部分。然后他们可以为自己设定目标,并相应地调配资源。这适用于每个人,甚至科学家!
但为什么这一切如此痛苦?我们能做些什么呢?
我认为这种痛苦的一个原因,也是我们必须直面的一个原因,是一个组织的最高层往往缺乏清晰的目标。这种不明确性会向下蔓延到所有其他层面。
对我来说,最糟糕的是看到一家大型无名机构的 CXO,当被问及战略时,他翻了个白眼,告诉与会者,公司的目的是“显然是为了获得更多利润!”这就好比一个人告诉我,他们生活的目的是再呼吸一口气。是的,你必须呼吸才能生存,但它本身并不是目的。同样,是的,一个公司必须盈利才能继续存在,但这不是为什么它存在的原因。
*不用说,那家公司是完全混乱的,因为人们试图弄清楚他们到底应该做什么。数据战略会议是*痛苦的,因为我们试图梳理出组织的不同部分想要什么,更重要的是,为什么。简而言之,如果你认为你的数据团队的目的是提供让其他人的工作更容易的工具,那么如果其他人知道他们的工作是什么,那会有所帮助。
那么如果你发现自己处于这种情况,你能做些什么呢?不幸的是,我没有好消息告诉你。你将不得不接受痛苦。
首先,你必须有一个战略,即使组织的其他部分没有。当然,最困难的部分是确定你的团队的目标。一旦你知道了这一点,生活就简单了——你可以设定自己的目标,并找出如何利用自己的资源。一个复杂的因素是,你必须在足够长的时间内锁定你的目标,这样你才能真正实现目标。要做到这一点,你需要盟友!或者,如果你感觉不那么权谋,我们称他们为内部客户。无论哪种方式,你都必须与组织的其他部门建立伙伴关系,并说服他们,他们的最大利益在于从你这里获得他们的数据科学。
作为题外话,我可以理解为什么数据科学家讨厌这个。本质上,这是“政治”,这是我们不喜欢的。艰难。
作为“内部创业者”的数据科学家
因此,在这个阶段,你可能会觉得,既然你四处奔波,试图获得客户,你基本上是在建立自己的内部公司。我认为你应该接受这种感觉。商学院甚至为你准备了一个术语:你是一名"【7】!你感觉如何?**
无论如何,如果你承认你正在建立一个内部初创企业,那么从这些初创企业价值主张模板【8】中借鉴可能会有所帮助。我喜欢用的一个是:“我们通过提供 Z 来帮助 X 做 Y”。
在我们的案例中,我们在第一步中找到了我们的内部客户,所以这是我们的 x。我们知道他们做什么,所以我们有我们的 y。现在我们的工作是找出 z。例如,“我们通过在客户生命周期的适当时间点提供轻推来帮助客户保留团队减少流失。”
恭喜你!假设“Z”是你的第一目标。现在弄清楚目标:在我们的例子中,也许我们决定进行实验来找出哪些轻推可以显著减少流失?也许先建立一个模型来预测谁会流失?然后发邮件?在应用中推送通知?现在,您可以将这些目标交给您的团队成员,更重要的是,您的客户团队。
这里有一个明显的问题。如果你成功了,你会有很多内部客户。所以你会有很多他们想让你做的事情。你的目标不再明确。它变成了你碰巧正在做的事情的大杂烩。
现在我认为这是较小的罪恶——记住我们是在一个混乱的环境中运作的。当被要求证明你的团队的存在时,用一长串“我们通过提供 Z 来帮助 X 做 Y”来回答,比试图解释你出于某种原因开发的某种数据科学技术或技巧来回答要好得多。
然而,在某些时候,如果你幸运的话,你会在你为顾客做的事情中看到一些重复出现的主题。希望你能把这些主题抽象成一个总体目标。让我们把前面的例子推得更远一点。如果你有一堆营销团队的项目,但没有其他人,也许你的目的是提供工具,让营销增加收入?你或许可以想出一些你必须实现的目标:通过更精确的衡量来提高活动的效果,优化客户拓展,帮助开发针对服务不足市场的产品。运气好的话,这些目标中的一些会和你已经在做的项目一致。那些没有这样做的人会为你下一步该做什么制定一个路线图。
总而言之,如果你在一个没有明确战略的组织中,你别无选择,只能与其他部门的同事合作,明确自己的目标。然后,你可以设定你的目标,并按照你认为合适的方式部署你的资源。
没有来自上面的任何战略指导,你将不得不从你出去寻找的机会中建立一个战略。
好的知道了。我们数据科学家发现策略很难,因为高级管理层不知道他们在做什么…
虽然我很希望这是真的——谁不喜欢抱怨高级管理层——但生活要复杂得多。我认为还有两个因素在起作用,作为数据科学家,我们必须对这些因素有一点自我批评。
第一个因素是,随着你越来越资深,你越来越需要用愿景来激励人们。几乎根据定义,鼓舞人心的愿景不是详细的和数据驱动的(我们数据科学家喜欢的那种),它们是抽象的、高层次的叙述(世界其他地方喜欢的那种)。
举一个具体的例子,考虑一家媒体公司,其首席执行官表示,他们的目的是为历史上服务不足的群体发出声音。我可以想象某类数据科学家会放弃这个目的。你怎么能测量一个像“声音”这样抽象的概念呢?那是愚蠢的,首席执行官是个白痴。
我认为,在这里,数据科学家是错误的。
在这个顶层,你真的不需要定义“声音”,因为这是一个完美的策略。如果你来自服务不足的社区,你可能会受到它的启发, ,这是它最重要的功能 。即使你不是,你也能立即看到需要做什么。你需要参与到这个社区中来。你需要了解他们在想什么。你需要找出他们使用的媒体,这样你才能为他们制作合适的内容。换句话说,明白你必须提供一个“声音”就足以让一系列“为什么/什么/如何”的子策略级联起来。只有在组织的最底层,事情才需要被衡量。
所以在这种情况下,不是首席执行官是白痴。
不过,还有另一个因素在起作用。一位高级经理描绘了一幅远景,描述了世界的未来状态。换句话说,他们在说世界目前是这样的,它应该是那样的,我们必须做一大堆事情才能从这里到那里。任何关于未来的讨论都隐含着对未来的某种预测。
数据科学家讨厌预测!毕竟我们知道他们有多难!然而,作为一名高级经理,你必须对未来如何发展做出某种预测。你正在驾驶一艘超级油轮,你知道现在所做的任何航向修正都需要数年才能产生效果。
那么谁是对的呢?我认为双方都是。是的,很难对未来做出真正的预测,就像“洛根·洛克斯将在唐卡斯特赢得 2.18 的比赛”那样。然而,高级经理别无选择,只能在制定战略时尝试想象可能的未来。
幸运的是,对于所有相关的人来说,有一套工具可以帮助描述未来世界,如果不是科学的,至少更理性一点。然而,我认为他们足够有趣,他们应该有一个自己的帖子,我这周已经写得有点长了!要了解更多信息,您必须在下周三再来。到时候再聊。
脚注
原来有些人喜欢 JIRA,这很令人惊讶。我的最后一句话是,如果你在亚马逊上看到一个木工工具,90%的评论说“我用它切到了自己”,那么要么你可以相信 90%的人是不知道如何使用凿子的白痴,要么你可能会相信凿子可能有问题。我属于后一种阵营。
****【2】我看过的所有关于战略的书,似乎都参考了克劳塞维茨的《战争论》,所以这里就是!不幸的是,出于我的修辞目的,他似乎没有留胡子。
基本上,我已经采用了目的/途径/手段模型,并对其进行了重新调整,以使术语与我们几周前谈论的那种设计思维保持一致。参见 Arthur F Lykke,Jr. 《军事评论》,第 77 卷,第 1 期。
当我获得几千次浏览时,我会很兴奋。西蒙·西内克的演讲“伟大的领导者如何激励行动”目前播放量约为 1200 万。太棒了,看这里这里。
我在这里并没有提出什么新的主张。参见本文图 1,Richard e . berke bile 中校的“军事战略再探,对 Lykke 公式的批判”。最后一个军事参考,我保证——只是我发现那些家伙把这个想的最清楚了!
我总是模糊地将这句话与已故的伟大的特里·普拉切特联系在一起,但事实证明我完全错了!
我很乐意简化整个讨论。观点和对位法见这里和这里,均来自《哈佛商业评论》。
****【8】例如,参见 7 个有效的价值主张写作模板,Tor Grø nsund。
数据科学家:你为营销活动选择了正确的目标吗?
使用公司的使命宣言来防止以牺牲公司整体目标为代价来优化局部目标的模型。
图片来自皮克斯拜
你可以开发出世界上最神奇的机器学习模型。它可以优化目标,您的结果演示看起来很棒,您的业务合作伙伴也很兴奋。四个月后,有人突然终止了这个项目。你惊呆了。发生了什么事?业务团队设定的目标对公司的整体目标产生了负面影响。你的声誉受损,你的业绩目标落空,你的年终奖金也泡汤了。我将介绍一种方法,你可以帮助防止这种情况发生。
场景
我们的业务合作伙伴定义了一个目标:
- 活动 A:我们希望更多客户升级计划
- 活动 B:我们想增加电子邮件的打开数量
所有这些似乎都是合理的目标。每一个都很容易衡量。有什么问题?
发生了什么事
- 活动 A:该模型旨在使升级的人数最大化。更多的客户以更高的价格升级计划。他们坚持了三个月,然后决定完全放弃这项服务。那些价位较低的客户流失率要低得多。总体而言,每位客户的总收入下降,客户流失率上升。因为总收入和客户流失不是模型和测量的一部分,所以它们被遗漏了。在一次员工会议上,当有人提出这些问题时,业务合作伙伴不知所措。
- 活动 B:该模型优化了电子邮件的内容和标题,使其呈现出“点击诱饵”的效果。越来越多的客户打开了最初的两封邮件,但随后参与度大幅下降。如果主题行不代表邮件内容,你会失去客户的信任。曾经“成功”的模式现在是有害的。
为什么我们经常优化到一个局部目标
在任何商业环境中,决定优化什么总是比看起来要复杂得多。
业务人员经常面临产生可测量的结果的压力,这些结果可以很好地显示在仪表板上并呈现给上级。时间框架通常很短,声誉和奖金岌岌可危。
当工作外包给第三方供应商时,更高层次的目标可以不在工作说明书中。供应商正在做你告诉他们要做的事情,并且他们通常被提供更具体的本地目标,他们可以很容易地衡量这些目标。
我们能做些什么来平衡本地和整体公司目标?
我的建议是
关注你公司的愿景和使命陈述
“我们在 Kramerica 努力鼓励和激励人们做出积极健康的食物选择,这样他们才能过上最好的生活。”
活动 A:使命陈述没有提到创收。虽然大多数公司确实需要创造收入(即没有天使投资者的公司),但激励和推动健康食品选择的目标不能忘记。显然,对于一些客户来说,升级的激励和动机不足以抵消成本。他们太没有灵感了,他们完全退出了。该模型需要针对具有升级和保持客户倾向的客户类型进行优化。
活动 B:使命陈述是以邮件打开率为中心,还是以鼓舞和激励顾客做出积极健康的食物选择为中心?虽然电子邮件有助于促使客户到你的网站下载健康食谱,但实际下载健康食谱需要成为你目标的一部分…而不仅仅是打开电子邮件。
结论
为了每个人的利益,包括你的客户,在你与你的商业伙伴合作的早期,迫使他们讨论本地目标和全球目标。他们可能想专注于本地,但这里是你成为顾问,而不是接单员的地方。太多的数据科学家发现自己处于一个订单接收的角色,只是建立一个模型,然后继续前进,而不参与更大的目标。更接近业务并拥有更大的成果将为所有人提供更好的结果。
我讨厌当信使,但是如果你公司的愿景和使命陈述没有提供你成功所需的方向,是时候开始寻找新的雇主了。
数据科学家必须知道概率
应用条件概率和贝叶斯定理的真实例子
简·根格在 Unsplash 上的照片
我是一家顶级科技公司的产品数据科学家,从事手机浏览器应用程序的开发,我面临许多关于我们产品的模糊问题,我必须用数据来回答它们。通常会有很多不同的答案,因为数据代表我们的用户,而不是所有的用户都一样。因此,答案并不总是直截了当的。概率帮助我衡量我对我的答案或我的机器学习模型有多自信。概率是许多机器学习模型和评估技术的核心,所以为了成为一名优秀的数据科学家,你必须知道概率是如何工作的。在本文中,我想帮助读者了解一个如何应用条件概率和贝叶斯定理公式的真实例子。
概率帮助我衡量我对自己的答案有多自信。
我相信贝叶斯定理是概率中最常用的术语和概念之一。如果你想学习概率的基础知识,我推荐你去看看我在文章底部提到的资源。
我们开始吧
在直接进入我们的例子之前,为了定义一个特定“事件”的概率,我们写下如下内容:
下面是一个最常用的例子:
- 如果你掷一枚公平硬币,得到正面的概率会写成 *P(h) = 50%,*得到反面的概率会写成 P(t) = 50%。
- h 代表正面的结果,而 t 代表反面的结果。
在本文中,我将使用我作为数据科学家在工作中遇到的一个问题中的一个例子。
问“如果一个用户在手机浏览器中收藏了一个网站,那么这个用户下周回来的可能性有多大?”
在该示例中,您有:
- 用户喜欢某个网站的概率: P(f)
- 下周回来的概率:P(w)
- 给定用户喜爱的站点,用户下周再次访问的概率: P(w|f)
- 假设一个用户在一个星期后再次访问某个网站,那么该用户喜欢该网站的概率: P(f|w)
让我们给这些变量分配一些随机概率%。
- 【P(f)】= 40%**
- 【P(w)】= 60%**
- ****P(f | w)=**50%
注:本例中的数字是虚构的。
*如果有两个事件,您需要确保事件是独立的或相关的。在上面的例子中,这两个事件很可能是相关的,因为如果一个用户在他们的浏览器上喜欢一个站点 *P(f ),下周回来的概率很可能会受到影响。这个效果可以是负面的,也可以是正面的。
条件概率
我之前提到的例子也涉及到了条件概率。假设用户喜欢一个网站,一周后回来的概率, P(w|f)。
如果这两个事件是独立的, P(w|f) 的定义将是:
- P(w|f) = P(w) = 50% 因为用户一周内回来的概率并不取决于用户对某个网站的偏好。
然而,正如我所说的,这两个事件很可能是相互依赖的。因此,更有意义的定义是:
条件概率的贝叶斯定理
- P(w|f) = 后验概率
- P(w) = 先验概率
- P(f|w)/P(f) =似然比
使用我之前提供的%,你可以把它们代入公式,得到一个用户在一周后再次访问某个网站的概率。
如果用户喜欢一个网站,他们似乎更有可能回来。可能性(50%/40% = 125%)是这里的关键,这将有助于你理解条件是否会增加概率。
模型预测和概率
好吧,现在我知道了。我将创建一个模型,根据用户第一周的行为来预测用户是否会回来。我测试了我的模型,它有 85%的准确率,这意味着它将在 85%的时间里产生正确的预测(这有时被称为回忆)。在我的测试结果中,我有一个 10,000 名用户的样本,我知道其中 6,000 名用户在一周后又回来了。如果我的模型预测一个用户会在一周内回来,那么这个用户一周后真正回来的概率是多少?
花点时间思考这个问题…
如果你认为答案是 85%,我不怪你。这似乎是最直观的答案。但是,我想用一个视觉来帮助你理解为什么这个答案不确切
从视觉效果来看,即使用户实际上不会回来,也有可能预测他们会回来(这可能就是您所说的“误报”)。考虑到误报,计算将如下所示。
6000 * 85%的用户确实会回来= 5100
+
4,000 * 15%的用户实际上不会回来= 600
=
5,700
所以,一个预测一周后回来的用户,一周后实际回来的概率是 89.5%(5100/5700 = 89.47%)。答案与我们之前的直觉很接近,但并不是所有用例都是这样。当人口不平衡时,准确性不是一个好的评估标准。幸运的是,在我们的例子中,在 10,000 名用户的样本中,回来的用户与不回来的用户的比例相当平衡,为 60/40。
我希望我能帮助你教学,并向你展示更多关于概率的重要性。我建议所有有抱负的数据科学家走出去,了解更多信息
如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。
中:https://medium.com/@testandlearn
*领英:【https://www.linkedin.com/in/kennyk1m/ *
资源:
随机性无处不在。概率论是允许我们分析偶然事件的数学框架…
seeing-theory.brown.edu](https://seeing-theory.brown.edu/basic-probability/index.html) [## 2.1.3 -概率规则|统计 200
今天就在宾夕法尼亚州立大学世界校区注册,获得统计学认证学位或证书。
online.stat.psu.edu](https://online.stat.psu.edu/stat200/lesson/2/2.1/2.1.3)*
数据科学家必须了解统计学
如果你想成为一名数据科学家,你必须知道这些统计术语和概念
露丝·齐默曼在 Unsplash 上拍摄的照片
随着我继续作为微软数据科学家的旅程,我经常来 Medium 阅读数据科学相关主题。在 Medium 上呆了一年多之后,我注意到机器学习模型通常是有抱负的数据科学家非常追捧的话题。然而,大多数基础统计知识都被忽视了,因为它并不“性感”。在我重温统计学知识的同时,我希望我也能激励有抱负的数据科学家在转向其他高级统计模型和实验方法之前先学习基础知识。
注:所有引用的定义均来自由 Peter Bruce 和 Andrew Bruce 撰写的数据科学家实用统计学。
在本文中,我将介绍以下概念:
- 样本和总体
- 集中趋势的度量
- 可变性的度量
- 相互关系
样本和总体
在数据科学家开始任何分析之前,他们需要确定他们是包括所有用户还是用户的子集。这听起来很简单,但在现实世界中,很容易将一个样本误认为是整个人群。
例如:一位数据科学家调查了华盛顿大学 2019 届校友,以确定进入职场的平均收入。你会发现平均收入是 15 万美元。如果你从华盛顿大学毕业,你会挣 15 万美元左右,这种假设正确吗?大概不会。调查的受访者是华盛顿大学 2019 届校友班“人口”的“样本”。如果您决定使用调查数据进行分析,那么您的分析中可能会包含偏见。
开始数据分析时,考虑数据是来自样本还是总体。如果您使用样本,请确保您使用的是随机样本,如果您想要进行分析或创建模型以将您的发现推广到整个人群。
来自数据科学家实用统计:
人口 =对我们的研究感兴趣的所有项目的集合(N)
样本 =总体的一个子集(n)
简单随机抽样 =随机抽取人口的一个子集,人口中的每一项都有同等机会被选入该子集(不分层)。
这个话题在进行实验(也称为假设检验)时会变得非常重要,但却经常被忽视。作为微软的数据科学家,我经常遇到样本比例不匹配的情况,即来自对照组和治疗组的样本不均匀,这是一个很好的警报,可以用来调查我们正在分析的 AB 测试数据。样本不匹配可能是由各种原因造成的,如某些特征的代码逻辑和治疗引起的行为变化。在进行任何进一步的分析之前,需要解决这个问题。
记住:数据质量>数据数量。
集中趋势测量
是的,这可能是一个你已经听过无数次的话题。然而,在实践中,这一点往往会被忽略,因为许多工具使得计算平均值更加容易。此外,通过意识到并熟悉所有集中趋势的度量,你可以找到新的见解,你可以很容易地使用最基本的估计,均值。
让我们现在过一遍。
平均值 =所有值的总和除以值的个数(第 50 百分位)
来自数据科学家实用统计:
一般来说,均值对于正态分布的总体来说是一个很好的度量,但是如果数据变得有偏差或者有不同类型的分布,您可能会错过。这里有一篇学习分布的好文章:“每个数据科学专业人士都应该知道的 6 种常见概率分布”
这里有其他类型的方法也可能是有用的。
加权平均值 = 所有值之和乘以一个权重除以权重之和。
来自数据科学家实用统计
在许多数据集中,一些值可能比其他值“更重要”。例如,如果谷歌正在分析一个移动应用程序的评级。他们可能希望将更多的权重放在比一年前给出的星级评级更近的星级评级上。
修整平均值=去掉固定数量的极值后所有值的平均值。
来自数据科学家实用统计
这种类型的平均消除了异常值的影响。例如,如果脸书根据用户在移动应用中的时间来分析用户的参与度。数据科学家可能希望删除某些用户,这些用户可能是参与时间不合理的“机器人”。
Median =一半数据位于上下的值
中位数也被称为第 50 百分位。当数据中引入异常值或数据不具有正态分布时,中位数可以是非常稳健的平均估计值。例如,我在上看到一篇关于西雅图科技员工平均工资为 27.9 万美元的文章。它声明在文章中没有使用中间值。这就好比你平均有 10 名员工,每个人的工资都在 10 万美元左右,其中一名员工是 CEO,收入为 100 万美元。这可能会偏离平均水平,让公司看起来员工平均收入为 19 万美元。是的,一家普通的公司不会有 10 名员工,但是大多数 C 级高管的收入要比普通员工高得多。
模式 =出现次数最多的值
这是一个相当简单的计算,但它对快速获得洞察力非常有帮助。例如,如果一名数据科学家正在衡量抖音的应用使用情况,他们通过过去 7 天的活跃天数来衡量用户数量,他们可能会快速找到大多数用户平均一周使用该应用的活跃天数。
如果你现在问自己,什么衡量标准是最好的,要明白没有衡量标准对所有数据都是“最好”的。但是,您应该养成检查数据的所有度量的习惯,以确保您没有错过某些见解。
差异量数
除了测量分析数据的集中趋势,数据科学家还测量可变性。可变性最常见的度量之一是偏差。值与平均值的距离。虽然计算偏差更直观,但实际上输出往往不太直观,这就是为什么我们使用方差和标准差。
方差 =平均值的方差平方和除以 n-1,其中 n 是数据值的数量
标准差 =方差的平方根
来自数据科学家实用统计
虽然方差是可变性的良好度量,但在统计学中,我们经常使用标准差,因为方差由于平方而变得很大,标准差与集中趋势的度量更具可比性(单位)。在实验中,数据科学家往往会用 2 个标准差作为衡量显著性的阈值。我不会在本文中深入实验,但这对于所有数据科学家来说都是一个重要的概念。
标准差是衡量单个数据集可变性的最常见指标,但在比较两个或更多数据集时,会有一个变异系数。
变异系数= 标准差除以样本均值。
其他不常用的可变性度量是范围、百分位数、中位数绝对偏差和四分位数范围,但我不会在本文中讨论这些,因为它们在实践中很少使用。
相关系数
几乎在任何数据分析中,数据科学家都会比较两个变量以及它们之间的关系。有两个不同的值来衡量这种关系:相关系数®。另一个在概念上非常相似的度量是术语“协方差”,但它的计算是不同的,数据科学家不太常用。
相关系数*=* 衡量数值变量相互关联程度的指标(通常描述为 r,范围从–1 到+1)。
下面是一个计算皮尔逊相关系数的例子。
来自数据科学家实用统计
通常,当您比较一个特征变量和一个目标变量时,您将测量相关性以查看它们如何相互关联。需要记住的一件重要事情是,相关性并不意味着因果关系。例如,如果一名数据科学家正在分析 Twitter 应用的留存率,他们可能会错误地声称用户发的推文越多,留存率就越高。然而,可能有一个混淆变量——另一个变量(即关注者数量)导致推文数量和保留率上升。这就是为什么实验总是很重要的原因!
在第 2 部分中,我将介绍假设检验,也称为实验。
资源
- 安德鲁·布鲁斯和彼得·布鲁斯的《数据科学家实用统计学》
如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。
中:https://medium.com/@测试处理学习
领英:https://www.linkedin.com/in/kennyk1m/
“想要解决所有问题”是数据科学家的陷阱
意见
选择相关的和有影响力的,远离其他的
照片由来自 Pexels.com的帖木儿·萨格兰比莱克拍摄
几乎每一个我参与的数据科学项目,我都从那里学到了至少一个新的教训。在我之前的帖子中,我分享了缺乏明确定义/一致的目标会导致失败。在这篇文章中,我想谈谈我经常陷入的一个陷阱——用算法解决几乎所有问题的诱惑。
解决问题是不可抗拒的。对数据科学家来说更是如此
我们人类是天生的问题寻求者和问题解决者。当我们解决了别人解决不了的问题时,我们的大脑会感到兴奋。虽然非数据科学家群体使用分析、逻辑和经验学习来解决问题,但数据科学家已经在理论、技术和应用方法方面接受了实践培训。吸引数据科学家的不仅仅是培训和技能。
技术已经成熟,为机器学习和人工智能创造了最有利的环境
- 在过去的十年中,公司已经进行了大量的投资来组织和存储他们能够得到的每一个数据。
- 许多外部(公司外部)数据已经大众化,很容易访问。
- 云公司简化了建立技术基础设施的过程。
- 开源文化导致了对经过试验和测试的算法及其源代码的可访问性
- 大学已经培养了足够多精通基础统计学、机器学习和人工智能的毕业生。
数据科学家是拥有最好凿子的好奇雕塑家
有了所有这些,数据科学家就像熟练的木匠,他们手里拿着最好的工具,站在树皮前。每一块木头看起来都像是一件艺术品的候选者。每一个问题看起来都不可抗拒地需要被触摸和解决。
我们拥有之前抱怨没有的一切。最重要的是,我们在每个行业都有问题要解决。既有真实的问题,也有编造的问题。那么,为什么我们不解决所有的问题呢?这正是我们陷入的陷阱——一个叫做“用数据科学解决所有问题”的陷阱
“对拿着锤子的人来说,一切看起来都像钉子”——马克·吐温
限定问题。如果算法不合适,敢于说“不”。
很多时候,一开始就说“不”是正确的——为了公司,为了团队,也为了你自己。然而,生存的压力,证明的压力通常会将我们带到“让我们尽力而为”和“让我们看看我们能做什么”的方向,这最终会使团队辜负他们自己和他们的客户,损失金钱和时间,让每个人都感到沮丧,也失去了对技术/数据科学的信任。
正确的做法是花时间鉴定问题,仔细评估它们,最重要的是把那些可能浪费时间和精力的问题推到一边。以下是我的经验清单。
类型#1:根本不值得解决的问题
汤姆·利什曼在 Pexels.com拍摄的照片
有问题,然后有约束。有时候以解决问题的名义,试图解决约束。
在我的一个销售预测项目中,我和我的团队被要求对一场酝酿中的飓风的预期路径进行建模,并将其用于预测算法中。目标是预测哪些商店可能会在飓风的路径上,以及什么产品需要发送给他们以及何时发送。
理由如下——我们有过去的天气数据,我们有飓风预报,我们有过去飓风期间客户购物行为的历史记录,当然我们可以提供预报。当我们着手解决时,我们了解到:
- **缺乏准确可靠的输入数据:**飓风的路径不断变化。每个飓风都不尽相同。根据飓风的严重程度,客户对飓风的反应也会有所不同。如果我通常开车 5 英里去一家商店进行每周一次的备货,如果发布了严重的飓风警报,我可能愿意开车 70 英里去为整个月备货。
- 对结果采取行动是不切实际的:确定飓风半径 5 英里范围内的哪些商店应该备货是不太准确的。即使我们这样做了,也有可能仓库(为这些商店服务)被损坏,道路被损坏,该地区停电,服务商店的备用路线等。这增加了决定哪些区域将受到影响以及哪些商店将向服务客户开放的复杂性
- **学习:**在花费了大量的时间和金钱之后,我们决定(并了解到)建立一个由商家、供应链团队、气象团队、政府机构和当地区域经理组成的作战室来管理每天和每周发生的事情是一个不错的主意。
有时,专家的意见甚至优于复杂的机器学习模型。工作几个月后昂贵的学习!尽早对替代方法保持开放的心态!
类型 2:不值得解决的问题(ROI)
没有什么东西不能从“增量改进”中获益。还有另一个陷阱。大多数时候,在增量改进的借口下,项目用最少的 ROI 来挑选问题。
我目睹过零售商业务团队要求 104 周的销售预测。
**它将如何用于什么?😗*大多数情况下,除了具有长交付周期计划的产品,这种预测主要是出于预算原因。有如此多的因素影响着零售业,第 104 周的数字只是一个指引。
**预测的准确性有多重要:**问题是,我们为什么要投资建立一个复杂的模型来预测未来 2 年的情况。
学习:我学到了问令人不舒服的问题是很重要的。“是的。这是一个差距/问题。但是,它有多大呢?还有其他更值得解决的事情吗?”我们最终采用了一种简单的估算方法,使用去年的实际数据,并根据预测的增长/下降进行了调整
有时,简单的基于 excel 的解决方案比复杂的统计模型效果更好。
类型 3:使用非数据科学方法可以更好地解决问题
图米索在Pixabay.com拍摄的照片
我曾经领导过一个项目,要求预测从海外进口的产品到达美国客户手中需要多长时间。目标是能够向客户和/或零售店传达预期的交付日期。一开始,它似乎是数据科学的一个很好的候选者。但是,直到我们发现了影响预期预测准确性的两个内在原因。
- **受不可控不确定性影响的输入数据:**集装箱在海上花费的时间。一个来自中国的集装箱可能通过不同的路径到达美国的港口。它们通常是提前计划好的,但事情可能会在最后一刻发生变化。此外,在到达美国之前,这艘船通常会在其他几个港口中转/停留。船只的全球定位系统数据对于船只在某个时间点的位置是一个相当好的输入。但也有其他事件,如海上的恶劣天气,跨国政治紧张局势,导致船只中途改道。所有这些都会影响船只预计到达其航线上的下一个中转站的时间。
- **流程缺乏可见性:**一批货物在港口清关所需的时间有很大的可变性。不知道您跟踪的第一个或最后一个卸载集装箱上的产品是否未知。由于卸货(和离港)时间从 2 天到 1 周不等,任何历史数据都是不可用的。
- 学习:在这种情况下,正确的方法不是预测。正确的解决方案是提供准确、实时的集装箱状态数据,寻求与数据机构合作的方式来改善这种状况,并实现对当地港口集装箱卸载时间表的实时跟踪。告诉客户进口产品大约需要“x”天,我们会“在交货日期临近时通知您”,这可能是个好主意。提供不准确的预测会导致客户不满。
我们不必假设对数据科学团队的每个请求都意味着必须使用复杂的统计模型来解决。
类型 4:问题,即使解决了,也不会被发现,除非整个支持业务流程的生态系统发生变化
来源: Pixabay
有一次,我被要求预测商店每小时的库存情况,这样商店的产品就不会缺货。对于这个大公司来说,其供应链完全是为了规模经济而设计的,当卡车每天只离开仓库一次时,求解每小时的库存位置没有任何帮助。
是的,建立一个复杂的算法来解决这个问题是可能的——但是它不会被使用。所以,这就辜负了“我们将如何使用它?”测试。
**学习:**总是询问如何将洞察力付诸行动。
有时候,洞察力要求采取与公司整体战略和方向不一致的行动。这是为失败的项目做准备。
类型#5:需要创建数据的问题。
西蒙·辛伯格在 Pexels.com拍摄的照片
我们在数据科学项目中犯的另一个大错误是没有彻底评估产生结果所需的关键数据的可用性。虽然我们都知道垃圾进=垃圾出,但我们无法避免犯这个错误。
这是一个决定 1000 个床上用品系列产品的“正确”销售价格的项目。
**方法和固有缺陷:**我们采用的方法是使用可用的数据,即历史销售数据。是的,历史数据包含了尺寸、面料、线数、颜色、图案如何计入历史零售价格的信息,以及销售对此的反应。
缺失的部分:T 决定一件商品的正确价格的最重要的数据是顾客对该产品的看法。换句话说,相对于比这个产品差一个级别的产品,客户愿意为这个产品多付多少美元。在顾客心目中,决定产品与其他产品相比是劣等还是优等的参数是什么?与客房相比,顾客愿意在主卧床上用品(通常是特大号)上投资多少?这些数据点最好是通过精心的调查或使用模拟购物环境创建的数据来收集。
**学习:**使用先前的购物模式试图欺骗模型,使其认为顾客的决定是相同的。
错过一个关键的数据元素并决定“让我们尽最大努力利用现有资源”会导致精力和时间的浪费。
数据科学具有变革潜力。让我们明智地使用它!
不可否认,数据科学可以产生变革性的影响。公司依靠他们在高级分析和人工智能方面的大量投资来重振业务,拓展新的领域。
然而,数据科学产生的影响与所解决问题的类型和相关性成正比。必须花很多时间来鉴定这个问题。
我们应该记住,数据科学专业人员不仅有责任解决方案,而且有更大的责任选择哪些方案。
“成功的解决问题需要为正确的问题找到正确的解决方案。我们失败更多是因为我们解决了错误的问题,而不是因为我们用错误的方法解决了正确的问题。”——罗素·L·艾可夫
让我们下定决心,利用最好的数据、计算和机器学习来推动真正有影响力的成果。让我们远离解决“一切”的诱惑吧!
本文原载于一个想法。
数据科学家应该在游戏中学习
我第一次听说通过玩耍学习是在我送孩子去幼儿园的时候,但现在我意识到这是所有数据科学家应该学习的方式
如果说现在有一件事真的让我恼火,那就是当人们看着我正在做的东西问我,通常是用“比你更神圣”的语气:你的用例是什么?你想解决的问题是什么?作为一名训练有素的麦肯锡顾问,没有人比我更清楚必须预先定义你的问题,为你正在做的工作列出用例的原则。
但是如果你正在学习数据科学,我认为你应该把那个原则扔出窗外,采取一个新的原则:通过玩耍学习。这种哲学的基础是这样一种想法,如果你的目标是学习新的技术技能,你应该在头脑中想出没有特定最终目标的项目,除了你想做这件事,并且你认为你可能会从参与活动中获得一些刺激。在这篇文章中,我将论证通过游戏学习的原则同样适用于数据科学家和学龄前儿童。我们将看看行为心理学家对通过玩耍学习的看法,我希望你能和我一起得出这样的结论:如果你尝试其他方式,你将会错过在其他地方找不到的重要学习。
寓教于乐的原则
对所有学龄前儿童来说,这个世界是新的,他们需要在幼年时了解它。大多数行为心理学家和教育家都认为最有效的方法是通过玩耍。正是通过玩耍,孩子们利用一个安全的环境来探索和测试他们成长过程中需要的技能——他们的社交和认知技能,他们的情感成熟和自信。
这本书爱因斯坦从未使用过抽认卡列出了游戏区别于工作的五个特征:
- 参与者需要享受它
- 没有目标或规定的学习
- 这是自发的,参与者自愿参与
- 参与者主动参与,而不是被动参与
- 有“假装”或“假装”的成分
重要的是,工作和娱乐之间有两个关键的区别。首先是谁发起的。游戏大多由参与者发起,而不是由领导者、协调者或权威人物发起。游戏是完全面向过程的,没有明确的预先目标。
在工作之外,我经常参加个人学习项目,以继续发展我的技术数据科学技能,并跟上最新技术。这方面的一个例子是,我最近完成了一个个人项目,在这个项目中,我从电视连续剧朋友 中创建了一个人物网络,这样我就可以分析和可视化这个网络。
直到我现在把它写下来,我才如此明确地意识到这一点,但我所有的个人学习项目都遵循在玩耍中学习的原则。以我的朋友项目为例:
- 我知道我会喜欢这样做
- 我心里没有具体的最终产品。我知道会有一个最终产品,我也知道我会在做的过程中学习新的技能,但我还没有预先定义那些会是什么。换句话说,这是过程驱动的,而不是目标驱动的。
- 我凭空想到了它,并自发地着手解决它
- 我主动追求到了一个自己满意的自然终点。
- 这不是一个真实的工作环境,所以有一个“假装”的因素,消除了我在取得进步的喜悦之外的任何风险或个人压力。
数据科学家为什么要通过玩来学习?
就像学龄前儿童的世界一样,数据科学家的世界是巨大的,有时令人不知所措。我从哪里开始?接下来我该做什么?我怎么知道我能做到?什么可能会出错?但是你玩得越多,这些问题就越少,你就越有信心迎接任何挑战。
不要误会我的意思,我并不是反对数据科学中的正规教育和学习目标,这些仍然是绝对必要的,尤其是对于刚进入该领域的人来说。但我认为,伟大的数据科学家只有通过游戏学习才能成为伟大的数据科学家。以下是三个原因:
- 正规教育只能涵盖当今数据科学中存在的所有工具、方法和可能性的不到 1%。在某些时候,当你发现你需要的技能时,你只能靠自己。这种发现是通过玩耍实现的。
- 知识和能力只有在找到用途的情况下,才能有效地获得并保留在人们的头脑中。鉴于我们的工作和职业本质上是狭窄的,履行日常职责所需的知识和技能通常是有限的。因此,如果我们想学习新的不同的技能,我们需要其他渠道,其他项目。玩项目。
- 当我们玩数据的时候,从定义上来说,我们是在享受。这为学习和保留知识创造了一个更好的环境,而不是简单地做我们被告知要做的事情。我们更有可能知道事情什么时候可行,什么时候不可行,这意味着当未来风险更高时,我们可以更好地应用它们。
你通过玩耍学习吗?
我毫不怀疑我是通过玩耍来学习的。在我最近的记忆中,我在工作中使用或应用的所有新事物都是我通过有趣的个人项目接触到的东西。如果我没有参与这些项目,我可能永远也不会知道我在工作中使用的方法。
但是你呢?这里有一些问题可以问你自己,以确定你是否在玩耍中有效地学习:
- 我在工作之外接项目是为了个人享受吗?
- 我是带着探索精神和个人兴趣接受他们的吗?
- 我是否在思考如何着手这些项目并取得进展(而不仅仅是盲目复制别人已经做的东西)?
几年来,在玩耍中学习一直是我的口头禅,尽管我现在才开始把它表达出来。我确信这应该是所有数据科学家的口头禅。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。也可以看看我在drkeithmcnulty.com上的博客。
iStock 照片
数据科学家— SQL 技术访谈
数据科学家需要了解多少 SQL?SQL 知识清单。
米尔科·布利克在 Unsplash 上拍摄的照片
如果你想成为一名数据科学家,你必须了解 SQL。SQL 和数据密不可分,因此今天所有的数据科学家面试都将通过使用 SQL 的技术面试。当然也有例外,他们可能会给你 R 或者 Python 的选择。然而,我可以保证,与任何其他语言相比,采访将更普遍地涉及 SQL。
SQL 是数据的基础语言。
下面是我将在本文中介绍的内容:
- 学习资源
- SQL 清单
学习资源
为了掌握 SQL,我推荐两个资源:
- 安东尼·莫里纳罗的 SQL 食谱。我在学习 SQL 的时候就有这本书,即使我对 SQL 很流利,我也把它带到工作中。拿到这本书,准备做饭。我想有些人可能认为这对于一些数据科学家来说是有点太多的 SQL,但是说实话,数据科学家生活在 SQL 的世界里。如果您能更好地使用 SQL,您将在任何数据科学项目的前端节省大量时间。
- 模式— SQL 教程 **。**这可能是最好的免费资源之一,在这里你可以实践你在他们的查询编辑器中学到的东西。
注意:我不是这些资源的赞助商。我有预算意识,所以这就是我选择上面两个资源的原因。以上将花费你 30 美元来开始。
当你开始学习时,不要太担心你正在学习的语法。不是每个公司都使用相同的工具来处理数据,所以我的建议是你学习基本概念,面试官通常会让你通过。例如,在微软,我使用 SQL 的三种内部变体,它们在语法上都不同…
SQL 清单
格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片
在这一部分,我想介绍大多数数据科学家面试官希望你提供的 SQL 清单。我不会介绍 SQL 提供的所有内容,而是会介绍最重要的主题,并尝试为您指出我没有介绍的主题的正确资源。
注意:我将在这里使用 SQL Server 语法,因为它最接近我使用的语法。
1.让我们来看看 SQL 结构
- 这是 SQL 的一般“结构”。你应该知道所有这些是如何工作的。
SELECT [columns]
FROM [table]
WHERE [filter]
GROUP BY [group by columns]
HAVING [filter condition
ORDER BY [select columns/aggregate to order by (ASC OR DESC)]
2。获取顶部行进行快速检查
当您浏览任何表时,您应该总是检查前 N 行,以便理解表的模式。您可以使用顶部来完成此操作。
SELECT TOP N
FROM
为了进行快速检查并节省处理时间,您希望只提取几行,以便获得关于模式的足够信息,从而指定您的 SQL 代码。
3。滤镜!滤镜!滤镜!
WHERE
在检索您指定的列之前, WHERE 子句将确保过滤掉您需要的所有列。请确保在执行 SQL 查询之前这样做,因为处理大数据需要大量的计算能力。通常,这种计算能力需要花钱,并且由数据团队共享,所以您需要注意 SQL 代码中的 WHERE 子句,以确保您没有检索任何不必要的数据行。
继续在这里练习。您应该关注以下部分,以便真正理解如何利用 WHERE 子句。
- SQL WHERE
- SQL 比较运算符
- SQL 逻辑运算符
- SQL LIKE
- SQL 输入
- SQL BETWEEN
- SQL 为空
- SQL 和/或
- SQL NOT
重要提示:WHERE 子句不接受聚合、标量子查询、窗口函数和别名[1]
4。处理空值…并在 SELECT 语句中添加逻辑
数据没有你想的那么干净。它通常很脏,在获得您想要的数据之前,您需要清理它。最常见的挑战之一是处理空列。在应用任何 SQL 函数之前,您必须首先了解如何处理它们以及它们会如何影响您的查询。查看此 链接 了解更多信息。
在查询 NULL 值时,它们有许多细微差别(也因您使用的工具而异),所以很多时候,您会尝试用更有信息性/更有帮助的值来替换它们。 COALESCE 是 SQL 用来处理空值的一个很棒的函数。如果您注意到列中可能有许多 null 值,并且希望在它为 NULL 时提供另一个值,那么可以使用 COALESCE 函数。
SELECT coalesce(<column A>, <if column A is null THEN "">)
FROM-- Example: Grab <date> column from the <DateDim> table and if it's null, give me "01/01/2020"SELECT coalesce(date, "1/1/2020")
FROM DateDim
CASE WHEN THEN ELSE(可选)结束。
如果您想在 SQL 中使用逻辑语句,CASE 语句可能是大多数数据库查询语言语法将使用的语句。学习如何使用它们,并在这里练习使用它们。这可能是 SQL 中最常用的函数之一。Mode.com 很好地解释了这一点,并为你提供了练习的选择:https://mode.com/sql-tutorial/sql-case/
5。聚集物
计数、求和、最小/最大值和 AVG 可能是最常用的聚合函数。练习使用它们,并理解它们是如何工作的。我将再次向您推荐 Mode.com,但这里有一些需要注意的有用提示:
- 在大多数 SQL 语言中,当您对未聚合的列使用聚合时,这就是您必须使用 Group By 子句的地方。
- 当您使用聚合时,您可以利用 HAVING 子句。
- 聚合经常忽略空值!
6。日期
如果您正在处理大数据,您将拥有带有时间戳的数据,这些时间戳表示数据何时被接收到数据库中,或者包含您正在处理的数据行的一些日期数据。就我个人而言,我经常和日期打交道,它们会让人很困惑。
尝试确定这些概念:
1.SQL 中的日期格式
- 这里有一个理解日期数据类型的好资源: Link 。没有必要记住它,除非您可能知道日期格式是“YYYY-MM-DD ”,还有其他数据类型。
2.如何加减不同组的日期?
DATEADD (datepart , number , date ) -- Example: Return all the data from the past weekSELECT *
FROM MyTable
WHERE <DateColumn> >= DATEADD(day, -7, getdate())
3.获取当前时间。(其他可用选项)
SELECT GETDATE()
7.SQL 中的数据类型
很多时候,您正在使用的数据类型并不适合您,因此您必须学会如何改变它们。如果你没有处理过数据,这可能并不重要,但这是一个非常重要的概念。
关于数据类型,您可能需要了解以下三点:
- 了解存在哪种数据类型。链接
- 使用 CAST 和 CONVERT 更改数据类型
- 理解数据类型可以隐式地改变(这里有更多的)
-- CAST Syntax:
CAST ( expression AS data_type [ ( length ) ] )
-- CONVERT Syntax:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
8.连接和联合
连接和联合在数据科学领域至关重要,因为您经常要处理多个数据集。通过连接,您可以将两组数据放在一起以创建有用的见解,但这通常可能是查询可能出错的最常见的地方之一。
要理解 JOIN 的工作原理,请阅读并练习如何使用 JOIN这里的 。
以下是关于联接和联合需要了解的一些主要概念:
- 没有在连接中确定正确的键会导致笛卡尔积
- 请确保在加入之前将数据集缩减到您需要的大小!连接的处理量很大,尤其是在处理数百万行数据时。
- 外部联接可以帮助您获得与联接键不匹配的数据。
- JOIN 和 UNION 的区别。这里有一篇很棒的文章是我在比较两者时发现的。
因为我是一个视觉化的人,我决定创建一个可视化来帮助你理解连接。
9.窗口函数(也称为分析函数)
窗口函数可能是一种更高级和更有效的 SQL 功能。它可以使非常复杂的任务变得更加容易解决。一个常见的错误是认为窗口函数实际上会将行组合成一行,因此理解 SQL 中的组和窗口之间的区别将真正帮助您使用窗口函数。窗口函数的关键字是 OVER(),语法可能会有所不同,这取决于您想要进行的计算类型。了解这个函数的用途可以节省您大量的时间。
我在网上找到的两个最好的资源:
摘要
综上所述,学习 SQL 最好的方法就是实践。有许多细节你可能仅仅通过阅读就忘记了,所以我的建议是使用我推荐的资源,花时间键入和浏览它们提供的问题,以便学习 SQL 的小复杂性。如果您有任何问题,或者如果您觉得我错过了成为数据科学家的基本 SQL 知识的任何主要组成部分,请联系我。
附录
[1]Anthony Alinaro 的 SQL 食谱
如果您有任何问题或反馈,请随时在下面留下您的问题或反馈,或者在 LinkedIn 上联系我。
中:https://medium.com/@testandlearn
**领英:【https://www.linkedin.com/in/kennyk1m/ **
数据科学家,开始使用分析器
找到算法中真正让你慢下来的部分
照片由 Jantine Doornbos 在 Unsplash 拍摄
数据科学家通常需要编写大量复杂、缓慢、CPU 和 I/O 繁重的代码,无论您是处理大型矩阵、数百万行数据、读取数据文件还是浏览网页。
当对另一部分进行一些简单的修改就能使代码速度提高 10 倍时,难道你不想浪费时间重构代码的一部分,试图榨干最后一丝性能吗?
如果您正在寻找一种加快代码速度的方法,一个分析器可以准确地显示哪些部分花费的时间最多,让您看到哪些部分将从优化中受益最多。
分析器测量程序的时间或空间复杂度。对算法的大 O 复杂度进行理论化肯定是有价值的,但是检验算法的真实复杂度也同样有价值。
你的代码最大的减速在哪里?你的代码 是 I/O 绑定还是 CPU 绑定 ?哪些具体线路导致了速度变慢?
一旦你回答了这些问题,你将 A)对你的代码有更好的理解,B)知道你的优化工作的目标是什么,以便用最少的努力获得最大的收益。
让我们深入一些使用 Python 的快速示例。
基础知识
您可能已经熟悉了一些为代码计时的方法。您可以检查一行执行前后的时间,如下所示:
In [1]: start_time = time.time()
...: a_function() # Function you want to measure
...: end_time = time.time()
...: time_to_complete = end_time - start_time
...: time_to_complete
Out[1]: 1.0110783576965332
或者,如果您在 Jupyter 笔记本中,您可以使用神奇的%time
命令来计时语句的执行,如下所示:
In [2]: %time a_function()
CPU times: user 14.2 ms, sys: 41 µs, total: 14.2 ms
Wall time: 1.01 s
或者,您可以使用 other 魔法命令%timeit
,它通过多次运行该命令获得更精确的测量,如下所示:
In [3]: %timeit a_function()
1.01 s ± 1.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
或者,如果您想为整个脚本计时,您可以使用 bash 命令time
,就像这样…
$ time python my_script.py
real 0m1.041s
user 0m0.040s
sys 0m0.000s
如果您想快速了解一个脚本或一段代码运行需要多长时间,这些技术非常有用,但是当您想要更全面的了解时,这些技术就没那么有用了。如果你不得不在time.time()
支票中换行,那将是一场噩梦。在下一节中,我们将看看如何使用 Python 的内置分析器。
使用 cProfile 深入探索
当你试图更好地理解你的代码是如何运行的,首先要从 Python 的内置分析器 cProfile 开始。cProfile 将记录你的程序的各个部分被执行的频率和时间。
请记住,cProfile 不应该用于测试您的代码。它是用 C 写的,这使得它很快,但它仍然引入了一些开销,可能会影响您的时间。
有多种方法可以使用 cProfile,但是一种简单的方法是从命令行使用。
在演示 cProfile 之前,让我们先来看一个基本的示例程序,它将下载一些文本文件,计算每个文件中的单词数,然后将每个文件中的前 10 个单词保存到一个文件中。话虽如此,代码做什么并不太重要,只是我们将使用它来展示分析器是如何工作的。
测试我们的分析器的演示代码
现在,使用下面的命令,我们将分析我们的脚本。
$ python -m cProfile -o profile.stat script.py
-o
标志为 cProfile 指定一个输出文件,以保存分析统计数据。
接下来,我们可以使用 pstats 模块(也是标准库的一部分)启动 python 来检查结果。
In [1]: import pstats
...: p = pstats.Stats("profile.stat")
...: p.sort_stats(
...: "cumulative" # sort by cumulative time spent
...: ).print_stats(
...: "script.py" # only show fn calls in script.py
...: )Fri Aug 07 08:12:06 2020 profile.stat46338 function calls (45576 primitive calls) in 6.548 secondsOrdered by: cumulative time
List reduced from 793 to 6 due to restriction <'script.py'>ncalls tottime percall cumtime percall filename:lineno(function)
1 0.008 0.008 5.521 5.521 script.py:1(<module>)
1 0.012 0.012 5.468 5.468 script.py:19(read_books)
5 0.000 0.000 4.848 0.970 script.py:5(get_book)
5 0.000 0.000 0.460 0.092 script.py:11(split_words)
5 0.000 0.000 0.112 0.022 script.py:15(count_words)
1 0.000 0.000 0.000 0.000 script.py:32(save_results)
哇!看看那些有用的信息!
对于每个被调用的函数,我们看到以下信息:
ncalls
:函数被调用的次数tottime
:给定函数花费的总时间(不包括调用子函数)percall
:tottime
除以ncalls
cumtime
:该功能和所有子功能花费的总时间percall
:(再次)cumtime
除以ncalls
filename:lineo(function)
:文件名、行号、函数名
当读取这个输出时,请注意我们隐藏了大量数据——事实上,我们只看到了 793 行中的 6 行。那些隐藏的行都是从像urllib.request.urlopen
或re.split
这样的函数中调用的子函数。另外,注意<module>
行对应于script.py
中不在函数内部的代码。
现在让我们回头看看结果,按累计持续时间排序。
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.008 0.008 5.521 5.521 script.py:1(<module>)
1 0.012 0.012 5.468 5.468 script.py:19(read_books)
5 0.000 0.000 4.848 0.970 script.py:5(get_book)
5 0.000 0.000 0.460 0.092 script.py:11(split_words)
5 0.000 0.000 0.112 0.022 script.py:15(count_words)
1 0.000 0.000 0.000 0.000 script.py:32(save_results)
记住函数调用的层次结构。顶层<module>
调用read_books
,save_results.
调用get_book
,split_words
和count_words
。通过比较累积时间,我们看到<module>
的大部分时间花在了read_books
上,而read_books
的大部分时间花在了get_book
上,在这里我们发出 HTTP 请求,使得这个脚本(不出所料)受到 I/O 的限制。
接下来,让我们看看如何通过逐行剖析我们的代码来更加细化。
逐行剖析
一旦我们使用 cProfile 了解了哪些函数调用花费了最多的时间,我们就可以逐行检查这些函数,从而更清楚地了解我们的时间都花在了哪里。
为此,我们需要用以下命令安装line-profiler
库:
$ pip install line-profiler
一旦安装完毕,我们只需要将@profile
装饰器添加到我们想要分析的函数中。以下是我们脚本的更新片段:
注意,我们不需要导入profile
装饰函数——它将由line-profiler
注入。
现在,为了分析我们的函数,我们可以运行以下代码:
$ kernprof -l -v script-prof.py
kernprof
随line-profiler
一起安装。-l
标志告诉line-profiler
逐行进行,而-v
标志告诉它将结果打印到终端,而不是保存到文件中。
我们脚本的结果看起来会像这样:
这里重点关注的关键栏目是% Time
。正如你所看到的,我们解析每本书的 89.5%的时间都花在了get_book
函数上——发出 HTTP 请求——进一步验证了我们的程序是 I/O 受限的,而不是 CPU 受限的。
现在,有了这个新的信息,如果我们想加速我们的代码,我们就不会浪费时间试图让我们的单词计数器更有效。与 HTTP 请求相比,它只需要很少的时间。相反,我们会专注于加速我们的请求——可能是通过异步方式。
在这里,结果并不令人惊讶,但是在一个更大更复杂的程序中,line-profiler
是我们编程工具带中一个无价的工具,它允许我们窥视我们程序的内部并找到计算瓶颈。
轮廓记忆
除了分析我们程序的时间复杂度,我们还可以分析它的内存复杂度。
为了进行逐行内存分析,我们需要安装memory-profiler
库,它也使用相同的@profile
装饰器来确定要分析哪个函数。
$ pip install memory-profiler$ python -m memory_profiler script.py
在同一个脚本上运行memory-profiler
的结果应该如下所示:
目前有一些关于“增量”准确性的问题,所以现在只关注“内存使用”栏。
当我们把书分成单词时,我们的脚本在第 28 行内存使用达到峰值。
结论
希望现在您的编程工具箱中有一些新工具来帮助您编写更高效的代码,并快速确定如何最好地利用您的优化时间。
你可以在这里阅读更多关于 cProfile 的内容,在这里阅读线分析器的内容,在这里阅读内存分析器的内容。我也强烈推荐 Micha Gorelick 和 Ian Ozsvald [1]写的书高性能 Python 。
感谢阅读!我很想听听你对分析器、数据科学或其他任何东西的看法。下面评论或者伸手上LinkedIn或者Twitter!
参考
[1] M. Gorelick 和 I. Ozsvald,高性能 Python 第二版 (2020),奥赖利媒体公司。
数据科学项目中的必备工具
约书亚·阿拉贡在 Unsplash 上的照片
数据科学家入门包—第 1 部分(VSCode,Bash,Virtual Env。单元测试)
在从事数据科学项目时,可能需要从理论到technical
的许多技能。
在这篇文章中,我将主要关注一些最important tools
可拥有和使用的工具,以及collaboration
的cleaner coding
和faster
方式。
目录
摘要如下:
- Visual Studio 代码
- Bash 命令
- 虚拟环境
- 单元测试
1.Visual Studio 代码
作者图片
数据科学家的日常工作主要是编码。因此,拥有一个能够封装许多其他工具的优秀编辑器是非常重要的。VS 代码就是这么做的!它是微软开发的工具,被认为是使用最多的编辑器之一。它允许运行、编辑和调试您的代码以及许多其他有用的扩展,例如:
- Python :“一个丰富支持 Python 语言的 Visual Studio 代码扩展,包括智能感知、林挺、调试、代码导航、代码格式化、Jupyter 笔记本支持、重构、变量资源管理器、测试资源管理器、代码片段等功能!”
- Git lens:“Git lens 增强了 Visual Studio 代码中内置的 Git 功能。它可以帮助您通过 Git 责备注释和代码透镜快速查看代码作者,无缝导航和探索 Git 库,通过强大的比较命令获得有价值的见解,等等。”
- git 图形 : 允许可视化您的 Git 分支的图形,并使用同一个图形执行 Git 动作!
- 【vs Code-icons】:为您的 Visual Studio 代码添加图标,以实现更好的表示和可视化
- Docker:“Docker 扩展使得从 Visual Studio 代码构建、管理和部署容器化的应用程序变得容易。它还提供了 Node.js、Python 和。容器内的 NET Core。”如果你对 docker 不熟悉,不用担心这部分。
- 黑色:默认安装的 python 格式库(如果不使用 pip 的话),允许在保存时自动格式化你的代码。为此,可以在 VS 代码的“setting.json”文件中添加以下几行
"python.formatting.provider": "black",
"editor.formatOnSave": true
以下是 Black 的代码格式示例:
- 更好的注释:在写代码的时候,你通常会添加注释来详述你的脚本并解释它们。这个扩展帮助你使它更友好,更容易理解。例如,你可以使用符号“!”使评论变红,从而更好地吸引你的注意力。
下面是一个由扩展生成的高光的例子:
更多信息,请访问 VS code 官方网站。
2.Bash 命令
作者图片
Bash 命令对于快速导航到您的操作系统非常有用,对于处理文件也非常有效。当在没有图形界面的虚拟机上工作时,例如在云中的环境中,它们也会暴露出来。
当使用 bash 命令时,拥有一个能够可视化封装许多元素的好终端是很重要的。下面是我推荐的两款游戏机:
- Mac: Iterm 2 ,提供了一个非常漂亮的可视终端,在上面你可以找到关于当前工作目录 git、它的分支(project dev)和它的状态(黄色:等待提交)以及你正在工作的虚拟环境(project_env)的信息。
作者图片
- Windows: Cmder ,是一个更加增强的终端,它还允许运行 linux 命令,这在某些情况下非常有用。
cmder.net
也不要犹豫检查 Powerlevel10K ,这是一个在您的终端上拥有的很酷的功能,它可以实现更好的风格和更有效、更灵活的工作方式。
下面是最常用的命令行的简要列表(在 macOS 上):
安装完终端后,可以在 VS 代码中使用它,这将使您的工作更加高效。
3.虚拟环境
作者图片
在处理一个项目时,您经常希望它可以在其他机器和云中重现。由于所使用的包的版本一直在变化,所以设置一个私有或者virtual
环境是很重要的,在这个环境中你可以开发你的项目并且保存包的版本。virtualenv
是一个 python 库,它允许您执行上面讨论的隔离和版本控制,如下所示(您也可以使用 anaconda):
作者图片
当第一次在笔记本电脑上安装 python 时,它的默认环境称为“基础”或“全局”。值得一提的是,创建的虚拟环境不与 base 通信,这意味着它们最初是空的!
创建并激活虚拟环境
#PIP
cd dossier project
pip install virtualenv # if not done before
virtualenv <env>
source <env>/bin/activate
#Anaconda
cd dossier project
conda create -n <env>
conda activate <env>
一旦你的项目稳定下来,在需要的时候逐步安装软件包pip install <packageName>
/ conda install <packageName>
:
#PIP
pip freeze > packages.txt/
#Anaconda
conda env export > packages.yml
如果您使用“packages.txt”或“environment.yml”文件克隆项目以便运行它,您可以:
- 首先创建并激活一个新的虚拟环境
- 运行以下命令,从给定文件安装所有必需的软件包:
#PIP
pip install -r packages.txt/
#Anaconda
conda env create -f environment.yml #No need to create an env before
VS 代码和虚拟环境
创建虚拟环境时,选择它作为解释器很重要。VS 代码能够检测到它并建议使用它,否则您可以如下选择它:
- 在设置中,点击
Command Palette
- 类型:
Python: Select Interpreter
- 从列表中选择它:
我个人更喜欢使用 Virtualenv 和 pip,而不是 Conda,因为 Virtualenv 允许只安装需要的包,并优化了内存的使用。
请访问 virtualenv 的网站了解更多信息。
4.单元测试
作者图片
是一种软件测试技术,它运行一系列单独的测试来验证一个开发模块或其一部分的良好功能。这些测试会暴露出来,尤其是在你的项目中采用test-driven development
方法的时候。它包括在开始开发之前首先编写您的脚本应该通过的测试。
在 python 中,你可以通过框架[pytest](https://docs.pytest.org/en/stable/)
来使用单元测试,这对大大小小的项目都非常方便。假设,我们正在开发一个函数f
,对于每组值( var 1, var 2,…),它应该返回一个预期的 _ 值。
编写完应该通过的测试后,我们开发该功能,然后使用以下方案编写脚本:
#Import packages
import pytest
import ...
#Create function
def f(var1, var2,...):
return ...
#Unit tests
@pytest.mark.parametrize(
"var1, var2,...,expected_result",
[
(val1_1, val2_1,...,expected_result_1),
(val1_2, val2_2,...,expected_result_2),
...
]
)
def test_func(var1, var2,..., expected_result):
assert f(var1,var2,...)==expected_result
上面的脚本将测试所有不同的测试( var 1_ i , var 2_ i ,…)并逐一检查它们是否与它们对应的值预期值 _ 值 _ i 匹配,并运行以下命令行:
python -m pytest -v --tb=line --disable-warnings pathtotestfile.py::function
- 举例 : 功率函数。为了便于说明,我们将考虑一个简单的函数:数的幂。单元测试文件如下:
# Import packages
import pytest
# Create function
def f(a, n):
return a ** n
# Unit tests
@pytest.mark.parametrize(
"a, n, c",
[
(2, 3, 8),
(5, 2, 25),
(4, 2, 16)
]
)
def test_func(a, n, c):
assert f(a, n) == c
我们运行以下命令行:
python -m pytest -v --tb=line --disable-warnings tests.py::test_func
我们得到以下结果:
作者图片
三个测试都通过了。我们的测试越多,代码就越稳定!
结论
作为一名数据科学家,为了让自己的工作更加高效和可扩展,掌握这些技术非常重要。像 git 这样的工具是不可或缺的,它们使协作变得强大而直接。
我进一步指出,其中一些工具是个人选择,可以替换,也可以完成工作!
#TEAMVSCODE #TEAMITERM2
原载于 2020 年 9 月 20 日 https://www.ismailmebsout.com*。*