原文:Domino Blog
0.05 是一个任意的分界点:“化失败为胜利”
原文:https://www.dominodatalab.com/blog/0-05-arbitrary-cut-off-turning-fails-wins
优步的数据科学家 Grace Tang 在她的 Strata Singapore 会议“化失败为成功”中,提出了见解、常见陷阱和“确保所有实验都有用的最佳实践”。唐拥有斯坦福大学神经科学博士学位。
这篇多米诺数据科学领域笔记的博文提供了唐演讲的亮点,包括反思失败的实验、挑战假设、识别常见陷阱,以及通过分享知识避免偏见和重复工作的最佳实践。帖子包括完整的视频演示。附有详细演讲者注释的幻灯片可供下载。
反思失败的实验
Grace Tang 作为一名帮助团队设计和运行实验的数据科学家,在她的演讲中涵盖了偏见、常见陷阱以及将“失败”的实验转化为“成功”的最佳实践。唐对 p < 0.05 is always a “win” and p > 0.05 是“失败”的假设提出质疑,指出 0.05 是一个“任意的截止值”,而可能会发生变化。通过幽默,唐还指出了当人们的主要目标是让他们的实验产生重大结果时,他们可能会经历的压力。这意味着这种压力可能会强化假设,导致常见的陷阱,并给实验带来偏差。
假设和常见陷阱
唐继续通过讨论一些“成功”实际上是如何“失败”来挑战假设,特别是当深入研究实验设计并发现通过有偏采样、非随机分配、选择加入偏差、样本量太小、样本量太大或 p-hacking 将偏差或混杂变量引入实验时。唐还提到了组织如何通过“根本不测试”来避免“失败”的实验。虽然唐在她的演讲中深入探讨了每个潜在的常见陷阱,但在进入统计最佳实践之前,我们将在本帖中讨论 p-hacking(也称为:数据钓鱼或数据挖掘)。
正如唐坦率地讨论的那样,P-hacking 是指通过重复进行实验直到它变得显著而引入偏倚或假阳性。每次进行实验时,“都有一定的机会偶然得到重要的结果”…而且“随着我们进行更多的测试,假阳性的几率会增加”。这是一个常见的陷阱,以至于唐引用了的“有意义的”。虽然幽默,漫画有效地说明了 p 黑客如何可能提供一个假阳性。关于 p-hacking 的影响和后果的额外信息,尽管语气更加严肃,可在这篇 PLOS 论文中获得。
统计最佳实践
唐主张,为了
“为了让我们的失败或不重要的结果有用,为了让任何结果有用,我们需要根据统计最佳实践来设置我们的实验,以便我们可以信任我们的结果并得出准确的结论,更重要的是,采用正确的公司文化和流程,鼓励报告所有实验结果,即使是无效或有害的结果”(幻灯片 36)。
在唐的演讲中,我们列举了几个统计学上的最佳实践,包括
- 在进行实验之前列出假设,因为这可能有助于阻止以后的黑客行为
- 随机抽样中“仅将结论推广到包含的群体”
- 确保在随机分配的情况下,“治疗组和对照组之间没有系统性差异”…这“可能成为一个混淆的变量”。考虑使用随机生成器或 UUIDs(通用唯一标识符),不要使用姓名、电子邮件和电话号码等属性。
- 考虑使用 Bonferroni 校正来“控制假阳性率”或校正多重比较。
- 分享知识使每个人都能学习,“还能防止重复劳动”
结论
唐在演讲的最后强调,组织要创造一种追求“真理”而非“意义”的文化。唐还呼吁将“失败”实验的结果应用到未来的设计-制造-测试迭代中,以便“随着时间的推移改进策略,而不是依赖直觉”。利用统计和文化最佳实践的结合允许数据科学家和他们的组织接受“失败是成功之母”的说法。
https://www.youtube.com/embed/nVCvHFKnlko?rel=0
^(多米诺数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果你对本博客系列中涉及的数据科学工作感兴趣,请给我们发电子邮件至 writeforus@dominodatalab.com。)
使用数据科学的 10 种有趣方式
原文:https://www.dominodatalab.com/blog/10-interesting-uses-of-data-science
这些天到处都在谈论数据科学令人兴奋的应用,特别是与机器学习相关的应用。虽然大多数媒体的注意力都集中在大牌和性感的话题上——例如,谷歌大脑、图像分类、语音识别——但我们很幸运每天都与那些使用数据科学工具进行迷人工作的公司合作。虽然有时更平凡,但它们的许多用例有更多的现实影响。
数据科学的一些用途是什么?
为了说明数据科学可以应用的领域的多样性,我想分享一些我们在 Domino 遇到的更有趣的应用程序。不幸的是,出于保密原因,我不能详细阐述其中的一些,但我希望它们能激发你的想象力和创造力。他们会给你带来什么新的想法?
健康与保健
心理卫生保健
Ginger.io 使用来自用户移动设备的数据来了解用户的感受。这对最终用户和他们的医生都很有用。根据 Ginger 的网站,他们的“行为
分析引擎,建立在麻省理工学院媒体实验室多年的研究基础上,在通过统计分析产生有意义的见解之前,聚合,加密和匿名患者数据。”
药物开发
企业制药业务通过使用数据科学和深度学习模型加快了药物开发和生产。为了能够向全球患者提供精确的药物治疗,数据科学家必须能够在人类手动分析大量数据集的一小部分时间内进行分析。这些数据科学家的目标是构建模型,这些模型可以基于从基因组到活检标本全切片图像的数据运行模拟临床试验。使用数据科学进行这些临床试验可以获得可重复的结果,并能够沿着开发生命周期跟踪成功情况。
保险
车祸索赔理算员
一家汽车保险公司正在使用数据科学来自动化其理赔员的一些工作。他们不再花费大量时间派遣理算师去对事故进行综合评估,而是利用事故数据来预测必要的维修费用。这不会完全取代人工调节,但会让它们更有效率。
预测性汽车维护
数据科学社区以几年前我们无法想象的方式深入研究了汽车行业的每个方面。例如,一家主要的汽车公司一直在开发模型,以探索深度学习如何对来自发动机的音频记录做出反应,以确定是否有必要进行维护,或者零件是否接近需要更换。
灾难风险
Kat Risk 开发人员已经建立了高精度的天气相关灾难(如洪水、风灾)风险预测模型。与大型保险和经纪公司合作,他们的机器学习模型被用于定义内陆洪水事件,模拟热带气旋路径,并生成与气候变化相关的预测。
航空旅行报销
欧洲法规要求航空公司对航班延误或取消的乘客进行赔偿,而 Flightright 通过为您处理流程的官僚主义,帮助客户追回资金。他们根据你提供的信息,使用数据科学来预测你索赔成功的可能性。
社会公益
儿童福利
Case Commons 是一家非营利组织,它制作软件来帮助社会工作者和社会福利项目的管理者。根据他们的网站,他们的软件使用“预测算法,例如,可以显示给定儿童的计划路径。这意味着,我们可以利用机构历史记录告诉我们的在永久性、教育和卫生等领域的长期结果,丰富管理当前案例的信息视图。”
野生动物管理
一家定量研究公司与包括 NOAA 在内的许多机构合作,改善西北太平洋地区的野生动物管理。例如,他们的一个项目涉及模拟栖息地恢复对鲑鱼种群的影响,因此他们可以最佳地指导栖息地恢复工作。
直接邮寄筹款
捐赠局利用数据科学提高直邮活动的针对性。他们与非营利组织和政治团体合作,最大限度地提高直邮活动中每封信的回报。他们的数据科学家针对超过 10 亿笔交易和数千万捐赠者的数据仓库训练目标模型。
我应该使用数据科学吗?
利用数据科学和机器学习可以用来解决组织中超出此列表的问题。法律团队、营销、金融、会计和任何其他数据密集型领域等学科越来越多地投资于提高其数据科学能力。了解您的组织拥有哪些数据以及业务面临的挑战是一个很好的起点
在您开始进一步探索之前,对照用例清单权衡您的业务问题,看看哪种方法最有意义。
2014 年数据科学薪酬调查
原文:https://www.dominodatalab.com/blog/2014-data-science-salary-survey
Contributed by John King and Roger Magoulas
如果有一件事是数据社区的人擅长的,那就是利用他们的分析技能找到高薪工作。我们的数据科学调查显示平均工资为 98,000 美元。
在过去的三年里,O’Reilly Media 一直在与 Strata + Hadoopworld 大会合作进行一项匿名数据科学薪酬调查,以了解哪些因素对数据分析师和数据工程师的薪酬影响最大。该调查对公众开放,来自 53 个国家和美国 41 个州的 800 多名在数据领域工作的人做出了回应。欲了解更多详情,您可以免费下载完整的 2014 年数据科学薪酬调查报告。而且,你可以自己参加调查。
O’Reilly 通过许多公共渠道和活动宣传这项调查。因此,调查人群更多地反映了奥赖利受众,而不是数据工作者的一般人群。与普通人群相比,调查受访者可能会使用更多的开源工具和新技术,并拥有更多的技术领导和管理职位。
那些回答者在各种行业工作,来自各种背景——不全是严格的技术人员。虽然几乎所有的受访者都有一些技术职责和背景,但不到一半的人以个人贡献者的身份工作。受访者的主要角色/职责包括分析师(谁编码)、统计师、软件开发人员、技术领导和经理。
调查中的 40 个问题涵盖了人口统计、工具使用和薪酬主题。看看什么工具与最高工资最相关有助于确定技能需求大于劳动力供应的市场条件(地理在供求中起作用,我们看到技术密集型的加利福尼亚、得克萨斯、西北和东北(马萨诸塞州至弗吉尼亚州)的工资最高)。总体的工具选择,以及下面详述的工具使用分类,显示了我们调查中的数据工作者是如何完成工作的。
一个关键的发现是,你学得越多,你挣得越多——使用最广泛工具的受访者往往挣得更多。一个原因可能是许多工具表征了合并的 Hadoop 生态系统,其中新工具满足了新的利基需求,如实时/流数据、日志处理和内存数据管理。这并没有降低使用 RDBMS 等传统工具的价值,同时了解 Hadoop 和 RDBMS 的人比单独使用其中任何一种的人获得了更高的工资。此外,SQL 仍然是所有受访者最常用的工具。
一个关键的发现是,你学得越多,你挣得越多
在分析方面,最常用的工具包括 SQL,其次是 Excel 和 R (tied),然后是 Python 和 Tableau。对于数据管理,最常用的有 SQL、MySQL MS SQL Server、Oracle、Hadoop 和 Hive。
我们想进一步了解工具的使用与我们的调查队列之间的关系。使用聚类算法,我们发现了五个聚类。很少有回答者只使用单一组中的工具,大多数回答者使用五个组中的四个组中的工具。这些集群确实表明,在一个集群中使用一个工具会增加在该集群中使用另一个工具的可能性,许多受访者倾向于使用一个或两个集群,而很少使用其他集群中的工具。
工具使用集群
集群 1 -
专有分析
SQL、Excel、MS SQL Server、Oracle、Oracle BI、SAS、SPSS、Microstrategy、Business Objects、C#、PowerPIvot
集群 2 -
Hadoop 生态系统
Hadoop(所有发行版)、Spark、Java、Scala、Pig、HBase、Hive、Cassandra、MongoDB、Storm、AWS/Elastic Map Reduce、Redis、Pentaho、Splunk、Mahout
集群 3 -
数据科学
Python,R,Matlab,自然语言处理,网络/社交图,Continuum (Numpy,SciPy),Weka,libsvm
集群 4 -
表示层
Mac、Javascript、D3、MySQL、Postgres、Google Chart Tools、SQLite、Ruby
集群 5 -
数据管理
Unix、C/C++、Perl
我们有一个异常值工具 Tableau,它的使用率相对较高,但不太适合单个集群。Tableau 确实与第一组和第二组相关。
集群 2 (Hadoop 生态系统)包含大量工具,这反映了集群的两个特征:集群中的受访者使用最多的工具(18-19 个,几乎是集群 1 中一些工具的两倍);此外,群集中的许多工具是互补的且用途单一,反映了 Hadoop 生态系统不断发展和融合的本质。
当查看集群以及它们如何适应我们根据数据构建的回归模型时,我们看到集群 1(专有分析)中的受访者工资略低,而集群 2 (Hadoop 生态系统)和集群 3(数据科学)中的受访者工资相对于平均值略高。
查看薪资调查的结果可以为最受欢迎的工具提供一些指导,这些信息可以帮助你设定学习路径和职业选择。然而,在动态数据空间中,您可以预期变化。我们从 Strata 会议提交的提案中了解到,越来越多的数据专业人士希望分享他们对实时/流媒体和弹性搜索等主题的了解。将于秋季进行的下一次数据科学薪资调查将提供更多指导。
3 家公司,3 种构建数据科学的方式
原文:https://www.dominodatalab.com/blog/3-companies-3-ways-to-structure-data-science
如果有一件事是数据科学领导者可能同意的,那就是当你制定企业战略以加快模型速度时,没有“正确”的方法来组织数据科学团队。
每种模式——集中式、分布式(也称为联合式)或中心辐射式——都有其优缺点,公司已经发现使用每种方法都可以成功开发企业级数据科学功能。
事实证明,关键是为您的组织选择正确的模式。
数据科学领导者 Matt Cornett(来自 Transamerica)、Patrick Harrison(来自一家全球金融情报公司)和 Brian Loyal(来自 Bayer Crop Science)深入探讨了在制定企业数据科学战略时,不同因素如何影响使用何种组织结构以及何时使用的决策。他们的评论是关于利用数据科学推动成果的最佳实践的网上研讨会的一部分内容如下。
典型的数据科学组织结构
Matt、Patrick 和 Brian 强调了不同的组织结构,他们认为每种结构都有其优点和缺点。
- 集中化模式: Matt Cornett 是 Transamerica 的数据科学总监,他领导着一个向公司首席行政官报告的集中化团队。像 Transamerica 这样的集中团队将职能集中在一个领导下,以监督人才、基础设施和工具、最佳实践和知识共享。这些团队可能面临的一个挑战是他们与业务优先级脱节的潜在感觉。为了解决这个问题,Matt 建议集中化的团队寻找尽可能与业务保持联系的方法。例如,他的团队中的参与经理积极地与一线的业务人员建立关系,并在他们开发解决方案时扩展他们的领域知识。
- 分布式或联合模型: Patrick Harrison 是一家全球金融情报公司的 AI 工程总监,他描述了一种分布式团队结构(有时称为联合模型)。在这里,没有中央数据科学团队。数据科学家直接向企业中不同的业务领导汇报。联合团队通常与业务流程和优先级有很强的一致性,并且可以更容易地构建深厚的领域专业知识。但是,正如 Patrick 指出的那样,数据科学家经常会感到与他们的数据科学同事隔离。在业务的不同部门工作的数据科学家也更有可能重复工作,因为他们孤立地工作来解决类似的问题。Patrick 说,为了应对这些挑战,联合团队需要开发一个数据科学支持网络,并在一个数据科学平台上集中工作,以连接整个组织的数据科学家,使他们能够讨论共同的兴趣和挑战。
- **混合模式或中心辐射模式:**Bayer Crop Science 的云分析主管 Brian Loyal 讨论了他的公司对混合模式的使用。在这里,卓越中心负责建立最佳实践,在整个组织中构建数据科学文化,并解决跨组织的挑战。同时,不同业务线内的数据科学团队应对特定的运营挑战。正如 Brian 指出的,这种方法可以提供集中和联合方法的优点,但是需要所有参与者就每个领域的角色进行大量的协调和达成一致。
听 Matt Cornett、Patrick Harrison 和 Brian Loyal 讨论他们不同的组织结构。
https://www.youtube.com/embed/HIPLA5NEam8
组织如何选择他们的结构?
Matt、Patrick 和 Brian 分享了七个关键因素,他们认为这些因素可以帮助指导公司确定正确的道路。需要注意的是:领导者应该全面考虑这些因素。在这个过程中,艺术和科学一样多,有时不同的因素会将领导者引向不同的方向,因此有必要仔细权衡每个选择的利弊。
我们将不同的因素大致分为两大类:
商业变量
包括员工数量、数据科学家数量和当前分析成熟度在内的元素构成了团队结构推理的重要部分。例如,Transamerica 的 Matt Cornett 建议,拥有不断增长的数据科学家团队的组织在其分析之旅的早期阶段,应考虑首先集中数据科学,以建立基础设施、同行审查和模型治理实践,然后再转移到更加联合的模型。
他还建议考虑当前的 IT 能力来帮助将模型投入生产。例如,在 IT 部门没有带宽来完全支持数据科学的情况下,拥有一个能够承担这一角色的集中化团队至关重要。
数据科学能力,
包括核心任务、开发中的模型类型以及创新目标。
- **核心使命。**例如,Brian Loyal 建议,数据科学使命单一的公司,如优化旗舰产品,可以考虑集中团队,这样数据科学家就可以步调一致地工作。然而,如果一家公司对数据科学有更广阔的愿景,在不同的渠道和部门有不同的目标,那么联合团队可能更有意义,这样数据科学家就可以更紧密地与每个目标保持一致。
- 正在开发的型号类型。如果数据科学家将主要构建决策支持模型、开发仪表板、产生见解等,Patrick Harrison 建议使用分布式模型来保持团队接近他们所支持的业务。然而,在主要关注将机器学习和信息技术嵌入生产和服务的情况下,他建议创建更少、更集中的团队,这些团队拥有资源和授权来处理这些通常跨职能的大规模项目。
- 创新目标。 Bayer Crop Science 选择了一种轴辐式模型来推进围绕计算机视觉工具的农业工作,利用其卓越中心来推动计算机视觉领域的最佳实践,然后分布式团队可以使用这些实践来解决特定的业务问题。
听 Matt、Patrick 和 Brian 强调建立数据科学组织的最佳实践。
https://www.youtube.com/embed/YGJB4yJt9qc
正如这些领导者所展示的,有许多因素在起作用,灵活性是必须的-无论是在您选择最初的道路时,还是随着您的组织对数据科学的使用逐渐成熟时。然而,退一步想一想贵公司的当前位置和企业的数据科学战略,可以帮助您更好地选择将成功推进您的战略的组织结构。
数据科学跨学科领域的 3 个关键组成部分
原文:https://www.dominodatalab.com/blog/3-key-components-of-the-interdisciplinary-field-of-data-science
数据科学是一个令人兴奋的跨学科领域,它正在彻底改变公司处理业务各个方面的方式。通过将传统统计学与快节奏、代码优先的计算机科学原则和商业敏锐度相结合,数据科学团队可以比以往任何时候都更准确、更精确地解决问题,尤其是在与创造力和沟通方面的软技能相结合时。
在本文中,我们将概述数据科学的三个重叠部分、沟通和协作的重要性,以及Domino Data Lab Enterprise MLOps platform如何帮助提高团队的速度和效率。
数据科学——技能的维恩图
数据科学囊括了新旧、传统和前沿。许多数据科学工具和技术已经存在了几十年,其中的想法和概念不仅仅来自一个领域,而是来自许多领域。这导致了快速发展,因为该领域的跨学科性质以新的和新颖的方式结合了数学、统计学、计算机科学和商业知识。
数学和统计专业知识
数据科学是一个使用数学和统计学作为科学过程的一部分来开发可以从数据中提取洞察力的算法的领域。有许多软件包允许任何人构建预测模型,但如果没有数学和统计方面的专业知识,从业者就有创建有缺陷、不道德甚至可能非法的数据科学应用程序的风险。
并非所有的模型都是相同的。根据你要完成的目标,你需要一个预测的或推理的、有监督的或无监督的、参数的或非参数的模型。一般来说,从线性回归到决策树到支持向量机,模型都有统计学和概率的基础。此外,用正则化和 k-fold 交叉折叠验证来调整这些模型需要对数学方程进行微小的改变。
这就是数学和统计学专业知识的重要性。模型之间的差异往往是细微的,但会极大地改变准确度和精确度(另一种选择是偏差和噪声)。视问题而定,以牺牲精度为代价降低偏置或以牺牲精度为代价降低噪声可能更重要。这些变化通常表现为平方根、λ或逆矩阵。数据科学家的工作是处理这些细微的差异,选择与问题陈述最相符的模型,优化和监控性能,并将结果转化为业务上下文。
数学和统计专业知识是数据科学的一个基本组成部分,它允许从业者在数据中找到有意义的模式,从而产生可操作的见解。
计算机科学技能
计算机科学技能是成功的数据科学的第二个组成部分。数据科学家必须处理不同类型的数据,与不同类型的计算机系统交互,用不同的语言编程,在不同的开发环境中工作,并在整个数据科学生命周期内将他们的所有工作整合在一起。
在进行任何突破性的数据分析之前,必须首先获取数据。这通常是通过购买、下载、查询或网络搜集数据。网站通常要么为其数据提供 API,要么直接提供数据供下载(通常以 CSV、文本或 JSON 的形式)。
一旦获得数据,就可以将其集成到数据科学生命周期中。大多数数据一开始都是杂乱的,必须经过改造才能变得可用。这通常不是一项简单的任务;研究表明数据科学家 50-80%的工作都是数据争论。这可以简单到将字符串重铸为浮点 32 或将小数转换为百分号;然而,在所有情况下,确保您没有将数据更改为完全不同的含义是至关重要的。
清理之后,数据现在可以进行处理了。在这个阶段,数据科学家开始为计算和建模编写代码。为了对任何高度技术性和计算性的东西进行建模——仅举几个例子,机器学习、深度学习、大数据分析和自然语言处理——基于代码的工具(如 R 和 Python)通常是首选。这是有很多原因的;拖放程序通常不与终端交互,不允许用户修改正在使用的内核/线程的数量,也不容易获得过多的开源库。或者,基于代码的工具更灵活,并且有更大的在线社区,这在通过堆栈溢出进行搜索以调试几行代码或为当前瓶颈找到更好的实现时至关重要。
最后,来自这些工具的结果准备在组织内的系统和过程的所有阶段实施。在彻底的审查、修订、可能的单元测试、代码审查和任何相关利益相关者的批准之后。
计算机科学技能使从业者能够将他们的数学和科学专业知识运用到生活中,并解决复杂的商业问题。
商业知识
数据科学最重要的组成部分是业务知识或领域专业知识。业务环境的重要性延伸到数据科学生命周期的所有方面,从构建问题到估算缺失数据,再到将模型纳入业务流程。
一个简单的例子是缺少值的情况。从业者应该删除缺少值的行,用零填充值,使用相邻行的平均值,还是什么都不做?关键是,没有对业务场景的适当了解,就不可能知道最佳的方法。在科学过程中需要做出许多决策,如果没有适当的业务环境,很容易创建一个结果不准确的模型。
对业务的深刻理解将有助于数据科学家确定业务问题的最佳算法类型,如何最好地准备数据,如何评估和调整模型性能,以及最终如何将模型性能传达给业务涉众。
沟通与协作
数据科学的三个组成部分对于创建强大的数据科学产品至关重要,但用户采用和利益相关方的认可需要团队之间强有力的沟通和协作。
在实施数据科学产品时,受影响的业务流程所涉及的组织和员工必须相信模型正在按预期执行。在整个开发过程中,业务涉众必须理解所做的假设,为什么模型以这种方式工作,并且能够理解任何决策输出的关键驱动因素。在测试和验证结果中包括利益相关者,在进行预测时传达最重要的特性将有助于利益相关者理解和信任模型。
数据科学家可能遇到的最危险的陷阱之一是交付“黑盒”解决方案,并要求利益相关者信任他们的工作。这几乎总是导致缺乏采用,并且还会使组织面临风险。建立在沟通和协作基础上的开发过程有益于业务,并可以帮助数据科学揭示他们最初没有掌握的业务环境,从而提高解决方案的准确性。
摘要
数据科学在过去十年里一直稳步发展,没有停止的迹象;Dice 最近的一份报告发现,尽管有疫情,医疗保健、电信、娱乐、银行和保险行业对高级数据科学家的需求在 2020 年增长了 32%。原因可能包括希望使用机器学习等预测分析来规划经济衰退,使用聚类算法更好地确定消费者需求,或通过数据可视化来改善营销策略。
Domino 数据实验室的企业 MLOps 平台致力于加速研究,集中基础设施,加快模型部署,并增加代码优先数据科学团队的协作。观看一个免费演示,看看我们的平台是如何工作的,或者亲自试用。
4 种更好地管理和治理金融服务和保险模式的方法
金融服务行业开始意识到这样一个事实的重要性,就像洗碗和园艺这样的家务一样,ML 模特永远不会真正完成。更确切地说,人工智能和人工智能模型需要被监控有效性,并且通常还需要为监管者重新解释和重新记录。因此,焦点集中在模型风险管理(MRM)和治理(MRG)上,这是金融服务和保险公司的两个相关的关键流程,这两个学科的重要性只有 预计会增长 。
“你不能再仅仅依赖那些备受尊敬的模特了。穆迪分析公司 的董事总经理雅各布·格罗塔说:“你需要了解一个模型为什么适合你,它与其他模型的相关性,它是如何建立的,以及它的利弊。”。
透明度 在建模过程中至关重要,他解释道。
因此,MRG 和 MRM 都是 FSI 公司的大问题。MRG 涉及一套描述模型如何被创建、使用和废弃的规则和过程,而 MRM 通常是实现 MRG 规则和过程的实践。MRG 通常被认为是一个更宽泛的术语,所以在下文中,我用它来包含 MRM 作为它的一个子学科。
正确理解 MRG 和 MRM 是困难的。会出现许多陷阱和问题,降低效率和生产力。这些问题包括缺乏自动化、高效流程、协作和沟通。
MLOps 帮助 MRG 和 MRM
一个全功能的企业 MLOps 平台可以解决其中的许多问题,使端到端流程对每个参与者来说都更加简单高效。将适当的企业 MLOps 平台视为礼宾员,将信息与您作为数据科学家、分析师、数据质量经理、风险或合规经理、IT 经理、高管甚至监管者的角色相匹配。就像一个优秀的酒店礼宾员一样,它为您提供有关 MRG、审计、合规和 it 流程中的步骤、模型、数据以及已识别和减轻的风险的最新、最相关的信息,从而消除您在完成工作时的猜测。从这个角度来看,我们将讨论 MRG,以及企业 MLOps 平台如何帮助相关人员更轻松地完成工作。
MRG 通过风险评估识别与特定模型相关的风险。一旦确定了这些风险,就可以使用各种工具和技术对其进行管理和监控。强大的 MLOps 平台的以下解决方案提高了您的 MRG 集团的功效、效率和效益,并增强了业务能力。
规则#1:在任何地方都实现自动化,以提高 MRG 效率和业务速度
最近的 麦肯锡模型风险管理调查 发现,54%的银行认为自动化将是提高 MRG 效率的首选解决方案。这就是企业 MLOps 平台的用武之地。MRG 流程的自动化,例如检查数据质量、线上和线下测试、模型或数据漂移报告,不仅可以简化团队之间的工作流程,还可以提高模型开发和部署流程中的文档标准和一致性。通过集成的同行评审和分析,以及将当前结果与先前结果进行比较的能力,团队可以获得更可验证和更准确的模型结果。该平台还可以提供关于与模型相关的风险的有价值的见解和信息,这有助于企业就如何管理风险做出更好的决策。
例如, 一家领先的财富 500 强保险公司 利用 Domino Enterprise MLOps 平台增强了其 MRG 流程,充分利用了实验、数据集、工具和环境的自动跟踪和完全可再现性。现在,该公司有一个确切的审计跟踪记录,记录了完成了哪些工作,谁访问了哪些数据。这消除了在部署之前将模型代码和数据传递给风险经理的问题。在 Domino Enterprise MLOps 之前,这是在很少文档的情况下完成的,这增加了治理和遵从过程的时间和复杂性。
规则 2:协作&为所有利益相关者创造一个共享的环境
企业 MLOps 平台还可以改善公司内不同部门之间的协作,尤其是在风险管理和治理模式方面。MRG 和 MRS 涉及许多不同的部门,如数据科学家、分析师、风险经理和审计部门。他们将获得 相同的一致的、正确的相关信息版本,并且他们还可以建立在同行的工作之上。
例如, 好事达 在其数据科学团队中使用 Domino 的企业 MLOps 平台。对他们来说,一个关键的好处是能够在任何时间点回顾分析,这使得向高级管理层或监管者展示一个数字是如何获得的成为可能。这确实提高了审计能力。另一个优势是,企业 MLOps 使数据科学成为一个可重复的过程。
四大信用评级机构【DBRS】也利用 Domino 促进团队间的协作,而不需要任何团队成员复制环境或使用不熟悉的工具。
该公司的定量分析师迈克尔·辛克莱(Michael Sinclair)说:“这是一种时间节约。“你没有遵循一个严格的文档程序通常会遇到的困难;你可以做你的工作,Domino 会跟踪你。如果你需要的话,你可以回去改变一些东西,你可以四处移动东西,或者如果你需要帮助,你可以标记某人。这是一个集中的枢纽。
规则#3:改进智能&仪表化报告,以帮助模型评审过程
风险报告也受益于企业 MLOps 平台。对来自模型的信息的实验和尽职调查可以被适当地监控,甚至可以为将来的模型评审自动化。此外,这些组件可以被存储、标记和共享,以供未来在分析和人工智能库中重用,使企业更容易生成准确和最新的模型风险报告。
丹麦第二大保险公司 【托普丹马克 】竭力监控生产中的车型,对自动化决策的质量充满信心。例如,两位数据科学家花了三个月的时间来挖掘数据源,以确定一个算法的数据集格式不正确,导致模型漂移。现在,他们使用 Domino 来自动监控模型,发送模型漂移警报,并确定应该从哪里了解这个问题。
“我认为,如果您要展示您正在交付预期的价值并快速解决任何问题,企业 MLOps 平台内的实时模型监控功能至关重要。”Topdanmark 数据科学卓越中心的负责人 Stig Pedersen 说,
规则#4:使用一个平台来集中信息和通信以降低风险
企业 MLOps 平台可以帮助金融服务和保险公司改善向内部和外部利益相关者传达模型风险信息的方式。每个人都可以从中央存储库中轻松访问模型风险信息。这有助于确保每个人都意识到与模型相关的风险,并且可以有效地管理它们。
DBRS 也使用 Domino 来提供对其信用评分方法的可见性。至关重要的是,DBRS 的评级决策、模型和方法开发具有严格的治理和可审计性。找到自动演示治理的方法将研究人员从编译文档中解放出来,从而加快模型的上市时间。如今,他们可以轻松地显示和交流所有进入分析的数据和代码,因为 Domino 会自动保存完整的实验记录 — 谁参与了,尝试并放弃了哪些方法,何时将其推广到生产中等等。
DBRS 产品管理全球主管 Thomas Little 说:“Domino 不必完全依赖人类进行交流,只需在代码库中捕获所有的交流,从而有助于降低风险。
保持机器学习模型准确性的 4 种方法
原文:https://www.dominodatalab.com/blog/4-ways-to-maintain-model-accuracy
算法可能是当今高性能技术竞赛的热门话题,但有时支持者会忘记,像汽车一样,模型也需要定期调整。最近,一个高度可见且灾难性的人工智能模型故障让网上房地产公司蒙羞,被迫关闭其购房业务。
据《华尔街日报》和其他消息来源报道,其房地产算法在房屋交易中的应用不光彩地夭折了。该公司股价暴跌 25%,原因是 宣布 季度亏损 3.28 亿美元,并因关闭其“Zillow Offers”服务而裁员 25%(约 2000 人)。首席执行官 Rich Barton 告诉投资者 ,“我们无法准确预测未来房价在不同时间的两个方向,比我们尽可能建模的要高得多。”
什么是机器学习模型精度?
机器学习模型准确性是对机器学习模型在新数据上表现如何的一种衡量,理解这一点对于评估模型的有用性非常重要。有多种方法可以度量准确性,最合适的度量标准将取决于问题的具体情况。例如,准确度可以用分类误差来衡量,即错误分类的样本数除以样本总数。根据问题的类型,也可以使用其他指标,如精确度和召回率。重要的是为手头的任务选择正确的指标,并了解如何解释结果,以便对机器学习模型做出明智的决策。
模型精度和模型性能有什么区别?
术语“模型准确性”和“模型性能”经常互换使用,但它们实际上指的是两种不同的东西。模型准确性是对模型预测给定输入的正确输出的程度的度量。换句话说,它衡量的是模型在总体上有多精确。另一方面,模型性能是模型在特定任务上表现如何的度量。换句话说,它衡量模型执行特定功能的能力。例如,如果您试图预测一个人是否会投票给某个候选人,模型准确性将衡量模型正确预测这个人会投票给哪个候选人的频率。模型性能将衡量模型对选举结果的预测程度(例如,有多少人实际上投票给了候选人)。
提高模型准确性
现在我们对模型精度有了清晰的认识,让我们来探讨一些保持精度的策略。通过进行一些简单的调整,我们可以显著地保持和提高模型的准确性。我们开始吧!
模型风险规划
虽然公众对 Zillow 的模型为何没有按计划运行还没有达成共识,但这个博客本身并不是关于 Zillow 的。我们的主题是关于我们所有依赖数据科学的人应该牢记的教训:永远不要假设生产模型已经“完成”;有些事情总是会出错!
即使是表现最好的模型最终也会因为各种原因而退化:产品或政策的变化会影响客户的行为;敌对行动者可以调整他们的行为;数据管道可能会断裂;有时候世界只是在进化。这些因素中的任何一个都会导致数据漂移和概念漂移,从而导致预测准确性下降。
为了应对这样的挑战,模型驱动的业务必须采用一种模型监控策略,旨在不断提高模型的准确性。以下是模型监控可以帮助您修复糟糕算法的四种方式。
重新训练模型
如果模型已经漂移,提高模型精度可以采取用更新的数据重新训练它的形式,连同其相关的地面实况标签,这更能代表预测数据。然而,在地面真实数据可用的情况下,可以对训练数据集进行管理以模拟预测数据的分布,从而减少漂移。
注意两种类型的漂移:数据漂移和概念漂移。对于数据漂移,部署的模型用于预测的生产数据中的模式逐渐偏离模型的原始定型数据中的模式,这降低了模型的预测能力。尽管输入数据分布没有变化,但当构成正确预测的预期随时间变化时,就会发生概念漂移。
回滚模型
有时回滚到模型的前一个版本可以修复性能问题。为了实现这种形式的持续改进,您需要模型的每个版本的档案。然后,您可以通过模拟使用相同推断数据时的性能,来评估每个先前模型版本相对于当前生产版本的性能。如果您发现以前的版本比当前的模型版本执行得更好,那么您可以将它部署为生产中的冠军模型。
修复模型管线
虽然漂移可能因为地面实况数据已经改变而发生,但有时当将预测数据馈送到模型的上游数据管道中发生不可预见的改变时,漂移也会发生。使用来自数据管道的更新数据进行重新训练可能会修复模型,或者修复数据管道本身可能会更容易。
修复模型
为了确保您不断提高模型的准确性,您有时可能需要在开发环境中修复模型。为了诊断模型退化的原因,使用一个支持再现性的平台是很有帮助的,在这个平台上,您可以在开发环境中有效地模拟生产环境。一旦确定了可疑原因,您可以选择修复模型的最佳方法,无论是修改超参数,还是更具侵入性的方法。
结论
模型监控是一个关键的、持续的过程,对于模型驱动的业务来说是必不可少的。然而,不受监控的模型会导致灾难性的业务结果。如果您想了解更多有关如何为您的数据科学计划创建严格的模型监控流程的信息,请阅读我们的新白皮书, 《不要让模型影响您:利用模型监控控制风险的策略》。
成功扩展机器学习的 4 种方法
原文:https://www.dominodatalab.com/blog/4-ways-to-successfully-scale-machine-learning
以可重复、可扩展的方式部署机器学习模型需要理解支撑模型的算法和技术正在快速发展,并且与传统软件开发工具的管理方式不同。
随着开源社区的显著进步,您的数据科学家今天用来解决业务问题的工具、技术和算法无疑将很快发生变化。当然,并不是所有的变化都是好的,在许多情况下,实施不被理解的技术和方法会导致灾难性的失败。
这里有一些指导原则,可以确保你的公司增加在机器学习实践中取得成功的机会。
鼓励您的数据科学家尝试和探索新技术。
马斯洛的《锤子》谈到了一种认知偏差,涉及到使用一种熟悉的工具:“如果我只有一把锤子,那么每个问题看起来都像钉子。”许多数据科学家职业生涯开始时的一个重大挑战是适应新的方法和技术。在学术机构,他们接受指导,并有机会与导师一起验证他们所走的道路。在您的组织中,能够确认一种新方法,对照其他方法进行测试,并确保它适用于手头的问题,这是数据科学家适应新技术和技巧的关键一步。
数据科学领导者的角色是确保他们的团队有时间、空间和帮助来学习新算法,以及机器学习模型适用的真实场景。
这样做的好处是,数据科学家更愿意探索他们现有知识的边界之外。这不仅提高了他们对潜在建模技术的理解,而且也成为评估新问题陈述和思考最合适的解决方案的关键步骤。
让您的数据科学家能够轻松测试新技术。
随着机器学习包、算法和底层基础设施的不断发展,灵活性和规模需要成为机器学习实践的核心。
但对于许多数据科学家来说,测试新工具的障碍和壁垒使得这不可能实现。不鼓励开放性和可扩展性的限制性环境或传统平台在试验新方法时会产生巨大的开销,以至于在许多情况下,数据科学家要么放弃要么利用他们的笔记本电脑和台式机来绕过这个问题(“影子 IT”)。他们测试的任何新技术都难以实现,这极大地破坏了他们生产和扩展模型的能力。
集中式和开放式数据科学平台可以更轻松地实施新环境,并在黄金标准、值得生产的环境和寻求测试新编码方法、技术或底层技术的研发环境之间保持对比。通过降低进入门槛,您可以确保花费在评估新方法上的时间主要花费在模型输出和输入上,而不是配置机器来运行代码库。
拥有验证和复制新建模方法的流程。
不是所有的变化都是好的,也不是所有的技术都值得实现。您的数据科学家必须能够验证模型的工作方式,并正确解释或诠释结果。要做到这一点,他们必须能够重现结果,并对模型产生这些结果的内在机制进行可视化。能够解释为什么模型的结果是这样,以及什么输入变量是最重要的,这对于创建能够成功实现模型的变更管理程序是至关重要的。
数据科学家在实施模型之前,必须能够理解并清楚地解释他们在模型中使用的算法。只有当数据科学团队拥有安全实施模型和限制意外后果的可能性所需的知识时,新模型才应投入生产。
做好一切准备
预测与机器学习相关的未来是不可能的,即使是对模型本身而言。机器学习的所有方面都容易发生变化,无论是算法、最适合它们的底层计算资源,还是公司成功实施它们所需的框架。
在数据科学实践的核心鼓励实验和学习的文化是确保他们带给您的组织的知识保持最新,以及他们用于解决业务挑战的技术和方法是适当的唯一方法。
不应该购买多米诺的 5 个理由
原文:https://www.dominodatalab.com/blog/5-reasons-you-should-not-buy-domino
作为一名数据科学从业者,你敏锐地意识到机器学习模型如何推动商业成功。
模特可以帮助你的公司战胜竞争对手。
模型有助于引导领导者通过艰苦的变革来实现增长。
模型可以推翻忽视这一资源的强大竞争对手。
多米诺就是把机器学习模型作为一种商业武器。我们相信,通过企业 MLOps 平台将模型置于其业务核心的组织将击败竞争对手,推动前所未有的增长,并颠覆行业巨头。这些将是“模型驱动”的业务,它们将会胜出。
如果您的组织对是否应该投资企业 MLOps 平台犹豫不决,我们提供了一个简短的指南,列出了您不应该购买 Domino 企业 MLOps 解决方案的五个原因。虽然该指南是讽刺性的,但问题是严肃的:企业 MLOps 平台适合您吗?’
你认为无限的工具和计算被高估了
也许你的数据科学家只需要一台基本的笔记本电脑,你无法理解为什么有人需要分布式计算、GPU 或其他现代基础设施。
你的 IT 团队是不是就等着你去寻求帮助,愿意分分钟跳到你的请求上?
在您的世界中,您的数据科学家只是微笑着使用他们被告知使用的任何工具吗?
然而……
如果你像我们采访的大多数数据科学领导者一样,那么访问数据科学工具和基础设施是一个很大的痛点。
无论任务需要什么,Domino 都可以轻松使用。
Domino Enterprise MLOps 平台是通向权力的门户。几乎任何企业级的数据科学工具和基础架构。易于调配。即刻可用。
没有锁定或等待繁忙的 IT 员工来调配资源。Forrester Consulting 最近的一项研究发现,Domino 平均节省了 70 个小时来加速项目的资源!Domino 让您能够利用最好的工具来解决业务问题。
你喜欢电影《土拨鼠日》
如果你怀疑别人创建的模型是否可信,你会创建一个新的吗?
也许数据科学家永远不会离开你的组织。如果是这样的话,恭喜你!知道你的整个团队从一开始就完好无损,知道所有的东西都在哪里,并且知道曾经完成的每个项目,这是很方便的。
或者,也许你认为在入职期间淘汰坏数据科学家的最好方法是重复性项目?
可能不会…
我们从数据科学领导者那里听到的事实是,他们的团队总是在“重新发明轮子”复制过去团队成员的工作是困难的,并导致关键人员的风险。
Domino 可以让你复制任何研究。
使用 Domino,您将享受到一个可搜索的记录系统,该系统可以跟踪任何实验级别项目的所有相关工件。您可以复制和重用,以专注于更有价值的见解。
你确信筒仓让数据科学家专注
也许你的公司故意孤立数据科学家。
你的数据科学家最喜欢孤立地孵化想法吗?
数据科学家更喜欢作为发现下一个突破的独立天才的荣耀吗?
说真的……
我们遇到的大多数数据科学领导者都在寻找打破孤岛、加速协作的方法。
Domino 促成了一种协作文化。
通过单一平台,Domino 平台允许数据科学家独立于工具进行协作,因此团队可以专注于解决更复杂的问题。将您的团队放在 Domino 上进行持续的学习循环,从而推动不断增长的商业价值流。
你认为影子是一项团队运动
也许你很幸运,为一个没有 IT 政策限制数据科学家下载和使用他们想要的任何工具的组织工作?“占有”是游戏的名字吗?
当您的数据科学家可以自由地在公司边界之外工作时,他们会拥抱企业家精神吗?
也许你桌子下面的服务器可以让你将模型投入生产,而不需要官僚的验证步骤。它能在冬天保持双脚温暖。
现实来袭……
有效扩展数据科学的组织是那些知道如何在不牺牲数据科学生产力的情况下满足企业对安全性、风险和合规性的要求的组织。
Domino 可以轻松地支持企业级的一切。
再也没有影子了!为您的数据科学团队提供 Domino,以便他们可以使用自己喜欢的工具、包和基础设施。它可以削减支持成本,同时提高安全性、治理、合规性、协作和可再现性。
你不能提高博士的生产率
在您的世界中,您是否按每个模型向数据科学家支付报酬?你通过限制生产率来控制成本吗?
您是否发现您的数据科学家喜欢执行手动任务?我知道,自动化是一个东西。但这就像手工制作瑞士表。自动化和质量不一致,对吗?
你的组织不赞成速度吗?慢而稳是你的数据科学保龄球队的名字吗?
等一下……
我们经常看到数据科学团队花在研究上的时间太少,因为他们需要执行各种相关任务才能取得进展。
Domino 支持模型的高速创建和部署。
有了 Domino,模型摩擦就没有了。我们的企业 MLOps 平台提供了一种通用的工作方式,其工作流可加速每个步骤的生命周期和关键过渡。无论使用什么工具,Domino 都让数据科学家加速实现价值——我们称之为“模型速度”但是不要相信我的话。查看我提到的最近的 Forrester Consulting 研究,Domino Enterprise ml ops 平台的总体经济影响 。Forrester 发现 Domino 提供了更快的模型验证,每个模型平均 20 小时。三年总投资回报率高达 542 %!
有时候荒谬的想法会引发常识。如果足够好对你来说还不够好,我邀请你今天就去看看多米诺。我有预感,多米诺是你们公司想要购买的东西!
更好地与商业领袖沟通的 5 种方式
原文:https://www.dominodatalab.com/blog/5-ways-to-better-connect-with-business-leaders
“我如何让企业领导理解我们提供的价值?”
这是一个我们经常从数据科学领导者那里听到的问题。
事实上,随着采用率的增加,企业领导人对数据科学及其潜在好处的了解越来越多。在过去的一年里,新冠肺炎危机提升了围绕数据和数据科学的对话,因为企业领导人竞相了解快速变化的趋势和行为,并预测对其运营的潜在影响。
然而,要让商界领袖充分参与进来,还有很多工作要做。确保从最高管理层到一线员工的每个人都理解并接受数据科学的好处,对于成功创建企业级数据科学能力至关重要。如果没有强大的支持和与企业中每个人的合作,将数据科学集成到组织的 DNA 中是不容易的。
对于数据科学领导者 Matt Cornett(保险解决方案的领先提供商)、Patrick Harrison(全球金融情报公司)和 Brian Loyal(拜耳作物科学)来说,解决这个问题是他们组建团队时的首要任务。这里有五种方法可以更好地与企业联系,并最终建立更好的合作关系。这些评论总结了 Matt、Patrick 和 Brian 在最近一次关于利用最佳科学推动成果的 最佳实践的网络研讨会上分享的见解。
跳过技术演讲
听到数据科学团队推广他们最新的神经网络或计算机视觉工作的故事并不罕见。对于拜耳作物科学的云分析主管 Brian Loyal 来说,这样的故事是如何不这样做的例证。“那时你会被很多人盯着看,”他说。相反,他建议团队从谈论特定项目的业务背景和价值开始。“说‘这个领域的数据科学是有意义的,因为我们已经证明,通过更好地管理决策,我们可以节省一年的产品管道或 500 万美元的研究费用’有助于人们理解,”他说。
听听 Brian Loyal、Patrick Harrison 和 Matt Cornett 讨论如何衡量数据科学的商业价值。
https://www.youtube.com/embed/Z8d_SDDBErA
将结果提升为核心工作流程的一部分
许多数据科学团队分享成功项目的故事,但通常是临时工作。Patrick Harrison 鼓励领导者将它纳入日常工作,这样直到他们正式分享成果,项目才算完成。通过这样做,数据科学团队可以持续不断地将他们工作的价值推向前沿。根据 Patrick 的说法,数据科学领导者不必(也不应该)从零开始。相反,他们应该利用业务人员已经收听的现有频道和活动。“如果你的公司已经有演示日或时事通讯,让你的团队和项目加入到这些活动中,”他建议。
听听 Brian Loyal 和 Patrick Harrison 讨论如何在整个企业中推广数据科学。
https://www.youtube.com/embed/KGduYRVRetI
说他们的语言
在拜耳作物科学公司,Brian Loyal 的团队将项目框定为企业使用的现有决策过程的一部分。(他们甚至将企业数据科学团队称为“决策科学”团队。)“例如,我们将展示除了一个团队正在使用的其他商业智能或报告写作之外,我们还有一些可以添加到故事中的分析模型,”他解释道。“每个人每天都要做出数百个决定,所以使用相同的语言是分享工作的好方法。”
让公民数据科学家加入进来
例如,Matt Cornett 邀请来自企业的公民数据科学家参与模型开发流程。“他们更接近行动,有很多领域知识,”他说。“通过包括他们,你可以加强你的整体成果,因为你已经获得了更多的业务领域知识,并且你已经获得了与一线的联系。”
听听 Brian Loyal 和 Matt Cornett 讨论如何与企业用户、分析师和公民数据科学家进行协调。
https://www.youtube.com/embed/iubhjfcTFA4
提供培训以提高组织的数字商数
这种工作可以非正式地进行,如拜耳作物科学公司。例如,该公司的卓越中心(COE)员工努力与业务领导者讨论基本的数据科学概念,如数据科学家如何在日常工作中从数据中提取意义。“即使不是数据科学家的人也能从对基础知识的理解中受益匪浅,”拜耳作物科学公司的 Brian Loyal 说。
也可以通过更正规的训练来实现。我们听说越来越多的公司正在为商业领袖建立“数据科学 101”类型的项目。例如,Matt 分享了他的公司如何开发一个关于如何更有效地使用数据和解释可视化的内部培训项目。课程面向所有人,从初级员工到业务经理。同样,Patrick 说他的公司是一家全球金融智能公司,创建了一个数据科学院,为业务分析师、产品经理、运营经理、销售和其他业务用户提供对分析的基本理解。
听 Matt Cornett 和 Patrick Harrison 讨论数据科学培训计划。
https://www.youtube.com/embed/KS02jDnBFk0
为了成功地将数据科学转化为核心能力,数据科学和业务需要步调一致。正如这些公司所显示的,这不会自己发生。如果数据科学领导者想要让业务领导者站在他们一边并认识到他们的价值,他们需要积极主动和务实。
观看由 Matt Cornett、Patrick Harrison 和 Brian Loyal 主讲的网络研讨会、、利用数据科学推动成果的最佳实践、。
构建数据科学平台之前要问的 7 个关键问题
原文:https://www.dominodatalab.com/blog/7-key-questions-to-ask-before-building-a-data-science-platform
建还是不建。这是个问题。
我们看到许多组织都在纠结是否要建立一个数据科学平台。但这是一个过于狭隘的问题。对于大多数组织来说,真正重要的是扩展数据科学。事实上,埃森哲的一项研究发现,75%的企业高管认为,如果他们不扩展数据科学,他们将在五年内破产。
因此,他们应该回答的问题是:什么平台将帮助我们加快扩展数据科学的能力?
原因如下。
组织很快意识到,他们必须消除基础架构摩擦,消除孤立的工作,并加快模型投入生产的速度,以便在整个组织内扩展数据科学。这是因为当团队成员使用不同的工具,努力设置环境,在不同的地方存储数据科学工件,以及在数据科学生命周期中手动管理项目时,生产力会急剧下降。同样,当 IT 部门必须支持定制的数据科学硬件和工具,并为每个模型重新创建部署流程时,他们的支持负担和成本也会增加。
这时,有人必然会说,“停止疯狂吧!我们需要一个数据科学平台!”。
的确,他们确实需要一个平台来扩展数据科学。但要正确地做到这一点,他们需要一个能够协调端到端数据科学生命周期的平台,提供灵活性并大幅提高生产率。如下图所示,该平台需要提供基本要求,如按需访问数据、可扩展计算和工具。它还需要提供过程转换需求,例如项目管理、可再现性、知识管理和治理。
不幸的是,我们经常看到的情况是,组织在其平台范围内仅包括自助服务数据、计算和工具。这似乎很容易实现,早期的进展令人兴奋,并显示出希望。但是这仅仅解决了规模问题的一部分——而且只是在很短的时间内。通常,这个有限的平台会运行一段时间,然后因为缺少太多功能而被放弃。其他时候,将尝试额外的需求,但是像安全性、版本控制、协作、编排、知识管理和治理这样的功能很难快速交付,特别是如果它们最初没有在项目中确定范围的话。该平台成为一个永无止境的开发项目,需要数年才能实现价值。
构建一个交付所有需求的平台需要大量的资源来确定范围、构建和管理,尤其是高价值的流程转换需求。这也需要大量的时间——我们已经看到客户花费数年时间来满足高价值的需求。组织还需要计划工具生态系统和部署选项的不断发展。这需要持续的支持和专门的开发团队。
没有时间可以浪费,因为对于数据科学来说,时间就是金钱。延迟向企业交付模型会带来巨大的机会成本。
因此,如果“我们需要一个数据科学平台?”就是“让我们建造它吧!会更快/更容易/更便宜/更好!”停下来好好想想。您的组织能否真正提供一个强大的数据科学平台来满足您组织的所有需求?你能长期支持它吗?你能在几个月而不是几年内交货吗?
即使您对所有这些问题的回答都是肯定的,所需的努力和投资会为您的组织带来竞争优势吗?或者,真正的竞争优势是扩展数据科学吗?这是我们的客户得出的结论。
“我们的领导指示是,如果它不是一种差异化能力,我们就不应该构建它;我们应该考虑买下它。以我的经验来看,最初人们会对开发内部工具感到兴奋,两年内它们都很棒,但到了第三年,就没人再关心维护它们了。”
软件服务决策科学高级总监
构建数据科学平台之前要问的 7 个关键问题
为了帮助您决定构建还是购买是适合您组织的正确方法,您需要回答以下七个问题:
- 扩展数据科学需要哪些能力?
- 如果我们构建一个平台,需要多长时间才能完全交付这些功能?
- 与市场上的商业平台相比,我们的需求真的是独一无二的吗?
- 我们能否提供长期开发、支持和扩充平台所需的关注度、承诺、技能和资金?
- 我们能否让我们的平台经得起未来的考验,这样我们就不必随着需求的变化而重新开始或做大量的工作?
- 搭建平台和购买平台的机会成本有什么区别?
- 数据科学平台是我们组织应该支持的核心竞争力吗?
有关更多信息,请查看我们的新白皮书构建数据科学平台的真实成本。本白皮书提供了有关构建数据科学平台的功能、成本和注意事项的信息,包括:
- 这是一个从一个执行人员那里学到的案例研究,这个执行人员走上了构建的道路,并且再也不想犯同样的错误。
- 关于您组织中每个人需要从数据科学平台获得的能力的详细信息。
- 八项功能的详细功能清单。
7 重要的机器学习技术和算法
原文:https://www.dominodatalab.com/blog/7-machine-learning-algorithms
每一个机器学习模型的核心都是驱动它们的算法,消耗数据并为你提供你需要的答案。在今天的机器学习(ML)中,有无数的算法正在被使用,每一种算法都被设计来寻找不同问题的解决方案。在你决定用哪种或哪几种算法来完成这项工作之前,了解你有哪些选择是很重要的。
什么是机器学习算法?
一般来说,算法是作为一组指令或程序来解决问题或执行任务的公式。一旦用一组数据训练了模型,它就能够为一组给定的输入提供一个结果或结果。
这类似于大脑的工作。一旦你训练孩子自己系鞋带,他们就可以利用这种训练自己系鞋带,还有靴子、溜冰鞋,甚至在包裹上用丝带打蝴蝶结。然而,打领带是一种不同的模式,需要不同的指导和全新的培训课程。ML 模型使用不同的算法,这取决于模型需要做什么以及您可以获得的数据。
7 种机器学习算法
机器学习算法可以根据它们的学习方式、它们适合的数据类型以及它们用这些数据做什么来分类。这就是为什么用于预测天气的 ML 模型与过滤垃圾邮件的模型完全不同,但实际上可能与告诉你何时买卖股票的模型非常相似。
许多算法在训练时使用监督学习技术,其中它们试图预测的输出数据在训练期间是已知的和可用的。当算法处理数据时,它创建将输入映射到输出的规则。这通常是一种比无监督学习更快的技术,无监督学习需要算法解密训练数据以生成自己的输出。
还有许多其他方法来对算法类型进行分类。例如,回归是一种监督学习技术,通常用于识别变量之间的关系。另一种常见形式称为分类,其中算法将数据分组到类别中,包括线性分类器、决策树和支持向量机。
虽然有许多不同的 类型的算法 供您使用,但在开始任何机器学习项目之前,这里有七个您应该了解的最常见的算法:
线性回归
线性回归 是最容易使用的 ML 算法之一。当你向它提供足够的数据时,它会向你显示数据的因变量和自变量之间的线性关系。简单线性回归指的是有一个独立变量的问题,而多元线性回归指的是有多个独立变量的问题。线性回归的关键假设是因变量是连续的。
逻辑回归
逻辑回归 用于因变量为二元而非连续时。该模型以概率的形式解释了因变量和一个或多个自变量之间的关系。当试图理解不同的因素如何影响某件事情发生的可能性时,这种技术非常有用,例如,一项交易是否具有欺诈性?
决策树
决策树是一种监督学习算法,它使用树状分支结构来生成目标变量的预测。树中的每个分支节点对应于一个特定的属性,而每个叶节点对应于该属性的特定值。由于其图形化的本质,它是最容易解释的模型之一。这种方法非常有助于确定对给定决策采取的最佳行动。
聚类(K 均值)
K-means 聚类是一种无监督学习,用于将数据分类成组,变量 K 表示要使用多少组。每个数据点都根据相似性聚集在一起。
零售商可以使用这些算法根据购买历史将客户分组,或者根据销售活动将库存分组。它们还被用于将产品分组在一起,分离音轨,或将人类活动与在线机器人分开。
朴素贝叶斯
朴素贝叶斯算法使用来自一组不相关数据的概率分类器来确定另一个变量的概率。这些都是基于贝叶斯定理,该定理根据其他无关的数据来确定事件或发生的概率,如基于年龄的心脏病风险增加。
朴素贝叶斯算法通常用于垃圾邮件过滤器,它可以分析电子邮件中的单词和短语,以确定它们是否是垃圾邮件的概率。
支持向量机(SVM)
监督学习方法的另一个例子是 支持向量机 ,它通过将数据分成两类来对数据进行分类。它可用于分类、回归和异常值检测。SVM 在两个类别之间划了一条线,因此一边的数据放在一个类别中,另一边的数据放在第二个类别中。然后 SVM 可以画更多的线。
与其他算法相比,SVM 的关键在于它可以选择将线放在哪里,以确保数据不会被错误分类。简单的线性 SVM 分类器绘制直线,然而其他 SVM 方法不限于直线或单个平面。
全体
顾名思义,集成学习涉及使用多种算法来创建 ML 模型。它主要用于解决复杂的问题。一个常见的例子是随机森林技术,用于解决分类和回归问题。随机森林由几个共同处理相同数据的决策树组成。
如何选择正确的机器学习技术
选择正确的机器学习算法本身就是一项技能。请始终记住,您的模型越复杂,构建、培训、测试、维护和部署就越困难。除此之外,你的模型越复杂,当工作模型被交付给工程师或其他数据科学家时,当它被部署、监控和维护时,就越难以记录和解释。
当您选择算法时,首先定义需要解决的问题,并探索您可用的数据来解决它。
总是从最简单的解决方案开始。在增加复杂性之前,构建并测试该模型。然后,您可以将较简单模型的结果与较复杂模型的结果进行比较,直到您在获得想要的结果和复杂解决方案之间找到最佳平衡点。
结论
对于一个模型驱动的组织来说,访问完整的机器学习算法库是探索您的选项的最佳起点。Domino Enterprise MLOPs 平台让您可以立即访问您需要的所有库。它以协作为宗旨,还为您提供了监控、文档和治理所需的工具。
要探索 Domino Enterprise MLOps 平台中可用的资源,请使用 观看它的演示 ,使用 免费试用 来探索它的特性。
企业 MLOps 中的 7 个关键角色和职责
任何 ML/AI 项目的主要挑战之一是将它从数据科学生命周期开发阶段的数据科学家手中转移到部署阶段的工程师手中。
数据科学家的参与在生命周期的哪个阶段结束?谁对可操作的模型负责?开发和部署之间的过渡应该持续多长时间?与数据工程师或 DevOps 工程师相比,数据科学家做什么?
这些问题的答案很少是一成不变的,即使是在小商店里。对于一个企业来说,当您添加额外的团队成员时,问题会变得更加复杂,每个成员都有不同的角色。
企业 MLOps 流程概述
数据科学生命周期包含四个阶段,提供了整个流程的缩略图,并指出不同团队成员应该关注的地方。
- **管理:**管理阶段着重于理解项目的目标和需求,并对工作进行优先级排序。数据科学家与业务、领导层、最终用户和数据专家合作,以确定项目范围、估算价值、估算成本、绘制解决方案蓝图、创建模拟交付成果、创建目标、就时间表以及验证和批准关口达成一致。他们为未来的数据科学家和审计人员记录这项工作。
- **开发:**开发阶段是数据科学家基于各种不同的建模技术构建和评估各种模型的阶段。数据科学家创建一个模型,并用算法和数据对其进行测试。他们可能依赖数据分析师,或者得到他们的帮助。数据工程师通过提供干净的数据来提供帮助。基础架构工程师通过为数据科学家提供 IT 基础架构来提供帮助。当数据科学家需要帮助理解数据中存在的复杂关系时,就会召集数据专家。
- **部署:**部署阶段是数据科学家基于各种不同的建模技术构建和评估各种模型的阶段。经过测试的模型在生产环境中从数据科学家过渡到开发人员和基础架构工程师。如果模型需要改写成另一种语言,软件开发人员就会接手。
- **监控:**监控阶段是生命周期的操作阶段,在此阶段,组织确保模型交付预期的业务价值和性能。该模型通常由工程师进行监控,如果出现问题,在需要时引入数据科学家。如果不像预测的那样,数据科学家会对模型进行故障诊断。如果数据管道出现问题,数据工程师会提供帮助。然后,在下一个开发阶段,双方都使用学到的信息和资源。
然而,典型生命周期中的角色和职责很少如此清晰地描述。
MLOps 团队中的 7 个关键角色
在较小的数据科学运营中,一个人可能有多个角色,但是在一个企业中,每个团队成员都应该能够专注于他们的专业。有七个主要角色,尽管通常还涉及其他几个角色。例如,业务经理将参与构思和验证阶段,而法律团队中的某个人将在模型交付之前监督项目的合规性。
1.数据科学家
数据科学家通常被视为任何 MLOps 团队的核心人物,负责分析和处理数据。他们建立并测试 ML 模型,然后将模型发送到生产单位。在一些企业中,他们还负责监控模型一旦投入生产后的性能。
2.数据分析师
数据分析师与产品经理和业务部门合作,从用户数据中发掘洞察力。他们通常擅长不同类型的任务,如市场分析、财务分析或风险分析。许多人拥有与数据科学家相当的定量技能,而其他人可以归类为公民数据科学家,他们知道需要做什么,但缺乏编码技能和统计背景,无法像数据科学家那样单独工作。
3.数据工程师
数据工程师管理如何收集、处理和存储数据,以便从软件中可靠地导入和导出。他们可能拥有特定领域的专业知识,如 SQL 数据库、云平台以及特定的分布系统、数据结构或算法。它们通常对数据科学成果的可操作性至关重要。
4.DevOps 工程师
DevOps 工程师为数据科学家和其他角色提供对专业工具和基础架构(例如,存储、分布式计算、GPU等)的访问。)他们在数据科学生命周期中的需求。他们开发方法来平衡独特的数据科学要求与业务其余部分的要求,以提供与现有流程和 CI/CD 管道的集成。
5.ML 架构师
ML 架构师为要使用的 MLOps 开发策略、蓝图和流程,同时识别生命周期中的任何固有风险。他们识别和评估最好的工具,并召集工程师和开发人员团队一起工作。在整个项目生命周期中,他们监督 MLOps 流程。它们统一了数据科学家、数据工程师和软件开发人员的工作。
6.软件开发人员
软件开发人员与数据工程师和数据科学家一起工作,专注于 ML 模型和支持基础设施的生产化。他们根据 ML 架构师的蓝图开发解决方案,选择和构建必要的工具,并实施风险缓解策略。
7.领域专家/业务翻译
领域专家/业务翻译对业务领域和流程有深入的了解。他们帮助技术团队理解什么是可能的,以及如何将业务问题构建成 ML 问题。它们帮助业务团队理解模型提供的价值以及如何使用它们。在深入理解数据至关重要的任何阶段,它们都非常有用。
MLOps 流程中可能的难点
由于流程中有如此多的阶段,企业运营中涉及如此多的人员,团队之间以及孤岛之间的沟通和协作会很快产生许多问题。例如,当团队不理解哪个模型使用了什么数据,数据来自哪里,以及它是如何被跟踪的时候,问题就出现了。这就产生了对数据科学家的依赖,他们需要提供所有必要的信息并管理从一个阶段到另一个阶段的过渡,这就成为了数据科学治理的一个问题。当 MLOps 过程中的变更和进展没有被适当地记录时,问题就出现了,这会给团队成员造成不准确的数据集和整体混乱。
一个关键点是确保模型从一个阶段有效地过渡到另一个阶段,而不会丢失前一个阶段的关键信息。这是通过企业 MLOps 平台实现的,该平台简化了复杂的数据科学流程。例如,数据科学家可以轻松获得他们需要的工具和计算,而不必依赖基础设施工程师。
建立标准以避免 MLOps 中的错误
每个专业都应该指定一名负责人,负责签署项目的每个阶段。例如,首席数据科学家将监督测试阶段完成的工作,并负责确定模型何时可以由业务部门进行验证。
Domino 的企业 MLOps 平台
使用 Domino 的企业 MLOps 平台,团队成员能够在整个数据科学生命周期中轻松履行他们的职责。它缩短了关键过渡阶段的时间和精力,并且集成的工作流提供了一致性,无论谁在做这项工作。它还提供了对自动监控工具和自动生成的报告的访问,只需要很少的时间就可以检查模型的进度。因为所需的信息就在他们的手边,额外的协作不会占用他们手头其他任务的时间或精力。
7 名顶尖创新者在“数据科学创新者行动手册”中分享见解、趋势和职业建议
谁在数据科学领域做着最具创新性的事情?专业何去何从?最重要的是,你能从这个行业中最聪明的人身上学到什么?
这些问题以及许多其他问题是“数据科学创新者剧本的焦点,这是一本免费的 Domino 数据实验室电子书,探索了七个人的工作、想法和经历,他们的工作正在彻底改变数据科学和业务,并对世界上一些最大的问题产生了影响。
电子书简介:
- 凯西·科兹尔科夫——谷歌首席决策科学家
- Najat Khan—强生&让桑制药公司研发战略&运营部首席数据科学官兼全球总监&
- 罗伯特·西原——Ray 的联合创始人,Anyscale 的联合创始人&首席执行官
- 莫娜·g·弗洛雷斯——英伟达医疗人工智能全球主管
- Glenn Hofmann—纽约人寿保险公司首席分析官
- John k . Thompson—分析思想领袖、畅销书作家、数据创新者&分析
- Andy Nicholls——GSK PLC 统计数据科学高级总监
你能从这 7 位顶尖创新者身上学到什么
超过 150 名与会者在 Domino 的 Rev 3 MLOps 会议上参加了我们的调查,写下了他们认为是顶级数据科学创新者的名字。
在我们的采访中,我们询问了这六位数据科学家——以及一位在联邦学习和医疗人工智能领域从事开创性工作的医学博士——从数据科学的兴起,到未来新的突破可能来自哪里,以及对有抱负的创新者的职业建议。他们的回答很有见地,鼓舞人心,有时甚至令人惊讶。
所有人都说,为数据科学家提供更好的工具是创新的关键驱动力。正如谷歌首席决策科学家 Cassie Kozyrkov 所说:“世界终于明白了‘知识就是力量’和‘数据是有用的’属于同一个范畴。”"
“如果数据是有用的,那么数据科学家也是有用的,他们的工作需要简化,以提取价值和加速创新,”Kozyrkov 说。
数据科学推动了对世界上最重要问题的解决方案的探索
例如,在制药和医药领域,人工智能模型不再局限于治疗的化学过程,而是用于研究医疗保健服务的所有方面。
“数据科学正在从根本上颠覆所有行业的传统工作方式,包括制药领域,”约翰逊&约翰逊的让桑制药公司首席数据科学家纳贾特·汗说,她讨论了自己的工作对癌症的影响,为全球患者带来新希望。
正如 NVIDIA 医疗人工智能全球负责人 Mona Flores 所说,“将人工智能应用于医疗保健业务有很多机会,因为提前预测和分析需求对医生、护士和其他护理人员的工作至关重要。”
GSK plc 的高级主管兼统计数据科学负责人 Andy Nicholls 也认为,与前几年相比,如今数据科学正在推动业务的更多方面。一个例子就是简化新药和新疗法的审批程序。
“对我们来说,数据对审批过程有影响,我们必须证明我们的药物是有效和安全的,”Nicholls 说。
这是尼科尔斯参与推进 Pharmaverse 的部分动机,你可以在电子书中了解更多。
更好的工具推动数据科学创新
数据科学的新工具和新应用使许多领域更具创新性,包括金融和保险。
纽约人寿首席分析官 Glenn Hofmann 表示:“将模型部署到生产中的基础设施和软件都得到了极大的改善,这推动了我们的模型对业务的影响。”。
更有趣的是,随着对分布式数据和资源的更容易访问,数据科学的迅速崛起可能只会加速。
西原:数据科学的影响只会随着分布式计算而加速
“今天,要做人工智能和数据科学,你必须建立大量的基础设施来进行扩展,”Ray 的联合发明人兼 Anyscale 的首席执行官 Robert Nishihara 说。“这就是我们与 Ray 和 Anyscale 合作的内容。”
更多来自西原关于 Ray 的未来以及分布式人工智能和人工智能在数据科学创新中的作用的信息,请点击这里的。
职业变化如何?来自高层的职业建议
每个人都承认这个行业将会发生变化,并为未来的数据科学家提供了有益的建议。畅销书作家、管理数据科学团队 的思想领袖 John K. Thompson 尤其乐于助人,毫不掩饰 。
“不要为混蛋工作,”他说。“我的一位 MBA 教授告诉我们,你在工作中的表现将对你的个人生活产生直接而巨大的影响。两者不可分离。如果你在工作中粗鲁无礼,让人无法忍受,你的私人生活也会如此。”
要获得更多坦率而有见地的职业建议,以及对该职业及其对创新的影响的见解,请点击此处查看电子书。
构建复杂算法的 8 个建模工具
原文:https://www.dominodatalab.com/blog/8-modeling-tools-to-build-complex-algorithms
对于一个模型驱动的企业来说,获得适当的工具意味着亏损经营和一系列后期项目在你面前徘徊或者超出生产力和盈利能力预测的区别。这一点也不夸张。借助合适的工具,您的数据科学团队可以专注于他们最擅长的领域,即测试、开发和部署新模型,同时推动前瞻性创新。
什么是建模工具?
一般来说,模型是一系列算法,当给定适当的数据时,这些算法可以解决问题。正如人脑可以通过将我们从过去的经验中学到的教训应用到新的情况来解决问题一样,模型是根据一组数据训练的,可以用新的数据集解决问题。
建模工具的重要性
如果没有完整和无限制的建模工具,数据科学团队将会被束缚在工作中。开源创新比比皆是,并将继续下去。数据科学家需要获得现代工具,这些工具受到 IT 部门的青睐,但可以通过自助服务的方式获得。
建模工具的类型
在选择工具之前,你应该首先知道你的最终目标——机器学习或深度学习。
机器学习使用主要基于传统统计学习方法的算法来识别数据中的模式。这对分析结构化数据最有帮助。
深度学习有时被认为是机器学习的子集。基于神经网络的概念,它对于分析图像、视频、文本和其他非结构化数据非常有用。深度学习模型也往往更加资源密集型,需要更多的 CPU 和 GPU 能力。
深度学习建模工具:
- PyTorch: 是一个免费的开源库,主要用于深度学习应用,如自然语言处理和计算机视觉。它基于火炬图书馆。但是,它更喜欢 Python,而不是 Torch 使用的 Lua 编程语言。Pytorch 的大部分是由脸书的 AI 研究实验室开发的,该实验室尊重修改后的 BSD 开源许可。基于 PyTorch 构建的深度学习模型的例子包括特斯拉的 Autopilot 和优步的 Pyro。
- TensorFlow: 类似于 PyTorch,这是 Google 创建的一个开源 Python 库。相比之下,它的主要优势之一是支持 Python 之外的其他语言。它也被认为比 PyTorch 更面向生产。然而,这是有争议的,因为这两个工具都在不断更新它们的特性。您可以在 TensorFlow 内创建深度学习模型,或者对基于 TensorFlow 构建的模型使用包装器库。Airbnb 用它来给照片加标题和分类,而 GE Healthcare 用它来识别大脑核磁共振成像的解剖结构。
- Keras: 是一个构建在 TensorFlow 之上的 API。虽然 TensorFlow 确实有自己的 API 来减少所需的编码量,但 Keras 通过在 TensorFlow 库的基础上添加一个简化的接口来扩展这些功能。它不仅减少了大多数任务所需的用户操作数量,而且您还可以仅用几行代码来设计和测试人工神经网络模型。它被新手用来快速学习深度学习,以及从事高级项目的团队,包括 NASA、CERN 和 NIH。
- Ray: 是一个开源的库框架,它提供了一个简单的 API,用于将应用从单台计算机扩展到大型集群。Ray 包括一个名为 RLib 的可扩展强化学习库和一个名为 Tune 的可扩展超参数调优库。
- Horovod: 是另一个分布式深度学习训练框架,可以和 PyTorch、TensorFlow、Keras、Apache MXNet 一起使用。它与 Ray 的相似之处在于,它主要是为同时跨多个 GPU 进行扩展而设计的。Horovod 最初由优步开发,是开源的,可以通过 GitHub 获得。
机器学习建模工具
-
Scikit-Learn: 是 Python 中最健壮的机器学习库之一。该库包含一系列用于机器学习和统计建模的工具,包括分类、回归、聚类和降维以及预测数据分析。这是一个基于 BSD 许可的开源但商业上可用的库,构建在 NumPy、SciPy 和 matplotlib 之上。
-
XGBoost: 是另一个开源的机器学习库,为 Python、C++、Java、R、Perl、Scala 提供了一个正则化梯度提升框架。它不仅在各种平台上提供稳定的模型性能,而且是目前最快的梯度提升框架之一。
-
Apache Spark: 是一个开源的统一分析引擎,专为扩展数据处理需求而设计。它为具有并行数据的多个编程集群提供了一个简单的用户界面。也很快。
Domino 数据实验室建模工具
虽然这些是今天用于 AI/ML 模型的一些最流行的工具,但这绝不是一个详尽的列表。要在同一个平台上探索这些工具的功能,请看一下 Domino 的企业 MLOps,它提供了14 天免费试用或点击这里观看快速演示。
机器学习模型指南
原文:https://www.dominodatalab.com/blog/a-guide-to-machine-learning-models
机器学习是人工智能(AI)的一个子集,它使用算法从趋势、数据集和某些行为中学习。这个过程涉及到机器学习模型的开发,这些模型可以回答问题,预测未来的结果,解决组织问题。
什么是机器学习模型?
机器学习模型是一种表示数据集中模式的算法。虽然它与软件应用程序有相似之处,但当你看到 ML 模型是如何制作的以及它是如何执行的时,这些相似之处很快就会消失。一个应用程序是由一个软件开发团队开发的,他们编写当用户与之交互时应用程序应该做什么的指令。一旦软件准备好发布,它将完全按照设计执行。
另一方面,模型被设计成独立运行,一旦开始运行,就没有用户的参与。完全依赖于它接收的数据的质量和结构,如果数据改变,模型将不再按预期工作。该模型包含使用初始数据集训练的算法,该数据集表示数据和结果之间的关系。然后,当您有了一组新的数据来预测可能的结果时,您可以使用该模型。
例如,ML 模型可以被训练来分析关于人们如何喜欢或不喜欢一系列照片的数据。然后可以向它提供一组新的照片,以预测人们对每张照片的反应。作为另一个例子,可以向 ML 模型提供关于股票市场趋势的数据,并且当它暴露于当前股票数据时,可以预测股票价格是上涨还是下跌。
为什么要用机器学习模型?
机器学习模型用来分析数据比人更有效。通常有两种使用 ML 模型的场景:当分析过程冗长乏味时,或者当大量数据使人难以识别模式时。
在第一种情况下,这通常是当您必须使用不同的数据重复执行相同的分析时,就像大型零售商确定新产品的价格或信用卡公司筛选新的应用程序。ML 模型有助于决策过程的自动化。
在第二种情况下,当您有太多的数据而无法在没有帮助的情况下进行有效分析时,ML 模型非常有用,例如天气预报或预测流行病期间的医院病床使用率。当然,每个行业都有自己的机器学习模型用例,其中一些包括:
- **金融服务:**模型用于识别数据中可以揭示投资机会的洞察力,识别具有高风险特征的借款人,并识别和防止欺诈。
- 健康&生命科学: ML 模型用于分析数据以识别趋势,从而改进诊断和治疗。
- **零售:**零售商使用 ML 根据以前的购买情况推荐商品,指定哪些广告应该放在特定的潜在客户群面前,并预测客户对广告的反应。
建模是如何工作的?
在您可以创建机器学习模型之前,您需要精确定义您希望它解决的问题,并获取解决该问题所需的数据。例如,如果你的问题陈述是预测一家公司下一季度的销售,你将需要以前销售的数据。有了这些信息,您就可以确定哪种算法最有可能回答您的问题。
在机器学习中,基本上有两类技术可以用来分析数据。如果你想求解的答案在数据中的某个地方,你可以使用监督学习,它可以从数据中的自变量中对因变量进行排序。如果答案不在您的数据中,那么您可能需要使用无监督学习技术。
所以,如果你想推荐额外的商品给购物者添加到网上购物车,你可能会使用无监督学习。如果你想确定贷款申请人是否可能拖欠还款,监督学习技术将是更好的选择。一些模型可以使用基于学习技术的算法,例如识别金融交易中的身份盗窃,或者确定明年的住房市场将会是什么样子。
机器学习算法
为你的模型选择正确的算法并不容易。事实上,数据科学团队通常会尝试几种算法,然后决定哪种算法是要测试的最佳候选算法。尽管任何给定库中可用的算法数量巨大,但一些最常见的类型包括:
回归
回归有两种主要形式:线性回归和逻辑回归。线性回归用于显示两个变量之间的线性关系。逻辑回归用于通过估计数据集中的联系来预测值。它们被设计用来回答诸如“多少钱?”或者“有多少?”
聚类分析
这是一个无监督学习技术的例子,它将数据排列成组或簇。它寻找数据点之间的相似性,以便将它们分组。这确保了相似的组聚集在一起,同时每个组尽可能地不同于其他组。
决策树
这种类型的算法使用可能结果的树表示,或者组织可以用来确定解决某些问题的最佳前进路径的决策。
机器学习模型过程
作为数据科学的一个分支,机器学习模型遵循数据科学生命周期也就不足为奇了:管理、开发、部署和监控。
模型管理
这是确定对新的 ML 模型的需求,并定义其问题陈述的地方。在大多数情况下,模型管理不仅包括数据科学团队的成员,还包括管理层和组织业务部门的成员。
在这里,为每个后续步骤分配角色,并确定所需的具体步骤。这些包括,例如,谁将开发模型,谁将部署模型,以及当模型准备好部署到用户环境中时,模型的关键性能指标是什么。
模型驱动的组织总是重新访问模型管理阶段,以评估过程中的成功或失败,确定成功模型的其他用例,并为下一个项目改进其过程。
模型开发
在此阶段,确定数据要求。如果数据不容易获得,就必须获取。然后,清洗 训练数据集 ,去除不必要的变量、重复的变量,确保标签、名字、标号都是标准化的。
然后,将可用数据分为训练数据和测试数据。应该确定一种方法,以系统和可测量的方式测试每个算法和超参数,例如交叉验证技术。
定义了问题陈述并清理了数据之后,现在就可以开发模型了。数据科学团队将选择算法来尝试和定义模型必须使用的超参数,比如在变量过多的情况下回归惩罚应该是什么。
一旦每个模型被训练和评估,最好的执行算法然后在一个新的数据集上被测试。测试的结果将决定应该使用哪个模型,或者是否需要对模型进行额外的修改。
模型部署
在这个阶段,数据科学家可以将模型交给工程师和开发人员,他们将在工作环境中部署模型。工程师将模型部署为 API 端点,或者开发一个应用程序,以便最终用户能够以用户友好的方式访问它。
只有训练有素且测试成功的模型才应该进行部署。一个数据科学团队可能需要使用几十个或数百个不同的模型和参数,才能得到一个可靠的模型和参数。
模型监控
就像任何正在成长的孩子学习与周围的世界互动一样,所有的机器学习模型都需要在部署后进行监控。每次模型收到新数据时,它都会做出相应的预测。然而,如果输入数据发生变化,模型可能会提供有偏差的输出,因为它可能没有被训练来处理新数据。当这种情况发生时,模型需要更新或者用新训练的版本替换。
大规模推出 ML 模型的组织使用自动化系统来同时监控他们的所有模型,就像 Domino Model Ops。作为 Domino 企业 MLOps 平台不可或缺的一部分,它可以安排运行自动化测试,并在出现问题时立即提醒数据科学团队。
运行中的机器学习模型
今天,机器学习模型围绕着我们。企业领导人利用它们来提高盈利能力、管理资源和订购库存。越来越多的车辆使用它们来辅助驾驶,使旅行更加安全。许多人在我们在线互动的幕后,几乎看不见,帮助我们做出购物决定,欣赏更好的视频,或帮助诊断我们的健康问题和开出治疗处方。
对于使用植根于数据科学程序的系统化流程的模型驱动型公司,成本持续下降,而投资回报率则成比例增加。2021 年 2 月,洛克希德·马丁公司宣布,通过使用 Domino Enterprise MLOps 平台扩展其 AI/ML 解决方案,该公司已经实现了超过 2000 万美元的年价值。这绝不是一种异常或异常现象。事实上,最近的一项 Forrester 研究表明,公司可以通过使用 Domino 实现 542%的投资回报率 。
使用 Domino 数据实验室进行模型开发
今天,你不再需要为你的数据科学团队配备博士来开发可持续和盈利的 ML 模型。然而,你确实需要知识、工具、库和资源,这些是在企业环境中大规模构建 ML 模型的基础。
文本和语音的自然语言处理指南
原文:https://www.dominodatalab.com/blog/a-guide-to-natural-language-processsing
虽然人类自诞生以来就一直在使用语言,但对语言的完全理解是一项终生的追求,即使对专家来说也常常达不到。让计算机技术理解语言、翻译甚至创作原创作品,代表了一系列仍在解决过程中的问题。
什么是自然语言处理?
自然语言处理(NLP)是不同学科的融合,从计算机科学和计算语言学到人工智能,共同用于分析、提取和理解来自人类语言的信息,包括文本和口语。它不仅仅是将单词作为信息块来处理。相反,NLP 可以识别语言中的层次结构,提取思想和辨别意义的细微差别。它包括理解句法、语义、词法和词汇。NLP 在数据科学领域有几个使用案例,例如:
- 摘要
- 语法纠正
- 翻译
- 实体识别
- 语音识别
- 关系抽取
- 话题分割
- 情感分析
- 文本挖掘
- 自动回答问题
自然语言生成
NLP 的子集, 自然语言生成(NLG) 是一种可以用英语或其他人类语言写出想法的语言技术类型。当给模型输入数据时,它可以生成人类语言的文本。通过文本到语音转换技术,它还可以产生人类语音。这是一个三阶段的过程:
- **文字策划:**内容大致概述。
- **句子规划:**内容放入句子和段落,考虑标点符号和文本流,包括代词和连词的使用。
- **实现:**组装后的文本在输出前进行语法、拼写和标点的编辑。
通过开源模型(如 GPT 3)和框架(如 PyTorch)的新发现和扩展,自然语言生成已经迅速扩展到商业组织中。
自然语言理解
NLP 的另一个子集是自然语言理解(NLU ),它确定文本或语音中句子的含义。虽然这对人类来说似乎很自然,但对于 机器学习 ,它涉及一系列复杂的分析,包括:
- **句法分析:**处理句子的语法结构,辨别意思。
- **语义分析:**寻找可能是一个句子显性或隐性的意义。
- **本体:**确定单词和短语之间的关系。
只有将这些分析放在一起,NLU 才能理解“食人鲨”这样的短语;依赖于先前句子的短语,如“我喜欢那样”;甚至是有多重含义的单个单词,比如自动反义词“疏忽”
NLP 技术和工具
在你开始学习 NLP 之前,你需要访问标记数据(用于监督学习)、算法、代码和框架。你可以使用几种不同的技术,包括 深度学习技术 取决于你的需求。一些最常见的自然语言处理技术包括:
- **情感分析:**最广泛使用的自然语言处理技术,用于分析客户评论、社交媒体、调查和其他人们表达意见的文本内容。最基本的输出使用三分制(积极、中立和消极),但如果需要,情感分析分数可以定制为更复杂的等级。它可以使用监督学习技术,包括朴素贝叶斯、随机森林或梯度推进,或者无监督学习。
- **命名实体识别:**从文本中提取实体的基本技术。它可以识别人名、地点、日期、组织或标签。
- **文本摘要:**主要用于摘要新闻和研究文章。提取模型通过提取文本来总结内容,而抽象模型生成自己的文本来总结输入文本。
- **方面挖掘:**识别文本中的不同方面。当与情感分析一起使用时,它可以提取完整的信息和文本的意图。
- **主题建模:**确定文本文档中涵盖的抽象主题。由于这使用了无监督学习,因此不需要带标签的数据集。流行的主题建模算法包括潜在狄利克雷分配、潜在语义分析和概率潜在语义分析。
现在比较流行的 NLP 框架有 NLTK,PyTorch, spaCy ,TensorFlow,Stanford CoreNLP, Spark NLP 和百度 ERNIE。在生产环境中,每个 NLP 框架都有其优缺点,所以数据科学家通常不会只依赖一个框架。Kaggle 提供了一系列的 NLP 教程 ,涵盖了基础知识,面向具有 Python 知识的初学者,以及使用 Google 的 Word2vec 进行深度学习。工具包括 50,000 个 IMDB 电影评论的标记数据集和所需的代码。
自然语言处理的应用
NLP 用于人们经常使用的各种应用程序。比如 Google Translate 就是用 TensorFlow 开发的。虽然它的早期版本经常被嘲笑,但它一直在通过谷歌的 GNMT 神经翻译模型 使用深度学习进行不断改进,以产生 100 多种语言的准确和听起来自然的翻译。
【脸书】 的翻译服务也取得了显著的成功,用 深度学习 和自然语言处理,以及语言识别、文本规范化和词义消歧解决了复杂的问题。
今天自然语言处理的其他应用包括 情感分析 ,它允许应用程序检测情感和观点的细微差别,并识别讽刺或讽刺之类的事情。情感分析也用于文本分类,它自动处理非结构化文本,以确定它应该如何分类。例如,负面产品评论中的讽刺性评论可以被正确分类,而不是误解为正面评论。
带 Domino 数据实验室的 NLP
除了您可能在网上或社交媒体中使用的应用程序,还有许多商业应用程序依赖于 NLP。例如,在保险业中,NLP 模型可以分析报告和应用程序,以帮助确定公司是否应该接受所请求的风险。
丹麦第二大保险公司 Topdanmark, 使用 Domino 数据科学平台构建并部署了NLP 模型,使其 65%至 75%的案例实现自动化,客户等待时间从一周缩短至几秒钟。要开始探索 Domino 企业 MLOps 平台的优势,请注册一个14 天免费试用版 。
思维转变:从销售到支持
原文:https://www.dominodatalab.com/blog/a-mindset-shift-from-selling-to-supporting
六个月前,我加入了 Domino 数据实验室,担任总裁兼首席运营官。我来到这家公司是为了帮助扩展我们的上市功能,并带领我们的业务进入下一个增长阶段,我很高兴有机会帮助一家年轻的公司发挥其潜力。我们在 Domino 的愿景是成为数据科学事实上的记录系统。就像 Salesforce.com 之于销售,或者 GitHub 之于工程,我们占据着一个对高效数据科学团队至关重要的解决方案空间。对于如何让数据科学家作为个体更有生产力,如何支持数据科学家团队高效协作,以及如何支持数据科学的治理作为一项功能来满足可解释性、可再现性和控制方面的重要要求,我们有着独特的观点。这是一个令人兴奋的愿景,我们看到一些最大的客户正在形成这一愿景。
有了这个雄心勃勃的愿景,一段时间以来,我们已经让我们的业务“加速”,推动我们自己取得超出我们想象的成就,积极增加市场份额,并在每个部门为自己设定挑战目标。然而,鉴于当今世界围绕新型冠状病毒发生的事情,我们一直在问自己是否需要改变我们的方法。Domino 可以成为加速研究的渠道,帮助组织开发药物、优化制造运营和供应链分配、确定成本节约机会、提供客户保留计划等等。现在时局真的很艰难,我们想尽一切努力帮助我们的客户取得成功。我们不希望自己激进的销售目标分散了我们平台的潜在影响。
两周前,我们的走向市场组织做出了一项重要决策,将我们的方法从“销售”转变为“支持”。我们最好的销售人员会说,他们总是对顾客采取支持的态度,他们是对的。但是,我感兴趣的是,如果我们在整个组织中正式实施“支持第一”战略,会发生什么。
我们会做出哪些不同的决定?
如果我们采取一种心态,认为我们的使命是支持我们的客户适应这一新的现实,会产生什么想法?
如果我在每周的管道电话会议上不是询问预测数字,而是询问我们的客户和潜在客户在哪些方面需要我们的帮助,以及我们正在做些什么来支持他们?
总会有改进的空间,但我对目前看到的情况感到兴奋:
- 销售和客户成功团队比以往任何时候都更加紧密地合作,以了解客户需求并设计创造性的解决方案来满足他们。
- 整个公司的高管和员工都在用创造性的想法来帮助客户。我们组织中有相当多的数据科学家,他们渴望看到数据科学投入工作以帮助解决危机。
- 为此,我们为 SAR-CoV-2 研究人员创建了一个公共多米诺环境,以便合作和分享他们的发现。这个环境已经预先植入了来自约翰·霍普金斯大学、世卫组织和疾病预防控制中心的新冠肺炎数据。我们希望你成为这个社区的一员。点击这里阅读更多和点击这里了解该项目。并且,如果您想参加就注册,并在蓝色对话框中请求访问该组织。
- 我们的许多客户都参与了抗击新冠肺炎的斗争。而且,在我们的许多客户那里,数据科学是这场斗争的关键组成部分。我们的客户成功团队已经提出在我们的客户之间建立联系,以便他们能够在这项工作中相互合作和学习。
我相信,新冠肺炎危机过后,多米诺骨牌将在诸多方面变得比以往任何时候都更加强大。我已经为团队能够团结起来互相支持和支持我们的客户而感到自豪。我相信这种“支持第一”的战略将会持续下去。
一个基于 Mongo 的游戏缓存插件
原文:https://www.dominodatalab.com/blog/a-mongo-based-cache-plugin-for-play
一个与工程相关的快速帖子:我们在 Mongo 中为 Play 构建了一个使用上限集合的缓存插件。如果你想用的话,可以在 Github 上找到它。
动机
Domino 的 web 前端是在 Scala 中构建的,在 Play 上——现在,有点勉强地托管在 Heroku 上。
我们有多个 dyno 在运行,我们希望每个 dyno 访问同一个缓存实例。因此,位于 web 进程内存中或机器磁盘上的缓存是不起作用的。
我们最初尝试通过 Memcachier 使用 Memcached,但是我们得到了我们永远无法解决的间歇性超时,即使有 Memcachier 人员的帮助。
解决办法
Mongo 中有上限的集合具有非常适合缓存的特性:快速写入和 FIFO 驱逐。我们的插件为每个缓存项增加了一个可选的过期时间。
项目中的自述文件中有自己使用的说明。
警告
这并不意味着疯狂的吞吐量。我们没有在“网络规模”上做任何事情,我怀疑这种解决方案能否承受巨大的负载。这是一个相当基本的解决方案,对于许多用例来说可能已经足够好了——而不是被设计成工业优势的东西。
给客户的提示:从新冠肺炎看多米诺业务连续性
这是我们今天早些时候发给 Domino Admins 的一封邮件,目的是解决一些客户关于新冠肺炎疫情的 Domino 支持和业务连续性的问题。我们想在这里交叉张贴,让所有客户都能看到。
日益严重的冠状病毒(新冠肺炎)疫情继续影响着全球个人、社区和企业的健康和福祉。我们理解您可能在您的组织中面临类似的挑战。由于 Domino 是我们许多客户的重要供应商,我们想分享我们正在采取的步骤,以提供一个安全和健康的环境,使我们的员工能够确保业务连续性、服务和对客户的支持。我们还希望鼓励任何在使用 Domino 时遇到问题的客户,因为他们正在远程工作,联系我们在support@dominodatalab.com的支持团队寻求帮助。
员工的健康是我们的头等大事。我们正在密切关注政府机构和卫生部门的指导,以确保我们的政策和实践保持我们团队的健康和高效。截至今天(3 月 13 日),对我们的员工或我们向客户提供正常服务水平的能力没有直接影响。我们很高兴地报告,没有多米诺员工冠状病毒检测呈阳性。
Domino 的业务连续性计划是最新的,包括疫情响应程序以及辅助通信方法。如果任何具有关键工作职能的员工受到影响,我们已经指定了具有适当权限的替代人员,他们可以承担这些关键职能的责任。
虽然我们的办公室此时仍然开放,但我们的大多数员工现在都在家履行工作职责,我们已经停止了所有可选的与业务相关的旅行,以最大限度地减少风险。我们将每天评估发展情况,并在适当的时候过渡到强制性的完全远程工作。鉴于我们的员工来自不同的地域,我们预计不会对我们支持客户的能力产生重大影响。
感谢您在这关键时刻的支持和理解。如果您有任何其他问题,请联系您的客户成功经理。
谢谢,
戴夫·科尔
首席客户官
多米诺数据实验室
数据科学领袖的非凡集合
原文:https://www.dominodatalab.com/blog/a-phenomenal-collection-of-data-science-leaders
By Conor Jensen, Data and Analytics Career Coach, Renegade Science on June 05, 2018 in
感谢 Conor Jensen 贡献这篇博客,最初发布在 Renegade Science 上。
数据科学中的管理是一个特别独特的挑战,大多数新经理对此毫无准备。上周,我有幸在 Domino 数据实验室专门针对数据科学领导者的会议上发言,这是我参加过的最好的会议之一。从中得出的最引人注目的事情之一是那里的管理深度,以及我们面临的挑战的共性。回顾我的笔记,以下是我最大的收获:
- 数据科学家经常根据他们构建到模型中的假设为他们的公司做出隐含的决策,我们需要帮助我们的团队将这些决策公之于众,以便进行更全面的讨论。 Cathy O’Neil 围绕使用伦理矩阵帮助这一过程发表了精彩的主题演讲。
- 对新经理的数据科学培训基本上不存在。鉴于从业者的高技术门槛,大多数新经理已经花了大量时间来建立强大的技能,这使得学习管理的空间很小。一些优秀的领导者已经出现,但仍在与不利因素作斗争(感谢凯西)。作为一个领域,我们需要把更多的重点和精力放在帮助新的管理者学习他们的手艺上,而不要期望他们花一半的时间来建立模型!
- 许多公司仍在努力兑现他们在高级分析方面的投资,虽然数据科学家和他们的领导者不应该独自承担责任,但我们肯定要承担一些责任。向上和向外管理是数据科学领导者的一项重要职责,需要培养,以在我们的公司内设定适当的期望。
非常感谢所有在场的演讲者和主持人,在我的 3 天里,我学到了很多。如果你没有参加这个活动,我强烈建议你明年去参加。我还要向我的小组成员同事们,米开朗基罗和 T2,还有我们伟大的主持人 T4 和乔希。我和你聊得很开心,希望观众也喜欢!
路德维希深度学习实践指南
原文:https://www.dominodatalab.com/blog/a-practitioners-guide-to-deep-learning-with-ludwig
Joshua Poduska 提供了 Ludwig 的概要,包括何时使用 Ludwig 的命令行语法以及何时使用其 Python API。
介绍
新工具不断被添加到深度学习生态系统。寻找正在被创建的工具类型的趋势可能是有趣的和有益的。例如,最近创建了多个有前途的工具,它们具有 Python APIs,构建在 TensorFlow 或 PyTorch 之上,并封装了深度学习最佳实践,以允许数据科学家加快研究速度。例子包括路德维希和 Fast.ai 。
这篇博文考虑了 Ludwig,提供了该包的简要概述,并为从业者提供了一些提示,比如何时使用 Ludwig 的命令行语法,以及何时使用其 Python API。这个博客还提供了 Jupyter 笔记本的代码示例,您可以通过 Domino 提供的主机下载或运行。
路德维希设计原则
我最近参加了在旧金山优步总部举行的一次聚会。路德维希的主要建筑师和维护者皮耶罗·莫里诺提出。他把路德维希的魔力总结为三点:
- 数据类型抽象
- 通过 YAML 文件的模型定义
- 巧妙使用关键词论证(* *夸尔斯)
我将简要地解释一下为什么 Peiro 会做出这样的声明,在你阅读我的解释之前,你可能会发现从优步工程博客中查看 Ludwig 设计工作流程的图会有所帮助。
从数据类型抽象开始他们的分析策略,使优步工程团队能够更好地集成深度学习最佳实践,用于模型训练、验证、测试和部署。Ludwig 可以对不同类型的数据集使用相同的数据预处理和后处理。这个抽象概念扩展到编码器的应用。编码器就是简单的深度网——平行 CNN,堆叠 CNN,堆叠平行 CNN,RNN 等等。为一个任务开发的相同的编码和解码模型可以被重新用于不同的任务。
虽然专家可以处理这些网络的细节,但新手也可以访问模型训练的成熟默认设置。通过 YAML 文件很容易插入新的编码器、解码器和组合器。专家或中间用户也发现使用用户指南中的许多可选* *参数来调整模型行为和超参数很简单。
Ludwig 允许用户训练模型、加载模型、使用该模型进行预测并运行实验。这些操作通过命令行或编程 API 运行。在 Ludwig 中训练模型只需要 CSV 数据集和模型定义 YAML 文件。
路德维希实验和输出
实验功能抓住了路德维希包的本质,因为它统一了所有的设计原则。在一个实验中,Ludwig 将创建一个带有 hdf5 扩展的中间预处理版本的输入 CSV。第一次在相同的目录中使用具有相同名称的 CSV 文件时会发生这种情况,随后的实验运行会利用该数据。Ludwig 随机拆分数据,并在训练集上训练模型,直到验证集的准确性停止提高。实验记录和输出可以在结果目录中找到,其中包含超参数和过程的汇总统计信息。我发现这种自动记录非常有用。在我的工作中,每次运行代表模型的一次调整是很常见的。Ludwig 输出自动组织在目录中。你可以给每个实验命名,或者像我一样使用默认的名字。
在与 Ludwig 合作时,如果您有目的地管理这种自动生成的输出,会有所帮助。将输出目录与 Git 项目同步,添加提交注释,或者使用 Domino 提供的自动再现引擎,可以在您尝试重新创建结果时省去很多麻烦。关键是要以一种你能记住变化的方式来组织你的实验。
路德维希从业者提示
在你找到在工作中利用它的最佳方式之前,使用任何新工具都会产生一些成长的烦恼。在这一节中,我总结了我在使用 Ludwig 时学到的经验,以帮助您更快地进行自己的评估。
从业者提示# 1——命令行对于运行实验来说非常有用。
Ludwig 的大多数功能都可以通过命令行或 Python API 获得。然而,正如本讨论主题中所指出的,一些编程 API 函数在技术上是可访问的,但尚未得到完全支持。命令行功能更加全面。这方面的一个例子是路德维希实验。虽然在使用 API 时需要一步一步地运行,但当通过命令行调用时,Ludwig 会自动拆分数据,并在训练集上训练模型,直到验证集的准确性停止提高——这是一个很好的功能。
下面是通过命令行开始实验的语法示例。
ludwig experiment \
--data_csv sequence_tags.csv \
--model_definition_file model_definition.yaml
另一方面,您需要通过 Python API 自己进行训练和测试。
从业者提示# 2——可视化的命令行调用在某些系统上可能很难使用。
让可视化显示可能是一个令人沮丧的练习。基本的代码改进正在进行中,包括保存图像的选项,而不仅仅是显示图像。如果您从 GitHub master 安装 Ludwig,您将能够通过 CLI 保存图像。参见此处获取关于该主题的讨论线索。
实践者提示# 3——通过命令行进行实验,通过 API 调用进行绘图。
我喜欢将技巧 1 和技巧 2 结合起来,通过命令行调用运行实验,并通过 Python API 调用构建可视化。当试图通过命令行显示可视化时,我的系统不配合,但是通过笔记本上的 API 调用来绘制可视化效果很好。以下面的语法和输出为例,在 Jupyter 笔记本中执行命令行和 API 调用都很容易。
!ludwig experiment \
--data_csv ../data/raw/reuters-allcats.csv \
--model_definition_file ../model_definition.yaml \
--output_directory ../results
from ludwig import visualize
visualize.learning_curves(['../results/experiment_run_7/training_statistics.json'],None)
一个示例笔记本可以通过 Domino 提供的主机下载和/或运行。
摘要
随着深度学习方法和原则的发展,我们将看到更多像 Ludwig 这样的工具,这些工具将最佳实践提取到构建在深度学习框架(如 TensorFlow )之上的代码库中,并可通过 Python APIs 访问。这将增加各行业对深度学习方法的采用,并导致令人兴奋的新深度学习应用。
R 中哈希表实现的快速基准
原文:https://www.dominodatalab.com/blog/a-quick-benchmark-of-hashtable-implementations-in-r
更新:我很谦卑,也很感谢这篇帖子有这么多的反馈!它开始是一个快速和肮脏的基准,但我从 Reddit,对这个帖子的评论,甚至从哈德利本人那里得到了一些很好的反馈!这篇文章现在有一些更新。主要的更新是,如果你的键总是有效的 R 符号,R 的new.env(hash=TRUE)
实际上提供了最快的散列表!这是我真正喜欢数据科学社区和数据科学过程的原因之一。迭代和同行评审是伟大成果的关键!
当人们考虑数据科学管道的关键组件时,您可能会考虑建模 API 或可视化库,但不太可能首先想到低级的哈希表。数据科学的一个令人痛苦的事实是,投入典型项目的大部分精力(据报道,80% )都花在了寻找、清理和准备数据上。剩下的“20%”是实际数据分析。数据科学家可用的最有用的数据结构之一是哈希表(也称为关联数组)。
哈希表是名副其实的瑞士陆军电锯。这些数据结构允许用户取一个任意值,比如一个字符串、一个复杂对象或一个数据帧,并使用它作为查找来找到另一个值。在数据科学项目的清理和准备数据阶段,散列表数据结构的常见用途是功能工程(例如,记录您在流中看到单个值的次数)、规范化,甚至是创建简单的直方图。
r 的缺少一个本机(和性能)散列表
让许多从其他背景学习 R 编程语言的人感到惊讶的是,R 对散列表的支持在历史上一直是缺乏的。 更新:事实证明,R 有一个性能完美的哈希表实现,只是命名不直观或者不容易找到。如果您使用new.env(hash=TRUE)
创建一个新的环境,R 为您提供了一个运行良好的环境。这是有意义的,因为它是用 C 实现的哈希表的一个瘦包装器,性能是显而易见的。R 提供的list()
数据结构允许这种关联映射。然而,在堆栈溢出和类似的论坛上,有许多关于使用和增加列表的潜在性能影响的警告。在这篇简短的博文中,我们提供了管理 r 中关联哈希表的 4 种方法的简单基准。我们看看原生的list()
、迈克尔库恩的 dict
包、克里斯托弗·布朗的 hash
包、尼尔富茨的 ht
包和默认的new.env(hash=TRUE)
。
这两个包之间的第一个区别是存储复杂键的能力。例如,您可能想要将一个data.frame
映射到一个特定的值。下面的代码演示了一个简单的示例:
mydict <- dict()
mylist <- list()
myht <- ht()
myhash <- hash()
myenv <- new.env(hash=TRUE)
mykey <- data.frame(product="domino", value="awesome")
mydict[[mykey]] <- "something" #will fail
mylist[[mykey]] <- "something" #will fail
myhash[[mykey]] <- "something" #will fail
myenv[[mykey] <- "something" # will fail
myht[[mykey]] <- "something" #will succeed
原生 R 列表和dict
包不允许你在 hashtable 中存储一个带有复杂键的条目,比如 data.frame。
mykey <- data.frame(product="domino", value="awesome")
mydict[mykey] <- "something" #will fail
Error in mydict[mykey] <- "something" : invalid subscript type 'list'
mylist <- list()
mylist[mykey] <- "something" #will fail
Error in mylist[mykey] <- "something" : invalid subscript type 'list'
hash
包没有提供同样的错误,但是当你看到表面之下时,这个包似乎错误地存储了密钥,并且实际上不允许你查找给定的原始值:(更新:这是我赋值时的一个错误。正如哈德利在一条推文中向我指出的那样,[[
代表单值,[
代表多值。所以这个错误完全是伪造的,隐藏了哈希不存储复杂键的事实。)
# UPDATE - Ignore this code block, read update above!
myhash[mykey] <- "something" #will succeed
myhash[mykey]
Error in get(k, x) : invalid first argument
myhash[data.frame(product="domino", value="awesome")]
Error in get(k, x) : invalid first argument
as.list(myhash)
$`1`
[1] "something"
由于某种原因,作为密钥的data.frame
被默默地存储为数字1
。如果用户不知道,这可能会产生一些难以跟踪的错误。
ht
包使用了一个隐藏的摘要,并允许您使用原始键或生成相同摘要值的对象来查找值:
] myht[mykey] <- "something" #will succeed
] myht[mykey]
[1] "something"
] myht[data.frame(product="domino", value="awesome")]
[1] "something"
如果您需要将任意复杂的对象作为关键字存储在一个散列中,ht
包提供了最强大的功能。
哈希表包的性能
我们分析了这些不同哈希表实现的运行时性能。我们使用优秀的microbenchmark
包来执行每个实验的十次运行。在实验中,我们在每个散列中插入 10,000 到 250,000 个唯一键,增量为 10k。
microbenchmark
为我们提供了一个数据结构,其中包含每次操作的最小值、最大值、平均值和中值,首先通过运行基准代码预热系统两次(例如,为了解决冷缓存问题)。)当我们查看平均值时,结果很清楚:
随着键的数量超过 100k,运行时开始发散。与其他散列表相比,ht
和hash
包的运行时间要短得多。然而,内置的environment
比所有其他实现都要好得多。考虑到ht
和hash
使用环境,这是有意义的,但是为了方便,可能会在原始实现的基础上付出一些性能代价。dict
和list()
实现的性能曲线非常相似,这意味着它们可能在引擎盖下类似地工作。无论如何,他们的性能曲线表明,随着这个数字的增长,性能将受到很大影响。当我们绘制最小值、中间值和最大值时,没有什么意外。我们上面看到的模式在所有的包中重复:
性能的另一个方面是数据结构在存储数据时使用的内存量。我们使用 R 的 更新:我们从 Hadley 的object.size()
函数来确定内存利用率。pry
包中为object_size
函数替换了 R 的object.size()
。由于作者不知道的原因,ht
和hash
包返回了一个恒定的大小,如图表底部的两条线所示。还有一个问题是object_size
为hash
对象返回一个错误,这个问题已经在适当的 github 中提出。
查看图表,您会注意到dict
和list()
在实验的两个点上都看到内存使用的显著增加。它们各自的内存消耗和性能曲线的相似性是一个很强的暗示,即dict
包是作为list()
实现的!然而,你会注意到,现在使用pryr
的object_size
,我们看到dict
对象占用了大量内存。我会调查这件事,因为这似乎不是一个正确的行为。
实验数据取自 Hadley Wickham 的【github 上婴儿名字数据集】。
由于object.size()
似乎不能与ht
和hash
包一起工作,我们使用 Domino 中的 reproducibility engine 来捕获实验的运行时统计数据。这为我们提供了内存使用量的大致概念。
这些包的内存使用情况几乎是相同的,这意味着它们也可能使用 R Base 包的相同基础设施。
摘要
哈希表是一种非常有用的数据结构。在 R 中,如果您需要存储键-值对,并且您的键永远不会是复杂的数据结构,那么hash
包是明显的赢家。(更新:在 R 中,如果你需要存储键值对,并且你的键总是有效的 R 符号,那么内置的new.env(hash=TRUE)
是明显的赢家!)如果你需要复杂的键,ht
包提供了与hash
相似的性能,并增加了使用复杂键的能力。
标题为山中伸弥词典的横幅图片。由 2.0 在 CC 下授权。
独特的国与国新冠肺炎比较
原文:https://www.dominodatalab.com/blog/a-unique-country-to-country-covid-19-comparison
像你们所有人一样,我的心思和我的生活都被新冠肺炎·疫情迷住了。当我看到冠状病毒在社区和国家传播时,我发现自己想要更深入地了解所有这些背后的数据。在搜索网页、博客和数据源后,我找到了一个可靠的数据源,并利用我在数据科学方面的背景来调查假设并与他人分享见解。
这项分析的数据来自约翰霍普金斯大学的 2019 新型冠状病毒数据仓库。基于同样的数据,还有其他可用的分析。两个例子见这里和这里。为什么我没有用那些?当我查看数据时,我想找到一种更容易预测处于冠状病毒斗争早期的国家的病例数和死亡总数的方法。我需要对不同国家的数据进行比较。为了做到这一点,我没有按照日历日期绘制数据,而是按照一个共同的 x 轴绘制,这个 x 轴将为每个国家的新冠肺炎趋势提供一个共同的起点。
约翰霍普金斯大学数据收集的第一个日期是 2020 年 1 月 22 日。在这一天,中国报告了与新冠肺炎有关的 547 例确诊病例和 17 例死亡。这是我们能找到的最早的数据。为了将所有国家放在一个共同的立足点上,我们将所有其他国家的时钟倒转,并使它们与中国首先报告的数字一致。每条曲线都来自同一个起点。在查看了许多国家的数据后,我选择了 600 例确诊病例和 20 例死亡病例作为起点。以下是我注意到的一些观察结果。我不是健康或医学专家,甚至不是这方面的新手。这些观察仅仅是基于数据。在得出最终结论之前,应该考虑测试程序、报告系统、地理人口分布、医疗基础设施和其他因素的知识。
这些观察基于截至 2020 年 3 月 17 日的数据。
按新冠肺炎死亡人数排名的前 10 个国家-显示确诊病例和死亡总数
韩国死亡总数保持不变
在目睹第 20 例死亡的 16 天后,韩国总共只有 81 例死亡。相比之下,意大利在经历了第 20 次死亡后的 16 天内共有 1441 人死亡。这种比较既显示了意大利的情况有多糟糕,也显示了韩国的情况相对可控。
意大利看起来有望比中国快 20 天突破 3000 人的死亡大关,而且很快意大利的新冠肺炎死亡人数将超过中国。考虑到每个国家的总人口,这些数字是惊人的。
美国、日本和荷兰最有可能看到类似韩国的平坦死亡曲线
在过去的两天里(他们第 20 次死亡后的第 9 天和第 10 天),美国的死亡人数从 63 人上升到 108 人。这可不好。然而,如果死亡人口的百分比是地面状况的指标,那么,从大的方面来看,美国的这一增长就不那么令人担忧了。此外,在这种假设下,荷兰的数据看起来并不那么令人鼓舞。
荷兰、西班牙、意大利和伊朗经历了最糟糕的人口死亡百分比曲线
荷兰目前是这个名单上人口死亡曲线百分比最差的国家。在看到第 20 例死亡后的第三天,0.00025%的人口死于新冠肺炎。这比西班牙达到相同比例的时间早了两天。比意大利早四天。比伊朗早 9 天。名单上没有其他国家达到这个比例。
西班牙和荷兰的人口死亡曲线百分比与意大利相似。如果趋势继续,他们可以期待意大利曲线,只是他们会在旅程中更快地到达那里。
我还可以做更多的观察,但我就说到这里。数据将在未来几天发生变化,随着故事的展开,我们都将能够得出自己的结论。
我希望你已经发现这种冠状病毒死亡和病例数据的独特观点是有帮助的。对于那些患有冠状病毒的人或有亲人患病的人,要知道世界上数十亿人正在向你致以良好的祝愿、祈祷和希望早日康复的想法。对于那些在前线帮助拯救生命和保护社区的人们,你们拥有全世界的尊敬和最深切的感激。
Python 中层次模型的 A/B 测试
原文:https://www.dominodatalab.com/blog/ab-testing-with-hierarchical-models-in-python
在这篇文章中,我讨论了一种使用 Beta-二项式层次模型进行 A/B 测试的方法,以纠正测试多个假设时的一个常见缺陷。我将把它与使用伯努利模型计算 p 值的经典方法进行比较,并介绍层次模型相对于经典模型的其他优势。
介绍
想象以下场景:你为一家通过广告获得大部分在线流量的公司工作。你当前的广告只有 3%的点击率,而你的老板认为这还不够好。营销团队提出了 26 种新的广告设计,作为公司的数据科学家,你的工作是确定这些新广告中是否有比当前广告更高的点击率。
你设置了一个在线实验,向互联网用户展示 27 个可能的广告中的一个(当前广告或 26 个新设计中的一个)。两周后,你收集每个广告的数据:有多少用户看到了它,它被点击了多少次。
是时候进行一些统计测试了!新设计与当前设计的对比?没有统计学上的显著差异。新设计 B vs 当前设计?没有统计学上的显著差异。你继续运行测试,继续得到不重要的结果。就在你即将失去希望的时候,新设计 Z 诉当前设计…在 alpha = 0.05 的水平上有显著的统计学差异!
你告诉你的老板,你发现了一个比当前设计点击率更高的设计,你的公司将它部署到生产中。然而,在对新设计进行了两个月的统计后,似乎新设计的点击率为 3%。哪里出了问题?
在执行 A/B 测试时,数据科学家经常会陷入一个常见的陷阱,即无法针对多个测试进行纠正。alpha = 0.05 的测试意味着您的统计测试随机产生一个极端或更极端的结果(假设给定的零假设为真)的概率为 0.05。如果您运行 26 个统计测试,那么假阳性的预期数量的上限是 26*0.05 = 1.3。这意味着在我们上面的场景中,我们的数据科学家可以预期至少有一个假阳性结果,不幸的是,这个假阳性结果是她向老板报告的结果。
问题是
假设我们正在设计 Domino 的网站,我们正在测试登陆页面的五种不同布局。当用户点击我们的网站时,她会看到五种登陆页面布局中的一种。从那里,用户可以决定是否要在 Domino 上创建一个帐户。
| 网站(全球资讯网的主机站) | 点击 | 注册 | 经验比率 | 真实汇率 |
| A | One thousand and fifty-five | Twenty-eight | Zero point zero two seven | Zero point zero three two |
| B | One thousand and fifty-seven | Forty-five | Zero point zero four three | Zero point zero four one |
| C | One thousand and sixty-five | sixty-nine | Zero point zero six five | Zero point zero five eight |
| D | One thousand and thirty-nine | Fifty-eight | Zero point zero five six | Zero point zero four seven |
| E | One thousand and forty-six | Sixty | Zero point zero five seven | Zero point zero five one |
作为免责声明,这是我创建的模拟数据,用来模仿真实的 A/B 测试数据。每个网站的注册人数是通过从二项式分布中生成一个数字来生成的,其中 n =点击次数,p =真实比率。经验比率代表注册/点击。
初步:贝叶斯统计
统计学有两个著名的分支:频率统计和贝叶斯统计。这两个分支有很多不同之处,但我们将重点关注一个关键的不同之处:
- 在频率统计中,我们假设感兴趣的参数是固定的常数。我们着重于计算可能性 Prob(数据|参数),即在给定感兴趣的参数的情况下,我们看到观察到的数据点集的概率。
- 在贝叶斯统计中,我们对感兴趣的参数有不确定性,我们用数学方法在一个先验分布中捕获关于这些参数的先验不确定性,正式表示为 Prob(参数)。我们着重于计算后验分布 Prob(参数|数据),表示在我们观察到数据后,围绕感兴趣参数的后验不确定性。
拜贝叶斯定理所赐,我们知道后验概率(参数|数据)与概率(数据|参数)概率(参数)成正比,概率乘以先验分布。
在我们的问题中,感兴趣的参数是人们在每个网站上注册的真实比率,观察到的数据是每个网站获得的点击和注册数量。因为是进行贝叶斯统计,所以对后验分布建模比较感兴趣:
Prob(真实报名率|数据)~ Prob(数据|真实报名率)Prob(真实报名率)。
经典伯努利模型
为了在 Python 中构建贝叶斯模型,我们将使用贝叶斯随机建模库 PyMC 。
import pymc
Cam Davidson-Pilon 用 PyMC 写了一本关于贝叶斯模型的伟大著作,我推荐给任何对学习贝叶斯统计或如何用 Python 编程贝叶斯模型感兴趣的人。本节中的 PyMC 代码基于他书中的 A/B 测试示例。
在我们研究 Beta-二项式分层模型方法之前,让我们先来看看我们如何在标准的两个网站案例中使用伯努利模型进行 A/B 测试。回想一下,网站 A 有 1055 次点击和 27 次注册,网站 B 有 1057 次点击和 45 次注册。
# Website A had 1055 clicks and 28 sign-ups
values_A = np.hstack(([0]*(1055-28),[1]*28))
# Website B had 1057 clicks and 45 sign-ups
values_B = np.hstack(([0]*(1057-45),[1]*45))
现在,我们可以将每个可能的注册建模为伯努利事件。回想一下,伯努利分布反映了抛硬币的结果。以某种概率 p ,硬币翻转正面,以某种概率 1-p ,硬币翻转反面。这个模型背后的直觉如下:一个用户访问网站。用户投掷硬币。如果硬币正面朝上,用户就签约。
现在,假设每个网站都有自己的硬币。网站 A 有一枚硬币以概率 p[A] 正面落地,网站 B 有一枚硬币以概率 p[B] 正面落地。这两种概率我们都不知道,但是我们想确定 p[A]p[B]或者反过来是否成立(也有可能 p[A] = p[B] )。
由于我们没有关于 p[A] 或 p[B] 的真实值的信息或偏差,我们将从均匀分布中得出这两个参数。此外,我还创建了一个 delta 函数来创建两个分布之差的后验分布。
# Create a uniform prior for the probabilities p_a and p_b
p_A = pymc.Uniform('p_A', 0, 1)
p_B = pymc.Uniform('p_B', 0, 1)
# Creates a posterior distribution of B - A
@pymc.deterministic
def delta(p_A = p_A, p_B = p_B):
return p_B - p_A
接下来,我们将为每个网站创建一个观察变量,该变量包含每个网站的注册数据。然后,我们使用 pymc 运行 MCMC ( 马尔可夫链蒙特卡罗)从每个网站的后验分布中取样。对于门外汉来说,MCMC 是一类算法,通过构建具有期望分布特性的平衡分布,从期望分布中进行采样。因为 MCMC 采样器需要时间来收敛到平衡,我们丢弃了前 500,000 个采样点,所以我们只有从(希望)收敛的平衡分布中采样的点。
# Create the Bernoulli variables for the observation
obs_A = pymc.Bernoulli('obs_A', p_A, value = values_A , observed = True)
obs_B = pymc.Bernoulli('obs_B', p_B, value = values_B , observed = True)
# Create the model and run the sampling
model = pymc.Model([p_A, p_B, delta, values_A, values_B])
mcmc = pymc.MCMC(model)
# Sample 1,000,000 million points and throw out the first 500,000
mcmc.sample(1000000, 500000)
现在,让我们检查 delta 分布的后验概率(记住,这是网站 B 的后验概率-网站 A 的后验概率)。
delta_distribution = mcmc.trace('delta')[:]
sns.kdeplot(delta_distribution, shade = True)
plt.axvline(0.00, color = 'black')
黑线在 x = 0 处,表示两个分布之间的差值为 0。通过观察,我们看到分布的大部分质量在黑线的右边。这意味着从 B 分布中采样的大多数点比从 A 分布中采样的大。
为了得到更多的定量结果,我们可以计算网站 A 比网站 b 获得更多注册的概率。
print("Probability that website A gets MORE sign-ups than site B: %0.3f" % (delta_distribution &lt; 0).mean())
print("Probability that website A gets LESS sign-ups than site B: %0.3f" % (delta_distribution &gt; 0).mean())
The probability that website A gets MORE sign-ups than site B: 0.023
The probability that website A gets LESS sign-ups than site B: 0.977
对于这两个网站,我们看到网站 B 的表现优于网站 a。这对两个网站来说效果很好,但是如果我们对五个网站中的所有网站都这样做,由于多重测试问题,我们可能会遇到“误报问题”。有 10 个可能的配对,所以假设我们在 alpha = 0.05 的水平上独立测试所有可能的配对。对于每个测试,我们有 95%的机会不会得到假阳性,所以所有测试都不会产生假阳性的概率是(0.95)^(10) ,大约等于 0.60。这意味着获得至少一个假阳性结果的概率约为 0.40%或 40%。如果我们有更多的网站,从而有更多的配对来测试,得到假阳性的概率只会增加。
正如你所看到的,如果不修正多重测试,我们很有可能会遇到假阳性结果。在下一节中,我将展示层次模型如何隐式地纠正这种多重测试陷阱,并产生更准确的结果。
贝塔分布
在我介绍贝塔-二项式层次模型之前,我想讨论一下贝塔分布的理论动机。让我们考虑区间(0,1)上的均匀分布。
如你所见,这是一个简单的分布。它为域(0,1)中的所有点分配相等的概率权重,也称为分布的支持度。然而,如果我们希望(0,1)上的分布不是处处平坦的呢?
这就是 Beta 发行版的用武之地!贝塔分布可以看作是均匀分布(0,1)的推广,因为它允许我们在区间(0,1)上定义更一般的概率密度函数。使用两个参数 a 和 b ,贝塔( a , b )分布由以下概率密度函数定义:
其中 C 是常数,用于将函数的积分归一化为 1(所有概率密度函数必须积分为 1)。这个常数正式名称为贝塔函数。通过改变 a 和 b 的值,我们可以改变分布的形状和“陡度”,从而允许我们在区间(0,1)上轻松创建各种各样的函数。
请注意,在上面的图中,对应于分布 Beta(1,1)的绿线与 Uniform(0,1)的绿线相同。如果将 a , b = 1 代入贝塔分布的 pdf,则得到 pdf(x) = B(1,1)x(1-1)(1-x)(1-1)= B(1,1)x⁰(1-x)⁰= B(1,1) 1 1 = 1,其中 B(1,1)是在(1)处计算的贝塔函数
因此 Beta(1,1)的 pdf 处处为 1,所以等价于均匀(0,1)的 pdf,从而证明 Beta 分布确实是均匀(0,1)的推广。
现在,我敢肯定,你们中的许多人都想知道这一部分有什么大的收获,所以他们在这里:
- 贝塔分布是(0,1)上的一个通用概率分布族。
- 这允许我们创建先验分布,它结合了我们的一些信念,从而提供了丰富的先验信息。
在下一节中,我将讨论为什么这很重要,以及如何将 Beta 分布用于 A/B 测试。
分层建模
在本节中,我们将使用二项式分布对网站注册进行建模。二项式(n,p) 背后的直觉是,如果我们以落地正面的概率pn 次抛硬币,我们看到 k 正面朝向 0 和 n 之间的某个 k 的可能性有多大。
在经典伯努利方法部分,我说过我们没有关于每个网站真实比率的先验信息,所以我们使用 Uniform(0,1)作为无信息先验。在本节中,我们将假设每个真实注册率都来自 Beta 分布。
现在,注册人数, k[i] 用二项式(n[i] ,p[i] ) 建模,每个网站的真实注册率, p[i] 从 Beta 中抽取( a , b )。到目前为止,我们忽略了一个重要的问题?我们如何选择 a 和 b ?
我们可以指定一个先验分布来选择这些超参数,但是我们的先验分布有一个先验分布,它一直向下。
更好的替代方案是从分布
f( a ,b)~(a+b)^(-5/2)其中 a , b > 0。我肯定这个函数对你们中的许多人来说看起来像数学魔术,但是关于这个概率分布从何而来的深入解释可以在 Andrew Gelman 的书或者 Youtube 上的教程中找到。
该函数背后的一般思想是,它结合了关于平均值 log(a/b)的 logit 和“样本大小”的 log(a+b)的思想,以定义这两个参数的适当概率分布。如果前面的句子对你来说毫无意义,不要担心。它只是说,如果我们使用这个函数,当对 a 和 b 进行采样时,我们会得到期望的数学特性。
现在我已经介绍了理论,我们终于可以建立我们的层次模型了。本节中的代码基于 Stater Stich 的使用层次模型教程。
贝塔先验函数从上面定义的函数中为我们采样 a 和 b 。PyMC 中的随机装饰器要求我们返回对数似然,所以我们将返回( a + b )^(-2.5) 的对数。
@pymc.stochastic(dtype=np.float64)
def beta_priors(value=[1.0, 1.0]):
a, b = value
if a &lt;= 0 or b &lt;= 0:
return -np.inf
else:
return np.log(np.power((a + b), -2.5))
a = beta_priors[0]
b = beta_priors[1]
然后,我们将真实的注册率建模为 Beta 分布,并使用我们观察到的注册数据来构建二项式分布。再次使用 MCMC 从平衡分布中采样 1,000,000 个数据点(再次丢弃前 500,000)。
# The hidden, true rate for each website.
true_rates = pymc.Beta('true_rates', a, b, size=5)
# The observed values
trials = np.array([1055, 1057, 1065, 1039, 1046])
successes = np.array([28, 45, 69, 58, 60])
observed_values = pymc.Binomial('observed_values', trials, true_rates, observed=True, value=successes)
model = pymc.Model([a, b, true_rates, observed_values])
mcmc = pymc.MCMC(model)
# Generate 1,000,000 samples, and throw out the first 500,000
mcmc.sample(1000000, 500000)
让我们看看我们的五个后验分布是什么样的。
既然我们已经有了所有五个后验分布,我们就可以很容易地计算出其中任意两个之间的差异。具体来说,我们来看看网站 C 和网站 a 的区别。
diff_CA = mcmc.trace('true_rates')[:][:,2] - mcmc.trace('true_rates')[:][:,0]
sns.kdeplot(diff_CA, shade = True, label = "Difference site C - site A")
plt.axvline(0.0, color = 'black')
我们再次看到,该差异分布的大部分质量位于垂直黑线的右侧,这意味着从 C 分布中采样的大部分点大于从 A 分布中采样的点。如果我们量化这些结果,我们得到:
print("Probability that website A gets MORE sign-ups than website C: %0.3f" % (diff_CA &lt; 0).mean())
print("Probability that website A gets LESS sign-ups than website C: %0.3f" % (diff_CA &gt; 0).mean())
The probability that website A gets MORE sign-ups than website C: 0.000
The probability that website A gets LESS sign-ups than website C: 1.000
我们看到,几乎 100%确定网站 C 比网站 A 好。对于那些对这一结果持怀疑态度的人,请记住,我选择的网站 C 模拟数据的真实注册率几乎是网站 A 的两倍,因此网站 C 和网站 A 的后验分布有如此明显的差异是可以预料的。
此外,由于分层模型,我们可以连续执行多个测试,而不必针对多个比较进行调整。比如,我们再来重温一下网站 B 和网站 a 的后验分布的区别。
我们再次看到,这个后验分布的大部分概率位于 x = 0.00 线的右边。我们可以使用与网站 C 和网站 a 之间的差异相同的方法来量化这些结果。
The probability that website A gets MORE sign-ups than website B: 0.028
The probability that website A gets LESS sign-ups than website B: 0.972
同样,我们看到的结果显示,在统计显著水平上,网站 B 比网站 A 具有更高的注册率,与使用经典伯努利模型时的结果相同。
应该注意的是,层次模型不能克服数据的局限性。例如,让我们考虑网站 D 和网站 E。虽然这两个网站的真实注册率不同(网站 E 比网站 D 好),但它们的点击和注册数据几乎相同。如果我们为这个网站绘制两个后验分布,我们会看到它们有很大的重叠。
因此,我们的后验差产生了一个以 0.0 为中心的分布,我们不能得出一个网站在统计显著水平上有更高的注册率的结论。
Probability that website D gets MORE sign-ups than website E: 0.437
Probability that website D gets LESS sign-ups than website E: 0.563
使用分层模型,我可以测试网站 C 和网站 A 具有不同真实注册率的假设,以及网站 B 和网站 A 相继具有不同真实注册率的假设,如果不对我们的统计测试进行一些调整,我们就无法使用伯努利模型进行测试。
比较两种方法
现在我已经向您展示了两种不同的方法来进行 A/B 测试:一种方法使用伯努利分布,另一种方法使用贝塔-二项式分布。我使用多重比较测试的问题来激发 Beta-二项式层次模型。现在让我们通过检查由两种方法中的每一种为网站 A 生成的后验分布来比较这两种方法的性能。我在 x = 0.32 处添加了一条黑色垂直线,这是我用来模拟数据的真实概率。
sns.kdeplot(siteA_distribution, shade = True, label = "Bernoulli Model")
sns.kdeplot(mcmc.trace('true_rates')[:][:,0], shade = True, label = "Hierarchical Beta")
plt.axvline(0.032, color = 'black')
如你所见,分级贝塔二项式模型的质量比伯努利模型的质量更接近真实速率。在这种情况下,分级模型的后验概率给了我们一个更接近真实比率的估计。
为什么分级β-二项式模型在估计真实利率时似乎更准确?这归结于每种方法中使用的先验分布。在经典的伯努利方法中,我们使用均匀(0,1)作为先验分布。正如我前面提到的,这是一个无信息的先验,因为它对所有可能的概率赋予了同等的权重。另一方面,Beta 先验创建了一个分布,该分布将一些概率质量放向“真实”,因此我们看到了对后验分布的更精确的估计。如果我们稍微改变贝塔分布的值 a 和 b ,我们可能看不到两个后验概率之间的差异。
有可能存在一些其他的数学函数,我们可以用它作为我们的先验,从而得到一个更精确的后验,但是我们不能保证得到的后验是容易计算的。贝塔分布是二项式分布之前的共轭分布,所以我们保证得到的后验分布很容易计算(在这种情况下,后验分布总是贝塔分布)。
多重测试问题
最后,我要解决大家在阅读这篇文章时一直在思考的问题!为什么层次模型解决了多重测试的问题?
让我们考虑两个极端:在一个极端,我们模拟每个网站有相同的真实注册率。这意味着 p[A] = p[B] =…= p[E] ,从而完全汇集来自每个网站的所有注册数据,以估计所有五个网站的“平均”注册率。在另一个极端,我们为每个网站的注册率建模,彼此完全分离,因此只关注个人注册率。分层模型是这两个极端之间的折衷,称为部分池化。
在分层模型中,我们认识到,由于所有五个网站都在模拟相同的现象,当我们单独模拟每个网站时,我们会忽略所有五个网站的一些信息。通过合并所有五个网站上发生的主要影响,同时保留个别影响,我们减少了模型中的统计不确定性,从而减少了多重比较的问题。在本文(第 7-9 页,第 3.2 节)中可以找到关于部分池以及为什么分层模型减少多重比较问题的更详细解释。
需要注意的一点是部分池并不是贝叶斯统计所独有的。例如在机器学习中,多任务学习处理训练分类器来学习一组相关问题,使用所有问题的公共表示。当我们应用组收缩惩罚(这减轻了公共表示对每个分类器决策的影响)时,我们看到了部分池效应,因为每个分类器的输出包含了减轻的公共表示以及每个问题的单独表示。
最后,我认为值得一提的是最广为人知的处理多重比较的方法:Bonferroni 校正。如果你还记得你的统计学入门课程,标准的统计推断程序围绕着拒绝零假设(H[0] )如果给定零假设的观察数据的可能性太小。我们量化了“太小”的含义,使用α (alpha)值来表示我们的统计显著性阈值(即α = 0.05)。
Bonferroni 修正声明,如果我们要测试 n 假设,那么我们需要将统计显著性的阈值降低到α/ n 。例如,如果我们计划在α = 0.05 水平进行测试,我们将测试 10 个假设,那么 Bonferroni 修正声明我们应该在 0.05/10 = 0.005 水平进行测试。这意味着,当我们得到小于 0.05 的 p 值时,我们不是拒绝我们的零假设,而是当我们观察到小于 0.005 的 p 值时,我们拒绝我们的零假设。根据所涉及的统计测试,还有其他程序来校正多重比较。
结论
数据科学家使用 A/B 测试对他们公司的业绩产生有意义的影响。好的 A/B 测试可以带来百万美元的成果,但是好的 A/B 测试也比你想象的要复杂。有许多陷阱会导致无意义的结果。
贝叶斯分层模型为 A/B 测试提供了一种简单的方法,克服了困扰数据科学家的一些陷阱。这篇博文的灵感来自 Slater Stich 的A/B 测试统计建议系列,所以任何有兴趣了解更多这些陷阱的人都可以看看他的帖子。
如果你想进一步阅读应用贝叶斯方法,我推荐这本书。除了是一本好书,它还有最可爱的封面。最后, Udacity 最近发布了一个关于 A/B 测试的免费在线课程。
通过雪花 Java UDF 集成加速模型速度
在接下来的十年里,打败竞争对手的公司将是“模型驱动”的企业。这些公司经常进行大量的数据科学工作,以便从“数据驱动”转向“模型驱动”的运营,并为业务提供基于模型的见解。
对于一家公司来说,典型的数据科学之旅始于一个小团队,该团队的任务是解决一些特定的问题。跟踪和管理少量在 Excel 中处理数据的实验相当简单。一旦公司遇到可扩展性障碍,挑战就会浮出水面。在某一点上,随着需求的不断增长,数据量会迅速增加。数据不再存储在 CSV 文件中,而是存储在专门构建的数据湖/数据仓库中。个人笔记本电脑不再能够处理所需的数量。数据科学团队不断壮大,人们再也不能孤立地工作,他们需要能够共享知识、移交项目,并拥有验证和再现能力。
为了恰当地扩展数据科学,公司需要一个整体系统来开发、部署、监控和管理大规模模型——一个记录其数据科学的系统。这是 Domino Enterprise MLOps 平台的核心功能——一个支持对模型、仪表板和数据管道等数据产品进行快速、可重复和协作工作的系统。同样,雪花的数据云也在不断发展壮大,现在已经成为基于云的数据存储和分析(数据仓库即服务空间)的主要参与者之一。
这两个平台都是云不可知的,因此它们可以在 Azure、GCP 和 AWS 上运行。联合客户已经使用 Domino 数据连接器在 Domino 环境和雪花数据云之间检索和写入数据。最近宣布的 Domino Data Lab 和 Snowflake 之间的合作伙伴关系通过将 Snowflake 的 Snowpark 和 Java UDFs 集成到 Domino 中增强了这种体验。Snowpark 是一种新的开发人员体验,它使数据科学家能够利用他们最喜欢的工具,并直接在 Snowflake 中部署代码。
在这篇博文中,我们将重点关注这两个平台提供的 UDF 功能。
为什么选择雪花 UDF
一般来说,在关系数据库的环境中,用户定义函数(UDF)是一种扩展底层数据库功能的机制。此外,这种函数可以在标准的 SQL 查询中进行评估,但它可以用不同于 SQL 的语言编写。这个定义使得 UDF 有点类似于存储过程,但是两者之间有许多关键的区别。雪花存储过程使用 JavaScript,并且在大多数情况下使用 SQL。UDF 确实支持 JavaScript 和 SQL,但是也可以用其他语言编写,比如 Java 和 Scala。存储过程是直接调用的(通过 CALL 命令),但是 UDF 是作为语句的一部分调用的。因此,如果我们需要一个可以在语句中使用的值,或者如果我们需要为每个输入行生成一个值,我们最好的选择是 UDF。
最重要的是,UDF 直接在雪花中执行。如果大数据教会了我们什么,那就是对于大容量和高速度的数据,将计算转移到数据所在的位置是明智的。在实例(甚至不同的云提供商)之间转移千兆字节甚至千兆字节的数据会对性能产生重大影响,并对数据科学团队保持高模型速度和支持公司内部创新工作的能力产生负面影响。这就是 UDF 发挥作用的地方,它们可能是一种通用的机制,可以提高性能并简化许多用例。
例如:
- 加速模型构建和评分
- 可以在雪花中加载模型训练 Java UDF,并且可以在新数据进入时自动重建模型,而不需要在实例之间传输数据。
- 预训练模型可以作为 UDF 加载到 Snowflake 中,以便在传入数据进入数据库时对其进行评分(例如异常检测)。
- 高级数据争论和预处理管道
- 与 SQL 相比,Java UDF 可以使用更广泛的技术进行数据清理、特性工程和模式高级预处理。
- 现有的预处理、数据接收和数据质量流程可以从 Java/Spark 转换成 Java UDFs。这些管道可以在 Snowflake 中本地运行,它们的执行和可再现性由 Domino 管理。
- 增强的商业智能功能
- 商业智能工具可以通过 SQL 调用利用执行复杂处理、聚合和转换的 UDF。这使得在 Domino 中运行的 BI 产品(例如 Apache SuperSet)能够提取和应用高级计算和聚合,这在工具或普通 SQL 中通常是不可用的。
从 Domino 连接到雪花
从 Domino 连接雪花很简单,因为雪花库和雪花驱动程序已经包含在默认的 Domino Analytics 分布式计算环境中。我们还在之前的一篇博文中介绍了设置凭证和创建初始连接的过程。
连接到雪花之后,我们运行一个简单的 SELECT 语句来确认我们的连接工作正常,并验证雪花版本。
import os
import snowflake.connector as sf
ctx = sf.connect(
user=os.environ["SNOWFLAKE_USER"],
password=os.environ["SNOWFLAKE_PASSWORD"],
account=os.environ["SNOWFLAKE_ACCOUNT"]
)
cur = ctx.cursor()
cur.execute("SELECT current_version()")
cur.fetchone()[0]
'5.21.2'
出于本演示的目的,我们使用以下 DDL 在雪花中创建了一个表:
CREATE OR REPLACE TABLE DOMINO_DEMONSTRATIONS.PUBLIC.AUTOMPG (
MPG NUMBER(38,0),
CYLINDERS NUMBER(38,0),
DISPLACEMENT NUMBER(38,0),
HORSEPOWER NUMBER(38,0),
WEIGHT NUMBER(38,0),
ACCELERATION FLOAT,
YEAR NUMBER(38,0),
ORIGIN NUMBER(38,0),
NAME VARCHAR(16777216)
);
该表由 AutoMPG 数据集填充,可以从 Kaggle 下载。我们可以运行一个简单的 SELECT 并从 AUTOMPG 表中获取前 3 行。
cur.execute("USE DATABASE DOMINO_DEMONSTRATIONS")
res = cur.execute("SELECT * FROM AUTOMPG LIMIT 3")
for row in res:
print(row)
(18, 8, 307, 130, 3504, 12.0, 70, 1, 'chevrolet chevelle malibu')
(15, 8, 350, 165, 3693, 11.5, 70, 1, 'buick skylark 320')
(18, 8, 318, 150, 3436, 11.0, 70, 1, 'plymouth satellite')
既然已经确认了连接,我们就可以转移到 UDF 了。
从 Domino 使用雪花 Java UDFs
我们从定义一个简单的 Java UDF 开始。我们的第一个函数是一个非常基本的 Java 方法,它简单地返回两个数的和。Java 代码如下所示:
public static int add(int x, int y) {
return x + y;
}
这个静态方法接受两个参数 x 和 y,并返回它们的和。通常,雪花支持两种类型的 UDF:
- 预编译的 UDF,作为 JAR 文件导入,可以包含多个 Java 函数
- 内嵌 UDF,通常只包含一个函数,由雪花动态编译
在这个例子中,我们将使用一个内嵌的 UDF,所以我们需要做的就是将 Java 代码包装在一个 CREATE FUNCTION 语句中。
create function add(x integer, y integer)
returns integer
language java
handler='TestAddFunc.add'
target_path='@~/TestAddFunc.jar'
as
$$
class TestAddFunc {
public static int add(int x, int y) {
return x + y;
}
}
$$;
上面的语法是不言自明的 Java 代码由一对$符号包装。target_path 子句告诉雪花编译后的 Java 代码使用什么文件名,handler 子句给出调用 UDF 时需要执行的 Java 方法的名称。在雪花中运行这个 DDL 会产生一个“函数添加成功完成”的消息。
我们现在可以从 Domino 工作区(本例中为 JupyterLab)测试该函数:
cur.execute("SELECT ADD(5,2)")
cur.fetchone()[0]
7
让我们定义另一个函数。这个将使用公式 235.215/(1 美国英里)= 235.215 升/100 公里,将英里数转换为升/100 公里。该函数的 DDL 如下所示:
create function l100km(mpg float)
returns double
language java
handler='L100KMFunc.l100km'
target_path='@~/L100KMAddFunc.jar'
as
$$
class L100KMFunc {
public static double l100km(float mpg) {
return (235.214583 / mpg);
}
}
$$;
我们可以使用 AUTOMPG 表中的 MPG 列调用此函数,以获得数据集中最省油的前 5 辆汽车,同时将 MPG 转换为 L/100km。
res = cur.execute("SELECT NAME, ROUND(L100KM(MPG),2) AS \"L/100KM\" FROM AUTOMPG ORDER BY \"L/100KM\" LIMIT 5")
for row in res:
print(row)
('mazda glc', 5.0)
('honda civic 1500 gl', 5.23)
('vw rabbit c (diesel)', 5.35)
('vw pickup', 5.35)
('vw dasher (diesel)', 5.47)
结果集确认该函数是逐行调用的,MPG 到 L/100km 的转换是动态执行的。这是一个相当简单的例子,因为您当然可以在纯 SQL 中进行这种计算,但这里的关键点是,使用这种方法,您可以释放 Java 的全部能力,并即时执行复杂的操作。
现在,让我们针对我们的测试数据实现一个简单的机器学习评分函数。回想一下,Domino 使团队能够使用不同的工具和语言,所以为了让这个例子更加激动人心,假设我们的一个同事使用 R 来拟合针对 AutoMPG 数据的线性模型。该模型解释了 MPG 和马力之间的关系,生成它的 R 代码如下所示:
> head(autompg)
mpg cylinders displacement horsepower weight acceleration model.year origin car.name
1 18 8 307 130 3504 12.0 70 1 chevrolet chevelle malibu
2 15 8 350 165 3693 11.5 70 1 buick skylark 320
3 18 8 318 150 3436 11.0 70 1 plymouth satellite
4 16 8 304 150 3433 12.0 70 1 amc rebel sst
5 17 8 302 140 3449 10.5 70 1 ford torino
6 15 8 429 198 4341 10.0 70 1 ford galaxie 500
> model <- lm(formula=mpg~horsepower, data=autompg)
> summary(model)
Call:
lm(formula = mpg ~ horsepower, data = autompg)
Residuals:
Min 1Q Median 3Q Max
-13.5710 -3.2592 -0.3435 2.7630 16.9240
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 39.935861 0.717499 55.66 <2e-16 ***
horsepower -0.157845 0.006446 -24.49 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 4.906 on 390 degrees of freedom
(6 observations deleted due to missingness)
Multiple R-squared: 0.6059, Adjusted R-squared: 0.6049
F-statistic: 599.7 on 1 and 390 DF, p-value: < 2.2e-16
使用截距和马力系数,我们可以定义以下 UDF 函数:
create function mpgPredict(mpg float)
returns double
language java
handler='ML.mpgPredict'
target_path='@~/ML3.jar'
as
$$
class ML {
public static double mpgPredict(float horsepower) {
float intercept = 39.935861f;
float hp_coeff = -0.157845f;
return intercept + hp_coeff * horsepower;
}
}
$$;
请注意,为了简单起见,我们对系数进行了硬编码,但是我们也可以很容易地从外部文件或另一个表中提取系数,这些表会在每次模型重新训练后更新。一旦预测函数就绪,我们就可以使用它来查看预测与现有数据的匹配程度。
res = cur.execute("SELECT NAME, ROUND(MPGPREDICT(HORSEPOWER),2), MPG FROM AUTOMPG LIMIT 5")
for row in res:
print(row)
('chevrolet chevelle malibu', 19.42, 18)
('buick skylark 320', 13.89, 15)
('plymouth satellite', 16.26, 18)
('amc rebel sst', 16.26, 16)
('ford torino', 17.84, 17)
我们也可以使用 UDF 来记录看不见的数据。例如,我们可以计算丰田 RAV4 - a 车辆的预期 MPG,这不在原始 AutoMPG 数据库中。
cur.execute("SELECT 'TOYOTA RAV4' AS MODEL, ROUND(MPGPREDICT(163),2) AS MPG");
cur.fetchone()
('TOYOTA RAV4', 14.21)
预编译的 UDF
Java UDF 存储在一个 JAR 文件中。雪花自动处理内嵌 UDF 的编译和打包。然而,预编译的 UDF 需要一些额外的前期工作。
JAR 文件的组织遵循标准的 Java 归档惯例。如果不熟悉标准的 JAR 文件结构,可以阅读 Java 官方文档中的打包 JAR 文件中的程序教程。
在很高的层面上,创建自己的预编译 UDF 需要经历的步骤如下:
- 编写 Java 类,其中包含您计划作为 UDF 公开的函数。
- 使用 Java 编译器(javac)将源代码编译成。类文件。
- 打包你的。类文件复制到 JAR 文件中。您可以使用 Java jar 命令。
- 添加一个 manifest 文件,它包含关于 JAR 文件中具体包含什么的元信息。
JAR 文件准备好之后,需要将其复制到雪花中的一个外部或命名的内部阶段,该阶段必须对 UDF 的所有者可读。推荐的方法是使用 PUT 命令,例如:
put
file:///absolute_path_to_the_jar_file/jar_file_name.jar
@~/udf_stage_dir/
auto_compress = false
overwrite = true
;
注意上面的覆盖标志。当 JAR 文件是一些 CI/CD 管道的一部分时(例如,我们正在重新训练一个模型,并按计划将其打包到一个 JAR 文件中),这个选项是很有帮助的,并且它需要被定期替换。如果是这种情况,雪花建议在无法调用函数时进行 UDF 更新。
Java 归档格式支持广泛的功能,包括电子签名、压缩、版本控制、版本一致性实施(封装)等。这带来了额外的好处,如安全性、版本控制和可移植性,但更重要的是,存档允许您将额外的文件与类一起打包。这些可以是预训练模型、向量空间模型、附加 Java 类(例如,定制机器学习算法)等。
摘要
在这篇博文中,我们介绍了 Domino - Snowflake UDF 集成的一些主要优势。Domino 数据科学平台可以与 Snowflake 中的 UDF 接口,使数据科学家能够将它们用作复杂管道中的构建模块(例如用于数据预处理和数据争论),或者用于训练模型和数据评分。这种方法的主要优势在于,它支持访问 Scala 和 Java 等语言的复杂特性,并且消除了在实例和云之间移动数据的需要。
虽然在本文中,我们关注的是单向用例(即从 Domino 调用 UDF),但是双向通信也是完全支持的。人们可以想象雪花中的 UDF 调用模型 API 或 Domino 模型管理器,动态地对传入的数据进行评分,或者在新样本到达数据库时立即执行在线数据漂移检查。
这种类型的自动化使模型能够更快地做出响应,消除由大数据量或计算资源不足导致的可扩展性问题,提高数据科学团队的工作效率,并降低大规模培训和运行模型的成本。
此外,因为访问和创建 UDF 的所有代码都可以驻留在 Domino 中,所以该平台透明地为数据科学团队创建的所有交付物提供了版本控制、可跟踪性和可再现性。这有助于知识发现、移交和法规遵从,并允许数据科学家专注于加速研究和模型部署的工作。
关于多米诺
Domino 的企业 MLOps 平台通过以下方式解决了难以扩展数据科学的问题:
- 支持最广泛的开源和商业工具及基础设施的生态系统。
- 在每个实验的端到端生命周期中提供可重复性和再现性,无论在开发过程中使用了什么工具。
- 通过在单一平台中提供一致、简化的体验,加速从构思到生产的完整端到端生命周期。
- 满足安全性、治理、法规遵从性和协作方面的 IT 要求。
上面概述的整体方法是使 Domino 成为受超过 20%的财富 100 强公司信任的企业 MLOps 平台的关键特征。
关于雪花
Snowflake 提供数据云—一个全球网络,成千上万的组织在其中以近乎无限的规模、并发性和性能移动数据。雪花的数据云平台提供的一些关键功能包括:
- 真正的 SaaS 产品,通过弹性虚拟计算实例和虚拟存储服务提供几乎无限的可扩展性。
- 支持广泛的编程语言,如 Go、Java、.NET,Python,C,Node.js,包括 ANSI SQL 兼容性。
- 支持各种数据结构(例如 CSV、XML、JSON、Parquet 等)。
- 通过 ODBC、JDBC、本地连接器(如 Python、Spark)、第三方 ETL 和 BI 工具集成(如 Informatica、ThoughtSpot 等)实现简单的连接
- 近乎零维护的全托管服务。
在 O’Reilly AI 大会上加速云中的数据科学生命周期
By Rohit Israni, Director Strategic Business Development, AI Programs, Intel Corporation on September 05, 2018 in
感谢 Rohit Israni 贡献了这篇客座博文,最初发布于英特尔人工智能构建者博客。
在内部维护数据科学项目可能具有挑战性。为了使数据科学成为竞争优势,公司需要能够快速开发、测试和交付其数据的高影响力模型,并大规模管理这些模型。此外,大规模部署分析解决方案需要大量计算,并会给基础架构资源带来额外压力。为了在数据科学项目上取得成功,企业需要能够轻松扩展硬件、管理软件环境、跟踪工作、监控资源,以及自动化模型部署和监控。
英特尔 AI Builders 合作伙伴 Domino 数据实验室通过其数据科学平台带来了一种全新的模型管理方法。基于预测分析和人工智能,该平台在各种行业都有实际应用,包括金融服务、制造、零售和医疗保健。该平台允许 Domino 的客户从 Python 的英特尔发行版中获益。
该公司在 2018 年 9 月 4 日至 7 日在旧金山举行的人工智能大会上的演示特别关注加速整个数据科学生命周期,从探索性分析到生产模型管理。它将展示如何扩展硬件、管理软件环境、跟踪工作、监控资源,以及自动化模型部署和监控。
人工智能大会由 O’Reilly 和英特尔共同举办。欲了解完整的会议日程和更多详情,请点击此处。
不能去现场演示吗?了解如何在 Domino 中开发和交付模型。
Jupyter 中的 Python 3 支持
原文:https://www.dominodatalab.com/blog/adding-python-3-to-jupyter
Domino 让您只需在强大的云硬件上点击一下,就可以启动 Jupyter 笔记本(和其他交互式工具)。我们最近增加了对 Python 3 的测试支持,所以你现在可以在 Python 2 或 3 中运行 Jupyter 笔记本:
因此,如果您一直想尝试 Python 3,但不想维护机器上的安装,那么您可以在 Domino 上尝试一下。如果您感兴趣,请联系我们,我们将为您提供该测试版功能。
Python 3 中的新特性
Python 3 包括许多语法改进和其他特性。例如:
- 更好的 unicode 处理(默认情况下所有字符串都是 unicode),这对于 NLP 项目来说很方便
- 函数注释
- 词典释义
- 许多常见的 API 返回迭代器而不是列表,这可以防止 OOM 错误
- 还有更
安装和设置
出于好奇,这里有一个关于我如何在 Jupyter 中让 Python 3 和 Python 2 并行运行的指南。虽然建立一个独立的 Python 3 Jupyter 内核很简单,但同时支持 Python 2 和 Python 3 却比预期的要复杂。我没有找到一个清晰的指南来设置它,所以我想分享我的经验。
安装涉及几个组件:
- Jupyter 需要设置为同时使用 Python 2 和 3。这包括安装一些必备的依赖项,并确保 Jupyter 在文件系统上可以使用两个 Python 版本的 kernelspecs 。
- 因为 Python 3 独立于任何现有的 Python 2 安装,所以有必要建立一个单独的包管理器(pip3)。这用于安装额外的 IPython 依赖项以及一些常见的科学库。
- 最后,安装过程中出现了一些需要清理的错误。
以下是我使用的命令。注释和其他详细信息如下:
apt-get install python3-setuptools python3-dev libzmq-dev
easy_install3 pip
# More dependencies needed to run Python 3 in Jupyter
pip3 install ipython==3.2.1 pyzmq jinja2 tornado jsonschema
# IPython kernelspecs
ipython3 kernelspec install-self
ipython2 kernelspec install-self
# Install some libraries
pip3 install numpy scipy scikit-learn pandas matplotlib
# Bug cleanup:
# Fix Jupyter terminals by switching IPython back to use Python 2
sed -i.bak 's/python3/python/' /usr/local/bin/ipython
# Reset the "default" pip to pip2, if desired
pip2 install --upgrade --force-reinstall pip
# Fix a link broken by python3-dev that led to errors when running R
echo | update-alternatives --config libblas.so.3
# Make sure the local site packages dir exists
mkdir -p ~/.local/lib/python3.4/site-packages
安装注意事项:
-
在运行笔记本的同时,可以用
! pip3 install --user <package==version>
交互添加新的包,通过运行! pip3 freeze
检查哪些包已经安装好了。如果你需要额外的软件包,但是交互式运行时安装不理想,请让我们知道,我们可以帮助你设置一个定制的环境。 -
Kernelspec 安装命令来自于 IPython 文档。
-
在安装了这两个 Python kernelspecs 之后,Jupyter 基本上工作正常,除了终端,它们在会话中被列为“不可用”。我追踪这个 bug 到了一个依赖问题。运行前面的命令后,IPython 由 Python 3 运行:
/usr/local/bin/ipython
的初始 shebang 行读为#!/usr/bin/python3
,Python 3 安装找不到运行 Jupyter 终端所需的模块。与其试图修复这个问题,不如直接告诉 IPython 再次使用 Python 2,用sed
命令编辑初始行为#!/usr/bin/python
。这很有效,终端重新上线。 -
安装 pip3 会导致
pip
命令运行pip3
而不是pip2
。pip2 install --upgrade --force-reinstall pip
命令将pip
恢复到pip2
,这正是我们想要的,这样 Python 2 仍然是“默认”的 Python 版本。 -
update-alternatives --config libblas.so.3
命令修复由apt-get install python3-dev
引入的断开的链接。如果没有这个命令,R 脚本会产生以下错误:Error in dyn.load(file, DLLpath = DLLpath, ...) : unable to load shared object '/usr/lib/R/library/stats/libs/stats.so': /usr/lib/liblapack.so.3: undefined symbol: ATL_chemv During startup - Warning message: package 'stats' in options("defaultPackages") was not found
-
最后一个问题出现了:pip3 的本地安装目录(在这里是
~/.local/lib/python3.4/site-packages/
)不在 Python 3 的sys.path
上。结果是 Python 的site
模块(它应该在 Python 启动时将这个路径添加到sys.path
中)忽略了这个路径,因为它还不存在。提前创建这个目录可以解决这个问题。请注意,运行 Jupyter 的用户必须对该目录具有读/写权限。)
问题、顾虑或只是想测试一下这种环境?联系我们!
解决野生环境中的不可再生性
原文:https://www.dominodatalab.com/blog/addressing-irreproducibility-in-the-wild
这份多米诺数据科学领域笔记提供了在最近的 WiMLDS meetup 上发表的克洛伊·莫尔 的*可复制机器学习模型的要点和节选幻灯片。* Mawer 是 Lineage Logistics 的首席数据科学家,也是西北大学的兼职讲师。特别感谢 Mawer 允许摘录这篇 Domino 数据科学领域笔记中的幻灯片。此处提供全套资料。
介绍
Chloe Mawer 在最近的 WiMLDS meetup 上发表了*“可复制机器学习模型的成分”*演讲。Mawer 的演讲为简化可复制模型的开发和部署提供了实用的见解和最佳实践。这篇文章涵盖了演讲的精华,包括“为什么再现如此困难?》,为什么版本化代码不够,以及 Mawer 的可复制模型模板。如欲了解更多关于模型测试、环境管理和代码对齐的信息,请查看 Mawer 的全互动演示文稿和再现性模板的附加内容。我参加了机器学习会议,并向 Mawer 寻求许可,为这篇博文摘录 Mawer 的工作。非常感谢 Mawer 在这篇文章发表前提供了适当的许可和反馈。
为什么再现性这么难?
虽然 Mawer 目前是 Lineage Logistics 的首席数据科学家,也是西北大学的兼职讲师,但 Mawer 还利用以前的咨询经验来传达不可再现性的含义和“为什么再现性如此困难”的例子。在之前的一个咨询角色中,Mawer 参与了一个项目,在这个项目中,最初构建算法系统的人不再在公司工作,而她的团队本来是要迭代和添加算法系统的。几乎没有文档、评论、背景等。使得复制算法变得不可能。无法理解当前算法的工作原理大大降低了改进算法的能力,使得在不破坏系统的情况下部署任何改进几乎是不可能的。
虽然这不是一个理想的情况,但这是许多研究人员和数据科学家在寻求推进数据科学工作时面临的常见情况。观众对这些棘手问题幻灯片的反应包括窃笑、叹息和用手机拍摄这些幻灯片。Mawer 还重申了这些痛点并不是新的或本地的,而是全球都知道的,并向 Rodey Green 的“ *如何编写不可维护的代码”*致敬。
One of the big problems seen when trying to deploy machine learning models is the inability to reproduce the same predictions as in development. Slide Credit and Image Credit.
Slide Credit and Image Credit.
然后 Mawer 谈到了可再现性是多么困难,因为有许多看似随机的点,可再现性可能会被破坏,而且开发和部署模型的道路是漫长的。
“路漫漫其修远兮”
“The Path is Long” Slide Credit and Image Credit.
路径越长,提供的减轻或破坏再现性的成分和机会就越多。
解决野生环境中的不可再生性
在 Mawer 讲述了与不可再现性相关的痛点之后,Mawer 提供了关于如何解决不可再现性的实用建议,包括“找到每一个随机状态并将其参数化”以及仅仅“版本化代码是不够的”。
Mawer 的交互式“参数和设置”幻灯片已被摘录并重新格式化,以方便阅读。
model:
name: example-model
author: Chloe Mawer
version: AA1
description: Predicts a random result given some arbitrary data inputs as an example of this config file
tags:
- classifier
- housing
dependencies: requirements.txt
load_data:
how: csv
csv:
path: data/sample/boston_house_prices.csv
usecols: [CRIM, ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO, B, LSTAT]
generate_features:
make_categorical:
columns: RAD
RAD:
categories: [1, 2, 3, 5, 4, 8, 6, 7, 24]
one_hot_encode: True
bin_values:
columns: CRIM
quartiles: 2
save_dataset: test/test/boston_house_prices_processed.csv
train_model:
method: xgboost
choose_features:
features_to_use: [ZN, INDUS, CHAS, NOX, RM, AGE, DIS, RAD, TAX, PTRATIO]
get_target:
target: CRIM
split_data:
train_size: 0.5
test_size: 0.25
validate_size: 0.25
random_state: 24
save_split_prefix: test/test/example-boston
params:
max_depth: 100
learning_rate: 50
random_state: 1019
fit:
eval_metric: auc
verbose: True
save_tmo: models/example-boston-crime-prediction.pkl
score_model:
path_to_tmo: models/example-boston-crime-prediction.pkl
predict:
ntree_limit: 0
save_scores: test/true/example-boston-test-scores.csv
evaluate_model:
metrics: [auc, accuracy, logloss]
Mawer 还提到了 YAML 配置文件如何对模型训练和评分有用。将所有可能的配置提取到一个文件中,使它们能够在模型训练时与代码一起被版本化,这是能够再现模型训练和评分管道的主要步骤。像 JSON 一样,YAML 文件可以很容易地作为字典读入 Python,但与 JSON 不同,YAML 文件是人类可读的,允许在一个地方轻松更改配置。此外,从代码中提取所有的配置将在构建模型管道时做出的决策都放在一个地方。如果分散在不同的剧本中,这样的决定会随着时间而被遗忘。它们的集中声明确保了参数化和配置与代码的未来应用保持一致。最后,Mawer 指出,一旦您使您的整个模型训练和评分管道完全可配置,那么在模型开发期间,只需快速更改 YAML 文件来尝试不同的模型、特性、超参数等等,就可以非常容易地进行迭代。
*“Mawer suggests structuring yaml configuration files with the Python script names and function names that the parameters are passed into as the keys. This structure makes it clear how to use them once imported into a Python script.” Slide Credit. *
Mawer 还引用了一些关于数据和特性的见解,包括
关于模型测试、环境管理和代码对齐的其他实用见解可在全互动平台中获得。
可复制模板
Mawer 在演讲中还提到了一个可复制模型模板的可用性。可复制的模型模板摘录如下并重新格式化,以方便阅读。
├── README.md <- You are here
│
├── config <- Directory for yaml configuration files for model training, scoring, etc
│ ├── logging/ <- Configuration of python loggers
│
├── data <- Folder that contains data used or generated. Only the external/ and sample/ subdirectories are tracked by git.
│ ├── archive/ <- Place to put archive data is no longer usabled. Not synced with git.
│ ├── external/ <- External data sources, will be synced with git
│ ├── sample/ <- Sample data used for code development and testing, will be synced with git
│
├── docs <- A default Sphinx project; see sphinx-doc.org for details.
│
├── figures <- Generated graphics and figures to be used in reporting.
│
├── models <- Trained model objects (TMOs), model predictions, and/or model summaries
│ ├── archive <- No longer current models. This directory is included in the .gitignore and is not tracked by git
│
├── notebooks
│ ├── develop <- Current notebooks being used in development.
│ ├── deliver <- Notebooks shared with others.
│ ├── archive <- Develop notebooks no longer being used.
│ ├── template.ipynb <- Template notebook for analysis with useful imports and helper functions.
│
├── src <- Source data for the sybil project
│ ├── archive/ <- No longer current scripts.
│ ├── helpers/ <- Helper scripts used in main src files
│ ├── sql/ <- SQL source code
│ ├── ingest_data.py <- Script for ingesting data from different sources
│ ├── generate_features.py <- Script for cleaning and transforming data and generating features used for use in training and scoring.
│ ├── train_model.py <- Script for training machine learning model(s)
│ ├── score_model.py <- Script for scoring new predictions using a trained model.
│ ├── postprocess.py <- Script for postprocessing predictions and model results
│ ├── evaluate_model.py <- Script for evaluating model performance
│
├── test <- Files necessary for running model tests (see documentation below)
│ ├── true <- Directory containing sources of truth for what results produced in each test should look like
│ ├── test <- Directory where artifacts and results of tests are saved to be compared to the sources of truth. Only .gitkeep in this directory should be synced to Github
│ ├── test.py <- Runs the tests defined in test_config.yml and then compares the produced artifacts/results with those defined as expected in the true/ directory
│ ├── test_config.yml <- Configures the set of tests for comparing artifacts and results. Currently does not include unit testing or other traditional software testing
│
├── run.py <- Simplifies the execution of one or more of the src scripts
├── requirements.txt <- Python package dependencies
结论
寻求真理,讲真话是达美乐的核心价值观之一。多米诺骨牌,包括我自己,通过积极寻找和倾听数据科学领域的人,包括 WiMLDS meetup 的演讲者和与会者,践行这一价值观。我们从积极听取行业意见中收集的问题和见解有助于为我们的平台、产品和服务提供信息。然而,我们也希望通过这篇博文或我们的行业事件来放大和分享研究,从而为关于可再生性的公共讨论做出贡献。再次感谢 Chloe Mawer 允许摘录*“可复制机器学习模型的成分”*。由于这篇文章提供了为什么可再现性很难的精华,以及一些解决不可再现性的实用建议,关于模型测试、环境管理和代码对齐的其他见解可在完整资料中获得。
^(Domino 数据科学领域笔记提供数据科学研究、趋势、技术等亮点,支持数据科学家和数据科学领导者加快工作或职业发展。如果您对本博客系列中涉及的数据科学工作感兴趣,请发送电子邮件至 content(at)dominodatalab(dot)com。)