Domino 博客中文翻译(十六)

原文:Domino Blog

协议:CC BY-NC-SA 4.0

跨越过道:IT 和数据科学如何更好地合作

原文:https://www.dominodatalab.com/blog/reaching-across-the-aisle-how-it-and-data-science-can-better-partner

机器学习(ML)和人工智能(AI)现在有很大的发展势头,我们有机会做一些特殊的事情:打造产品和解决方案,为我们的行业和世界带来真正的变化。

但是,数据科学和 IT 团队需要清除许多障碍,才能使数据科学解决方案取得成果,其中最重要的是有效地合作。

这是我与 Forrester 首席分析师 Kjell Carlsson 博士主持的一次小组讨论的主题,他是我们的特邀演讲人之一。我们(当然是通过 Zoom)与 easyJet 的数据和分析总监 Ben Dias 以及首席信息官 Cesar Goulart(就职于一家医疗保健数字解决方案公司)和数据科学家 Peter Shen(就职于一家领先的制药公司)坐在一起,讨论数据科学与 IT 之间强大合作关系的最佳实践。

首先,我应该说,我们邀请这个小组不仅是因为他们的专业知识,还因为他们可以一起描述这种合作关系如何推进当今数据科学的三个基本目标:

  • 在市场中创新。例如,Peter Shen 分享了他的公司如何利用计算数据科学研究跨越免疫学、成分化学和生物学,为患者带来拯救生命和改变生活的药物。
  • 生产数据。 Cesar Goulart 分享了他的医疗保健数字解决方案公司的数据科学团队如何使用机器学习来创建决策支持工具,以帮助医疗保健组织提高临床、财务和运营绩效。
  • 提高运营效率。 Ben Dias 讨论了 easyJet 数据科学团队如何通过扩大自动化的使用来支持日益增加的工作负载,如更频繁的日程更新,从而应对新冠肺炎疫情期间提出的运营挑战。他们还开始应用先进的人工智能技术,如强化学习,以及外部数据,以更早地检测和应对市场变化。

为讨论做准备

首先,Kjell 分享了最近关于数据科学重要性的研究,以及为什么弥合 IT 和数据科学之间的沟通差距至关重要。Forrester 2020 年数据科学调查的一些主要趋势包括:

  • Forrester 的人工智能使用同比增幅最大。Forrester 在 2020 年调查的近 70%的公司报告称,他们正在实施、已经实施或正在扩展人工智能、机器学习和深度学习解决方案,而 2019 年为 54%。
  • 人工智能对企业的重要性日益增加,超过 70%的高增长公司表示,人工智能将是未来三年决定竞争力的最重要因素。这些高增长公司中有近 40%表示,人工智能已经是最重要的因素。
  • 对人工智能的重大投资,59%使用人工智能和机器学习的公司表示,这是他们最大或最大的投资领域之一。(21%的高增长公司表示,AI 是他们最大的投资领域。)
  • 人工智能价值的证据,大多数(75%)已实施人工智能的人报告其投资产生了积极影响。

建立更好的伙伴关系的最佳做法

鉴于数据科学的重要性,有些人可能认为在数据科学和 IT 之间建立无缝合作关系会很容易。毕竟,我们朝着同一个目标努力。但正如小组成员所分享的,一些根本性的挑战阻碍了发展。下面我总结了他们在讨论中分享的一些挑战,以及他们用来解决这些挑战的最佳实践。

挑战#1:数据科学和 IT 团队讲“不同的语言”

easyJet 的 Ben Dias 之前在皇家邮政(Royal Mail)工作,负责数据科学(这是他开始职业生涯的地方)和数据工程,这有助于他了解这两个团队的工作和思维有多么不同。例如,当他与他的数据工程师一起建立一个新的 Hadoop 集群时,他亲眼看到了治理和控制在确保流程顺利进行方面的重要性,以及没有这些流程可能会发生灾难。“为什么对我来说是一门大学问,”他说。“(数据工程师)想要控制它……这样,如果出现问题,他们可以快速修复。”

你能做什么 : Ben 建议,在提出请求时,IT 和数据科学不仅要概述他们需要什么,还要概述他们为什么需要它。这使得团队能够理解并积极参与控制和治理在哪里有意义,在哪里没有意义。

挑战#2:每个人都期望协作和结盟“奇迹般地发生”

正如塞萨尔·古拉特(Cesar Goulart)在讨论中强调的那样,“仅仅将一个新的高技能团队安置在某个地方,并期望事情会自行解决,这是行不通的。”

你能做什么: Cesar 分享了分析副总裁如何与公司的产品管理副总裁和首席解决方案架构师紧密合作,以确保每个人都在共同的目标上保持一致,并创建协作场所。这种积极、持续的参与有助于在一切事情上铺平道路,从获得主题专家的帮助到在潜在的部署问题脱离概念证明演示之前解决它们。

挑战 3:组织没有将研究和生产阶段分开

这触及了前面提到的最常见的争论领域之一,即平衡数据科学家在研究阶段探索新想法所需的灵活性与 it 确保一切顺利运行所需的控制和治理。

您能做什么: 数据科学家 Peter Shen 使用 Domino Enterprise MLOps 平台调整传统软件开发流程,以便在研究生命周期的早期实现可重复性。例如,他使用 Domino 创建数据和方法的快照,数据科学家使用这些快照来测试不同的想法。这确保他们可以在进入下一个研究阶段时重现结果,并随着时间的推移建立不同的思维分支,同时随着模型逐渐接近生产,记录所有工件。在 easyJet,Ben Dias 使用“精益创业”方法,让数据科学家在某种程度上受控的环境中自由探索不同的想法和工具。他们尽可能地使用相同的模板、语言和工具,但是在早期开发阶段需要的时候,他们可以超越界限。

也就是说,Cesar Goulart 强调,对于交付人工智能驱动的产品或通过 API 公开模型的公司来说,数据科学家使用何种技术的灵活性较小。“我们必须有一个标准堆栈,”他说。“我需要产品方面的技术和分析方面的技术之间的所有协调。”例如,将所有的源代码放在一个地方以保证质量,这样就有一个结构来处理任何性能问题。

挑战#4:相反,他们没有足够早地考虑生产阶段

在整个讨论过程中,小组成员强调需要有帮助解决企业 MLOps(包括模型监控)的过程,并尽早将其纳入循环。正如 Cesar Goulart 经常强调的那样,数据科学团队在完全成熟之前不会乐于分享他们的想法。他们通常要等到弄清楚细节后才开始和它说话,这会拖慢事情的进度。

你能做什么: 虽然在许多公司将每个人都放在同一个团队是不现实的,但 Cesar 强调了协调机构(例如,卓越中心)的价值,以协调研究活动与概念的技术验证、基础设施部署和产品管理路线图。作为 Ben Dias 精益启动方法的一部分,所有人从一开始就对模型开发过程中所需的流程和关卡有清晰的理解和一致的意见,因此他们从一开始就知道要做什么以及何时强化解决方案,以便在生产环境中成功运行。在可能的情况下,当将新模型引入生产时,他重用现有的过程,例如当前用于服务设计、服务转换和治理的 IT 和操作指南,而不是创建一个全新的过程。但是将会有当前软件部署通常没有覆盖的领域,模型监控是最重要的,并且团队将需要构建新的过程(它可以来自过道的任何一边)。

如果您还没有,我鼓励您收听完整讨论以了解 Ben、Cesar 和 Peter 在数据科学和 IT 之间搭建桥梁方面的更多工作。所有小组成员强调的关键要点之一是,最终数据科学家将需要接受一些 IT 治理原则,并且 IT 将需要接受数据科学对灵活性的需求。这就是像 Domino 这样的企业 MLOps 平台如此有价值的原因之一:它促进了数据科学家、数据工程师、it 和业务之间的协作,因此他们可以在 Ben、Cesar 和 Peter 谈到的控制和灵活性之间实现难以捉摸的平衡。

正如谢尔指出的,这些都是好问题。它们表明数据科学正在迅速成熟,为我们的世界带来真正的改变。

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

观看网络研讨会“跨越通道”,了解数据科学和 IT 如何合作打造更好的企业。

阅读报告“组织企业数据科学”,了解数据科学领导者用于构建企业数据科学战略的最佳实践的更多信息。

阅读 Forrester 报告,“Domino Enterprise MLOps 平台的总体经济影响”,以了解关于 Domino 提供的价值的更多信息。

Twitter Facebook Gmail Share

基于协同过滤的推荐系统

原文:https://www.dominodatalab.com/blog/recommender-systems-collaborative-filtering

这是对协同过滤算法以及如何在实践中使用它的技术深度探讨。

从亚马逊根据你最近的购买推荐你可能感兴趣的产品,到网飞推荐你可能想看的节目和电影,推荐系统已经在数据科学的许多应用中变得流行。像数据科学中的许多其他问题一样,有几种方法来处理推荐。其中最流行的两种是协同过滤和基于内容的推荐。

  1. 协同过滤:对于每个用户,推荐系统根据相似用户对项目的喜欢程度来推荐项目。假设爱丽丝和鲍勃对电子游戏有相似的兴趣。爱丽丝最近玩并喜欢上了游戏塞尔达传说:野性的呼吸。Bob 没有玩过这个游戏,但是因为系统已经了解到 Alice 和 Bob 有相似的口味,所以它向 Bob 推荐这个游戏。除了用户相似性,推荐系统还可以使用项目相似性来执行协同过滤(“喜欢这个项目的用户也喜欢 X”)。
  2. 基于内容的推荐:如果公司有关于你的每个项目的详细元数据,他们可以推荐具有相似元数据标签的项目。例如,假设我看了网飞的节目杰克骑士。这个节目可能有“动画”、“喜剧”和“成人”的元数据标签,所以网飞推荐了其他具有这些元数据标签的节目,如家庭盖伊

在这篇博客文章中,我将重点介绍第一种协作过滤方法,同时也简要讨论第二种基于内容的推荐方法。这是为希望实现推荐系统的数据科学家、工程师和产品经理撰写的关于推荐系统的一系列博客文章中的第一篇。

基于协同过滤的推荐

协同过滤背后的想法是基于用户的相似性来推荐新项目。在这一部分,我将讨论

  1. 如何衡量用户或对象之间的相似度?
  2. 用余弦相似性度量一对向量之间的相似性
  3. 如何使用基于模型的协同过滤来识别相似的用户或项目。
  4. 使用 Surprise,一个用于简单推荐系统的 Python 库,来执行项目-项目协同过滤。

测量相似性

如果我给你点 (5,2)(8,6) ,让你告诉我这两点相距多远,你可以给我多个答案。最常见的方法是计算欧几里德距离(对应于连接这两点的直线路径的长度),并说它们相距 5 个单位。另一种方法是计算曼哈顿距离,并说它们相距 7 个单位。

我们在计算相似度的时候,是要把它作为“反距离”的度量来计算的。两个物体之间的距离越大,它们之间的距离就越大。另一方面,两个对象之间的相似度越高,它们就越“靠得更近”。通常,相似性度量返回一个介于 0 和 1 之间的值,其中 0 表示没有相似性(完全不相似),1 表示完全相似(完全相同)。

余弦相似性

现在,让我们讨论最常用的相似性度量之一,余弦相似性。如果我给你矢量 U = (3,4)V = (1,1) ,你可以很容易地告诉我这两个矢量相距多远(再次使用欧几里德距离或其他度量)。现在,重要的问题来了:这两个向量有多相似?

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

同样,对于相似性,我们想要一个介于 0 和 1 之间的“反距离”度量。如果你还记得三角学,余弦函数的范围是从-1 到 1。回忆一下余弦的一些重要性质:

  1. 余弦(0 ) = 1
  2. 余弦(90 ) = 0
  3. 余弦值(180 ) = -1

对于余弦相似性,我们将基于两个向量之间的角度来评估它们之间的相似性。角度越小,两个向量越相似。

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

使用余弦相似性,我们得到当两个向量之间的角度为 0°时,它们达到最大相似性(它们朝向相同的方向),当它们之间的角度为 90°时,它们具有 0°相似性(它们彼此正交),当它们之间的角度为 180°时,它们具有-1°相似性(它们朝向完全相反的方向)。下面是正交矢量的一个例子。它们之间的角度为 90°,所以余弦相似度为 0。

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

如果我们将我们的向量限制为非负值(如电影评级的情况,通常从 1-5 的范围),那么两个向量之间的分离角度被限制在 0°和 90°之间,分别对应于 1 和 0 之间的余弦相似性。因此,对于正值向量,余弦相似性返回一个介于 0 和 1 之间的值,这是相似性度量的“理想”标准之一。需要注意的一点是余弦相似度是方向的量度,而不是幅度。两个向量可以指向完全相同的方向(因此余弦相似度为 1 ),但幅度不同。

比如向量 (3,4)(30,40) 方向相同,但大小不同(后一个向量是前一个的倍数)。使用余弦相似性时,请记住,仅仅因为两个向量的相似性得分为 1 并不意味着它们是相同的,这一点很重要!

基于模型的协同过滤

既然我们有了定义向量之间相似性的具体方法,我们现在可以讨论如何使用该方法来识别相似的用户。问题设置如下:

1.)我们有一个 n X m 矩阵,由 n 用户和 m 物品的评分组成。矩阵的每个元素( ij )代表用户 i 如何对项目 j 进行评分。由于我们正在处理电影评级,如果用户 i 已经对电影 j 进行了评级,则每个评级可以是从 1 到 5 的整数(反映一星评级到五星评级),如果用户没有对该特定电影进行评级,则为 0。

2.)对于每个用户,我们要推荐一组他们还没看过的电影(电影评分为 0)。为此,我们将有效地使用一种类似于加权 K 近邻的方法。

3.)对于每一部还没有看过的电影 j 用户 i ,我们找到与用户 i 相似并且看过电影 j 的用户 U 的集合。
对于每个相似用户 u ,我们取 u 对电影 j 的评分,并乘以用户 i 和用户 u 的余弦相似度。把这些加权评分加起来,除以 U 的用户数,我们就得到了电影 j 的加权平均评分。

4.)最后,我们按照加权平均排名对电影进行排序。这些平均排名作为用户对每部电影的评价的估计。平均排名较高的电影更容易受到用户的青睐,所以我们会把平均排名最高的电影推荐给用户。

我前面说过,这个过程类似于加权 K-最近邻算法。我们把看过电影 j 的用户集合作为 K-NN 的训练集,每个没看过电影的用户作为测试点。对于没有看过电影的每个用户(测试点),我们计算与看过电影的用户的相似性,并基于邻居的已知评级来分配估计的评级。

举个具体的例子,假设我没有看过电影。不过,我看过很多其他电影,并给它们打了 5 星的分。有了这些信息,你要预测我会对隐藏的数字做出什么评价。基于我的评分历史,你可以找到一群和我评分差不多,也看过隐藏人物的用户。为了使这个例子简单,让我们看看与我最相似并且看过这部电影的两个用户。假设用户 1 和我有 95%的相似度,给了电影四星评价,用户 2 和我有 80%的相似度,给了电影五星评价。现在我的预测评分是 0.95 4 = 3.8(用户 1 的相似度 X 评分)和 0.80 5 = 4(用户 2 的相似度 X 评分)的平均值,所以预测我给电影的评分是 3.9。

*### 惊喜

我们将使用 Surprise 库,一个用于简单推荐系统的 Python 库,而不是自己手动实现这个过程。

我们将使用 MovieLens 数据集,这是推荐系统算法的一个通用基准数据集。通过惊喜库,我们可以加载movie lens 100k数据集,该数据集由大约 1000 名用户和 1700 部电影的 100,000 部电影评级组成。

from surprise import Dataset, evaluate

from surprise import KNNBasic

数据集方法允许我们在用户-电影交互矩阵中轻松下载和存储电影镜头 100k 数据。这个矩阵的行代表用户,列代表电影。使用这个 load_builtin 方法,我们得到一个 943 行 1682 列的稀疏矩阵。

data = Dataset.load_builtin("ml-100k")

trainingSet = data.build_full_trainset()

对于我们的任务,我们希望使用电影之间的余弦相似性来进行新的推荐。虽然我解释了基于用户相似性的协同过滤,但是我们可以同样容易地使用项目间的相似性来进行推荐。通过项目-项目协同过滤,每部电影都有一个所有评级的向量,我们计算两部电影评级向量之间的余弦相似度。

sim_options = {

    'name': 'cosine',

    'user_based': False

}

knn = KNNBasic(sim_options=sim_options)

现在,我们可以在训练数据集上训练我们的模型。

knn.train(trainingSet)

现在我们已经训练了我们的模型,我们想为用户提供电影推荐。使用 build_anti_testset 方法,我们可以在用户没有观看电影的训练集中找到所有用户-电影对,并从这些条目中创建一个“测试集”。

testSet = trainingSet.build_anti_testset()

predictions = knn.test(testSet)

因为我们的模型将为每个用户推荐几十部电影,所以我们将使用一个助手方法来为每个用户只获得前三部电影推荐。

from collections import defaultdict

def get_top3_recommendations(predictions, topN = 3):

    top_recs = defaultdict(list)

    for uid, iid, true_r, est, _ in predictions:

        top_recs[uid].append((iid, est))

    for uid, user_ratings in top_recs.items():

        user_ratings.sort(key = lambda x: x[1], reverse = True)

        top_recs[uid] = user_ratings[:topN]

    return top_recs

在我们的数据集中,每个用户和电影都用一个 ID 号表示。如果我们现在要查看模型的输出,我们会收到每个用户的电影 id 列表;这不是我们能轻易解释的结果。因此,我们将使用第二个辅助方法 read_item_names 来创建一个字典,将每个电影的 ID 映射到它的名称。这个方法是基于惊喜库 Github repo 中的例子之一。

import os, io

def read_item_names():

    """Read the u.item file from MovieLens 100-k dataset and returns a
mapping to convert raw ids into movie names."""

   file_name = (os.path.expanduser('~') +
'/.surprise_data/ml-100k/ml-100k/u.item')
rid_to_name = {}

    with io.open(file_name, 'r', encoding='ISO-8859-1') as f:

        for line in f:

            line = line.split('|')

            rid_to_name[line[0]] = line[1]

        return rid_to_name

现在,我们可以调用我们的 get_top3_recommendations 方法来获取每个用户的热门电影推荐并输出结果。

top3_recommendations = get_top3_recommendations(predictions)

rid_to_name = read_item_names()

for uid, user_ratings in top3_recommendations.items():

    print(uid, [rid_to_name[iid] for (iid, _) in user_ratings])

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

如您所见,每个用户都会收到基于他们对所看电影的评价的个性化电影推荐。

协同过滤的一个主要弱点是众所周知的冷启动问题:我们如何向新用户提供推荐,我们对他们的偏好几乎没有数据。因为我们没有关于用户偏好的信息,所以我们不能精确地计算新用户和更老的用户之间的相似性。

基于内容的推荐

在这一节中,我将简要讨论基于内容的推荐是如何工作的。在上一节中,我们讨论了使用余弦相似性来衡量两个用户基于他们的向量的相似程度。假设我们想根据一对项目的元数据标签来确定它们的相似程度。例如,对于电影,元数据标签可以是关于电影中的男演员或女演员(道恩·强森)、流派(动作)和导演( J.J .艾布拉姆斯)的信息。

Jaccard 相似性为我们提供了一种度量两个集合之间相似性的方法,即计算两个集合之间共有的项目数,然后除以两个集合之间唯一项目的总数。本质上,这是他们共享的项目数量与他们可能共享的项目数量的比率。在正式的数学术语中,两个集合 A 和 B 之间的 Jaccard 相似性是 A 和 B 的交集的基数或元素数除以 A 和 B 的并集的基数。

现在我们有了基于每个项目的元数据标签的相似性度量,我们可以很容易地向用户推荐新项目。假设我在网飞看电影 《疯狂动物城》 。因为网飞在其平台上有大量的节目和电影的元数据标签,网飞可以计算出 Zootopia 和我还没有看过的节目和电影之间的 Jaccard 相似度。在计算相似度后,它可以向我推荐与 Zootopia 相似的新电影,如 Finding Dory

当然,这不是执行基于内容的过滤的唯一方式。我们可以使用许多其他方法来分析每个项目的元数据。通过 TF-IDF 或主题建模等自然语言处理技术,我们可以分析电影的描述,并基于相似的 TF-IDF 向量或主题模型定义电影之间的相似性度量。

与协同过滤一样,如果我们没有用户偏好的数据,基于内容的推荐也会受到影响。如果我们没有任何关于新用户感兴趣的信息,那么无论我们的元数据有多详细,我们都无法做出任何推荐。

结论

有了足够的数据,协同过滤为数据科学家向用户推荐新产品或项目提供了一种强大的方式。如果你有关于你的产品的详细的元数据,你也可以使用基于内容的推荐方法。

对于那些有兴趣了解更多关于推荐系统的人来说,我强烈建议你们去看看 挖掘海量数据集 一书中关于推荐系统的章节。

在接下来的一篇博文中,我将展示我们如何使用矩阵分解为用户产生推荐,然后我将展示一种混合的推荐方法,它结合了协同过滤和基于内容的推荐。这种混合方法解决了协同过滤和基于内容推荐的缺点。*

Red Hat 的 Heidi Lanford 分享了她成为模特驱动的公式

原文:https://www.dominodatalab.com/blog/red-hats-heidi-lanford-to-share-her-formula-for-becoming-model-driven

Heidi Lanford 因其在分析和数据科学领域的领导地位而闻名。从她在 Harley-Davidson 的早期客户细分工作(该工作指导了一次重要的营销重组)到她在北电的营销活动和预测计划(该计划使两个关键垂直市场的收入翻了一番),Heidi 已经指导一些世界上最大的品牌成功地利用他们的数据来更好地竞争。

现在,作为世界上最大的开源软件公司 Red Hat 的企业数据和分析副总裁,Heidi 再次崭露头角。在加入 Red Hat 不到两年的时间里,她实施了该公司首个用于协作的企业数据科学平台和一个用于认证企业数据资产的框架,这两个平台都是全面计划的一部分,该计划将帮助 Red Hat 在其业务的各个方面扩展数据科学。

她的工作为如何成为模型驱动的公司提供了宝贵的见解-正如大多数数据科学领导者所知,尽管人们对数据科学普遍感到兴奋并进行投资,但这仍是一个重大挑战。事实上,2017 年麻省理工学院斯隆管理学院的一项研究发现,尽管其调查的 85%的公司认为模型能够让他们获得(或保持)竞争优势,但只有 5%的公司在业务中广泛使用模型。

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

Red Hat 如何建立真正的企业数据科学能力来推动采用?在 Heidi 本月的 Rev 2 会议之前,我们与她坐在一起,先睹为快地了解了她的成功公式,该公式以三个支柱为中心:协作、社区和采纳。以下是我们谈话的编辑记录。

合作的重要性

让拥有大量数据和强大工具的聪明的数据科学家到位,只能让公司走到这一步。许多公司正在通过协作转变他们在业务各个部分使用数据的方式,如果我们不适应,我们知道我们只能从我们的数据和分析工作中获得一定程度的成功。例如,就模型开发而言,最好的数据科学成果来自数据科学家和商业社区之间的大量合作。因此,在前端,我们坚持要求数据科学和分析社区以业务能够理解的方式解释他们将着手的任何建模项目的价值。为了投资生产模型或其他分析输出,企业必须阐明:模型将如何改变某人的日常工作或改善客户体验?

数据科学家还必须真正了解业务,以便他们可以从业务角度看模型建议是否有意义,并且他们需要与业务团队一起审查初始模型输出,以获得他们的反馈。通常,业务团队可以提供一些趋势和模式是否相关的见解,但更重要的是是否存在因果关系。

为数据科学家建立一个社区

我们的数据科学家在不同的环境中接受过教育,有过不同的经历,我们需要为他们提供可以利用彼此知识的方式。因此,我们创建了一个名为 DAVE 的环境,即数据分析虚拟化环境,为数据科学家提供了一个空间来分享想法、建模技术、数据源和他们的主题知识,并就他们试图解决的业务挑战提出问题。

从可信数据到可信模型的思考

虽然我们知道我们正在处理可信的数据源,但我们也希望有一个过程来确定哪些是我们最可信的模型,例如,他们是否使用了足够大的样本量,他们是否采用了正确的方法,他们是否有正确的文档,技术基础设施是否支持该模型,模型何时需要更新,等等。随着我们治理实践的扩展,既有开发部分,也有运营部分。我们正在组建一个数据科学委员会,该委员会将提供同行评审,以确保模型的构建足够严谨。我们只是在测试流程和确定委员会成员的早期阶段,但我们认为这项工作对于建立一条清晰的道路以将模型投入生产和建立信任以最终推动采用至关重要。

谈到推动最终用户的采用,我们还需要确保我们的销售、产品、客户体验和其他团队中的人员都精通“数据作为第二语言”我们的数据素养计划和“你会说数据吗”活动正在帮助我们将数据科学带到组织的每个层面。


在 5 月 24 日于纽约举行的 Rev 2 会议上,您可以听到 Red Hat 的完整故事(和挣扎),并获得关于建立真正的企业数据科学能力的建议。

减少你雇佣错误候选人的机会

原文:https://www.dominodatalab.com/blog/reduce-your-chances-of-hiring-the-wrong-candidate

By Karina Babcock, Director Corporate Marketing, Domino on May 21, 2019 in Perspective

Wayfair 的 Patrick Phelps 将在纽约的 Rev 2 上分享在机构层面处理认知偏见和噪音的方法

我们都知道雇佣错误的人的成本会很高。除了产生大量的入职费用之外,当新员工不合适时,数据科学团队还可能面临广泛的影响,从项目延迟到流失率增加。我们采访的一位数据科学领导者发现,在雇用团队经理后的六个月内,团队的人员流动率高达 80%。事实证明,新经理不愿意接受反馈,也不愿意听取团队的想法,结果导致了大规模流失。

像这样的警示故事比比皆是,导致组织为雇佣新的数据科学家创建了强大的面试流程。这种努力通常包括技术面试和可能的编码评估的某种组合,以及评估候选人“软”技能的针对性行为问题——这对运作良好的数据科学团队和与业务人员的有效互动至关重要。

但是没有一个过程是完美的。鉴于“直觉”很容易影响候选人的选择,最近也有很多关于如何在招聘决策中消除无意识偏见的讨论。一个典型的例子是,当面试官仅仅基于一个人充满活力的个性,就对这个人与商业团队合作的能力做出比其他人更高的评价。另一种情况是,面试官认为候选人非常适合,因为他们与个人“有联系”,有着相同的兴趣或母校。

