数据科学生产化:可移植性
DS 生产化
当你的目标改变时,可移植性通过减少你必须重写的代码量来减少从你的代码中获得价值的时间。
这是关于数据科学生产的五部分系列的第二部分。当这些帖子可用时,我会用链接更新下面的列表:
生产数据科学的第一步是使其可移植。为了解释我的意思,让我们看一个代码可移植性的简单例子:
上面的代码执行一个在文本分析中常见的简单任务:取一个单词,去掉两端的所有空格,并将所有字符小写;然后依次检查该单词每个字符;如果字符在“停止”列表中,省略它;最后,将所有剩余的字符连接在一起,使它们再次成为一个单词。该示例使用了一个特定的单词“abracadbra”,您可以看到结果只包含字符“rr”,因为所有其他字母都在我们的停靠点列表中。
现在来看看相同的代码,其中有一些变化:
新代码采用相同的输入并产生相同的输出。但是这段代码在一些方面优于以前的版本:
- 它将变量“STOPCHARS”大写,遵循标记常量的 Python 约定——它告诉阅读这段代码的人,如果他们想使用这部分代码,他们需要复制并粘贴它,因为它不是从任何其他来源派生的。它是一个视觉信号,告诉程序员如何在不同的上下文中使用那部分代码。
- 整个工作流被包装在一个函数中。这个函数可以接受任意一个单词和任意一个停靠点列表。如果我想使用第一个代码示例来更改这些内容,我需要删除我拥有的单词定义,并写入一个新的定义。有了新的代码,我可以用新的输入来调用函数——我不必删除任何以前的工作;我可以加入新的作品。
- 我在函数定义中引入了止损点的默认值。如果函数中没有输入任何停止符,它将删除空格、小写字母并返回单词,而不需要花费任何时间单独查看每个字符。因此,它可以自动处理我想要规范化一个单词但没有任何停顿可以删除的情况 one 函数自动处理两种用例。
简而言之,修改后的代码可以用于任何数量的项目——甚至是我在编写函数时从未预料到的项目。原始代码可以用于我编写它的项目,如果我想在其他地方使用它,必须进行编辑。所以第二个代码示例是两个示例中更容易移植的。
便携性的类型
我们也可以让整个代码集合具有可移植性。有几种方法可以做到这一点:
**包装。**打包是获取大量代码(多个文件和目录)并将其捆绑在一起以便于在其他计算机上安装的过程。例如,Python 的打包系统从 PyPi 到 conda,前者被广泛使用且相对简单,后者越来越受欢迎,因为它使安装更容易且更健壮地处理依赖性。依赖性管理是打包软件的主要原因之一——模块化软件通常建立在其他模块化软件的基础上,这意味着当你想使用一个软件时,你需要安装所有的软件。通过打包来跟踪这些依赖性使得代码可以跨用户移植。此外,根据打包代码时所依赖的依赖关系,代码的性能可能会有很大的不同。例如,下图显示了使用 tensorflow 每秒可处理的图像数量的差异:
https://www.anaconda.com/tensorflow-in-anaconda/
Conda 中的代码包比 PyPi 中的代码包执行速度快 4-8 倍。这在很大程度上是由于打包依赖项的不同。
版本控制。打包有助于用户之间的可移植性,而版本控制有助于贡献者之间的可移植性。最流行的版本控制系统是 git。Git 运行在分叉-修改-提交-合并模型上。在下图中,最上面一行是代码的“主”分支,其余几行是为不同目的创建的其他分支。
https://br.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow
当您看到想要使用的代码时,您会“派生”您自己的副本。你想怎么弄就怎么弄,原件还是会在原来的地方。当您对本地机器上的代码进行更改时,您可以将其提交到您的分支——您的本地代码将反映您所做的任何更改,但是您的分支将只反映您所提交的更改,而原始代码将保持原样。如果您的分支达到了原始代码的所有者认为它有用、稳定并且通常是所期望的程度,您可以将您的分支与主分支合并,在这之后,主分支将反映您提交到您的分支的所有更改。版本控制允许许多不同的人同时处理相同的基本代码集合,强制执行关于什么可以成为代码的“正式”版本的规则,并提供审计跟踪和灾难恢复的基础,所有这些都是通过将代码打包到单独的分支和版本中来实现的。
集装箱化。有时候光包装代码本身是不够的。像 Docker 这样的容器化系统通过不仅列出代码的依赖项,而且实际上将那些依赖项——系统工具、其他库和设置——与代码一起运送,来处理依赖项管理。这就像把你的整个机器打包,这样它就可以交给其他人打开包装。
**工作流自动化。**有时候,你的代码本身不需要可移植,但是使用代码的进程需要可移植。像 Airflow 这样的工具允许您指定各种脚本运行的时间和顺序,并指定该过程的输出应该存储在哪里以及如何存储。
这实际上是数据科学生产化的一个重要部分,它没有得到足够的重视—如果您试图在每次需要时(或每次需要更新时)从头到尾运行每个流程,您将不得不并行运行大量流程,这可能会变得昂贵,或者您不得不减少运行某些流程的频率,这可能会与您的业务需求背道而驰。通过将流程分割成中间部分并存储那些中游结果,您可以将下游流程指向那些产品而不是产生它们的脚本,从而节省计算时间,并且您可以获得数据的审计跟踪。而且,像你的代码的其余部分一样,你可以选择那些自动化的工作流,并把它们移动到不同的服务器或指向不同的数据库,而不必重写你的整个过程。
当你的目标改变时,可移植性通过减少你必须重写的代码量来减少从你的代码中获得价值的时间。
一个例子
让我举一个我亲身经历的例子。这是纽约市的麦迪逊广场花园——宾州车站在下面:
Madison Square Garden
这是同一地点的两张卫星图像:
Satellite images of Madison Square Garden
第一幅卫星图像显示了我们在宾州车站一天内获得的所有移动设备定位信号。第二张图片仅显示了当天有超过 100 个不同的移动设备访问过的位置。起初,让数百甚至数千台设备在短短 24 小时内出现在一个 10 厘米的正方形中似乎不太现实——这就是右图所示——但实际上可能有一定的意义。麦迪逊广场花园的中间是长岛铁路的主要等候区。人们坐在等候区的专用位置,他们聚集在开放的电源插座周围,等等。总之,我不能说那些地点明显不现实。甚至那些沿着车站东边广场酒店旁边的街道的位置也符合我所知道的那条街上的出租车等候模式。
所以我花了几个月开发了几种方法来区分人工地点和简单的繁忙地点。在许多情况下,方法标记的位置并不令人惊讶。例如,我们已经知道,当公司不知道 ip 地址位于何处时,美国的地理中心就被用作垃圾场。各州的中心和邮政编码似乎使用类似。但是其他的模式是意想不到的:
左边的网格模式是典型的高密度区域:城市环境中心、机场、游乐园等等。当多个冲突信号的高层建筑使获得良好的 GPS 读数变得困难时,许多手机将回复到一种更老的、不太精确的位置报告方法,导致网格化。另一方面,右边的网格图案实际上不是一个网格——它是一个六边形网格,被气象公司用来报告天气预报。天气应用程序倾向于以这种模式报告位置。我们最初对此一无所知——我们发现了模式,然后不得不做一些研究来试图发现数据生成过程。
我们开发的模式识别模型有一个直接的商业用途:我们可以标记有问题的位置,这样我们就可以忽略它们。这样,我们的位置报告将只基于我们可以信任的位置。因为我们使该过程可移植,所以我们可以轻松地获取新的位置数据源并自动应用我们的过滤器——适用于一个数据集的过程也适用于另一个数据集。因为我们对流程进行版本控制,所以我们可以对过滤器进行调整——添加新流程或修改旧流程——而不会破坏任何下游流程。因为我们自动化了工作流程,并将结果从这些过滤器放入存储完整结果的中间产品中,所以我们可以将这些结果用于新的用途。例如:
上面的图像显示了一堆替代的可能位置——那些没有被我们的过滤器标记的位置——它们可能被用来代替一个不可信的位置。无需深入了解具体实现的太多细节,您可以看到替代位置并不是随机分布在世界各地的。事实上,它们或多或少分散在一个小镇上。因此,我们可以用一个边界框来替换一个不好的位置,让我们大致了解报告该位置的设备的实际位置。我们甚至开发了一种成本效益算法,在最小化边界框大小的同时,最大化所使用的可信位置信号的数量。通常,我们可以减小边界框的大小,直到它聚焦于单个家庭而不是单个城镇,并且仍然使用我们所拥有的关于替代位置的大部分信息。
我们将成本收益平衡过程变得可移植,并很快发现了它的一个意想不到的用途:
我们有兴趣了解人们何时会光顾特定的地点,特别是,光顾商店对我们的客户来说非常重要。在上面的图像中,点代表建筑物内各个商店的质心。红点是我们在这种情况下的目标商店。我们只有在人们浏览提供广告的应用程序或网站时才会收到位置信号,而这并不总是发生在实际的商店中。可能发生在外面的人行道上,也可能发生在停车场。此外,GPS 信号本身就有噪声,因此一家商店的手机可能会报告隔壁商店的一些信号。因此,我们研究了一种方法,来判断任何特定的一片土地表明有人去过特定的商店的概率。
您可以看到我们贴在商店上的所有蓝色瓷砖,以及该关联的分数。我们需要告诉商店应该贴多少瓷砖。我们使用了之前使用的相同的成本效益平衡算法(其结果可以在商店图片下方看到),在新的环境中使用已建立的流程节省了数周的工作。
在我看来,这是使数据科学过程可移植的主要好处:它大大减少了从识别问题到部署问题解决方案所需的时间。在一个截止日期很重要的世界里,最好的工具通常是你已经构建好的工具。至少,你已经建立的工具可以让你得到一个解决方案,这给了你时间去寻找改进这个解决方案的方法。
数据科学生产化:规模
DS 生产化
你可以等到你对意外感到惊讶,或者你可以建立系统来限制意外对你的伤害程度。
这是关于数据科学生产的五部分系列的第四部分:
让我们再看一遍单词规范化代码(来自我的前两篇文章)。
我们之前写的代码对于一个单词来说很好。它甚至可以很好地处理几千个单词。但是如果我们需要规范化数百万或数十亿个单词,这将花费比我们可能想花费的更多的时间。这就是可伸缩性的问题:您必须处理的数据量通常与处理数据所需的时间有直接关系。企业是有期限的——如果你不能在你需要的时间框架内得到结果,那么这些结果对你没有任何好处。
在示例中,我们通过并行化来扩展代码。有很多方法可以做到这一点——我使用 Spark 是因为它是目前大规模处理数据最流行的方法之一。我首先创建一个 DataFrame,它或多或少是 Python 版本的电子表格。它有两列——id 和 words——每一列都有三个值。然后,我将数据帧转换为 Spark 数据帧,这样就可以分别并行处理每条记录。然后,我将我们的“normalize_word”函数转换为 Spark“用户定义函数”(UDF),这允许将函数分配给不同的虚拟机来处理数据。出于同样的原因,我将我们的停靠点列表转换成一个 Spark 数组。
一旦我将所有不可伸缩的代码转换成可伸缩的代码,我就可以使用 UDF 处理数据帧了。这将数据帧的每一行输出给一个“执行程序”,执行程序使用提供的函数处理记录,并给出结果:
**+---+--------+
|ids| norms|
+---+--------+
| 1| rr|
| 2|houspous|
| 3| shzm|
+---+--------+**
Spark 允许我调整发送给每个执行程序的记录数量,以及我想要(或负担得起)多少个执行程序。我可以决定我希望每个执行者拥有多少内存(对于上面的例子,我需要很少的内存,但是如果我分发整个机器学习模型,有时我需要很多)。
当我们从思考代码转移到思考代码系统时,我认为可伸缩性归结为三个主要部分:资源管理、集成和实现创造力。
资源管理
我发现从内存、计算能力和磁盘空间的角度来考虑资源是很有用的。我不认为这些事情有任何类比不会因为过于简单而给我带来麻烦,但我要冒险一试:如果你试图从一个州向另一个州运送大量货物,你的卡车的数量和大小将是你的内存,你的卡车的速度和马力将是你的计算能力,你的仓库的大小和数量将是你的磁盘空间。每个部分都制约着其他部分。如果货物到达目的地后没有地方存放,那么你有多少辆卡车或者这些卡车开得多快都没有用。如果你的货物装不下你的卡车,你的仓库再大也没用。如果卡车没有燃料,你的仓库和卡车的大小都不重要。你明白了。
尽管我们实际上只管理三种基本的资源,但是管理每一种资源的方法有很多很多。想想一辆卡车可能发生故障的所有方式。有很多方法可以打乱你的内存使用。对于 spark 作业,我通常必须使用以下参数:
- 我希望可用于运行作业的执行者总数
- 每个执行器上的内核数量(这允许额外的并行化)
- 每个执行器上的内存量
- 为了在执行器上移动数据,我愿意承担的内存开销
- 我愿意移入和移出执行者的最大数据量
- 当将数据集连接在一起或聚合时,我希望将数据拆分成的“无序”分区的数量
还有 10-20 个我更喜欢的默认参数,它们几乎适用于任何工作。还有几十个其他参数我甚至不知道,因为我从来没有必要去弄乱它们。可伸缩性与获得更多资源关系不大。主要是学习如何明智地分配可用资源。
集成
有时,流程中的瓶颈并不是技术资源分配的结果。换句话说,有时候人类会把你的东西弄乱。我见过的一些最常见的方式是:
- **需求的意外增长。**你习惯于在被要求时给出结果。一开始你每周都会收到一些请求。现在你每小时都会收到一些请求。
- 供应商延误。直到公司的另一个部门给你他们最新的数据,你才能运行你的流程。他们忘记发送邮件(或者他们降低了工作优先级,或者通常发送邮件的人生病了,等等。)你被阻止,直到他们给你他们的拼图。
- **随时间自然降解。**你训练一个模型,每个人对结果都很满意。随着时间的推移,人们开始变得不那么快乐。你把旧的模型拿出来重新评估,发现它的性能远不如投入使用时那么好。所以几个月(或几年)以来,你一直在糟糕的预测基础上运作。
所有这些问题的解决方案是,首先要问一个人是否真的需要参与进来。每次请求报告时,单个分析师是否需要手动滚动每个报告?财务部门的一个人真的需要把来自几个系统的数据汇编成 Excel 报表,然后通过电子邮件发给你吗?你真的需要在你的日程表上安排一个老型号的重新评估吗?所有这些事情都可以部分或全部自动化。有几种常见的方法可以做到这一点:
- 数据仓库。厌倦了不得不向别人要你的数据?将所有数据存储在同一个地方。
- 原料药。无法在一个地方获取数据?教一台计算机去要求它(并教其他计算机去递送它),这样递送就可以按照设定的时间表进行。
- 仪表盘。厌倦了回应数据请求?把它挂在网站上,自动更新,让它成为自助服务。
集成允许您更明确、更有效地管理不受您直接控制的资源。它们还允许您获得警报和报告的好处。
实现创意
通常,可伸缩性更多地与您如何考虑问题有关,而不是与您如何管理技术资源和合作关系有关。让我参考我自己工作中的一个例子来解释我的意思(我已经在这里更详细地描述了这个例子)。在我目前的工作中,我们查看位置数据的一种方式是将手机定位信号与地块叠加。宗地来自市或县估价员办公室,用于划分建筑红线。它们通常看起来像这样:
当我们看到位置信号位于住宅区或宜家缴税的地块内时,这对我们非常有用。这有助于我们理解为什么那些信号会在它们所在的地方。并不是所有的包裹都有很好的标签,所以我们需要为没有标签的包裹推断标签。特别是,我们希望区分住宅和非住宅地块。为居住性建模的方法非常简单:我们有数千万个被标注的地块,我们有许多与这些地块相关联的元数据,我们可以根据这些元数据训练模型来识别正确的标签。
当我们想要实际生成标签时,困难就来了。我们有大约 1.4 亿个包裹需要决定。我们已经使用 Python 的 scikit-learn 库训练了这个模型。然而,通过 PySpark 用户定义函数调用 scikit-learn ’ predict '方法会产生一些问题。首先,它导致了序列化模型对象以传输到执行器,然后反序列化该对象以在执行器上实际使用的开销。它必须为作业中使用的每个执行者都这样做。第二,它未能利用 scikit-learn 的优化,这主要是因为它依赖于另一个包 numpy,以便一次对整个数据数组快速执行计算,而不是遍历单个记录。
使用 spark 逐行应用模型的开销如此之大,以至于我们甚至无法完成这个过程。我们最终发现,解决方案是创造性地思考如何应用经过训练的模型:
上面的代码做了几件事:
- 将唯一的宗地 id 映射到模型进行预测所需的要素列表。
- 将这些映射的项目分组到合理大小的组中。我们发现大约 50,000 人的小组运作良好。
- 重写用户定义的函数,使其按组而不是按记录应用。所以不需要移动和应用模型 1.4 亿次,只需要发生(1.4 亿/ 5 万)= 2800 次。
正如我所说的,即使运行了 48 小时,最初的实现也没有完成。新的实施在 30 分钟内完成。教训:谈到可伸缩性,有时我们需要新奇的新技术;有时候我们只需要五分钟的散步,这样我们就能获得一个新的视角。有时候我们两者都需要。
可伸缩性是为了让您的工作面向未来。你真的无法预测有多少人最终会想要你所构建的东西,或者他们想要它的时间框架。您可以等到需求意外增长时再做决定,也可以构建自己的系统来限制需求变化对工作的瓶颈影响。
数据科学生产化:信任
DS 生产化
对于数据科学的消费者来说,询问他们为什么应该相信他们得到的分析结果是完全合理的。
这是关于数据科学生产的五部分系列的最后一部分。该系列的其余部分可在以下链接中找到:
我将本系列的大部分文章致力于生产的技术方面,尽管这些方面严重依赖于一些非常人性化的过程。但是假设我们的代码都是打包的、容器化的和版本控制的;我们的工作流程已经全部自动化;所有流程都有技术和非技术文档;并且没有重大的资源短缺或有问题的集成。换句话说,我们已经实现了技术生产化。我们还没完。
我认为,生产化需要所有必要的步骤来确保使用你的产品的人能够从中获得最大的利益。大多数公司都入不敷出:他们只获得了可用技术总价值的一小部分,因为他们没有使用他们拥有的所有东西——事实上,他们往往不知道自己一开始就拥有这些东西。
机器学习模型通常是不透明的——在许多情况下,即使是建立和训练模型的人也很难理解为什么特定的结果会变成这样。此外,数据科学经常被用来让计算机做出人类以前做出的决定。在这种情况下,信任成为一个主要问题是很自然的。
在监督学习的情况下,模型是根据基本事实数据集训练的,有多种度量标准可以告诉您模型的表现如何-预测的平均偏差有多远,或者有多少百分比的记录被错误分类,等等。然而,对于数据科学的非技术消费者来说,这些指标只是更多的数字——它们没有多大意义。通常帮助消费者信任模型的是讲述模型如何工作的能力。这个故事的一部分——解释模型一般如何工作的部分——在非技术文档中讲述。但故事的另一部分讲述了该模型在应用它的特定用例中获得的具体结果。
我倾向于将信任优先级分为三类:解释、可视化和伦理。
解读
讲述模型故事的一个简单但通常无效的方法是显示模型系数(在简单线性模型如逻辑回归的情况下)或重要性分数(在更复杂的模型如随机森林的情况下)。这些数字从技术上允许用户理解模型的哪些部分是重要的,但它确实回避了一个问题——我们为什么要相信模型选择了正确的重要特征?记住,信任是最关键的问题。如果我们没有给用户一个信任模型的理由,我们就没有解释它。
我以前写过,在我目前的工作中,我们如何使用移动定位信号,以及在其他用途中,我们如何将这些信号映射到地块上。我们需要确定设备对包裹的访问是否表明该包裹是设备所有者的工作场所。我不会深入讨论我们开发的算法的细节——只要说它产生了 0(肯定不是工作地点)到 100(肯定是工作地点)之间的分数就足够了。如果我们只是把高于 0.5 的都归类为“工作”,低于 0.5 的都归类为“不工作”,用户就不会充分利用产品。一些客户想要数量,并不认为假阳性的代价很高,所以 50%的截止值太严格了。与此同时,这些客户不希望因为瞄准明显不是工作场所的地点而浪费金钱。此外,可能还有一个更基本的问题:一个地块有 50%的概率是工作地点,这到底意味着什么?那实际上看起来像什么?
这里的热图显示了单个设备在长达一个月的时间内倾向于访问四个不同的包裹:
我们给每个关系的分数都在每个图的上方(大而长的数字只是包裹的唯一标识符)。对于每个图形,每一列是一周中的一天,从星期一到星期天;每行代表一天中的一个小时。你可以很容易地看到,91 分非常明显是一个工作场所——他们主要在周一到周五,从早上 9 点到晚上 6 点。另一方面,3 分显然不是工作场所——用户只在晚上和周末在那里。54 分算是“正常”。访问模式主要是在正确的日子和时间,但覆盖面有点参差不齐。当我们降到 24 分的时候,这个图案看起来充其量是随机的,最差的看起来有点像住宅。
这些解释指南为客户提供了正确使用工具所需的知识,同时也让他们有信心感觉到他们正在正确使用工具。这两者都是工具被采用的必要条件。
可视化和 UX
通常,最好的解释是顾客自己发现的。一个好的可视化——理想情况下,是交互式的——允许用户与模型进行对话。换句话说,在某种程度上,它允许模型讲述自己的故事。这并不意味着视觉效果必须在美学上非常专业。事实上,我见过的一些最漂亮的可视化效果几乎没有信息价值。当我们谈论建立信任时,一个好的可视化可以引导用户完成数据驱动的决策过程。如果用户能够经历从没有准备好决定到有决定的过程,他们会更信任结果,因为大多数人对自己的判断有一种固有的信任。
我曾在一家资产管理初创公司工作过一段时间,我们试图为新兴经济体的潜在投资者提供建议。我们有许多不同国家的历史产品类别消费数据。我们建立了一个模型,预测未来五年每个国家每个产品类别的消费量。这个想法是,通过预测未来(当然,考虑到预测中包含的所有不确定性),我们的客户可以决定他们想在哪里投资。
但我们客户的突出问题不是“五年后,中国的人均巧克力支出会达到某个水平吗?”它甚至不是“五年后支出会有一定的增长吗?”这是“如果我现在投资,我能期望支出的增长是快速和持久的良好结合吗?”如果一个市场将在五年内呈指数增长,然后突然暴跌,这可能不是一个好的投资。一个几乎没有增长的市场显然是一个糟糕的投资。为了帮助我们的客户做出这些决定,我创建了一个简单的交互式可视化,我称之为融合图:
每个国家都有一个导火索。导火索的细枝末节是将五年前的人均支出与当前支出联系起来——这是这个国家在五年内走过的路。换句话说,是保险丝已经烧断的部分。保险丝最粗的部分是仍在燃烧的部分——当前支出与五年后的预期支出之间的距离。好的投资是那些保险丝烧得相对较少的投资。
这改变了我们对投资机会的看法。有些市场的支出大幅增长,但我们预计这不会持续下去。还有一些地方的支出相对较低且较慢,但我们预计支出会加快。可视化使客户能够进入模型并探索结果。他们不需要模型如何工作的明确解释,因为他们可以自己直观地发现这些东西。
良好的可视化往往需要更多的定制,而不仅仅是选择一种特定的固定模式。可视化应该像流程的其他部分一样被设计。
道德规范
伦理通常被视为一套价值观或原则。我说的不是这个。可视化和解释度量的目的是在用户知道他们应该不信任的模型方面建立信任:“模型说我应该把钱花在 x 上,我为什么要相信呢?”或者“模型说 Y 是对我的操作最重要的影响?我应该相信什么?”在生产化的背景下,伦理指的是你建立的工具,帮助用户看到模型中他们不知道质疑,但应该质疑的部分。
彭博对亚马逊提供的当天送达服务进行了一项调查,调查显示,更贫穷、更少数民族聚居的邮政编码经常被排除在外。看起来,该算法建议在亚马逊已经拥有大量 Prime 订户的地方实现当天送达,这些订户在较贫困地区的数量往往较少:
Source: https://www.bloomberg.com/graphics/2016-amazon-same-day/
一个完全生产化的系统有许多自动化和模块化的部分。这使得引入具有非预期的二阶或三阶后果的系统变化变得非常容易。负责任的生产需要道德保障,从长远来看,这既保护了系统的完整性,也保护了受系统影响者的福祉。
合乎道德的增长是明智的增长。没有道德保障的系统面临信任灾难性失败的风险。如果你有一个适当的系统来标记和有意义地解决出现的道德问题,那么当一个重大的道德问题真的发生时,你已经在你的用户中有了信任和善意的基线水平。然而,如果道德失败在最终暴露在你面前之前不被发现,那就很难(通常也很昂贵)从中恢复过来。
《华盛顿邮报》上一篇由餐馆老板写的文章很好地说明了道德如何融入生产过程。员工使用一个颜色系统将令人不舒服的客户行为分为黄色(不好的氛围)、橙色(冒犯的暗示)或红色(公开的骚扰或重复的橙色事件)。一名员工所要做的就是报告颜色——“我在五号桌有一个橘子”——经理就采取了行动,没有问任何问题。红灯导致顾客被要求离开。一个橘子让经理占了桌子。黄色表示如果员工愿意,经理会接手。
算法开发的地方道德法规并不比上面简单的工作场所例子更复杂。如果员工对分析产品的含义感到不舒服,如果愿意,他或她应该被调到另一个项目(同等报酬和声望),并且应该有一个团队对该问题进行审查。如果员工可以指出具体的道德问题,他或她应该被转移到另一个项目,并需要团队审查。如果员工有特别强烈的顾虑,应暂停项目,等待审核。是的,建立和遵守这种制度是不方便的。这比诉讼或媒体惨败要方便得多。即使从冷酷无情的商业角度来看,道德也是明智风险管理的重要组成部分。
信任是必须的,而不是美好的
在本系列的前几节中,我重点关注了文档、自动化、集成和其他或多或少的技术方法,以确保数据科学在部署它的任何企业或组织中产生有意义的影响。世界上所有的先进技术都无法拯救一个在信任赤字下运行的系统。数据科学的存在是为了做人类历史上已经做过的事情,以便人类可以花时间做其他事情。如果人类不信任这种能力来完成工作——完成他们的工作——那么他们不会让这种能力发挥作用。他们会想办法忽视或破坏它。这将导致系统失败,而且失败的代价比我们从劣质的技术实现中看到的要大得多。
最终,数据科学中的“数据”是人类的占位符,包括生成数据的人和利用数据的人。如果数据科学不是以与人合作的方式构建的,它就不会很好或持久。伙伴关系需要信任。
面向初创企业的数据科学项目流程
数据科学家对我们流程的看法
最近,我正在咨询的一家初创公司( BigPanda )要求我就数据科学项目的结构和流程发表意见,这让我思考是什么让它们独一无二。经理和创业公司的不同团队可能会发现数据科学项目和软件开发之间的差异,这种差异既不直观又令人困惑。如果没有明确说明和解释,这些基本差异可能会导致数据科学家和她的同事之间的误解和冲突。
分别来说,来自学术界(或高度研究导向的行业研究小组)的研究人员在进入初创公司或较小的公司时可能会有自己的挑战。他们可能会发现将新类型的输入(如产品和业务需求、更严格的基础架构和计算约束以及客户反馈)融入到他们的研发流程中很有挑战性。
这篇文章的目的是展示我和我的同事们在近几年的工作过程中发现的有特色的项目流程。希望这可以帮助数据科学家和与他们一起工作的人以反映他们独特性的方式构建数据科学项目。这篇文章还由的第二篇博文补充,这篇博文致力于同行评审流程,这是这个流程的一部分。
该流程是在小型初创公司的基础上构建的,其中一个小型数据科学家团队(通常是一到四个)每次由一个人领导运行中短期项目。更大的团队或那些机器学习优先的高科技初创公司可能仍然会发现这是一个有用的结构,但在许多情况下,那里的流程更长,结构也不同。
Figure 1: Data Science Project Flow for Startups
我将这个过程分为三个并行的方面:产品、数据科学和数据工程。在许多情况下(包括我工作过的大多数地方),可能没有数据工程师来履行这些职责。在这种情况下,数据科学家通常负责与开发人员合作,在这些方面提供帮助。或者,数据科学家可能会做这些准备,如果他们碰巧是所有神兽中最稀有的:全栈数据科学家! ✨🦄✨.因此,无论何时提到*、,您都可以用数据科学家替换数据工程师*,这取决于您的环境。
在时间轴上,我将这个过程分为四个不同的阶段:
- 辖域
- 研究
- (模型)开发
- 部署
我会试着按顺序向你介绍每一个。
1.范围界定阶段
定义数据科学项目的范围比任何其他类型的项目都更重要。
1.1.产品需求
一个项目应该总是从产品需求开始(即使最初的想法是技术性的或理论性的),这种需求在某种程度上被产品/业务/客户成功人士所确认。产品人员应该知道这个功能应该(大致)如何结束,现有客户或新客户是否愿意为它付费(或者它将防止流失/推动订阅/推动其他产品的销售/等等)。).
产品需求不是一个完整的项目定义,而是应该作为一个问题或挑战来陈述;例如*“我们的客户需要一种了解他们如何花费预算的方式”或“我们无法让我们的老年用户继续服药;这增加了客户流失率"或“客户会为一个还能预测他们经营的机场高峰时间的产品支付更多的钱”*。
1.2.初始解决方案构思
在这里,数据科学家与产品负责人、数据工程师和任何其他利益相关者一起,为可能的解决方案提出不同的草图。这意味着一般方法(例如,无监督聚类与基于提升树的分类与概率推理)和要使用的数据(例如,我们数据库中的特定表格,或者我们尚未监控或保存的特定用户行为,或者外部数据源)。
这通常还涉及某种程度的数据探索。你不能真正深入这里,但任何有前途的“低挂水果”可以帮助指导构思。
数据科学家应该领导这一过程,并且通常负责提供大多数解决方案想法,但是我强烈建议您使用所有参与解决方案构思过程的人;我有幸从后端开发人员、首席技术官或产品负责人那里获得了项目的最佳解决方案。不要假设不同的、更少理论导向的背景会使人们不参与这个阶段;额外的想法和观点总是有价值的。
1.3.数据准备和可访问性
团队现在应该对有望用于探索可能的解决方案的数据有一个很好的想法(或者至少是第一个这样的数据集或数据源)。因此,提供数据访问并为探索和使用做好准备的进程应该已经开始,与下一阶段并行。
这有时可能需要将大型数据集从生产数据库转储到它们的暂存/探索副本中,或者转储到较冷的存储中(例如,对象存储),如果在研究阶段时间可用性并不重要的话。相反,这可能意味着将大型数据转储从非常冷的存储中拉回表或文档形式,以实现快速查询和复杂计算。无论是哪种情况,这个阶段都是研究阶段开始所必需的,并且经常会比预期花费更多的时间,所以这是启动它的正确时间。
1.4.范围和关键绩效指标
这个阶段是关于共同决定项目的范围和 KPI。
KPI 应该首先用产品术语来定义,但要比以前详细得多;例如,对于上述三种产品需求,它们可能会变成*“客户现在可以使用带有每个类别的 CTR 统计和预测的仪表板”,或者“65 岁以上用户错过的服药天数将在接下来的两个季度中减少至少 10%”,或者“客户将收到其机场高峰时间的每周预测,粒度至少为一小时,近似值至少为 50%”*。
这些 KPI 应该被转化为可测量的模型度量。幸运的话,这些将是非常硬的指标,例如*“对于任何运行至少一周的广告,以及任何具有两个月以上历史数据的客户,在至少 Y%的情况下,预测广告的预期点击率至少接近 X %”。然而,在某些情况下,必须使用更软的指标,例如“与原始查询相比,使用生成的扩展查询进行主题探索所需的时间将会缩短,和/或结果质量将会提高”*。当模型旨在帮助一些复杂的人类功能时,尤其如此。
从技术上来说,即使这些指标也可以非常严格地定义(在学术研究中,它们通常是这样),但是根据资源和时间的限制,我们可能会使用人类的反馈来近似地解决它们。在这种情况下,每个反馈迭代可能会花费更长的时间,因此我们通常会试图找到额外的硬指标来指导我们完成大多数即将到来的研究迭代,代价更高的反馈仅在每几个迭代或重大更改时引发一次。
最后,范围在这里特别重要,因为研究项目往往会拖延,并且随着研究过程中新的可能性的出现,或者当一种经过检验的方法只能部分满足需求时,项目的规模和范围会自然扩大。
范围限制 1: 我发现明确限制范围更有成效;例如,如果您已经决定了一个基于 Multi-Armed Bandit 的模型是最有前途的开始方法,那么您可以将项目范围定义为一个两三周的模型开发迭代,部署模型而不考虑它的准确性(例如,只要它超过 60%)。然后,如果准确性的提高是有价值的(在某些情况下,它可能不那么有价值),开发第二个模型可能被认为是一个单独的项目。
范围限制 2: 范围限制的另一个变化是使用增加的复杂度;例如,第一个项目可能旨在部署一个模型,该模型只需要为您自己的客户成功人士提供一个相当大的广告措辞和颜色变化的候选集;第二种可能试图建立一个模型,给出一个更小的建议集,让客户可以看到自己;最后一个项目可能会尝试一个突出单一选项的模型,比它低几级,并为每个变量添加 CTR 预测和人口统计范围。
这已经与软件工程大相径庭,在软件工程中,组件通常是为了增加规模而不是复杂性而迭代的。
然而,度量到产品价值的函数可能是一个阶跃函数,这意味着在某个 X 值下运行的任何模型对客户来说都是无用的;在这些情况下,我们更喜欢迭代,直到那个阈值被抑制。然而,虽然这个 X 在某些情况下可能非常高,但我相信产品/业务人员和数据科学家都倾向于高估这个台阶的高度;可以很容易地说,任何低于 95%准确率的东西都没有价值,都卖不出去。然而,在许多情况下,对产品假设的仔细检查和挑战可能会导致非常有价值的产品在技术上可能不那么苛刻(至少对于产品的第一次迭代)。
1.5.范围和 KPI 批准
最后,产品负责人需要批准定义的范围和 KPI。数据科学家的工作是确保每个人都理解范围的含义——包括什么和优先考虑什么——以及产品 KPI 和更难的指标之间的关系,这些指标将在模型开发期间指导她,包括后者在多大程度上接近前者。明确说明这一点可以防止被开发模型的消费者——产品和业务人员——只在模型开发期间或之后才理解错误的度量被优化。
关于范围界定的一般说明
在许多地方,这一阶段被跳过,数据科学家急于开始挖掘数据,探索关于可能的解决方案的酷论文;根据我的经验,这几乎总是最坏的情况。跳过这一阶段可能会导致花费数周或数月的时间来开发酷模型,最终无法满足真正的需求,或者无法实现一个非常具体的 KPI,而这个 KPI 本来可以通过一些预谋来明确定义。
2.研究阶段
2.1.数据探索
这就是乐趣的开始!在范围界定之后开始这个阶段的主要优点是,我们的探索现在可以由我们已经决定的实际硬 KPI 和模型度量来指导。
一如既往,在探索和开发之间需要找到一个平衡点;即使心中有明确的 KPI,在一定程度上探索一些看似不相关的途径也是有价值的。
到目前为止,数据工程应该已经提供了所需的初始数据集。然而,在这个阶段,经常会发现所研究的数据中的一些缺陷,并且额外的数据源可能会被添加到工作集中。数据工程师应该为此做好准备。
最后,尽管这里与文献和解决方案评审阶段分开,但它们通常是并行进行的,或者交替进行。
2.2.文献与解决方案评论
在这一阶段,学术文献和现有的代码和工具都要接受审查。平衡也很重要;在探索和开发之间,在深入到错综复杂的材料中,在快速提取有用信息和可能的用途之间。
在学术文献的情况下,对形式证明和先前文献等方面的深入程度的选择在很大程度上取决于时间限制和项目的背景:我们是在为公司的核心能力建立一个强大的基础,还是在为一次性问题设计一个解决方案?我们计划在一篇学术论文中发表我们在这个主题上的工作吗?你打算成为团队在这方面的专家吗?
例如,假设一名数据科学家正在着手一个项目,以帮助销售部门更好地预测潜在客户产量或流失量,但她觉得自己对随机过程理论了解不多,而这些问题的许多常见解决方案都是建立在随机过程理论的基础上的。对这种感觉的适当反应可以是非常不同的;如果她在一家算法交易公司工作,她肯定会一头扎进上述理论,甚至可能会上一门关于这个话题的在线课程,因为这与她的工作非常相关;另一方面,如果她在一家专注于肝脏 x 射线扫描中自动肿瘤检测的医疗成像公司工作,我会说她应该迅速找到一个适用的解决方案,然后继续前进。
在代码和实现的情况下,要达到的理解深度取决于技术方面,其中一些可能在过程的后期才被发现,但许多也可以提前预测。
例如,如果生产环境只支持部署 Java 和 Scala 代码以供后端使用,那么解决方案应该以 JVM 语言提供,数据科学家将不得不更深入地研究她在研究阶段发现的基于 Python 的实现,因为将它们推进到模型开发阶段需要将它们翻译成 JVM 语言。
最后,在回顾文献的时候,记住不仅仅是选择的研究方向(或者几个方向)应该呈现给团队的其他成员。相反,在做出选择的同时,应该对该领域和所有被检查的解决方案进行简要回顾,解释每个方向的优缺点以及做出该选择的理由。
2.3.技术有效性检查
对于一个可能的解决方案的建议,数据工程师和任何相关的开发人员需要在数据科学家的帮助下,估计这个解决方案在生产中的形式和复杂性。产品需求以及建议解决方案的结构和特征应该有助于确定足够的数据存储、处理(流与批处理)、扩展能力(水平和垂直)以及成本的粗略估计。
这是在这个阶段执行的一个重要检查,因为一些数据和软件工程可以与模型开发并行开始。此外,从工程角度来看,建议的解决方案可能不够充分或成本过高,在这种情况下,应尽快确定并解决这一问题。当在模型开发开始之前考虑技术问题时,在研究阶段获得的知识可以用来建议可能更适合技术约束的替代解决方案。这也是为什么研究阶段还必须对解决方案前景有所了解,而不仅仅是单一解决方案方向的另一个原因。
2.4.研究综述
这是一个专门针对此阶段的同行评审流程,由一位数据科学家提供。如上所述,这里的主要目标是通过明确地将过程的核心方面置于检查之下,同时还对几个捕获点执行基本的健全性检查,来尽早捕捉代价高昂的错误(即接近失败)。
然而,这里可以陈述两个额外的子目标:首先,提高数据科学家在即将到来的产品/业务评审过程中解释和捍卫其决策的能力。第二,更好地准备向团队的其他成员展示研究阶段的成果,这在大多数数据科学团队/小组中是一种极其常见和重要的做法。
我已经给写了一篇单独的简短博文来介绍这个过程,以及执行这个过程的结构化方法。
2.5.范围和 KPI 验证
同样,产品经理需要批准建议的解决方案(现在用更专业的术语表述)满足范围和定义的 KPI。通常具有容易察觉的产品含义的可能的技术标准是响应时间(及其与计算时间的关系)、数据的新鲜度和有时缓存的中间计算(与查询和批量计算频率有关)、领域特定模型(领域通常是客户,但可以是行业、语言、国家等)的领域适应的难度和成本(包括数据成本)以及解决方案的可组合性(例如,数据和模型结构是否允许容易地将一个国家模式分解为一个区域模式,或者将几个这样的模式组合为一个洲模式),尽管还存在更多
3.发展阶段
3.1.模型开发和实验框架设置
开始模型开发所需的设置数量和复杂性在很大程度上取决于基础设施和数据科学家可用的技术支持数量。在较小的地方,以及还不习惯支持数据科学研究项目的地方,设置可能总结为数据科学家打开一个新的代码存储库并启动本地 Jupyter 笔记本服务器,或者请求一个更强的云机器来运行计算。
在其他情况下,它可能需要为更复杂的功能编写定制代码,例如数据和模型版本化或者实验跟踪和管理。当这种功能由一些外部产品或服务提供时(现在越来越多的产品或服务出现了),一些连接数据源、分配资源和设置定制包的设置可能会随之而来。
3.2.模型开发
有了所需的基础设施,实际的模型开发就可以开始了。此处被视为要开发的模型的范围因公司而异,并且取决于数据科学家要交付的模型和要在生产中部署的服务或功能之间的关系和划分。这种划分的各种类型的方法也许可以通过考虑一个范围而得到某种程度的把握。
在光谱的一端,一切都是模型:从数据聚合和预处理,通过模型训练(可能定期),模型部署,服务(可能有伸缩性)和持续监控。另一端是模型类型和超参数的选择,通常还有高级数据预处理和特征生成,被认为是模型的*。*
一家公司在光谱上的位置取决于许多因素:数据科学家更喜欢的研究语言;相关库和开源可用性;公司支持的生产语言;存在专门致力于数据科学相关代码的数据工程师和开发人员;以及数据科学家的技术能力和工作方法。
如果有一个非常全面的数据科学家,加上来自专门的数据工程师和开发人员的足够支持,或者,有足够的现有基础设施专门用于数据湖和聚合、模型服务、缩放和监控(可能还有版本控制)的操作和自动化,那么可以对模型进行更广泛的定义,并且可以在模型开发的大部分迭代中使用端到端解决方案。
这通常意味着首先构建完整的管道,从数据源一直到可扩展的服务模型,为数据预处理、特征生成和模型本身提供简单的占位符。然后对数据科学部分进行迭代,同时将范围限制在现有基础设施上可用和可部署的内容。
这种端到端的方法可能会花费更多的时间来设置,并且模型类型和参数的每次迭代会花费更长的时间来测试,但是它可以节省以后在产品化阶段所花费的时间。
我个人很喜欢它,但是它的实现和维护很复杂,而且并不总是合适的。在这种情况下,管道的开始和结束的一些部分被留给产品化阶段。
3.3.模型试验
在开发模型时,不同版本的模型(以及伴随它的数据处理管道)应该根据预先确定的硬性指标进行连续测试。这提供了对进度的粗略估计,并且还允许数据科学家决定模型何时工作得足够好以保证整体 KPI 检查。请注意,这可能会产生误导,例如,在许多情况下,从 50%到 70%的准确率要比从 70%到 90%的准确率容易得多。
Figure 2: Model failure entails iteration, but an approach failure might send you back to research
当测试表明一个模型不符合标准时,我们通常会调查它和它的输出来指导改进。然而,有时表现的差距非常大,所选研究方向的不同变化都达不到要求——一个方法失败。这可能需要改变研究方向,将项目送回研究阶段。这是数据科学项目最难接受的方面:回溯的真实可能性。
方法失败的另一个可能结果是目标的改变。幸运的话,它可能是产品方面的小问题,但在技术上以更简单的方式重申了目标。
例如,不要试图用一句话概括一篇文章,而是选择文章中最能概括它的句子。
最终可能的结果当然是项目取消;如果数据科学家确信已经探索了所有的研究途径,并且产品经理确信不能围绕现有的性能构建有效的产品,那么可能是时候转移到另一个项目了。不要低估识别一个不可救药的项目的能力和决定结束它的勇气;这是快速失效方法的关键部分。
3.4.模型开发评论
正如在研究综述中,这里的动机是模型开发阶段的错误也可能是昂贵的。因此,目标是相同的:首先,为模型开发阶段提供一个结构化的审查过程,这将通过正式地将它合并到项目流程中来增加同行审查。第二,通过检查准备好的问题和议题列表来降低代价高昂的错误的风险,这些问题和议题是根据必须解决它们的其他数据科学家的宝贵经验来检查的。
我已经给写了一篇单独的简短博文来介绍这个过程,以及执行这个过程的结构化方法。
3.5.KPI 检查
如果预先确定的硬性指标是唯一的 KPI,并且准确地捕获了所有的产品需求,那么这个阶段可能更多的是一种形式,当最终的模型被呈现并且开发阶段被宣布结束时。通常情况不是这样。
在更常见的情况下,硬性指标是实际产品需求的一个很好的近似,但不是完美的。因此,这个阶段是一个机会,可以确保无法自动检查的更软的指标也得到满足。这是与产品和客户的成功一起完成的。如果您可以直接额外检查客户的实际价值——例如,当与设计合作伙伴一起工作时——那么这是您可以为您的迭代找到的最佳指南。
例如,假设我们正在处理一个复杂的任务,比如从一个巨大的语料库中提取给定查询的相关文档。团队可能已经决定尝试提高结果集的质量,关注返回文档的内容和主题的差异,因为客户认为系统倾向于将非常相似的文档聚集在顶部结果中。
模型开发可能随着结果集中内容变化的一些可测量的度量而进展——给定一组测试查询,每个模型根据它返回的前 20 个文档的变化程度来评分;也许您在一些主题向量空间中测量文档主题之间的总距离,或者仅仅测量独特主题的数量或者重要单词分布的平坦性。
即使当数据科学家选定了一个显著改进这个度量的模型,产品和客户成功人士也应该明确地看一看测试查询的一个重要样本的实际结果;他们可能会发现难以量化但可能解决的问题,例如通过推高一些重复出现的不相关主题,或通过包含类似主题但来自不同来源的结果(例如,新闻文章与推文,它们使用非常不同的语言)来增加结果差异的模型。
当产品人员确信模型回答了项目的既定目标(达到令人满意的程度)时,团队就可以将它产品化了。
4.部署阶段
4.1.解决方案产品化和监控设置
如前所述,这一阶段取决于数据科学研究和公司模型服务的方法,以及几个关键的技术因素。
产品化:在研究语言可以用于生产的情况下,这个阶段可能需要修改模型代码,以可伸缩的方式工作;这个过程的简单或复杂程度取决于对模型语言的分布式计算支持,以及所使用的特定库和定制代码。
当研究语言和生产语言不同时,这可能还涉及到将模型代码包装在生产语言包装器中,将其编译成低级二进制或在生产语言中实现相同的逻辑(或找到这样的实现)。
还需要设置可伸缩的数据接收和处理,在这种情况下(很常见),这不是模型的一部分。这可能意味着,例如,将在单核上运行的 Python 函数转换为数据流通过的管道,或者转换为定期运行的批处理作业。在大量数据重用的情况下,有时会建立一个缓存层。
**监控:**最后,设置一种持续监控模型性能的方式;在极少数情况下,当生产数据的来源是恒定的时,这也许可以安全地跳过,但是我要说,在大多数情况下,您不能确定源数据分布的稳定性。建立这样的性能检查,不仅可以帮助我们发现模型中的问题,这些问题可能是我们在开发和产品化过程中遗漏的,而且更重要的是,模型运行的源数据分布的变化——通常被称为协变量转移——这可能会及时降低一个完美模型的性能。
以为例,我们的产品是一个检测皮肤痕迹并评估是否建议用户去看皮肤医生的应用程序。当一款受欢迎的新手机上市时,其配备的摄像头与我们数据中的摄像头明显不同,我们的数据可能会发生协变量变化。
4.2.解决方案部署
如果一切都设置正确,那么这个阶段可以总结为,有希望地,按一个按钮来部署新模型——以及服务于它的任何代码——到公司的生产环境。
**部分部署:**但是,为了测试模型的有效性(例如,在减少客户流失或增加每个用户的平均月支出方面),可能会以只有部分用户/客户群接触到模型的方式部署模型。这使得能够直接比较用户群中两个(或更多)组之间对任何可测量 KPI 的影响。
您可能不希望将模型部署到每个人的另一个原因是,如果它是为了满足特定客户或一组客户的需求而开发的,或者如果它是一个高级功能或特定计划的一部分。或者,该模型可能包含一些针对每个用户或客户的个性化元素;这有时可以通过实际拥有考虑客户特征的单一模型来实现,但有时需要为每个客户实际培训和部署不同的模型。
无论是哪种情况,所有这些场景都增加了部署模型的复杂性,并且取决于公司中现有的基础设施(例如,如果您已经向客户的子集部署了一些产品特性),它们可能需要您的后端团队进行大量的额外开发。
当模型部署在终端产品(如用户手机或可穿戴设备)上时,这一阶段甚至会更加复杂,在这种情况下,模型部署可能只会作为下一个应用程序或固件更新部署的一部分。
**产生偏差:**最后,所有部分部署的情况实际上都是数据科学团队面临的一个紧迫问题,这是因为另一个原因:这自然会将偏差引入模型将开始积累的未来数据中——模型将开始对具有可能独特特征的用户子集的数据进行操作。根据产品和特定的偏差特征,这可能会对模型在野外的性能产生很大影响,并且可能会对基于在此期间积累的数据训练的未来模型产生影响。
例如,在设备更新的情况下,较早更新其应用程序/固件的用户往往属于某些人口统计数据(更年轻、更懂技术、更高收入等)。).
4.3.KPI 检查
我在这里添加了另一个 KPI 检查,因为我认为在部署和实际使用之后,在解决方案的性能和对产品和客户需求的成功响应得到验证之前,解决方案不能被标记为已交付。
这可能意味着在部署后的几周内筛选并分析结果数据。然而,当涉及实际客户时,这也必须涉及产品或客户成功人士,他们与客户坐在一起,试图理解模型对他们使用产品的实际影响。
4.4.交付的解决方案
用户和客户都很高兴。产品人员已经设法围绕该模型构建或修改了他们想要的产品。我们完了。举杯祝酒,欢呼喝彩,一切安好。
解决方案已经交付,我认为项目已经完成。然而,它确实以一种特定的方式继续生存——维护。
维护
为模型设置了健康检查和连续的性能监控之后,这些可以触发项目工作的短时间爆发。
当一些事情看起来可疑时,我们通常从查看数据开始(例如,对于协变量变化),并且可能模拟模型对我们怀疑导致问题的各种情况的响应。这些检查的结果可以让我们进入几个小时的小代码更改、模型的重新训练和完整的模型开发迭代(如本文开头的图所示),严重的情况下有时需要回到研究阶段尝试完全不同的方向。
最后的话
这是对数据科学项目流程的建议。它也非常具体,范围有限——为了简单和可见性——并且显然不能涵盖实践中存在的这个流程的许多变体。也代表了我的经历。
出于所有这些原因,我希望听到您在运行、领导或管理数据科学项目时的反馈、见解和经验,无论这些项目的规模有多大,也无论您所在的数据科学团队有多大。
关于这个话题的另一个精彩观点,我推荐阅读我的朋友 Ori 关于数据科学敏捷开发的文章。还要感谢因巴尔·纳尔,希尔·梅厄·拉多尔(@数据夫人)和@塞弗。科恩对他们的反馈。
Shay 是一名数据科学顾问。他还为一些社区项目工作。
数据科学招聘——为什么你可能做错了
招聘过程,尤其是对初创公司来说,并不容易。以下内容可能对你下一步的招聘过程有所启发。
Pão de Açúcar overlooking Corcovado during a sunset, Ori Cohen.
最近两年半,在我现在的职位之前,我找工作的时候,已经面试了 50 多家公司。从小公司到大公司。我已经设法经历了广泛的面试类型,从电话交谈到家庭作业。从那以后,我有幸坐在另一把椅子上,面试了大约 20 名数据科学(DS)职位的候选人。
作为一名招聘人员,我不能强调在面试候选人时使用正确的工具有多重要。一些例子浮现在脑海中,当你的主要焦点是机器学习(ML)和深度学习(DL)时,你不应该问本质的统计问题,反之亦然;当你希望你的候选人在笔记本或 IDE 中工作时,你不应该让他们在一张纸上“编程”;当你面试管理职位时,你不应该让潜在的经理做概率谜语。
我想传达的是,一种尺寸并不适合所有人!人们来自不同的学术背景和经历。为各种各样的侧写做好准备很重要。否则,通过使用糟糕的工具,你会忽略真正优秀的候选人。以下是我和几个同事亲身经历过的常见错误。
问错误的问题
- 问类似谷歌的问题。这些很少测试你在一个有才华的员工身上寻找的技能。
- 问概率谜语。这些虽然经常被问到,但对于一年级计算机科学或统计学学生来说是极好的测试。然而,依我看,他们只会测试一个人是否真的擅长猜谜语。
- 同样,当你面前的候选人距离他的第一个学位还有 10 年时,问一年级的统计学问题。例外的情况是,你面试的是一个面向统计的职位。
- 询问任何候选人的高中历史或成绩。虽然这对我们大多数人来说是有意义的。出现这种情况我还是很惊讶的:)。在我看来,当你积累了经验或获得了更高的学位时,这就无关紧要了。
- 询问博士们的分数。这真的是一个基本的问题,告诉候选人你对学术的理解。衡量博士的标准是他们的出版物,而不是分数。
- 询问学者关于他们在 sprint 中工作和提高效率的能力— 阅读行业中的敏捷 —人们可以适应,sprint 不是为 DS 和研究而优化的。在我看来,正确的问题应该是“给定一个期限,同时承认研究不能像软件开发一样被框定,你认为你能完成一项任务吗?”。为了让你放松,学者们真的很擅长截止日期,提交作业,完成研究,撰写和审查论文,拨款,组织会议,编辑期刊,并且通常知道如何成功到达终点线。
- 除非你是他们的经理,否则不要在面试中问你的候选人对薪水的期望,让人力资源部去问。
使用错误的工具
我不相信下面的做法还在发生,在面试过程中没有理由使用错误的工具,尤其是当它无助于你试图实现的目标时。
- 要求考生使用纸笔对一道编程题进行编程和调试。想象一下你是一个厨师,你会面试一个人给你做没有盐和胡椒的菜吗?这种糟糕的做法迫使人们在他们不习惯的环境中编码,剥夺了他们的编程工具,如自动完成和语法纠正,以及他们手指自动点击宝贵代码行的熟悉感,而无需思考它。通过设置不相关的限制,与他们将要做的实际工作不相关,以及使用错误的工具来测试他们,你正在伤害你发现人才的机会。
- 在没有事先通知的情况下,要求候选人在面试期间使用外国环境编写代码,例如,使用 Raspberry PI 的被黑客攻击的 Linux 发行版。这些黑客在速度上很慢,并且缺乏通用的应用程序,这将影响你的候选人的表现。允许你的候选人在家里解决问题,使用他们熟悉的环境和工具。
- 要求候选人处理未经适当测试的合成数据,这些数据可能存在噪音和方法上的缺陷。请给你的候选人真实的数据,如果数据是一个秘密,找到另一种解决方案或匿名。
- 需要 3 次以上的面试吗?除非你是一家大公司,或者你面试的职位资历很高,否则你不需要和你的候选人会面超过 3 次。如果你在 3 次会议后还不能做出决定,你的流程可能有缺陷,或者与其他候选人相比,这个候选人没有给你留下足够的印象。
错误的观念
当你开始一个新的招聘过程时,专注于一种特质而忽略了其他一系列特质是值得注意的。看到某人的潜力,而不是把他作为你长长的愿望清单上的一张清单。
- 忽视有才华的专业人士,因为他们没有理学硕士或博士学位。外面有一些真正有才华的人,不要让自己被高等学位蒙蔽了双眼。
- 将学者视为没有经验的专业人士——他们磨练在初创行业、写作、长期研究、领导和管理一个项目中没有得到很好实践的技能。对某些工具了如指掌,知道如何专攻某个领域,等等。
- 让你的候选人完成一项任务,坐在他们旁边,记录他们的一举一动。
- 如果一个人只精通 R 语言,那么他就不能过渡到 Python,反之亦然——Python 是最简单的语言之一,过渡可以在几周内完成。显然,如果您的痛点是生产就绪代码,那么您的优先级就不同了。
- 当一个候选人给你一个惊喜,为你正在讨论的问题提供了一个新颖的解决方案,不要写在纸上,不要拍下来,这是对他们的时间和努力的不尊重,可能会影响公司的声誉,他们不是免费来咨询你的公司的。
- 向下看候选人以前的经历,他们以前工作过的领域或研究领域。
要记住的要点
- 当候选人教给你一两件你在面试过程中不知道的事情时,你头脑中的一个灯泡应该在闪烁。
- 强大的理论背景真的很重要。可以应用于其他领域的相关经验,即不知道领域,理解传统的 ML 和 DL 中的新概念。
- 一个强有力的候选人应该理解可能影响产品需求的基本概念,例如,类别不平衡、精确召回、 KPI、目标等。
- 性格方面,他们很棒,可以和你的团队相匹配。
- 理解学术背景侧重于不同的事情。例如,计算机科学的人通常更擅长算法和编程相关的一切,数学家更擅长核心数学,统计学家有更深的统计背景,等等。因此,尝试为不同的背景创建不同的测试。
- 对于中小型创业公司来说,拥有有写作经验的学者很重要。他们可以帮助你写投资建议,写论文,写专利,以筹集资金,以及许多其他原因。
- 尝试给你的候选人反馈,无论是应要求还是在过程结束时。试着把重点放在可以帮助他们在下次面试中提高的反馈点上。
以下是我采用的方法,我并不暗示这是 ML 或 DL 面试过程的最佳方法。然而,这些对我来说很有效,可以为你招募新的科学家或从业者提供一个基准。
我的过程
在仔细阅读他们的简历并找到谈话的话题后,我们会做以下事情:
- 请人力资源部安排一次与他们的电话交谈。如果人力资源部需要更多的信息,指导他们问什么以及如何解释答案,给他们时间去理解术语,这样候选人会觉得他们代表了一家严肃的公司。如果这不可能,直接打电话给他们,从 2 点开始。
- 会议#1: 简短的电话交谈,从理论和实践两方面讲述他们所做的事情,试着问一些关于他们的工作或论文的重要问题,以此来挑战自己和他们。
- 会议#2: 一次个人面试,一次关于他们想谈论的任何项目的深入交谈,使用白板,再次尝试挑战自己。问一些有趣且重要的问题,这些问题可能与公司的领域更相关,或者努力了解知识和经验的深度。例如,“如果分布发生变化,你会怎么做,这些假设适用吗?如果你不能使用这个工具、特征、样本会发生什么,你能想出其他方法吗?如果需要平衡数据会怎样,有哪些方法?等等…
- 给你的候选人发一份详细的、全面的、没有遗漏的作业,重点是技术性的、但以产品为导向的家庭作业。一个你自己完成的。允许他们直接向你提问,这将有助于他们,也有助于你在这个过程中更多地了解他们。就个人而言,我宁愿跳过这一阶段,也不愿让候选人花费大量时间来解决问题。然而,我找不到合适的替代者,除了事先认识那个人或者和他们一起工作。这个测试帮助我了解他们在做什么和为什么做,并让我专注于正确的候选人。
- **第三次会议:**邀请最优秀的候选人来谈谈他们的工作。发表演讲是一项经常被忽视的技能,它展示了你的候选人如何交流他的工作并回答各种问题,关于研究选择、产品选择以及与房间里的其他人一起做。这项技能很重要,因为它只能通过大量的练习获得,不可能在几周内学会,没有捷径可走。
希望我已经帮助你把精力集中在下一次招聘的正确选择上。如果你有任何反馈,请在下面的评论中告诉我。非常感谢阅读。
我要感谢我的同事们——你们知道你们是谁——分享你们的经验。
Ori Cohen 博士拥有计算机科学博士学位,专注于机器学习。他领导着 Zencity.io 的研究团队,试图积极影响市民的生活。
数据科学需要耐心
没有免费的好东西
数据科学是一个非常值得追求的职业,但是没有免费的东西。你需要付出代价,投入数月或数年的工作,才能看到最初的成果。这不是一条容易的路,而是一条非常令人满意的路。因此,我将重点关注你应该开始磨练的技能,以及为了成功你需要什么。
Data Science Skills for 2020
数据科学的技能
我需要先说一句:数据科学需要你学习统计学和线性代数。如果你在开始进入机器学习算法和做更高级的材料之前这样做,会更好。没有统计数据,你会经常不知所措,为什么某些方法不起作用,你将无法正确地解释结果,并向好的方向纠正它们。
你会加倍努力工作,渴望一些不必要的东西。
你需要的另一项技能是用 Python 编码。您需要轻松使用 Python,因为您经常需要针对给定的问题构建解决方案的原型。如果你能很快做到这一点,你就可以开始迭代,并得到一个更好的解决方案。如果这部分拖慢了你的速度,你每次都需要考虑如何将你的解决方案转化为可工作的代码,那么你最终会因为迷失在不重要的技术细节中而忘记你正在试图解决的问题。
不要走这条路——最好花几个月的时间来完善你的统计学和 Python 技能,而不是当你需要解决数据科学问题时,不得不一遍又一遍地回到相同的材料。
最后,如果你习惯了 Python 和统计学,你应该开始提高你解决问题的技巧。这是一个永无止境的故事。毕竟数据科学就是解决问题。你需要能够
- 精确定位关键数据输入,
- 询问关于数据集的正确问题
- 想出新的算法来处理数据
- 从数据中提取信息并在以后使用
- 从小处着手构建复杂的解决方案
练习解决问题的最好方法是…通过解决问题。这是一项实用技能。你可以开始为小问题编写代码和实现算法,继续 Kaggle 并为自己找到一个数据集/问题。这一切都是为了发现新的问题并试图解决它们。
解决问题是一种心态,经过足够的练习,这种心态会变成一种技能。
交流和可视化
从非技术角度来看,作为一名数据科学家,您需要培养两项主要技能。
首先,你需要将你的结果可视化。那可能是
- 图表
- 热图
- 酒吧
- 一份报告
或者其他很多东西。重要的是,无论你选择哪种形式,你都需要清楚自己在展示什么——无论是对你还是对别人。可视化您的结果对理解数据和您每次试图解决的问题非常有帮助。尤其是当你面对一个新的大型数据集时,你不知道会发生什么。
然后,可视化可以极大地帮助向其他人展示为什么您的结果很重要以及如何使用它们,无论您是将它们展示给其他开发人员、数据科学家还是商业人士。视觉数据很容易掌握,因为你不必想象数字——你马上就能看到它们。
其次,以清晰、诚实的方式交流非常重要。如果你能就你的结果做一个简短的发言,同时用图表展示出来,你就做得很好,让其他人可以和你互动,学习和回应。当然,你不需要有任何公开演讲的技巧,我说的是几个人的小团队,你将向他们展示结果,但你能从你的数据中编出一个连贯的故事真的很重要。这对大公司、小公司和自由职业的数据科学家都有帮助。人们通过看比通过读或听更能理解。
基本数据科学技能
总而言之,作为一名数据科学家,您应该具备的最基本的数据科学技能是
技术技能:
- 统计和线性代数知识
- 精通 Python
- 问题解决
软技能:
- 形象化
- 沟通
如果你掌握了这些,你将成为一名了不起的数据科学家。
不仅如此,数据科学将成为你可能选择的最佳职业道路。
如果你想了解更多关于成为数据科学家的信息,可以看看我的其他文章:
数据科学角色:一个分类问题
从业者和思想领袖的观点
Photo by Nathan Dumlao on Unsplash
纵观数据科学领域,很明显这个领域不是一个单一的学科。在早先的帖子中,我写道:
“…数据科学——也是一门艺术——正在技术、人类好奇心和特定领域知识的交汇处发展…”
同样,职位头衔“数据科学家”也不是一个单一的角色。它本质上是一个包罗万象的术语,包含了广泛的知识体系以及复杂的技能和责任组合。在他列出的 30 个数据科学术语解释 中,亚历山大·埃金斯引用了美国第一任首席数据科学家 DJ·帕蒂尔的话:
“数据科学家是一种独特的技能组合,既能开启数据的洞察力,又能通过数据讲述精彩的故事。”
这篇文章将介绍一些团队尝试对各种数据科学角色进行分类的方法。它将关注两个拥有成熟数据科学项目的大公司如何组织职称,还将从一个较小组织的数据科学家的角度介绍一些基本的非技术技能。它将考虑行业从业者和思想领袖眼中的数据科学职业轨迹。最后,它将为获得一些数据科学“邻近”技能提供建议,以便在这个快速发展的行业中增加价值并保持相关性。
爱彼迎(美国短租平台)
截至 2018 年,Airbnb 雇用了 126 名数据科学家,而 2010 年只有一名。
Airbnb 数据科学主管 Elena Grewal 博士在她的 2018 LinkedIn 帖子 中描述了公司内部的快速增长(以及行业内标准术语的缺乏)如何导致了一个转折点:
在给定的公司中,这种多样性的负面影响是它可能会导致组织混乱和人员流失,因为合作伙伴团队不知道从数据科学家那里可以期待什么,而数据科学家自己可能也不清楚他们的角色。”
为了缓解这一问题,Airbnb 团队制定了战略,有意创造符合业务和人才需求的角色,同时也实现了预期的清晰化。结果是数据科学角色沿着三条轨道重组:
团队中的每一位数据科学家都应该至少在数据科学领域的三个专业领域中的一个领域拥有专业知识:
- 分析 — 仪表盘和可视化、数据探索和分析,通过提出好问题和提出建议来推动业务变革
- 算法 — 机器学习,通过生产数据创造商业价值
- 推论 — 统计学、经济学、社会科学、改善决策和衡量影响
虽然这种程度的数据科学专业化对 Airbnb 这样的“高速增长”公司很有效,但 Grewal 建议较小的公司从更通用的方法开始。
网飞
网飞依靠数据为全球 1.3 亿网飞会员提供个性化体验。据网飞科技博客报道:
每天有超过 1 万亿个事件被写入流接收管道,这些事件被处理并写入 100PB 的云原生数据仓库。每天,我们的用户针对这些数据运行超过 150,000 个作业,涵盖从报告和分析到机器学习和推荐算法的所有内容。
为了支持这项庞大的工作,网飞雇佣了三类数据专业人员:分析师、工程师和科学家:
Image per Netflix Tech Blog
虽然每个类别都有职位,但是角色之间的工具和职责可能会有一些重叠。
Image per Netflix Tech Blog
每个类别的数据专业人员可能会利用以下数据科学领域中至少两个领域的技能:
- 数据探索— ( 发生在项目早期) —查看样本数据、运行查询、统计分析、探索性分析和可视化
- 数据准备 —(迭代任务)— 数据的清理、标准化、转换、反标准化和聚合
- 数据验证 —(周期性任务)— 查看样本数据、运行查询、统计分析、汇总分析和可视化,用于数据探索、数据准备、开发、预部署和后部署
- 生产化 —(发生在项目后期)— 将代码部署到生产中,回填数据集,训练模型,验证数据,以及调度工作流
像网飞这样的大公司可能会提供许多分工明确的数据专业人员。与此同时,数据的庞大数量和复杂性可能要求每个数据科学家除了专业技能之外,还需要一些通用的交叉知识。
较小的组织呢?
Shubh Loans 的首席数据科学家 Oriol Mirosa 在他的文章 为我们其余的人提供数据科学 中,就为什么小公司的数据科学家应该特别关注非技术工作提出了他的观点。虽然承认技术技能是必不可少的,但他认为特定的软技能可能是成功的关键指标。
对于基础设施和明确定义的数据项目尚未完全开发的小型公司的数据科学家,Oriol 提供了以下建议:
- 一直索要数据
- 一直问问题
- 一直问为什么
- 一直求助
- 寻求机会分享你一直以来的发现
做这五件简单的事情所需要的批判性思维、好奇心、创造力和进取心的结合是不可低估的!这种“走来走去”的数据科学方法使数据科学家能够获得领域知识,理解业务数据和问题,并构思更好的业务指标和数据产品。通过与利益相关者密切合作获得的信誉也将使其更容易申请所需的资源,以在未来建立基础设施、数据和模型。
算法之外的数据科学
机器学习工程师的崛起
Emmanuel Ameisen 在他关于 2018AI 趋势的帖子中表示:
“谈到招聘,硅谷各个团队的招聘经理最常抱怨的是,虽然不缺乏能够在数据集上训练模型的人,但他们需要能够构建数据驱动产品的 工程师 。”
虽然数据科学家将执行构建机器学习模型所需的数据争论和统计分析,但他们可能并不总是拥有将原型模型集成到生产环境中所需的技能。这是机器学习工程师的专业知识越来越多地被利用的地方。
Image per Tomasz Dudek
机器学习工程师托马斯·杜德克解释说:
".。。必须有人将所有的“数据科学”和“软件”部分粘在一起。将训练好的模型用于高质量的生产环境。安排批处理作业重新计算 insight 表。实时服务模型并监控其在野外的表现。这正是机器学习工程师大放异彩的领域。”
Image per Tomasz Dudek
数据科学邻近技能
如前一节所述,具有前瞻性思维的数据科学家可能会考虑扩展他们的能力,以包括与机器学习工程师一致的技能。一些受欢迎的技能包括:
- Docker — 用于打包和部署定制应用的容器,包括所有必需的库依赖
- Spark — 面向大规模数据处理的统一分析引擎
- 酸洗 — 为将来存储对象、函数和类的方法
Photo by Reka Biro-Horvath on Unsplash
面向未来的数据科学家角色
在她的文章 中,数据科学不同于现在的 **,**实践者和思想领袖维基·博伊基斯提醒我们:
“虽然优化模型、可视化和分析占据了你作为数据科学家的一些时间,但数据科学一直以来都主要是在一个地方获取干净的数据,用于插值。”
对于寻求职业生涯“未来证明”的数据科学家,她推荐了以下三项技能:
- 学习 SQL
- 非常好地学习一门程序语言
- 学习如何在云中工作
Photo by Dallas Reedy on Unsplash
结论
我希望这篇文章提供了一个对数据科学角色进行分类的框架,以及对数据科学工作不断发展的范围的一些见解。Airbnb 数据科学主管 Elena Grewal 博士就围绕标准分类术语的发展形成对话提出了以下思考:
“在数据科学领域,我们越是能够联手建立规范,我们的行业就会成熟得越快,我们作为个体也就越有能力驾驭这个行业。”
奖金!
如需更多视角,请查看 Hugo Bowne-Anderson 根据 35 位数据科学家 对 进行的 2018 年哈佛商业评论采访汇编。
感谢阅读!
数据科学:自学与大学
几年来,数据科学一直是一个热门领域,讨论这个问题毫无意义。作为一名新人,你可能想知道进入这个领域的最佳方式是什么,以及多快能获得一些有价值的知识。
Photo by Avi Richards on Unsplash
在今天的文章中,我想讨论进入任何与技术相关的领域的两种最流行的方法,它们是:
- 通过自学
- 通过获得学位
此外,我还想探索这两种选择对于数据科学工作和前端开发人员工作是否有所不同。
开始之前,我先跟大家分享一点背景。我不是自学成才的数据科学家,我决定走大学路线。但是在报读硕士之前,我自学了编码,一点点 Java 和 Android,一点点 Python 和一般的数据。
因为两者我都尝试过,所以这篇文章应该不会有失偏颇。然而,如果你现在做决定,它应该只基于这篇文章。我强烈鼓励你做进一步的研究,因为有些东西会因人而异,因国而异,因大学而异。
因为我现在在上大学,所以大学的路线将是第一个要走的。事不宜迟,我们开始吧。
大学路线
Photo by Element5 Digital on Unsplash
大多数人都会选择大学这条路,这是有原因的。
如果你像我一样正在考虑注册数据科学硕士学位,这里有 3 个你应该知道答案的大问题:
1.你的国家甚至提供数据科学学位吗?
这是显而易见的,但是数据科学在大多数大学中还没有得到很好的认可和体现。当然,也许你会在普通计算机科学学位上钻研一下机器学习,但无论如何,那都不是数据科学专业。发展中国家可能仍然不提供数据科学学位,所以一定要先核实一下。
2.你准备好投入其中了吗?
在我报读硕士之前,我一直从 Android 跳到 Python 再跳到 Web 开发。我会从一种技术跳到另一种技术,只是因为那天我喜欢它。作为这个愚蠢策略的最终结果,一年后我对任何事情都一无所知。
现在我只致力于数据科学,我可以保证在过去一年左右的时间里,我学到了很多旧体制下 5 到 10 年都无法掌握的东西。这就是承诺一件事的意义。确保你也能这样做。
3.你买得起吗?
这不仅仅是你负担得起的问题,也是你是否愿意负担得起的问题。我的意思是,你可以通过自学在一些小公司找到一份没有任何学位的网页开发者或网页设计师的工作。这不会花你一毛钱(如果你知道如何谷歌),而且你最终还会得到一份高薪的工作。
大学路线的利与弊
上面的每一个问题你都如实回答了吗? 好。你现在应该看得更清楚了。
在这一部分,我想给大家提供我对做一名数据科学大学生的看法。我将与你分享什么是好的,什么是不太好的,希望你能感同身受。让我们先从好的方面开始:
赞成:连接
你会遇到很多了不起的人,他们的知识远远超过你在书上或在线课程中能找到的任何东西。最棒的是——人们在重要的地方认识人。这真的有助于展现你最好的一面,你永远不知道它什么时候会派上用场。
赞成:很酷的项目
这将因大学而异。我所在的学校是以项目为导向的,所以每学期从零开始做几个完整的项目是你能做的最好的事情来增加你的知识。这些项目在难度和使用的技术上各不相同,但是,嘿,你最终交付的是一个完全可行的解决方案。
如果你的大学只提供理论上的介绍,而没有实际应用,我认为不值得花时间和金钱。
教授:向专家学习
我知道,书籍和在线课程覆盖了 99%的内容。但数据科学有时可能很抽象,有人能回答你的困境是一座金矿。我的意思是,是的,你可以用谷歌搜索东西,但是我发现抽象的东西在谷歌搜索后变得更加抽象,因为不知道如何教学和解释的人喜欢使用大词。他们这样做主要是为了听起来聪明,显示他们在该领域的专业知识,而事实恰恰相反。
缺点:可能很贵
学位可能贵也可能不贵,你可能在乎也可能不在乎。因人而异,再讨论下去也没什么意义。
缺点:有点固定的时间表
我喜欢提前学习。如果我知道我们会在大学一周内讨论线性回归,我会在那堂课之前就学会。那堂课的重点是回顾一切,并向教授提问任何我没有 100%弄清楚的问题。
我就是这样,有时候会有问题。例如,我可能坐在教室里无聊死了,因为我对这个话题知道得够多了,我已经准备好继续前进了。但是不,我们坚持时间表。有时候会很糟糕。
自学路线
Photo by David Marcu on Unsplash
虽然这条路线更便宜,但也有一些缺点。例如,当周一没有到期的时候,你更有可能不及格,一般来说,自学需要很多训练。和大学路线一样,我们把它分解成一些利弊。
教授:按照你自己的速度学习
没人告诉你要继续前进。你想做什么就做什么,想怎么做就怎么做。现在当我想起来,这也可能是一个骗局,至少如果你没有很好的组织和纪律。
教授:学习对你来说重要的东西
你对机器学习比较感兴趣,对社交网络分析不太感兴趣?那太好了,多花点时间学习机器学习就好了。大学生必须两者都学,即使他们可能对某些领域不感兴趣。
利:省钱
这个很明显。与其把钱花在学费上,你可以买一两个 GPU,让深度学习任务执行得更快。你将节省的金额会因大学而异,而且可能相当可观。我不认为你应该在教育上省钱,但是,嘿,如果你负担不起,那你就负担不起。
缺点:缺乏结构
如果你是构建学习课程的人,而你不知道什么是重要的,什么是不重要的,这可能不会有好结果。你可以复制大学使用的课程,更快地浏览材料,主要关注你感兴趣的话题。然而,缺乏一些正式的结构会让你觉得没有动力,这就让我想到了下一个骗局。
缺点:容易戒掉
当没有最后期限时,第一次事情变得有点复杂时,很容易放弃。也许你会退出那个项目,或者整个想法。这很简单,因为你不必回答某人。遇到困难时,需要很大的决心才能度过难关。
就业市场
Photo by Marten Bjork on Unsplash
所以你已经通读了这篇文章,最好也通读了其他一些文章。最重要的是,你已经决定了什么对你来说重要,什么不重要。但是就业市场呢?有没有大学学历都能在同一家公司得到同样的工作吗?
简单的回答是不,你不能。让我们再讨论一下。
如果你想为有人力资源部门的大公司工作,而你不认识在那里工作的人,你没有学位就完了。让我们面对现实吧,如果有 100 个人申请这个职位,人力资源部门会立即抛弃你,因为对方有学位。我知道这不公平,但不管你的 GitHub 档案有多棒,那个人力资源部的人就是不在乎。
另一方面,如果你申请一份小公司的工作,最好是没有人力资源部门的,你可能会有很好的机会。如果你的简历很中肯,GitHub 展示了你的编码和思考能力,你很可能会获得面试机会。他们可能会问你为什么不去上大学,所以准备好回答这个问题。
总而言之,如果你没有学位,在小公司找工作会容易得多,因为你的简历不会自动被丢弃。这是你应该努力的方向,至少在你没有工作经验的时候。
数据科学的工作几乎都是拥有硕士学位的人,如果不是博士学位的话。我不认为正规教育水平与你的编码和思考能力完全相关,但不幸的是,大多数大公司都是如此。
在你离开之前
选择你要走的路线绝不是一个容易的决定。我希望这篇文章能帮助你更清楚地看到一些事情,但我要再次强调,你应该自己做更深入的研究。
自学之后,我走上了大学这条路,我发现这条路非常好。我花了一些时间探索感兴趣的领域,看看这是否是我长期想做的事情。一旦课程开始,一切都切换到涡轮模式。我喜欢这样。
感谢您的阅读。如果你有任何问题或顾虑,请不要犹豫,去评论区。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
数据科学简化版第 12 部分:重采样方法
概念
机器学习算法有一种从数据中学习模式的方法。该方法是直观的。该模型从给定的数据集中确定潜在的模式。这个过程叫做训练模型。经过训练的模型在另一个它以前没有见过的数据集上进行测试。目标始终是找到最佳模型。努力达到模型在训练集和测试集上表现令人满意的最佳状态。
测试误差是模型根据新观测值进行预测时出现的平均误差。这一新的观察结果是以前的模型所没有的。训练错误率通常与测试错误有很大的不同,并且会极大地低估后者。
随着模型复杂度的上升,训练误差也随之下降。训练误差下降是因为模型的复杂性有助于它学习训练数据中发现的所有变化。这个过程被称为过度拟合。然而,由于测试样本是看不见的数据,过度拟合的模型在测试样本上表现不佳。
促成这种行为的成分是偏差和方差。
偏差定义为预测值与实际值的差距。
方差定义为估计值与其平均值相差的程度。
随着模型变得复杂,会发生以下情况:
- 当拟合度较低时,意味着偏差较高,方差较小。
- 随着模型复杂性的增加,偏差会下降。复杂模型可以适应数据点中的各种行为。
- 然而,方差也会增加,因为这意味着它必须估计越来越多的参数。
偏差-方差权衡是该模型渴望实现的最佳点。
模型训练的过程和它训练的数据一样好。那么,我们如何确保数据中的偏差不会渗透到模型训练中呢?我们如何确保模型足够一般化?
重采样方法用于确保模型足够好,并且能够处理数据中的变化。该模型通过对数据集中发现的各种模式进行训练来实现这一点。本文讨论了这些重采样方法。
验证集方法
验证集方法是一种用于训练和测试的简单抽样方法。数据被分成两部分。第一部分用于训练模型。该模型从训练数据中学习。数据的第二次分割用于测试模型。
验证集方法很简单。然而,它也有自己的缺点。
- 首先,模型基于训练数据学习的内容高度依赖于训练集中包含的观察值。如果训练集中包括异常值观察,则模型将倾向于从可能与实际数据不相关的异常值观察中学习。
- 第二,在训练集中仅包括观察值的子集。排除用于训练的观察值意味着模型将无法学习测试集中数据的细微差别。
一般来说,验证集误差倾向于高估测试误差。
k 倍交叉验证
我们已经看到了验证集方法的挑战。K-fold 交叉验证方法被用来克服这些挑战。这种方法的工作原理如下:
- 数据被分割成称为 fold (k)的东西。典型地,有 5 或 10 个相等的折叠。每个文件夹都有一组随机数据点。
- 在第一次迭代中,在(k-1)个褶皱上训练模型,并在一个遗漏的褶皱上进行测试。
- 重复该过程,直到模型在所有褶皱上被训练和测试。
让我们举一个例子。
- 在这个例子中,我们有一个数据集。这个数据集被分成十等份。
- 对于第一次迭代,使用九个折叠来训练模型,即折叠 2-10。
- 模型在第一次折叠时进行测试,即折叠#1。
- 为迭代 1 记录训练和测试错误。
- 在第二次迭代中,再次使用九个折叠来训练模型。但是,在这种情况下,折叠一与其他八个折叠一起用于训练。培训在第 1、3-10 折进行。
- 该模型在第二次折叠时进行测试,即折叠#2。
- 迭代 2 中记录了训练和测试错误。
- 这个过程一直持续到所有的褶皱都被训练一次,然后在所有的褶皱上对模型进行测试。
基于所有迭代的平均误差来计算模型的整体性能。
- 对于回归模型,所有折叠的平均误差可定义如下:
其中 MSE 是均方误差。
- 对于分类器,所有折叠的平均误差可定义如下:
其中 Err 可以是分类器指标,如 AUC、召回率、精确度等。
正如我们所看到的,k-fold 交叉验证方法消除了验证集方法的许多缺点。它主要做了一项出色的工作,确保偏见不会渗透到模型性能中。它通过对每个褶皱进行训练和测试来优雅地做到这一点。
然而,正如所预料的那样,与验证集方法所采用的简单方法相比,这种方法可能非常耗时。由于交叉验证方法比验证集方法多训练(k-1)倍,因此所消耗的时间是明显的。这个问题可能会更明显,尤其是当训练集很大的时候。
自助抽样
另一种数据抽样方法是使用 bootstrap 抽样方法。Bootstrap 是一种灵活而强大的统计方法,可用于量化与估计量相关的不确定性。引导过程采用以下方法:
- 我们不是从总体中重复获得独立的数据集,而是通过从原始数据集中重复采样观察值并替换来收集不同的数据集。
- 这些引导数据集的每一个都是通过替换采样创建的,并且与我们的原始数据集大小相同。
- 一个观察值可能在 bootstrap 样本中出现不止一次,也可能根本不出现。
让我们看一个例子来更好地理解它。
在上图中,有十个观察值。自举采样的工作方式如下:
- 原始数据集有十个观测值。
- 训练集是与原始数据集大小相同的*,即训练是在 10 次观察的基础上完成的。然而,训练集中的观察结果是从原始数据集中重复的。在上面的例子中,对于第一次迭代,从原始数据集重复观测值 2、3、4 和 9。不重复观察#1。*
- 一旦模型被训练,它就在看不见的数据上被测试。看不见的数据是那些不在训练数据集中但存在于原始数据集中的观察值。测试数据集是原始数据集——训练数据集。
对于自举样本#2,也重复这三个步骤。对于规定数量的引导样本(通常在 1000 个样本的范围内),该过程继续进行。总体 bootstrap 估计是从每个 bootstrap 样本估计中获得的估计的平均值。
与一般的训练测试分割机制相比,Bootstrap 估计在其估计中具有较低的方差。
自举抽样在实践中是有利的。
如果感兴趣的观测值相对较少,可以使用 bootstrap 采样对数据集中的相同观测值进行重复采样,以进行训练。
结论
本文阐述了三种重采样方法。总的想法是让模型尽可能多地学习。为了让模型尽可能多地学习,应该对基础数据集中的各种数据点进行训练。在实践中,简单验证方法用于快速创建模型。然后通过使用 K 倍交叉验证方法进一步增强。
参考
- 加雷斯·詹姆斯,丹妮拉·威滕,特雷弗·哈斯蒂,罗伯特·蒂布拉尼。《统计学习导论:在 r .纽约的应用》: Springer,2013 年。
本文最初发表于 www.datascientia.blog
2020 年的数据科学技能
如何成为一名数据科学家
数据科学令人兴奋、有益且有趣。然而,许多人发现学习过程让人不知所措。我们的工作需要大量深入的技术数据科学领域的知识。
Data Science skills you need to hone in 2020 to progress
沟通和可视化
如果你正在考虑磨练你的数据科学技能,你应该首先考虑沟通。
沟通至关重要。沟通是一项很难学习和精通的技能。
清晰、简洁、有说服力的交流有助于用户理解你想要表达的意思。这也给其他人一个机会来解释他们的观点和提供他们的意见。仔细考虑你的交流方式将有助于观众对你的项目有最好的体验。
鼓励第三方参与,与你的社区建立关系是一项有价值的技能。
接下来是三重奏:
- 数据可视化
- 统计信息可视化
- 数据挖掘技术
在我看来,前两个对于发现潜在的问题更重要,而第三个对于创造伟大的产品是至关重要的。
为了方便开发者,我们也建议想出一个如何使用你的可视化来增强你的产品的主意。通常,它会导致一个新工具的开发,然后可以在过程的每一步使用。
尝试建立有用的仪表板,解释,注释和记录好你的项目!这样,其他人也可以利用他们的利益。
数据科学中的基本概念
鉴于“数据科学”涉及众多一般主题(例如,机器学习、推荐、基础设施、预测分析等。),我们来举几个例子。我将从一个狭窄的角度,主要从利用数据科学的角度来看。
最基本的数据科学概念是:
- 识别正在解决的问题:看一个问题,问什么问题是相关的,我们如何解决它们,是否有技术解决方案?
- 看一个问题,问什么问题是相关的,我们如何解决它们
- 解释问题:他们正在解决什么问题?我们如何衡量影响?
- 他们在解决什么问题?我们如何衡量影响?预测结果:我们期望看到多少结果?我们如何确定哪个结果可能是最积极的?哪种结果更有可能是我们想要的结果?
数据科学方面的技能
接下来可能是最重要的一步——你必须非常了解统计学。数据科学以统计学为基础,然后才是计算机科学。没有掌握概率论和线性代数,你将很难产生有趣的结果。
所以我建议你在深入机器学习这样的高级学科之前,先从统计学开始。
然后是 Python。你真的必须高效快速地编程,才能在比最基础的层次更高的层次上进行数据科学研究。这是因为数据科学是关于测试、处理数据和实验的。
你往往会有新的数据集,你需要能够快速建立一个原型,至少研究你的工作可能走向的可能方向。如果没有很好地学习 Python,你每次都会在简单的实现上损失数百个小时,而不是考虑算法。
最终名单
要求摆在桌面上:
- 有一些数据科学项目的经验(可以上 GitHub,供自己学习!),
- 能够编写安全可靠的代码,
- 与你的团队、客户和其他技术代表保持良好的沟通,
- 提供良好的性格(不要刻薄),
- 诚实直率。
祝你 2020 年一切顺利!
祝你好运!
Data Science Job
最后,如果你想了解成为一名数据科学家意味着什么,那么看看我的书数据科学工作:如何成为一名数据科学家,它将指导你完成这个过程。
缺失的数据可能是最好的数据
Photo by Sander Weeteling on Unsplash
作为一名数据科学家,你经常会收到一组数据和一个问题。良好的逻辑思维确实有助于梳理出解决方案,所以让我们从一个虚构的滑稽例子开始,让你的脑细胞运转起来。
疯狂猫人住宅
一个房地产开发商想进入多层退休建筑市场。给一点背景,他们解释说,该地区的老人往往有很多猫,老人可能会太热,往往让他们的窗户开着。
通过询问,他们发现竞争对手有大量的法律问题,比如猫从窗户上掉下来会死。这可能会导致坏名声,而且仅仅密封所有的窗户也不是一个解决方案,因为这会降低他们可以收取的租金,因为他们感觉质量较差,而且他们必须安装昂贵的空调来保持居住者凉爽。
他们问你的问题是“我们需要密封多少层楼的窗户,这样我们才能限制掉下来的猫的数量?”
不要这样做,蒂布斯!
Photo by Tucker Good on Unsplash
你得到的额外信息是,他们的盈亏平衡是,猫需要至少 85%的机会幸存下来,才能在经济上保持窗户不密封。他们没有关于身高的生存机会的信息,所以你努力去该地区的兽医那里,统计从瀑布带进来的猫的数量,并计算出存活的比例。
Fictitious data for cat survival rates from falls.
瞧啊。你的答案出现了。所以,现在让我们尝试一个更现实的例子。
让飞机在战争中停留在空中
在第二次世界大战期间,提高飞机(以及飞行员)的生存能力是一个迫切需要的领域。如果你能让你的飞机比你的敌人生存得更好,那么你就有明显的物质优势(随着战争的进行,这是紧张的战争经济的一个大问题),但也意味着你有更大的耐力,因为飞机可以被修理和返回,而不需要等待全新的飞机和潜在的新飞行员。
最简单的解决方案是通过增加整体加固来增加飞机的装甲。然而,这是令人难以置信的不可取的,因为它增加了飞机的重量,使用了更多的资源(包括建筑和燃料),并且总体上意味着它在对抗敌人的轻型(和灵活)飞机时表现不佳,实际上降低了它们的生存能力。
他们提出的问题是“哪里最急需盔甲?”
要做到这一点,你需要任何科学家或数学家的心血,数据!他们对返航的飞机进行了观察,对遭受的损坏进行了分类,并将其覆盖在飞机的图上。
Hypothetical distribution of damage caused by enemy action. Source
我们走吧!你可以清楚地看到装甲需要去哪里。但是当图表缺少一个关键的信息来源时,你能做到吗?
剧情转折!
Photo by Ben White on Unsplash
如果你假设敌人的火力有均等的机会击中飞机的任何部分,那么那些发动机和驾驶舱上有弹孔的飞机在哪里?答案是他们从来没有回家,他们的伤害也没有被记录到之前的图表中。
因此,这些空白区域是飞机最脆弱区域的标志,因为在那里受损的飞机不会再返回。
这实际上是一个真实生活的例子,由哥伦比亚大学的统计研究小组(SRG)在美国战争期间进行的。军方倾向于保护他们看到损坏的区域,但在 SRG 工作的亚伯拉罕·瓦尔德指出了这一错误的推断,甚至开发了复杂的统计数据来模拟缺失的数据(这里有一个重印的为任何有数学倾向的人提供的估计方法),这是一个今天仍在使用的工作领域。这实际上是我们都可能遭受的某个领域的偏见。幸存者偏差。
那是什么呢?
幸存者偏差是指在数据中得出错误的结论,这些数据只包括在选择或评价过程中幸存下来的个体。你通常不会意识到这种偏见,因为你并不容易获得这种选择所去除的数据,所以你根据你所拥有的进行推断。
例如,短语“他们不像过去那样制造它们”通常用来表示过去制造的东西比今天的物品质量高得多。这里的偏见是,经过这么长时间后,只有高质量和设计良好的产品仍将运行,但因为你不知道在中间的几年里所有其他已经损坏和被丢弃的产品,你会有偏见地认为它们都是这样的。同样的偏见也适用于这样一种观点,即建筑比今天的建筑建造得更好,更漂亮,因为只有那些拥有这些品质的建筑才有可能保留到现在。
另一个例子(也是基于真实的辩论)是我之前举的猫的例子。看着它,你可能会认为,在第五个故事之后,猫存活得更好,这可能是因为猫有时间做出反应,确定自己的位置,从而更好地着陆,减少了遭受严重伤害的机会。但即使在这里,你也可能遭受幸存者偏见。偏见可能是这些数据来自猫被带到兽医诊所后的存活率。如果猫死于摔伤,不太可能有人把它带到兽医诊所,这将会使结果产生偏差。
所以最简单的方法是:
幸存者偏见每天都在我们身边。当心你没有受到它的折磨。
丢失数据怎么办?
Photo by Erol Ahmed on Unsplash
沃尔德是一名训练有素的统计学家,他敏锐地意识到分析中可能出现的偏差。有了这些知识,他能够识别缺失的数据是最重要的,甚至想出了一种统计方法来近似它,以便得出正确的决策。
即使你不是这样的世界专家,在许多情况下,一旦你知道失踪幸存者的存在,你也能大致估计出他们的影响,让你的分析回到正轨。
意识到偏见在我们的领域非常重要,因为经常有人会指出一个非常成功的企业或技术,然后说“我想成为那样的人”,但是你通常不想研究那个目标企业,因为他们不能告诉你如何避免失败,因为他们天生就是成功的。相反,看看他们的竞争对手和类似的技术,看看他们为什么倒闭。
这是我在工作中遇到过几次的事情,最常见的问题是,当实验室中的东西转移到生产中时,它们会失败。这通常是因为实验室设备在使用过程中被专家高度修改和改变,而不是所有这些都被记录下来或在生产机器上执行。实验室机器仍然存在的事实意味着他们相信他们都会像这样,他们忽略了他们处理掉的所有坏掉的机器。
一个很好的例子是,当时一位同事不得不处理一个案例,一个更新产品的新生产运行没有通过质量测试,但用于验证它们的可靠性机器没有问题。发生的事情是,可靠性机器是一个较旧的标志,只是在必要的地方用较新的部件进行了升级,但核心部件留下了。这些可靠性机器是幸存者偏差的一个明显例子,因为留在可靠性测试池中的机器必然是因为它们的长寿命制造良好,严重磨损,严格测试,因此结果是高度可靠的。
他们有偏见地认为,因为旧机器运转良好,所以新机器也是一样的。这里正确的决定应该是识别旧机器不再代表新版本,并留出一些新的运行来执行测试。这将有助于发现他们后来发现的制造问题,节省他们的时间和金钱。
摘要
幸存者偏差是一个很难注意到的偏差,它会影响大量的分析。然而,即使数据不可用,你也可以通过它的缺失来估计它应该是什么样的,并且仍然可以得出一个好的结论。
如果你想知道更多,我在下面整理了一份进一步的阅读清单,以及这个伟大的 TedX 关于它的演讲:
TedX talk on how survivor bias skews perceptions
参考书目
- 维基百科:幸存者偏见
- 幸存者偏差例子
- 创始人关于幸存者偏见的博客
- 亚伯拉罕·瓦尔德在飞机生存能力方面的工作(利用统计学填补空白的例子)
零售业的数据科学战略
数据科学和人工智能在零售业中的战略作用
Photo by Artificial Photography on Unsplash
数据科学和人工智能的作用正在以改变当今业务职能的方式增加 it 的足迹。除了 BFSI(银行、金融服务和保险)和其他行业之外,零售业和 CPG(包装消费品)可能是在游戏早期接受这些技术变革的最受关注的行业之一。大多数行业分析师强调,超过四分之三的组织计划到 2021 年在零售业部署数据科学和人工智能。从零售商的角度来看,重点显然是 a)通过个性化和所谓的超个性化来改善客户体验,b)提高效率和优化以降低成本,以及 c)尽可能多地实现自动化以体验增值。当然,这些是由“心态”、“态度”和“能力”驱动的,通过细节来完成战略方向。
Key focus elements
今天有哪些关键挑战?如果我们开始关注零售商,并记下他们的问题陈述或业务优先级,那么数据科学可以在许多不同的领域发挥作用,推动成功。例如,如果我们看一些问题,客户会要求更聪明的反应如下:如何提高客户体验;如何更好地学习客户的行为;如何优化成本,提高大多数运营的效率,无论是做得好的还是做得不好的;与客户先前获得的相比,如何向客户提供更好的价值;我们如何尽早处理并意识到客户群的具体变化,以便更好地应对这些变化;我们如何对产品和服务进行创新,以提高接受度、知名度和销售额等等。
根据分析师调查,近五分之一的公司已经在生产中部署了数据科学和人工智能解决方案,这意味着大约 70%-80%的范围存在,在设计阶段可以对现有解决方案进行即兴创作,可以实施新的解决方案,可以定义和规划新的战略,以实现人工智能的强大作用,从而实现商业价值及其影响。
**7 大应用主题:**未来几个季度,数据和人工智能在零售业的一些主要用途可能会继续如下:
- 超个性化(针对用户的产品个性化,针对一个用户、一组用户等的服务个性化。)
2.对客户的建议(例如 NBOs —次优产品等。)
3.仓库拣选的自动化设备或机器人(货物拣选和移动任务的自动化)
4.视觉搜索利用图像分析(使客户更容易找到他们要找的东西)和跟踪网络搜索
5.欺诈检测(总是想起来简单,处理起来复杂)
6.有效的定价策略(例如常规定价、促销期间定价或事件驱动定价等。)
7.虚拟现实或增强现实
客户分析和营销分析将继续发挥巨大作用,尤其是在商品销售、品牌管理、CRM 等领域。这些潜在的焦点是客户的实时高度个性化、基于财务和分类的商品规划、优化库存、需求预测、广告效果及其对销售的影响等。
**关注业务影响:**围绕这些战略的大多数战略和行动通过以下方式产生影响:
a)改善顾客体验;
b)根据客户行为跟踪快速做出决策,
c)网站流量、零售店流量或客流量的增加,
d)改进活动响应时间,
e)通过预测需求优化商店库存,
f)通过在非常具体的任务中实现自动化,提高劳动力生产率的有效性
Photo by Carlos Muza on Unsplash
**方法:**诗歌方法——“诗人”会将艺术加入科学,以便更好地推动结果。以下是数据科学的角色可能对零售商变得至关重要的原因:
- p:实用性和生产性——可行性、获取数据的方法、在给定数据质量和数据有用性的情况下如何应用以及应用哪种方法等。
- o:可操作性——监控、跟踪、执行多个实验,以便找出并评估哪个实验将是我们正在解决的问题的解决方案的选择。
- e:可解释性——对清晰非常重要。必须解释从步骤 1 到步骤 N 发生了什么,并且可以向相关的利益相关者清楚地说明。我们记录和展示 EDA、特征工程、实验和最终用户评估指标的步骤越多;越好。
- t:透明度、信任——正在做什么和如何做,展示哪些参数对预测目标产生影响,反映了哪些见解,考虑了哪种技术,为什么,基于什么实验和围绕它的度量标准。记录风险、合规性、数据敏感性方面将在更大程度上帮助最终用户。
结论:
关键是要更好地了解客户的期望,这可以通过一个可靠的方法和一个机制来实现,以便在市场发生动态变化之前了解这些变化并迅速采取行动。虽然有这么多的想法和实施,但要创造价值并将其添加到业务中并产生影响,仍有许多工作要做。数据和人工智能在这一旅程中对零售商发挥着重要作用,并将继续发挥作用。
免责声明 :这里的帖子是来自我的经验、想法和各种来源的阅读的个人观点,不一定代表任何公司的立场、策略或观点。
数据科学策略——研究数据科学的新途径
思考数据科学的有效方式
战术,是一系列的行动,旨在实现某一目标。战术一词源于军事战争,据说起源于 1626 年。其中一个经典的战术是在希腊战争中使用的斜序战术。第一次使用斜序战术的记录是在公元前 371 年希腊的 Leuctra 战役中,当时底比斯人打败了斯巴达人。这种战术的顺序如下
- 在这种战术中,进攻方集中兵力攻击一个侧翼。左翼比右翼更强大
- 左翼前进得更快,右翼则尽可能避免冲突
- 敌人左翼寡不敌众,被打败了
- 然后左翼去击败其他敌人的侧翼
Oblique Order tactic
在国际象棋中,战术指的是限制对手选择并可能导致实际收益的一系列走法。比如足球,高速反击就是一种战术。
在商业中,一个有用的策略是提供折扣以促销产品
战术是任何领域非常重要的一部分,无论是游戏还是商业。它有助于初学者理解什么是好战术,什么是坏战术。它有助于经理们,比如足球经理,根据为比赛制定的战术来规划球队
战术优势
那么为什么要有战术呢?它提供了一种在执行前思考和计划的方法。它提供了一种接近战争或游戏的方式。一个人不能在没有首先考虑方法的情况下发动一场战争或踢足球。利害攸关,所以有必要先想个办法。
战术也有助于每个相关人员的行动和交流。在足球比赛中,一旦比赛开始,考虑到比赛的速度,球员之间的距离以及所有的人群噪音,球员之间的交流不是很容易。但是有了适当的战术,球员可以根据比赛的情况迅速就位
战术也是领导者与团队沟通的一种方式。在任何足球比赛之前,经理都会召开一个简报会,向球员解释战术。想象一下在比赛前没有这样的简报的情况。球员们会对如何比赛感到困惑,这对球队来说将是一场灾难
战术发挥作用的最重要的方式之一就是与外界沟通。没有直接参与比赛或战争的人仍然有兴趣知道战争是如何进行的,或者一场比赛是如何获胜的。有各种各样的书籍和文章记录了这些策略。这些文件有助于理解哪些是制胜策略,哪些不是。这些从过去吸取的经验教训对该领域未来的领导人来说是非常有用的资源
在数据科学领域,战术意味着什么
战术的概念在数据科学领域并不常用。尽管这个概念非常有用,但战术这个词在数据科学家中并不流行。其中一个原因是没有尝试在数据科学领域引入战术思维。然而,将策略引入数据科学对于数据科学家和数据科学领域都是有用的
让我们先来看看,理解战术对数据科学世界意味着什么。正如上面提到的,战术提供了一种在执行前开发方法的方法。对于数据科学家来说,策略可以帮助决定解决业务问题的方法,并避免直接跳到算法。在许多情况下,数据科学家在考虑如何解决问题之前直接开始编码。这可能不会导致最佳结果和时间的有效利用。拥有战术知识可以带来一种“更高层次”的思考方式,以及探索不同的可能性
战术也有助于避免算法困扰的问题。如果你痴迷于算法,你会试图使用算法中的最新趋势来解决所有问题,而不会首先想到一种方法。然而,先考虑策略,再考虑算法也有助于选择适合问题的正确算法类型
就像在足球或象棋中,有一种方法可以知道过去的比赛是如何赢的。这是通过描述游戏中使用的战术来完成的。这些知识对于现在的教练和分析师来说非常有用,他们研究过去的比赛来决定他们的战术。在数据科学领域,没有对任何解决方案的如此高层次的描述。原因是没有通用的方法来描述数据科学解决方案。每位数据科学家都试图以自己的方式描述解决方案。而且大多数时候,解决方案的描述只是笔记本和代码。
通过使用战术概念,有一种方法可以开发描述任何数据科学解决方案的通用定义。这种通用的高级描述可以从高级方法的角度帮助数据科学解决方案,而不是通过代码或笔记本。
用分段说明数据科学中的策略
数据分割或聚类是非常重要的数据科学技术之一。它的目的是找到相似的数据记录,并将它们分配到一个簇或段中。相似数据记录的组称为簇或段。这两个术语都经常使用。
这种将许多数据记录分组为几个簇或段的能力在各种领域都非常有用。例如,在市场营销中,人们可以将数百万的客户分成几个部分。例如,一家服装零售商可以将其客户群划分为时尚爱好者、价格敏感者、折扣爱好者等群体…然后可以为每个细分市场设计具体的营销活动。
让我们看看不同的细分策略
策略 1:目测识别分段形成
策略 2:使用预定义数量的细分市场
策略 1:目测识别分段形成
从技术上讲,任何数据都可以被聚集。然而,最好是具有与其他集群分开的结构良好的集群。结构良好且独立的群集有助于赋予群集意义。如果群集过于接近或重叠,则很难理解群集的含义。
这种策略的目的是验证是否存在结构良好且独立的集群。建议进行这种验证,以确保任何聚类是否有意义。它还可以帮助决定应用哪种聚类算法。
说明战术的数据集
我们将查看包含汽车信息的汽车数据集。该数据集可在 UCI 机器学习知识库中获得。(* Dua d .和 Karra Taniskidou e .(2017 年)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml]。加州欧文:加州大学信息与计算机科学学院。)
该数据集包括三种类型的实体:(a)汽车在各种特征方面的规格,(b)其指定的保险风险等级,其与其他汽车相比在使用中的标准化损失。第二个等级对应于汽车比其价格显示的风险更大的程度
此处显示了数据集的快照
Automobile dataset
战术序列
这里显示了战术顺序。这将在下面的章节中解释
tactic sequence
集群目标
聚类练习需要有一个目标。这有助于选择相关的特征,赋予聚类以意义,以及将聚类的结果用于商业目的。在本例中,假设我们的聚类目标是根据技术特征对汽车进行分组。这将有助于确定基于技术特征可以形成多少个集群或组。这也有助于发现哪些汽车在技术特征上是相似的。
特征消除
在目标固定的情况下,我们只需要与技术特征相关的数据,而不需要与保险或损失相关的特征。因此,在运行聚类算法之前,您应该首先删除所有与目标无关的特征。
此外,我们将使用主成分分析(PCA)算法进行降维。一般来说,分类特征不会影响五氯苯甲醚。因此,我们也将删除分类特征
因此,我们只保留与此目标相关的连续特征,即:车门数量、整备质量、气缸数量、发动机尺寸、城市 mpg、公路 mpg、轴距、长度、宽度、高度、缸径、冲程、压缩比、马力、峰值转速
我们将删除所有与聚类目标无关的特征,如保险或损失。此外,我们还删除了所有分类特征,如品牌、燃料类型、车身风格等…
标准化
所有的分类特征都有不同的单位。例如,车门数量的单位与发动机尺寸不同。下面解释的降维技术是非常敏感的,并且会给出不同单位变量的错误结果。所以我们首先用标准差来表示所有的数字变量。
此处显示的是标准化后的原始值和缩放值的示例
standardisation
降维
即使去掉了一些特征,我们还有大约 15 个特征。有如此多的特征,绘制任何可视化都是不可行的。作为人类,我们能够以最大三维可视化数据
因此,在这一步中,我们使用降维技术将维度降低到两个维度,而不会丢失数据中的信息。PCA 或 TSNE 等算法对降维算法很有用。这里我们将使用 PCA 算法
对于二维 PCA,我们看到第一个主成分(我们称之为 PC0)捕获了 40%的方差,第二个主成分(我们称之为 PC1)捕获了 16%的方差。所以在二维情况下,我们获得了 56%的方差。由于这个值大于 50%,所以可以接受,因为前两个主成分应该包含大部分方差
pca components
让我们看看数据集中哪些特征对主成分影响最大。这种影响是由特征值给出的。每个特征和主成分的特征值如下所示。
pc0 eigenvalues
pc1 eigenvalues
我们可以看到,第一主成分在正向上受整备质量的影响最大,在负向上受公路里程的影响最大。类似地,第二主成分在正方向上受到峰值转速的影响,在负方向上受到高度的影响
视觉聚类分析
现在,我们可以基于两个主成分将数据集转换为二维。此处显示的是包含 15 个要素的数据集,现在绘制在 2D 散点图上。
scatter plot
视觉分析,我们看到数据集可能有三个集群。有一些数据点可以被认为是异常值
策略 2:使用预定义数量的细分市场
在这种策略中,我们将看到当分段(或聚类)的数量已知时如何进行分段。集群的数量可以由业务给出,例如需要分割成固定数量的部分。或者,已经用上面给出的策略直观地确定了簇的数量。
说明战术的数据集
我们将使用之前策略中使用的汽车数据集
战术序列
这里显示了战术顺序。这将在下面的章节中解释
tactic sequence
集群目标
与之前的策略相同
离群点剔除
由于我们将使用聚类算法进行分段,因此需要注意的是,聚类算法可能对异常值非常敏感。如果存在极端的异常值,那么聚类的结果可能会非常奇怪。因此,在使用聚类算法之前,最好先去除异常值。
正如我们在前面的策略中看到的(直观地识别段形成),数据集中有一些离群值可以直观地识别出来。下面显示的是之前策略中使用的 PCA 图。此外,异常值标有数据记录号
removal of outliers
可以基于数据记录号从数据集中移除这些可视识别的异常值。可以在数据集中识别数据记录号,如下所示,然后可以删除这些数据记录
outlier records
特征消除
在目标固定的情况下,我们只需要与技术特征相关的数据,而不需要与保险或损失相关的特征。因此,在运行聚类算法之前,您应该首先删除所有与目标无关的特征。
在前面的策略中,我们已经删除了分类特征,通常分类特征不会影响 PCA。然而,在聚类中,我们可以保持分类特征。它们必须经过一种特殊的处理,称为一键编码,这将在下面解释。
因此,让我们只保留与此目标相关的特征,包括数字特征和分类特征,如下所述:燃料类型、吸气量、门数、车身类型、驱动轮、发动机位置、轴距、长度、宽度、高度、整备质量、发动机类型、气缸数、发动机尺寸、燃料系统、缸径、冲程、压缩比、马力、峰值转速、城市英里数、公路英里数
相关性
在这一步中,我们将尝试找出哪些特征是相关的。我们这样做的原因是,我们将使用这些特征来分析聚类的结果。如后面的步骤所示,聚类分析是使用散点图进行的。高度相关(正相关或负相关)的特征可以用作散点图的轴。如果散点图的轴是相关变量,则散点图对于聚类分析非常有效
此处显示的是以热图形式显示的功能相关性。
correlation heatmap
非常浅的颜色表示变量高度正相关,非常深的颜色表示变量高度负相关。有许多颜色很浅或很深的盒子。因此,让我们选择几个这样的变量,如
-长度和宽度,这是正相关的
-公路-mpg 和宽度,负相关
标准化
与之前的战术相同(目视识别分段队形
一个热编码
对于分类变量,我们需要转换成数值。这是通过一种热编码算法来完成的
categorical to one hot encoding
例如,分类特征 body-style 被转换成多个特征,例如 body-style_convertible、body-style_hardtop、body-style_hatchback、body-style_sedan、body-style_wagon。将 1 放入对应样式的列中,否则值为 0
聚类
有不同的聚类算法。因为这里假设聚类的数量是已知的,所以我们可以使用 K-Means 算法。根据同一数据集的策略“视觉识别聚类形成”,我们得出结论,三个聚类将是一个不错的选择
在这一步中,我们使用 K-Means 算法将所有数据点聚类成三个簇。以下是每个数据点被分配到一个聚类的结果。如下图所示,2D 散点图基于使用 PCA 进行降维后获得的两个主要成分(如前面的战术中所述,目视识别片段形成)。点的颜色基于簇分配
pca clustering
这些簇形成得很好并且是分开的。群集有一些重叠,但这是最小的。集群 0 和集群 1 更紧凑,而集群 1 似乎有点分散。每个聚类的点数用这里显示的条形图表示
cluster size
另一种可视化方法是使用散点图,其轴是高度相关(正相关或负相关)的特征。正如我们在步骤相关中看到的,下面是相关变量的选择
-长度和宽度,这是正相关的
-公路-mpg 和宽度,负相关
下图显示了基于这些特征以及不同颜色的聚类的散点图
k means clustering
给集群赋予意义标签
分割的一个重要任务是给一个簇或段起一个有意义的名字。一旦创建了段,用一些有意义的名称而不是段 0、段 1 等来称呼它们是很方便的…对于商业用户来说,用一些有用的名字来交流细分的结果也更容易。在这个策略中,我们将看到如何赋予一个集群以意义
一种可能性是使用上面显示的散点图来解释集群。
我们可以看到集群 1 是具有小长度和宽度的汽车。因此,我们可以将该集群标记为小型汽车细分市场。群 2 有长度不小也不大的车厢。所以我们可以把它们归类为中型汽车。集群 0 具有长度和宽度更高的汽车。因此,我们可以将该集群标记为大型汽车细分市场。
这也有助于实际查看集群的一些成员,以便更好地理解结果。在这里,我们可以看到每个集群中几辆车的一些照片。根据照片,您会发现 Cluster1 拥有掀背式车身风格的汽车。集群 2 一般是轿车车身风格的汽车。群 0 有许多是货车的汽车
除了散点图,还有其他方法来确定一个片段的意义,我们将在其他策略中探讨
这里,您看到了聚类或细分所需的两种策略的一些示例。
Example of tactics
一旦你开始掌握策略,而不是算法,你将更好地控制数据科学的过程。在算法之前考虑战术将有助于您获得更好的数据科学方法。它还会帮助你变得不那么痴迷于算法,并开拓更广阔的视野。你将对数据科学有一个清晰的思考过程,而不是被无数的算法所困扰
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站进行零编码分析。https://experiencedatascience.com
请订阅每当我发布一个新的故事时,请及时通知我。
[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。
每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)
你也可以通过我的推荐链接加入 Medium。
[## 通过我的推荐链接加入 Medium—Pranay Dave
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)
https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接
数据科学。中心极限定理与抽样
理解中心极限定理
有很多工程师从未涉足统计学或数据科学。因此,要构建数据科学管道或将数据科学家产生的代码重写为适当的、易于维护的代码,工程方面会出现许多细微差别和误解。对于这些数据/ML 工程师和数据科学家新手,我做这个系列文章。我将尝试用简单的英语解释一些基本方法,并基于它们解释一些数据科学模型概念。
整个系列:
研究随机现象的实践表明,尽管单个观察的结果,即使是在相同条件下进行的观察,也会有所不同。但是对于足够多的观察结果,平均结果是稳定的,只有个别观察结果的微弱波动。随机现象的这一显著特性的理论基础是中心极限定理(又名大数定律)。
根据中心极限定理,随着样本量的增加,数据样本的平均值会更接近总体的平均值,会近似正态。这个定理的重要性来自于这样一个事实:不管人口的分布如何,这个定理都是成立的。
为了说明这个概念,请查看以下掷骰子的动画和代码:
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plot
import matplotlib.animation as animation
from wand.image import Image
from wand.display import display# 1000 simulations of die roll
n, m = 200, 31# In each simulation, there is one trial more than the previous simulation
avg = []
for i in range(2, n):
a = np.random.randint(0, m, i)
avg.append(np.average(a))# Function that will plot the histogram, where current is the latest figure
def clt(current):
# if animation is at the last frame, stop it
plt.cla()
if current == n:
a.event_source.stop()plt.xlim(0, m)
plt.hist(avg[0:current])plt.gca().set_title('Expected value of die rolls')
plt.gca().set_xlabel('Average from die roll')
plt.gca().set_ylabel('Frequency')plt.annotate('Die roll = {}'.format(current), [3, 27])fig = plt.figure()
a = animation.FuncAnimation(fig, clt, interval=1, save_count=n)
a.save('animation.gif', writer='imagemagick', fps=10)
在现实世界中,为了了解一个群体的特征,科学家们通常对数据进行抽样,并对样本数据进行统计。他们通过处理样本来理解和概括对人口的认识。使用大样本量,中心极限定理允许我们在此过程中应用正态分布的特性。
我们已经知道正态分布是特殊的。我们也可以将它的一些性质用于严格来说不能称为正态的分布。
抽样
在此之前,我们讲过如何, 知道理论分布 , 知道概率论 , 知道分布 的参数,来评估样本对一般总体发生了什么。但是有一个问题,如果我们估计的样本设计不正确或者它不能代表总体,那么即使最好的理论和最了解的分布也不能帮助我们。
为什么要采样?
逻辑问题是:如果我们取一个样本,无论如何,我们会丢弃一些数据。为什么不把所有的数据和人口的所有元素结合起来?
第一,需要收集数据,而且非常贵。想想调查。即使我们不是在谈论所有美国人的人口,但我们要举个例子,所有 加州 的居民,那就是 3900 万人。要采访 3900 万人,我们需要预算,当然,我们没有。此外,即使我们有这样的预算,也几乎不可能覆盖任何一个州的所有居民。
一般来说,抽样的概念很简单——取一个很小的样本集,但是这个样本集在一些代表我们总体的关键标准方面是非常异质的。也就是说,不是采访所有的加州居民,而是采取某种方式来代表加州的重要标准。
取样的想法和喝汤的想法很相似。当我们煮的汤含有很多配料时,它们被不同地切割,在不同的时间添加,我们需要评估汤的质量。我们不需要吃完所有的汤来评价它有多美味。此外,如果我们需要吃完所有的汤才能明白它有多好,那么任何集体烹饪的想法都会有些荒谬。但是我们在做什么?我们把汤煮开,之后,我们拿起勺子,舀起来,根据这一小部分,我们试图评估我们是否已经把汤煮好了,或者我们需要改变汤里的一些东西。如果我们只是随便拿一些部分,比如从上面舀,那么我们会有满满一勺的水,它不会给我们任何关于食材(蔬菜或者肉)的概念。如果我们从底部舀,结果可能是我们只得到大块,但我们对小块一无所知。为了将汤的所有成分都放入样品中,以便品尝汤的味道,我们需要首先混合它,然后,在我们混合好之后,舀起它,我们会看到所有的成分都在勺子中——大的,小的,和水,所有的。也就是说,在这一部分,我们已经可以估计出汤里的所有配料准备得有多好。取样也是一样。
在采样的情况下,这种混合的模拟是随机采样。它是一种随机选择,其本质是确保样本中的每个元素以相等的概率得到,它为我们提供了样本的这种代表性。
可怕的是样本不具有代表性?
我将强调几个问题。最简单和最容易理解的例子——例如,如果我们选择一个可用样本。
就是我们研究年轻人的喜好,但是由于我们在某个大学学习或者工作,所以只采访我们大学的学生,说基于这个研究我们会了解所有的年轻人。显然,我们不会了解所有的年轻人,因为样本是一个非常特殊的群体。现有的样本给我们提供了部分情况,但并不完整。在这种情况下,相当一部分不在大学学习或在其他大学学习的年轻人将不会被我们的样本所涵盖。另一个问题是——我们只能选择那些想和我们交谈的人。也就是说,这种非代表性样本的问题在于,我们没有给不同的人平等的机会,让不同的观点在我们的样本中得到代表。随机抽样至少在形式上保证了这种表示的可能性。
概率抽样方法
最简单和最容易理解的方法是一个简单的随机样本,当我们有一个完整的总体元素列表时。例如,我们的人口都拥有纽约市的电话号码,我们有这些号码的完整列表。我们打开“随机数传感器”,选择我们需要的物品数量,然后拨打这些电话号码——一个简单的随机选择。
另一种选择是分层抽样。在这里我们不再做随机选择,但在这里我们知道一些关于我们的人口。我们知道它由几个同质的集群组成,这些集群需要在我们的样本中呈现。比如一男一女,对一些问题有不同的看法。我们首先将我们的人口分为男性和女性两类,然后我们在两类中随机选择,以保证这些类在最终样本中的代表性。
随机抽样的另一个变体是整群抽样。例如,当我们探索城市时,会用到这样的样本,而城市通常会被划分为区。一些地区彼此相似,一些不同,我们有这种类似的地区集群,比如说,在社会经济条件方面。我们首先把城市分成几个区,然后随机选择这些区中的一个,每次一个,这样就不用去所有的 12 个区,而是从 12 个区中随机选择 3 个,先把它们分成这些相似的类别,然后在这些区域内工作。
非概率抽样方法
还需要非概率抽样方法。而且,在某些情况下,非概率抽样是不可替代的。比如有一种抽样方法——滚雪球抽样。如果我们调查难以接触到的群体,或者我们不知道总人口的确切数量,这是必要的,然后我们与第一个人交谈,他与下一个人联系我们,下一个,下一个,我们有点像积累一个雪球。我们增加了样本,从一个开始,或者有时从几个这样的雪球开始,以保证群体的异质性。当然,这个样本在统计学上并不具有代表性,但是有些任务没有它我们根本无法完成。
结论
中心极限定理是统计学中的一个非常重要的概念,因此也是数据科学中的一个非常重要的概念。这个定理将允许我们测试所谓的统计假设,即允许测试假设对整个人口的适用性。我们将在后面的文章中讨论这个概念。
抽样是从人群中获取少量但有代表性的数据的一种廉价且容易理解的概念。对于大多数研究问题来说,概率方法是更可取的,但是对于有些任务,只有非随机样本才能有所帮助。有些任务是不可替代的,但在统计学意义上,非随机样本不具有代表性。因此,所有这些关于分布的理论知识,关于根据样本推断总体人口的理论知识,我们只能在随机样本上进行。
感谢您的阅读!
有什么问题吗?请在下面留下您的评论,开始精彩的讨论!
查看我的博客或者来打个招呼👋在推特或订阅我的电报频道。
规划好自己!
数据科学独角兽可能就在你的眼皮底下
我们的社会以惊人的速度产生数据。据估计,每天有多达 250 万兆兆兆字节的新信息出现在世界各地的服务器上。这相当于 10 亿部 iPhones 手机所能容纳的数据量,0 和 1 的数量如此之大,以至于你需要 18 个 0 来计数。每一个。单身。日。
在畅销书 中,21 世纪的 21 个教训 作者尤瓦尔·诺亚·哈拉里说“数据将超越土地和机器,成为最重要的资产。”这种信息过剩产生了对有技能和意识利用信息的人的需求暴涨。数据科学预计将成为 IT 行业中发展最快的领域。IBM 预测,到 2020 年,对数据科学家的需求将增长 28 %,预计全国数据科学领域的工作岗位总数约为 270 万个。
但是合格的数据科学家的供给却落后了。根据最近的 LinkedIn 劳动力报告,全国有超过 150,000 个职位空缺,因为缺乏具有数据科学技能的候选人。如果 IBM 的预测成立,我们可以预计这一数字将增加两倍,因为数据科学领域的 364,000 个新职位将增加到经济中。
高薪数据科学家职位的空缺数量和合格申请者数量之间的差距已经变得如此明显,以至于雇主、教育工作者和决策者都在争先恐后地回答同一个问题:我们如何才能培养更多的数据科学家?
新的学位课程、认证和训练营在这个领域比比皆是,有助于缩小数据科学招聘的差距。但在推动产生更多数据科学家的过程中,许多这些项目忽略了填补这些角色的最有效和最可靠的候选人来源之一——已经在从事数据相关工作的人。
为了理解我这样说的意思,对数据科学家有一个清晰的定义是很有帮助的。数据科学家了解数据工程的原理,能够自信地对数据建模并解析模型以获得见解,并且能够有效地传达这些见解。
换句话说,数据科学家是一种多面手,可以同时部署多个学科的工具和方法。首先,一名高效的数据科学家需要了解收集信息的流程、存储数据的架构以及如何提供数据,这通常被称为“数据工程”
接下来,数据科学家需要牢固掌握解析数据所需的统计模型,并熟悉用于运行这些模型的语言、库和平台——Python、R、Hadoop、Tensorflow 等等。
我最喜欢的几个使用数据科学工具的项目:
用自然语言处理写诗用 Python
ADAM 是一个帮助你在 Spark 中并行化基因组数据的库
Rspotify是一个允许 R 程序员连接 Spotify API 的包
这个项目使用tensor flow让 Alexa 对手语做出反应
最后,数据科学家应该了解如何从数据中获得最有影响力的见解。这包括熟悉企业的总体目标,在规划项目时运用判断力,并能够以各种形式交流他们工作的利害关系和结果——书面信函、现场演示和/或数据的可视化表示。
数据科学家应该了解如何从数据中获得最有影响力的见解。
一个高效的数据科学家应该熟悉所有这些技能。目前,很难找到一个拥有如此广度和深度知识的人;这是招聘人员和雇主努力寻找数据科学领域合格候选人的一个原因。数据科学是一个较新的领域,培训计划尚未赶上市场需求。
但在寻找完全成熟的数据科学家的过程中,许多公司忽略了一个显而易见的人类潜力来源:当前员工。的确,拥有成为成功数据科学家的所有素质和技能的人可能相对较少,但许多公司的工资单上已经有人拥有许多这些关键技能。一个聪明有效的再培训计划可以让他们在不太熟练的领域提高速度。
但在寻找完全成熟的数据科学家独角兽的过程中,许多公司忽略了一个显而易见的人类潜力来源:当前员工
例如,一个软件开发人员可能已经掌握了操作数据的技术技能,给了一个统计建模的复习课程。一个已经知道如何交流想法并精通像 D3.js 这样的数据可视化库的设计师可以成为一名优秀的数据科学家,有机会学习更多关于信息系统架构的知识。
这种方法有几个好处。投资于员工再培训的公司可以确定,数据科学家职位的候选人已经了解业务,并且符合组织的文化,而不是将金钱和资源投入到昂贵的搜索过程中。
内部培训候选人也可以减少新员工熟悉公司软件栈所需的在职培训。
在职培训的前景让员工知道,他们的雇主致力于帮助他们建立职业生涯,这给他们一种稳定感,鼓舞士气,提高整体生产力。这也有助于留住员工,在去年的达沃斯世界经济论坛上,麦肯锡公司报告称“在人工智能领域投入巨资的 80%的首席执行官也公开承诺保留和再培训现有员工。
寻找能够帮助你进入像数据科学这样的新兴领域的人似乎令人生畏,但是首先要诚实地评估你的团队已经具备的能力和知识。你可能会发现你已经得到了你想要的东西。
2020 年的数据科学趋势
数据科学现在无处不在。2020 年我们可以期待什么?
现在,人们已经在庆祝这个十年的结束(有趣的事实:2020 年代实际上从 2021 年 1 月 1 日开始)。去年的时候,我决定思考已经发生的事情,以及在我看来,关于 2020 年的数据科学,我们可以期待什么。
没想到我去年的反思帖有这么多阅读量。从反馈来看,人们觉得很有趣,没有进一步的原因,让我们深入今年的想法,保持论坛开放!
数据科学进入保守领域
2019 年,我们开始看到机器学习解决方案被应用于保守(监管更多)的领域,如医疗保健——现在,受到了重视!
今年我注意到的最有趣的挑战之一是在胸部 x 光片中识别气胸疾病。本质上,肺萎陷导致严重的呼吸困难。这可能是一个非常困难和微妙的条件,以确定。这将是另一个和其他挑战一样的挑战,但现在它包括了研究这种情况的实际机构的参与。我敢肯定,这些机器学习算法在四年前对我来说可能是很方便的…像这样的系统已经被 FDA 批准。
Pneumothorax impacts nearly 74,000 Americans every year [source: Venture Beat, GE Healthcare]
这一步骤的主要结果不仅仅是帮助受影响的个人,还有更高层次实体的显著参与,即决策者,使这些技术能够在以前对采用这些技术非常谨慎的领域中使用。正如许多数据科学家所知,这通常是新项目中最难克服的瓶颈之一。
另一个例子,不仅仅是从 2019 年开始,是使用数据科学来确定药物-补充相互作用( supp.ai )。如果你知道组合,你就能对我们正在谈论的事情的规模有个概念。
设计的数据隐私
随着用户越来越关心数据的处理和所有权,工程师和数据科学家不得不寻找方法来满足这些新的用户需求。如果公司实际上不拥有满足其业务需求的用户数据,无数的数据泄露(你可以看看这份令人印象深刻的 2019 年总结)可以得到缓解。
早在几年前,联邦学习就已经成为关于数据隐私的热门话题。本质上,
联合学习是一种机器学习设置,其目标是利用分布在大量客户端上的训练数据来训练高质量的集中式模型,每个客户端都具有不可靠且相对较慢的网络连接。[ 谷歌人工智能 ]
这可能不是灵丹妙药,但它可能有助于软件工程师和数据科学家按照设计隐私来构建系统。我们可以将此视为使用更少数据的机会,同时仍然能够创建有用的产品。
Federated Learning is a new a machine learning technique that trains an algorithm across multiple decentralized edge devices or servers holding local data samples, without exchanging their data samples [source: Google AI, Wikipedia]
用更少的资源做更多的事情(数据)。对数据科学来说有点反直觉,对吧?是的,可能是。但信任将是 2020 年的一个关键话题。你如何确保用户信任软件公司的数据?例如,使用联合学习来训练移动键盘的预测模型,而无需将敏感的打字数据上传到服务器( Hard,et al .,2018 )。
Servers (companies) do not need to know about every piece of data you generate. [Hard, et al., 2018]
如果联合学习对你来说是一个新概念,或者你希望更好地理解它,我完全推荐你从这个奇妙的漫画开始。你甚至可以开始用开源框架 Tensorflow Federated 创建自己的第一个系统!
减轻模型偏差和歧视
2019 年 11 月最大的头条之一与苹果/高盛信用卡(最有可能)性别歧视有关。用户们注意到,它给女性提供的信用额度似乎比男性少。即使这一切都是从大卫·海涅迈尔·汉森的病毒式推特开始的,它也提醒了我们全自动机器决策的老问题:导致最终决策的主要驱动因素是什么?至今没有人解释,而且现在很难得到人类的帮助。
As soon as a model is put into production it is up for scrutiny of users, specially if the decisions directly affect high stakes personal issues.
尽管看起来很可怕,但数据科学家知道,将性别作为模型的输入并不意味着你不能被指控性别歧视。现在阅读高盛的官方推特…从这些回答中,你可以看到一些公司在使用新技术时坚持的独创性。重要的是要记住,
[这就是]现代算法将导致“代理 歧视”的风险代理歧视是不同影响的一个特别有害的子集。像所有形式的不同影响一样,它涉及一种表面上中立的做法,对受保护阶层的成员造成了不成比例的伤害。[ 人工智能和大数据时代的代理歧视
我们应该始终记住,基于有偏见的数据训练的复杂模型可以学习歧视性模式,从而导致扭曲的决策。而且这些模型可以找到导致歧视的代理,甚至如果你实际上不包括你认为可能有历史偏见的实际特征。
It’s up to the data scientists (including machine learning engineers) to come up with new bias identification and mitigation algorithms to help mitigate harm on users [image source: Adeli, et al., 2019]
作为前进的道路,偏见歧视将继续成为主要话题之一,不幸的是,在公司认真对待这个问题之前,我们会看到更多类似的头条新闻。数据科学家可以通过执行示例性探索性数据分析来提供帮助,确保数据代表整个群体,并探索可以识别和减轻这些偏差的新架构。
Python 是数据科学的事实语言
当我五年前转到数据科学领域时,问题— 【对于数据科学】我应该专注于什么编程语言?——这个问题很难回答。随着岁月的流逝,随着 Python 的海量增长,已经变得更容易回答了。正如 Stack Overflow 在 2019 年 4 月发布的年度开发者调查中所述:
在我们的调查中,增长最快的主要编程语言 Python 再次在编程语言中排名上升,今年超过 Java,成为第二大最受欢迎的语言(仅次于 Rust)。
不仅仅是堆栈溢出,其他网站也提到 Python 是你可以做的最好的赌注之一,如果你打算开始编程,有一个巨大的支持社区在你身边,或者做一个快速原型。最后一个方面通常与当今的数据科学家最为相关。很难有任何其他编程语言能更好地帮助数据科学家。
回想一下,数据科学是 统一统计学、数据分析、机器学习及其相关方法 的一个概念(这要追溯到 1996 年与 Hayashi !).我喜欢给它加上“越快越好”。这就是 Python 的用武之地。
Python can safely be confirmed as the “de facto” data science programming language
我相信 Python 推动了数据科学的巨大发展(或者反过来?).如果对你来说这仍然是一个不确定的决定,那就去做一些研究来找出答案。
专注为“别烦我,我只想把事情做完”
聚焦 2020 年!由于每天都有如此多的新文章发表——截至 2018 年底,每天大约有 100 毫升的论文发表在arXiv.org上(是的,它们没有经过同行评审,但即使……)——聚焦必须是你添加到目标中的东西。
随着数据科学家独角兽(幸运的是)的想法消失,数据科学专业化的概念已经成熟。就像决策树的第一次分裂一样(很抱歉…),你可以有两种方法:
- 重型工程路径,专注于数据管道、生产化、软件工程。如果你是计算机专业出身,这个对你来说可能比较容易。
- 重分析路径,侧重统计、数据分析、业务知识。如果你来自应用数学、物理,甚至是社会领域,这对你来说可能是一个更容易的开始。
这并不意味着两条路永远不会交叉,但你应该追求其中的一条。如果你想进入更多的细节,你甚至可以找到更具体的工作名称,就像我去年提到的。
归根结底,更重要的是把事情做好!记住,你不需要从零开始创造东西来创造伟大的东西。基于其他优秀的开源工具构建,如 Tensorflow Extended 或 PyTorch 。这两种工具都能让你克服许多最初的头撞墙的时刻。
Keep your boat well steered as you enter 2020. Focus on what you really want to do. [source: Evelyn Paris]
祝 2020 年愉快!
2019 年是一次疯狂的过山车之旅…加入谷歌纽约对我来说是其中一个循环。祝 2020 年愉快!
数据科学 vs 人工智能 vs 机器学习 vs 深度学习
首次发布于我的博客。
这些天来,经常会遇到这些术语——数据科学、人工智能、机器学习、深度学习、神经网络等等。但是这些流行语实际上是什么意思呢?你为什么要关心这个或那个?在这篇文章中,我尽我所能来回答这些问题。但话说回来,我不是这方面的专家。这是我在过去几年的数据科学和机器学习之旅中获得的知识。我相信你们中的大多数人会比我有更好更简单的方法来解释事情,所以我期待着在下面看到你们的评论。那我们开始吧。
数据科学
数据科学就是关于数据的,我很确定你已经知道了。但是,您知道我们使用数据科学来做出商业决策吗?我很确定你也知道。那么这里还有什么新的东西呢?那么,你知道数据科学是如何被用来做商业决策的吗?没有吗?让我们看看那个。
我们都知道,每一家科技公司都在收集海量数据。而数据就是收入。这是为什么呢?那是因为数据科学。你拥有的数据越多,你就能获得越多的商业洞察力。使用数据科学,您可以发现您甚至不知道存在的数据模式。例如,你会发现某个去纽约度假的人很可能会在接下来的三周内花钱去威尼斯进行一次豪华旅行。这是我刚刚编造的一个例子,在现实世界中可能不是真的。但如果你是一家提供异国目的地豪华游的公司,你可能会有兴趣得到这个人的联系电话。
在这种情况下,数据科学被广泛使用。公司正在使用数据科学来构建推荐引擎,预测用户行为,等等。只有当你有足够多的数据时,所有这一切才有可能,这样就可以对这些数据应用各种算法,给你更准确的结果。
数据科学中还有一种称为规范分析的东西,它做的预测与我们在上面的丰富旅游示例中讨论的几乎相同。但作为一个额外的好处,规定性分析还会告诉你一个人可能对哪种威尼斯豪华游感兴趣。例如,一个人可能希望乘坐头等舱,但三星级住宿就可以了,而另一个人可能准备乘坐经济舱,但肯定需要最豪华的住宿和文化体验。所以即使这两个人都是你的富有客户,他们也有不同的要求。所以你可以用规定性分析来解决这个问题。
你可能会想,嘿,这听起来很像人工智能。实际上,你并没有完全错。因为在巨大的数据集上运行这些机器学习算法也是数据科学的一部分。机器学习在数据科学中用于进行预测,也用于发现数据中的模式。这听起来又像是我们在给我们的系统增加智能。那一定是人工智能。对吗?让我们看看。
人工智能
人工智能,简称 AI,从 20 世纪 50 年代中期就已经出现了。不一定是新的。但是最近由于处理能力的提高,它变得非常流行。早在 1900 年代,就没有实现人工智能所必需的计算能力。今天,我们拥有世界上有史以来最快的计算机。算法实现有了很大的改进,我们可以在商用硬件上运行它们,甚至是你现在用来阅读的笔记本电脑或智能手机。鉴于人工智能看似无限的可能性,每个人都想分一杯羹。
但是人工智能到底是什么?人工智能是一种可以赋予计算机的能力,它使这些机器能够理解数据,从数据中学习,并根据隐藏在数据中的模式做出决策,或者做出人类很难(几乎不可能)人工做出的推断。人工智能还使机器能够根据新的输入来调整它们的“知识”,这些输入不是用于训练这些机器的数据的一部分。
定义人工智能的另一种方式是,它是一组数学算法,使计算机能够理解不同类型和不同数据之间的关系,从而可以利用这种联系知识来得出结论或做出非常准确的决定。
但有一件事你需要确定,你有足够的数据让 AI 学习。如果你有一个非常小的数据湖用来训练你的人工智能模型,预测或决策的准确性可能会很低。因此,数据越多,人工智能模型的训练就越好,结果就越准确。根据训练数据的大小,可以为模型选择各种算法。这是机器学习和深度学习开始出现的地方。
在人工智能的早期,神经网络风靡一时。全球有多组人致力于改善他们的神经网络。但正如我在帖子前面提到的,计算硬件的局限性阻碍了人工智能的发展。但从 20 世纪 80 年代末一直到 2010 年代,机器学习就是这样。每一家大型科技公司都在机器学习上投入巨资。谷歌、亚马逊、IBM、脸书等公司。实际上是在拖 AI 和 ML PhD。大学毕业的人。但如今,就连机器学习也退居二线了。现在都是深度学习。在过去的几十年里,人工智能确实有了发展,而且一年比一年好。你可以从下图中看到这一演变。
Source: SAS
机器学习
现在来说说机器学习。机器学习(ML)被认为是人工智能的一个子集。你甚至可以说 ML 是 AI 的一种实现。所以每当你想到 AI,你就能想到在那里应用 ML。顾名思义,ML 用于我们希望机器从我们给它的大量数据中学习的情况,然后将这些知识应用于流入系统的新数据。但是你可能会问,机器是如何学习的呢?
让机器学习有不同的方法。机器学习的不同方法是监督学习、非监督学习、半监督学习和强化机器学习。在其中一些方法中,用户告诉机器什么是特征或自变量(输入),什么是因变量(输出)。因此,机器学习提供给机器的数据中存在的自变量和因变量之间的关系。提供的这些数据称为训练集。并且一旦学习阶段或训练完成,机器或 ML 模型就在该模型以前没有遇到过的一段数据上被测试。这个新数据集称为测试数据集。您可以通过不同的方式在训练数据集和测试数据集之间分割现有数据集。一旦模型足够成熟,能够给出可靠且高精度的结果,该模型将被部署到生产设置中,在生产设置中,该模型将用于全新的数据集,以解决预测或分类等问题。
ML 中有各种算法可用于预测问题、分类问题、回归问题等等。您可能听说过简单线性回归、多项式回归、支持向量回归、决策树回归、随机森林回归、K 近邻等算法。这些是 ML 中使用的一些常见的回归和聚类算法。还有很多。即使在训练模型之前,也有许多数据准备或预处理步骤需要处理。但是像 SciKit Learn 这样的 ML 库已经发展得如此之快,以至于即使是一个没有任何数学或统计背景,甚至没有接受过正式人工智能教育的应用程序开发人员,也可以开始使用这些库在现实世界中构建、训练、测试、部署和使用 ML 模型。但是知道这些算法是如何工作的总是有帮助的,这样当你为你的问题陈述选择一个算法时,你可以做出明智的决定。有了这些关于 ML 的知识,我们现在来谈一谈深度学习。
深度学习
深度学习(DL)是 ML 的一个进步。尽管 ML 对于大多数应用程序来说是非常强大的,但是也有 ML 不尽如人意的地方。这就是深度学习介入的地方。一般认为,如果你的训练数据集相对小,你就用 ML。但是,如果你有大量的数据可以训练一个模型,如果数据有太多的特征,如果准确性非常重要(尽管准确性总是很重要),那么你会选择深度学习的路线。
还需要注意的是,深度学习需要强大得多的硬件来运行(主要使用 GPU),它需要明显更多的时间来训练你的模型,并且与 ML 相比,它通常更难实现。但是当你试图解决的问题非常复杂的时候,你不得不做出一些妥协。
你可能听说过 TensorFlow,这是一个谷歌正在广泛使用并推向开发者的神经网络。嗯,那就是使用深度学习,因为神经网络是一种深度学习模型。我们在过去几年中开始看到的自动驾驶汽车,它们是自动驾驶的,这要归功于深度学习。在现代世界中,深度学习有许多这样的应用,它们都在幕后。例如,网飞等娱乐服务公司正在广泛使用深度学习来改善他们对你的推荐,并根据用户参与度来决定哪些节目值得继续制作,哪些节目需要砍掉,因为它们浪费时间和金钱。
我们今天看到的大多数虚拟助手,如 Alexa 和谷歌助手,都使用深度学习来理解你正在发出的请求(自然语言处理——NLP)、语气、你正在表现的情绪,并在某些情况下认证你的声音。假新闻在今天是一件大事。许多公司因未能控制社交平台上的假新闻传播而遭到起诉。因此,许多这样的公司已经开始使用深度学习来检测在其平台上传播的假新闻,然后采取必要的行动。所以是的,深度学习在今天是一件大事。
关于我在这篇文章中提到的所有这些不同的技术,还有很多可以写的。这些课题是如此的广泛,以至于成千上万的人为了人类的进步而献身于研究和改进这些技术。还有另一群人认为,人工智能的发展正在将人类推向灭绝。不过话说回来,我们谁也没见过未来,时间旅行还是不算事。也许,在未来的某一天,会有一个足够强大和聪明的人工智能来设计时间旅行机器。
但是现在我们在这里,亲身体验人工智能的革命性发展,我觉得我们应该拥抱这项勇敢的新技术,并找出我们可以利用它让世界变得更美好的方法。有如此多的组织和私人公司在研究我们如何在医疗保健中使用人工智能来早期检测疾病并防止生命损失。有很多研究正在进行,以找出人工智能如何帮助癌症治疗。人们正试图发现新的药物,这可能会打开一个全新的治疗机会之窗。像医学成像这样的东西也是人工智能在很大程度上被使用的一个领域。因为人们正在使用具有 GPU 核心(深度学习)的人工智能进行医学成像,并且因为图像的分析也是使用人工智能完成的,所以我们看到在早期检测疾病、准确检测疾病以及及时采取措施避免威胁生命的疾病的过程中取得了一些巨大的进步。
金融行业正在大量使用人工智能来检测金融交易中的欺诈行为。随着 Keras 和 TensorFlow 的日益增长,我们看到了欺诈检测和防范方面的新功能。银行和金融机构能够研究数百万人的交易、银行历史和信用评分,以检测和防止贷款和保险欺诈的发生。在过去几年里,这对于节省数十亿美元至关重要。
由于人工智能和自动驾驶汽车技术的创新,由机器人驾驶的奢华未来正在成为现实。我还会继续说,在未来,我们将拥有现代智能手机大小的小型设备,你可以放在家里监测你的健康和身体的各种参数。我们已经有了这样的血糖和血压监测器,最新的 Apple Watch 甚至还有心电图阅读器。所以,是的,随着技术和智能设备的进步,一旦你开始向他们提供足够的健康数据,这些设备和服务将能够发现你的健康模式并预测未来,这反过来将帮助你尽早做出调整。
你觉得你清楚这些不同技术之间的区别吗?我还试图给出一些这些技术的各种应用的例子。希望有帮助。如果你打算进一步学习这些知识,并亲自尝试机器学习或深度学习,我已经在 Udemy 上策划了一个前五名 ML 和深度学习课程的列表。也许将来你可以报名成为一名数据科学家。
数据科学与商业智能:相同但完全不同
对你的第一个数据科学项目有什么期望?商业指南。第二部分
Image by analogicus from Pixabay
这是本系列的第 2 部分。参见第 1 部分此处
与大的科技公司不同,一般来说,企业只是刚刚涉足数据科学和人工智能。与早期采用一样,这并不容易——大多数项目没有超过概念验证阶段,从业务角度来看,这被认为是失败的。没有公布有多少数据科学项目失败的数字,但我敢肯定这甚至高于大数据项目 令人失望的 85%的数字 。
为什么故障率这么高?主要是因为数据科学是新生事物。它将新类型的协作、需求和文化引入到已建立的企业环境中。由这些新奇事物引起的复杂情况通常在开始时很难看到。但是当他们开始解开,他们经常在某些点上变得太困难。不幸的是,这些复杂因素通常不会在向企业销售人工智能和数据科学的各种营销宣传中列出。
商业智能是一个总括术语,描述了通过使用基于事实的支持系统来改进商业决策的概念和方法[1]。现代商业智能不仅仅是商业报告。这是一个成熟的系统,提供交互式仪表盘、假设规划、移动分析等。它还包括大型后端部件,用于维护对报告的控制和治理。
由于 BI 是一个总括术语,因此它可能因公司而异。对于一些公司来说,它可能只是所有支持基础架构的基本关键绩效指标(KPI)报告,其他公司可能使用基于统计模型和高级工具的高级预测方法。但是不管使用什么方法或工具,它们都根据业务利益相关者的需求为他们的决策提供事实。
但是嘿!数据科学不也是这样吗?是的,它是。
从业务流程的角度来看,数据科学和商业智能之间没有太大的区别,它们都支持基于数据事实的业务决策。可能这就是为什么在开始他们的第一个数据科学或人工智能项目的企业中,人们经常假设数据科学是同样的旧商业智能,但工作得更聪明。根据这一假设,可以在现有 BI 基础架构和流程的基础上开展数据科学项目。
这就是问题开始的时候:结果是一个数据科学家想要将数据以 CSV 文件的形式从系统中取出,但是公司的安全政策不允许这样做;数据科学家正在使用奇怪的库和软件构建他们的模型,基础设施团队在生产中不支持这些库和软件,等等。
任何公司的任何第一个数据科学项目都会从一开始就对现有团队产生新的挑战性需求。怎么会这样如果数据科学和 BI 做的一样,为什么会发生这种情况?为什么那些奇怪的要求?
在现实中,商业智能和数据科学之间的差异是如此之大,以至于它使一切都变得不同:期望、项目方法、相关人员等。但是人们必须从不同的角度去看它。
不同之处在于它们解决的问题类型:BI 使用一些可用的公式,为以前已知的事物提供新的价值。数据科学与未知事物打交道(见本系列第一部分),回答以前没有人回答过的数据问题,因此没有现成的公式。
在商业智能中,商业智能开发人员带着一个公式或方法来计算商业智能拥有的报告或 KPI。这意味着企业已经设计了 BI 方法,并且他们理解并乐于使用它。
在数据科学中,情况完全不同:业务带来的是实际数据和一些以前从未回答过的问题。现在由数据科学家来测试多种方法并选择最佳方法,在准确性、简单性、可用性和生产平台的功能之间进行平衡。一旦选择了模型并与业务部门达成一致,它就成为了回答问题的已知方法,成为了数据分析而非数据科学的主题。
您可能会注意到,上述关于 BI 的陈述是有争议的——它没有处理完全已知的事物——它可能有一个公式或方法,但它计算未知的 KPI 值,甚至使用批准的方法进行预测。为了解释这种双重性,我使用了一个很好的已知未知和未知未知的概念,这是由美国国防部长唐纳德·拉姆斯菲尔德在 2002 年关于缺乏证据证明伊拉克政府向恐怖分子提供大规模杀伤性武器的著名回答中推广的。
使用这一概念,我现在可以更简短地表述差异:
BI 处理已知的未知,而
数据科学处理未知的未知。
这是他们之间最大最根本的区别。起初,这似乎是一种纯粹的形式主义,专注于一个不那么重要的差异,但一旦你开始考虑后果,它就会改变。
首先,处理未知的未知,数据科学不能保证项目一开始就成功,预测解决方案会是什么样子以及实施起来有多困难。这意味着建立一个商业案例和计划一个项目要困难得多。如果你继续解开这些暗示,你可能会得出这样的东西:
所有这些差异实际上都源于这一区别,而这一区别起初似乎并不显著。事实上,当从一开始就不知道解决方案时,数据科学家会使用试错法。在这种情况下,明智的做法是使用允许快速转变想法的工具和方法,这样每个新的试验都不需要太多的准备时间:如果需要,新数据应该随时可用,实现下一个试验方法的新软件和库应该易于安装和下载,基础设施必须准备好支持新软件或框架,等等。
这就是为什么典型的数据科学家的工具箱和实践都是为灵活性和敏捷性而构建的。编程语言、开源库、微服务、容器、API 和 extreme agile 都在帮助数据科学家快速浏览想法并找到解决方案。
然而,所有这些工具在开放、敏捷和流动的环境中工作得最好,在这样的环境中,这些工具的使用不受某些外部因素的限制。这种环境通常可以在科技公司和初创企业中找到。
典型的企业环境非常不同——它是为控制和可靠性而构建的,通过严格的流程规则、共同责任、多级决策等来实现。
Photo by Joshua Hoehne on Unsplash
这意味着,大多数大型非科技公司的 IT 系统都受到严格监管,实施变革的速度很慢。这些公司中的任何数据科学项目都将面临多个令人分心的障碍:从业务系统中获取数据进行分析的漫长过程,由于当前的 IT 架构不支持容器和微服务,无法实施解决方案,等等。
维护企业系统的人也有非常不同的优先级和思维模式。他们不一定会对更改系统或添加新系统感到兴奋,他们可能会在签署对公司数据的访问权限时担心安全合规性,等等。企业终端用户可能也不会对将人工智能或数据科学引入他们的角色感到非常兴奋。他们可能会担心缺乏新领域的知识,或者担心自己工作的安全性,因为他们从媒体那里获得了对人工智能威胁的错误认知。
然而,所有这些人对于任何数据科学项目都是至关重要的。项目领导人和发起人必须考虑这些问题,以避免“文化冲突”,这可能会毁了任何项目。
项目负责人必须为数据科学家提供强有力的支持,否则他们会发现自己在充满敌意的过度监管环境中处于劣势。他们还必须传达为什么公司需要数据科学项目,并向人们保证这不会影响他们的工作安全。如果需要的话,项目发起人还需要能够在公司结构的所有层次上快速推动异常请求。
相比之下,商业智能已经是一个典型的企业景观的一部分,BI 项目基本上没有这些问题。BI 功能通常由已经整合到 IT 架构和流程中的单个或极少数平台提供。商业用户对它非常熟悉和自信。BI 项目将处理已知的未知,这意味着有一种方法可以找到这些未知,因此项目可以提前做好计划。BI 中没有太多的试错。最重要的是,一家公司通常会有成功的 BI 项目的良好经验和跟踪记录,并拥有良好的项目专业知识。
摘要
从业务角度来看,数据科学和商业智能在业务流程中扮演着相同的角色,它们都提供基于事实的见解来支持业务决策。但从另一个角度来看,它们是根本不同的,这使得一切都不同:期望、方法、使用的工具等。
区别在于他们处理的问题类型:BI 处理已知的未知问题,即使用已知的公式计算已知 KPI 的新值,而数据科学处理未知的未知问题,回答以前没有人回答过的数据问题。定义上的这一点点差异意义重大。在没有给出公式或方法的情况下,数据科学家使用试错法。在这种情况下,一般来说,数据科学无法在项目开始前保证成功,它无法预测找到解决方案需要多少步骤以及解决方案会是什么样子。
为了尽快找到解决方案,数据科学采用了针对速度优化的工具和方法:编程语言、库、Docker 容器、微服务架构等。这与典型的企业环境非常不同,在企业环境中,It 系统是为了控制和可靠性而构建的。仅这一点差异就给老牌公司的第一批数据科学项目带来了许多困难。
但这还不是全部!还有一个问题潜伏在眼前——使用 机器学习 。对于以设计和维护业务规则为己任的业务分析师来说,将 ML 引入业务环境可能是一个巨大的文化冲击。对于使用机器学习的解决方案,将不再需要这些规则!谁会喜欢这样的改变呢?在接下来的简短部分,我将触及机器学习给现有企业文化带来的结构性转变。
参考资料:
[1] D. J. Power,《决策支持系统简史》,4.0 版。(2007 年 3 月 10 日),DSSResources.COM。
数据科学什么?
到底是什么?这是为了什么?
Photo by drmakete lab on Unsplash
让我们把重点放在它的实用性上。
已经有很多关于数据科学的文章,但更多的是在技术方面,即“极客的东西”(我个人很喜欢),但没有多少文章从更受业务驱动的角度,讲述这种称为数据科学的专业领域的美丽融合的优势和实际影响。
我想提出一些论据来支持我的观点,即它是我们这个时代的一个关键部门、术语、专业领域(随便你怎么说)。它是如此广泛,以至于几乎每个与数据打交道的人都可以成为数据科学家(纯粹主义者、“pythonists”和“数据主义者”——暂时不要生我的气)。
除了深入细节、过于科学或教条之外,我将专注于数据科学的实际应用,它如何适应产品开发流程,以及我们如何从数据科学家(及相关人员)开展的大量活动中提取价值。
此外,我想写一下数据驱动和数据知情决策的概念,因为仍然不可能将我们所知的世界和人转化为数据库(还不行)——这让数据驱动方法的倡导者感到失望。
这一切是如何开始的?
Photo by Tanner Mardis on Unsplash
2008 年,领英和脸书的分析和数据主管 DJ Patil 博士和 Jeff Hammerbacher 创造了“数据科学”一词来描述新兴的研究领域,该领域专注于挖掘从零售和商业领域的接触点收集的数据中的隐藏价值。数据科学现在是一个总括术语,用于涵盖编程、统计、数据挖掘、机器学习、分析、商业智能、数据可视化和许多其他学科领域。科学是不断变化和发展的,因为它与技术和商业实践保持同步。
就像人类开始了解和接触的所有东西一样,人们有一种诱惑,那就是把它装进一个方形的盒子里,整理它,把它缩小到尽可能小的部分。
我们有一种趋势,也需要准确地定义和理解一切,以便我们能够在没有任何合理怀疑的情况下解释它(除了向世界宣扬我们所知的目标,以便我们可以被视为虚拟自我暴露时代的专家)。
然而,在数据科学的情况下,这仍然是不可能的。作为“到底什么是数据科学?”这个问题的答案,这是一个很难讨论的话题,很难找到共识没那么简单。然而,我会说…让它成长吧!让它扩展并证明它对我们在信息社会的未来是必不可少的。这是一个包含计算机科学、商业和数学的广阔、有影响力、包容、整体和美丽的领域,没有任何问题。
这一领域的大多数知识渊博的人都会同意,数据科学是一门科学和寻求真理的学科,它使用数据来提取知识和见解。数据科学是发展最快的功能之一,已经为各个行业和研究领域提供了巨大的价值。尽管如此,数据科学仍处于起步阶段,就像任何发展中的领域一样,给它的定义划定界限通常是很诱人的。我们认为,最重要的是为学科的有机发展留出空间,而不是对什么算数据科学或不算数据科学进行分类,或者争论为什么我们应该了解数据而不是数据驱动。
(通常,人们会在这里放一个维恩图,但我不会这样做。你可以从数百种已经生产的产品中选择一种,例如这里
Photo by Jacek Dylag on Unsplash
为什么数据科学很重要?
简答
因为我们的数字世界越来越复杂。
长答案 数字。网站。互联网。平台。很多。5G。生态系统。以及其他像这样的“单词”。
越来越多,这些世界在我们的日常生活中飞来飞去,好像我们在谈论水、面包或任何其他基本需求。我打赌你今天至少听过一次这样的话。除此之外,越来越多的产品、越来越多的互联网连接设备以及我们对“始终保持连接”的渴望的爆炸性组合,导致了用户生成数据的惊人增长,其中许多数据都与我们与数字系统的交互有关。例如,阅读这篇文章,我会看到你(某人)今天花了 x 分钟阅读这篇文章。因此,也因为我们是好奇的动物,人们对挖掘这些数据产生了极大的兴趣,以提取关键的见解,并希望构建更好的创新产品。智能手表就是一个明显的例子,这就引出了我的另一部分。
为什么数据科学家有这样的需求?
仅仅是因为它们(我的意思是,主要是数据)对产品创新、客户理解(包括购买过程)以及随后通过产品/销售增长带来的收入增长的预期价值。总是能实现吗?首先,这取决于你在寻找什么。
为了在竞争激烈的 accelerate 市场中获得、重新获得或保持竞争优势,公司的战略越来越基于他们如何从大量结构化和非结构化数据中收集、分析和提取见解(大数据分析在这里发挥着重要作用)—公司在这方面的能力可能是推动产品创新的巨大源泉。这就是为什么数据科学家、数据工程师、数据分析师等人才需求量大的原因,我认为这对我们的经济有好处。一个专业数据科学家团队可以在几乎每个行业对公司的未来产生巨大影响。
除了时髦的词语,就数据和产品开发的见解而言,以下是数据科学带给每个企业的一些例子:
预测和描述数据模型
也许,数据科学家最常见的角色是使用机器学习算法,利用之前经过预处理的可用数据来构建模型(即原型),或者实施数据挖掘模型,以更好地对数据进行分类,从而识别其中的模式。这些数据用于训练特定现象的机器学习模型(早期机器人),以预测未来趋势。这不是巫术,而是基于过去的数据和众所周知的统计模型。这不是天马行空的科学。深入到描述性分析模型,数据科学家可以对用户旅程进行更深入的探索和分析,以产生可操作的见解,最终为产品设定路线图和战略(例如,实施针对特定新客户群的全新金融产品)。正如你所看到的,公司可以从顶尖的产品分析专家那里获益良多。
构建正确的产品版本
许多公司在评估了所有可能的选项和试验的结果后,进行实验并交付产品。通常情况下,数据科学家会帮助设计正确的分析,以测试正确的功能,识别基于数据的现象假设,并使用收集的数据见解通过不断的反馈来指导产品团队。因此,这一数据科学家活动是一个重要的分析角色,可确保正确的产品以正确的功能进入市场。
你的生意健康吗?
数据科学家有能力访问企业健康状况。这项活动非常简单,因为业务成果就是数据。所以不需要想办法从复杂的来源获取数据。通常,数据已经在公司的信息系统中,可能在数据仓库或数据湖中。我认为,与上面的其他两项活动相比,评估一个产品或一个企业的健康状况相当“简单”。这通常是通过首先利用可测量的指标来定义产品成功来完成的。这些指标受到持续的监控,以确保公司有望实现目标。然而,由于世界并不完美(幸运的是),总会有异常值(“奇怪的”数据点),有经验的分析师将重点了解这些异常值背后的驱动因素、原因和可能的业务后果,通常采用数据可视化仪表板和报告。
Photo by Lukas Blazek on Unsplash
不是一种而是两种类型的数据科学家
数据科学的卖点是,它有助于构建下一代算法来改善决策(主要是在商业环境中),最重要的是,改善我们理解周围世界的方式(如果我们谈论社会和我们可以收集的关于自己的所有数据)。因此,数据科学专业人员分为两大类,一般来说:产品分析师和算法开发人员。
有些人会认为我们可以更好地区分专家和通才,但这两种分化类型并不相互排斥。然而,我们应该记住,数据科学家角色(以及相关角色)在其职业生涯中可能有多种形式,并且可能授予各种职能,这些职能在不同的公司和行业中可能会有显著或轻微的差异。毕竟,数据就是数据,但真正的数据科学家应该能够快速捕捉到她/他所工作的行业和业务的真正本质,这样,她/他在工作中脱颖而出的机会就会大得多。
一方面,产品分析师的角色是提供尽可能多的基于数据的分析。让我们想象一下,一个数据科学团队揭示了特定金融子产品购买量突然增长背后的原因。基于数据的决策将是根据该分析和特定原因采取行动,并引导投资组合策略的变化,而不是仅仅因为发现了趋势就调整整个银行金融服务投资组合。数据是有价值的输入,但不是做出决策时考虑的唯一因素。数据科学家的职责是利用手头的工具,更深入地分析问题/目标,从而能够为决策者提供尽可能好的信息。话虽如此,产品分析师有责任设定目标,并帮助定义产品路线和策略。专注于产品分析的 data scientist 的交付成果是一份解释可量化问题和识别机会的报告,以及基于数据的建议和解决方案。
另一方面,算法开发人员有责任将数据驱动的特性整合到产品中。两个简单易懂的例子是在 Google Photos 中引入面部检测算法,它可以检测照片中谁和你在一起,以及伟大的网飞推荐系统,它可以向用户显示他/她非常确定想要观看的电影/连续剧。这些专注于开发和升级算法的数据科学家利用数据来提高产品性能,以追求特定的最终目标,通常是预测结果。算法开发人员通常使用机器学习和其他复杂的算法技术,根据来自大量数据的输入进行预测。一般来说,算法开发人员会对提出的解决方案进行原型设计,并与工程团队密切合作,以在生产中实现它们。算法开发人员的可交付成果是提供给工程团队的原型代码和文档。
这两种类型的数据科学家都需要分析观点、定量技能和区分优先顺序的能力。虽然算法开发人员需要更复杂的技术知识和更接近工程师的软件工程技能水平,但产品分析师主要是问题解决者,他们基于业务、产品和与各种利益相关者有效沟通的能力而与众不同。由于算法开发人员技能的特殊性,他们可能不是一个组织所需要的。然而,所有公司,尤其是那些拥有大量用户的公司,都可以从团队中拥有产品分析师中受益匪浅,帮助整个组织解决产品战略和其他与数据相关的业务挑战。
数据驱动和数据通知的前景如何?
Photo by Franki Chamaki on Unsplash
想象一个世界,机器知道你的一切,比你自己知道的还多。它甚至可以根据你目前的维生素和营养素缺乏情况,知道你晚餐需要吃什么。用它对你的食物偏好的了解来总结这个,它实际上可以为你做饭。它还可以提前为你购物,并为你安排一周的用餐时间。它甚至可以知道你需要学习什么来实现你的职业目标,并为你推荐世界上最好的课程。最终,它知道你的选择并能为你做决定,知道什么对你是正确的,并计划你的生活。吓人?完美?也许吧。如果我们变成纯粹的数据驱动,如果我们允许人工智能接管我们生活中的大部分决策,这将是可能的。
在一个完美的世界里,有着完美的信息,并且完全了解你的系统的所有驱动因素以及它们如何相互作用,这两种方法将会融合。为了建立一个完美的模型,数据科学家需要很好地理解这种现象;数据和事件之间的关系可以用一个理想的模型来描述(以及一系列相关的特征)。为了将模型发展到这种完美的水平,我们需要继续通过其他主观措施来增强我们的决策,这些主观措施还不容易完全量化——因此,需要基于数据的决策。人类还有一句话要说。
智慧甚至难以用语言来表达。世界还不能变成完整的数据。随着人类开始对我们与物体的关系有更深入的感知,越来越多的过程将被自动化,未来将更加纯粹地由数据驱动。尽管如此,在未来几十年,基于数据的决策仍将极其重要,而基于数据的决策只会随着基于数据的人的进步而改进。
那么…你是数据驱动的吗?停下来。暂时如此。
这里就是人+机器出现的地方。
几年前,一项研究显示,在特定的国家和特定的月份,溺水人数的增加与同一个国家和月份冰淇淋消费量的增加之间存在着奇怪的巧合。研究人员试图找出这种强烈相关性的原因。然后,考虑了几个假设,从“这仅仅是一个巧合”到乍看起来可能合理的“人们去海滩时不应该吃冰淇淋”。
事实证明,下面的假设很快就被抛弃了。研究人员得出结论,实际上还有另一个事件导致了这两个事件的增加:是夏天经常性的炎热天气导致人们去海滩和吃更多的冰淇淋。这两件事并不相互依赖。事实上,它们是前者的结果。
这个故事很好地说明了一个众所周知的问题:因果关系和相关性不是一回事,如果思维模式完全由数据驱动,在数据分析活动中对这两个概念的误解可能会导致错误的结论和后续行动。例如,当两个变量(事件,在这种情况下,溺水人数和冰淇淋消费量)在同一时期显示出相同的统计趋势时,就是相关性,而因果关系则表明一个事件是另一个事件发生的结果。如果你想嘲笑其他一些例子,可以看看这些文章:第条 1、第条 2 和第条 3。
这对我们所有人都有意义,不是吗?当然,这是因为我们使用我们的智慧——我们一生中获得的关于世界的知识,在这里起着重要的作用。否则,如果在这种情况下必须纯粹由数据驱动决策(考虑到天气数据在分析中被低估),我们会看到政府机构错误地制定立法以避免更多的溺水死亡。
我们人类的智慧还不容易整合成完整的数据。
这是一个相当简单的例子,通常用于教授因果关系和相关性之间的区别,它很好地说明了人类需要依赖数据来做决策,但不要太依赖数据,不要纯粹由数据驱动,否则我们会犯很多错误。
在提高生产力和运营效率的背景下,生产系统就是一个很好的例子,说明了区分需要更多数据信息和简单数据驱动的决策流程的情况有多重要。对于像 James Finance 或 Feedzai 这样的公司来说,计算信用风险或识别任何交易的欺诈活动,对所有交易进行手动操作的成本高得惊人。
这个问题应用的另一个明显例子是在医学中,人工智能驱动的诊断和预后方法正在被使用。
因此,他们主要依赖数据科学和机器学习模型来增强他们的运营系统,并自动化所有必要的计算以达到他们的主要目标,要么计算最准确的信用风险,要么检测欺诈性的银行交易。
虽然在对结果统计相关性的信心水平较低的情况下,这些任务和决策制定中的大部分很可能是自动化的,但是决策过程并不纯粹是数据驱动的,而是经常是基于数据的。关于这个话题的一个很酷的故事在这里。
Photo by 2Photo Pots on Unsplash
世界将继续变得越来越由数据驱动;这就是为什么基于数据的决策会更有意义。所以,拥抱数据和数据科学。
它没有伤害,它很有趣,你将帮助社会实现它的目标。我预见,在数字信息时代,你对数据了解得越多,对数据流程组织得越好,你就能获得、保持或利用你的竞争优势。**从长远来看,你所有的利益相关者都会满意,首先是你最大的资产:你的员工。**数据科学在许多方面对任何企业都具有战略意义。
希望您更加了解数据科学在商业环境和整个社会中的重要作用。事实上,数据科学不仅可以应用于商业决策,还可以应用于广泛的垂直领域,包括生物统计学、天文学、分子生物学(不仅适用于银行、保险和零售等常见领域)。无论你在哪里找到大量的信息,你都会找到数据科学的应用。在我的下一篇文章中,我将关注数据科学对社会影响组织和公共机构的巨大潜在影响。这将引导我讨论一些数据科学驱动的倡议在非营利组织中发挥的关键作用,如数据科学促进社会公益和数据种类。
没有数据的数据科学
构建不访问数据集的 AI/ML 模型
在本文中,我们将演示如何生成数据集来构建机器学习模型。根据这个数据,医疗保险欺诈和滥用每年花费纳税人 600 亿美元。AI/ML 可以极大地帮助识别和防止欺诈和滥用,但由于隐私在医疗患者数据中至关重要,因此访问这些数据极其困难。这使得数据科学家无法生成可能对该领域产生积极影响的模型。有没有一种方法可以在不访问底层数据的情况下设计和开发模型?是的,你可以使用真实的随机生成的数据生成一个原型。具体来说,我们将建立一个自动生成的医疗保险数据集,并使用它来识别潜在的欺诈索赔。这些是我们将遵循的高级步骤:
- 生成患者数据集以开发模型预测。
- 预处理数据集以输入到模型中。
- 使用 K-最近邻算法训练模型以预测成本。
- 为了进行推断,我们将输入新的患者数据,并将实际成本与预测成本进行比较。如果差额超过阈值,我们会将其标记为潜在欺诈。
数据集
对于这个项目,我们将在 Jupyter 中使用 Python。完整的代码将发布在 Github 上。我们的数据集包含病人的人口统计信息以及他们的医疗费用。这些字段是:
其中:
- 年龄-1 到 100 之间的随机值
- 吸烟者——随机 0 或 1,调整为 30%的人口是吸烟者
- 性别—随机 0 或 1 (1 为女性)
- 身体质量指数—介于 5 和 45 之间的随机整数
- 糖尿病患者——随机调整 0 或 1,使 20%的人口患有糖尿病
- 成本=当年医疗费用。我使用的平均值是 9596 美元
成本是根据其他字段计算的。下面是创建患者数据的代码。
下一步是根据输入数据计算合理的成本。基本上,我们将为每个变量设定一个乘数,并将其应用于均值保险。对于年龄,我想使用如下所示的函数:
这种观点认为,儿童的健康成本在他们成年之前一直较高,然后随着年龄的增长又开始增加。在我看来,这是一个合理的分布,但整个过程的美妙之处在于,你可以调整公式,使之适合你。
其他字段很简单:
- 从上面的公式乘以年龄开始
- 将吸烟者的平均值增加 100%
- 为女性增加 25%的平均值(当我向我的同事展示这份草案时,这引起了争议。我用的数字来自这里。)
- 对于每一质量百分比,各添加 1%
- 将糖尿病患者的平均值增加 75%
我必须再次强调,所有这些值都可以调整到对你有意义的程度。我肯定不是医学领域的专家,但这些似乎只是一个很好的起点。稍后调整计算并生成新数据非常容易。最后一步是将计算出的成本作为正态分布的输入,在结果中引入方差。这里的想法只是为了获得一些我们可以在设计模型时利用的数据。下面是为数据集创建一行的代码。
此时,您可以调用 add_row 为您的数据集获取尽可能多的数据行。就是这样!现在您已经有了一些样本数据,可以用来开发模型原型。
预处理数据集以输入到模型中
下一步是将数据预处理成适合机器学习模型的形式。此流程的步骤如下:
- 将数据可视化,以确保它看起来合理。
- 将连续数据放入桶中。
- 将数据字段转换为一个热编码列。
可视化数据
在这里,我们希望确保我们生成的数据集看起来像我们期望的那样。我感兴趣的第一个字段是年龄字段,所以我绘制了它,以确保它与我上面显示的图表相对匹配。
它看起来非常接近我所期待的。随着我对数据和模型的了解越来越多,我可以随时回头修改公式来改进它。
将连续数据放入桶中
我们有两个字段,我称之为连续数据(即,它们不是布尔或分类)。这些字段是年龄和身体质量指数。年龄可以包含多达 100 个唯一值,身体质量指数可以有 40 个唯一值。这对于我们的模型来说可能变得难以处理,所以我们将它们分类到桶中。对于年龄和身体质量指数,我们将它们放入五个桶中。
现在让我们再次可视化数据,并确保一切看起来像预期的那样。
看起来相当不错,所以让我们进行下一步。
将数据字段转换为一个热编码列
如你所见,年龄组和身体质量指数组与糖尿病患者、吸烟者和性别的比例不同。例如,年龄组在 0 和 4 之间,而糖尿病患者在 0 和 1 之间。有很多方法可以解决这个问题,对于这个问题,我将使用一种叫做 **one-hot 编码的技术。**我们的想法是将 Age_group 列透视为包含零的五列,除了包含年龄组的列。例如,如果 Age_group ==2,则列的值将为 0,0,1,0,0。幸运的是,Python 有一个内置函数可以为我们完成这种转换。
运行上述代码后,我们的数据集看起来是这样的:
现在所有的输入字段都包含值 0 或 1。我们终于准备好开始建立一个基于数据的模型。
在此之前,我想说明两点。首先,我没有向这个模型添加任何空值检查或数据类型检查。当您开始处理“真正的”数据时,您会希望这样做。第二,您可能想知道为什么我首先要经历所有这些数据处理(也就是说,为什么我不生成一个看起来像完整过程的数据集。答案是,我想生成一个数据集,它看起来像是我可能从真实来源获得的。找到已经分桶和编码的数据集的可能性非常小。
训练模特
训练模型的第一步是将我们的数据分成训练集和测试集。我们将在训练集上训练模型,然后通过呈现模型没有看到的数据并将预测结果与实际结果进行比较来测试它。这被称为误差,,这是我们在训练模型时想要最小化的。在本教程中,计算误差的方法称为均方根误差,但您可以使用许多函数来计算。下面是分割数据的代码(在这种情况下,我们将 70%用于训练,30%用于测试)。
现在我们有了可用格式的数据,我们可以构建和训练一个模型来预测结果。在这个练习中,我们将使用K-最近邻模型。Python 支持我们可以利用的许多不同的模型,但是我觉得这是数据科学中最直观的模型。它是这样工作的:
假设我们有一个如下所示的数据集(X1 和 X2 是输入要素,而 Y 是结果值)。
现在,让我们绘制这些数据,看看它看起来像什么:
这样,我们可以通过对 K 个最近邻点的 Y 值进行平均来预测图上新点的 Y 值。对于这个例子,我们将设置 K = 4。红点将是我们新的输入点。
由于在本例中 K == 4,我们将取最接近新值的 4 个点的平均 Y 值,并用它来预测新点的 Y 值。在这种情况下,我们将使用突出显示的行:
对于我们的新点,Y 值的估计值是 60.5。
Python 的 sklearn 库有一个我们将利用的 K 近邻内置函数。唯一的诀窍是我们应该把 K 设为什么值?最简单的技术是用多个 K 值运行模型,并记录每个值的误差。我们可以利用这一点找到最佳的精确度。下面是实现这一点的代码:
运行上述代码后,我们可以绘制与 K 相关的错误率:
为了确定 K 的最佳值,我们将利用**肘方法。**图表的 Y 轴是误差值。X 轴是 K 值。查看图表,似乎 55 左右是 k 的最佳值。然而,“拐点”出现在 10 左右。之后,你的成绩开始变平,甚至变得更差。对于本教程,我将分裂的差异,并使用 K = 20。
对于这个模型和数据集,我们可以预测一个病人的医疗保健成本在 2400 美元以内(我们生成的数据的平均值约为 11,000 美元)。这不是很好,但是我们可以对我们的模型和数据生成进行许多改进。但是,它仍然有助于识别潜在的欺诈性索赔,这是我们接下来要做的。
识别欺诈索赔
现在,让我们看看我们是否能够识别一些欺诈性索赔。为此,我生成了 100 行新数据。这个项目的想法是,一名医生对保险索赔收取双倍费用。因此,90 行按原样使用 add_rows 函数,并将名为“欺诈”的标志设置为零。然后,我添加了 10 行,但我将成本增加了一倍,并将“欺诈”标志设置为 1。这是这个新数据集的图表。
绿点代表欺诈性索赔,而蓝点代表合法索赔。看起来我们有五个异常值需要调查。这种情况下,恰好都是诈骗。其他五个异常值隐藏在非欺诈声明中。发现 50%的欺诈性索赔似乎很不错,但我们能做得更好吗?
对于这个算法,我们将通过我们的模型运行所有 100 个索赔,并将实际成本除以预测成本(我将这个计算结果称为“错误”),并寻找异常值。下面是显示结果的图表:
在这张图表中,我们看到我们在识别异常值方面做得非常好。这是一个非常好的结果,有助于简化识别欺诈的流程。
结论
首先,我要感谢这篇文章,它介绍了使用 KNN 进行回归的过程。其次,我需要在这里澄清一下,让您知道我不是数学家,而且我相对来说是 Python 的新手,所以我很乐意得到您的反馈,告诉我如何在这两个方面改进代码。第三,代码已经发布在 GitHub 上,请随意在您的项目中使用它,并让我知道您的想法。
没有数学的数据科学
使用人工智能建立数学数据集
这是我的上一篇文章的附录,在文章的最后我必须补充一点,我不是数学家,而且我是 Python 新手。我添加这个是因为我努力想出一个数学公式来生成患者数据,这些数据将遵循对我有意义的趋势。本文的目标是生成 10,000 份将年龄与成本相关联的患者记录。我希望这种关联遵循如下模式:
Artists rendition of correlation pattern (not exact)
Y 轴是成本乘数;X 轴是年龄。这里的想法是,病人的费用开始时相对较高,随着他们接近某个年龄而降低,然后又开始增加。经过多次反复试验,我想出了一个公式,它可以生成一个类似这样的图形:
你可以明显看出这个公式有一些瑕疵。最明显的一点是,这意味着一旦病人到了 60 岁,费用就会稳定下来。在我想使用的相关性中,成本随着年龄的增长而不断增加。为了完成这篇文章,我觉得这已经足够了,我已经准备好开始编写实际的代码了。
在我发表文章后的几天里,我继续试图想出一个遵循我的相关性模式的公式,但没有成功。然后有一天我恍然大悟:为什么不让计算机算出公式。如果我能成功实现这一点,我就可以集中精力提高我的 Python 知识(这是我的首要目标),而不是找出一个数学公式。让我们使用机器学习来生成一个公式的近似值,我希望使用一些值作为输入。一旦我们训练了一个模型,我们就可以生成一个完整的样本数据集,输入到机器学习模型中。
第一步是设置一些值来训练我们的模型:
现在,如果我们绘制这个,你可以看到它大致遵循我在上面画的图:
我们现在可以使用这些数据作为神经网络的输入来建立一个模型,我们可以训练这个模型来预测我们进入的任何年龄:
from sklearn.neural_network import MLPRegressor
regr=MLPRegressor(hidden_layer_sizes=(30),
activation='tanh',
solver='lbfgs',
max_iter=20000)
model=regr.fit(np.array(age_df['Age']).reshape(-1,1),Age_df['Cost'])
MLPRegresser 中的 MLP 代表多层感知器,这是一种神经网络,是 sklearn Python 库的一部分。sklearn 库内置了许多回归器,使用它们来为您的应用程序找到最佳结果非常容易。所有回归变量都有一个拟合函数,用给定的输入来训练模型。
现在我们的模型已经训练好了,让我们生成一个测试数据集来看看我们的模型表现如何。
df = pd.DataFrame( {'Age': np.arange(0,100), 'Cost': model.predict(np.arange(0,100).reshape(-1, 1))})
在这种情况下,我们生成一个数据帧,其中包含 0 到 100 岁之间的每个年龄的一行,以及我们的模型为该年龄预测的成本。绘制结果给我们提供了:
这看起来更像我在文章顶部画的图。然而,我们不希望我们的模型预测一个时代的确切成本乘数。相反,我们希望使用预测作为基线来预测随机值。在这种情况下,我们将调整数据,使成本在预测的 20%以内。下面是在 Python 中如何做到这一点:
df['Cost'] = [i + i * random.uniform(-0.2, 0.2) for i in df['Cost']]
现在,如果我们绘制数据集,它看起来像这样:
现在,我们已经生成了 100 个值,大致符合文章顶部的图形。让我们使用这个模型生成一个 10,000 行的数据集。
df2 = pd.DataFrame( {'Age': (np.random.random_sample((10000,))*100).astype(int)})
df2['Cost'] = model.predict(np.array(df2['Age']).reshape(-1, 1))
这是这 10,000 个年龄/成本值的散点图,正如我们可以看到的,它仍然大致遵循文章顶部的绘图。
现在,我们将向数据集添加一些随机性,看看它看起来像什么:
df2['Cost'] = [i + i * random.uniform(-0.2, 0.2) for i in df2['Cost']]
我们现在可以将此作为数据集的一部分,使用年龄作为输入之一来预测医疗保健成本。这个概念可以有效地用来扩充 Kaggle 上的数据集,该数据集包含有价值的趋势,但只包含 1338 行。使用这种技术,我们可以生成我们想要输入到模型中的任意多的行。
擎天柱的数据科学。第 1 部分:简介。
第二部。
用 Python、Spark 和 Optimus 分解数据科学。你可以在这里阅读第二部《T4》。
Illustration by Héizel Vázquez
数据科学已经达到了新的复杂程度,当然也令人惊叹。我已经做了很多年了,我希望人们有一条清晰简单的道路来完成他们的工作。
我已经谈论数据科学和更多东西有一段时间了,但是是时候让我们一起动手编写代码了。
这是关于 Optimus、Spark 和 Python 的数据科学系列文章的开始。
擎天柱是什么?
https://github.com/ironmussa/Optimus
如果你关注我有一段时间了,你会知道我和铁-AI 团队创建了一个名为擎天柱的库。
擎天柱 V2 的诞生是为了让数据清理变得轻而易举。这个 API 被设计成对于新来的人来说非常简单,对于和熊猫一起工作的人来说也非常熟悉。Optimus 扩展了 Spark 数据帧的功能,增加了.rows
和.cols
属性。
使用 Optimus,您可以清理数据、准备数据、分析数据、创建剖面图和绘图,以及执行机器学习和深度学习,所有这些都以分布式方式进行,因为在后端,我们有 Spark、TensorFlow、Sparkling Water 和 Keras。
超级好用。就像熊猫的进化,有一块 dplyr,加入了 Keras 和 Spark。您用 Optimus 创建的代码可以在您的本地机器上运行,并且只需简单地更换主机,它就可以在您的本地集群或云中运行。
您将看到许多有趣的函数被创建来帮助数据科学周期的每一步。
Optimus 是数据科学敏捷方法的完美伴侣,因为它可以在过程的几乎所有步骤中帮助您,并且它可以轻松地连接到其他库和工具。
如果你想了解更多关于敏捷数据挖掘方法的信息,请查看:
数据科学是一个令人惊叹的研究领域,学术界和工业界都在积极发展…
www .商业科学. io](http://www.business-science.io/business/2018/08/21/agile-business-science-problem-framework.html)
安装擎天柱
安装过程非常简单。只需运行命令:
pip install optimuspyspark
你已经准备好摇滚了。
运行 Optimus(以及 Spark,Python 等。)
创建数据科学环境应该很容易。无论是尝试还是生产。当我开始思考这一系列文章时,我震惊地发现用免费工具为数据科学准备一个可再现的环境是多么困难。
一些参赛者是:
编辑描述
colab.research.google.com](https://colab.research.google.com/) [## 微软 Azure 笔记本-在线 Jupyter 笔记本
提供对运行在微软 Azure 云上的 Jupyter 笔记本的免费在线访问。
notebooks.azure.com](https://notebooks.azure.com/) [## 主页- cnvrg
编辑描述
cnvrg.io](https://cnvrg.io/)
但毫无疑问,我的赢家是 MatrixDS:
编辑描述
matrixds.com](https://matrixds.com/)
有了这个工具,你就有了一个免费的 Python(用 JupyterLab)和 R(用 R Studio)环境,还有像 Shiny 和 Bokeh 这样的演示工具,等等。而且免费。您将能够运行回购中的所有内容:
如何用 Optimus,Spark,Python 做数据科学?-法维奥巴斯克斯/ds-擎天柱
github.com](https://github.com/FavioVazquez/ds-optimus)
在 MatrixDS 内部有一个简单的项目分支:
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
只要创建一个帐户,你就可以了。
旅程
Don’t worry if you don’t know what these logos are, I’ll explain them in next articles 😃
上面的路径是我将如何组织这个系列中不同的博客、教程和文章。我现在必须告诉你,我正在准备一门完整的课程,这门课程将从商业科学的商业角度介绍一些工具,你可以在这里看到更多信息:
从虚拟研讨会中学习,这些研讨会将带您了解解决问题的整个数据科学业务流程…
大学.商业-科学. io](https://university.business-science.io/)
第一部分在 MatrixDS 和 GitHub 上,所以你可以在 GitHub 上叉入,在 MatrixDS 上叉出。
[## MatrixDS |数据项目工作台
MatrixDS 是一个构建、共享和管理任何规模的数据项目的地方。
community.platform.matrixds.com](https://community.platform.matrixds.com/community/project/5c5907039298c0508b9589d2/files)
在 MatrixDS 上,单击叉车:
如何用 Optimus,Spark,Python 做数据科学?-法维奥巴斯克斯/ds-擎天柱
github.com](https://github.com/FavioVazquez/ds-optimus)
这是笔记本,但请在平台上查看:)
如需更新,请在 Twitter 和 LinkedIn 上关注我:)。