即使抛开认知偏见,数据科学的领导者也需要担心解决全球最大的家居用品在线公司之一的 Wayfair 所谓的“噪音”。

面试过程中的“噪音”到底是什么?

Patrick Phelps 是 Wayfair 数据科学测量和归因的副主任,他将在本周纽约 Rev 2 的演讲中分享他们对噪音的理解以及如何处理噪音。

一些读者可能还记得去年 Rev 峰会上的 Patrick,当时他参加了一个关于如何雇佣、保留和培养数据科学人才的小组讨论。作为谈话的一部分,他分享了他使用“学习面试”来帮助评估候选人是否愿意听取公司专家的意见并向他们学习。(查看视频了解更多关于这种面试方法的信息。)

在他今年的讲座中,你将了解到:

  • Wayfair 如何处理“嘈杂的决策”,因为他们成长为一百多名数据科学家
  • Wayfair 正在改进面试流程,以招聘下一百名数据科学家
  • 创造一致访谈的技巧,以帮助最小化无意识的偏见和噪音

今年的会议将于 5 月 23 日星期四至 5 月 24 日星期五在纽约举行,60 多位行业领袖分享了对当今数据科学最大挑战的见解,从扩展模型和建立模型驱动的文化到确保负责任的人工智能,会议为从业者和领导者量身定制。诺贝尔奖获得者、著名行为经济学家丹尼尔·卡内曼将主持会议开幕式,讨论为现代行为经济学奠定基础并阐明我们如何真正做出选择的关键发现。

那里见!

Twitter Facebook Gmail Share

反思创纪录的 2017,展望伟大的 2018

原文:https://www.dominodatalab.com/blog/reflections-2017

By Nick Elprin on January 25, 2017 in Perspective

2017 年对于数据科学和 Domino 来说都是重要的一年。很难相信 2018 年 1 月已经快过去了。在进入下一个月、下一年之前,我想停下来反思一下我们已经走过的不可思议的旅程。

数据科学在 2017 年成为一个非常真实的市场,Gartner 的数据科学平台魔力象限报告就证明了这一点。我们在 Domino 看到了三位数的收入增长——从戴尔、T. Rowe Price、84.51、WPP 的 Mindshare、Postmates 和 Survey Monkey 等客户那里赢得了业务——而根据 2017 年 MQ 报告,现有客户“将 Domino 的客户支持和协作功能视为特殊优势。Domino 的协作特性的客户满意度得分在所有供应商中是最高的。

各种形状和规模的组织都在接受数据科学,并投资于必要的人员、流程和技术,以使其成为核心竞争力。在组织中扩展数据科学肯定会面临一些巨大的挑战,我们一直在与客户一起努力克服这些挑战。还有一些更深层次的挑战,我们希望通过我们一直在进行的数据科学管理调查来揭示这些挑战。(这些见解将在未来一个月左右公开分享。)但是,各行各业的组织都有机会成为模型驱动的组织——更重要的是,推动量化的差异化业务影响——这是触手可及的。我们很高兴能帮助这些组织挑战极限。

为了支持不断增长的市场吸引力,我们将我们的团队扩大了一倍,组建了我们的行政人员,聘用关键人员负责产品、工程、营销、业务运营和业务发展。我们仍在快速发展,希望通过有才华、有动力、希望推进数据科学的人来壮大我们的团队。查看我们的职业页面了解更多信息。

我也很高兴今年能主持 Rev 会议:这是一次汇聚当今和未来数据科学领域领导者的行业会议。为期两天的活动将于 5 月 30 日至 31 日在旧金山举行,世界公认的数据科学领袖将重点介绍这一活动,并帮助与会者学习技能、技术和最佳实践,以推动其组织成为模型驱动型组织。当然,我们也将推出激动人心的新 Domino 功能。我们期待在那里见到您!

最后,我想快速介绍一下这个帖子的渠道:我们新的企业博客。我们 Domino 对发布到我们的数据科学博客的内容有非常严格的要求。它必须支持、帮助或支持数据科学家和/或数据科学领导者的数据科学工作或职业生涯。但是,随着我们公司、产品和行业的发展,我们发现需要一个新的渠道来分享市场趋势、Domino vision 和产品新闻、合作伙伴关系、职业机会、活动等信息。这就是这个新的 Domino 企业博客的目的。我们邀请您对这里发布的内容发表意见和反馈。希望它是有价值的。

我们以前所未有的势头、市场需求和真正强大的团队进入了 2018 年。这是令人谦卑的,令人欣慰的,也是非常令人兴奋的。2018 年最让我兴奋的是继续帮助我们的客户为模型驱动的企业设定新标准,并为他们提供新的、突破性的产品功能,以促进这一旅程。

Twitter Facebook Gmail Share

关于数据科学平台市场的思考

原文:https://www.dominodatalab.com/blog/reflections-data-science-platform-market

在我们进入 2019 年之前,我想花一点时间来反思我们在市场上看到的一些变化。2018 年,我们看到“数据科学平台”市场迅速具体化为三个不同的产品细分市场。这篇文章描述了我们对这三个细分市场的观察,并为评估这一领域产品的人们提供了建议。

在过去的几年里,很难责怪任何人对数据科学平台市场前景感到不知所措。尽管为不同类型的用户解决了不同的问题,但有几十种产品使用相似的语言描述自己。这不仅困惑了数据科学家,也影响了作为软件供应商的我们:一些市场分析将 Domino 与完全不同于我们的产品混为一谈,迫使我们回答这样的问题:我们如何与解决根本不同的需求和用例的产品进行比较。有时,感觉就像是一个汽车制造商,看着别人把我们的汽车比作潜艇、飞机和踏板车。

我们惊喜地看到,尤其是在过去的六个月里,公司在为其数据科学团队配备一流技术时,对这些产品的看法越来越清晰。正如经常发生的那样,这种清晰性同时从世界不同的角落出现,反映了似乎是数据科学平台市场的时代精神。

已经结晶的三个部分是:

  1. 自动化工具
  2. 专有(通常是 GUI 驱动的)数据科学平台
  3. 代码优先的数据科学平台

自动化工具

这些解决方案通过自动化数据科学中的任务(包括训练模型、选择算法和创建特征)来帮助数据分析师构建模型。这些解决方案主要面向非专家数据科学家或对简化构建快速基线模型过程中的繁琐步骤感兴趣的数据科学家。这些“自动化机器学习”解决方案通过让非专家数据科学家参与模型构建过程,提供拖放界面,帮助传播数据科学工作。它们通常包括用于部署已经被自动训练的模型的功能,并且它们也越来越多地为那些模型集成可解释性和可解释性特性。当数据准备充分且结构一致时,它们工作得最好。

专有(通常是 GUI 驱动的)数据科学平台

这些工具支持广泛的用例,包括数据科学、数据工程和模型操作。它们提供拖放和代码接口,并在许多企业中拥有强大的立足点,甚至可能为特定的微型垂直市场提供独特的功能或算法。虽然这些解决方案提供了广泛的功能,但用户必须利用专有的用户界面或编程语言来表达他们的逻辑。

代码优先的数据科学平台

这组解决方案面向代码优先的数据科学家,他们使用统计编程语言,整天呆在计算笔记本(例如 Jupyter)或 ide(例如 RStudio)中,利用开源和商业软件包和工具的组合来开发复杂的模型。这些数据科学家需要灵活地使用不断发展的软件和硬件堆栈来优化他们模型生命周期的每一步。这些代码优先的数据科学平台协调必要的基础设施,以加速高级用户的工作流,并为拥有数百或数千个模型的组织创建记录系统。拥有数据科学家团队的企业选择这些解决方案来加速个人实验,同时推动组织的协作和治理。主要功能包括可扩展计算、环境管理、可审核性、知识管理和可再现性。

证据:我们所看到的

我们已经看到多个组织描述了类似的市场划分,有时使用稍微不同的术语。

例如,一家排名前十的全球金融机构的首席数据科学家告诉我,他们的组织研究了产品前景,并根据目标用户的技术技能将其分为三个级别:

  • “1 级”包括自动化数据科学任务的工具;
  • “第 2 级”包括面向技术水平较低的分析师的拖放式 GUI 工具;
  • “第三级”是为那些希望使用统计编程语言来编写逻辑的技术数据科学家准备的。

评估团队将这些层表示为一个金字塔:随着级别的上升,用户数量减少,但用户更具技术性,影响更大。至关重要的是,这些级别并不相互排斥——事实上,评估最终建议从每个级别购买一个工具,以支持组织内不同类型的用户。

同样,2018 年,Forrester 将其预测分析产品的“浪潮”分为两个不同的浪潮。第一个——“多模式解决方案”——包含了我们在本文中称之为“专有/基于 GUI”的解决方案(包括一些“自动化工具”)。他们的第二次浪潮——“基于笔记本的解决方案”描述了“代码优先”平台。他们今年有一份即将发布的关于自动化平台的报告

作为最后一个例子, 2018 工作台企业年鉴有一个很大的部分是关于企业的机器学习产品。在第 31 张幻灯片中,他们描述了三种“数据驱动洞察模型”,这三种模型与我们看到的三种产品类别非常吻合:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 *                                                  Image excerpted from 2018 Work-Bench Enterprise Almanac*

虽然来自这些不同领域的解决方案解决不同的问题,但许多组织需要来自这些领域的解决方案。例如,一家保险公司可以指派一组专家数据科学家在一个代码优先的平台上协作开发他们专有的索赔风险模型。与此同时,他们可能在营销部门有一名公民数据科学家,他正在探索自动化工具,看看是否有一种新的方法来进行销售线索评分,从而超越他们现有的基于规则的流程。

下表总结了这些细分市场。

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

结束语

如果您正在考虑使用这些细分市场中的任何产品,我们的建议(适用于大多数技术选择)是对宣传持怀疑态度,并从评估您的业务需求、使用案例和数据科学人才战略开始。根据您雇佣的人员类型以及您计划如何解决数据科学问题(非技术人员、半技术人员、复杂的技术人员),您将需要并想要不同的解决方案。

如果你对不同类型的问题采取多层次的人才战略,你可能需要多种解决方案。仅仅在一年前,这可能看起来令人不快,但一旦你将这一市场格局视为三个不同的产品类别,它就有意义了。

关于自举的思考

原文:https://www.dominodatalab.com/blog/reflections-on-bootstrapping

我们最近聘请了一名营销主管,其中一个更大的挑战让我感到惊讶:许多候选人对我们自举公司而不是使用更传统的风险投资支持的方法表示严重关切。我认为我们的方法更好、更快、更聪明——但这并不是许多候选人所看到的。

与候选人进行这些辩论让我思考如何启动 Domino,为什么,好的和坏的,我想分享所有这些,它可能会给你提供的观点和你可能会给我们的建议。

从更大的角度来看,bootstrapping Domino 是一个比我们意识到的更激进的决定,因为今天许多人无法想象在没有风险投资的情况下创办一家公司。所以要小心:你在逆流而上。

我们如何以及为什么自举

作为背景,Domino 是一个"数据科学平台:"它让数据科学家可以更快地改进他们的分析,使其更容易运行、跟踪、复制、共享和部署分析模型。尼克、克里斯和我在 Bridgewater Associates 工作了六年(正负)后开始了这个项目,Bridgewater Associates 是一家深入分析和系统化的对冲基金。

我们看到了很多为多米诺骨牌融资的选择,但有一点是相当清楚的:种子阶段风险投资(VC)是其中最昂贵的。要筹集 100 万美元的种子资金,可能需要我们出让公司 20%的股份。在某些情况下,相同的百分比你会得到更多的现金;在某些情况下,你不会。这也需要从生产产品和销售中转移出有意义的注意力。这是一个很高的代价,所以我们想考虑替代方案。

相反,我们引导,特别是:

  • 创始人不拿薪水。显然不是每个人都能做到这一点,但这是降低成本的巨大杠杆。这不是全有或全无。即使薪水减少,你的消耗率也会有很大的不同。

  • 我们保持其他费用较低。例如,我们还没有聘请律师;相反,我们依靠 Rocket Lawyer 和类似的产品来收集我们需要的东西。我见过初创公司仅在律师身上就花了好几万。

  • 我们尽可能使用海外承包商,他们每小时的工资更低,管理费用也更少(如办公空间)。

  • 我们做了一些副业。我们知道有几家硅谷公司在我们有丰富经验的领域需要一些帮助,所以我们接了三四个咨询项目来获得一些现金。取决于你的技能和关系网,这对于一些创始人来说会比其他人容易;这可能需要一些极端的创造力。你还必须用你的核心产品来平衡分心。

  • 我们尽快收取了产品费用。就像不领薪水一样,这并不适用于所有企业,但对我们来说,幸运的是,它确实适用。

只是要明确一点:我们没有从我们的个人储蓄中给公司开大额支票。我们每个人凑了几千美元作为启动资金,然后做了我上面描述的事情。

好人

16 个月后,我们的结局如何?我们在市场上有一个产品,许多产品的支持者,有意义的收入(足够支付我们的成本,尽管创始人仍然不拿薪水),和一个小团队。

该公司是 100%员工所有的,这是我们方法的最大优点。

除了增加所有权,自举的另一大优势是它让你保持苗条和饥饿。深深烙进多米诺 DNA 的是对每一美元来之不易和应该如何谨慎使用的深刻认识。(马克·安德森最近也掀起了一场与这一点相关的推特风暴。)

自举无疑是一种为许多其他成功公司所采用的方法。Github 在没有外部资助的情况下运行了五年。小蜜蜂在没有外部资金的情况下成长为一家价值 10 亿美元的公司。Craigslist、Patagonia 和 Tableau 软件在最初关键的几年里也是自举发展。

“I would think, this is how Galileo must have felt after a lecture to the Catholic Church.”

坏事

自助方法的一个缺点是:某些风险投资公司可能是你建立业务的强大盟友(例如,招聘、营销、媒体)。由于没有风投的参与,我们无法从这种帮助中获益(尽管需要明确的是,并非所有公司都提供这种帮助)。我们已经通过顾问在一定程度上对此进行了补偿。

但最大的挑战是招聘。以下是我们与候选人的典型讨论:

候选人:“那么哪些风投在支持你?”

我说:“我们是穷光蛋。”

候选人:“嗯…这是为什么?”

我:主要是因为我们可以。风投资金,尤其是早期,是非常昂贵的。自举对我们来说意味着更少的稀释。意味着我们有更多的股权可以雇佣。还能减少分心——可以专注于产品和销售。此外,它还能让我们保持苗条和专注。”

候选人:“你的钱快用完了吗?”

我:“不,在雇用你之后,我们会有一年的时间在银行里走秀。相当典型。”

候选人:“但是自举公司往往没有那么充足的资源。”

我说:“实际上我们的障碍是寻找人才,而不是钱——这意味着我们雇不起的人比我们能找到的优秀人才多。”

候选人:“嗯,我也想知道一个风投已经同意了这个想法。”

:“那是什么意思?”

候选人:“你知道,背后有一个风投。风投看到很多企业,知道他们认为你的想法是个好主意会很好。你当然认为这是个好主意……这是你的公司。”

我:“嗯……风投正在购买期权组合,所以我不确定他们的支持是否如你所想。风投们正试图获得一两笔非常成功的投资,其余的都无关紧要——所以这更像是在玩彩票。我只下了一个赌注,我认为这是一个很好的赌注——这就是为什么我每天都投资它。你应该想想哪种情况最能反映你的处境。”

候选人:“但这就是风投的工作——他们验证初创企业的商业模式。所以,这有助于告诉我,你的业务是稳固的。”

:“当然。但是没有 VC 做后盾不代表公司无效。你可以将客户和收入增长作为一个更有意义的指标,我们的增长是我们能够启动的一个关键原因。”

候选人:“我就是不确定。”

老实说,我发现像上面这样的对话非常令人沮丧。后来我会想,“这就是伽利略在对天主教会演讲后的感受。”

当然,这是不公平的。接受风险投资是为企业融资的一种完全合理且通常明智的方式。但这不是唯一的方法。在某些情况下,这可能不是最好的方法。

反光

“Ultimately we turned the pushback we were getting into an interview question that we used to judge independence of thought.”

那么,是什么让潜在的初创企业员工产生了这种心态呢?两件事——在某种程度上指向了引导的元挑战:

首先,在某种程度上,我只能钦佩他们商业模式的目标,我认为风投已经“抓住”了初创企业的生态系统。换句话说,人们无法想象在没有风投支持的情况下创办一家公司。然后,因为人才(以及媒体和其他人)开始相信这一点,这就变成了一个自我强化的循环。

在这一点上,我要强调的主要事情是有替代方案(这是我写这篇文章的主要原因)。当然,在我们取得巨大成功之前,我们还有数百英里的路要走。所以你只能从我们的例子中得到这么多。但是对于那些考虑走自举之路的人来说,我希望这能给你一些鼓励。

第二,太多人想把思维外包给别人。我不会对此做过多阐述,因为我认为彼得·泰尔最近的努力比我更好地体现了逆向思维在初创企业(以及生活中)的重要性。

最终,我们把遇到的阻力变成了一个用来判断思想独立性的面试问题。这就是我们最终找到营销主管的原因。

对数据科学工具“购买还是构建”的思考

原文:https://www.dominodatalab.com/blog/reflections-on-buy-vs-build

“购买 vs 制造”、“不在这里发明综合症”甚至“在这里发明综合症”已经被广泛地写过。我想分享一些关于这个话题的思考,基于我作为一名工程经理(在那里我必须决定是构建还是购买解决方案)和最近作为一名向其他公司销售平台的创始人的观察。

简而言之,我将使用术语“购买”来表示“使用第三方解决方案”(包括免费或开源的东西)。

这是关于你的业务,而不是你的技术

我看过无数的博客文章,从功能和所需的工程努力方面描述了建设与购买的利弊。你正在寻找的第三方解决方案的质量如何;它是否具备您需要的所有功能;学习/集成另一个解决方案与构建您自己的解决方案需要多长时间。

在我看来,这种类型的计算忽略了最重要的问题:你试图为你的公司的业务和竞争优势提供的能力是不是核心?如果你交付的能力是你业务的核心或者使你与众不同的东西,你应该有强烈的偏好去构建,这样你就可以控制自己的命运。如果你提供的是核心业务的外围功能或支持核心业务的功能,你应该倾向于购买,这样你就可以将宝贵的工程资源集中在你的差异化功能上。

这种框架代表了一种微妙但重要的心态转变,与大多数人处理购买还是建造问题的方式不同。考虑一个论点,比如“第三方产品拥有我们需要的所有功能,所以我们自己构建它是在浪费时间”——如果这些功能是您竞争优势的关键,您可能希望构建自己的产品,以便您可以根据需要精确地发展它们。相反,如果一个产品只有你想要的 80%,但它的功能不会成就或破坏你作为一个企业的成功,这可能是更好的选择,这样你就可以专注于你必须做的功能。

举例来说,对冲基金可能会建立自己的时间序列数据库,即使有很多强大的数据库解决方案,包括许多具有强大时间序列支持的解决方案。这是有意义的,因为时间序列的表示和操作对公司的竞争优势至关重要。另一方面,同一家公司管理自己的虚拟主机基础设施是疯狂的。相反,高容量的消费者 web 应用程序可能需要构建和管理自己的托管基础设施,但可能使用现成的数据库来存储指标(作为时间序列)。在做出购买还是构建的选择时,应该深刻、周到地了解什么对您的业务最重要。

这种思路的一个缺陷是,很容易将两种独立的能力混为一谈,而不是认识到一种能力是业务的核心,而另一种能力不是。例如,您可能有对您的竞争优势至关重要的预测模型——但是计算这些模型的网格基础设施可能是许多公司都有的一般性问题。

大多数工程师天生就有偏见

大多数工程师是工程师,因为他们喜欢建造东西。所以如果你问一个工程师是自己造好还是自己买好,大多数情况下,她默认的姿势会是自己造。工程师喜欢建造东西并不是坏事——事实上,这很好——但这确实意味着当你询问工程师的意见时,你需要记住这一点。

这是我收到的一封真实的电子邮件,发件人是一位数据科学家,他见过 Domino,认为这将有助于他的团队:

嘿,尼克,
很抱歉延迟回复。我已经和这里的一些开发者聊过了,他们已经决定在内部定制我们的平台。我不太清楚为什么,但这是[公司]的普遍趋势。谢谢你的时间。

或另一封电子邮件:

嗨,尼克,恭喜你!看起来是一个很棒的产品,我的团队对此印象深刻。我不认为它适合我们,因为我们更喜欢自己成长,在需要控制方面犯了错误,但如果这种情况有所改变,我们很乐意让你知道。

不幸的是,这种偏见也经常延伸到技术管理职位。我认识一位工程师,他正在构建自己的消息队列,因为,据他所说,“如果我一直建议现有的解决方案,而不是构建自己的解决方案,我会失去首席技术官的信任。”

当技术人员脱离了对业务的理解,他们自然倾向的影响就被放大了。如果你的工程师认为他们存在的理由是建造东西,而不是“最佳地使用技术来实现我们的关键战略业务目标”,那么你的工程组织,以及你的业务作为一个整体,将会受到影响。

“我们自己建造一切”

我听到许多工程师和技术经理说他们在内部开发所有的技术。当然,这些公司还没有建立自己的操作系统、编程语言、数据库系统、电子邮件客户端、文本编辑器等。我怀疑他们永远不会考虑为这些功能构建内部解决方案。

我认为这一点认知失调突出了在实践中应用我之前的建议(考虑你的核心/差异化能力)的挑战。具体来说,我怀疑许多公司夸大了他们业务的核心,同时,我怀疑他们低估了构建自己的解决方案的成本。

需要考虑的问题

我上面的观察并不意味着购买还是构建总是一个简单的决定。这涉及到各种各样的因素——通常是相互冲突的。一个优秀的技术经理——对相关的业务考虑有着发自内心的理解——将能够切入问题的核心,确定这些问题中哪些与任何特定的环境最相关。

  1. 最重要的是,列举您需要从解决方案中获得的功能,并确定哪些功能对您的业务至关重要,即,您需要控制哪些功能,以确保您与竞争对手相比保持差异化。批判性地思考分解这些能力,以识别哪些是特定的,哪些是通用的。例如,你的专有软件可能是一个区别,但这并不意味着你需要一个专有的编程语言;您的预测模型可能是一个优势,但这并不意味着您需要自己的网格解决方案来训练您的模型。

  2. 考虑构建您自己的解决方案的机会成本:您的工程师可以做些什么?

  3. 可视化持续维护(修复和改进)

-如果您正在构建解决方案,请记住构建解决方案的 40-80%的“成本”来自持续的支持和维护。你能承诺吗,或者你想让第三方来做吗?
——反过来,如果你购买一个解决方案,你的改进需求会与供应商或提供商或解决方案的利益一致吗?您会从更新中受益吗,或者解决方案会朝着与您的目标不一致的方向发展吗?

  1. 当然,要考虑功能,与您的需求相匹配。第三方解决方案会给你 50%、80%或 100%的你想要的吗?如果有差距,它们是必须拥有的还是最好拥有的?(同样,您对差距的容忍度应该取决于功能对于区分您的业务有多重要。)

-你得到的功能有多复杂?建立和维护自己容易吗,或者实际上相当微妙和复杂?
-考虑集成第三方解决方案的成本。即使它拥有您需要的所有功能,与您现有的环境集成又有多少工作量呢?

我们自己的例子

这里有一些我们在构建 Domino 时所做决策的具体例子,关于买什么和构建什么。

  • 购买:我们使用了第三方工具(Mixpanel)进行用户分析。这是一个普遍的问题,不是我们特有的,也不是我们竞争优势的核心。它很容易集成,虽然它没有做到我们理想中想要的一切,但差距不是大问题。

  • Build :我们构建了自己的作业调度器和“自动缩放器”,它们一起旋转 EC2 机器,并将用户的作业分配给集群中的不同机器。有些人认为这是一个疯狂的决定——毕竟,AWS 有自动缩放功能。但是我们发现

  • 这个功能是我们产品的核心,所以我们希望对我们如何发展它进行细粒度的控制;

  • 我们需要的基本功能集实现起来并不复杂。(我们有了第一个版本,在大约 4 周内部署并运行)

  • 集成第三方作业调度程序可能会很麻烦,因为我们需要将我们的领域对象和词汇表映射到一个更通用、更一般化的领域。我们实现的特殊性——根据我们的领域精确定制——使我们在代码库中工作更加高效。

  • 混合:对于我们的修订版文件存储(支持大文件),我们采用了混合方法。我们在幕后使用 git,但是我们在此基础上构建了对大文件的支持。我们希望尽可能多地使用现成的,因为版本控制是一个众所周知的复杂问题,所以我们希望从解决这个问题的所有工程中受益。但是 git 不能处理大文件。

我们最终构建了一个与 Github 的大文件存储非常相似的东西,但是我们差不多两年前就这么做了,那时 Github 的解决方案还不存在。(如果我们现在做,我们可能会使用他们的解决方案。)我们查看了 git-annex 和几个类似的解决方案,但它们似乎都没有给我们想要的控制,并且/或者集成的复杂性会令人尴尬。所以我们选择主要使用 git,并在上面进行我们自己的定制开发,尽可能做到最小化。

关于数据科学平台市场的思考

原文:https://www.dominodatalab.com/blog/reflections-on-the-data-science-platform-market

反光

在我们进入 2019 年之前,我想花一点时间来反思我们在市场上看到的一些变化。2018 年,我们看到“数据科学平台”市场迅速具体化为三个不同的产品细分市场。这篇文章描述了我们对这三个细分市场的观察,并为评估这一领域产品的人们提供了建议。

在过去的几年里,很难责怪任何人对数据科学平台市场前景感到不知所措。尽管为不同类型的用户解决了不同的问题,但有几十种产品使用相似的语言描述自己。这不仅困惑了数据科学家,也影响了作为软件供应商的我们:一些市场分析将 Domino 与完全不同于我们的产品混为一谈,迫使我们回答这样的问题:我们如何与解决根本不同的需求和用例的产品进行比较。有时,感觉就像是一个汽车制造商,看着别人把我们的汽车比作潜艇、飞机和踏板车。

我们惊喜地看到,尤其是在过去的六个月里,公司在为其数据科学团队配备一流技术时,对这些产品的看法越来越清晰。正如经常发生的那样,这种清晰性同时出现在世界不同的角落,反映了数据科学平台市场的时代精神。

已经结晶的三个部分是:

  1. 自动化工具
  2. 专有(通常是 GUI 驱动的)数据科学平台
  3. 代码优先的数据科学平台

自动化工具

这些解决方案通过自动化数据科学中的任务(包括训练模型、选择算法和创建特征)来帮助数据分析师构建模型。这些解决方案主要面向非专家数据科学家或对简化构建快速基线模型过程中的繁琐步骤感兴趣的数据科学家。这些“自动化机器学习”解决方案通过让非专家数据科学家参与模型构建过程,提供拖放界面,帮助传播数据科学工作。它们通常包括用于部署已经被自动训练的模型的功能,并且它们也越来越多地为那些模型集成可解释性和可解释性特性。当数据准备充分且结构一致时,它们工作得最好。

专有(通常是 GUI 驱动的)数据科学平台

这些工具支持广泛的用例,包括数据科学、数据工程和模型操作。它们提供拖放和代码接口,并在许多企业中拥有强大的立足点,甚至可能为特定的微型垂直市场提供独特的功能或算法。虽然这些解决方案提供了广泛的功能,但用户必须利用专有的用户界面或编程语言来表达他们的逻辑。

代码优先的数据科学平台

这组解决方案面向代码优先的数据科学家,他们使用统计编程语言,整天呆在计算笔记本(例如 Jupyter)或 ide(例如 RStudio)中,利用开源和商业软件包和工具的组合来开发复杂的模型。这些数据科学家需要灵活地使用不断发展的软件和硬件堆栈来优化他们模型生命周期的每一步。这些代码优先的数据科学平台协调必要的基础设施,以加速高级用户的工作流,并为拥有数百或数千个模型的组织创建记录系统。拥有数据科学家团队的企业选择这些解决方案来加速个人实验,同时推动组织的协作和治理。主要功能包括可扩展计算、环境管理、可审核性、知识管理和可再现性。

证据:我们所看到的

我们已经看到多个组织描述了类似的市场划分,有时使用稍微不同的术语。

例如,一家排名前十的全球金融机构的首席数据科学家告诉我,他们的组织研究了产品前景,并根据目标用户的技术技能将其分为三个级别:

  • “1 级”包括自动化数据科学任务的工具;
  • “第 2 级”包括面向技术水平较低的分析师的拖放式 GUI 工具;
  • “第三级”是为那些希望使用统计编程语言来编写逻辑的技术数据科学家准备的。

评估团队将这些层表示为一个金字塔:随着级别的上升,用户数量减少,但用户更具技术性,影响更大。至关重要的是,这些级别并不相互排斥——事实上,评估最终建议从每个级别购买一个工具,以支持组织内不同类型的用户。

同样,2018 年,Forrester 将其预测分析产品的“浪潮”分为两个不同的浪潮。第一个——“多模式解决方案”——包含了我们在本文中称之为“专有/基于 GUI”的解决方案(包括一些“自动化工具”)。他们的第二次浪潮——“基于笔记本的解决方案”描述了“代码优先”平台。他们今年将发布一份关于自动化平台的报告。

作为最后一个例子, 2018 工作台企业年鉴有一个很大的部分是关于企业的机器学习产品。在第 31 张幻灯片中,他们描述了三种“数据驱动洞察模型”,这三种模型与我们看到的三种产品类别非常吻合:

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

图片摘自 2018 工作台企业年鉴

虽然来自这些不同领域的解决方案解决不同的问题,但许多组织需要来自这些领域的解决方案。例如,一家保险公司可以指派一组专家数据科学家在一个代码优先的平台上协作开发他们专有的索赔风险模型。与此同时,他们可能在营销部门有一名公民数据科学家,他正在探索自动化工具,看看是否有一种新的方法来进行销售线索评分,从而超越现有的基于规则的流程。

下表总结了这些细分市场。

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

结束语

如果您正在考虑使用这些细分市场中的任何产品,我们的建议(适用于大多数技术选择)是对宣传持怀疑态度,并从评估您的业务需求、使用案例和数据科学人才战略开始。根据您雇佣的人员类型以及您计划如何解决数据科学问题(非技术人员、半技术人员、复杂的技术人员),您将需要并想要不同的解决方案。

如果你对不同类型的问题采取多层次的人才战略,你可能需要多种解决方案。仅仅在一年前,这可能看起来令人不快,但一旦你将这一市场格局视为三个不同的产品类别,它就有意义了。

在 Conda 和 Domino 环境中实现再现性

原文:https://www.dominodatalab.com/blog/reproducibility-conda-domino-environments

管理“环境”(即一组包、配置等)。)是任何一个数据科学平台的关键能力。环境设置不仅会浪费人员的时间,而且跨环境的配置问题会破坏可再现性和协作,并且会在将模型从开发转移到生产时引入延迟。

这篇文章描述了 Domino 如何使用 Docker 来解决这些环境问题,更具体地说,是如何将这种方法与常见的包管理解决方案集成,如 Anaconda

计算环境快速介绍

Domino 计算环境允许数据科学家使用任意软件和配置来管理图像。这些环境定义是共享的、集中的和修订的——当 Domino 在其计算网格上运行您的代码时(在模型训练期间或为了部署),您的代码也在您的环境中运行。这意味着无论您何时进行项目(甚至几个月后),或者谁在进行项目(例如,一位新同事加入您的项目),或者项目是为了开发还是生产目的而运行,您都可以获得相同的环境。

下面展示了 Domino 环境强大功能的一个例子,下面的环境可以用来创建一个安装 Theano 和 opencv python 库的环境。

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

在这种环境下的项目中运行的任何 python 脚本都能够重复利用 Theano 和 opencv。

在 Domino 计算环境中使用 Continuum 的 Anaconda

Continuum 的 conda 是 python 生态系统可用的包和依赖管理工具之一。我们的一些客户问我们“Domino 和 conda 是如何协同工作的?”由于 Domino 环境本质上是 conda 功能的超集,因此利用 conda 或 Domino 内部任何其他类似的依赖管理系统的能力,同时增强其可再现性和可靠性是很容易的。

一些客户使用 conda“渠道”来管理定制套餐。Conda 通道允许用户创建包的内部“存储库”,我们的客户希望使用这些通道(而不是 pip)在 Domino 计算环境中安装包。

这是一个很容易解决的用例。因为 Domino 环境是基于 Docker 映像构建的,所以我们可以简单地在基本环境中安装 conda。我们将通过使用以下 Docker 指令创建一个环境来展示这一点,这些指令是我们从网上获得的:

RUN \

  # Install Anaconda for Python 3.5 v 4.2.0 (current as of 1/27/2017)

  wget -q https://repo.continuum.io/archive/Anaconda3-4.2.0-Linux-x86_64.sh -O anaconda.sh  \

  && yes | bash $HOME/anaconda.sh -b -p /usr/local/anaconda \

  && export PATH=/usr/local/anaconda/bin:$PATH \

  && conda update -q -y --all \

  && ipython kernel install

RUN \
# IPython, Python 3.6; conda can't install due to permissions; conda install soft-linked \
export PATH=/usr/local/anaconda/bin:$PATH \
&& echo 'export PATH=/usr/local/anaconda/bin:${PATH:-}' >> /home/ubuntu/.domino-defaults \

# Allow conda install to access install directory
&& chown ubuntu:ubuntu -R /usr/local/anaconda \
&& chown ubuntu:ubuntu -R /home/ubuntu/*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传我们已经构建了这样一个环境,并通过我们的托管平台提供给数据科学家:只需从项目“设置”页面的环境菜单中选择它。如果您在防火墙后运行 Domino 的私有部署,请告诉我们,我们可以与您分享。利用这个环境,现在可以从终端访问 Anaconda 的所有 python 包。简单地输入conda install opencv将使用 conda 包管理器来处理安装和依赖关系。

向 Domino 环境添加动态行为

Domino 环境不必完全是静态的,它们可以保持灵活性和动态行为,同时保持它们的可复制性。在本节中,我将讨论我们如何利用先进的 conda 特性实现动态配置。

conda 更高级的用途之一是“conda 环境”的概念这些为开发人员提供了一种方式,在一个 yaml 文件中声明性地列出一个项目所需的所有包。一个 conda 环境的例子可以在 Chris Fonnesbeck 的关于 PyMC3 概率编程环境的教程中找到。在这个存储库中,有一个 environments.yml 文件。这个文件描述了运行 PyMC3 的所有 python 要求和提供的示例笔记本。这个 environments.yml 文件如下所示:

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

以这种方式定义环境是一个吸引人的愿景,但不幸的是在实践中并不成功,因为软件包通常依赖于操作系统级的依赖项和系统库。Domino 环境提供了 conda 环境功能的超集,因为 Domino 环境是基于 Docker 映像的,Docker 映像允许将需求定义到 OS 级别。

为了展示 Domino 环境的灵活性,我们扩展了之前构建的 conda Domino 环境来支持 conda 环境。如果环境与包含 environments.yml 文件的 Domino 项目一起使用,它将:

  1. 动态发现它
  2. 构建康达环境
  3. 使其对执行引擎可用。

Domino 环境在可重现运行的执行生命周期中有许多强大的钩子可用。值得注意的是,我们能够在脚本执行前后注入代码,以便提供合理的环境配置。可以利用 Domino 注入的环境变量并编写类似这样的高级行为。这个示例 shell 脚本就是在定制 Domino 环境中动态引导 conda 环境所需要的全部内容。

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

通过利用 Domino 最近发布的增强的 git 集成和定制环境,有可能利用 conda 发行版,以及诸如 conda 环境这样的高级特性。

当与同事分享时,或者在将来使用时,这种环境没有不起作用的风险。Domino 环境保证配置的行为是可预测的。“它在我的电脑上工作”的老问题不会再次出现。

利用现有的构建模块,我们创建了一个定制环境,它允许我们的客户利用 conda 发行版及其现有的通道基础设施,但仍能获得 Domino 环境的所有优势,例如对操作系统配置的严格控制,以及实验的完全可再现性。

结论

Domino 建立在抽象的基础上,这些抽象是我们多年来在数据科学平台领域作为一个有远见的人所策划的。Domino 环境为您的包提供了灵活性和控制,同时降低了包漂移或无法重新创建栈或环境的风险。

这种方法足够灵活,可以包含更专业的包管理工具,如 conda。为此,我们很高兴现在提供一个预装了 conda 的托管环境,我们也很高兴让那些在防火墙后部署了 Domino 的客户也能使用这个环境。

Domino 环境,以及我们可扩展的计算和再现性基础设施,使数据科学团队能够以无与伦比的灵活性进行实验和创新。如果您对 Domino 感兴趣,但是担心一些特殊的需求或依赖性,请求一个演示来看看 Domino 环境有多灵活和强大。

Bouwe Brouwer 的横幅, CC BY-SA 3.0 ,通过维基共享。

Jupyter 的可复制仪表板和其他重要功能

原文:https://www.dominodatalab.com/blog/reproducible-dashboards-great-things-jupyter

在最近的 Domino 数据科学弹出窗口上,Domino 的研究工程师 Mac Rogers 展示了创建 Jupyter 仪表板的最佳实践。

会话摘要

在这个数据科学的弹出式会议中,Domino 的研究工程师 Mac Rogers 深入探讨了在 Jupyter 中创建可再现仪表板的技巧和最佳实践。数据科学家使用 Jupyter 来探索数据、测试想法、编写代码和共享工作。然而,创建交互式仪表盘或快速总结研究结果的方法,使数据科学家、数据科学经理和利益相关者能够进一步了解他们所做的工作及其结果。Mac 认为,有了真正可复制的仪表板,如果“你实际上已经证明了一些关于世界如何运转的东西……那个结论是任何人都可以得到的,不管他们采取什么途径。”

本次会议的几个重要亮点包括

  • Jupyter 仪表盘概述及其在数据科学生命周期中的作用
  • 再现性的不同定义和应用
  • 用 Jupyter 的魔法命令打开可能性
  • r 使用 rpy2(一个开源包)嵌入在 Python 中运行
  • 在您的笔记本上渲染 HTML,等等

如欲了解更多关于本次会议的见解,请观看视频或通读文字记录。

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

演示文稿的视频记录

谢谢你加入我们。我要开始了,所以我不会逗留太久。

我们将讨论使用 Jupyter 的可复制仪表板。我们将对 Jupyter 做一个简单的概述,以防有人不熟悉。

一点我自己的背景。我叫麦克·罗杰斯。我在多米诺工作。我有化学工程的背景,然后在对冲基金做定量研究,现在在多米诺工作。

开始之前,我们跳得太远,所以我想涵盖的第一件事是“什么是仪表板?就数据科学生命周期和数据科学家的工作而言,它们到底有什么用处?”

我没有意识到,格雷格是一个伟大的数据可视化专家,也是一个制图师。因此,不幸的是,我的演示中有一个地图示例,你们可能会因此对我做出判断。接下来我们要讨论的是,“什么是再现性?那么,为什么这在数据科学和数据科学生命周期的背景下很重要呢?”最后,我们将介绍一些使用 Jupyter 做更多事情的技巧和诀窍。我们会看到你对朱庇特有多熟悉。

这是一个很好的继续。"你们中有多少人知道 Jupyter 是什么或者以前用过 Jupyter?"好的,很好。“你们中有多少人认为自己是高级 Jupyter power 用户,每天都在工作中使用它?”好的,很好。几个月前,我在 JupyterCon 给了这个演讲一个味道,它是一个非常不同的动态。希望这对你有用,而不是多余的。

但是我首先想讨论的主要问题是,“什么是仪表板?”所以你可以把仪表板想象成一种综合信息的方式。它不仅仅是单一的数据可视化。它是一个数据可视化的集合,给你一些你想要讲述的故事的想法,或者你希望你的观众或你的观众从你所做的任何分析中获得的信息,或者你正在进行的任何项目的最终目标。

我从加州大学圣地亚哥分校的 Philip Guo 那里偷来了这个数据科学生命周期。郭在他的博士论文期间,在数据科学成为事物之前,意识到他创建了数据科学生命周期,作为他对定量分析和定量分析如何工作的元分析的研究的一部分。这里的想法是,“仪表板在这个数据科学生命周期中处于什么位置?”。它可以有一个完整的其他话题,就像数据科学研究或定量研究生命周期中经历的所有各种事情一样。但是,作为一名数据科学家、定量研究人员或定量研究人员团队的经理,当您需要了解他们在做什么时,仪表板才真正发挥作用。并了解他们所做的工作以及他们所做工作的结果。

这就涉及到传播部分,不仅仅是写一份书面报告,更是一种快速总结你所有发现的方式;对你的业务的某一部分的长期的、持续的看法;你的学术工作;或者你试图解释的世界的一部分。

Jupyter 笔记本很有趣,因为它们涵盖了所有这些东西。从数据采集到清理,一直到实际分析本身。该分析的迭代以及实际生产你一直在做的东西。

在学术环境中,你要写一篇论文,并把一些结果提交给期刊。但在企业界,你必须证明你的成果是有价值的,然后帮助企业利用这些成果。这不仅仅是一些非常好的见解,而是通过你所做的工作来改变业务运营的方式。仪表板适合这个周期的后期,你把你的工作成果传播给其他人。这就是我们在这个生命周期中所处位置的一些背景。

Jupyter 笔记本的价值不可思议,但我们只关注最后一件。关于再现性方面的第二个问题是“再现性在可视化或仪表板的上下文中意味着什么,或者甚至像任何数据科学工作一样?”不仅仅是“其他人能运行这个代码吗?”因为你可能认为有能力以一种其他人也可以消费的方式传播你的成果。“但他们能得出同样的结论吗?”这不仅仅是他们可以像你执行代码一样执行代码。“他们能接触到您使用过的相同数据吗?但是他们能像你一样经历探索、分析、实验和总结的过程吗?”这对不同的行业有不同的意义。

当我在金融服务领域工作时,有一种想法是“我开发的这种交易策略,当它实际上在市场中时,与在我的模拟中相比,会产生钱吗?”这是一个结果的再现性,“这实际上增加了我认为它会增加的价值吗?”这当然不仅仅适用于金融领域。金融界还有另一个可复制性的方面,“当我开发的这个系统化的交易策略出现在证券交易委员会面前时,它会在哪里产生同样的系统化的结果?”

因此,在生产中使用它与在审计中使用它时,能够出于相同的原因实际生成相同的结果。这也适用于保险业,你必须证明你建立的模型没有任何偏见或歧视,而且它们每次都以相同的方式分析相同的数据。

有趣的一点是,学术界也有这种可重复性的想法,有一个非常流行的统计数据,比如“有多少百分比的学术研究是可重复的?”这是一个非常低的数字,人们实际上可以去另一个实验室,复制,做同样的结果,得到同样的实验。从我高中的化学课开始,或者像那些教科书一样,可复制性,重复性和再现性之间是有区别的?

这真的很有趣,在过去的三四年里,在计算机科学领域和更传统的化学或生物学领域,对于这些术语的含义有一些分歧。我不会说太多。我不会就哪一个意味着哪一个表明立场,但我的想法是,基于相同的计算,使用相同的数据,使用相同的信息,简单地得到相同的结果是有区别的。有点像你虚张声势,你在论文中得出的结论,实际上是可以用同样的信息得到的。

您可以采取更进一步的措施,我认为这在数据科学领域更为重要。这不仅仅是我可以执行相同的代码,相同的方式,就像它今天会以六个月前的方式运行吗?

但是给同一个问题一个新的解释,“我能达到同样的目标吗?”因此,这可能是设计一个新的实验,在一个新的数据集上,使用新的方法或材料,“根据我选择的路线,结果会是一样的吗?”这更多的是在整体可再现性的领域,我得到了相同的结论,就像测试我的无效假设给我带来了相同的结果。

不管我使用的是哪种数据集,也不管我在什么环境下工作,这就像圣杯一样。这并不是说你已经完成了一系列的指令,并能证明这些指令得出了相同的结论。但是如果你真的证明了这个世界是如何运转的……这个结论是任何人都可以得到的,不管他们采取什么途径。

为了做到这一点,你要做的不仅仅是简单地写一份清单,让其他人遵循。你必须从头到尾解释整个过程。这是我努力实现的目标。这些是我前进道路上的障碍。这些是我认为我将要克服的障碍。这就是我将要围绕这些来设计我的实验的方式,这样我得出的结论是全球适用的,而不是非常狭隘的。这是一个关于可复制性的大讨论。有一个宾夕法尼亚大学的教授,他有一个关于语言学和语义学的博客,他有一篇关于这三者区别的文章,如果你想看的话,非常有趣。

最后一块进入木星本身。我想在这里花一点时间谈谈 Jupyter 如何适应这个生命周期。第一,听起来很多人都知道朱庇特。一个基于网络的应用程序,让你运行代码,添加评论,添加描述,可视化,它真的很强大。如果我们回到数据科学的生命周期,它通常是数据科学家或研究人员使用的工具。他们编辑脚本或执行代码,检查输出,这对于让我测试这个东西的迭代周期来说真的很棒。“让我看看结果。让我展示一下利益相关者。让我把它带回来。”

我们看到 Jupyter 在这个生命周期中如此有价值的一个方面,不仅仅是这个狭窄的部分,是许多数据科学家或研究人员知道当他们从一个环境到学术环境,或者从一个更重研究的环境到企业环境时,他们喜欢使用什么工具,在那里你必须证明你正在增加的价值,或者展示你正在工作的结果。事实上,学习一门全新的语言,或者全新的系统是一件非常痛苦的事情,这是为了让它可视化。或者以一种其他人可以利用的方式来做,这些人不是程序员、数据科学家,或者不懂 Python、不懂 r。

Jupyter 如此有价值的原因之一是你可以在一个罩下结合许多不同的工具和技术。在某种程度上,让你能够很容易地将你产生的结果传递给组织的其他成员。从 Greg 在我面前展示的内容来看,这些是一些非常酷的强大地图,我不知道是否有任何数据科学家能够在项目结束后拼凑出这些地图。我当然不能,但是不要相信我的话。Jupyter 在这种情况下变得如此有价值的原因是,你可以对你工作的基础平台做一些非常小的改变。您进行数据清理、数据脚本编写、基本图表、模型训练以及为 TensorFlow 引入 GPU 的地方。同样的环境可以用来产生结果和分发你一直在工作和发展的分析…在某种程度上降低了数据科学家或研究人员以其他人可以发现有价值的方式分发他们的成果的门槛。

你不必去学习如何编写 JavaScript 或非常复杂的可视化工具。你可以使用你已经在使用的东西,如果你有记录你正在做的事情的严谨性,并以一种直观的方式展示给其他人利用。现在,如果你组织得当,你可以让一个三到五人的团队使用一个工具。

接下来我想讲几个例子。我将跳到一个 Jupyter 笔记本,里面有一些提示和技巧。在 JupyterCon 上,这无疑是最有趣的部分,因为每个人都想要所有的代码。希望有一部分观众对逐行代码不太感兴趣,但是我会展示给你们看以证明它是有效的。

使用 Jupyter 最酷的部分之一就是这些神奇的命令。魔法指令背后的想法是他们能够打开 Jupyter 罩下的可能世界。在幕后,Jupyter 只是根据你的工作运行许多不同的内核。我将跳进这个 Python 3 笔记本。太好了。所以这个神奇的命令揭开了幕后可能发生的事情。所有这些不同的命令,如果你熟悉 Jupyter,你们会知道它是什么。对于 Python 2、Python 3、R、Scala、Julia,每个单元都在跨单元的共享内核中运行一个内核。在这种情况下,我们运行的是 Python 3。

所以当我点击这个 LS 魔法命令时,它会显示所有这些魔法命令的列表。我不打算一一列举它们的功能,但我会列举几个真正强大的功能。它将帮助我们制作一个非常酷的仪表板,只要你不是制图师。所以简单的一个只是感叹号。你实际上可以像在终端一样运行。你可以列出这个项目中的所有文件。这对于直接从 Jupyter 内部安装包来说很常见,不需要打开终端,执行你的东西,来回切换。同样的原则也适用,所以如果我只想运行一行,我可以用感叹号运行我的 bash 命令。

如果我想让整个单元执行,作为一个 bash 单元,只需执行% % bash,现在我正在做一些事情,比如检查我正在运行的 Pandas 的版本。这并不仅仅局限于 bash。在这个例子中,我只说我使用的 Python 版本,Python 3。因为 Pythonistas 就在上面,你很快就会意识到这是行不通的,因为这不是 Python 3 的语法。这是 Python 2 语法。我不知道是否有人曾试图在一个团队中工作,这个团队总是在争论我们应该使用哪个版本的 Python。但是有了像 Jupyter 这样的东西,你就可以绕过它了。你不必让每个人改变他们的语法或者重写他们所有的代码。使用 Python 2 的魔力,你可以在 Jupyter 笔记本上运行 Python 3 中的 Python 2 代码。所以我们执行这个,现在在 Python 3 笔记本内部,我们在 Python 2 内核内部执行 Python 2。不需要安装不同的笔记本,不需要使用 Anaconda 来管理全新的环境。就在那里。

好吧,但还有更多。有一个开源包叫做 rpy2。“观众中有 R 用户吗?”好的,很好。所以你会喜欢这个而不是 JupyterCon。所以现在,我们可以简单地开始在这个 Jupyter 笔记本里面使用 R。当然,Jupyter 的用户会意识到,你可以用 Python 2 做诱饵。同样的原则也适用。您可以在 Jupyter 笔记本下运行 R 内核,但是您也可以在 Python 3 笔记本内运行 R 内核,而不必将它写成传递给 Python 函数的字符串。所以现在,我们用的是 R 3.2,这是它真正酷的地方。

我们将回到运行 Python 的普通单元。我们要去获取虹膜数据集,因为花需要更多的分析。我们实际上可以传递这个 Python 数据框。这是一个 Python 熊猫数据框。我们将把它传递到 R 内核中,因为我喜欢 dplyr 和 ggplot,所以我将在我的 Python 3 笔记本中使用 R 来绘制它。如果你有一个同事更喜欢 dplyr,喜欢管道函数,觉得它们更直观,就像我一样,你实际上可以使用这些 R 命令来分析你的 Python 数据帧。你可以来回传递它们。对于这个问题或那个问题来说,这变得非常容易,我将致力于我最擅长的任何工具,无论什么时候我知道得最多…我会为那种语言切换到这种语言,并根据需要切换回另一种语言。

这变得非常容易,只需挑选你最喜欢的工作。作为社区,这些数据真的很有价值,因为这不是大家都同意的事情。你如何做数据科学工作没有标准。Python 2 正在慢慢地被弃用,虽然很慢,但是很确定,但是人们仍然在使用它。Python 3 开始变得越来越流行。它本身仍然是一种完全不同的动物,把这两者结合起来真的很难。Jupyter 让你很容易团结地作为一个团队工作,而不是像如果你想和这个团队一起工作,你必须去下载 R Studio。如果你想在这个队里工作,你就得施展你的个人魅力。它给了你一个工作的环境,这很好。

所以现在我们只是在讨论一些其他的事情,比如如果你在学术领域做得更多,你可以用 LaTeX 或者任何你想用 LaTeX 做的事情来渲染非常酷的方程。可以用 HTML,真的很甜。我们将在仪表板中使用它。所以只要使用 HTML 的魔力,你现在就可以在你的笔记本里呈现 HTML。这使得交互式图表和可视化变得非常容易。这更多的是技术方面,但也很酷,因为 Jupyter 只是一些内核的 HTML 覆盖。你可以把手伸到引擎盖下摆弄它,这可能很危险,但有一些简单的预设示例。

如果你熟悉 head 函数,它会抓取最上面的几行。它会做一些基本的事情。但是,如果您曾经试图一次查看多个数据框,您必须单独打印它们。这可能是一个小烦恼,但也很容易改变。我们设置了一个 IPython 变量。现在,我们可以在一个调用中渲染头部、尾部、描述它,而不用打印它,超级简单。还有一些非常有用的计时工具,比如评估一个函数完成需要多长时间。您可以使用 timeit 函数。它会运行你的代码一百万次,然后看看平均计算时间是多少。所以我们只是做一个简单的循环,它将运行一百万次循环,并计算出它的速度。如果你在 Jupyter 中评估代码的性能,这真的很简单。

最后是交互式图表、可视化和绘图。所以我们在这个例子中使用 seaborn,他们的基本 pairplot。你们可能熟悉 Matplotlib inline,它可以显示可视化效果。他们最近推出了 Matplotlib Notebook,这使得这些可视化成为交互式的,而不是静态的。比如说我想——pair plots 总是铺天盖地而来——但是我想放大这个特定的片段。我可以对所有相关的视觉化图像都这样做。你可以直接进入,现在它就像一个互动的东西,在我的 Jupyter 笔记本里面。真的很简单。

好了,为了节省提问的时间,我将直接进入最后一个环节,也就是把所有这些结合起来。所以现在,我们可以在细胞之间,细胞内核之间传递信息。这样我就可以写剧本了。我可以把它传递给我的 Python 函数。我可以把它传回 R,反之亦然。我可以呈现 HTML。我可以渲染互动图像。我会一直讲到最后,说我有这个笔记本。我做了一些分析。我希望我的组织中的其他人使用它,看到它,看看它。如果我把这个发给他们,他们就会关机。就像,“这是代码。我不喜欢它。我不要。”

但是,Jupyter 的超级可扩展。我有这个 HTML 的小脚本,你可以在 Stack Overflow 上找到。没什么特别的,只是给了我这个按钮。我可以切换这个代码,所以现在所有可怕的代码都消失了。最后,我得到了我的地图,按照制图师的标准,它看起来可能很糟糕,但根据美国地质服务中心的数据,它显示了美国的地震。我可以看到水力压裂在俄克拉荷马州没有引起任何问题。我可以看到西北地区什么也没发生。真的很棒。所以现在,这是一个非常简单的方法,我可以有一个其他人可以跟随的仪表板。他们可以打开代码,看看我在做什么。他们可以看到我在使用什么库。他们可以看到我的数据源是什么,我在做什么操作,我如何构建可视化。无需重新编写一个全新的应用程序,我就可以像只做迭代分析一样可视化数据,然后与他人分享使用。我没有额外的工作。我已经粘贴了一些很容易在网上获得的片段,现在我有了一个其他人可以使用的仪表板,其他人可以跟随。其他不是程序员的人实际上可以利用并融入他们产生的任何见解。

不幸的是,我没有谈到这张幻灯片,但这是一个将它带回来的好机会。在数据科学项目或定量研究中,您可以生成一些光谱分析,您可以有一个特别的报告,如地震图,它只是显示“嘿,在这个时间点,这是发生的事情。”显然,你可以走极端,就像机器和有 API 的机器对话一样。

可复制的仪表板,甚至像可共享和可用的托管仪表板,真的很有价值,因为它们位于这个区域,这里是人类消费者的更高级的终端。我们正在构建一些没有用的东西,只是想通知一个单独的决定。但是它可以用来告诉你整个思考过程,比如“我如何管理这个团队?或者我该如何处理这一业务?”到“我如何驱动我的公司?,我如何从一个定性的、轶事驱动的组织变成一个一致的、定量的、数据驱动的机构。”这就是这类事情的由来,从“嘿,给我这张我们在该地区的销售图表,到我们基于这些东西的预计收入……以及我如何每天都能看到它?,以及它是如何变化的?”所以这就是仪表板有价值的原因。

Domino 编辑注意:为了可读性,这篇文字经过了轻微的编辑。

可再生数据科学的案例

原文:https://www.dominodatalab.com/blog/reproducible-data-science

再现性是科学方法的基石,它确保不同的团队可以使用相同的方法再现测试和实验。在 数据科学 的背景下,可再现性意味着重新创建模型及其结果所需的一切,如数据、工具、库、框架、编程语言和操作系统,都已被捕获,因此无论原始项目已经过去了多长时间,都可以不费吹灰之力地产生相同的结果。

再现性对于数据科学的许多方面都至关重要,包括法规遵从性、审计和验证。它还可以帮助数据科学团队提高生产力,与非技术利益相关者更好地合作,并提高机器学习产品和服务的透明度和信任度。

在本文中,您将了解可再现数据科学的好处,以及如何在每个数据科学项目中植入可再现性。您还将学习如何培养一种组织文化,促进更大的可复制性、责任性和可伸缩性。

可复制是什么意思?

机器学习系统是复杂的,包含代码、数据集、模型、超参数、管道、第三方包、跨机器、操作系统和环境的模型训练和开发配置。简而言之,如果您无法重现用于构建模型的完全相同的条件,那么重现数据科学实验即使不是不可能,也是非常困难的。要做到这一点,所有的工件都必须在一个可访问的存储库中被捕获和版本化。这样,当需要重现模型时,可以使用精确的训练数据和代码,在精确的包组合中轻松地重新创建精确的环境。很多时候,考古探险可能需要几周或几个月的时间(或者可能永远也不会),而文物在创作时并没有被捕获。

虽然对再现性的关注是数据科学中的一个现象,但它一直是各种行业科学研究的基石,包括临床和生命科学、医疗保健和金融。如果你的公司不能产生一致的实验结果,那会极大地影响你的生产力,浪费宝贵的资源,并损害决策。

再现性很重要的情况

在数据科学中,再现性对于数据科学家将实验发现应用到他们自己的工作中来说尤其重要。

法规遵循

在保险、金融和生命科学等高度监管的行业中,必须记录和捕获模型的所有方面,以提供关于组织内部如何开发和使用模型的完全透明性、合理性和验证。这包括所使用的算法类型、选择该算法的原因以及该模型在业务中的实施方式。遵从的很大一部分包括能够在任何时候精确地再现模型的结果。如果没有一个系统来捕获用于构建模型的工件、代码、数据、环境、包和工具,这将是一项耗时、困难的任务。

模型验证

在所有行业中,模型都应该在部署之前进行验证,以确保结果是可重复的、可理解的,并且模型将实现其预期目的。这通常是一个时间密集型的过程,验证团队必须将用于创建模型的环境、工具、数据和其他工件拼凑在一起,这减慢了将模型投入生产的速度。当一个组织能够立即复制一个模型时,验证者可以专注于他们的核心功能,确保模型是健壮和准确的。

合作

当团队能够协作和复合知识时,数据科学创新就会发生。当他们不得不花费时间费力地重现先前的实验或意外地重复工作时,这种情况不会发生。当所有的工作都很容易被复制,很容易被搜索,就很容易在先前的工作基础上进行创新。这也意味着随着团队人员的变化,机构知识不会消失。

将再现性融入每个数据科学项目

在整个组织中灌输数据科学的可复制性文化需要长期战略、技术投资以及数据和工程领导层的支持。在本节中,您将了解在您的行业中开展和推广可重复数据科学工作的一些既定最佳实践。

版本控制

版本控制指的是跟踪和管理工件变更的过程,比如代码、数据、标签、模型、超参数、实验、依赖性、文档以及用于训练和推理的环境。

数据科学的版本控制的构建块比软件项目更复杂,使得再现性更加困难和具有挑战性。对于代码,有多个平台,如 GitHubGitLabBitbucket ,可以用来在公共存储库中存储、更新和跟踪代码,如 Python 脚本、Jupyter 笔记本和配置文件。

然而,这还不够。数据集也需要被捕获和版本化。环境、工具和包也是如此。例如,这是因为代码在不同版本的 Python 或 R 上可能运行相同,也可能不运行相同。即使使用相同的参数提取,数据也可能已经更改。类似地,为每个实验捕获不同版本的模型和相应的超参数对于重现和复制可能部署到生产中的获胜模型的结果是很重要的。

再现端到端的数据科学实验是一项复杂的技术挑战,使用像 Domino 的企业 MLOps 平台这样的平台可以更有效地实现这一挑战,该平台消除了所有手动工作,并确保了大规模的可再现性。

可扩展系统

构建准确且可复制的数据科学模型需要强大且可扩展的基础设施,用于数据存储和仓储、数据管道、 特征存储、 、模型存储、部署管道和实验跟踪。对于实时预测的机器学习模型,为了快速解决错误和性能问题,可重复性的重要性甚至更高。

端到端的机器学习管道涉及多个组件,可重复数据科学工作的组织策略必须仔细规划工具和基础设施以实现它。工程可再现的工作流需要复杂的工具来包含代码、数据、模型、依赖、实验、管道和运行时环境。

对于许多组织来说, 购买(与构建) 这种专注于可复制数据科学的可扩展工作流是有意义的。

结论

可重复的研究是科学研究的基石。对于像数据科学这样涉及多种工件(如代码、数据、模型和超参数)的跨职能学科,以及各种各样的从业者和利益相关者来说,再现性尤其重要。因此,重现复杂的实验和结果对于团队和组织在做出重要决策时至关重要,例如部署哪些模型、在模型崩溃时确定根本原因以及建立对数据科学工作的信任。

复制数据科学成果需要一套复杂的流程和基础设施,对于许多团队和公司来说,内部构建这些流程和基础设施并不容易,也没有必要。

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

Jupyter 和 Quilt 的可重复机器学习

原文:https://www.dominodatalab.com/blog/reproducible-machine-learning-with-jupyter-and-quilt

Jupyter 和 Quilt 的可重复机器学习

Jupyter 笔记本记录了代码和数据的交互。代码依赖关系很容易表达:

import numpy as np

import pandas as pd

另一方面,数据依赖关系更加混乱:自定义脚本从网络上获取文件,解析各种格式的文件,填充数据结构,并处理数据。因此,跨机器、跨协作者以及随着时间的推移再现数据依赖性可能是一个挑战。Domino 的再现性引擎通过将代码、数据和模型组装到一个统一的中心来应对这一挑战。

我们可以将可再生机器学习视为一个包含三个变量的方程:

代码+数据+模型=可复制的机器学习

开源社区为复制第一个变量代码提供了强有力的支持。像 git、pip 和 Docker 这样的工具可以确保代码的版本化和统一的可执行性。然而,数据带来了完全不同的挑战。数据比代码大,有多种格式,需要高效地写入磁盘和读入内存。在这篇文章中,我们将探索一个开放源代码的数据路由器,被子,它版本化和编组数据。Quilt 为数据所做的与 pip 为代码所做的一样:将数据打包到可重用的版本化构建块中,这些构建块可以在 Python 中访问。

在下一节中,我们将设置 Quilt 与 Jupyter 一起工作。然后,我们将通过一个例子来重现一个随机森林分类器。

推出带被子的木星笔记本

为了访问 Quilt,Domino cloud 用户可以在项目设置中选择“默认 2017-02 + Quilt”计算环境。或者,将以下几行添加到文件下的 requirements.txt:

quilt==2.8.0

 scikit-learn==0.19.1

接下来,启动一个 Jupyter 工作区,用 Python 打开一个 Jupyter 笔记本。

用于机器学习的被子包

让我们用来自 Wes McKinney 的 Python for Data Analysis,第二版的数据建立一个机器学习模型。访问这些数据的旧方法是克隆 Wes 的 git 库,导航文件夹,检查文件,确定格式,解析文件,然后将解析后的数据加载到 Python 中。

有了被子,过程就简单多了:

import quilt

quilt.install("akarve/pydata_book/titanic", tag="features",

force=True)

# Python versions prior to 2.7.9 will display an SNIMissingWarning

上面的代码具体化了 akarve/pydata_book 包的“titanic”文件夹中的数据。我们使用“features”标签来获取合作者已经完成了一些特性工程的包的特定版本。每个被子包都有一个用于文档的目录条目,一个惟一的散列,和一个历史日志($ quilt log akarve/pydata_book)。

我们可以从 Wes 的书中导入如下数据:

from quilt.data.akarve import pydata_book as pb

如果我们在 Jupyter 中评估pb.titanic,我们会看到它是一个包含 DataNodes 的 GroupNode:

<GroupNode>
features
genderclassmodel
gendermodel
model_pkl
test
train

我们可以如下访问pb.titanic中的数据:

features = pb.titanic.features()

train = pb.titanic.train()

trainsub = train[features.values[0]]

请注意上面代码示例中的括号。括号指示 Quilt“将数据从磁盘加载到内存中”Quilt 加载表格数据,如features所示,作为 pandas 数据帧。

让我们将训练数据转换成可在 scikit-learn 中使用的 numpy 数组:

trainvecs = trainsub.values

trainlabels = train['Survived'].values

现在,让我们根据我们的数据训练一个随机森林分类器,然后进行五重交叉验证来衡量我们的准确性:

from sklearn.model_selection import cross_val_score as cvs

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier(max_depth=4, random_state=0)

rfc.fit(trainvecs, trainlabels)

scores = cvs(rfc, trainvecs, trainlabels, cv=5)

scores.mean()

该模型的平均准确率为 81%。让我们将模型序列化。

from sklearn.externals import joblib

joblib.dump(rfc, 'model.pkl')

我们现在可以将序列化的模型添加到 Quilt 包中,这样合作者就可以用训练数据和训练好的模型来复制我们的实验。为了简单起见,titanic子包已经包含了我们训练过的随机森林模型。您可以按如下方式加载模型:

from sklearn.externals import joblib

model = joblib.load(pb.titanic.model_pkl2())

# requires scikit-learn version 0.19.1

为了验证它是否与我们上面训练的模型相同,请重复交叉验证:

scores = cvs(model, trainvecs, trainlabels, cv=5)

scores.mean()

表达数据依赖关系

通常一台 Jupyter 笔记本依赖于多个数据包。我们可以将quilt.yml中的数据依赖关系表达如下:

packages:

  -  uciml/iris

  -  asah/mnist

  -  akarve/pydata_book/titanic:tag:features

精神上quilt.ymlrequirements.txt很像,但是对于数据来说。使用quilt.yml的结果是,你的代码库仍然小而快。quilt.yml伴随您的 Jupyter 笔记本文件,以便任何想要复制您的笔记本的人可以在终端中键入被子安装并开始工作。

结论

我们展示了 Quilt 如何与 Domino 的 Reproducibility Engine 协同工作,以使 Jupyter 笔记本变得便携,并为机器学习提供可复制性。棉被的社区版由开源核心驱动。欢迎代码贡献者。

计算科学中的可复制研究

原文:https://www.dominodatalab.com/blog/reproducible-research-using-domino

这篇客座博文由斯泰伦博斯大学 MIH 媒体实验室数理统计专业的硕士生 Arnu Pretorius 撰写。Arnu 的研究兴趣包括机器学习和统计学习理论。

在科学中,复制很重要。原因在于,如果一项研究的发现可以被复制,参与研究的利益相关者就更有可能相信支持或反对某个假设的证据。不幸的是,由于各种原因,重复一项研究并不总是容易的。最初的研究可能非常大(包括成千上万的参与者)、昂贵或漫长(持续多年)。另一方面,许多研究由更适度的分析形式组成,这使它们成为复制的良好候选。

这篇文章关注计算科学,着眼于 Domino 如何被用作可重复研究的工具。第一部分将讨论围绕可重复研究的一些概念和想法,第二部分提供一个使用 Domino 的简单示例。请随意跳到您感兴趣的任何部分。

为了更好地介绍可重复研究,请看一下罗杰·彭的 Coursera 课程,这是约翰·霍普金斯大学数据科学专业的一部分。事实上,这里介绍的许多介绍性内容都是基于本课程的幻灯片。

可重复的研究

给定一篇报告分析结果的科学文章,下图提供了三个不同级别的复制。

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

“黄金标准”指的是完美的复制。这意味着在测量机制、计算硬件和软件以及分析中采取的步骤方面的所有必要资源都是可用的,以至于可以进行原始研究的精确复制。另一方面,根本没有复制。这里只给出了关于文章中提供的发现的信息。

可重复的研究介于两者之间。这个想法是让所有的数据、代码和相关的文档都可用,这样研究人员就能够重现这项研究。这种可访问性是至关重要的,因为通常一篇文章的读者的旅程是从作者的另一端开始的(如下所示)。

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

作者从左到右,首先收集数据,处理数据,然后通过计算分析得出结果。每一步之间都有代码段,这些代码段执行将原始数据转换成整洁数据或将整洁数据转换成结果的任务。最后,所有的发现被总结和浓缩成一篇文章,包括图表和/或数字摘要。相比之下,对复制研究感兴趣的读者从右边开始,然后向左移动。没有数据和代码,读者只能根据文章中提供的信息来解读作者做了什么。因此,可复制研究的目标是从本质上给予读者从与作者相同的位置开始的能力,同时以代码的形式添加每个转换之间的缺失部分。因此,要想让读者了解研究的可重复性,需要具备四个条件:

  1. 收集的数据。
  2. 处理和分析代码。
  3. 数据和代码文档。
  4. 公众对分发平台的访问。

然而,困难仍然存在,因为读者必须下载数据、代码和文档,以及研究文档,以便能够理解哪个代码段适用于哪个结果以及如何重新运行分析等。此外,读者可能无法获得与撰写文章的研究人员相同的计算资源。然而,下面的例子展示了如何使用 Domino 来规避这些问题,使重现研究更容易、更快。

使用 Domino 的示例

本例中的数据来自 Gareth James、Daniela Witten、Trevor Hastie 和 Robert Tibshirani 的《统计学习入门》。它研究产品销售和各种媒体如电视、报纸和广播的营销预算之间的关系。

注:出于示例目的,数据中添加了一个异常值。

探索性数据分析

一旦收集了原始数据,分析的第一步通常包括探索数据。这是为使用 R 语言的电视预算而做的。

# read in the data
adsData <- read.csv("Data/Advertising2.csv")

# plot sales per thousand from tv advertising
library(ggplot2)
ggplot(adsData, aes(x=TV, y=Sales)) + geom_point(col="darkorange") +
ylab("Sales (per thousand units)") + xlab("TV budget (per thousand dollars)")

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

预算的大小和销售额之间似乎有明显的正相关关系。然而,负预算设法渗入数据中,这很可能是数据收集错误。

处理代码

下面的代码删除了具有负预算的点,这类似于将原始数据转换为已处理数据的分析中的一段代码。

# processing (remove outlier)
outlierIndex <- which(adsData$TV < 0)
adsData <- adsData[-outlierIndex,]

现在数据已经处理完毕,可以进行数据分析了。

分析代码

为了更具体地描述预算和销售之间的关系,可以用线性模型来拟合数据。

# fit linear model to the data
lmFit <- lm(Sales~TV, data=adsData)

# print coefficients
lmFitCoef <- coef(lmFit)
lmFitCoef
## (Intercept) TV
## 7.03259355 0.04753664

根据线性拟合,电视预算增加 1000 美元将大致导致额外销售 47 台。拟合如下图所示。

# plot fit
ggplot(adsData, aes(x=TV, y=Sales)) + geom_point(col="darkorange") +
geom_abline(intercept = lmFitCoef[1], slope = lmFitCoef[2], col="blue") +
ylab("Sales (per thousand units)") + xlab("TV budget (per thousand dollars)")

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

现在分析已经完成,让我们看看如何使用 Domino 来重现结果。

使用 Domino 的再现性

简而言之, Domino 是一个企业级平台,支持数据科学家运行、扩展、共享和部署分析模型。这篇由 Jo-Fai Chow 撰写的帖子包含了如何开始使用 Domino 的教程,从启动和运行,到在云中运行您的第一个分析。或者,您可以注册一个现场演示来看看 Domino 提供了什么。所以让我们开始吧。

下面的代码代表了完整的分析管道,创建该管道是为了执行将原始广告数据转换成线性拟合形式的计算结果的所有必要步骤。代码被保存为 lmFitAdvertising。R

#########################################################
# Fit linear regression model to the advertising data #
#########################################################

# read in the data
adsData<- read.csv("Advertising2.csv")

# processing (remove outlier)
outlierIndex <- which(adsData$TV < 0)
adsData <- adsData[-outlierIndex,]

# fit linear model to the data
lmFit <- lm(Sales~TV, data=adsData)

# print coefficients
lmFitCoef <- coef(lmFit)
lmFitCoef

# plot linear fit
library(ggplot2)
ggplot(adsData, aes(x=TV, y=Sales)) + geom_point(col="darkorange") +
geom_abline(intercept = lmFitCoef[1], slope = lmFitCoef[2], col="blue") +
ylab("Sales (per thousand units)") + xlab("TV budget (per thousand dollars)")

使分析可重现的第一步是确保所有需要的数据和代码都位于 Domino 项目文件中。如果整个分析是使用 Domino 执行的,那么文件应该已经存在于项目中,但是 Domino 还允许上传数据和代码,如下所示。

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

接下来导航到启动器页面来创建一个新的启动器。这些是运行在分析代码之上的自助式 web 表单。

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

要创建启动器,只需点击新启动器按钮,给它一个名称和描述,并选择启动器应该运行的程序(在本例中为 lmFitAdvertising。r)。

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

另一个可用选项是设置硬件层,在本例中设置为“project default”。这个选项真的有用。如果所有的分析最初都是使用 Domino 进行的,那么研究人员可以通过确保为启动器选择分析中使用的相同硬件层,为读者消除可能的计算障碍。最后,点击右上角的保存启动器,保存启动器。

在可以公开访问启动器之前,必须更改项目设置。前往设置并点击访问&共享选项卡。

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

内部访问和共享选择公共:任何人都可以查看选项,并勾选允许匿名用户运行执行框。

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

这些设置将使项目可公开访问,并允许任何具有指向启动器页面的 URL 的人运行启动器。所以现在一切都在多米诺这边准备好了。

这个例子将使用 LaTeX ,但是步骤可能与 Word 非常相似。下面的代码显示了一个表格(通常可能出现在文章中),该表格显示了线性拟合的结果(回归系数)。

\documentclass{article}
\usepackage{hyperref}

\begin{document}

\begin{table}[!htbp] \centering
\caption{Linear fit to advertising data}
\href{https://trial.dominodatalab.com/u/ArnuP/advertising_analysis/runLaunchers}{\begin{tabular}{@{\extracolsep{5pt}} cc}
%\\[-1.8ex]\hline
\hline \\[-1.8ex]
\textbf{Intercept} &amp; \textbf{TV (Slope)} \\
\hline \\[-1.8ex]
$7.0326$ &amp; $0.0475$ \\
\hline \\[-1.8ex]
\end{tabular}}
\end{table}

\end{document}

通过使用 hyperref 包将表格包装在 href 标签中,可以使表格可点击,链接到网络上任何给定的地址。因此,通过插入启动器页面 URL,拥有文章电子版的读者将能够点击表格并被引导至符合线性模型的启动器。点击运行按钮,可再现结果。

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

Domino 提供了更改运行标题以及将结果发送到指定电子邮件地址的选项。一旦这些被填充(或留空),读者再次点击运行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 代码运行时显示代码打印输出。可以在下面的红框中查看系数。

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

要查看图表,读者可以点击查看结果。在这里,系数和图都将被显示。然后可以使用位于右上角的按钮下载该图。

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

这就是使用 Domino 的可重复研究。总之,Domino 允许作者:

  • 在云中进行整个分析。
  • 下载将在文章中使用的计算结果。
  • 通过创建可公开访问的启动器并将它们链接到文章的电子版,使结果可重复。

这样,读者就不必执行以下任务了:

  • 下载重现研究结果所需的数据、代码和文档。
  • 确保有足够的计算能力来重新运行分析。

这个例子的工作版本可以在这里找到。它包括构建的 LaTeX 文件和生成的 PDF,后者包含前面介绍的表格。PDF 将引导您到再现该示例的启动程序。您还可以通过访问 Domino 平台上的项目来直接访问启动器。

版本 2:下一届数据科学领袖峰会,纽约,5 月 23-24 日

原文:https://www.dominodatalab.com/blog/rev-2-next-data-science-leaders-summit-nyc-may-23-24

By Paco Nathan, Managing Partner, Derwen, Inc. on March 06, 2019 in

这篇文章最初出现在 KDnuggets 上。


修订版 2,纽约市,5 月 23 日至 24 日

字母“REV”开始了许多在数据科学实践中很重要的单词:revision、reveal、review、revenues、revolution 等。去年在我们的第一次 Rev 会议期间,数据科学领导者揭示了与生产中的数据处理和机器学习模型相关的风险的许多方面。自 2018 年以来,非常贴切地代表了对与数据相关的风险格局的全球现实检查:GDPR 和数据隐私合规性,广泛的安全漏洞和泄露的数据,专门针对机器学习模型的网络威胁,关于 Cambridge Analytica 的新闻报道,以及越来越多的人认识到我们通过道德数据科学对社会影响的责任。我们回顾了问题和解决方案。我们修正了我们对数据科学优先级的想法。我们向前看。

今年, Rev 2 探讨了关于数据科学团队的主题。除了问题和解决方案,我们如何在复杂的环境中管理团队?自从工业界开始接受数据科学的实践以来,十年已经过去了。我们有学习数据科学的很好的例子,以及人们如何提高技能加入行业团队——正如加州大学伯克利分校有数千名学生的鼓舞人心的“数据 8”课程所展示的那样。虽然获得成为个人贡献者的技能非常有价值,也非常受欢迎,但在企业中领导数据科学团队的实践却是完全不同的事情。

例如,行业已经认识到机器学习如何强制全新的过程。简单地重新应用软件工程过程,宣布一个组织是“敏捷的”,这是一个灾难的处方——因为去年关于风险的主题应该牢牢地固定在脑海中。

我们在哪里可以找到关于数据科学领导力和新兴流程的指导?首先仔细看看成功的团队。他们的最佳实践是什么?哪些是他们难以学习的课程?我们怎样才能在他们的见解和例子上有所建树?

Rev 2 将会特别强调这一点。请于 5 月 23 日至 24 日向耐克、网飞、Slack、Stitch Fix、Domino Data Lab、微软、戴尔、Red Hat、谷歌、Turner Broadcasting、Humana、Workday、Lloyds Banking、BNP Paribas Cardif 和许多其他公司的数据科学团队和领导者学习以下主题:

  • 如何开发成熟、可持续的数据科学实践,并对业务产生切实影响。
  • 世界领先的模型驱动型组织为在内部提升数据科学而采取的具体步骤。
  • 扩大跨团队协作的最佳实践、方法和技术。

我喜欢把今年的焦点想成“团队可以互相学习什么?”

在第二版主题演讲中,我们将邀请诺贝尔奖得主、《思考,快与慢》的作者丹尼尔·卡内曼。思考:我们为什么需要模型?公司在哪里没有恰当地使用模型,为什么?为了在业务中成功应用模型,数据科学组织应该采取哪些实际步骤?卡尼曼博士的大部分生活和工作都致力于人类决策科学。在这个人工智能应用的时代,拆分决策过程是企业面临的一个关键挑战,卡尼曼博士带来了至关重要的见解。

Nike 的 Tom Kornegay、网飞的 Michelle Ufford 和 Slack 的 Josh Wills 这三位都是主题演讲人,我有幸与他们的团队交谈,了解他们所面临的挑战以及他们如何应对企业数据科学成功案例。

我最喜欢的另外两位演讲者加入了 Rev 2:Maryam Jahan shahi,tap recruit的研究科学家,介绍了他们如何利用数据科学来帮助改变我们对如何雇用数据科学家的想法,特别是在培养专业知识和包容性方面。此外,由 DJ Patil 领导的 LinkedIn 开创性数据科学的校友 Pete Skomoroch 创建了一家名为 SkipFlag 的人工智能公司,专注于企业解决方案,一年前被 Workday 收购。也就是说,Pete 已经看到了从初创企业到企业的全方位数据科学实践,他将介绍人工智能的产品管理。在本·洛里卡和我最近进行的一系列关于企业采用人工智能的行业调查中,近五分之一的公司称“难以识别适当的商业用例”是他们在生产中部署机器学习的主要瓶颈。换句话说,在你雇佣了一小群数据科学家和数据工程师之后,人工智能领域的产品管理仍然存在广泛的人才缺口。我期待着 Maryam 关于招聘的见解,Pete 关于产品的见解,以及 Rev 2 演讲者关于成功的数据科学如何管理他们的实践的全部内容。

请加入我们 5 月 23 日至 24 日在纽约举行的 Rev 2 的对话。

Twitter Facebook Gmail Share

Rev 3 表明数据科学确实在主宰世界,而 MLOps 正在推动这一趋势

原文:https://www.dominodatalab.com/blog/rev-3-shows-data-science-really-is-running-the-world-and-mlops-is-spurring-on-the-trend

数据科学管理世界的新兴力量——长期以来甚至对该行业的个体从业者来说也是部分模糊的——本周在纽约市举行的影响深远的 Rev 3 会议的开幕日得到了充分展示,这感觉就像是一个年轻职业的初次社交舞会。

第一天的 Rev 3 计划重点介绍了商业、生命科学、计算机技术以及数据科学本身的领导者的主题演讲,强调了从职业在做出关键商业决策中的重要性到其在制药和金融等特定行业中的影响。首先,会议组织者 Domino 数据实验室宣布了新的机器学习操作(MLOps)工具,可以更快更容易地创建和维护让世界运转的模型。

“永远记住,你的所作所为和让世界变得更美好之间是有联系的。我非常清楚,你们也应该清楚,”前海豹突击队指挥官兼 VMware 首席数字转型官 Mike Hayes 对观众说,观众主要由参加为期两天的会议的数据科学家、It 专业人员和数据科学负责人组成。

“MLOps 是我们决策能力的巨大提升,”Hayes 说,并补充说,数据科学为当今几乎每个学科的决策提供了信息,从商业到军事到政府,等等。

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

疫情,惊人的成果推动了数据科学作为一门学科的飞速发展

主题演讲人 Linda Avery 是威瑞森的首席数据和分析官,她的故事强调了数据科学专业在商业中几乎惊人的发展速度。两年半多以前,用她自己的话来说,埃弗里是“一个人的部门”。

Avery 着手组建一个围绕数据科学能力构建的“卓越中心”,并为其配备人员和资源。如今,他领导着一个拥有 1000 多名员工的组织,该组织参与了从手机信号发射塔定位到疫情期间威瑞森商店人员配备等各方面的学科应用。她说,该集团现在“收入近 20 亿美元”,现在是威瑞森战略决策的驱动力。

“新冠肺炎对世界来说是可怕的,但它对数据科学来说是一个伟大的机会,”埃弗里说,因为像威瑞森这样的公司必须回答关键问题,并使用数据模型和 MLOps 进行预测,以保持运营并应对前所未有的情况。

类似地,在从金融到制药和生命科学的领域,相关领域相对较新的数据科学家和技术专家大军已经动员起来,以解决组织和技术复杂性不断增长的问题。诺贝尔奖得主詹妮弗·杜德纳(Jennifer Doudna)触及了这个主题,她在 CRISPR 基因编辑方面的工作给生物技术和寻找严重疾病的治疗方法带来了革命性的变化。

Doudna 告诉 Rev 3 的观众说:“过去十年发生的事情是,生物学研究确实发生了变化,更加专注于需要复杂方法和需要不同专业的许多人的专业知识的问题。”

这种不断增加的复杂性通常需要大量数据来解决特别困难但极其重要的问题。

“你必须对数据有一定的理解,然后才能意识到你有了新的东西,”她说。

在持续交付的压力下,MLOps 对于学科的成功至关重要

数据科学在众多领域的成功,以及它在疫情的巨大压力下对业务决策的加速和支持,也给这个年轻的学科带来了压力,要求它每次都提供成功的见解和成果。

“数据科学的游戏时间已经结束了,”埃尔普林说。“如果公司不能将数据科学转化为商业影响并描述这种影响——如果工作仍然被转移到人工智能创新实验室——他们已经落后了,不管他们是否意识到这一点。”

埃尔普林告诉他的听众,Domino 数据实验室发布的 Domino 5.2 是加速数据科学家工作的解决方案,同时仍然给他们创新和使用他们需要的任何工具来解决重要问题的自由。

随着数据科学家使用更多的软件和计算,IT 需要管理更多的成本和运营负担。Elprin 说,Domino 的持久工作空间开发环境现在更加智能和高效,具有一个名为 Intellisize 的新功能,可以推荐环境的最佳大小,从而节省资金,否则这些资金会浪费在未使用的资源上。对于数据科学团队来说,这意味着更低的复杂性和更高的生产力。对于 IT 来说,消除多余的工作空间容量并自动删除废弃的工作空间可以显著降低每月的云存储成本。

使用雪花进行数据库内计算的灵活模型部署

编排数据的移动需要定制开发工作,并强制执行手动解决方案,这消耗了数据科学家和 ML 工程师的宝贵时间,并带来了不必要的风险。Domino 已经与 Snowflake 合作,在 MLOps 生命周期中集成端到端的工作流。Domino 5.2 将 Domino 中模型构建的灵活性与 Snowflake 的数据库内计算平台的可伸缩性和强大功能结合在一起。客户可以使用 Snowflake 的 Snowpark 在数据库中训练模型,然后将这些模型直接从 Domino 部署到 Snowflake 数据云中进行数据库内评分,从而通过跨 IT 和数据科学团队的通用数据和部署平台简化企业基础架构。

Domino 5.2 为模型衰退的威胁性问题提供了一个解决方案

最后,Elprin 演示了在雪花数据云环境中简化实时模型监控的新功能,这是对模型衰退威胁的一种回应,当模型不再像最初测试和部署时那样准确时,就会出现模型衰退。这通常是由于业务条件、客户偏好和其他因素的变化。如果没有对数据漂移和准确性的主动监控,公司可能会根据过时的模型做出错误的业务决策,尤其是在快速变化的时代。

有了 Domino 5.2,数据科学团队现在可以为部署到雪花数据云中的模型自动设置预测数据捕获管道和监控。Domino 现在还将不断更新数据漂移和模型质量计算,以提高模型准确性,并最终做出更好的业务决策。

反光

原文:https://www.dominodatalab.com/blog/revlections

By Mac Steele, Director of Product, Domino on June 01, 2018 in Perspective

本周,我们在旧金山举行了有史以来第一次 Rev 峰会,召集了 300 多位数据科学领袖,为期两天。演讲者和与会者讨论了数据科学行业的战略方向,并在其他领导者之间分享了战术技巧。我们 Domino 主办 Rev 是因为我们听到并感觉到市场上存在一个缺口,需要一个论坛,让领导者们能够聚在一起,带走一些实质性和实际的东西。他们可以在周一早上开始工作。结果超出了我们的最佳预期。我们想为那些无法亲临现场的人分享一些亮点。

  • 我们的首席执行官 Nick Elprin 公布了数据科学领域的 Domino 愿景。在他的主题演讲中,他讨论了数据科学领导者社区如何获得千载难逢的机会来帮助建立新的组织能力并释放数据科学的全部潜力。他详细介绍了这种能力的一个新框架,称为模型管理,并通过演示 Domino 数据科学平台的未来,分享了我们如何将这种能力应用到生活中。如果你想了解更多,请看看这篇论文,它更详细地介绍了模型管理。

  • 我们听到了凯茜·奥尼尔和内特·西尔弗发人深省的主题演讲。

    • 《摧毁数学的武器 的作者凯茜谈到了在考虑到所有不同利益相关者的情况下,从更广阔的角度来看待什么是“好”模型的重要性。她建议团队在盲目地直接进入模型构建之前使用一种叫做道德矩阵的工具,特别是当模型开始驱动我们与大多数官僚机构的互动时。
    • 《信号与噪音 的作者 Nate 讨论了概率思维的重要性,以及大数据推动的模型爆炸如何为社会带来了许多问题和机遇。他强调了快速迭代的必要性,引用了气象学家不断从过去的错误中学习和调整的天气预报的巨大进步。
  • 来自 Stitch Fix、谷歌、优步、Airbnb、联合健康集团、摩根大通等模型驱动型公司的领导者分享了他们自己的观点。Bristol-Myers Squibb 的 Nathan Siemers 详细介绍了他的团队如何利用模型发现基因生物标志物来改善癌症治疗。来自穆迪分析的 Jacob Grotta 描述了银行业模型的传奇历史,以及他们如何开发了一个严格的系统来管理这些模型,其他行业可以从中学习。他指出,所有的数据科学家都喜欢把自己当成艺术家,他说在穆迪,真正的艺术是“可观察的、可重复的、 T 透明的。”

  • 会上就如何最好地管理数据科学组织举行了多个小组讨论和一个互动研讨会。领导们就招聘哪些角色、以什么顺序招聘以及数据科学应向谁汇报展开了一场健康的辩论。协作的重要性和再现性的目标是会议中反复出现的主题。许多与会者描述了一种如释重负的感觉,即他们所面临的挑战并不是他们所独有的,他们都很兴奋能够在我们仍处于萌芽状态的行业中形成最佳实践。

总的来说,这是令人振奋的两天,演讲者和与会者愿意分享他们的见解,以帮助推进数据科学管理的新兴实践,这让我们感到谦卑。随着各行各业的数据科学领导者继续打造模型驱动型公司,我们深受鼓舞。

请继续关注 Rev 2019 的更多内容,同时,请留意 2018 年下半年在你附近的一个城市出现的数据科学弹出窗口

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

Twitter Facebook Gmail Share

民意调查发现,对数据科学的信心直线上升:更好的工具是原因吗?

原文:https://www.dominodatalab.com/blog/rocketing-confidence-in-data-science-poll-finds-are-better-tools-the-reason

企业越来越多地在数据科学上下大赌注,以实现雄心勃勃的短期增长,这再次表明,这个迅速崛起的行业正在成为医疗保健&制药、国防、保险和金融服务等领域的巨大创新力量。 在最近的一次民意调查中,近一半的受访者表示,他们公司的领导层预计数据科学的努力将带来两位数的收入增长。2021 年的一项类似调查显示,这一数字仅为 25%,表明人们对年轻职业的期望越来越高。

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

这只是多米诺数据实验室最近 Revelate 调查的发现之一,该调查吸引了该领域相关人员的 151 份回复。近五分之四的受访者(79%)表示,数据科学、ML 和 AI 对其公司的整体未来增长至关重要。整整 36%的受访者称这些技术是他们公司扩张的“唯一最关键的因素”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 商家需要做什么才能收获预期的大收益

公司应该把精力集中在哪里才能获得如此巨大的回报?什么能最有效地帮助新兴学科充分发挥其巨大潜力?调查结果也说明了这些问题,发现:

  • 与扩展和运营数据科学相关的最困难的技术问题 是访问适当的数据科学方法/工具(27%的受访者表示这是他们最大的挑战)和安全性考虑(26%)。
  • 最大的人和流程挑战 仍然拥有足够的数据科学人才,据 44%的受访者称,这与许多的近期调查一致。因此,精明的企业领导人应该尽一切努力尽可能高效和有效地利用他们现有的数据科学团队。
  • 最能帮助数据科学加速其游戏 的改进包括: 增加协作 和按需访问 数据科学工具和基础设施,两者都占 的 43%。

数据科学领导者还强调需要企业 MLOps 平台来帮助他们解决世界上最大的挑战。特别是,他们中的许多人说他们很乐观,因为企业 MLOps 工具能够应对挑战。

例如,谷歌的首席数据科学家 Cassie Kozyrkov 最近承认,人们对这个年轻的职业越来越有信心。 但是随着数据科学变得越来越受重视,像多米诺数据实验室这样的公司正在投资创造和升级工具来支持这个年轻的职业。Kozyrkov 表示,现在专门为数据科学工作设计的工具的功能增加,是帮助从业者和数据科学领导者跟上发展的非常积极的一步。

她说:“例如,多米诺数据实验室为数据科学家制作了 工具 ,这些工具令人难以置信,非常有用,而且非常可爱。”" 那是 为我们数据科学界所倡导的 看起来就像 。"

这项调查是由 Rev 3 的与会者以及他们的团队在 5 月份进行的,Rev 3 是 Domino Data Lab 为数据科学和 IT 领导者举办的一个受欢迎的会议。Kozyrkov 在会议上发言,重点关注数据科学在一些世界上最重要的挑战中的应用,并在 5 月吸引了 800 多名与会者。

容器在 MLOps 和模型生产中的作用

原文:https://www.dominodatalab.com/blog/role-of-containers-on-mlops-and-model-production

容器技术改变了数据科学的发展方式。数据科学最初的容器用例集中在我所说的“环境管理”上。配置软件环境是一项持续的工作,尤其是在开源软件领域,这是大多数数据科学家工作的领域。这通常需要反复试验。这种修补可能会打破依赖性,例如软件包之间或驱动程序和应用程序之间的依赖性。容器为分析专业人员提供了一种将环境相互隔离的方式,允许分析人员试验和冻结黄金状态环境。容器编排在数据科学工作中具有以下优势:

  • 消除 MLOps 生命周期中的中心 IT 瓶颈。

  • 共享代码和研究时,数据科学家可以更好地协作。

  • 旧项目可以立即复制和重新运行。

将模型投入生产是 MLOps 生命周期中的一个关键阶段。容器技术在让 ML/AI 模型进入生产中起到了什么作用?为了回答这个问题,我将借助 Domino 数据科学平台中的一个例子。对于那些不熟悉 Domino 的人来说,快速了解一下背景:这是一个数据科学家运行他们的代码(例如 R、Python 等)、跟踪他们的实验、分享他们的工作以及部署模型的平台。Domino 运行在本地或所有主要的云上。

在我们的示例中,考虑一个出于安全目的需要在内部进行模型研究的组织。但是,该组织希望将生产模型部署到 AWS SageMaker,以满足其客户组织的 IT 需求。Domino 可以使用容器及其 SageMaker 导出功能来满足这个组织的需求。我鼓励您阅读发布在 AWS 合作伙伴网络上的博客How to Export a Model from Domino for Deployment in Amazon sage maker,以便更深入地了解 SageMaker Export。

在这种情况下,Domino 将安装在本地,并像往常一样通过容器化实验协调协作研究,所有这些都通过利用容器环境库的本地硬件运行,这些环境也存储在本地并由 Domino 管理。模型通过验证后,Domino 将整个模型环境打包到一个 SageMaker 兼容的容器中,导出到 AWS SageMaker 进行部署,而不是部署到 Domino 用于研究的同一本地服务器场。

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

Figure 1 – Options for deploying and hosting models created in Domino.

这就是现代组织所需要的灵活性。他们希望避免局限于任何一种架构。就像容器最初为配置环境的数据科学家提供灵活性和自由度一样,它们也可以为组织提供跨平台和架构工作的灵活性和自由度。随着数据科学继续通过 CI/CD 和模型验证等原则强化 MLOps 管道,很容易相信容器也将在这一演变中发挥关键作用。

根据现代需求扩展机器学习

原文:https://www.dominodatalab.com/blog/scaling-machine-learning

这是 ThinkFast 的创始人&首席执行官 Hristo Spassimirov Paskov 在举办的数据科学专题会议。

在丹麦领先的保险公司之一扩展 MLOps

原文:https://www.dominodatalab.com/blog/scaling-mlops-at-one-of-denmarks-leading-insurers

编者按:这是分享开发企业数据科学战略的公司最佳实践的系列文章的一部分。一些文章将包含关于他们使用 Domino 的信息。

最近,在 NVIDIA 的 GTC 会议 期间,我参加了一个小组讨论,讨论保险行业以及 Topdanmark 的 MLOps 规模。

作为丹麦第二大保险公司,我们的目标是提高保险为消费者服务的标准。我们希望为消费者提供更好、更快、更满意的保险体验——无论我们是在制定政策决策还是处理索赔——我们使用机器学习和人工智能来实现这一点。

当我们在 2017 年推出我们的机器学习卓越中心时,我们进行了概念验证,以了解我们如何应用这些技术。我们证明了我们可以使用自然语言处理文档来自动化将近一半的选择过程。由于我们的大部分流程都包含文档,这种潜力对我们来说变得很明显。我们还证明了我们可以应用图像分析(即计算机视觉),这样我们的核保和理赔专家就可以在最需要的地方运用他们的专业知识。

但是,为了将模型集成到我们的运营工作流程中,并在 2018 年前将我们的第一批模型投入实时生产运行,我们必须克服技术和非技术两方面的挑战。以下是我们在 NVIDIA GTC 会议期间重点讨论的一些领域。(你可以在这里 聆听整个讨论 。)

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

确保版本控制和再现性

当我们第一次开始努力时,我们立即意识到,如果没有数据科学平台,我们将在各个机器上到处都有模型,这将使我们的工作难以扩展。我们的早期步骤之一是与德勤顾问合作,确定一个可以帮助我们控制版本、重现结果、访问资源以及分离测试和生产环境的平台。我们认为 Domino 的企业 MLOps 平台是代码优先数据科学家加速研究和扩展的理想平台。例如,我们的团队现在可以轻松地在云中旋转 NVIDIA GPUs,使用 Domino 来选择他们需要的大小和功率,以便他们可以快速测试新的想法。它使我们的数据科学家能够专注于他们擅长的领域-数学建模和数据分析-在安全的环境中使用他们选择的任何工具或方法处理数据,在这样的环境中,我们可以记录工作并确保我们产生影响。

数据科学部门内部经常会讨论是构建还是购买数据科学平台。我们不认为建立一个平台是一个好的选择。从头开始构建可能需要很长时间,并且您需要大量的资源来维护和不断添加新的功能。有了 Domino,我们可以从他们的全球经验中受益,获得我们可能没有想到会要求的新特性,但这些新特性会给我们带来巨大的好处。

投资于机构知识

在建立我们的机器学习卓越中心的过程中,我们也很快意识到我们需要建立一个专家社区,并使他们易于合作。我们与一所领先的大学合作,为我们的团队开设了语言和图像分析高级方法的大师班。我们在几个方面进行了投资——具有擅长解释数据源的领域专业知识的从业者、对高级技术有深刻理解(博士级别)的专家,以及软件专家。我们的大师班确保每个人都对自然语言处理和图像分析有深刻的理解,这两者对我们的成功至关重要。今天,我们继续拓宽我们的专业知识,与欧洲各地在自然语言处理和图像分析方面具有相同技能水平和相同挑战类型的社区交流知识。

此外,当我们选择 Domino 平台时,我们将协作作为核心需求。 通过使 我们的数据科学家更容易分享和发展彼此的想法,我们创建了一个社区,团队成员在其中不断相互激励,推动我们的能力向前发展。

管理模型漂移

我们关注算法的实时曝光,这在技术上比仅仅运行批量模型要求更高。因此,我们需要有信心保持算法的准确性和质量,并证明这些自动化决策的价值。这是一个挑战,我们必须用熟练的人员和先进的模型监测技术来解决。例如,我们有一种算法,它每年为我们节省数百万美元。在我们使用 Domino 来监控模型漂移之前,我们让两位数据科学家花了三个多月的时间来挖掘数据源,以确定一个提供给算法的数据集没有正确格式化,从而导致了模型漂移。今天,我们可以立即看到我们是否有模型漂移以及在哪里寻找,节省了我们大量的时间。

有些人认为你可以将这项工作作为传统 ITOps 流程的一部分留给 IT 部门。但是,通常情况下,它不知道数据源的变化会如何影响算法。我认为,如果您要展示您正在交付预期的价值并快速解决任何问题,企业 MLOps 平台中的实时模型监控功能至关重要。

平衡风险和创新

当我们扩展我们的工作时,我们必须确保考虑到潜在的风险。当然,我们会设置围栏,以确保我们对数据的使用符合所有监管和合规指导原则。但除此之外,我们还与我们的法律团队合作,围绕我们的数据科学家可以利用数据和机器学习做些什么来制定政策。我们最重要的问题总是:我们能否站在客户和投资者面前,捍卫我们的工作是合理的?

在过去的四年里,我们取得了长足的进步。通过投资于我们的数据科学社区,并消除他们前进道路上的流程和技术障碍,我们在创新业务方面取得了巨大的收益。例如,我们现在可以立即批准 25%的汽车索赔。在不到两秒钟的时间内,我们还可以批准高达 65%的承保,这是我们向个人客户提供的风险波动最大的保险之一。此外,我们可以不断试验和迭代,以提升我们算法的性能,同时与我们的业务领导者合作,提供更多可以改变我们客户体验的解决方案。

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

了解更多信息

Domino 5.0:安全地存储凭证以支持最严格的法规遵从性要求

原文:https://www.dominodatalab.com/blog/secret-store

介绍 Domino 5.0 中的秘密商店

Domino 不断创新,使我们的企业 MLOps 平台尽可能安全。我们做到这一点的一个最基本的方法是确保您的数据只能由那些应该有权访问的人访问。即使是需要访问整个平台的管理员,也不应该能够访问特定的数据。这一点尤其重要,因为我们的许多 客户 在受监管行业工作,他们的数据存储必须符合标准,例如【FIPS】HIPAAPCI 。考虑到这一点,Domino 引入了一个秘密存储来加密静态的敏感数据,并帮助确保组织能够遵守安全标准。

Domino 现在使用 HashiCorp Vault 将敏感的用户数据,包括凭证、API 密钥和新的数据源访问秘密存储在一个安全的秘密存储中。存储在 Secret Store 中的数据是静态加密的——如果您在 Kubernetes 集群中启用了 Istio 到它的连接是用 TLS 保护的。

Domino 中的 Secret Store 为安全团队提供了生成已被访问的机密日志的能力,然后如果有可疑的活动——或者更糟糕的是,完全违反安全性——就撤销这些机密。您的安全工程师晚上会睡得更好,即使您的组织不在受监管的行业中。

它是如何工作的

新安装的 Domino 将把预先配置好的 HashiCorp Vault 实例部署到您的 Kubernetes 集群中。然后,Nucleus 服务(主 Domino 用户界面)根据 Vault 服务进行身份验证,并被授权在 Vault 中读取和写入键值对。

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

但是,许多组织已经安装了 Vault,并且不想管理第二个服务。其他组织可能尚未部署 Vault,但希望能够灵活地将安装与现有的 HSM 和 PKI 基础架构相集成,并定义自己的策略。在这两种情况下,Domino 都可以配置为使用外部保险库,使用组织现有的加密和密钥轮换策略。然后,Domino 可以通过文字令牌认证或令牌路径认证来访问外部 Vault 实例。

Domino 中创建用户环境变量、API 键等的屏幕。,与以前一样,但是后台基础结构的变化只是改变了数据提交后的存放位置。

例如,要设置一个用户环境变量,进入 Domino UI 左下方用户菜单中的“Account Settings”。

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

在“用户环境变量”部分,添加新环境变量的键和值,然后单击“设置变量”。当前的 Domino 用户和 DevOps 及其他产品的用户应该对这个过程很熟悉。

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

一旦您单击“Set variable”,Domino 的 Nucleus 服务将把键-值对写入秘密存储,该对被加密保存在其数据库中。当您需要在项目中引用您的环境变量时,Domino 反转这个过程,从秘密存储中读取键值对,并将值插入到您的项目中。从用户的角度来看,这个过程很简单,因为所有的艰苦工作都是为他们做的。

结论

Domino Data Lab 很高兴将 Secret Store 引入 Domino——它扩展了 Domino 中已经存在的安全措施,并简化了对公司政策和行业标准的遵从。升级到 Domino 5.0 ,你会得到一个预配置的实例,你可以立即开始保存秘密。对于需要更大灵活性的组织,Domino 可以连接到符合既定策略的现有实例。不管怎样,Domino 已经准备好帮助所有组织满足最严格的安全标准。

Domino 是 企业 MLOps 平台,它无缝集成了代码驱动的模型开发、部署和监控,以支持快速迭代和最佳模型性能,因此公司可以确保从其数据科学模型中实现最大价值。

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

在社会科学中寻求再现性:探索与发现

原文:https://www.dominodatalab.com/blog/seeking-reproducibility-within-social-science-search-and-discovery

NYU 大学教授、经济学家、柯勒律治倡议的联合创始人 Julia Lane 在 Rev. Lane 上发表了题为“数据在哪里:社会科学搜索的新方法&发现”的演讲,描述了柯勒律治倡议正在采取的应对科学再现性挑战的方法。该方法旨在为政府分析师和研究人员提供远程访问安全数据设施中的机密数据的机会,并通过应用数据分析培训计划建立分析能力和协作。本文提供了 Lane 在 Rev 的演讲的摘要和文字记录。非常感谢 Julia Lane 在发表之前对本文提供了反馈。

会话摘要

科学正面临着研究的可重复性挑战,这阻碍了数据科学家和研究人员加快工作速度和提供影响其组织的见解的能力。自从多米诺成立以来,我们通过持续更新平台的协作功能,解决了可再现性问题,以支持我们的客户,并为博客和行业活动上的整体公众讨论做出了贡献,包括修订。在 Rev 会议“数据在哪里:社会科学搜索&发现的新方法”中,Julia Lane 就柯勒律治计划如何通过为政府分析师和研究人员提供对机密数据的安全远程访问来应对可再现性挑战,以及如何通过应用数据分析培训项目建立分析能力和协作提供了见解。目标是使政府机构能够利用更高质量的数据做出更好的循证决策。Lane 忠于再现性的精神,讲述了如何使用这种方法来允许认可的分析师重用和吸收见解,以加速他们的工作。莱恩讨论了柯尔律治试图回答的问题;提高与使用关联数据相关的分析的严密性;柯勒律治如何建立和测试一套工具,用来识别哪些数据被用来解决不同的研究问题;以及当新的研究人员带着新的项目访问安全环境时,如何使用该方法来通知他们。Lane 在会议结束时谈到,该计划的目的是“建立基于证据的政策制定,从而获得更好的知识、更好的政策、更好地分配资源,并减少收集信息的成本和负担。”

本次会议的一些亮点包括

  • 如何利用现代方法以更低的成本获得更高质量的数据,以帮助支持循证决策。
  • 共享机密政府微观数据的独特挑战,以及访问在生成高质量推断中的重要性
  • 风险-效用权衡的务实评估,或更多数据使用导致的风险与泄露或重新识别风险的权衡
  • 讨论柯勒律治如何利用培训课程培养政府机构工作人员应对数据质量挑战的能力
  • 研究人员培训与安全环境中的访问配对的重要性。

书面记录中提供了更多见解。

副本

朱莉娅·莱恩:

我是一名训练有素的经济学家,这也是我的工作重点。让我告诉你这个故事。我在 NYU,你可以从我浓重的纽约口音听出来,我职业生涯的大部分时间都在联邦统计机构工作,这些机构为你提供十年一次的人口普查、失业率、国内生产总值等等。在使用这些数据进行决策时,您面临的一个主要挑战是,收集数据的成本非常高,而且数据的质量正在下降。

你们中有多少人知道十年一次的人口普查将在明年进行?好吧。你认为美国大约有多少人?3.5 亿,3.6 亿,也许明年我们会发现更多。你认为收集…数一数这些人需要多少钱?三亿六千万美元。试试北边。20 亿美元,有人出 20 亿吗?好吧。有人想再高点吗?更高,更多,更多。170 亿美元,好吧,去数人数,问他们 10 个,也许 11 个问题。对吗?我们面临的挑战是数据质量正在下降。人们没有回应,他们给出了不好的回应,等等。

大约三年前,循证决策委员会成立,它汇集了来自全国各地的专家,研究如何开发数据,以更高的质量和更低的成本做出决策。他们提出了一系列建议,并于今年被纳入循证决策法案。

他们要求 NYU 建立一个环境来为委员会的审议提供信息,并展示如何将来自多个来源的数据汇集在一起,并在质量水平上理解它们,以便能够分配资源来做出决策。这就是为什么它被称为循证政策。

当然,整合数据的挑战在于数据,尤其是人类的数据,是相当复杂的。当它来自多个不同的来源时,就不仅仅是将它们混合在一起的问题了。你需要了解它们是如何产生的,问题是什么等等。除此之外,我们还建立了培训课程,培训政府机构工作人员、研究人员和分析师,他们希望处理数据、解决问题……以及如何处理数据。

挑战来了。当你处理复杂的数据时,当它是机密的时,因为它是关于人类的数据,所以很难找出以前对他们做过什么。每次有人开始处理数据时,都是一片空白。你搞不清楚是怎么回事。我们必须解决的挑战是我今天要和你们谈的挑战,那就是当你登陆一个新生成的数据集时,你如何发现,它没有以任何方式被策划…我怎么知道里面有什么,我怎么知道还有谁用过它?如果你仔细想想,这是一个 Amazon.com 问题,对吗?

杰夫·贝索斯赚了这么多钱的原因是他解决了弄清楚书里有什么的问题,通过其他人使用这本书的方式产生的信息来弄清楚,而不仅仅是人们生产这本书的方式。我们想要做的是为数据建立一个 Amazon.com,这就是我今天要讲的故事,让你们对我们试图建立的平台有一些了解。

我所说的新类型的数据是什么?过去,数据通常是由填写调查表的人生成的,对吗?一个统计机构收集它,策划它,记录它,发出它。也可能是管理记录,即从政府项目管理中生成的记录,如税务数据。如今,我们也在关注新类型的数据,由传感器生成的数据集,由您的刷卡生成的数据集,如零售贸易数据、万事达卡或 IRI 数据或您的 DNA。这些是复杂的数据集。它们不是精心策划的,但它们可以增加很多关于如何分配政策的理解。

这些数据需要共享。我们面临的挑战是,当它是人类的机密数据时,有许多关于分享知识的禁令,这是很正确的。与您习惯处理的开放数据世界相比,一切都更加孤立。例如,如这张幻灯片所示,每次有儿童死亡时,巴尔的摩市的委员们都会聚在一起,分享他们接触到的所有政府项目的信息。可能是住房、教育、福利、寄养等等。但他们唯一分享知识的时候是孩子死了的时候。我们在这里试图做的是建立一个知识基础设施,使我们能够在儿童死亡之前分享知识,以改善政策。

但挑战是,这是一个风险效用权衡,使用机密数据的价值在于,越多的人和越多的人使用它,政策就越有利,但泄露的风险也越大。你必须做的是,你必须尝试和管理这种披露。如果可以,你真的可以制定更好的政策。新西兰是一个很好的例子,这些幻灯片是由前总理比尔·英格利希制作的。像大多数国家或城市一样,你知道,有三大支出领域:教育、卫生、养老金。如果你想更好地分配资源,你要做的是更好地利用从多个政府项目中产生的综合数据。

例如,我所说的集成数据是什么意思?这是一个孩子,这个孩子的年龄在这里,底部是纳税人的成本,不仅仅是其他东西。你看看这个孩子如何打击儿童,青少年,家庭服务,虐待,寄养,教育,青少年司法,收入支持或福利,对不对?孩子出生,到大约两岁半的时候出现在儿童、青少年、家庭服务和虐待通知中。你开始看到孩子在这里,更多的虐待,更多的家庭服务的访问。开始接受教育,大约 9 岁,10 岁,11 岁,断断续续的接受教育,17 岁时被送去看护,他参加了青少年司法,然后去了收入补助。如果你把这些信息放在一起,这是很容易预测的。我不需要在这里反复讨论与之相关的问题。

那种信息,如果你把它放在一起,理解它,可以帮助分配资源。这是获得学校证书,教育资格。如果孩子在 18 岁时得到它,现在,在未来会有很好的状态。如果他们没有得到它,这是一个非常糟糕的指标。你可以根据数据进行排序,你可以对一个孩子在 18 岁之前获得或未获得学校证书的可能性进行排序,你可以找出哪些孩子没有获得证书的风险最高。如果你分配资源远离,你知道,像我的孩子一样的孩子,他们不需要干预。他们不需要这些孩子需要的服务。你可以重新分配资金,你可以极大地降低纳税人的成本,改变这些孩子的生活。

正是这种观点导致了循证决策法案的产生。最重要的是,你如何在一个信息交换中心安全地将数据放在一起?我所说的这种工作可以由政府分析师和研究人员以一种安全的方式实施,从而将重新鉴定的风险降至最低。

我们建立了一个清算所。我们称之为行政数据研究机构。我不喜欢清算所这个术语,原因有很多。它必须是项目…任务特定的,所以我更喜欢设施这个术语。但关键的事情不仅仅是建立信息交换机构,还要建立一个与之配合的培训项目。

我不会讲太多细节,但基本的想法是你会有一个安全的环境。当然,一个主要的挑战是你必须有遥测技术来判断谁在访问它。但是你也需要在数据周围有元数据。你需要有一个丰富的上下文,因为如果它只是 0 和 1,我不知道它是什么。你们中许多使用过开放数据的人会注意到,开放数据在质量方面可能有点不可靠。挑战的一部分是数据生成的方式,这有点…有大量的数据被放在一起进行汇总,并且没有任何电缆连接到微数据引擎。你真正需要的是你希望数据用户参与到元数据文档中。

换句话说,再一次,用统计系统做类比,机构产生数据的方式作为人类使用,他们非常辛苦地创建元数据文档,你得到一个关于所有变量的意义,它们是如何产生的等等的报告。高度手工的过程。我们想要做的是,我们想要生成一种自动的方法来找出数据中有什么信息,以及这些信息的质量如何。让我给你一点味道。在其中一个班里,我们有前科犯的资料。纲领性的问题是,获得工作的机会和社区特征对前罪犯的收入和就业结果有什么影响,以及他们随后的再犯率。

这就是我们所处的位置…为什么这一切都在[听不清 00:14:09]上,它们在来回移动。如果能把隐性知识编纂成册,这样当人们开始处理数据时,元数据文档就会自动生成,就像 Amazon.com 一样,这不是很好吗?对吗?这是基本的想法。你知道,不是你说,“数据从哪里来,它是如何根据它产生的方式被记录的,”而是社区告诉你一些关于数据是什么的事情。

好吧。这是我的挑战。我想弄清楚,当我登陆一个数据集时,还有谁在什么主题和什么结果上处理过数据。然后我想创建一个贡献知识的社区。这有点像数据的 Amazon.com。

好吧。我要怎么造一台能做到这一点的机器呢?还记得那些统计机构吗,我在开始的时候抨击过他们,但是,你知道,这些都是很棒的人。这些人工作努力,很棒,有很大的动力,但他们就像是工业革命前的数据工厂。现在,我们正在尝试建立一个现代化的数据工厂,一个自动化元数据生成的现代化方法。

本质上,我们要尝试并弄清楚如何做的是我们要确定问题的范围,将它提交给计算机科学社区,自然语言处理,机器学习社区,并说,“你能想出如何从中学习,自动化,冲洗和重复吗?”这是核心观点。我们感兴趣的是谁以前处理过这些数据,识别他们,然后弄清楚他们用这些数据做了什么。如果你想一想,所有这些知识都包含在出版物中,无论是出版的作品、工作论文还是政府报告。它在某个文件里。在那份文件中,如果是实证的,有人说,“这是我的问题,这是我要用它做什么,这是描述数据的部分。”

我想做的是,我想让计算机科学家们帮我找出数据集在哪里,以及语义上下文将把我指向哪里。好吧。然后我会让整个社区告诉我他们这样做是对还是错,然后从那里解决它。

本质上,我们与美国农业部合作的一个社区。但是不管怎样,美国农业部,你会看到他们关注的一个东西是 NHANES,营养教育数据集。你会看到这里,这里有写着分析样本的东西。他们说了一些关于数据的事情。我们想要的是计算机科学家去找出数据在哪里。

我们就是这么做的。我们举办了一场比赛。我们手动收集了一个语料库。社会科学数据仓库,公共使用的,坐落在全国不同的地方。一个是在密歇根大学,你有 ICPSR。有三个人,他们每天的工作是阅读论文,并手动说出哪个 ICPSR 数据集在该语料库中。然后他们把它写下来,然后把它贴出来,说已经做了什么。我们收集了这些语料,然后进行了一场比赛。我们有来自世界各地的 20 支队伍参赛。他们中的 12 个人提交了代码,这里有四个非常善良的人帮忙做了广告,非常感谢。然后我们有四个决赛选手。实际实现的模型是…我们很惊讶他们居然能做到这一点。

好好想想。如果我拿起一份出版物,它……你能告诉我里面引用的数据集是什么吗?答案当然是否定的。基线是零。胜出的算法所做的是,它正确识别了出版物中 54%被引用的数据集。这太神奇了,对吧?

现在还有很多工作要做。我已经跳过了所有的错误和问题等等,但它仍然是超级令人鼓舞的,对不对?因为现在,一旦我把数据集链接到出版物,这给了我丰富的背景,这给了我找到其他一切的潜力,因为有很多工作是由我在数字科学,UberResearch 的同事在出版物上做的。它们与过去 10 年的出版物相关联:拨款、政策文件、专利、临床试验等等。一旦我拿到那对,我就要去比赛了,对吗?这使我能够为一个特定的出版物找出围绕它的一切。这是我的目标。

围绕这一点,现在有许多工作要做。但是,举个例子,这是一个 Dimensions 网站,我没有时间去直播,因为我会被吼,但是我可以给你直播,你可以输入数据集,你会得到很多相关的信息。你找出研究人员是谁,相关主题是什么等等。这将给我带来我一直在寻找的知识。这是一个相当有缺陷的模型,尽管它是惊人的。你知道,有大量的工作要做。

现在我们想做的是去把那一对清理干净。最大的问题是,你可能已经发现了这一点,但我们搜索的是有标题的数据集。它被称为美国社区调查或 NHANES 或 PSID 或类似的东西。如果有很多人类处理的数据集,他们会说,“哦,我们在处理 LinkedIn 的数据,我们在处理 Twitter 的数据,”这些数据没有标签,或者没有零售 IRI,零售扫描仪数据,它们实际上没有一个你可以找到的标题。我们需要从语义语境中获得更好的知识。这意味着我们需要开发一个语料库,一个可以训练机器学习算法的带标签的语料库。

我们正在研究数字科学中的维度,我们也试图以多种不同的方式获得人类策划的输入。一个是与出版商合作,[听不清 00:22:01],当作者提交出版物时,他们说,“你能给我们一些关键词吗,”我们可以告诉他们,“给我们一些…告诉我们那里有什么数据集。”对吗?如果他们告诉我们那里有什么数据集,我马上就能得到一个二元组。对吗?然后我就可以训练了。

当研究人员进入一个安全的环境,然后他们询问有什么数据集可用时,你也可以让他们贡献他们的知识。在课堂上,我们通过 300 名政府分析师,他们是主题专家,我们可以让他们告诉我们他们对可用于公共利益的数据集的了解。如果你们中有人是社会科学家,请到这里来,我们要求我们的同事来填写。事实证明,你知道,如果我们得到一千个精心策划的公共数据集文档,这将足以看到下一次迭代。

这是我们接下来要去的地方。给我们带来替代数据的那些数字科学家。事实证明,人们真的喜欢…他们去那个闪亮的小徽章,Altmetrics 徽章,并点击它。我们正在设计的是,如果你现在输入并寻找一个数据集,我们也与德意志联邦银行合作,它将会调出相关的出版物。这里的想法是,每一个被拉起的出版物,你得到那里的数据集上下文,它会说有多少专家,多少论文,多少代码书,有多少注释与它相关联。然后当你点击它,弹出更丰富的上下文,我可以找到所有的论文,其他论文,专家,代码书,注释和相关的数据集。然后这里是行动的号召,对吗?我们不需要让每个人都响应,但我们会尝试一下,看看我们在这方面做得如何。然后,当然,把它输入到这个方法中。

最后一步,也是与布莱恩·格兰杰和费尔南多·佩雷斯合作的一步,是将其构建到 Jupyter 笔记本中。Fernando 和 Brian 一直在做的一件事是,他们试图让练习册更具协作性。因为现在,这只是一个单一的计算叙事。他们也试图与他们合作,为了我所说的所有原因,能够与机密的微数据合作。

基本思路是这样的。目前,当你登陆一个数据集时,如果你幸运的话,你所得到的是数据集产生的方式所产生的数据。类比的例子还是杰夫·贝索斯。当你找一本书时,你发现了什么?ISBN 号,作者,书名,出版商,对吗?那是元数据,顺便说一句,书是制作出来的。你真正想要的是关于数据本身的知识。我不需要去书店寻找答案,我只需要找到像我一样的人使用了这些信息。同样,我们正在将这一点构建到 Jupyter 笔记本中,我们 Jupyter 团队正在与我们的团队合作,这里的概念是记住我们曾经的松散通信,将其构建到注释中。这是 Brian 和 Fernando 刚刚放入的内容,但将其构建到注释中,隐性知识被编码并构建到数据基础架构下的图模型中。

这就是故事的梗概。我们希望能够建立基于证据的决策,从而获得更好的知识、更好的政策、更好地分配资源,并降低收集信息的成本和负担。我们首先构建了一个安全的环境,并围绕它培养了员工能力。我们现在正处于这个阶段。我们的目标是建立一个平台。

如果你想了解更多信息,我们在风景优美的纽约州 NYU 招聘员工。很多信息都在这里,也在我们的网站上。你可能想知道为什么它被称为柯勒律治倡议。你们中有多少人听说过塞缪尔·泰勒·柯尔律治?太好了。好吧。因《老水手之歌》而出名,对吗?我们试图找出这个东西的名称,我们想,“为公众利益服务的数据科学”,[blech]“基于证据的政策”,[blech]。柯勒律治倡议似乎是显而易见的,对不对?《古舟子咏》“水,到处都是水,也没有一滴可以喝”,对吗?在这里,它是“数据,到处都是数据,我们必须停下来思考。”这就是为什么它被称为柯勒律治倡议。

为了便于阅读,本文经过了编辑。

解决 K 武装土匪的半统一策略

原文:https://www.dominodatalab.com/blog/semi-uniform-strategies-for-solving-k-armed-bandits

之前的博客文章 中,我们介绍了 K 臂强盗问题——一个在不确定的时间内分配有限资源的简单例子。我们看到了随机强盗的行为,并证明了随机拉武器产生的奖励接近预期的奖励分布。

在这篇文章中,我们进一步发展了这个概念,并介绍了可能带来更好回报的更聪明的策略。

ε优先策略

Epsilon-first 是一个两阶段策略,代理从纯粹的探索阶段开始,然后是开发阶段。探索阶段发生在第一次试验期间,其目的是获得足够的知识来确定提供最高预期回报的臂。一旦这个最佳臂被识别,算法就在剩余的回合数中播放它((1-\ε)T )。在探索阶段,动作要么统一从(\mathcal{A})中选择,要么按顺序执行,重复循环(\mathcal{A})直到阶段结束。在后一种情况下,我们通常对探索阶段执行(NK) ((N \in \mathbb{N}))次迭代,这保证了所有报酬分布的相等表示。这种方法在算法 1 中给出。

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

算法 1-ε-第一土匪

我们看到,该算法最初运行一个探索阶段进行(NK)次迭代,在每个时间步存储奖励。在探索结束时,它会将所有可能的武器储存的奖励相加,并选择到目前为止已累积最高奖励的武器。然后,该算法切换到开发阶段,并为所有剩余的时间步长播放最佳手臂。查看模拟结果(图 1 ),很明显,当针对相同的报酬分布进行测试时,ε优先策略明显优于随机 bandit。我们看到,这两种算法最初表现相似,这是由于在ε优先算法的探索阶段臂的统一选择。然而,一旦 epsilon-first 过渡到开发阶段,它立即开始累积更高的奖励,产生平均即时奖励(\ bar { R } \约 0.66)和累积奖励(G \约 665) -与随机 bandit 方法相比,这是一个显著的改进。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 图 1——随机 vs 用(K=3)、(T=1000)、和(N=2)进行第一次盗匪模拟。平均 10 场比赛,每场 100 分。

我们需要认识到,尽管 Epsilon-first 与随机选择相比表现更好,但有几个重要问题代表了实质性的缺点:

  • 太短的探索阶段可能导致选择次优的贪婪行为。
  • (\epsilon)的选择是外部的—目前没有关于探索阶段应该执行多长时间的规定。这个问题加剧了前一点。
  • ε优先策略的一个关键假设是报酬分布是稳定的。如果违反了这一假设,那么代理很有可能锁定错误的手臂,直到时间用完。

ε-贪婪策略

ε贪婪是对ε优先策略的一种可能的改进。这种方法的关键区别在于,勘探更均匀地分布在(T)上,而不是有明确的勘探和开采阶段。这是通过在每个时间步(t \in T)执行随机动作来实现的,以便对所有试验的(\epsilon)比例执行探测,并在((1-\epsilon))比例的试验中利用最佳臂。(\ε)的值通常选择为 0.1。

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

算法二-ε-贪婪大盗

在探索阶段,以均匀的概率随机选择一个分支,在开发阶段,该策略使用具有最高估计期望回报的分支。算法 2 概述了 epsilon-greedy 策略的实施,图 2 将 epsilon-greedy 的性能添加到仿真结果中。我们清楚地看到,ε-greedy 的回报最初在随机策略的范围内,但随着算法执行若干轮探索,其对预期回报的估计提高了,回报开始优于随机策略和ε-优先策略。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 图 2——随机 vs .ε-第一 vs .ε-贪婪土匪模拟用(K=3),(T=1000),和(N=2)。平均 10 场比赛,每场 100 分。

摘要

在这篇文章中,我们研究了两种针对 K-武装匪徒的半一致策略-ε-优先和ε-贪婪。我们展示了它们都比我们在上一篇文章 的 中提到的完全随机策略表现得更好。然而,半一致方法的一个问题是,这些策略不能根据观察到的回报更新它们的探索机制。直觉上,能够根据目前的回报调整决策的算法应该表现得更好。一个简单的自适应示例可以是一种算法,该算法可以动态地确定 arm 表现不佳,根本不再可行。这种方法以及其他适应性方法将是以后文章的主题。

额外资源

注册一个免费的多米诺账户,获得算法 1 & 2 的实现和额外的代码示例,让你运行上面讨论的模拟。点击下面的按钮,一旦你的帐户被创建,打开强化学习项目开始。文章中讨论的所有策略都可以在 Bandits.ipynb 笔记本中找到。

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

SHAP 和 LIME Python 库:第 1 部分——很好的解释者,各有利弊

原文:https://www.dominodatalab.com/blog/shap-lime-python-libraries-part-1-great-explainers-pros-cons

这篇博客文章提供了对 SHAP 和 LIME Python 库的简要技术介绍,随后是代码和输出,强调了各自的优缺点。如果对这篇文章的视觉演示感兴趣,可以考虑参加网络研讨会

介绍

模型可解释性是当今数据科学界的一个优先事项。作为数据科学家,我们希望防止模型偏差,并帮助决策者了解如何以正确的方式使用我们的模型。数据科学的领导者和高管们注意到现有的和即将出台的立法,这些立法要求模型提供它们如何工作以及如何避免错误的证据(例如, SR 11-7人工智能的未来法案)。

这篇博文的第 1 部分提供了对 SHAP 和 LIME Python 库的简要技术介绍,随后是代码和输出,强调了各自的优缺点。第 2 部分将通过将这些库应用于各种 Python 模型来更详细地探索这些库。这些帖子的目标是让读者熟悉如何在实践中使用这些库,以及如何解释它们的输出,帮助您在自己的工作中利用模型解释。

SHAP 对莱姆

SHAP 和莱姆都是模型可解释性的流行 Python 库。SHAP (SHapley 附加解释)利用 SHapley 值的概念对模型特征影响评分。一个 Shapley 值的技术定义是“一个特征值在所有可能的联合中的平均边际贡献。”换句话说,Shapley 值使用所有可能的输入组合来考虑实例的所有可能的预测。由于这种详尽的方法,SHAP 可以保证像一致性和局部准确性的属性。 LIME (局部可解释模型不可知解释)围绕每个预测建立稀疏线性模型,以解释黑盒模型如何在局部附近工作。在他们的 NIPS 论文中,SHAP 的作者展示了 Shapley 值提供了准确性和一致性的唯一保证,并且石灰实际上是 SHAP 的子集,但是缺少相同的属性。为了进一步研究,我找到了 GitHub 站点 SHAP GitHubLIME GitHub 有用的资源:

那么为什么会有人使用石灰呢?简单来说,石灰速度快,而 Shapley 值计算时间长。对于你们这些统计学家来说,这种情况让我想起了费希尔的精确检验和列联表的卡方检验。费希尔的精确测试提供了最高的准确性,因为它考虑了所有可能的结果,但它永远需要在大型表上运行。这使得卡方检验,一种基于分布的近似方法,成为一种很好的替代方法。

SHAP Python 库通过使用近似和优化来帮助解决这个计算问题,在寻求保持良好的 Shapley 属性的同时大大加快了速度。当您使用 SHAP 优化模型时,运行速度非常快,并且输出准确可靠。不幸的是,SHAP 还没有针对所有模型类型进行优化。

例如,SHAP 有一个在树上运行快速的树解释器,如来自 XGBoost 和 scikit-learn 的梯度增强树和 sci-kit learn 的随机森林,但对于像 k-nearest neighborhood 这样的模型,即使在非常小的数据集上,它也非常慢。这篇文章的第二部分将回顾 SHAP 解释者的完整列表。下面的代码和注释记录了 SHAP 图书馆在波士顿住房数据集上的这一缺陷。这段代码是我创建的 Jupyter 笔记本的一个子集,用来浏览 SHAP 和莱姆的例子。该笔记本托管在 Domino 的试用网站上。点击此处查看、下载或运行笔记本。您需要设置一个免费帐户才能登录。

# Load Libraries
import pandas as pd
import sklearn
from sklearn.model_selection import train_test_split
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
import shap
import xgboost as xgb
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D
import seaborn as sns
import time
%matplotlib inline

# Load Boston Housing Data
X,y = shap.datasets.boston()
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2, random_state=0)
X,y = shap.datasets.boston()
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# K Nearest Neighbor
knn = sklearn.neighbors.KNeighborsRegressor()
knn.fit(X_train, y_train)

# Create the SHAP Explainers
# SHAP has the following explainers: deep, gradient, kernel, linear, tree, sampling
# Must use Kernel method on knn
# Summarizing the data with k-Means is a trick to speed up the processing

"""Rather than use the whole training set to estimate expected values, we summarize with a set of weighted kmeans,
each weighted by the number of points they represent. Running without kmeans took 1 hr 6 mins 7 sec.
Running with kmeans took 2 min 47 sec. Boston Housing is a small dataset.
Running SHAP on models that require the Kernel method becomes prohibitive."""

# build the kmeans summary
X_train_summary = shap.kmeans(X_train, 10)

# using the kmeans summary
t0 = time.time()
explainerKNN = shap.KernelExplainer(knn.predict,X_train_summary)
shap_values_KNN_test = explainerKNN.shap_values(X_test)
t1 = time.time()
timeit=t1-t0
timeit

# without kmeans a test run took 3967.6232330799103 seconds
"""t0 = time.time()
    explainerKNN = shap.KernelExplainer(knn.predict, X_train)
    shap_values_KNN_test = explainerKNN.shap_values(X_test)
    t1 = time.time()
    timeit=t1-t0     timeit"""

# now we can plot the SHAP explainer
shap.force_plot(explainerKNN.expected_value, shap_values_KNN_test[j], X_test.iloc[[j]])

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

在基于 Boston Housing 数据集的 knn 模型上运行 SHAP 花费了一个多小时,这是一颗难以下咽的药丸。如果我们牺牲一些准确性和可靠性,首先用 k-means 算法汇总数据,我们可以将时间缩短到三分钟。作为替代方法,我们可以使用石灰。LIME 使用相同的 knn 模型即时运行,不需要使用 k-means 进行汇总。请参见下面的代码和输出。请注意,LIME 的输出不同于 SHAP 输出,尤其是对于要素 AGE 和 b。由于 LIME 不具有与 Shapley 值相同的准确性和一致性属性,并且 SHAP 在计算影响得分之前使用 k-means 汇总,因此很难判断哪个更接近正确答案。

exp = explainer.explain_instance(X_test.values[j], knn.predict, num_features=5)
exp.show_in_notebook(show_table=True)

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

虽然 LIME 在 knn 模型示例中提供了一个不错的替代方案,但不幸的是,LIME 并不总是能够扭转局面。它并不适用于所有型号。例如,LIME 不能处理 XGBoost 使用 xgb 的要求。输入数据上的 DMatrix()。下面是用 XGBoost 模型调用 LIME 的一次尝试。有一些潜在的方法可以让 LIME 在这个模型上工作,包括创建自己的预测函数,但关键是 LIME 不会自动与 XGBoost 库一起工作。

xgb_model = xgb.train({"objective":"reg:linear"}, xgb.DMatrix(X_train, label=y_train))
    max_features="auto", max_leaf_nodes=None,
    min_impurity_decrease=0.0, min_impurity_split=None,
    min_samples_leaf=1, min_samples_split=2,
    min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1, oob_score=False, 
    random_state=None, verbose=0, warm_start=False)

# LIME has one explainer for all models
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values, 
    feature_names=X_train.columns.values.tolist(),
    class_names=["price"],
    categorical_features=categorical_features,
    verbose=True,
    mode="regression")

# Out-of-the-box LIME cannot handle the requirement of XGBoost to use xgb.DMatrix() on the input data
xgb_model.predict(xgb.DMatrix(X_test.iloc[[j]]))
expXGB = explainer.explain_instance(X_test.values[j], xgb_model.predict, num_features=5)
expXGB.show_in_notebook(show_table=True)

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

另一方面,SHAP 针对 XGBoost 进行了优化,可以提供快速、可靠的结果。下面的代码运行速度非常快。它使用 SHAP 库中的 TreeExplainer,该库经过优化,可以跟踪 XGBoost 树以找到 Shapley 值估计值。

explainerXGB = shap.TreeExplainer(xgb_model)
shap_values_XGB_test = explainerXGB.shap_values(X_test)
shap.force_plot(explainerXGB.expected_value, shap_values_XGB_test[j], X_test.iloc[[j]])

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

结论

希望这篇文章能给你一些如何在 SHAP 和莱姆之间做出选择的建议,并揭示出它们各自的局限性。虽然这两种方法都有各自的优势和局限性,但我个人更喜欢在可能的情况下使用 SHAP,而在 SHAP 的计算成本太高时则依赖 LIME。请继续关注我关于这个主题的下一篇文章,它将提供如何在各种模型上使用这些库的多个示例,并展示如何解释它们的输出。

SHAP 和 LIME Python 库:第 2 部分——使用 SHAP 和 LIME

原文:https://www.dominodatalab.com/blog/shap-lime-python-libraries-part-2-using-shap-lime

这篇博文提供了关于如何在实践中使用 SHAP 和莱姆 Python 库以及如何解释它们的输出的见解,帮助读者准备在他们自己的工作中产生模型解释。如果对这篇文章的视觉演练感兴趣,那么考虑参加网络研讨会

介绍

这篇博文的第 1 部分提供了对 SHAP 和 LIME Python 库的简要技术介绍,包括代码和输出,以强调每个库的一些优点和缺点。在第 2 部分中,我们将通过将这些库应用于各种 Python 模型来更详细地探索这些库。第 2 部分的目标是让读者熟悉如何在实践中使用这些库,以及如何解释它们的输出,帮助他们准备在自己的工作中产生模型解释。我们通过对四种常见 Python 模型的 SHAP 和莱姆的并行代码比较来做到这一点。

下面的代码是我创建的 Jupyter 笔记本的一个子集,用来浏览 SHAP 和莱姆的例子。该笔记本托管在 Domino 的试用网站上。单击此处在已经安装了所有必需的依赖项的环境中和 Domino 免费提供的 AWS 硬件上查看、下载或运行笔记本。您需要设置一个免费帐户来登录。

SHAP 和莱姆个人预测解释者

首先,我们加载所需的 Python 库。

import pandas as pd #for manipulating data

import numpy as np #for manipulating data

import sklearn #for building models

import xgboost as xgb #for building models

import sklearn.ensemble #for building models

from sklearn.model_selection import train_test_split #for creating a hold-out sample

import lime #LIME package

import lime.lime_tabular #the type of LIIME analysis we’ll do

import shap #SHAP package

import time #some of the routines take a while so we monitor the time

import os #needed to use Environment Variables in Domino

import matplotlib.pyplot as plt #for custom graphs at the end

import seaborn as sns #for custom graphs at the end

接下来,我们加载波士顿住房数据,这与我们在第 1 部分中使用的数据集相同。

X,y = shap.datasets.boston()X_train,X_test,y_train,y_test = train_test_split(X, y, test_size=0.2, random_state=0)

让我们建立模型来测试 SHAP 和石灰。我们将使用四个模型:两个梯度增强树模型,一个随机森林模型和一个最近邻模型。

# XGBoost

xgb_model = xgb.train({'objective':'reg:linear'}, xgb.DMatrix(X_train, label=y_train))

# GBT from scikit-learn

sk_xgb = sklearn.ensemble.GradientBoostingRegressor()

sk_xgb.fit(X_train, y_train)

# Random Forest

rf = sklearn.ensemble.RandomForestRegressor()rf.fit(X_train, y_train)

# K Nearest Neighbor

knn = sklearn.neighbors.KNeighborsRegressor()knn.fit(X_train, y_train)

SHAP Python 库提供了以下解释器:deep(一种快速但近似的算法,基于 DeepLIFT 算法计算深度学习模型的 SHAP 值);gradient(将来自 Integrated Gradients、SHAP 和 SmoothGrad 的思想结合到深度学习模型的单个期望值方程中);内核(一种特别加权的局部线性回归,用于估计任何模型的 SHAP 值);线性(计算具有独立特征的线性模型的精确 SHAP 值);树(一种快速精确的算法,用于计算树和树集合的 SHAP 值)和采样(在假设特征独立的情况下计算 SHAP 值-当您想要使用大型背景集时,这是内核的一种很好的替代方法)。我们的前三个模型可以使用树解释器。

# Tree on XGBoost

explainerXGB = shap.TreeExplainer(xgb_model)

shap_values_XGB_test = explainerXGB.shap_values(X_test)

shap_values_XGB_train = explainerXGB.shap_values(X_train)

# Tree on Scikit GBT

explainerSKGBT = shap.TreeExplainer(sk_xgb)

shap_values_SKGBT_test = explainerSKGBT.shap_values(X_test)

shap_values_SKGBT_train = explainerSKGBT.shap_values(X_train)

# Tree on Random Forest explainer

RF = shap.TreeExplainer(rf)

shap_values_RF_test = explainerRF.shap_values(X_test)

shap_values_RF_train = explainerRF.shap_values(X_train)

正如在第 1 部分中所解释的,最近邻模型没有一个优化的 SHAP 解释器,所以我们必须使用内核解释器,SHAP 的包罗万象的适用于任何类型的模型。然而,这样做需要一个多小时,即使是在小型波士顿住房数据集上。SHAP 的作者推荐首先用 K-Means 方法总结数据,如下所示。

"""Must use Kernel method on KNN.

    Rather than use the whole training set to estimate expected values, we summarize with

    a set of weighted kmeans, each weighted by the number of points they represent.

    Running without the kmeans took 1 hr 6 mins 7 sec.

    Running with the kmeans took 2 min 47 sec.

    Boston Housing is a very small dataset.

    Running SHAP on models that require Kernel method and have a good amount of data becomes prohibitive"""

X_train_summary = shap.kmeans(X_train, 10)

# using kmeans

t0 = time.time()

explainerKNN = shap.KernelExplainer(knn.predict, X_train_summary)

shap_values_KNN_test = explainerKNN.shap_values(X_test)

shap_values_KNN_train = explainerKNN.shap_values(X_train)

t1 = time.time()

timeit=t1-t0

timeit

既然我们已经建立了模型和 SHAP 解释器,我发现将所有 SHAP 值放入数据框架中以备后用是很有帮助的。

# XGBoost

df_shap_XGB_test = pd.DataFrame(shap_values_XGB_test, columns=X_test.columns.values)

df_shap_XGB_train = pd.DataFrame(shap_values_XGB_train, columns=X_train.columns.values)

# Scikit GBT

df_shap_SKGBT_test = pd.DataFrame(shap_values_SKGBT_test, columns=X_test.columns.values)

df_shap_SKGBT_train = pd.DataFrame(shap_values_SKGBT_train, columns=X_train.columns.values)

# Random Forest

df_shap_RF_test = pd.DataFrame(shap_values_RF_test, columns=X_test.columns.values)

df_shap_RF_train = pd.DataFrame(shap_values_RF_train, columns=X_train.columns.values)

# KNN

df_shap_KNN_test = pd.DataFrame(shap_values_KNN_test, columns=X_test.columns.values)

df_shap_KNN_train = pd.DataFrame(shap_values_KNN_train, columns=X_train.columns.values)

这就结束了 SHAP 解释器的必要设置。设置 LIME 解释器要简单得多,只需要一个解释器就可以分别应用于每个模型。

# if a feature has 10 or less unique values then treat it as categorical

categorical_features = np.argwhere(np.array([len(set(X_train.values[:,x]))

for x in range(X_train.values.shape[1])]) <= 10).flatten()

    # LIME has one explainer for all models

    explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values

        feature_names=X_train.columns.values.tolist(),

        class_names=['price'],

        categorical_features=categorical_features,

        verbose=True, mode='regression')

好了,现在是时候开始解释这些模型的预测了。为了简单起见,我选择使用 SHAP 和莱姆来解释每个模型的测试集中的第一条记录。

# j will be the record we explain

j = 0

# initialize js for SHAP

shap.initjs()

XGBoost SHAP

注意我们前面创建的数据帧的使用。下面的图称为力图。它显示了有助于从基础值推动预测的特征。基本值是我们通过的训练数据集的平均模型输出。将预测值推高的要素以红色显示。将它推低的特征以蓝色显示。与 21.83 相比,我们从测试集中测试的记录在 23.03 处具有高于平均预测值的值。该记录的 LSTAT(人口的低地位百分比)为 7.34。这使得预测值更高。不幸的是,力图没有告诉我们到底高了多少,也没有告诉我们 7.34 与 LSTAT 的其他值相比如何。您可以从 SHAP 值的数据帧中获得此信息,但它不会显示在标准输出中。

shap.force_plot(explainerXGB.expected_value, shap_values_XGB_test[j], X_test.iloc[[j]])

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

XGBoost 石灰

现成的 LIME 无法处理 XGBoost 使用 xgb 的要求。DMatrix(),所以下面的代码抛出一个错误,我们将只对 XGBoost 库使用 SHAP。潜在的攻击,包括创建自己的预测函数,可以让 LIME 在这个模型上工作,但关键是 LIME 不会自动与 XGBoost 库一起工作。

expXGB = explainer.explain_instance(X_test.values[j], xgb_model.predict, num_features=5)
expXGB.show_in_notebook(show_table=True)

sci kit-学习 GBT SHAP

shap.force_plot(explainerSKGBT.expected_value, shap_values_SKGBT_test[j], X_test.iloc[[j]])

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

sci kit-学习 GBT 石灰

LIME 致力于 GBTs 的 Scikit-learn 实现。LIME 的输出比 SHAP 的输出提供了更多的细节,因为它指定了导致该特征产生影响的一系列特征值。例如,我们知道 PTRATIO 对这个预测的房价有积极的影响,因为它的价值低于 17.4。SHAP 没有提供这方面的信息。然而,石灰的功能重要性不同于 SHAP 的。由于 SHAP 有更坚实的理论基础,如果莱姆和 SHAP 不同意,大多数人倾向于相信 SHAP,特别是与树和线性 SHAP 解释者。

expSKGBT = explainer.explain_instance(X_test.values[j], sk_xgb.predict, num_features=5)

expSKGBT.show_in_notebook(show_table=True)

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

随机森林 SHAP

shap.force_plot(explainerRF.expected_value, shap_values_RF_test[j], X_test.iloc[[j]])

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

随机森林石灰

exp = explainer.explain_instance(X_test.values[j], rf.predict, num_features=5)

exp.show_in_notebook(show_table=True)

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

KNN·SHAP

shap.force_plot(explainerKNN.expected_value, shap_values_KNN_test[j], X_test.iloc[[j]])

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

KNN 石灰

exp = explainer.explain_instance(X_test.values[j], knn.predict, num_features=5)

exp.show_in_notebook(show_table=True)

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

SHAP 宏观上的可解释性

SHAP 和莱姆背后的整个想法是提供模型的可解释性。我发现把模型的可解释性分成两类是很有用的——局部的和全局的。模型的局部可解释性包括为为什么做出个体预测提供详细的解释。这有助于决策者信任该模型,并知道如何将其建议与其他决策因素相结合。模型的全局可解释性需要寻求理解模型的整体结构。这比解释一个单一的预测要大得多(也困难得多),因为它涉及到对模型如何工作的陈述,而不仅仅是对一个预测。对于需要在高层次上理解模型的执行发起人、希望从总体上验证模型决策的审计员以及希望验证模型与他们对所研究系统的理论理解相匹配的科学家来说,全局可解释性通常更为重要。

上一节中的图表是局部可解释性的例子。虽然 LIME 没有提供任何全球可解释性的图表,但 SHAP 提供了。让我们来探究其中的一些图表。对于这些图形示例,我选择使用第一个模型,即来自 XGBoost 库的模型。

可变重要性图是从全局意义上理解模型的有用工具。SHAP 为评估可变重要性提供了一个理论上合理的方法。这一点很重要,因为关于计算变量重要性的传统方法哪一种是正确的存在争议,而且这些方法并不总是一致。

shap.summary_plot(shap_values_XGB_train, X_train, plot_type="bar")

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

与可变重要性图类似,SHAP 也提供了一个摘要图,显示训练数据集中每个实例的 SHAP 值。这可以更好地理解整体模式,并允许发现预测异常值的口袋。

shap.summary_plot(shap_values_XGB_train, X_train)

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

变量影响或依赖图长期以来一直是统计学家对模型可解释性的喜爱。SHAP 也提供这些,我觉得它们很有用。

shp_plt = shap.dependence_plot("LSTAT", shap_values_XGB_train, X_train)

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

我非常喜欢这些,我决定使用 matplotlib 和 seaborn 对它们进行一些定制,以实现两项改进。首先,我用黑点突出显示了第 j 个实例,这样我们可以将全局和局部可解释性的优点结合到一个图中。第二,我允许根据变量灵活选择颜色。

# inputs = column of interest as string, column for coloring as string, df of our data, SHAP df,

# x position of the black dot, y position of the black dot

def dep_plt(col, color_by, base_actual_df, base_shap_df, overlay_x, overlay_y):
    cmap=sns.diverging_palette(260, 10, sep=1, as_cmap=True) #seaborn palette

    f, ax = plt.subplots()

    points = ax.scatter(base_actual_df[col], base_shap_df[col], c=base_actual_df[color_by], s=20, cmap=cmap)

    f.colorbar(points).set_label(color_by)

    ax.scatter(overlay_x, overlay_y, color='black', s=50)

    plt.xlabel(col)

    plt.ylabel("SHAP value for " + col)

    plt.show()

# get list of model inputs in order of SHAP importance

imp_cols = df_shap_XGB_train.abs().mean().sort_values(ascending=False).index.tolist()

# loop through this list to show top 3 dependency plots

for i in range(0, len(imp_cols)):

    #plot the top var and color by the 2nd var

    if i == 0 : 

        dep_plt(imp_cols[i], imp_cols[i+1], 

        X_train, 

        df_shap_XGB_train,

        X_test.iloc[j,:][imp_cols[i]], 

        df_shap_XGB_test.iloc[j,:][imp_cols[i]])

        #plot the 2nd and 3rd vars and color by the top var

        if (i &gt;; 0) and (i &lt;; 3) : 

            dep_plt(imp_cols[i], 

            imp_cols[0],  X_train, 

            df_shap_XGB_train,

            X_test.iloc[j,:][imp_cols[i]],

            df_shap_XGB_test.iloc[j,:][imp_cols[i]])

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

如今,模型可解释性仍然是许多数据科学家和数据科学领导者的头等大事。SHAP 和莱姆是在本地和全球层面上帮助提供这些解释的坚实图书馆。随着时间的推移,解释黑盒模型的需求只会增加。我相信在不太遥远的将来,我们会发现模型可解释性与模型敏感性/压力测试相结合将成为数据科学工作的标准部分,并且它将在大多数数据科学生命周期中拥有自己的一步。

打破公民数据科学家的神话

原文:https://www.dominodatalab.com/blog/shattering-the-myth-of-the-citizen-data-scientist

现在终于是时候终结“公民数据科学家”这一昂贵而危险的神话,将注意力转移到一个被忽视的现实生活中的人身上了,这个人已经对你今天的模型驱动型业务至关重要,并且在未来将变得更加重要——“荣誉”或兼职数据科学家。

“公民数据科学家”(CDS)概念的发明初衷是好的——促进数据、机器学习和人工智能素养——但弊大于利。由 CDSes 组成的企业的白日梦不可避免地导致昂贵的计划,充其量导致一次性的见解,在大多数情况下,与数据科学无关。许多采用这种方法的公司最终一无所获。

更糟糕的是,试图发展 CDSes 会严重伤害你的数据科学团队。他们将注意力和资金从实际的数据科学计划转移到分析 101 课程和商业智能平台或具有原始数据科学功能的数据准备工具。在最糟糕的情况下,数据科学家被期望使用玩具工具,导致要么跟踪它,要么你最好的数据科学家大批离去。

模型推动大规模的结果,单独的见解不会

让更多懂数据的员工,给他们可视化的数据准备工具,加上一些简单易用的高级分析方法,有什么错?什么都没有,除了它们通常不会驱动变革性的商业价值。

即使 CDS 项目做得很好,这些人也只能提取特定的见解,为你的企业带来一次性的机会。这是因为变革性的结果只能来自于开发越来越多的机器学习模型组合,这些模型投入生产并不断推动决策、行动和应用。换句话说,你需要数据驱动的洞察作为模型构建过程的部分,但是洞察本身是开发生产级模型的必要步骤,但还不够。

这些模式是当今几乎所有发展最快的公司的核心。它们为流媒体视频服务的推荐引擎、搜索引擎的结果、汽车的自动驾驶功能以及每个顶级零售商的定向折扣提供动力。

这些基本的、任务关键的——通常是受监管的——模型不能也不应该由专业数据科学家之外的任何人创建,原因与医院不应该配备“公民外科医生”、航空公司不应该依赖“公民飞行员”、塔楼不应该由“公民建筑师”建造、你的首席管理人员不应该由“公民经理”组成一样。

期望公民数据科学家取代您的专业数据科学家在最好的情况下是徒劳的,在最坏的情况下会导致表现不佳的模型,危及您组织的声誉、法规遵从性或底线。(如果你真的对创建道德、守法的人工智能模型感兴趣,请在 Rev 3 观看我们的第二场专题讨论,在那里我们将解释新兴的人工智能标准以及如何满足它们。)

公民数据科学家死了,荣誉数据科学家万岁

是时候抛弃 CDS 这个有缺陷的概念,转而关注现实世界中的角色——除了专业的数据科学家之外——这实际上有助于实现巨大的商业价值。这就是“荣誉”或兼职数据科学家。此人的日常工作与数据科学家无关,通常是数据分析师或精通数据的业务线专业人员。他们可以与专业的数据科学家携手合作,创建描述性分析应用程序,或者进行跨越高级分析领域的调查。

“荣誉数据科学家”可以独自创造价值,但他们对每个数据科学项目也至关重要,因为他们带来了对业务及其数据的理解。此外,他们通常可以承担数据准备和其他任务,从而解放您的数据科学家。在他们现有的角色中,他们可能没有成为专业数据科学家的培训、经验、关注或激励,但在正确的支持下,他们推动数据科学成果,并可能成为未来数据科学家人才的重要渠道。(在 Rev 3 召开会议,了解如何赢得数据科学人才大战,打造分析驱动型员工队伍。)

授权给你的荣誉数据科学家

公民数据科学家对企业来说既是神话,也是可选的。你们的荣誉数据科学家就不一样了。如果你正在做数据科学方面的事情,你已经有了荣誉数据科学家,但可能没有意识到这一点,几乎可以肯定的是,你需要更多的荣誉数据科学家,并使他们更加有效。

他们也需要得到支持。他们需要培训,需要有助于他们与数据科学团队合作的流程,还需要工具。由于他们要么与数据科学家密切合作,学习如何成为数据科学家,要么已经在做数据科学家的一些工作,他们需要访问您的专业数据科学家正在使用的相同工具和平台。他们可能还需要对敏感数据设置更多的防护栏,并限制他们可以使用的基础设施数量。

更好的是,给你的荣誉数据科学家平台(如 Domino Data Lab 的 Enterprise MLOps platform )提供对各种专业数据科学工具的集成支持。但是,不要将它们局限于不适合数据科学的“玩具”工具、与您的数据科学家正在使用的工具不兼容的工具,或者不能帮助他们实践专业数据科学的工具。这样做只会伤害他们、你的数据科学家,并最终伤害你的业务。

是否应该建立自己的数据科学平台?

原文:https://www.dominodatalab.com/blog/should-you-build-your-own-data-science-platform

随着组织日益努力成为模型驱动的,他们认识到数据科学平台的必要性。根据最近的调查报告“成为模型驱动的旅程中的关键因素”,86%的模型驱动公司通过使用数据科学平台来区分自己。然而,是建造还是购买的问题仍然存在。

对于大多数组织来说,从业务战略和项目成本效益的角度来看,购买数据科学平台都是正确的选择。然而,许多组织混淆了模型对他们长期成功的重要性和他们自己构建底层平台的需要。在一些特定的情况下,平台本身就是差异化因素。这些组织拥有高度专业化的工作流程(例如,优步),内部软件开发的出色记录(例如, Airbnb ),以及能够识别模型独特特征的深厚数据科学专业知识(例如,谷歌)。对于绝大多数组织来说,竞争优势不是平台,而是整个组织的能力——我们称之为模型管理——包括许多不同的技术、利益相关者和业务流程。购买该平台是大多数人的合理选择。

您可能会想,“当然,数据科学平台供应商 Domino 认为每个人都应该购买一个数据科学平台。”我们在 Domino 确实对这个主题有自己的看法,但是这种看法来自于与世界各地各种形状和大小的组织的数千次互动,这些组织在成为模型驱动的过程中面临着共同的斗争和障碍。大多数选择自己建造核电站的公司要么停滞不前,要么失败了。那些购买了平台的人正在大规模实施数据科学。这些互动和与试图决定他们是否应该建造或购买的组织一起工作的经验使我们开发了一个严格和客观的框架来促进决策过程。在这个框架中,我们考察三个主要因素:

  1. 总拥有成本需要仔细考察构建、管理和运营数据科学平台的范围。许多组织低估了构建方法的总拥有成本。在一个为期四年的场景中,一个组织首先构建一个支持 30 名数据科学家的数据科学平台(并在随后的几年中以 20%的年增长率增长),我们估计构建的 TCO 超过 3000 万美元,而购买的 TCO 只是其中的一小部分。请参见下面的图 1,了解两种方法的 TCO 的年度对比。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    图一。构建与购买的四年 TCO 预测

  2. 机会成本通过投入资源构建数据科学平台,组织不可避免地会选择放弃其他项目。这种选择可能是不明智的,尤其是如果组织牺牲其核心竞争力,最终将损害组织的收入。

  3. 风险因素数据科学不是一项容易的工作,尽可能降低风险是明智的。在决定构建之前,需要仔细考虑风险因素,如人才获取和保留、技能需求变化以及平台功能需求变化。另一方面,一个组织在选择向哪个供应商购买时也应该非常小心。

如果您想深入了解这个框架的更多细节,可以阅读 Domino 白皮书:“您应该构建自己的数据科学平台吗?”。最终,组织需要决定他们与数据科学的区别在哪里:在他们建立的模型和整体组织能力中,还是在底层基础设施中?对大多数人来说,是前者,所以“购买”方法可能提供最低的 TCO 和最一致的战略选择。

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

R 的重大更新需要重新安装软件包

原文:https://www.dominodatalab.com/blog/significant-update-to-r-requires-re-installation-of-packages

R 的最新更新于 4 月 24 日下降,将统计计算语言带到了 4.0 版本。该更新包含新功能、错误修复和对现有函数的底层行为和语法的更改,有助于优化代码的实现和可重用性。

由于 R 4.0 中核心组件的变化,R 包将需要重新安装,以确保它们能够正常工作,因为核心库的工作方式发生了根本的变化。这一更新可能会带来模型再现性问题,并带来确保数据科学家团队版本一致的古老挑战,使他们能够共同开发模型,并确保在他们的机器上开发的模型能够由其他数据科学家运行并部署到生产中。

在 R 4.0 中所做更改的完整列表可以在综合 R 存档网络中找到。

环境管理

环境管理是 Domino 平台的一个关键组件。它使团队能够配置和维护多个分析环境,这些环境可以以安全、无缝的方式轻松应用于他们的项目和工作台,只需最少甚至不需要 It 交互。它不需要开发人员配置他们自己的本地机器或设置新的虚拟环境来测试更新或新的包,并且在部署后可以很容易地推广到其他团队成员。

该功能通常用于创建“黄金标准”生产环境,在该环境中,所有软件包和软件版本都已经过测试和评估,适合生产;此外,在研发环境中,数据科学家可以测试最新、最棒的软件包和软件更新。

与 Domino 中的所有功能一样,环境管理是完全受版本控制的,这意味着可以随时跟踪变化,并且在底层包或软件组件发生重大变化的情况下,可以恢复完整的环境。这对于像 R 4.0 这样的重大升级来说是至关重要的,否则这些升级可能是破坏性的,导致您的模型崩溃。关键是要有一个平台,能够回忆并使用重现模型所需的确切环境,即使是多年以后。

那么 Domino 如何提供帮助呢?

  1. 计算环境可以跨用户共享。一旦管理员创建了一个新的 R 4.0 环境,他们可以让每个人立即使用它。没有电子邮件爆料说“这里有关于如何在你的笔记本电脑或环境上升级 R 的说明”。
  2. Domino 允许您拥有多个计算环境,并在它们之间轻松切换。更新 R 需要你重新安装所有的软件包,这很可能会升级你的软件包版本。所以有很多地方可以进行突破性的改变。在 Domino 中,您可以创建一个新 R4.0 计算环境,然后在其上测试您的代码。如果它不起作用,因为你可能依赖于一些维护者还没有更新的包,那么你几乎可以立即切换回来。否则,您将升级您的笔记本电脑/服务器,然后测试您的测试材料,然后再次降级。如果你是单个用户,这是一件痛苦的事,但是如果你有很多用户,这就更让人头疼了。没有电子邮件爆炸出去说“我们今晚升级,所以每个人都可以在 EOD 之前测试他们的东西,让我知道是否有问题”。
  3. 最后,由于 Domino 版本和跟踪环境是自动的,升级不会破坏您的旧工作,因为您的旧东西仍然可以在旧环境中运行。事实上,您有代码工作的确切环境和环境版本的记录。没有电子邮件爆料说“有人记得吉姆在离开之前,为我们的季度报告创作情节时使用的是什么版本的 R 吗?”

结论

支撑数据科学的工具和技术在不断发展。数据科学团队通常采用的方法是将虚拟机环境作为开发中心,并在为每个数据科学家发布指令以更新他们的开发环境之前测试软件包。这种方法通常意味着包和版本不兼容,需要故障排除,并阻碍数据科学家的进步。

环境管理使数据科学家可以轻松测试新的软件包和软件更新,但更重要的是,这些环境可以在数据科学团队之间轻松共享,这意味着花费数小时来设置环境以测试同事工作的日子已经一去不复返了。

这使数据科学家能够建立值得信赖的黄金标准生产环境,而不会牺牲他们尝试新出现的软件包和软件的自由或灵活性。

有关 Domino 如何管理环境的更多信息,请查看我们的环境管理概述联系我们进行演示。

Twitter Facebook Gmail Share

Python、R、Matlab 和 Octave 中的简单并行循环

原文:https://www.dominodatalab.com/blog/simple-parallelization

Domino 平台使得在非常强大的硬件(多达 32 个内核和 250GB 内存)上运行云中的分析变得轻而易举,允许通过并行性大幅提高性能。在本帖中,我们将向您展示如何使用多种语言并行化您的代码,以利用多个内核。这听起来可能有点吓人,但是 Python、R 和 Matlab 的特性使它变得非常简单。

请继续阅读,了解如何从一台机器上获得超过 3000%的 CPU 输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
Perf stats from some parallelized Python code running on a single, 32-core machine

我的代码是可并行的吗?

出于本文的目的,我们假设一个常见的分析场景:您需要对许多项目执行一些计算,并且一个项目的计算不依赖于任何其他项目。更准确地说:

  1. 你的分析处理一系列事物,例如,产品、商店、文件、人、物种。让我们称之为inputs
  2. 你可以构建你的代码,这样你就有一个函数,它接受一个这样的东西,并返回一个你关心的结果。我们称这个函数为processInput。(在这一步之后,您可以按照自己的意愿组合您的结果,例如,汇总它们,将它们保存到一个文件中——这对我们的目的来说并不重要。)

通常情况下,您会循环处理您的项目,处理每个项目:

for i in inputs
results[i] = processInput(i)
end
// now do something with results

我们将向您展示如何并行处理所有项目,将工作分散到多个内核,而不是在普通的 a 循环中处理项目。

为了使下面的例子更具体,我们使用了一个数字列表和一个平方数字的函数。当然,您会使用您特定的数据和逻辑。

我们开始吧!

计算机编程语言

Python 有一个很棒的包,[joblib]让并行变得非常容易。

from joblib import Parallel, delayed

import multiprocessing

# what are your inputs, and what operation do you want to

# perform on each input. For example...

inputs = range(10)

def processInput(i):

    return i * i

num_cores = multiprocessing.cpu_count()

results = Parallel(n_jobs=num_cores)(delayed(processInput)(i) for i in inputs

results现在是[1, 4, 9 ... ]

稀有

从 2.14 开始,R 包含了并行库,这使得这类任务变得非常容易。

library(parallel)

# what are your inputs, and what operation do you want to 

# perform on each input. For example...

inputs <- 1:10

processInput <- function(i) {

    i * i

}

numCores <- detectCores()

results = mclapply(inputs, processInput, mc.cores = numCores)

# the above won't work on Windows, but this will:

cl <- makeCluster(numCores)

results = parLapply(cl, inputs, processInput)

stopCluster(cl)

你可以在这个 StackOverflow 帖子上找到更多关于mclapplyparLapply的区别的信息

作为替代,您也可以使用 foreach 包,它允许您使用熟悉的for循环语法,自动并行化您的代码:

library(foreach)

library(doParallel)

library(parallel)

numCores <- detectCores()

cl <- makeCluster(numCores)

registerDoParallel(cl)

inputs <- 1:10

processInput <- function(i) {

  i * i

}

results <- foreach(i=inputs) %dopar% {

  processInput(i)

}

矩阵实验室

Matlab 的并行计算工具箱使得通过使用 parfor 构造来使用并行 for 循环变得很简单。例如:

inputs = 1:10;

results = [];

% assumes that processInput is defined in a separate function file

parfor i = inputs

	results(i) = processInput(i);

end

请注意,如果您的输入不是整数(例如,它们是文件名或项目标识符),您可以使用 parcellfun 函数,它对单元格输入而不是数组输入进行操作。

八度音阶

不幸的是,Octave 没有一个好的parfor等价物——但是它有自己的并行包。你可以这样使用它:

if exist('OCTAVE_VERSION') ~= 0

	% you'll need to run this once, to install the package:

	% pkg install -forge parallel

	pkg load parallel

end
inputs = 1:10;
numCores = nproc();

% assumes that processInput is defined in a separate function file
[result] = pararrayfun(numCores,@processInput, inputs);

请注意,如果您的输入不是数字(如文件名或产品标识符),您可以使用 parcellfun 功能。

结论

现代统计语言使得跨内核并行化代码变得非常容易,而 Domino 使得访问拥有许多内核的强大机器变得轻而易举。通过使用这些技术,我们已经看到用户在使用单台机器的情况下将代码速度提高了 32 倍以上。

如果您想尝试将这种方法应用到您的分析中,请告诉我们,我们很乐意帮助您!

ML 内部:合成少数过采样(SMOTE)技术

原文:https://www.dominodatalab.com/blog/smote-oversampling-technique

在本文中,我们讨论了为什么在不平衡的数据集上拟合模型是有问题的,以及通常如何解决类别不平衡。我们展示了 SMOTE 算法的内部工作原理,并展示了一个简单的“从头开始”的 SMOTE 实现。我们使用人工构建的不平衡数据集(基于 Iris)通过我们的 SMOTE 实现生成合成观察值,并讨论帮助 SMOTE 处理分类属性的修改。数据集和代码可在这里获得。

机器学习算法通常需要处理高度不平衡的数据集。当我们说一个分类数据集不平衡时,我们通常指的是数据集中包含的不同类不是均匀表示的。例如,欺诈检测数据集通常具有 100:1 的比率,因为与合法支付的数量相比,欺诈交易的数量相对较少。在其他领域观察到甚至更高的偏斜度。例如,高能物理分类问题可以具有 100,000:1 的背景信号比(Clearwater 和 Stern,1991)。在蛋白质分类中遇到同样的挑战,其中一类中的蛋白质数量通常比该类之外的蛋白质数量少得多(赵等,2008)。此外,不平衡的数据加剧了此类生物数据中常见的维数灾难带来的问题。

处理高度不平衡的数据可能在几个方面存在问题:

  • 扭曲的性能指标 —在高度不平衡的数据集中,比如一个类比为 98:2 的二进制数据集,一个总是预测多数类而完全忽略少数类的算法仍然会有 98%的正确率。这使得像分类准确度这样的度量变得毫无意义。这反过来使得分类器的性能评估变得困难,并且还会损害努力使准确度最大化的算法的学习。
  • 少数类中的训练数据不足 —在数据收集成本高昂的领域中,包含 10,000 个示例的数据集通常被认为是相当大的。但是,如果数据集不平衡,类比率为 100:1,这意味着它只包含 100 个少数类的示例。这个数量的示例可能不足以使分类算法建立良好的决策边界,并且可能导致较差的概括

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

Figure 1: Balanced vs. imbalanced datasets — Left-hand side: a balanced binary dataset, which contains an approximately equal number of observations of its two classes (male and female); right-hand side: an imbalanced dataset where the ratio of legitimate to fraudulent transactions is 100:1.

从历史上看,类不平衡是通过欠采样解决的,其本质归结为丢弃来自多数类的观察值。这可以通过从多数类中随机抽取与少数类中的观察值数量相同的多个观察值来天真地执行。将两者合并会产生一个完全平衡的数据集(50:50)。这种方法的问题是,在高度不平衡的集合中,它很容易导致大部分数据必须被丢弃的情况,并且已经坚定地确立,当涉及到机器学习时,数据不应该被轻易丢弃(Banko 和 Brill,2001;Halevy 等人,2009 年)。其他技术包括简单的重新采样,其中少数类被连续地重新采样,直到获得的观察值的数量与多数类的大小相匹配,以及集中欠采样,其中来自多数类的丢弃的观察值被仔细地选择以远离决策边界(Japkowicz,2000)。研究还表明,考虑中的一些技术可以结合使用,例如,凌和李(1998)同时证明了多数欠采样和少数过采样。然而,似乎尽管对多数类的欠采样比少数类的重采样产生了更好的结果,但是结合这两种技术并没有导致显著的改进。

人工示例的生成

必须注意,过采样中使用的传统技术通常依赖于简单的替换采样。在其 2002 年的论文中,Chawla 等人提出了一种不同的策略,其中通过生成合成样本来对少数类进行过采样。他们证明了这种合成少数过采样技术(SMOTE)和多数欠采样的组合产生了显著更好的分类器性能。

以下是 SMOTE 算法的简化版本:

import random

import pandas as pd

import numpy as np

from sklearn.neighbors
import NearestNeighbors

from random import randrange

def get_neigbours(M, k):

nn = NearestNeighbors(n_neighbors=k+1, metric="euclidean").fit(M)

dist, indices = nn.kneighbors(M, return_distance=True)

return dist, indices

def SMOTE(M, N, k=5):

t = M.shape[0] # number of minority class samples
numattrs = M.shape[1]

N = int(N/100)

_, indices = get_neigbours(M, k)

synthetic = np.empty((N * t, numattrs))

synth_idx = 0

for i in range(t):

for j in range(N):

neighbour = randrange(1, k+1)

diff = M[indices[i, neighbour]] - M[i]

gap = random.uniform(0, 1)

synthetic[synth_idx] = M[i] + gap*diff

synth_idx += 1

return synthetic

该算法接受三个必需的参数-少数观察值列表(M,一个 Numpy 数组)、所需的过采样量(N)和要考虑的最近邻数(k)。请注意,N 的值被解释为百分比,因此 N = 100 的过采样将产生许多与 M 中的观测值相匹配的合成观测值,N = 200 将产生两倍于 M 中的观测值,依此类推。注意,原始算法没有规定用于选择最近邻居的特定例程。这里我们使用基于欧几里德的 kNN,但这不是一个硬性要求。

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

Figure 2: An imbalanced dataset based on Fisher’s Iris (Fisher, 1936) — six observations of class 0 have been sampled at random, and all observations of class 1 have been kept intact. The minority to majority ratio is 12:100

让我们检查 Iris 数据集的随机不平衡样本(图 2),其中只考虑了两个目标类。少数类仅包含 6 个观察值,但我们可以使用 SMOTE 对其进行上采样,并获得完全平衡的数据集,其中类 0 和 1 包含相同数量的样本。图 3 显示了在这种情况下 SMOTE 如何生成合成观测值的直观解释。

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

Figure 3: Generation of synthetic observations for a single member of the minority class — Start with the minority class (3a) and select a member at random (3b). Identify its k-nearest neighbours (3c). Place a new observation between the member and each of its neighbours. The specific distance of each synthetic observation from the selected minority member is chosen at random (3d)

该算法迭代少数类中的每个观察值。一旦选择了少数观测值,SMOTE 就识别其 k 个最近的邻居,并随机选择一组邻居用于生成过程。请注意,所用邻居的数量取决于所需的过采样量。例如,如果 k = 3 且 N = 100,则只需要一个随机选择的邻居。如果 N = 200,将选择两个随机邻居。在⌊N/100⌋ > k 的情况下,SMOTE 将使用替换对邻居集进行采样,因此将多次使用同一个邻居。

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

Figure 4: Repeated generation of synthetic observations for the same minority member leads to different new observations, because of the adjustment via the random gap component.

在选择了邻居之后,该算法取少数成员和单个邻居的特征向量之间的差。然后,将每个差值乘以(0,1)中的随机数,并加回特征向量。这在每个成员的方向上构建了合成观测值,这些观测值位于离少数成员随机距离处。请注意,由于距离计算的随机性,使用相同少数成员-最近邻组合的重复迭代仍然会产生不同的合成观察结果(见图 4)。

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

Figure 5: Results of up-sampling via SMOTE for N = 100 (left) and N = 600 (right). The synthetic observations are coloured in magenta. Setting N to 100 produces a number of synthetic observations equal to the number of minority class samples (6). Setting N to 600 results in 6 × 6 = 36 new observations.

图 5 展示了对少数类运行 SMOTE 的结果,其中 k = 5,N 值设置为 100 和 600。检查该图可以发现,所有的合成观测值都位于连接两个少数样本的直线上。这是基于 SMOTE 的上采样的一个非常明显的特征。此外,上采样提供优势背后的直觉可以通过以下事实来解释:少数类中的更多观察导致更宽的决策边界。学习更宽的区域提高了分类器的泛化能力,因为少数类的区域没有被多数类的观察结果如此紧密地约束。Chawla 等人(2002 年)对基于 SMOTE 的上采样的影响进行了综合评估。他们证明了将少数向上采样与多数向下采样相结合会产生最好的结果。他们的测试是使用 C4.5 生成的决策树(Quinlan,1993)进行的,这些决策树适用于十个不同的不平衡数据集(例如,Pima Indian Diabetes (Smith 等人,1988),E-state 数据(Hall 等人,1991),Oil 数据集(Kubat 等人,1998)等)。C4.5、SMOTE 上采样和多数下采样组合的性能是针对另外两个分类器进行评估的。第一种是朴素贝叶斯分类器,其先验被调整以校正类别不平衡。第二个是 RIPPER2 拟合的基于规则的分类器,它也非常适合于类分布不平衡的数据集。

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

Figure 6: Up-sampling using SMOTE with k = 5 and N = 500. The synthetic observations have been merged with the six original minority samples, and the new up-sampled dataset is plotted using pairwise scatter plots for each possible combination of the four original Iris attributes.

结果表明,SMOTE-C4.5 组合始终优于其他两种分类器——SMOTE-c 4.5 分类器仅在所进行的 48 个实验中的 4 个实验中表现最佳。Chawla 等人(2002 年)还解释了为什么简单的替换过采样与基于 SMOTE 的上采样相比性能更差——少数观察值的简单复制导致决策区域缩小,这与良好概括所需的情况相反。另一方面,合成上采样扩展了决策区域,这提高了分类器性能。

SMOTE 和分类特征

SMOTE 的一个局限性是它不能处理只包含分类特征的数据集。有一种算法的修改,称为合成少数过采样技术-名义连续(SMOTE-NE),它可以处理具有连续和分类特征混合的样本。除了 vanilla SMOTE 之外,SMOTE-NE 还执行以下操作:

  1. 中值计算 —该算法计算少数类中所有连续属性的标准偏差,然后计算标准偏差的中值;
  2. 最近邻识别-使用欧几里德距离计算用于 k-最近邻选择的度量,并对任何不匹配的分类属性进行额外的校正。对于所选少数成员和潜在邻居之间不同的每个分类属性,预先计算的中值作为一个分量添加到欧几里德距离计算中;
  3. 合成样本校正 —通过 vanilla SMOTE 计算合成样本的连续特征。使用 k 个最近邻居的分类属性中最频繁的值来设置合成分类属性;

Chawla 等人(2002 年)提供了一个说明这种修改的例子。

例 1 :设少数集合包含以下观察值:

$ $
O1 = {1,2,3,a,b,c}^t \
O2 = {4,6,5,a,d,e}^t \
O3 = {3,5,6,a,b,k}^t $ $

设连续属性的标准差中值为(Med = SD(1,4,3),SD(2,6,5),SD(3,5,6)),本次迭代选择的少数成员为(O1)。(O1)和(O2)之间的欧几里德距离则为:

$ $ \ begin { equation * }
d(O1,O2)= \sqrt{(4-1)2+(6-2)2+(5-3)2+med2+med^2}
\ end { equation * } $

对(O1)和(O2)之间不同的两个分类属性应用两次中值校正,即:(B \右箭头 d )、(C \右箭头 E)。(O1)和(O3)之间的距离同样计算如下:

$ $ \ begin { equation * }
d(O1,O3)= \sqrt{(3-1)2+(5-2)2+(6-3)2+med2}
\ end { equation * } $

对(C \右箭头 K)变化进行一次修正。

提醒一句。Chawla 等人(2002 年)没有对这种修正进行严格的数学处理,建议的中值修正似乎完全是由经验驱动的。这带来了这种修改比像多数欠采样这样的简单方法表现更差的风险。事实上,在最初的论文中,Chawla 等人注意到,当在成人数据集上进行测试时,这种变体“比基于 AUC 的普通欠采样表现更差”(Dua & Graff,2017)。

SMOTE 的另一个修改,称为 SMOTE-N(用于名义特征),试图绕过 SMOTE-NE 的限制,即数据集不能只由分类特征组成。SMOTE-N 变体使用值距离度量(VDM)的修改版本,这是 Cost 和 Salzberg (1993)为在符号域中操作的最近邻算法建议的(即,特征不再是数字的,但是仍然需要观察值之间的实值距离)。对于所有要素都是分类的数据集,VDM 将两个对应的特征值(v1)和(v2)之间的距离计算为

δ ( v 1 , v 2 ) = ∑ c = 1 c ∣ p ( c ∣ v 1 f ) − p ( c ∣ v 2 f ) ∣ k , k ∈ { 1 , 2 } \delta (v1,v2)= \sum_{c=1}^c | p(c | v1 _ f)-p(c | v2 _ f)|^k,k\in\{1,2\} δ(v1v2)=c=1cp(cv1f)p(cv2f)kk{12}

其中©是数据集中的类的数量,(p(c|v1_f))是类©的条件概率,假设特征(f)的值为(v1\ ),而(p(c|v2_f))是类©的条件概率,假设特征(f)的值为(v2\ ),并且(k)是设置为 1 的常数(k=1 产生曼哈顿距离,k=2 产生欧几里德距离)。

两次观测(O1)和(O2)之间的距离进一步定义为

Δ ( O 1 , O 2 ) = ∑ f = 1 F δ ( O 1 f , O 2 f ) r , r ∈ { 1 , 2 }  (1) \Delta (O1,O2) = \sum_{f=1}^{F} \delta (O1_f,O2_f)^r,r\in\{1,2\} \text{ (1)} Δ(O1O2)=f=1Fδ(O1fO2f)rr{12} (1)

例 2 :假设(\mathcal{D})是一个二元分类数据集,由以下三个
观测值及其对应的类组成

$$O1 = {A,B,C,D,E,}^T,0\
O2 = {A,F,C,G,N,}^T,0\
O3 = {H,B,C,D,N,}^T,1 $ $

(O1)和(O2)之间的距离可以计算为

$ $ \ begin { equation * }
\ begin { aligned }
\ delta(O1,O2)&= \sum_{f=0}^{f} \ delta(O1 _ f,O2_f)^1 = \delta (A,A) + \delta (B,F) + \delta (C,C) + \delta (D,G) + \delta (E,n)\
&= \sum_{c=0}^1 | p(c | a _ 0)-p(c|a_0)|1+\sum_{c=0}1 | p(c | b _ 1)-p(c|f_1)|1+\sum_{c=0}1 | p(c | c

可以使用以下事实来计算(1)中的条件概率

$ $ p(c | v _ f)= | v _ f | _ c \ div | v _ f | _ \ mathcal { D } $ $

其中(|v_f|c)是类(c)的特征值(v_f)出现的次数,而(|v_f|\mathcal{D})是数据集中(v_f)出现的总次数。然后,我们可以如下获得成对特征距离

$ $ \ begin { equation * }
\ begin { aligned }
\ delta(a,a)= \sum_{c=0}^1 | p(c | a _ 0)-p(c | a _ 0)|^1&= | | a | _ 0 \ div | a | _ \ math cal { d }-| a | _ 0 \ div | a | _ \ math cal { d } |+| | a | _ 1 \ div | a | _ \ math cal { d }-| a | _ 1 \ math cal { d }-| a | _ 1 \ div | a | _ \ a f)= \sum_{c=0}^1 | p(c | b _ 1)-p(c | f _ 1)|^1&= | | b | _ 0 \ div | b | _ \ mathcal { d }-| f | _ 0 \ div | f | _ \ mathcal { d } |+| | b | _ 1 \ div | b | _ 1 | b | _ \ mathcal { d }-| f | _ 1 \ div | f | _ \ mathcal { d } | \ \【T6 = | 1 \ div 2-1 \ div 1 |+| 1 \ div 1

同样,我们得到

$ $ \ begin { equation * }
\ begin { aligned }
\ delta(C,C)&= | 2 \ div 3-2 \ div 3 |+| 1 \ div 3-1 \ div 3 | = 0 \
\ delta(D,G)&= | 1 \ div 2-1 \ div 1 |+| 1 \ div 2-0 \ div 1 | = 1 \
\ delta(E,N) & = | 1 \div 1 - 1

最后

$ $ \ begin {equation*}
\ begin { aligned }
\ delta(O1,O2)&= \sum_{f=0}^{f} \ delta(O1 _ f,O2_f)^1 = \delta (A,A) + \delta (B,F) + \delta (C,C) + \delta (D,G) + \delta (E,n)\
&= 0+1+0+1 = 3
\ end { aligned }
\ end { equation * } $【结束{ equation * }

类似地(\Delta (O1,O3) = 5)和(\Delta (O2,O3) = 6)。注意,因为(\delta)是对称的,所以(\Delta (O1,O2) = \Delta (O2,O1))、(\Delta (O2,O3) = \Delta (O3,O2))等也是对称的。

在通过 VDM 选择相关的(k)最近邻居之后,SMOTE-N 通过简单地基于邻居采取多数投票来获得合成特征向量的值,从而创建新的观察值。请记住,原始论文没有提供 SMOTE-N 的任何性能比较,因此不建议在没有研究替代方法和评估其性能的情况下将其用作“首选”技术。此外,SMOTE-N 的原始描述没有讨论投票过程中的平局打破,但是,一个简单的启发式方法是随机选取一个平局选项。

摘要

在这篇博文中,我们讨论了为什么处理不平衡数据集通常会有问题,并介绍了 SMOTE 的内部原理——一种用于上采样少数类的常用技术。我们还讨论了 SMOTE 的两个修改,即 SMOTE-NE 和 SMOTE-N,它们针对具有分类特征的数据集。

这篇博文中使用的数据集和代码可以在**https://try.dominodatalab.com**获得,这里显示的所有结果都是完全可再现的,这要感谢 Domino reproducibility engine,它是 Domino Enterprise MLOps 平台的一部分。如果你想自己尝试这个项目,你可以通过点击上面的链接注册一个免费账户。

参考

  • Banko,m .,& Brill,E. (2001 年)扩展到非常非常大的自然语言消歧语料库。计算语言学协会第 39 届年会会议录,26–33。https://doi.org/10.3115/1073012.1073017
  • 舒拉、鲍耶、K. W .、霍尔、L. O .、凯格尔迈耶、W. P. (2002 年)。Smote:合成少数过采样技术。j .阿提夫。里面的第 16(1)号决议,第 321 至 357 段。
  • s .克利尔沃特和 e .斯特恩(1991 年)。高能物理事件分类中的规则学习程序。计算机物理通讯,67(2),159–182 页。https://doi . org/10.1016/0010-4655(91)90014-C
  • 科恩和辛格(1999 年)。一个简单、快速、有效的规则学习者,335–342。成本,s .,&萨尔茨伯格,S. (1993)。一种带符号
    特征的加权最近邻学习算法。机器学习,57–78。
  • Dua,d .,& Graff,C. (2017)。UCI 机器学习知识库。http://archive.ics.uci.edu/ml·费希尔(1936 年)。分类问题中多重测量的使用。优生学年鉴,
    7(2),179–188。https://doi.org/10.1111/j.1469-1809.1936.tb02137.
  • Halevy,A. Y .,Norvig,p .,& Pereira,F. (2009 年)。数据的不合理有效性。IEEE 智能系统,24(2),8–12。http://dblp . uni-trier . de/db/journals/expert/expert 24 . html # halevynp 09
  • 霍尔、莫尼和基尔(1991 年)。电拓扑状态:分子图在原子水平上的结构信息。化学博士。Inf。计算机。Sci。, 31, 76–82.
  • Japkowicz,N. (2000 年)。阶层失衡问题:意义与策略。2000 年国际人工智能会议(ICAI)论文集,111–117。
  • Kubat,r . c . Holte 和 s . Matwin(1998 年)。卫星雷达图像中探测石油泄漏的机器学习。马赫。学习。, 30(2–3), 195–215.https://doi.org/10.1023/A:1007452223027
  • 凌春霞、李、陈(1998)。直接营销的数据挖掘:问题与解决方案。第四届知识发现和数据挖掘国际会议论文集
    , 73–79。
  • 昆兰,J. R. (1993 年)。C4.5:机器学习程序。摩根·考夫曼出版公司。
  • 史密斯、J. W .、埃弗哈特、J. E .、迪克森、W. C .、诺勒、W. C .、&约翰内斯、R. S. (1988)。使用 adap 学习算法预测糖尿病的发病。医疗保健中的计算机应用年度研讨会会议录,261–265。
  • 赵晓明,李晓霞,陈,李,,王(2008)。不平衡数据下的蛋白质分类。蛋白质,70(4),1125–1132。https://doi.org/10.1002/prot.21870
内容概要:本文《2025年全球AI Coding市场洞察研究报告》由亿欧智库发布,深入分析了AI编程工具的市场现状和发展趋势。报告指出,AI编程工具在2024年进入爆发式增长阶段,成为软件开发领域的重要趋势。AI编程工具不仅简化了代码生成、调试到项目构建等环节,还推动编程方式从人工编码向“人机协同”模式转变。报告详细评估了主流AI编程工具的表现,探讨了其商业模式、市场潜力及未来发展方向。特别提到AI Agent技术的发展,使得AI编程工具从辅助型向自主型跃迁,提升了任务执行的智能化和全面性。报告还分析了AI编程工具在不同行业和用户群体中的应用,强调了其在提高开发效率、减少重复工作和错误修复方面的显著效果。最后,报告预测2025年AI编程工具将在精准化和垂直化上进一步深化,推动软件开发行业进入“人机共融”的新阶段。 适合人群:具备一定编程基础,尤其是对AI编程工具有兴趣的研发人员、企业开发团队及非技术人员。 使用场景及目标:①了解AI编程工具的市场现状和发展趋势;②评估主流AI编程工具的性能和应用场景;③探索AI编程工具在不同行业中的具体应用,如互联网、金融、游戏等;④掌握AI编程工具的商业模式和盈利空间,为企业决策提供参考。 其他说明:报告基于亿欧智库的专业研究和市场调研,提供了详尽的数据支持和前瞻性洞察。报告不仅适用于技术从业者,也适合企业管理者和政策制定者,帮助他们在技术和商业决策中更好地理解AI编程工具的价值和潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值