人工智能艺术辩论:兴奋、恐惧和伦理
原文:https://towardsdatascience.com/the-ai-art-debate-excitement-fear-and-ethics-c04d30f338da
意见
看看围绕人工智能生成的图像及其对艺术家的影响的伦理辩论。
由作者执导的《旅途中》图片。
像许多人一样,我一直在关注人工智能工具在 2022 年的爆炸式发展。中途、稳定扩散、 DALL E 、 ChatGPT 和许多其他工具都是使用机器学习模型(为了简化和 SEO,我称之为“AI ”)的工具,这些模型在大规模数据集上训练,根据人类提供的文本提示、参数或图像的组合来生成独特的图像或文本。
当它运行良好时,感觉就像魔法一样。感觉太容易了。
文化战争
自从 DALL E 和 MidJourney 吸引了主流的注意力,在艺术和技术世界的交汇处就有了一场激烈的辩论。这场辩论主要围绕人工智能生成的图像对工作艺术家的负面影响展开。这场辩论感觉完全两极化,双方的声音在很大程度上互相超越。这感觉就像是“艺术家与科技兄弟”的对决,与去年 NFT 的演讲很相似(有很多重叠的声音)。
并不是所有的“中间派”,但我觉得有点夹在这些阵营中间。我想,这是一种谨慎的乐观主义,带有一大堆警告和担忧。我已经使用 Midjourney 生成了 4000 多张图片,其中一些我很喜欢,许多图片很糟糕,但我也认为目前该行业的许多做法相当粗糙,而且存在问题。
我将尽我所能总结一些我认为有根据并值得深入讨论的观点,同时指出一些我认为没有根据或被误导的观点。这并不是一个详尽的问题列表,我可能会在以后写更多的内容。
什么是艺术?
不知何故,这是开始的最好和最差的地方。试图给艺术下定义是一项有趣的理论工作,具有很大的价值,但我认为达成一个共同的艺术定义是毫无意义的,并且不可避免地以排斥性大于包容性而告终。
我希望我们都能同意,艺术对很多人来说可以是很多东西,而且是最重要的,主观的。两个人对贴在墙上的香蕉是否是“艺术”意见不一,这没什么。
一件艺术品可以在头脑中有一个意图(或者根本没有意图)的情况下创作,然后用另一种观点来解释。它可以是美观的,也可以是丑陋的。它可以是一种劳动密集型的磨练和实践的工艺,也可以是一个短暂的想法的快速草图。它可以是随机性的表现。我不认为某样东西需要有特定的意图,或者很难或很费时才能被认为是艺术。
许多人(肯定不是所有人)似乎承认,人工智能生成的图像在许多情况下可以被视为一种艺术形式,但更有争议的问题是,在这种情况下,谁是艺术家或作者?人类,人工智能,两者都有(但是在什么角色和什么程度上),或者以上都没有?
作者和信用
我不认为自己是艺术家。我是个设计师,这是我谋生的方式。当然,像许多人一样,我以前也创作过我认为是艺术或本质上是艺术的东西。我写过音乐,但不要称自己为音乐家。我拍过照片,但我不称自己为摄影师。我每天都做饭,但我不是厨师。
我用 Midjourney 创作图像,但我不是艺术家。
有一个非常合理的论点是,当涉及到作者和信用时,人工智能生成的图像应该被区别对待。欺骗人们,让他们认为你比实际上更多地参与了某件事情的创造,是不会有任何收获的。
关注我一段时间的读者会知道,我更多地使用生成的图像作为我文章的编辑类型图像,而不是免费的库存照片。我享受这个过程,还有那种乱七八糟的不完美的审美。
我经历了几次迭代,试图找出一种合理、透明、公平的方式来评价这些。在交谈中,我试着用不同的方式和人们谈论这件事,最终根据我使用的语言产生了不同的感受。
- 我创作的一些艺术作品感觉是最卑鄙的。
- “我生成的图像”稍微好一点,但没有上下文仍然不透明。
- 基于我的提示和迭代而生成的中途图像过于机械,谁会这么说?
比如改变你谈论任何事情的方式(比如从说“伙计们”转变为“伙计们”),一开始会觉得奇怪和尴尬,但随着时间的推移会变得越来越自然。
幸运的是,在对话之外,演职员表不需要听起来像对话。
我目前在该上下文中使用的行是:
由作者执导的《旅途中》图片。
以前的一些尝试是“作者的图像,由 Midjourney 生成”,暗示 Midjourney 只是一种工具,就像 3D 艺术家可能会说“作者的图像,在 Zbrush 中雕刻,在 Substance Painter 中纹理化”。我回避了这个问题,因为我坚信这两者根本不等同。艺术指导感觉更像是一个平行的东西,尤其是像“修复”这样的工具,它允许你替换图像的特定部分,并且更细粒度的即时迭代继续发展。
讨论应该继续,人们应该尝试他们觉得好的东西,和不会让其他人觉得被贬低。无论结论是什么,在我看来,目前“由[你的名字]”独自一人是不道德的,不管你对这个领域的热情或怀疑态度如何,都应该予以劝阻。
分门别类
继续这一思路,目前我认为人工智能图像应该在任何展示艺术的网站上有特定的人工智能类别、标签或区域,当然在任何类型的艺术奖项中也是如此。在比赛环境中比较艺术,并决定一件艺术作品比另一件“更好”的想法对我来说有点困惑,但最终它帮助并支持了艺术家。艺术家作为一个群体,对社会有着巨大的、被大大低估的积极影响,这种影响在薪酬或知名度方面没有得到足够的体现。
我们不应该继续围绕那幅在科罗拉多州博览会艺术竞赛中为杰森·艾伦赢得几百美元的中途作品引发的争论。从一个明确的“人工智能艺术”类别开始,并从那里开始。
我们经常对摄影这样做,有时(尽管越来越不常见),对数字艺术也是如此。这样,关心它的人就可以关心它,其余的人就更容易忽略它。
使市场饱和
另一个主要问题是,包含艺术家姓名提示的图像(例如“以格雷格·鲁特科夫斯基的风格”)随后被发布在网络上,并且是可抓取的,从实际的艺术家那里窃取 SEO,并使人们在搜索由真人格雷格·鲁特科夫斯基创作的实际艺术时感到困惑,这可能是许多艺术家的主要收入来源。
“刚刚过了一个月。一年后呢?我可能无法在那里找到我的作品,因为(互联网)将被人工智能艺术淹没。这令人担忧。”——Greg Rutkowski,接受《麻省理工科技评论》采访
不道德的数据使用
在我看来,最大的问题是如何收集和使用源数据的道德问题。目前,许多模型完全或部分使用数据集(如 LAION5B)作为其源数据。LAION 从数十亿张图片和相应的文本描述中创建了巨大的数据集,这些图片和文本描述是由一个名为 Common Crawl 的非营利组织从 alt-text 和 web 链接中收集的。这些数据集的明确意图是用于研究目的,而不是商业应用。
鉴于这些数据集的庞大规模,它们包含了大量有版权的图像,以及属于活着的、正在工作的艺术家(或其他人)的图像。
这些由 Common Crawl 搜集、由 LAION 曝光的图像最初是由各自的作者发布的,具有广泛的预期用途,但可以肯定地说,“训练机器学习模型让自己失业”并不是一个共同的意图。
常见到艺术家暗示生成的艺术是抄袭或窃取他们的作品。这被比作“搜索谷歌图片”并冒充自己的作品。我认为这是一种过于简化、不准确的描述机器学习模型如何生成图像的方式,但这并不特别重要,因为它并不真正影响解决方案。
**我认为人工智能图像唯一真正合乎道德的前进方式是创建一个开放的训练数据集,人们可以主动选择加入。**财务方面需要解决,但最初提交用于训练数据的图像可能会有小额付款,可能会有某种基于明确使用艺术家姓名的提示的版税系统(以及商业作品中使用的任何东西的高得多的版税)?这可以通过某种 CC-BY 类型的许可证来扩展,这种许可证明确用于 AI 训练数据,以某种方式通过图像元数据公开。
也许像这样的系统增加了一个更精确的开放数据集,该数据集排除了来自 Behance、Dribbble、ArtStation、DeviantArt 等来源的数据。,但仍然可以学习诸如“这是人类的样子”,“这是树的样子”之类的东西。
注:ArtStation 最近因没有做足够的工作来保护艺术家的利益而受到艺术家 的攻击 。ArtStation 以“ NoAI ”标记倡议做出了回应,该倡议允许用户选择退出在训练模型中使用他们的作品,但选择退出还不够,社区正在让他们知道这一点。
最后
这个空间正在快速移动。技术进步可能令人兴奋(尤其是那些感觉像魔术一样的),但人们和整个行业可能会在这个过程中受到伤害。在许多情况下,比如从煤制天然气到可再生能源的转变,技术进步在很大程度上是积极的。对抗气候变化的好处与失业的人力成本或行业利润相比是很容易证明的。
不过,这里的情况不一样。被淘汰的人只是艺术家,用机器整体取代艺术家对人类来说是负面的。我们应该考虑如何使用这种技术来增加和增强工具,帮助创造新的美学,但要着眼于以人为中心,保持他们所有的想象力、意图和复杂性不变。
总的来说,我认为人们应该考虑以下几点:
- 让 Midjourney、LAION 和 StabilityAI 这样的公司知道一个替代的、伦理的数据集需要被投资。如果你在这个领域工作,倡导它,建设它。这是一个有待解决的有趣问题。
- 在用于非商业用途时,对人工智能生成的图像进行适当的认证和标记。在这个过程中,不要夸大你的作用。
- 不要提示使用艺术家的名字。句号。
- **互相倾听。**面对批评时要尊重,善意地给予批评。仅仅说“我不认为这里有道德问题”是不够的。这并不总是关于你。如果别人说有道德问题,那是有道理的,你应该考虑听他们的,多读一些。
- **寻找帮助人们从人工智能艺术过渡到传统艺术的方法。**吉他英雄激励了许多人(包括我在内)学习吉他,这是一个帮助人们从人工智能一代过渡到实际技术的机会。解构人工智能图像的美学,什么可行,什么不可行,以及你可能如何使用其他技术来接近相同的图像。
- 支持你喜欢的艺术家。购买印刷品,分享他们的作品,支付佣金。支持概念艺术协会,该协会正在游说帮助保护艺术家免受人工智能技术的侵害。
感谢阅读。如果你对此感兴趣,请考虑订阅剪辑内容,每周撰写关于设计系统、技术、领导力的文章,并直接发送到你的收件箱。
人工智能时刻
原文:https://towardsdatascience.com/the-ai-moment-12761189b87d
为什么人工智能的进步比以往任何时候都更让我们兴奋。
米拉德·法库里安在 Unsplash 上拍摄的照片
随着我在斯坦福大学与各种令人印象深刻的人工智能研究人员相处的时间越来越长,我注意到这些人对自己领域的突破做出反应的方式有些奇怪。他们的脑海中似乎总有一个声音告诉他们永远不要太兴奋。机器学习模型可以做竞技编码?好的。他们能写校样?那很有趣。当我在高中的时候,我经常听说这些里程碑,并对未来充满希望。但当我成为一名圈内人士时,我注意到研究人工智能的人并不真的那么喜欢它。
我想你不能指望任何人对他们花费一生探索和思考的模型的微小改进或修改感到如此兴奋,但我私下怀疑还有别的事情在发生。
自 20 世纪 50 年代以来,人类一直在远离人工智能(AGI)5 年和远离 AGI 100 年之间摇摆不定。引用海明威的话,人工智能的进步是“逐渐地,然后突然地”发生的。有一些新技术改变了我们对待人工智能的方式,我们将它应用于我们能想到的一切,然后我们会被困 10-20 年。冲洗并重复。这已经让位于 20 世纪下半叶的两个历史性的“人工智能冬天”,在这段时间里,很少资源或注意力进入人工智能。
研究人员悄悄地担心,尽管我们近年来取得了巨大的进步,但我们最终会发现自己处于另一个冬天。根据正在取得的进展类型,有理由这样认为。今天,大多数导致强大新模型的新想法实际上都是基于深度学习成为主流之前所做的工作。例如,强化学习和卷积神经网络,这两个当今非常热门的话题,分别是在 20 世纪 60 年代和 80 年代发展起来的。这些方法只有在 1986 年发明的现代硬件、数据和反向传播下才变得可用。因此,从研究的角度来看,很容易看出,与过去 15 年相比,用新资源复兴旧思想将更难产生新的创新。
但我有不同的观点,因为我真的还是那个高中生,一想到能像人类一样思考的计算机,我的心就开始狂跳。我并不认为我们需要进一步创新。我们将被同样的宏观趋势所推动,这些趋势已经将我们带到了现在:更多的数据,更便宜、更快的计算。
在未标记的数据上预先训练模型使模型能够访问指数级的更多信息。随着研究的成熟,预训练方法将让我们更多地利用这些信息。随着互联网扩展到世界上最遥远的角落,数据将不断积累,这种趋势将继续并加速。为了从所有这些数据中保留信息,我们需要大量的参数。要在大量数据上训练大量参数,需要做大量的矩阵乘法。幸运的是,摩尔定律可以说是近代史上最强劲的趋势之一。计算将继续变得更便宜、更容易获得、更快。更多的数据,更多的计算,更好的模型。
我的意思不是说我们明天或在未来 x 年内会有 AGI,或者类似的事情。我只想说,有理由对机器学习模型的成就感到真正兴奋:我们不再需要依赖科学家和爱好者的智慧来期待机器学习的进步,我们所需要依赖的只是使用互联网的人和正在生产的计算机。我们已经进入了一个不可战胜的人工智能的夏天,被类人的一般智能所包围。
*神经网络中注意力的想法是这种趋势的一个非常重要的例外。
如果你喜欢这篇文章,请考虑给 和一个跟随 !
一个小国在全球巨人中的人工智能定位以及人工智能系统与人类的未来互动——蒂博尔·博斯教授深度访谈
引领人工智能(AI)发展和应用的国家将塑造技术的未来,并显著提高其经济竞争力。与此同时,落后者可能会遭受损失。
美国已经成为人工智能的早期领跑者,但中国正在挑战它的领先地位。与此同时,欧盟继续落后,在欧盟国家中,荷兰缺乏研究成果。人工智能研究人员在所有研究人员中的比例远低于平均水平,其对全球人工智能研究的贡献也是如此。然而,2013 年至 2018 年间,荷兰的人工智能出版物增长了 115%,是全球增长最快的国家之一(仅次于美国和日本,分别增长了 151%和 135%)。此外,荷兰的平均引用影响得分为 2.08,是全球人工智能研究质量最高的国家之一(仅次于美国、加拿大和英国,分别为 2.63、2.19 和 2.09)。许多小国面临与荷兰类似的问题,因此可以借鉴荷兰的案例。
在与 Tibor Bosse 教授的采访中,我们评估了荷兰人工智能的现状以及人工智能系统与人类之间的未来互动。Bosse 教授是 NL 人工智能联盟战略团队的成员,该团队旨在通过激励、支持和组织荷兰的人工智能活动来加强荷兰的地位。此外,他是 NWA 路线大数据的名义领导人,也是 BNVKI 的代理主席。在他的研究中,Bosse 教授专注于社交人工智能,即人类和人工智能之间的互动。
【Bosse 教授,荷兰的 AI 玻璃杯是半满还是半空?
你在介绍中已经相当准确地描述了情况。的确,对全球人工智能研究的贡献百分比并没有那么大。但是我们的引用的影响在各种列表和排名中仍然是最高的。此外,玻璃的完整部分也与荷兰的 AI 研究在历史上一直非常强大有关。与许多其他国家不同,人工智能作为一个领域已经存在了 30 多年。如果你看看 BNVKI,我们的协会,我们最近庆祝了 40 岁生日。这表明我们已经活跃了几十年。由于历史悠久,这个领域组织得相对较好。此外,我们对人工智能的哪些分支学科位于哪里有很好的概述,我们知道我们的优势,我们有良好的基础设施,我们有很长一段时间的强大教育。后者是荷兰区别于其他国家的一个显著区别。我们有明确的教育,人工智能不仅仅是计算机科学的一个分支学科,而是独立存在,长期以来在各种排名中得分很高。
原则上,这使我们处于有利地位。然而,发展如此之快,以至于人工智能的定义与 30 年前完全不同。例如,这些投资与美国和中国等其它国家不可同日而语,与它们竞争是艰难的。那是玻璃杯的空的部分。
最终,我是乐观的,所以杯子是半满的。
NL AI 联盟(NLAIC)和策略团队是什么?
NLAIC 是一个大型的公私合作项目,旨在加速和连接荷兰的人工智能发展。它涉及荷兰政府和数百家致力于人工智能发展的公司、知识机构和社会合作伙伴。我们的口号是*‘适合所有人的算法’*,强调让人工智能变得可及的目标。当我们在 2019 年成立时,我们的目标是刺激荷兰的经济增长,并使荷兰成为人工智能强国。最近,NLAIC 向荷兰国家增长基金提交了一份投标,并获得了一大笔预算,用于在从基础研究到应用的整个知识链上投资人工智能。
我们将为未来几年制定的战略与战略团队保持一致。然而,我们的作用只是提供咨询,我们没有决定权。我在战略团队中的角色是代表科学领域,这是我和另外两名代表一起做的。
增长基金分配的资金帮助我们实现目标。然而,这也是我们必须与整个国家分享的钱。所以我的目标是确保研究预算用得其所。
战略团队目前提出了哪些问题?
战略团队就战略、政策、利益相关者管理和投资激励准备等问题提供建议。此外,我们对照其目标评估 NLAIC 活动的进展。我们的许多问题都与金融工具有关,比如对增长基金的竞标。例如,我们重视吸引新人才,这对学术界至关重要。我们必须为“人才外流”提供答案,即学术人才离开荷兰学术界,去国外或行业中获得更好的职位。我们的奖学金计划是一种金融工具,旨在让大学留住或吸引有才华的人工智能研究人员。此外,我们还有欧洲水平的金融工具。除了关注 AI 的技术方面,我们也很看重 AI 的人性一面。因此,最近已向 ELSA(道德法律社会方面)实验室拨款。最后,我们组织活动来联系社会和荷兰公民。
NLAIC 专注于五个构建模块。您能描述一下这些建筑模块以及荷兰的现状吗?
NLAIC 旨在将其活动分为五个主题:人力资本、研究和创新、数据共享、以人为本的人工智能以及创业和扩大规模。这些构件对于社会和经济应用领域的突破性影响至关重要。每个构件都有自己的工作组,参与者在其中应对跨部门的挑战。例如,数据共享工作组旨在打破共享数据的障碍。没有数据,机器学习是不可能的,可用的相关数据量越大,预测价值越好。然而,在荷兰,数据通常被锁起来,主要是出于法律或商业原因。因此,工作组旨在更好地负责任地组织数据共享。同样,其他工作组也试图应对其他相关挑战。
Rathenau 研究所发表了一份报告,比较了不同国家的人工智能优势和重点领域。是什么驱动着一个国家的焦点?
每个国家都不一样。在荷兰,这主要是一种自下而上的方法。传统上,一些大学在某些领域很强,并继续关注。有一些群体一直专注于机器学习,现在已经转向深度学习。其他人有自然语言处理的优势,但代理系统和逻辑也是一些荷兰大学的强项。
总体而言,议程制定机制存在显著差异。在美国,许多创新都是由大型科技公司推动的。而在中国,政府的目标是到 2030 年成为全球人工智能的领导者,并相应地投入资金。相比之下,欧洲没有遵循这两种方法,这或许可以解释为什么我们在过去几年中落后了。欧洲由许多不同的国家组成,这些国家有各自的定位,创造一个共同的战略并不容易。然而,我们的位置让我们能够更专注于人工智能的人性方面。发表的研究主题很大程度上取决于方法是自下而上还是自上而下。由于不同的国家遵循不同的方法,我们也看到了更广泛的出版物。
这些差异是什么?
自下而上的方法通常比自上而下的方法赋予人类价值更多的价值。因此,隐私和透明度等基本问题在这里更为重要。这为面向技术和社会的人工智能研究设定了议程。例如,由于透明度在人工智能中是一个至关重要的问题,我们需要理解算法是如何做出决定的。这种重要性将我们的议程引向“可解释的人工智能”的基础研究和调查人们在什么条件下接受和信任算法答案的社会研究。在美国和中国,这种研究不那么明显。
荷兰的国际人工智能定位在战略团队的决策中起什么作用?
历史上,荷兰一直是 AI 的重要玩家。荷兰大学 40 年来一直在进行强有力的人工智能研究,我们国家有几个优秀的教育人工智能项目和良好的生态系统。然而,由于最近的全球发展和建立国家人工智能战略的延迟,我们正逐渐落后。我们最近有很多人才流失到其他国家,那里的工作条件和薪水有时更有吸引力。因为如果我们过度依赖国外的发展将是非常有害的,我们试图更好地利用机会,在人工智能研究和产业方面为荷兰建立和保持一个强大和独特的地位。
许多报告使用出版物的数量作为一个国家人工智能成功的代表。然而,科学是开放的,我们也可以从国外的出版物中获益。我们真的需要很多出版物吗?
近年来有出版过多的趋势。但是,说到底,质量比数量更重要;论文要看,要有影响。为了更好的质量,我们需要强调数据和算法共享,而不是关注数量。在某种程度上,后者已经在发生了。NWO 和 KNAW 这两个老牌的荷兰研究委员会投入更多的资金来改进系统质量。科学家现在更有可能根据反映影响力的其他因素获得晋升,而不是出版物的数量。
荷兰是全球规划和决策的领导者。怎么会这样
从人工智能技术的角度来看,这是被认为是优势的关键领域之一。几年前,我在负责荷兰人工智能宣言的工作组中,我们在宣言中描绘了荷兰的风景。我们确定的七个优势是代理系统、计算机视觉、信息检索、机器学习、知识表示、自然语言处理以及规划和决策。
荷兰应该专注于一个领域,加强其全球领导者的地位,还是应该分散我们的关注点?
作为“VSNU·肯尼斯塔费尔”(一个联合所有荷兰大学人工智能代表的工作组)的一员,我已经就这种权衡进行了各种讨论。传统上,荷兰遵循基于共识的决策模式,这种文化已经根植于我们的讨论中。在我们的讨论中,很难就一种方法达成一致。
在我看来,专注于一两个关键领域是行不通的。但话虽如此,我们需要专注于某些领域,以获得政府的资助,如果我们朝着这个方向前进,我们将处于更有利的位置。
在战略团队中,不同利益相关者的愿景在多大程度上是一致的?
工业目标并不总是与学术目标一致,但这就是为什么我们有来自所有部门的代表。几个策略团队成员都是大公司的代表,我的目标是守护学术界的利益。然而,即使在学术界,利益也不统一。测试版的、面向技术的人工智能研究人员(历史上拥有该学科)与更面向社会和伦理的人工智能研究人员之间存在持续的“竞争”。对于每一种观点应该给予多大程度的重视,一直存在争论。
你主要关注以人为中心的一面,这种说法正确吗?
我对双方都有经验,这是独一无二的,也可能解释了为什么我被要求扮演这个角色。25 年来,我一直在计算机科学系工作。我经常说,我小时候只对计算机感兴趣,但随着时间的推移,我对人类越来越感兴趣。我在某个时候做了一个转变,现在我在一个社会科学系工作。然而,我的研究仍然是相对技术性的,我专注于人类和智能系统之间的交互,既通过开发新的算法,也通过实验评估它们。
你能举一个利益相关者利益不一致的例子吗?
通常情况下,行业预期的步伐会比学术界和政府更快。后者倾向于在实现新算法之前先测试和信任它们。相比之下,工业政党更注重经济增长。在学术层面,我们讨论面向技术和面向人的研究。
对经济增长的关注是否解释了美国的巨大增长?
事实上,这有很大的不同,我们在欧洲没有这些大型科技公司。
除了重点领域,NLAIC 还促进有益的社会效果。它是怎么做到的?
我们试图创建一个基础设施,将工业层面的发展嵌入到关于社会价值的讨论中,例如数据共享。此外,我们还组织活动来教育和培训人们。因为人工智能即将到来,我们需要人们来处理这些算法。此外,我们希望培训在日常生活中面临人工智能的人,以提高“人工智能素养”。
在你的就职演说中,你提到了社会科学和技术科学之间的协同作用。你能详细说明一下吗?
在很高的层面上,这种说法是人工智能是巨大的,影响着我们日常生活的方方面面。同时,它太复杂了,不能只从一个角度来研究。我们需要专注于开发、改进和扩展算法的技术人员。然而,我们也需要人们理解算法对人的影响,我们如何接受它们,以及它们如何影响我们的生活。
我的目标是在我的研究中连接这两种观点,我专注于社交 AI,它涉及人类和类似人类的智能系统之间的所有社交互动。
你有一个最吸引你的话题或想法吗?
我对拟人化很感兴趣,这是一种给计算机赋予类似人类的属性,而我们知道它们并不具备这些属性的现象。在我的研究中,我从两个角度探讨这一现象。在技术方面,我试图通过处理语音和阅读非语言行为,制造更好的算法,给人以机器人像人的印象。在社会科学方面,我们也需要测试这些新算法的影响。后者为未来的算法提供了输入,创造了技术和人的共同进化。
需要回答哪些领域的问题才能让你满意地结束多年后的学术生涯?
地平线上的点是我们与社交人工智能系统完全自然交互的情况,我们几乎忘记了它们只是人工制品。
从技术角度来说,这意味着我们需要新的算法。我们有算法产生有点像人类的语言或检测面部情绪。但是这些系统很容易被愚弄,在实际应用中实现它们会在某些时候出错。
需要注意的一点是,我们的目标永远不会是完全复制或取代人类。我们可以让互动更顺畅,但仍然承认机器人不是人,有优点和缺点。
如果你不想取代人类,为什么要让它们更自然呢?
我期待这样的智能系统更加有效;如果他们理解你的意思,有一个心理理论,并且理解你的需求,发出命令会更容易。但是他们不应该试图在所有层面上模仿人类。例如,机器人不需要看起来像人类,这可能会引起错误的期望。
社交人工智能系统可以在许多领域帮助我们的日常生活。例如,在医疗保健领域,他们可以从医生那里接管重复性的任务,让医生有时间专注于更复杂的任务。
你认为智能系统可以移情或情绪化吗?
一般来说,移情和情感有几个组成部分。其中一个因素是纯粹的行为因素,比如表达同情。这个组件相对容易达到,机器人甚至可能比人类更好地表达同情。然而,该表达并不意味着机器人有任何感觉。第二个组成部分集中在情绪的经验部分,这是一种主观现象。这个组件要复杂得多,关于这能否在机器中实现,还有一场哲学讨论。我不排除这一选择,但我没有看到这方面有多大进展。因此,我更相信移情和情感智能系统的微弱概念;他们可以学会“理解”用户的问题,并感同身受地表达自己,而无需体验同理心。
那些认为机器人可以在经验层面上拥有同理心和情感的人使用了什么论据?
我的推理可能是简单化了,但它归结为以下几点。
人类有同理心,有情感。
人类只是信息处理系统。
计算机也只是信息处理系统。
因此,人工系统也没有理由不能经历同样的事情。由于经验是一个涌现的过程,从大脑中神经元之间的所有局部相互作用中,情绪的经验涌现出来;一些哲学家也认为这种现象在计算机系统中是可能的。然而,还没有人做到这一点。
我们怎么知道人类有这些感觉;我们只是怀疑我们有,因为我们表达了这些感觉?
事实上,科学方法缺乏正确的工具来客观地衡量这一点。这一切都是基于自省;我们内心感受到这些情绪,并与他人分享。因此,我们假设我们都有。
开发带有体验成分的智能系统会有好处吗?
一个好处是我们可以更好地理解人类的经验和意识。如果我们能够复制这一点,这将是人类的一大突破。它将解开意识之谜。然而,我不能立即想到任何实际的好处。我们的星球上已经有足够多的有意识的生物了。为什么要创造更多?
在你的一篇出版物中,你提到了机器人需求的概念。机器人有需求吗,我们需要考虑吗?
我不认为机器人和人类有相似的生理需求。它所有的需求都是被编程的,机器人不会经历它们。有趣的是,人类有时会考虑机器人的需求,尽管我们知道它们没有任何感觉。例如,人们在与聊天机器人交谈时往往很有礼貌。或者,当人们看机器人被分解的电影时,他们可能仍然对机器人感同身受。问题是我们是否应该这样感同身受。
答案是双重的。在某些情况下,它会阻碍我们。例如,我们可能会错误地认为我们的同伴机器人关心我们,导致不切实际的期望。然而,在一个机器人无处不在的世界里,如果我们有许多我们虐待的机器人,我们可能会开始更糟糕地对待人类。然后,我们可能会变得更加以自我为中心,不再考虑他人的情绪。
面试到此结束。你最后还有什么想说的吗?
在关于人工智能角色的讨论中,我发现有必要注意以下几点。原则上,人工智能是一项非常强大的发明,影响了许多人,带来了许多好事,也可能带来坏事。有必要强调的是,我们应该将其视为人类智能的补充方法,而不是取代人类。我们应该寻找一个社会,在这个社会中,除了人类的智能之外,还可以使用算法来造福他们。
本次采访是代表 BNVKI 比荷卢人工智能协会进行的。我们汇集了来自比利时、荷兰和卢森堡的人工智能研究人员。
阿尔伯塔计划:萨顿的人工智能研究愿景
强化学习专家理查德·萨顿概述了未来五到十年的研究方向
对于任何熟悉强化学习的人来说,很难不知道理查德·萨顿是谁。萨顿&巴尔托教科书被认为是该领域的典范。我总是觉得研究真正的思想领袖的观点非常鼓舞人心。因此,当他们提出一个新的研究愿景时,我准备好去倾听。
今年夏天,Sutton 和他的同事 Bowling 和 Pilarski 概述了人工智能的研究愿景,为他们未来 5 到 10 年的研究承诺设计了蓝图。全文只有 13 页,写得很全面,看看也无妨。
研究愿景的首要主题是达到对智力的全面理解。虽然与直接应用无关,但研究计划的成功完成将意味着人工智能和我们生活的复杂现实之间真正互动的实质性一步。
基础代理
大纲的基础是“智能代理的通用模型”,作者用它来导出他们所谓的“基础代理”:
基本代理有四个组件,每个组件都可以基于状态信号学习:(I)感知,(ii)转换模型,(iii)反应策略和(iv)价值函数。[资料来源:萨顿等人,2022 年
在这种表示中,有四个可以学习的组件:
- 感知:过去经验的再现,塑造观察被感知的方式。本质上,现实世界被转化为决策所需的抽象状态(包含适当的特征)。
- 反应策略:根据状态采取行动。通常,该政策旨在最大化累积奖励,但也可以包含其他目标。
- **价值函数:**将预期的未来回报附加到状态和动作上的函数。价值函数指导反应策略的训练,并且还可以嵌入多种类型的价值。
- 转换模型:基于当前状态和动作预测未来状态的函数。该模型代表了代理对现实世界系统的理解,也可能反映不确定性。
虽然基本代理表示对熟悉强化学习或相邻领域的人来说并不令人震惊,但它确实有一些有趣的含义。
例如,萨顿等人提出,转换模型可以**将选项而不是动作作为输入。**根据终止条件采取行动的机会是金融从业者众所周知的,但也与许多在不确定情况下做出的现实决策有关。
另一个丰富是选择创建策略和价值函数集。传统上,人们会有一个将状态映射到动作的单一函数和测量单一度量的值函数。相反,基本代理表示允许多个策略和值并行存在。这种表现更接近真实生活的复杂性和矛盾性。
研究愿景还深化了计划的概念,利用过渡模型来测试和评估各种场景。作者声明这个过程应该在背景中运行,不妨碍其他元素。同时,在前台中操作的学习过程应该基于最近的事件进行更新,可能由短期记忆支持。
总之,Sutton 等人似乎提倡在 AI 中更丰富的代理表现,更接近现实世界中存在的各种更好的细节和复杂性。由于对这类主题的研究很少,所以可以从基础代理那里获得大量的灵感。
信号处理随时间的变化
照片由 Jorge Ramirez 在 Unsplash 上拍摄
研究愿景将人工智能定义为随时间推移的信号处理。潜在的前提是,我们的基础代理不断地与一个极其复杂的现实世界互动。为了有意义地预测和控制输入信号,智能体必须基于现实的抽象继续学习。
在此背景下,有助于形成研究愿景的四个独特点被提炼出来:
I .使用真实的观察结果
当涉及到用于训练的观察时,许多人工智能模型依赖于大量的微调。专门的训练集,利用人类领域的知识和结合现实的知识是司空见惯的。然而,这种支持可能会妨碍通用性和长期可伸缩性。因此,作者更喜欢简单地使用来自现实的观察结果。这将使学习更具挑战性,但最终对于各种各样的应用程序来说更加稳健。
二。时间一致性
算法经常和时间耍花招,学习效率更高。例如,我们经常在更新之前收集成批的观察数据,一旦价值函数出现收敛就降低学习率,或者对某些类型的奖励赋予不同的权重。萨顿等人鼓励同样对待每个时间点,通常是在新事件到来时直接处理。
一致性是关键。例如,如果我们在稳定的环境中降低学习率,我们也应该允许在观察到不稳定时提高学习率。特别是在随时间变化的环境中,或者在处理元学习应用时,这种对时间更全面的态度有望开花结果。
三。利用计算能力
摩尔定律依然如日中天,计算能力大约每两年翻一番。然而,结果是纯粹的计算能力本身成为代理性能越来越强的决定因素**。想想用于学习计算机游戏的算法,需要数百万次模拟运行来训练大规模神经网络。**
也许自相矛盾的是,计算能力的指数级增长意味着我们应该更小心地利用它,专注于随计算能力而扩展的方法。另一方面,不可扩展的方法,如领域专家和人类标记,应该得到较少的研究关注。
四。多代理环境
许多设置包括多个智能代理。在一个环境中放置多个代理的影响可能具有实质性的影响,因为代理可以响应彼此的决策和源于通信、合作和竞争的信号。因此,代理本身帮助塑造他们的环境。在多人游戏中,这一概念非常明显,但由此产生的非平稳性在不太程式化的问题设置中也非常重要。
多智能体环境的一个吸引人的子领域是智能放大,其中人类的表现通过软件智能体得到增强,反之亦然。在这种共生关系中,从一个代理人那里学到的知识被用来改进另一个代理人的行动和理解。萨顿等人表示,这条研究途径是释放人工智能全部力量的关键途径。
结束语
对于那些真正对具体研究活动感兴趣的人来说,原始文章(见下文)提供了详细的路线图。这些主题不容易浓缩,而且技术细节相当密集,所以我决定在本文中省略一个摘要。
该研究愿景提供了一个有趣的窥视,让我们看到未来十年我们可能期待的人工智能发展,至少是来自加拿大艾伯塔省的发展。尽管对所有讨论的主题都有一些研究,但很明显,在未来几年里还有一些重大的空白需要填补。
以最大化性能和碾压基准的方式为特定问题定制人工智能算法是很诱人的。然而,从研究的角度来看,灌输一些简化(例如,关于时间和观察)是有意义的,以驱动可用于各种复杂问题的鲁棒算法的设计。这一研究愿景似乎是朝着这个方向迈出的深思熟虑的一步。
我个人对研究愿景的看法是,人工智能算法应该:
- 更好的符合真实世界环境的复杂性和特征,以及
- 提供更加通用和健壮的方法来解决各种问题,而无需过多的设计工作。
实现这些目标的具体方法包括在状态(即特性)和时间(即选项)中找到合适的抽象。同时,应确保规划能够有效地执行。结合更丰富的政策和价值观的表征,AI 与现实的差距越来越小。
来源
https://paperswithcode.com/paper/the-alberta-plan-for-ai-research
喜欢这篇文章吗?你可能也会喜欢以下几个:
分析师涉众-请求比喻
原文:https://towardsdatascience.com/the-analyst-stakeholder-request-tropes-c5a3cf747bf0
在过去的 12 年里,我一直是多家公司的分析师,为许多不同的利益相关者工作。在这段时间里,我注意到请求的类型并没有因为公司而发生巨大的变化,而是因为利益相关者。你对每一种类型的回答既能帮助你解决需求,又能让你为未来的要求做好准备……或者让你的生活变得痛苦。我将它们分为 5 个不同的类别:
- GPS:我需要这个信息,但是我问你是因为我不知道从哪里开始找。
- 个人助理 : " 我需要这些信息,我自己也能得到,但是我不能/不想利用我的时间。”
- 收集者::这些信息分散在多个来源,或者没有根据需要进行适当的组织。我需要你去做。
- HAL:“我需要你运行一个诊断分析来检查为什么会发生这种情况/我需要知道我们需要做些什么来解决这个问题/……”
- 解决方法 : " 我可以向其他人请求,但会比您花费更长的时间和/或生成更不全面/有见地的输出。所以我问你。
我认为每个分析师都遇到过他们中的每一个(同样,如果你看到了其他类型,请在评论中告诉我,这样我们就可以做文章的第二部分)。我已经看到,取决于你如何回答每一个问题,你的工作质量以及临时请求的数量都会受到影响(正如罗伯特·易在他的文章中所说的那样。
这就是我如何尝试处理每一个类别(并不总是成功)以及从我所犯的错误中学到的一些东西。
全球定位系统
我需要这些信息,但我问你是因为我不知道从哪里开始找。
照片由 Pexels 的 Kamaji Ogino 拍摄
当您处理以下一项或多项时,这是非常常见的:
- 数据素养低的利益相关者
- 利益相关者准备好角色/工具
- 复杂且对用户不友好的报告工具
通常是相对简单的请求,只需要在正确的位置应用过滤器或者将表格转换成图表(或者反过来)。
人类像任何动物(或自然界的任何东西)一样,倾向于沿着需要较少能量的路径做事。现在向你要数据可能更容易了,但如果这是他们经常遇到的事情或感兴趣的领域,一旦他们知道如何自己做就会更容易(你需要确保这一点)。
如果你们在同一个办公室,安排一次快速通话,甚至请他们到你的办公桌前,这样你就可以向他们展示在哪里可以找到它,资源中还有哪些信息,如果有必要,如何提取并将其转换为 Excel 数据透视表或一些他们觉得使用起来很舒服的工具。
向他们展示后,我会给他们发送一封电子邮件,其中包含资源链接、后续步骤摘要和生成的文档,因此,如果他们再次要求,我会打开电子邮件并按照步骤操作,而不是再次向他们展示(向他们展示按照电子邮件操作可以解决他们的需求)。第三次,我只是把邮件转发给他们,或者查阅邮件。
个人助理
我需要这些信息,我自己也能得到,但是我不能/不想利用我的时间。
这个可能很棘手。我见过很多次来自高级利益相关者的信息,他们正在开会,需要回答一个问题或反对一个信息。其他时候,高级利益相关者也需要当前报告工具中不存在的东西,但他们不能或不想花 20 分钟来处理它。实际上,很多时候这种请求是一种变通方法,而不是 PA。
但是棘手的问题是,当它来自不在开会的同事,或者不是作为求救信号而来的时候(他们不能处理它)。这一次更多的是关于办公室政治,而不是分析。你可以(应该)帮助你的同事,但要确保这样做不会推迟你工作范围内的任务和要求,也不会影响别人对你工作的看法。
关于会议中来自高级利益相关者的请求:他们需要一个快速的回答。有时我们可以直接给他们所需的信息(即使是仪表板上的截图),有时我们可以给他们发送粗略估计的信息(在电子邮件/消息中清楚地说明这是一个估计是很重要的),有时我们需要花几个小时处理请求,因为这不是直截了当的事情。但是对于这种类型的请求,我们需要快速有效地为他们提供解决方案。
一件关键的事情(我已经忘记很多次了)是指定数据的来源和应用的过滤器或条件。这一点很重要,以防有人质疑或想要验证它,也有助于我们在会后的对话中发现它。
如果这种情况经常发生,请利益相关者提前通知你这种类型的会议什么时候会发生,这样你就可以做好准备。
采集者
这些信息分散在多个来源中,或者没有根据需要进行适当的组织。我需要你去做。
当报告工具不适合用户需求时,这是一个非常常见的请求,如果我们拥有或不拥有报告工具,方法会有所不同。
假设我们不拥有报告工具,我们需要做的最重要的事情是了解请求的原因,以及他们打算如何处理答案。这将决定你需要建造的规模。
这可能只是在 excel 上按日期组合两个数据集,这样你就可以将它们绘制在一起并进行比较。在这种情况下,只需通过电子邮件回复:
- 带有所需数据/报告的 excel
- 复制粘贴所请求的表格/图表,以便他们可以在电子邮件中看到
- 我从数据中调出几个例子来强调我所发现的
- 邮件底部的“流程”部分解释了来源、过滤器、查询…
这最后一条非常重要,因为它将帮助你在下次被请求时更快地重建分析(可能是下周、下个月、下个季度或一年后,所以你不能相信你会记得)。
如果相同的请求频繁发生,那么您应该联系相关团队,以确保企业拥有日常运营所需的所有工具。
如果我们拥有报告工具,请按照上述方式提交请求,但也要确保您了解这是一次性请求,还是报告工具未涵盖的业务需求信号。如果是这样,把它的更新添加到你的待办事项列表中。
哈尔
我需要你运行一个诊断分析来检查为什么会发生这种情况/我需要知道我们需要做些什么来解决这个问题/ …
照片由 Yan Krukov 从 Pexels 拍摄
基本上…这是分析师工作最好的部分。这是我们需要找到业务需求答案的地方。有时是通过识别和应用正确的算法,有时是通过重构数据,有时是通过找到正确的可视化。问题有多少,解决方案就有多少。
在这种情况下,有几条规则是成功的关键:
- 确定请求的为什么。有时候问题很清楚。其他的可以是隐蔽的或蒙面的。最终,如果我们不理解为什么提出这一请求,我们将无法给出一个全面的答复。
- 日志&注释。这将取决于工具。如果你使用一个编程环境(它可以是一个笔记本、R Studio 甚至是 PowerQuery ),你可以注释你的代码。你应该去做。好的评论和结构指南将帮助你理解几个月后的工作。如果您使用 Excel,您不能添加注释,但是您可以使用一个选项卡来指定源、流程、结构…
- 用“ 什么,所以什么,现在什么 ”的心态来架构你的反应。斯蒂芬·拉特克利夫写的文章不仅是可视化的黄金法则,也是任何分析练习的黄金法则。在发送之前,一定要检查你是否回答了 3 个问题。
- 始终通过电子邮件发送,并附上类似推特的分析总结。即使你在会议上或通过聊天发送一个链接(或一个文件)来展示它,也要发送一封包含分析结论和结果的简短标题的电子邮件。
- 在您的答案中包含一张方法论幻灯片或部分内容。与之前的请求一样,在许多情况下,你的答案会受到质疑(有人会想知道你是如何得出这个结论的),或者你(或其他人)将来不得不重复这个练习。包括方法论(即使是非常高的水平)将有助于重复它。因为它包含在发送到的电子邮件中,所以它将与结果一起被引用。
变通办法
我可以向其他人请求,但是会比你花费更长的时间和/或产生更少的全面/深刻的输出。所以我问你。
来自 Pexels 的 Andrea Piacquadio 的照片
这也是一个棘手的问题,在许多情况下,这将涉及更多的办公室政治,而不是实际的分析师工作。
您可以将它们分为两大类:数据请求和解决方案请求。它可以被要求给你,要么是因为利益相关者不知道这不是你的主要工作,要么是因为利益相关者比所有者更信任你。
在这两种情况下,始终确保涉众意识到这件事应该由 X (团队或个人)来完成。
当缺乏对任务所有者的了解时,尝试在他们和请求者之间进行调解。当是因为信任的时候,那么我只是陈述观点(在传递答案的时候)来明确这是别人的工作。
关于请求本身,它可能属于前面提到的 4 种类型中的任何一种。主要区别在于,当请求不是临时的,并且开始按时一致时,联系工具所有者并解释业务和所提供的工具之间存在不匹配是一种好的做法,就像“Gatherer”请求一样。然后将您提供的内容作为概念验证,以在解决方案中进行评估和实施。
在任何一种情况下,都有两件重要的事情需要记住:请求的紧迫性和背后真正的业务需求。不了解这两点,你将无法帮助你的利益相关者。
你怎么想呢?我是否错过了应该包含在列表中的请求类型?你有其他我们都能从中受益的最佳实践吗?
分析师的困境——数据太多,时间太少
原文:https://towardsdatascience.com/the-analysts-dilemma-too-much-data-too-little-time-9b8774f74e20
如何通过增强分析解决这个问题
对于数字优先的企业来说,观察和了解其客户和业务的唯一方式是通过数据。有人会认为,有了公司手头的丰富数据,数据驱动的决策就会变得简单。但是数据不仅在大小上增加了,而且在复杂性上也增加了。如今,公司收集了许多关于雇佣、销售、渠道等方面的数据点。因此,使用传统的 BI 工具,分析很快就会变成一项令人望而生畏且毫无结果的任务。好消息是,也有更简单的工具和过程来促进数据转换和可视化。然而,这些增强分析工具/方法(也称为机器学习驱动的诊断分析)的采用水平仍然很低。
为什么您应该关注增强分析?
我们生产和积累数据的方式以及人类注意力的局限性给分析师造成了一个巨大的困境——数据太多,时间太少。为了从数据中创造价值和业务影响,团队需要以业务的速度提供全面的可操作的见解。然而,考虑到新的环境和遗留的 BI 工具,大多数团队最终会在以下两者之间进行权衡:
- 速度——没有足够快地获得答案以做出有效和及时的决策
- 全面性 —错过了洞察力,因为他们只是触及表面,并在粒度级别查看数据。
rawpixel.com 在 Freepik 上的图片
结果,可诉性受到损害。收集的答案不是真正的见解,或者这些见解没有被发现得足够快,不足以推动业务行动。
为了更具体地说明这一点,让我们仔细看看当前的分析挑战:
- 有限的人类注意力
我经常听到这些:
“有如此多的数据和指标,我们不可能全部监控”。
“我每天必须筛选 15 个仪表板,以评估业务是否照常”
“我们需要花几天时间来检查我们的工具,并以一种全面的方式回答为什么”
使用 memegenerator 创建的视觉效果
数据存储和转换能力不再是瓶颈。然而,我们一直在使用相同的商业智能界面——仪表板。正如*司马贺所说,当前的限制是人类的注意力 :*
“在一个信息丰富的世界里,信息的丰富意味着其他东西的匮乏:信息所消耗的东西的匮乏。信息消耗的东西相当明显:信息接收者的注意力。因此,大量的信息造成了注意力的匮乏,需要在可能消耗注意力的过多信息源中有效地分配注意力”
由于仪表板无法将我们的注意力引向最重要的地方,许多团队只分析一部分可用数据,这是最常见的不良分析实践之一(阅读文章以找出其他 5 个)。
2。快速变化的环境
商业变化比以往任何时候都快。因此,指标变化的速度超过了我们解释为什么使用传统的基于仪表板的工作流的能力。与此同时,公司需要采用敏捷决策来保持竞争优势。
正如 Dave Girouard 所说:
“速度是商业中的终极武器。在其他条件相同的情况下,任何市场中最快的公司都会胜出。”
为什么仪表板不能解决分析师的困境
仪表板非常适合描述性分析(即了解发生了什么)和指标监控。它们还支持高层次的探索,以确定一段时间内的主要趋势。然而,它们在诊断分析方面存在不足(即,为什么会发生)。
错过的机会
由于基于仪表板的工作流,企业错过了机会,因为决策是:
- 反应型— 当事情发生变化时,业务团队会要求数据团队去调查或者构建专门的仪表盘。团队对变化做出反应。
- 缓慢 —数据和业务团队之间的票证循环使得诊断分析非常缓慢。此外,在仪表板中执行根本原因分析非常耗时。
- 消息不灵通 —团队通常只对少数场景进行表面测试,忽略了大部分场景,因为仪表盘不能进行全面的根本原因分析。
人工智能和 ML 的作用
机器擅长执行重复的任务和大规模的计算。事实上,在许多领域,人工智能不再被视为与工人竞争的一种方式,而是给他们增压。
机器可以轻松地实时分析数百万个假设,消除重复的切片和切块工作,让团队等待洞察力。通过运行统计测试并带来以影响为中心的视图,AI 和 ML 可以消除人类的偏见,并将人类的注意力指向相关的东西。
Kausa 的图片——机器可以测试这些组合,并过滤掉相关的内容
在下面的例子中,增强分析可以显示德国的一个特定营销活动(跨越数百个)正在推动年轻客户在 AOV 的显著增长。用手动的方式找到这些洞见就像大海捞针。
Kausa 拍摄的图像——碰撞对驾驶员的影响
然而,机器没有上下文来解释数据,将点与业务中正在发生的事情联系起来,并分享见解。谁能弥合这一差距?人类。他们能够查看相关信息,筛选相关信息,并将这些信息联系起来,推动行动。
人在回路中的主动分析
大多数数据科学家高估了 AI 和 ML 的能力,低估了上下文和领域专业知识的重要性。
机器可以进行统计测试,并在几秒钟内计算出许多数字。然而,他们(还)不能解释结果并将这些点与业务中发生的事情联系起来(例如,采取的行动、季节性、外部因素等)。人类应该决定关注哪些见解,有效地沟通它们,并推动行动以完成最后一英里的分析。
你站在哪一边?
根据具体的业务用例,增强分析有多种应用和优势。这些可以基于两个关键维度来划分:
- 速度 —环境的变化有多快,决策的频率有多高。例如,绩效营销通常变化非常快,因为营销经理几乎每天都要采取行动来调整活动/投标和优化营销支出。另一方面,产品功能决策通常很少,数据分析可能需要更长时间。
- 复杂度 —相关维度和相关度量的数量。一些用例本质上非常复杂,因为它们包含大量的相关维度和相关指标。例如,考虑到存储的大量事件,游戏内优化涉及非常广泛和复杂的数据集。另一方面,一个营销经理只在一个特定的渠道和国家开展几个活动,管理的复杂性很小。
基于这些元素,人们可以将用例分组到下面的矩阵中,根据用传统方法处理它们的感觉来命名。
用例矩阵—由作者开发
1)毫不费力
这些用例相对来说是琐碎的(即,少量的相关维度和相关度量)。团队处理低水平的复杂性,并有大量的时间进行数据分析。
一个例子可能是一个小的电子商务公司在一个地区经营,并运行一对夫妇的营销活动。每月或每季度都会采取行动,这是一个缓慢移动的市场。
最有可能的是,传统的 BI 工具对于这种低复杂性和缓慢的业务动态来说已经足够了,而不会让团队感到紧张。
2)落后运行
这些用例变化非常快,敏捷性是关键。团队需要每天或每周做出决策。因此,利益相关者需要快速全面的洞察力。
我非常熟悉的一个典型用例是效果营销/用户获取。通常,小团队会在不同的国家、渠道、媒体来源和平台上开展许多活动,以各种信息和创意瞄准多个受众。他们试图通过快速识别哪些有效,哪些无效来优化 roa(广告支出的回报)。
*应用:*增强分析平台可以测试数据中的每一个假设,并指出哪些是最重要的子群体。这使得团队能够快速确定是什么在推动发展,然后通过查看相关指标(例如,美国 Vungle 的 iOS 活动中的 CPI 增长)来了解原因。
*结果:*营销活动的表现在几分钟内就能被了解,而不是几小时或几天,节省下来的时间被重新分配到创造性和战略性工作中。
3)一分耕耘一分收获
这些用例变化非常快,非常复杂。团队需要每天或每周做出决策。他们压力很大,因为同时要测试许多潜在的相关维度和相关指标。使用传统方法,他们经常处于救火模式,需要花费大量时间来获得真正的见解,但他们的工作通常不会受到重视,因为分析需要太长时间。这个桶对应于最困难的用例,例如利用游戏数据来塑造功能、推动参与度和保持度,或者平衡游戏经济。
应用:这个群体不能在速度和全面性之间妥协。他们实际上可以充分利用自动化。他们可以使用增强的分析在几分钟内确定要深入的地方,并以主动的方式发现潜在的机会。
*结果:*随着探索性分析揭示何处寻找,并确保团队以业务的速度获得可操作的见解,局面将会扭转。他们将从一个几乎被请求困扰的状态,转变为可信任的顾问,预测业务团队的关注点。
4)高风险
这些用例非常复杂,需要分析大量数据点和交互,并将其与重大决策联系起来。
一个潜在的用例可能是网络分析或支持游戏中的产品开发。虽然由于执行时间的原因,你不想每天对你的网站或游戏关卡进行更改,但你所做的更改对业务绩效至关重要。在团队做出这些决定之前,需要收集包含大量变量的非常复杂的数据。与“没有付出就没有收获”的用例相比,从事这些用例的团队由于速度较慢而有了更多的喘息空间,但是由于高风险,他们仍然承受着很大的压力。由于数据的复杂性,即使速度较慢,他们也只能测试通常的嫌疑人,将真正的机会发现留给运气。
*应用:*增强分析平台使团队能够通过组合多个来源来利用每个数据点,从而发现可操作的见解。更快地完成这种分析,团队将有时间超越峰值和下降值,还可以研究有助于制定战略的有趣见解。
*成果:*精细且可操作的洞察将带来高价值的决策和改进的指标。通过研究每一个场景,不让任何机会被浪费,团队将更有信心告知这些关键决策,并将在决策桌上获得一席之地。
增强分析是解决方案
增强分析将技术(如机器学习)、流程和人结合在一起,帮助人类利用机器规模的速度和能力,同时结合自己的流程和背景,以更快的速度和规模做出更好的决策。这是缩小诊断分析差距的方法。
—
想法?伸出手去 若昂索萨局长成长处 考萨 。敬请关注更多关于如何确定诊断分析和增加数据价值的帖子。
数据产品的剖析
原文:https://towardsdatascience.com/the-anatomy-of-a-data-product-d3140f068311
数据产品是企业数据网的基础构建块。但是,数据产品到底是什么,它们是如何工作的,如何识别它们,以及如何快速构建它们?
让数据易于查找、共享、使用和管理
我根据数据产品为组织提供的价值来考虑数据产品:数据产品(以及它们在其中运行的数据网格)使数据易于查找、消费、共享和治理。为了实现这一价值,作为从业者,我们的工作是使数据产品易于构建、部署、保护和管理。
在本文中,我将回答两个关键问题:
- 数据产品是如何设计的,它们如何工作以使数据易于查找、消费、共享和管理?
- 为了使数据产品易于构建、部署、保护和管理,需要建立哪些功能、API 和生命周期?
简而言之,如果您能够回答这些问题,那么,首先,您将能够解释为什么数据产品是您的数据网格之旅的基础,其次,您将了解在您的企业数据网格中加速采用和构建数据产品所必需的能力。
在开始之前,本文假设您对数据网格有较高的理解。如果您需要一些关于数据网格的背景信息,这里有一些很棒的文章可供选择:这里的(模式)、这里的(架构)、这里的(原则)和这里的(经验教训)。对于感兴趣的读者,全套数据网格模式可从这里和这里获得。
数据产品=数据领域+产品思维
Zhamak Dehghani 在她精彩的书《数据网格,大规模交付数据驱动的价值》中说,数据产品是数据网格中的“架构量子”。他们是“可以独立部署和管理的最小的架构师单元。”她接着说,数据产品是“可发现的、可理解的、可信赖的、可寻址的、可互操作的、可组合的、安全的、自然可访问的,并且本身就有价值”。
我可以提供一个补充定义:数据产品是“数据领域”和“产品思维”的结合。
图 1,数据产品=数据领域+产品思维
让我们从“产品思维”开始解开这个谜团。我喜欢《哈佛商业评论》最近的一篇文章中的一些见解:首先,一个产品集合了一个组织的生产能力来“传递和获取价值”。第二,有一个“购买和使用该产品的最终客户”。最后,一个产品有一个所有者和团队,他们创建一个长期计划,以确保“产品可以不断改进,使它们更成功”,由一个专注于“结果而不是产出”的团队交付。
换句话说,产品思维意味着确保您的产品满足特定的业务需求,并提供一些切实的价值,具有长期的时间范围,并有一个明确和授权的所有者,不仅符合企业的利益,也符合客户的利益。
不幸的是,定义“数据域”并不简单,因为这个术语在大型企业中往往非常模糊。对于首席数据官来说,治理、监管和隐私是导致粗粒度域的主要关注点:例如,所有客户而不是当前客户或加拿大客户。
类似地,数据架构师可能会将客户视为“团体”领域的子集,包括当前客户和潜在客户。并且应用程序开发者可以将客户视为链接客户账户和交易的唯一标识符。
出于本文的目的,我将数据域定义为一组可识别的、真实的、相关的数据,这些数据得到一致的管理,并且具有一定的质量和准确性。
那么,现在让我们结合这些想法,创建一个数据产品的实际定义。数据产品具有/是:
- 明确界限,建立一套可识别的相关数据
- 授权所有者,提供使数据变得有价值和可信所需的组织资源和决策,并提供产品发展的长期观点
- 消费者和生产者生态系统的一部分,它要求数据的互操作性、一致性和质量,以便为企业提供价值
- 通过平台实现,使数据可被发现、可寻址、可访问和可互操作
- 发布元数据,实现发现和自助服务,同时使数据可理解
- 联合治理,认识到本地自治在实施企业政策和确保数据安全方面的力量
数据产品的架构
有了这个定义,让我们来探索数据产品的架构。
图 2,数据产品的架构
数据产品架构师需要具备以下要素:
- 可互操作:可互操作的接口——查询以及 API、管道、文件和事件——可用于满足消费和接收需求。通常实现为 API 的附加接口也可用于观察、操作、保护和管理数据产品。每个接口都有一个契约(例如,API 使用 OpenAPI 规范)来形式化交互。
- 有界:数据产品存储任何类型的数据,有明确定义的边界和所有者;虽然分析数据是一种主要的使用情形,但是运营数据和参与数据也可以在数据产品中进行管理。
- 自我感知:自动捕捉自身的变化和信息;所有数据产品变更都可以被捕获,并作为数据产品中的“事件”分发给其他数据产品或整个企业中感兴趣的各方。
- **可发现:**每个数据产品都包含其自己的“注册表”,该注册表发布其数据产品元数据、所有权信息、策略和任何其他支持行为;数据产品注册中心是开发人员、数据科学家和数据分析师查找、使用、共享和管理由特定数据产品管理的数据的“一站式商店”。它也是特定于该数据产品的行为的切入点,支持复杂的交互,允许用户请求访问数据,或“所有者”创建新的数据产品。
- 安全:数据产品确保所有静态和动态数据的安全;我们的目标是确保所有数据产品在“零信任”容器/环境中运行。
- 历史和时间:使用数据产品对数据状态或异常的更改被捕获并在一个不可变的日志中管理,以支持联合治理、安全问题诊断,并(当数据状态更改被聚集时)提供数据沿袭。
- 可共享的:一个数据产品有“端口”,允许该数据产品管理的数据被摄取或消费。信息和事件(例如,数据更改或 API 调用)可以使用批量管道或在数据产品域内、数据产品之间以及使用健壮、可靠和有弹性的主干网在整个组织内进行接近实时的通信。
数据产品互操作接口:核心数据产品使能器
当我们想到可互操作的接口时,首先想到的有两个:将数据接收到数据产品中的接口(管道、API 等),以及用于消费数据产品中的数据的查询。
然而,在大型企业中,可互操作的接口有几个期望(在某些情况下是强制性的要求):
- 正式合同:每一条摄取或消费路径——管道、查询、API 或事件——都应该由正式的公开合同来定义。在某些情况下,契约将特定于所使用的工具(DBT 等),但在其他情况下——API 或事件——诸如 OpenAPI 和 JSON 模式之类的正式规范是常见的。
- 正式版本化:契约应该被版本化,从而允许向后兼容。现在,公平地说,在只有少数参与者共享数据的小型环境中,这可能并不重要。然而,在数据被广泛共享的大型企业中,确保上游系统改变数据格式时下游系统不会阻塞是至关重要的。
- 形式安全:这很棘手——每种工具可能提供不同的安全方法,更糟糕的是,有些工具可能没有健壮或完整的安全模型。尽管如此,这并没有否定保护生产者和消费者接口的需要——相反,它只是使这变得更加困难。
图 3,数据产品接口
虽然生产者和消费者接口很重要,但是我们不应该忽视接口的本质,即支持发现、可观察性和可管理性。事实上,大多数这些接口都是作为 API 实现的,这意味着您可以利用 OpenAPI 规范提供的功能:
- 正式契约 : OpenAPI 和 AsyncAPI 规范提供了文档完善、经过实战检验的规范,作为正式的同步/异步契约在企业内部使用。
- 正式版本化 : OpenAPI 规范允许一种灵活的版本化 API 的方法,以便随着时间的推移优雅地管理合同变更。
- 形式安全 : OpenAPI 规范提供了一种健壮的、易于理解的、有良好文档记录的方法来定义安全模式,这些模式定义了直接映射到角色的“作用域”;通过一点尽职调查,这些范围可以使用 OAUTH2(一种常见的安全方法)实现,并连接到企业的身份记录簿。
数据产品价值链
数据产品的价值随着其在企业中的使用成比例增加。在最初阶段,数据产品(在数据网格中)是可发现的、可寻址的、可互操作的、自描述的、可信任的和安全的。数据网格的创始人 Zhamak Dehghani 认为,这些是数据产品的基本特征,构成了数据产品提供的所有后续价值的组成部分。
有了这些基本属性,就可以开始在企业中使用数据产品了。如果设计得好,那么数据产品现在可以使数据易于查找、使用、共享和管理。随着数据更容易、更频繁地被消费和共享,新发现的敏捷性和速度随之而来。凭借这种灵活性和速度实现真正的商业价值:
- 更快更好的洞察力,这是创造卓越客户体验或快速应对不断变化的市场需求的关键。
- 缩短上市时间,尤其是对于严重依赖数据的终端消费产品。
- 降低交付成本,因为速度和灵活性缩短了交付持续时间。
图 4,数据产品价值链
但是,如何快速、一致、安全地交付数据产品呢?这就是“数据产品工厂”的由来。
数据产品工厂建立可重复的步骤来制造数据产品:
- 易于构建,通过提供简化数据产品构建的模板;这些模板生成的微服务/API 具有内置的可发现性(“/discover”端点)和可观察性(“/observe”、“/usage”、“/logs”和“/alerts”端点。
- 易于保护,通过提供对前述模板的扩展,为每个 API/微服务启用基于 OAUTH2 的安全性;经过更多的尽职调查,这些模板还可以针对我们的数据产品 APIs 微服务及其数据的“零信任”运行时环境。
- 易于部署,通过为上述模板提供扩展,将 APIs 微服务(如果需要,还包括数据)生成到“容器”(例如 Docker)或 Kubernetes Pod 中,从而可以轻松地将数据产品部署到内部或云环境中,并相对容易地包含在 DevSecOps 管道中。
- 易于管理,通过将生成的 APIs 微服务(例如“/logs”和“/alerts”端点)挂接到企业管理和监控工具中。
数据产品识别
现在,我们可以看到为什么数据产品在我们的数据网格之旅中如此重要。我们还看到了如何利用我们的工厂加快数据产品的交付。
图 5,数据产品标识
因此,显然数据产品很有意义!但是我们如何识别它们呢?幸运的是,有很多提示可以帮助我们在企业中找到数据产品:
- 康威定律:将康威定律(换句话说,您的系统和数据将遵循您的组织结构)应用于数据产品,意味着所有权转移到与组织单位(业务线等)密切相关的团队,这些团队对数据有深刻的了解,并直接负责交付数据的结果,因此拥有决策权和资金权。
- CDO 数据域:数据域图(企业或集团)识别对企业有重要价值的业务实体。这些实体提供了可以识别候选数据产品的“提示”。但是,请注意,在许多情况下,企业域可能需要细分为更细粒度的域,以映射到数据产品。
- 业务架构:业务架构(企业或团体)识别重要的业务能力。这些功能通常很容易转化为数据域,就像 CDO 域一样,提供可以识别候选数据产品的“提示”。同样,企业域可能需要细分为更细粒度的域,以映射到数据产品。
- 行业/商业模型:基于数十年经验构建的商业模型,识别特定行业的核心实体。在金融服务领域,有一些成熟的商业模型,包括来自 BIAN 和 Teradata 的模型(FSLDM,金融服务逻辑数据模型)。
但是有一个经验教训是我不能不分享的:粒度很重要!所谓的企业数据域——例如:“企业客户端”——粒度太粗,不适合数据产品,因此很难定义数据边界和所有者。更细粒度的数据边界更好地映射到“所有者”,从而映射到数据产品(“英国的商业贷款客户”)。
数据网格:数据产品的生态系统
没有任何数据产品是孤立的。相反,所有的数据产品都是生态系统的一部分,并在生态系统中运行。我们称这个生态系统为“数据网”。
图 6,数据网格:数据产品的生态系统
通过这个简单的观察,我们现在可以将几个简单而具体的职责委托给企业数据网格。
- 数据网格概念的首席预言家:数据网格首先是一个概念——营销信息、执行命令、企业数据之旅的分界——其主要目的是描述和传达将数据产品绑定到生态系统的组织结构和逻辑架构抽象。
- 数据产品可发现性的代理 : Data Mesh 是“企业数据产品注册中心”的所有者,使数据产品易于查找、消费、共享和管理。
- 数据产品协议的维护者:数据网格建立了数据产品内部、数据产品之间以及与更广泛的组织之间共享数据的协议。因此,成为企业公共通信、管道和/或事件流主干中的关键消费者和/或利益相关者。
总结想法
在本文中,我讨论了数据产品是如何使数据易于查找、使用、共享和管理的。我还介绍了“数据产品工厂”,它使数据产品易于构建、部署、保护和管理。
我希望通过这篇文章的这些见解,首先,您将能够解释为什么数据产品是您的数据网格之旅的基础;其次,您将了解在您的企业数据网格中加速采用和构建数据产品所必需的能力。
除非另有说明,本文中的所有图片均由 Eric Broda(本文作者)创作。图像中使用的所有图标都是普通的 PowerPoint 图标和/或不受版权保护。
本文表达的观点仅代表我个人,不一定代表我的客户的观点。
剖析数据科学用例
原文:https://towardsdatascience.com/the-anatomy-of-a-data-science-use-case-4fba716eeb5a
在编写任何代码之前,您必须在用例中定义 4 个组件
Joyce McCown 在 Unsplash 上的照片
您已经准备好为您的公司实现定义的用例。项目启动时,您开始收集数据,应用必要的数据清理和争论,继续训练和微调模型,不断重复,直到达到 92%的准确率。太好了!几周后,好消息是,您的模型最终部署到生产中。然而,三个月后,您接到业务部门的电话,抱怨该模型没有增加任何业务价值…一个准确率为 92%的模型怎么会提供零业务价值呢?
听起来很熟悉?您会惊讶地发现这种情况在企业中发生了多少次。Gartner 估计 “到 2022 年,只有 20%的分析洞察力将带来业务成果”[1] 。你试着深入分析并排除故障,从技术角度来看,一切都很完美。那么,怎么了?
我在实践中看到的数据科学项目失败的最常见原因是业务和数据科学团队之间的翻译失误。我们都知道我们需要把商业放在第一位,但这说起来容易做起来难。数据科学家通常是喜欢数学和算法的技术人员,但不一定具有行业/领域技能,或者有时没有付出足够的努力来正确理解和定义业务用例。我非常相信麦肯锡最近创造的“分析翻译”这个角色。我强烈建议你阅读这个角色的真正含义以及需要的技能。到 2026 年,麦肯锡全球研究所 估计 仅美国对翻译的需求就可能达到两到四百万。
每个人都会同意,首先必须正确定义业务用例。这到底意味着什么?用例分析是什么样子的?在开始实施之前,您需要收集哪些关键信息?我相信用例定义必须包括这四个部分:业务问题、现状场景、未来场景和技术解决方案。我将在下面更详细地描述这些组件。为了更好地解释这些概念,我将挑选一个经典的用例:“客户流失”。
数据科学用例剖析—图片由作者提供
1-业务问题
第一部分是最关键的一部分,因为它指导着整个过程的其余部分。你想解决的业务问题是什么?您需要定义以下内容:
- **商业背景。**首先,也是最重要的一点,您需要了解此使用案例的关键触发因素或采取行动的令人信服的理由。它如何与整体业务战略保持一致?它是由最近的特定业务事件或决策触发的吗?它是更大的人工智能计划或数字化转型计划的一部分吗?
——**商业挑战。**你正面临的业务挑战是什么?尽量具体一点。在我们的客户流失示例中,您需要回答这样的问题:目标是预测谁会流失吗?他们什么时候会搅动?他们为什么要搅拌?如何留住他们?它是否针对特定的客户群?你如何定义客户流失?在哪些产品上?
——**目标用户。**哪种业务功能和用户将会使用您的模式并从中受益?你需要有一份联系人、角色等的清单。最重要的是,从业务角度来看,有一位焦点人物将成为您的支持者/赞助商。在我们的例子中,它可能是诸如保留专家、活动经理、呼叫中心经理、营销专家、CRM 主管等角色。
2- 现状场景
第二部分是了解企业当前用来应对既定挑战的现有方法。
**当前状态流程。**当前解决这一挑战的流程是什么?你的目标用户完成相关任务的不同步骤是什么?在我们的示例中,您可以问这样的问题:营销团队目前如何设计和执行保留活动?如何选择目标列表?这个过程需要多长时间?
**什么工作做得好。**询问什么工作得好是一个很好的做法,换句话说,当前流程中哪些部分是业务用户感到舒服并且会抵制改变的。在我们的示例中,您可能会听到诸如白盒方法、完全控制选择哪些客户、针对给定场景灵活定制活动等答案。
**有哪些可以改进的地方。**当前流程中有哪些痛点?在这里,你将发现改善现有状况的机会,并证明你所做贡献的附加值。对于我们的客户流失用例,痛点可能是回复率低,每月流失率没有显著下降,手动流程来设计活动。
3- 未来情景
**未来状态流程。**一旦我们解决了业务用户的痛点,他们会如何看待现有流程的未来?它可以通过自动化一些任务来提高运营效率,例如建立目标客户列表、确定下一个最佳报价以留住客户等。
**模特消费。**必须向业务用户明确设定期望,即他们应该从模型中获得什么样的输出,以及他们将如何使用它。模型期望提供或集成的应用程序是什么?用户需要这些输出的频率如何,例如每月、每周还是每天?例如,一个保留团队可能期望有一个潜在客户的月度目标列表,包括客户 id、客户流失率、主要影响因素、价值细分等。
**成功的标准。**未来情景的预期优势是什么?通常,KPI 在某种程度上与增加收入或客户满意度、提高运营效率或降低风险敞口相关联。
我见过的一个常见错误是数据科学家过于关注模型的技术准确性。虽然这可以给出项目成功的一些指示,但是您需要记住,商业价值最终是最重要的。如果你的模型设计不当,准确性毫无意义!在我们的例子中,商业利益可以是:与对照组相比,客户流失率降低 2 倍**;**将战役响应率提高 3 倍等。有一个基准作为起点是非常有用的,这将允许您展示您相对于基准的提升。
与上述相关的另一个常见错误是,数据科学家致力于某种程度的模型准确性。我强烈反对这样做,因为每个客户数据和业务问题都是不同的。要知道你能期望有多高的精确度,唯一的方法就是根据手头的数据建立一个模型。
4- 技术方案
一旦业务线验证了业务问题和期望,最后一步就是定义和设计技术解决方案。
**数据要求。*定义数据需求是数据科学项目的关键步骤。有必要召开数据评估研讨会,以了解现有的数据生态系统,并就【可能】对用例有用的数据源提出建议。我在这里强调单词“可能”*,因为即使领域专家可以胡乱猜测,在我们训练模型之前,没有人能够确定哪些数据点会有帮助。此时,列出可能有用的候选数据域就足够了。在我们的例子中,它可以是客户交易、社会人口统计、产品规格、账单、支付、联络中心、CRM。更不用说你最重要的来源是你将用来定义你试图预测的目标变量的数据,例如,流失(假设这是一个监督学习)。此外,请务必询问基准数据,因为这将允许您比较模型。
数据需求是一个更加技术性和复杂的话题,我将专门写一篇博客来专门讨论它。
**技术要求。**构建这个用例需要哪些技术?最基本的,你需要一堆经典的软件和库来收集和准备数据,训练和部署你的模型。如果您正在考虑企业的用例操作化,那么考虑额外的技术是很重要的,比如数据治理和模型生命周期管理。可能还需要一些替代/非人工智能技术,例如,模型输出的后处理、持续开发和持续集成(CI/CD)、通过 RPA 实现某些流程的自动化等。
**解决方案设计。**一旦您确定了技术需求,在您的技术架构师和开发人员的帮助下,您将定义描述拼图的不同部分如何组合在一起的解决方案架构。该架构必须解释模型训练和模型消费的数据管道,一直到将端点与目标应用程序和模型生命周期管理集成。更不用说基础架构规模和解决方案运行的环境了。它会托管在公共云上吗?内部?还是混合云?需要多少个非生产环境?环境之间是逻辑分离还是物理分离?每个解决方案都有不同的规模,但总体而言,这将取决于大量与数据相关的因素(容量、速度等)。)、用户(并发数量、预期使用量)、IT 策略和安全标准等。
结论
现在您已经有了一个定义良好的用例,您需要与 IT 或数据管理团队分享详细的数据需求,然后等待数据供应和工作环境设置完成,这样您就可以开始数据科学的魔法了!好消息是,这一次你会更有信心,如果技术部分做对了,业务用户会很高兴。请记住,这个用例定义是一项正在进行的工作,因此遵循敏捷项目方法并保持业务在循环中发展用例并避免最终出现意外是很重要的。
最后同样重要的一点是,能够用非技术术语解释技术工作的成果,以便业务用户能够清楚地理解和欣赏您提供的价值,这一点我怎么强调都不为过。
我将给你们留下一篇关于企业设计思维的笔记,它提供了一个框架和一套方法来定义一个用例,所有这些都由业务价值来指导。
参考
[1] A. White,我们的顶级数据和分析预测 2019 年,2019 年,Gartner 博客文章。
[2] N. Henke,J. Levine 和 P. McInerney,分析翻译:新的必备角色,2018 年,哈佛商业评论
带注释的 ResNet-50
原文:https://towardsdatascience.com/the-annotated-resnet-50-a6c536034758
解释 ResNet-50 的工作原理以及它如此受欢迎的原因
Resnet-5 0 模型架构
介绍
ResNet 架构被认为是最流行的卷积神经网络架构之一。剩余网络(ResNet)是微软研究院在 2015 年提出的,在何的论文中首次提出时就打破了多项记录。et。艾尔。
为什么是 ResNet?
对像 ResNet 这样的模型的需求是由于当时现代网络中的许多缺陷而产生的。
- **深度神经网络训练难度:**随着模型层数的增加,模型中的参数数量呈指数增长。对于每个卷积层,总共有((高度(内核 )⋅ 宽度(内核) ⋅ 滤波器(输入) )+1)⋅ *滤波器(输出)*被添加到账单中。具体来说,从 3 通道到 32 通道的一个简单的 7x7 内核卷积层添加了 4736 参数。为了进行实验而增加层数会导致训练模型的复杂度同样增加。然后训练需要更大的计算能力和记忆。
- 更具表现力,差异性更小:神经网络通常被认为是一个函数逼近器。它能够在给定输入、目标以及函数输出和目标之间的比较的情况下对函数进行建模。向网络中添加多层使其更有能力模拟复杂的功能。但是论文中发表的结果表明,18 层平面神经网络的性能比 34 层平面神经网络好得多,如下图所示。
增加层可以看作是功能空间的扩展。例如,多个层加在一起可以看作是一个函数 F 。这个函数 F 可以表示为它可以到达/建模的函数空间 F 的表示。
在 F* 中拥有你想要的功能将是一个幸运的机会,但通常情况并非如此。在这里加层可以让我们围绕函数空间 *F
展开变化,可以让我们在由可想象宇宙中所有可能的函数组成的更大的母函数空间中覆盖更大的空间。但是这种方法有一个固有的缺陷。随着函数空间变大,不能保证我们更接近我们的目标函数。事实上,很有可能在实验阶段,你离开了可能有你实际需要的功能的功能空间。
行话让你困惑了吗?我们来打个针和干草堆的比方。
让这根针成为神经网络的完美权重,或者如前所述,成为一个函数。让干草堆成为所有可能的功能。
一种是从一个单一的搜索区域开始,并试图从那里对准指针。添加图层相当于移动你的搜索区域,让它变大。但这也带来了离开针头实际所在位置的风险,同时也使我们的搜索更加耗时和困难。干草堆越大,就越难找到完美的针。那么,解决办法是什么?
实际上,非常简单和优雅。嵌套您的功能空间。
这样做有几个简单的原因。最重要的一点是,它允许您确保当模型添加层来增加功能空间的大小时,您不会最终降低模型的质量。这保证了虽然我们的模型可以用更多的层做得更好,但它不会做得更差。
回到我们的干草堆类比,这相当于使我们的搜索空间更大,但确保我们不离开我们当前的搜索空间。
3.消失/爆炸梯度:这是困扰大型/深度神经网络训练的最常见问题之一,是网络参数数值稳定性方面疏忽的结果。
在反向传播过程中,当我们不断从深层向浅层移动时,微分的链式法则使我们乘以梯度。通常,这些梯度很小,在 10^{-5}10−5 量级或更大。
根据一些简单的数学,随着这些小数字不断相乘,它们会变得越来越小,对重量的影响几乎可以忽略不计。
在光谱的另一端,存在梯度达到 10⁴或更高的量级的情况。随着这些大梯度彼此相乘,这些值趋向于无穷大。允许如此大范围的值处于权重的数值域中使得收敛难以实现。
这个问题通常被称为消失/爆炸梯度问题。ResNet 由于其架构,根本不允许这些问题发生*。为什么跳跃连接(前面描述过)不允许这种情况,因为它们作为梯度高速公路,允许其流动而不被大幅度改变。*
什么是跳过连接?
ResNet 论文推广了使用跳过连接的方法。如果你还记得,解决函数空间问题的方法是嵌套它们。就将它应用到我们的用例而言,它是在输出中引入了一个简单的 identity 函数。
在数学术语中,它意味着y*=x+F(x),其中 y 是该层的最终输出。*
就体系结构而言,如果任何一层最终损害了普通网络中模型的性能,则由于存在跳过连接,该层会被跳过。
体系结构
ResNet-50 架构可以分为 6 个部分
- 输入预处理
Cfg[0]
街区Cfg[1]
区块Cfg[2]
街区Cfg[3]
街区- 全连接层
ResNet 体系结构的不同版本在不同级别使用不同数量的 Cfg 块,如上图所示。下面是一份详细的信息清单。
给我看看代码!
理解这个概念的最好方法是通过一些代码。下面的实现是在 Keras 中完成的,使用标准的 ResNet-50 架构(ResNet 有几个版本,网络深度不同)。我们将在斯坦福 AI 著名的斯坦福狗数据集上训练模型。
导入标题
*!pip install **-**q tensorflow_datasets
import tensorflow **as** tf
from tensorflow import keras
import tensorflow_datasets **as** tfds
import os
import PIL
import pathlib
import PIL.Image
import warnings
warnings**.**filterwarnings**(**"ignore"**)**
from datetime import datetime*
数据集下载和预处理
我们使用 Tensorflow 数据集(稳定) 下载斯坦福狗数据集,并将其分成训练、验证和测试集。
除了图像和标签,我们还获得了一些元数据,为我们提供了关于数据集的更多信息。它存储在ds_info
并以人类可读的方式打印出来。
我们还利用tfds.show_examples()
从数据集中打印一些随机的示例图像和标签。
我们运行tfds.benchmark()
来对tf.data.Dataset
提供的迭代器进行基准测试
我们在tf.data.Dataset
对象上执行以下最佳实践步骤,以提高其效率:
batch(BATCH_SIZE)
:允许我们在数据集内准备小批量。请注意,批处理操作要求所有图像都具有相同的大小和相同的通道数map(format_image)
:将图像转换为tf.float32
张量,归一化范围[0,1][0,1]中的所有值,使用lanczos3
内核方法将图像从其原始形状调整为模型输入形状(224,224,3)(224,224,3)prefetch(BUFFER_SIZE)
:在处理当前批次的同时,预取会将训练期间的下一批数据集带入内存,从而减少 I/O 时间,但需要更多的 GPU 内存cache()
:缓存第一批迭代器,以减少加载时间,类似于预取,区别只是缓存将加载文件,而不是推入 GPU 内存
***(**train_ds**,** valid_ds**,** test_ds**),** ds_info **=** tfds**.**load**(**
'stanford_dogs'**,**
split**=[**'train'**,** 'test[0%:10%]'**,** 'test[10%:]'**],**
shuffle_files**=True,** with_info**=True,**
as_supervised**=True**
**)***print***(**"Dataset info: \n"**)**
*print***(**f'Name: {ds_info**.**name}\n'**)**
*print***(**f'Number of training samples : {ds_info**.**splits**[**"train"**].**num_examples}\n'**)**
*print***(**f'Number of test samples : {ds_info**.**splits**[**"test"**].**num_examples}\n'**)**
*print***(**f'Description : {ds_info**.**description}'**)**
tfds**.**show_examples**(**train_ds**,** ds_info**)**CLASS_TYPES **=** ds_info**.**features**[**'label'**].**num_classes
BATCH_SIZE **=** 4*print***(**'Benchmark results'**)**
tfds**.**benchmark**(**train_ds**)****def** **format_image(**image**,** label**):** image **=** tf**.**cast**(**image**,** tf**.**float32**)**
image **=** image **/** 255.0
image **=** tf**.**image**.**resize_with_pad**(**image**,** 224**,** 224**,** method**=**'lanczos3'**,** antialias**=True)**
**return** image**,** label**def** **prepare_ds(**ds**):**
ds **=** ds**.**map**(**format_image**)**
ds **=** ds**.**batch**(**BATCH_SIZE**)**
ds **=** ds**.**prefetch**(**tf**.**data**.**AUTOTUNE**)**
ds **=** ds**.**cache**()**
**return** dstrain_ds **=** prepare_ds**(**train_ds**)**
valid_ds **=** prepare_ds**(**valid_ds**)**
test_ds **=** prepare_ds**(**test_ds**)***
输出:
*Downloading and preparing dataset 778.12 MiB (download: 778.12 MiB, generated: Unknown size, total: 778.12 MiB) to /root/tensorflow_datasets/stanford_dogs/0.2.0...
Dataset stanford_dogs downloaded and prepared to /root/tensorflow_datasets/stanford_dogs/0.2.0\. Subsequent calls will reuse this data.
Dataset info:Name: stanford_dogsNumber of training samples : 12000Number of training samples : 8580Description : The Stanford Dogs dataset contains images of 120 breeds of dogs from around
the world. This dataset has been built using images and annotation from
ImageNet for the task of fine-grained image categorization. There are
20,580 images, out of which 12,000 are used for training and 8580 for
testing. Class labels and bounding box annotations are provided
for all the 12,000 images.Benchmark results************ Summary ************Examples/sec (First included) 787.00 ex/sec (total: 12000 ex, 15.25 sec)
Examples/sec (First only) 10.34 ex/sec (total: 1 ex, 0.10 sec)
Examples/sec (First excluded) 791.95 ex/sec (total: 11999 ex, 15.15 sec)*
增大
*imageAug **=** keras**.**Sequential**([**
keras**.**layers**.**RandomFlip**(**"horizontal_and_vertical"**),**
keras**.**layers**.**RandomRotation**(**0.2**),**
keras**.**layers**.**RandomContrast**(**0.2**)**
**])***
我们进行了一些数据扩充,使我们的模型更加稳健。一个随机翻转*、随机旋转和随机对比度用于使图像组更加多样。函数的参数是概率,即图像经历所选变换的机会。*
Cfg0 块
该区块包含 1 个 Conv 层和 2 个身份层。为了有助于数值稳定性,我们指定了一个核约束,以确保所有的权重以恒定的间隔被归一化。在两个后续层之间,我们还包括一个批处理标准化层。代码以一种明确的方式被有意地写出来,以帮助读者理解在每个阶段做出了什么样的设计选择。
- 输入形状:(56,56,64)
- 输出形状:(56,56,256)
Cfg1 模块
该区块包含 1 个 Conv 层和 2 个身份层。这类似于 Cfg0 块,区别主要在于 Conv 和身份层中的out_channels
的数量更多。
- 输入形状:(56,56,256)
- 输出形状:(28,28,512)
Cfg2 模块
该区块包含 1 个 Conv 层和 5 个身份层。对于 ResNet 来说,这是一个更重要的块,因为模型的大多数版本在这个块空间上都有所不同。
- 输入形状:(28,28,512)
- 输出形状:(14,14,1024)
Cfg3 块
该区块包含 1 个 Conv 层和 2 个身份层。这是网络中最后一组卷积层块。
- 输入形状:(14,14,1024)
- 输出形状:(7,7,2048)
分类器块
这个区块包含一个AveragePooling
层、一个Dropout
层和一个Flatten
层。在此块中,要素地图最终被展平并推入完全连接的图层,该图层随后用于生成预测。Softmax 激活用于生成逻辑/概率。
- 输入形状:(7,7,2048)
- 输出形状:(1,CLASS_TYPES)
构建 ResNet 模型
现在,我们将所有的模块连接在一起,创建最终的 ResNet 模型。在我们的整个过程中,我们使用了 Keras Functional API,这是 Tensorflow 的最佳实践。
我们还执行一些可视化,即model.summary()
打印出模型层的结构,以及keras.utils.plot_model()
绘制模型的可视化有向无环图,Tensorflow 将在后端使用该图来简化执行。
*Model: "resnet50"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input (InputLayer) [(None, 224, 224, 3)] 0
sequential (Sequential) (None, 224, 224, 3) 0
conv2d_28 (Conv2D) (None, 112, 112, 64) 9472
max_pooling2d (MaxPooling2D (None, 56, 56, 64) 0
)
cfg0_block (Functional) (None, 56, 56, 256) 148480
cfg1_block (Functional) (None, 28, 28, 512) 665600
cfg2_block (Functional) (None, 14, 14, 1024) 2641920
cfg3_block (Functional) (None, 7, 7, 2048) 10526720
classifier (Functional) (None, 120) 3932280
=================================================================
Total params: 17,924,472
Trainable params: 17,893,752
Non-trainable params: 30,720
_________________________________________________________________
None*
定义回调
在model.fit()
中,我们可以为模型定义回调,这些回调在训练期间以预定的间隔被调用。我们定义了一个模型检查点回调,它在每个时期完成时创建模型的快照。
*callbacks_list **=** **[**
keras**.**callbacks**.**ModelCheckpoint**(**
filepath**=**'resnet50_model/checkpoint_{epoch:02d}.hdf5'**,**
monitor**=**'val_loss'**,**
verbose**=**0**,**
save_best_only**=True,**
mode**=**'auto'**,**
save_freq**=**'epoch'**,**
options**=None,**
initial_value_threshold**=None**
**)**
**]**history **=** model**.**fit**(**
x**=**train_ds**,**
validation_data**=**valid_ds**,**
callbacks**=**callbacks_list**,**
epochs**=**20
**)***
如果我们希望使用先前保存的模型,我们也可以这样做。
**## If using Google Colaboratory, one can upload checkpoints onto Google Drive and use it directly.*from google.colab import drive
drive**.**mount**(**'/content/gdrive'**)**
model **=** keras**.**models**.**load_model**(**'/content/gdrive/My Drive/checkpoint_18.hdf5'**)***## If using local Jupyter Notebooks, one can use checkpoints from local drives itself.*model **=** keras**.**models**.**load_model**(**'./resnet50_model/checkpoint_18.hdf5'**)***
获取模型历史
我们打印模型历史以获得关于训练过程的更多信息
**print***(**history**)***
预测结果
我们采用经过训练的模型,并使用它对测试集进行预测,以及计算一些指标,如损失和准确性
*results **=** model**.**evaluate**(**test_ds**)**
*print***(**f"Results : {results}"**)***
结论
上面,我们已经访问了残差网络架构,浏览了它的显著特征,从头实现了一个 ResNet-50 模型,并训练它在斯坦福狗数据集上进行推理。
作为一个模型,ResNet 同时在计算机视觉和深度学习领域带来了一场革命。它还赢得了 2015 年 ImageNet 大规模视觉识别挑战赛和 COCO 比赛。但这只是产生更好结果的许多有趣变化的垫脚石。查看下面有趣的链接部分,找到一些伟大的博客和研究论文。
参考
- 何刚,张,徐,任,孙(2015)。用于图像识别的深度残差学习。
- 张,李,张,李,米,斯莫拉,A. J. (2021)。潜入深度学习。 ArXiv 预印本 ArXiv:2106.11342 。
有趣的链接
更多信息,请访问我的博客这里或者通过电子邮件或 GitHub 联系我!
Python 中人工神经元在虹膜数据集上的应用
无深度学习库的单层神经网络预测花卉品种
信用额度线材@Freepik.com
介绍
答人工神经网络(ann)非常强大。最近的发展使科学家创造出比人脑连接更多的神经网络。给你一个概念,据估计,一个普通的大脑有 860 亿个神经元和 1000 亿个突触。另一方面,2022 年最大的 NN“威震天-图灵 NGL 530B (MT-NGL)”,单片变压器语言模型,拥有5300 亿个参数。尽管如此,人类的大脑精通不止一个领域,MT-NGL 只是专门从事语言处理。
我们是如何走到这一步的?
人工神经元
“一个人工神经元是一个数学函数,被设想为一个生物神经元的模型,一个神经网络。人工神经元是人工神经网络的基本单元[1]。”
1943 年,麦卡洛克和皮茨发表了第一个被称为麦卡洛克-皮茨(MCP)神经元的简化脑细胞概念,这是神经系统发展的一个里程碑。这两位神经科学家试图理解人类大脑如何通过使用相互连接的神经元产生复杂的模式。
神经元和有髓轴突,信号从树突的输入流向轴突末端的输出(维基百科,2022)
如果你看到 MCP 的结构,有三个主要结构,树突,胞体和轴突。简而言之,树突接收在胞体中积累的多种信号。当信号强度超过某一阈值后,神经元向轴突产生输出信号。
这两位科学家试图根据他们从研究生物神经元中学到的知识来模拟人工神经元。工作完成后,他们意识到有局限性。人工神经元缺乏“学习”成分[2]。
被称为深度学习之父的美国心理学家弗兰克·罗森布拉特进一步发展了麦卡洛克和皮茨的工作,增加了缺失的部分。1957 年,Rosenblatt 构思了感知器,这是一个单层神经网络,它计算最佳权重系数,然后乘以输入特征,目的是进行分类。结果用来决定一个神经元是否传递信号。Rosenblatt 为人工神经网络奠定了基础,当新信息出现时,人工神经网络可以被训练并产生输出[3]。
本文旨在从头开始用 Python 创建一个感知器,并在 Iris 数据集上进行训练和测试。最终目标是部署这个单层神经网络,并以令人满意的精度预测新记录。
人工神经元背后的数学
正如你所想象的,在一个感知机中涉及到一些统计公式。本节想要描述从开始到最终输出的整个流程。单层神经网络由以下 5 个元素组成:
- 输入 x1,x2,x3,…,xn*;*对算法进行训练然后测试的单个值
- 权重 w1,w2,w3 …,wn*;*也称为突触权重,是算法从训练过程中“记忆”的方式。新记录将需要通过权重,以从网络输入函数中分配一个数值
- 净输入功能;它是输入矩阵乘以权重矩阵。这是感知器对训练和测试记录进行分类的方式
- 阈值函数;它在一个数值范围内对网络输入函数给出的结果进行标准化
- 错误;该算法在训练阶段使用它来了解与理想结果相差多少,然后相应地重新调整权重
感知机的过程(Raschka,s .,& Mirjalili,v .,2014 年)
该图显示了感知器接收输入并将其与权重相结合的过程。事实上,在训练之后,感知器确定了一组权重。新记录可以通过净输入功能,其定义如下:
z 是输入的加权平均值。另一方面,存在不同的阈值函数,包括但不限于线性、单位步长、分段线性和高斯函数。为了这个项目,我们将使用 Sigmoid 函数。sigmoid 以 z 为输入,输出 0-1 范围内的值:
概括地说,数据集特定列下的每个输入 x 乘以每个权重。然后将结果 z 输入到 sigmoid 函数中进行归一化。归一化一个结果意味着每一个可能的输出都在一个特定的范围内。高于 0.5 的每个结果都是类“1”的一部分,而低于 0.5 的每个结果都是类“0”的一部分。
数据集
鸢尾花数据集是罗纳德·费雪在 1936 年构想的多元数据集。费希尔是英国统计学家和生物学家。他以厘米为单位记录了三种不同花的萼片和花瓣的长度和宽度:刚毛鸢尾、海滨鸢尾和杂色鸢尾。记录总数为 150 个,每个物种 50 个。数据集的列组织如下:
下面你可以找到通过组合数据集的两个特征生成的散点图,更具体地说是每个物种的花瓣和萼片宽度。从这个图像,你可以对三个品种有一个整体的了解,这是一个很好的场合来介绍一个根本的概念。感知器需要训练的数据必须是线性可分的。线性可分性是两组点的一个性质。如果平面上至少有一条线将这两组点分开,那么它们是线性可分的。例如,变色鸢尾和海滨鸢尾的记录不是线性可分的,而刚毛鸢尾和变色鸢尾符合这一规则。
包含虹膜数据集两个特征的散点图—图片由作者提供
代码部署
在“简短”的介绍之后,我们现在拥有了继续代码部署所需的所有元素。第一个主要步骤是获得可以用来训练感知器的数据集。可以在下面的链接找到。
- 然后我们可以导入诸如 os 、 pandas 和 sklearn 等库用于训练和测试分割;
- os 加入我之前提供给你的数据集的链接,熊猫读取它。导入的数据没有标题,然后列名被重命名。
- 感知器不能读取字符串,品种的名称被映射到整数,鸢尾被分配到 0,鸢尾杂色被分配到 1,鸢尾被分配到 2;
- X 和 y 被定义为训练和测试变量。您会注意到,我只选择了前 100 条记录,它们只包含鸢尾和杂色鸢尾品种。这需要发生两个主要原因:线性可分性和二元分类。正如我们之前提到的,杂色鸢尾和海滨鸢尾不是线性可分的,除此之外,感知器是一个二元分类器,它每次只能处理两个类;
- train_test_split 命令在训练和测试之间划分数据,随机选择记录。
现在是时候创建人工神经元,根据可用数据对其进行训练并记录其表现了。Numpy 是这个过程的基础,因为我们要处理很多矩阵,它是算法中唯一的库。Python 中感知机的设计由 jonasbostonen 提供:
- self.synaptic_weights 与 np.random.seed(1) 命令一起生成随机数并将其分配给权重,这是作者的选择,您甚至可以为每个权重分配一个特定的值。Synaptic 权重接受 4 个输入,每个输入对应数据集的一个特征,并返回一个输出,即类;
- 然后定义 sigmoid 和 sigmoid_derivative 函数。它们是关于结果标准化和我们对现有权重的信心的基础;
- 训练功能利用了神经网络中称为反向传播的概念。通过使用sigmoid _ derivative,该技术使用梯度下降来最小化成本函数。换句话说,命令 train 通过比较 sigmoid 导数的先前值和新值来重新迭代或重新调整,直到它达到成本函数的最小值;
- think 负责通过神经网络传递输入并返回最终输出,预测一个新记录是属于一个类还是另一个类;
- 训练 _ 输入和训练 _ 输出需要分别分配给 X_train 和 y_train 给模型输入数据;
- 将迭代次数设置为 1000 次后,我们可以打印突触权重,看看它们是如何从随机分配的值变化的。这段话告诉我们训练是否奏效,模型是否收敛;
- 最终,我们可以通过运行命令*neural _ network . think(X _ test)*来预测新的记录,并为下一步将它们转换成 pandas 数据帧。
下面的终端输出显示了训练前后的突触权重值。每个突触权重都与该位置的特征相关联。例如,每个新记录的萼片长度需要乘以-9.52,萼片宽度需要乘以-6.52,依此类推。
Random synaptic weights:
[[-0.16595599]
[ 0.44064899]
[-0.99977125]
[-0.39533485]]
Synaptic weights after training:
[[-9.52461914]
[-6.52013852]
[-2.58998186]
[-0.37790606]]
当我们执行预测命令时,新记录会发生以下情况:
啊哦!这是一个变色鸢尾(1)记录,已被归类为鸢尾(0)。在这种情况下,我不期望模型在测试记录上表现良好。
可以使用 sklearn 库 classification_report 来分析性能,但首先要注意的是,sigmoid 函数不会返回 1 和 0,而是这些值的近似值。因此,我们需要将值转换成类。
使用 getResult 函数,每个高于 0.5 的输出被分类为 1,而每个低于 0.5 的输出被分类为 0。lambda 函数帮助我们在测试数据集的每个记录上应用 getResult ,而 classification_record 给了我们感知的准确性。
precision recall f1-score support
0 0.50 1.00 0.67 10
1 0.00 0.00 0.00 10
accuracy 0.50 20
macro avg 0.25 0.50 0.33 20
weighted avg 0.25 0.50 0.33 20
正如预期的那样,准确性根本不令人满意,该模型似乎对 Iris Setosa 记录极其敏感,并对每个新数据点进行分类,从而实现 50%的总体准确性。
重要的是要强调特征以及它们的顺序会极大地影响最终结果。数据集中的所有列都被使用的情况经常发生,但并不总是这样。
经过一段时间的试验后,我注意到两种花卉的萼片宽度有一个清晰的模式,所以这次我只使用三个变量按照以下顺序重新运行代码:
##Defining input and target variables for both training and testing
X = df.iloc[:100,[1,2,3]].values
y = df.iloc[:100,[4]].values
我相应地修改了第一个神经网络的类函数,这次它只接受三个特征而不是四个:
def __init__(self):
np.random.seed(1)
self.synaptic_weights = 2*np.random.random((3,1)) - 1
正如你可能想象的那样,突触权重在通常的 1000 次迭代后已经改变了。
Random synaptic weights:
[[-0.16595599]
[ 0.44064899]
[-0.99977125]]
Synaptic weights after training:
[[-10.97823329]
[ 10.71483544]
[ 3.74420857]]
我要用之前的记录再试一次,看看这次模型是否分类正确。
大家可以看到,有些权重经过调整转正,也使得最终结果转正。提醒一下,这个记录属于鸢尾,这次分类器预测正确。我对这个模型有更好的感觉。
precision recall f1-score support
0 1.00 1.00 1.00 10
1 1.00 1.00 1.00 10
accuracy 1.00 20
macro avg 1.00 1.00 1.00 20
weighted avg 1.00 1.00 1.00 20
正如预期的那样,性能得到了令人眩晕的提高,报告显示两个类在 20 个测试记录中获得了 100%精度的满分,这正是我们想要的结果。
结论
我希望你觉得这篇文章很有见地,很吸引人。目标是通过分析神经网络算法的基本单元来揭穿其复杂性。现在想象一个感知器,但有更多层,其中前一层的输出代表下一层的输入,这是一个多层人工神经网络,它是 MT-NGL 的基本概念,你刚才看到它用大约 130 行 Python 编码和部署。
最后,如果您喜欢该内容,请考虑添加一个关注,以便在新文章发布时得到通知。如果你对这篇文章有什么要考虑的,写在评论里吧!我很想读读它们:)谢谢你的阅读!
PS:如果你喜欢我写的东西,如果你能通过 这个链接 订阅一个中等会员,那对我来说就是全世界。这是一种间接的支持我的方式,你会得到媒体文章提供的惊人价值!
参考
[1]麦卡洛克,W. S .,&皮茨,W. (1943)。神经活动中固有观念的逻辑演算。《数学生物物理学通报, 5 (4),115–133。
[2]维基百科贡献者。(2022 年 2 月 10 日)。人工神经元。维基百科;维基媒体基金会。检索自:https://en.wikipedia.org/wiki/Artificial_neuron
[3]罗森布拉特,F. (1961 年)。神经动力学原理。感知机和大脑机制理论。纽约布法罗康奈尔航空实验室公司。
[4]费希尔,R. A. (1936 年)。分类问题中多重测量的使用。《优生学年鉴》, 7 (2),第 179–188 页。
[5] Raschka,s .,& Mirjalili,V. (2014 年)。朴素贝叶斯和文本分类 I 导论和理论。从 https://arxiv.org/pdf/1410.5329.pdf取回
[6] R.A .费希尔(1936 年)。https://archive.ics.uci.edu/ml/datasets/Iris 的 UCI 机器学习库。加州欧文:加州大学信息与计算机科学学院。
解释预言的艺术
原文:https://towardsdatascience.com/the-art-of-explaining-predictions-22e3584ed7d8
如何以人性化的方式解释你的模型
杰森·古德曼在 Unsplash 上的照片
数据科学家角色的一个重要部分是解释模型预测。通常,接受解释的人是非技术人员。如果你开始谈论成本函数、超参数或 p 值,你会遇到茫然的目光。我们需要把这些技术概念翻译成通俗易懂的语言。这个过程可能比构建模型本身更具挑战性。
我们将探索如何给出人性化的解释。我们将通过讨论一个好的解释的一些关键特征来做到这一点。重点将放在解释个别预测上。最后,我们将通过解释一个使用 SHAP 值的模型来应用这些知识。我们会看到,当你想给人以友好的解释时,SHAP 是非常有用的。
本地与全球解释
在我们深入讨论之前,让我们先讨论一下你在解释什么以及你在向谁解释。作为一名数据科学家,你可能需要与各种各样的人交流。这包括同事、监管者或客户。这些人都有不同程度的技术专长。所以你需要根据他们的专业知识来调整你的解释水平。
在某些情况下,您可能会被要求从整体上解释模型。我们称之为全局解释。我们希望了解模型总体上捕捉到了哪些趋势。我们可能需要回答诸如“哪些特性是最重要的?”或者“特征 X 与目标变量有什么关系?”
在其他情况下,我们将需要给出局部解释。这是我们解释单个模型预测的时候。事实上,我们通常需要解释由模型预测产生的决策。这些解释也可以是对诸如“我们为什么拒绝这个贷款申请?”或者“为什么会给我这个电影推荐?”
(来源: flaticon )
与同事或监管者交谈时,你可能需要给出更多的技术性解释。相比之下,客户会期待更简单的解释。你也不太可能需要给客户一个全面的解释。这是因为他们通常只关心影响他们个人的决策。我们将集中讨论这个场景。这是向一个非技术人员解释个人预测。
好的解释的特征
当我们谈论一个好的解释时,我们指的是一个容易被接受的解释。换句话说,它应该让观众相信一个决定是正确的。要给出这样的解释,你需要考虑一些关键的方面。您可以在图 1 中看到这些内容的总结。在本节的其余部分,我们将深入讨论每一个问题。
图 1:一个好特性的特征概述(来源:作者)
真实的
这似乎是显而易见的,但一个好的解释应该是真的。当你考虑我们正在解释的东西时,这可能比预期的更难。那就是我们正在为模型预测给出解释。问题是这些预测可能是不正确的。例如,我们的模型可能过度拟合。这意味着预测可能会反映已经建模的噪声。对这些预测的解释不能反映数据中真实的潜在关系。
(来源: flaticon )
当给出解释时,我们需要考虑我们的模型在多大程度上代表了现实。我们可以通过评估模型的性能来做到这一点。例如通过使用交叉验证准确性。即使整体表现良好,一些预测可能比其他预测更不确定。例如,概率为 0.5 左右的逻辑回归预测。在你的解释中,我们可能要提到这种不确定性。
瞄准目标受众
你表达事情的方式很重要。我们拒绝了你的贷款,因为——“你是一名加密货币交易员”、“你在一个高风险的行业工作”或“你的收入太不稳定”。这些都是相同的原因,但措辞不同。一些表达事物的方式会更好地表达你的观点。有些人可能还会觉得某些方式令人不快。比如第一种解释,可能会带个人色彩。
你也应该避免任何技术或商业术语。“收入在我们的模型中有一个正参数,而你的收入值很低。所以,你被拒绝了,因为你的收入价值大大增加了你的违约风险。”这是一个不好的解释,因为我们使用了技术术语(即“模型”和“参数”)。我们也有一些商业术语(如“违约风险”)。
选择最佳的解释方式才是真正的艺术所在。这可能是解释一个预测最困难的部分。这也不是数据科学课程或大学能很好涵盖的内容。最终,这种技能将来自经验和与客户发展关系。
原因数量
人们只想要事件的主要原因。“为什么通货膨胀这么高?”——“因为油价上涨了。”事实上,通胀可能是由工资增长、政府支出增加或汇率等因素综合造成的。然而,这些可能没有能源成本上升的影响大。
当谈到 ML 时,人们不想知道每个模型特征是如何影响预测的。一般来说,说明 1 到 3 特征的贡献就足够了。问题是你选择解释哪些贡献?接下来的 4 个特征可以帮助你选择最合适的原因。
(来源: flaticon )
有意义的
我们应该选择最重要的原因。换句话说,我们只会解释那些有重大影响的因素。对于我们的通货膨胀的例子,我们会给出引起最大增长的原因。这些原因比那些影响较小的原因更容易被接受。
对于 ML,我们想要解释对预测贡献最大的特征。我们确定这些特征的方式将取决于所使用的模型。对于线性模型,我们可以看参数权重和特征值。稍后我们将看到 SHAP 值如何用于非线性模型。
一般
一个好的理由可以解释许多决定。“你为什么拒绝我的贷款申请?”——“因为你现有的债务很多。”假设这是拒绝很多贷款申请的理由。这个原因更容易被接受,因为它的贡献已被广泛理解。
对于 ML,我们可以通过查看一些特征重要性的度量来找到一般性的解释。例如,排列特征重要性。有了 SHAP 值,我们可以看到平均绝对 SHAP。无论如何衡量,高值表示某个特性总体上做出了重大贡献。
反常的
在其他情况下,一个好的理由可能是不常见的。这些将能够解释对特定决策的重要贡献。然而,一般来说,他们无法解释决策。“你为什么拒绝我的贷款申请?”-“因为你是一个加密货币交易商”这些类型的原因可能会被接受,因为它们更个人化。也就是说,人们能够理解它对他们产生了怎样的具体影响。
对于 ML,我们可以通过查看特征重要性和对个体预测的贡献的组合来找到异常原因。这些是不具有高特征重要性的特征。但是,对于一个具体的预测,他们做出了很大的贡献。
(来源: flaticon )
对比
通常我们需要解释一个决定和另一个决定。客户可能不会问“为什么我的申请被拒绝?”但是“为什么我的申请被拒而他们的申请被接受?”可能是两个客户都有很高的现有债务。第一个问题可能接受了这个理由,但第二个问题没有。换句话说,我们需要给出一个理由来区分这两个决定。
对于 ML,这意味着我们需要将我们的解释建立在对两个客户具有不同价值的特性的基础上。该特征还需要在某种程度上有所不同,从而导致不同的预测。例如,我们可能会发现第一个客户的收入更高。收入特征不同,但这不是一个好的理由。也就是说,较高的收入不会导致申请被拒。
这最后四个特征似乎相互矛盾。一个不正常的原因不可能是普遍的。异常或一般原因可能不是最重要的。一个相反的原因可能既不重要,一般或异常。然而,在我们的解释中,我们可以使用多种原因的组合。你选择的理由将取决于问题、人和你认为最有说服力的东西。
和 SHAP 一起解释一个模型
如果你刚到 SHAP,那就看看下面的视频**。**如果想要更多,那就来看看我的 SHAP 课程 **。**注册我的 简讯 :)即可免费获取
现在让我们将其中的一些特征付诸实践。我们将尝试解释一个用于预测保险费用的模型。您可以在表 1 中看到这个数据集的快照。我们的模型特征基于前 6 列。比如子女就是被赡养人数。
表 1:数据集快照(来源:作者)(数据集: kaggle )(许可证—数据库:开放数据库)
我们不会检查代码,但是你可以在 GitHub 上找到完整的项目。总而言之,我们从做一些特性工程开始。我们将的性别和的吸烟者转换成二元特征。区域可以采用 4 个不同的值,因此我们从该列创建 4 个虚拟变量。这样,我们总共有 9 个模型特征。我们使用这些来训练 XGBoost 模型以预测**电荷。**一旦我们的模型经过训练,我们就可以计算每个预测的 SHAP 值。
对于每个预测,每个要素都有一个 SHAP 值。SHAP 值给出了该要素对预测的贡献。换句话说,该特性增加或减少了多少预测的费用。为了理解哪些特性是重要的,我们可以看一下图 2 。这里我们取了所有预测的 SHAP 值的绝对平均值。高平均值表示该特征通常对预测有很大的贡献。
图 2:均值 SHAP 图(来源:作者)
我们可以使用图 2 来帮助确定好的一般或异常原因。比如我们可以看到吸烟者的绝对均值很高。这告诉我们,一般来说,这个特征将为预测提供一个很好的理由。绝对值较低的特征可以提供很好的异常原因。也就是说,对于一个特定的预测,他们有很大的贡献。
让我们试着解释一下我们的第一个预测。你可以在图 3 中看到这个预测的 SHAP 瀑布图。查看 x 轴,我们可以看到基值是 E[f(x)] = 12813。这是所有客户的平均预计费用。结束值是 f(x) = 26726。这是该特定客户的预计费用。SHAP 值是介于两者之间的所有值。它们告诉我们,与平均预测相比,每个特征是如何增加或减少预测的。
图 3:第一次预测的 SHAP 瀑布(来源:作者)
查看图 3 中的我们可以看到吸烟者是最显著的特征。也就是说,它将预测的费用增加了最大的数量。y 轴给出了特征值。例如,我们可以看到“1 =吸烟者”表示该客户吸烟。因此,如果客户问“为什么我的保险费这么高?”,一个好的解释可能是“你是一个吸烟者”。我们还看到,在图 2** 中,这是一个很好的一般原因。**
因此,吸烟既是一个重要的原因,也是一个普遍的原因。这可能足以让这个人相信保险费用是正确的。如果我们想确定,我们可以提到第二个最重要的特征。看 y 轴我们可以看到这个人是 62 岁。因此,我们可以接着问第二个原因,“你老了。”(我们可能想用更好的方式表达这一点。)
对于第二个原因,我们已经猜到了与目标变量的关系。那就是随着年龄增加你的费用增加。其他特征的关系可能不那么明显。这意味着要给出好的理由,我们需要一些特征值的上下文。为此,我们可以使用 SHAP 值的散点图。查看图 4,我们可以看到我们的猜测是正确的。随着年龄的增加,SHAP 值增加。换句话说,预测的费用增加。
图 4: SHAP 对年龄的价值观(来源:作者)
在图 5 中,可以看到第二次预测的瀑布图。为了解释这一点,我们可以直接跳到客户的年龄。然而,请注意孩子也做出了重大贡献。记住,我们在图 2 中看到,这个特性通常并不重要。换句话说,依赖者的数量可能是一个很好的异常原因。相反,我们可能更愿意将此作为主要原因。
图 5:第二个预测的 SHAP 瀑布
本质上,SHAP 价值观允许你给出相反的解释。然而,这只是在我们想要将预测与平均预测进行比较的情况下。像“为什么我的收费比平均水平高?”这样的问题很容易回答。来回答诸如“为什么我的收费比我的姐妹们高?”将需要更多的工作。还有其他计算 SHAP 值的方法可以简化这一过程。例如,基线 SHAP 将计算特定预测的值。
我们一直关注用 SHAP 值来解释个人预测。它们也可以用来给出全局的解释。这解释了模型作为一个整体是如何工作的。我们通过聚合 SHAP 值和创建不同的地块来做到这一点。我们已经看过一个——卑鄙的 SHAP 阴谋。我们将在下面的文章中详细讨论。我们还将讨论用于计算 SHAP 值和创建这些图的 Python 代码。
我希望这篇文章对你有帮助!你可以成为我的 推荐会员 **来支持我。**你可以接触到 Medium 上的所有文章,我可以得到你的一部分费用。
https://conorosullyds.medium.com/membership
你可以在|Twitter|YouTube|时事通讯上找到我——注册免费参加 Python SHAP 课程
图像来源
所有图片都是我自己的或从www.flaticon.com获得。在后者的情况下,我拥有他们的保费计划中定义的“完全许可”。
资料组
米(meter 的缩写))Choi,医疗费用个人数据集(License-Database:Open Database)https://www . ka ggle . com/Datasets/mirichoi 218/insurance/metadata
参考
C.Molnar、可解释机器学习 、 2021、https://christophm . github . io/Interpretable-ml-book/explain . html
T.米勒,人工智能中的解释:来自社会科学的洞见,2017,https://arxiv.org/abs/1706.07269
南 Lundberg & S. Lee,解释模型预测的统一方法, 2017,https://arxiv.org/pdf/1705.07874.pdf
做出更好预测的艺术
原文:https://towardsdatascience.com/the-art-of-making-better-predictions-a461a9301209
数据科学家的日常工作可能涉及非常复杂的概念,但其核心是我们发现了一个简单的前提:如果我们从过去查看足够多的(可靠)信息,我们也许能够说出未来可能会发生什么。
从观察到预测的旅程需要时间、技巧和直觉;没有放之四海而皆准的魔术能让我们实现这一目标。但是获得一个深入的工具包并尝试广泛的用例肯定会有所帮助。为了一路支持你,本周我们重点介绍一些我们最近最喜欢的关于做出更好预测的微妙艺术的帖子。让我们开始吧。
- 围绕预测基础知识 打好基础。如果你是时间序列分析的新手,杰森·庄的《初学者指南》是一个完美的起点:它全面而易懂,涵盖了平稳性、时间序列分解和 ARIMA 建模等基本概念。
- 想想季节 总是好的。停留在时间序列的一般领域, Alvin T. Tan 博士关注季节性在进行预测时的关键作用。他强调了这一概念在模型校准中的特殊重要性,并展示了数据科学家忽视季节性周期的原因。
- 探索预测与自然语言处理的交集 。预测在数据科学和机器学习的许多其他子领域都很重要。一个很好的例子:由余黄,医学博士,计算机科学硕士完成的一个令人着迷的新项目。眼前的挑战是预测临床文本的医学学科;本患者演练演示了为生成可靠预测而处理和准备文本数据的工作量。
在 Unsplash 上由 Toa Heftiba 拍摄的照片
- 为什么不试试协同过滤呢?推荐系统无处不在,它们总是依靠算法来做出预测。一个好的会成功地告诉你应该选择什么产品或菜肴,或者在 Khuyen Tran 的最新教程中,告诉你应该看哪部电影。她的这篇简单易懂的文章重点介绍了协同过滤的强大功能,并解释了如何利用这种方法来提供可靠的推荐。
- 利用数据的力量告知气候相关政策 。为了围绕气候变化做出明智而有效的决策,政府和其他利益相关者需要对我们当前的发展轨迹有一个很好的了解。 Giannis Tolios 最近分享了一个使用 Python 中的 Darts 库创建大气 CO2 时间序列预测的便利资源。
我们基于人类直觉的预测算法(又名“直觉”)告诉我们,本周你可能想要阅读一些其他话题。我们希望如此,因为下面的链接会带你去一些你绝对不应该错过的好帖子。
- 在 TDS 播客上, Jeremie Harris 和嘉宾 Katya Sedova 讨论了人工智能的潜在恶意使用(虚假信息宣传,假新闻的产生,以及其他)——以及研究人员现在需要做什么来降低未来的风险。
- 如果你正在申请数据科学硕士学位——或者正在考虑— 艾莉森·韩愈·姚刚刚出版了一份基于她自己最近经历的综合指南。
- 怎样才能量化信息?凯西·程深入探究克劳德·香农在信息论和通信基本粒子方面的工作。
- 我们每个人都会遇到这种情况:一次错误的点击,整个数据帧或数据集就会丢失。玛丽·沙拉帕在这里为你提供了一个详细的指南,教你如何在谷歌大查询中挽回丢失的数据。
- 为了进入软件工程领域看看陈莉莉基于她过去在 Slack 的工作,对 redux 大小和应用程序性能之间相关性的见解。
感谢你本周和我们一起学习和探索——还有一个特别的大喊,送给所有通过成为灵媒成员来支持我们作者工作的人。
直到下一个变量,
TDS 编辑
促销的艺术
原文:https://towardsdatascience.com/the-art-of-promotion-2498fafdac0d
作家工作室
我们获得更广泛受众的技巧
杰洛特在 Pixabay 上的照片
几周的写作和编辑终于有了回报,你的文章现在发表在《走向数据科学》上。你自豪地向你的朋友圈和同事宣布,在我们的首页向他们展示你的文章,并分享我们的 Twitter 和 LinkedIn 帖子。你看着掌声和关注,期待着看到两者都成长为数千人,就像你在我们一些最受欢迎的作家身上看到的那样。但是在最初的兴趣爆发之后,事情就停滞了。发生了什么事?
每篇新发表的文章都会在我们的网站和社交媒体账户上成为焦点。但是要想真正成功,作者需要在推广他们的作品中发挥作用。许多作者不知道从哪里开始,所以我们分享我们关于推广的顶级技巧。虽然他们不一定会让你成为一个明星 TDS 作者,但他们会让你走上成功之路。
联网
即使你还没有写一个字,建立你的人际网络也是很重要的,因为单独传播这个词是很困难的。你的同事、朋友和家人是一个很好的起点,但是要真正扩大你的人际网络,你需要接触陌生人。
**社交媒体账户。**这是作者最熟悉的推广形式。这是一个很大的话题,所以我们将在我们的作家工作室系列中提供一个单独的帖子。这里我们会提到,要增加你的关注者,你往往要先关注别人。关注 TDS 社区的其他成员,以及您所在领域的领导者。
教育供应商。如果你正在学习或已经从教育项目毕业,在 Twitter 上与他们联系。许多学校积极支持学生和校友的推广活动。这些机构中的一些还会提供机会在他们的时事通讯和出版物中宣传你的工作,所以它们值得一探究竟。
**用户组、专业协会和会议。**这是一个经常被忽视的建立关系网的机会。例如,如果你是 Python 专家,就去 Python 论坛找找看。不要忘记软件公司——许多公司提供年会和网络活动,在那里你会找到志同道合的同事。
网站。有些作者创建了自己的网站,虽然这可能很有效,但需要努力,并且需要自己的推广,因为你必须吸引人们来这个网站。如果你决定走这条路,保持你的网站及时更新,内容丰富,易于浏览。还记得利用你的中型简介传记提及和链接到您的网站。
分发名单。从对你的工作感兴趣的人那里收集联系信息是另一种流行的社交策略。而且理由很充分!这些人喜欢你的工作并期待更多,所以他们已经在支持你的努力了。我们让你很容易建立你的通讯组列表,我们在下面的一个单独的部分解释了这一点并提供了一些很好的建议。
其他作者。接近一个你不认识的人可能会不舒服,但要记住他们中的许多人,尤其是其他作者,曾经站在你的立场上。他们也不得不从零开始建立他们的网络,因此,你可能会惊讶地发现这比你想象的要容易得多!考虑联系那些写类似主题的作者,或者直接在你的文章中添加作者提及。当涉及到其他作者时,运用良好的判断力是很重要的;仔细选择你提到的作者,不要走极端。
确保你的文章被找到
人们热切期待杂志和期刊的印刷版的日子已经一去不复返了,所有的杂志和期刊都是从头到尾阅读的。相反,互联网搜索识别感兴趣的文章,你想在顶部的结果。
搜索引擎使用专有算法来决定什么先出现,这使得搜索引擎优化成为每篇发表文章的一个重要方面。TDS 作者受益于成熟平台的 SEO 提升,因为我们是世界上最受欢迎和阅读量最大的数据科学博客之一,拥有+60 万中等关注者。但是作者自己可以做更多的事情。
基本上,我们希望给搜索引擎提供它所需要的东西,以快速确定你的文章是输入搜索的理想匹配。事实上,我们不知道谷歌是如何使用大约 200 个因素来对内容进行排名的,这使得关注我们所了解的发挥作用的因素变得非常重要。
添加关键字。关键词是常见的搜索术语,在你的文章标题和正文中包含相关的关键词可以提高可见性。将机器学习或数据科学等主要关键词与特定于您的主题的术语(如可视化或部署)结合起来会很有帮助。如果你不确定要包括哪些关键词,那么谷歌趋势是一个不错的起点。
有效放置关键词。在标题、副标题和开头段落中使用与内容相关的关键词。理想情况下,关键字应该出现在标题和副标题的开头,而不是结尾。同样的策略也适用于你的介绍,你应该尝试在前两三句话中包含关键词。 搜索引擎期刊 分享了一些关于关键词放置的好技巧。
明智地使用关键词。自然的使用你的关键词;许多搜索引擎积极寻找太多重复的关键词,被称为关键词填充——TDS 编辑也是如此。所以,只在有意义的地方使用关键词,并考虑相关术语。
**别忘了元数据。**在你文章的故事设置中,你会发现一个 SEO 设置部分,你可以在那里查看你的标题和描述,它的功能是搜索引擎元描述标签。
输入这些设置时,请记住以下几点:
- 您的 SEO 标题只能在发布前更改。理想情况下,它将在 40-50 个字符之间,并包括关键字。虽然你可以选择一个更长的标题,但请记住,搜索引擎通常会将标题截断到 60 个字符。这意味着你的标题中最重要的元素和关键词应该在开头。
- 一个好的 SEO 描述是一篇 140-156 个字符长的文章的紧凑的、引人注目的摘要,包括关键词。默认情况下,会使用文章的第一段,所以请仔细检查以确保其有效。此设置可以在发布后更改,但您需要事先注意这一点,以便从最初的发布推广期获得最大收益。
鼓励读者关注你的文章
面对一长串互联网搜索结果,读者可能会对他们决定挖掘的内容吹毛求疵。所以,除了一个好的标题、副标题和关键词,考虑你的开头段落和特色图片也很重要。
创造一个有意义的标题。写一个简短的标题来吸引读者的注意力。这并不意味着点击诱饵——为了符合我们的指导方针,你的标题必须反映你文章的内容。
用副标题添加细节。一个好的副标题应该扩展你的标题,而不是重复它,这样综合起来,你的标题和副标题就能反映你文章的内容。
**利用图像为你带来优势。**精心挑选的图片充分说明了内容。如果你的图片有一个紧密反映你文章的主题,它会立刻吸引对这个主题感兴趣的读者。
全力以赴。润色你的开场白,确保它们反映了你的写作风格。这告诉读者你的方法是专业的,并设定了正确的期望。
让它变得有价值。抵制诱惑,不要在你的首段写满关于你自己的信息。读者想通过浏览第一段来了解文章的内容。如果他们在移动设备上看你的文章,他们只能看到这些。
如果你想了解更多关于制作好文章的知识,请关注我们作家工作坊系列中即将到来的专栏。
读者兴趣标签
发布文章时,利用“故事设置”>“故事预览”页面上的读者兴趣标签。这些标签对发表在 TDS 上的文章进行分类,帮助读者找到感兴趣的话题。您最多可以添加五个,因此混合使用高级术语和更具体的术语是有意义的。TDS 编辑器有时会编辑您的标签选择,以确保最相关的标签出现。我们与 Medium 密切合作,确保 TDS 中的故事符合 Medium 的编辑和发行标准,因此 TDS 中的故事经常会进一步发行。
多写文章
知名度在推广中很重要。它不仅影响你的搜索引擎优化(SEO),而且读者更有可能打开他们认识或听说过的人写的文章。随着你写作声誉的增长,你会发现大门是敞开的。
创造更多内容。我们最好的建议是建立一个高质量的团队。对于许多作者来说,这意味着写更多的文章,但也可能包括 YouTube 视频、研讨会或会议演示。
确立你的定位。许多作者通过专注于某个特定的领域来增加他们的声誉和追随者。这可能意味着写文章分享你的专业经验,但也可能意味着教程,或文章适合初学者。
保持你的势头。一旦你获得了追随者,重要的是不要失去他们。很容易忘记一个作者,即使他的文章你非常喜欢,如果他们离开视线太久的话。有点像十年不见的朋友。
通常写了一篇好文章的作者会纠结下一步该做什么。我们在 FAQ 中提供了一些建议,我们将很快就这个话题发表一个作家工作室专栏。对于那些寻找当前话题和数据集的人来说,我们也在努力撰写一个名为 The Spark 的新专栏。
分发列表
我们已经讨论了网络的重要性及其在建立联系人列表中的价值。但是你必须超越你认识的人。
Medium 提供了一个易于使用的选项,非常适合将读者添加到您的分发列表中。每个点击关注按钮的人都会被自动添加到您的个人列表中。最棒的是,这些新的联系人看到了你的作品,觉得他们想看更多。有点像发现黄金!
如果您在其他地方收集联系人,这些电子邮件地址可以导入到同一列表中。就这样,您拥有了一个共享您最新故事的中央分发列表!完整的细节可以通过媒体的电子邮件订阅和你的观众统计页面获得。
一些作者扩展了他们对分发列表的使用,以共享诸如时事通讯和提示表之类的东西。它们可能很有帮助,但也很有挑战性。虽然有些人可能已经注册了,也许是为了收到一份提示表,但不能保证他们会打开你发送的任何东西。
如果你打算走这条路,花点时间研究什么是有效的。
增值。如果你的时事通讯或出版物中充满了很棒的提示和建议,那么人们会更愿意参与进来。
不要过度宣传。失去你精心建立的追随者的最快方法是发送除了推广你的最新文章之外什么也不做的简讯。推广没问题,但是记住第一条规则:增值。考虑如何提供一些与文章相关的额外代码或技术。
分享自己的信息
读者不仅与文章联系在一起,还与作者本人联系在一起。这意味着你的媒体形象对你的文章有促进作用。
我们发现作者的照片和全名有助于建立作者和读者之间的信任。但你对自己的描述是你与读者的第一次对话。它建立可信度和联系。
介绍你自己。让你的读者了解你的工作、专业或兴趣。它可以是一个简单的列表,也可以是一个详细的陈述。最重要的是读者对你有所了解。
**告诉我们更多。**作者通常会忽略与他们个人资料相关的关于选项卡。在这里,有大量的空间让你分享一切,从你的专业追求到照片。
提高你的技术
这似乎是一个奇怪的关于推广的建议,但是一篇写得好的文章会让我们的读者和编辑团队眼前一亮,它可以让作者成为焦点。想想你自己对一篇好文章的反应。你可能会为它鼓掌,关注作者,也许还会留下评论。更重要的是,你可能也分享过,谈过——你 推广过 的文章。
我们在 TDS 也这样做。我们突出我们最好的文章和作者,扩大他们的影响。
**社交媒体。**除了通常的 Twitter 和 LinkedIn 帖子,我们最好的文章也会在脸书上分享。
编辑推荐。我们的编辑团队为我们的编辑精选页面挑选他们最喜欢的文章。除了在聚光灯下获得额外的时间之外,这些热门文章都有标签,这样读者就可以很容易地发现它们。
策展特色。我们的顶级文章和作者会在我们的可变时事通讯和月刊中突出显示。
作者聚光灯。我们定期邀请我们最有魅力和最多产的作者参加问答活动,向我们的社区介绍他们和他们的作品。
也许你写了一篇很棒的帖子,并遵循了上面的大部分建议,但仍然没有得到你希望的数万次浏览。那也行!成功需要时间!如果你继续写强有力的原创内容(你的前几个读者喜欢的),最终一些帖子会开始打破噪音。随着更多的观众发现你和你的作品,你的内容会得到更多的阅读和参与。
发现了另一个推广你文章的好方法?想了解更多这里提到的东西?
在评论中分享吧!您的问题或想法可能是我们下一篇文章的一部分。
加速 Python 循环的艺术
原文:https://towardsdatascience.com/the-art-of-speeding-up-python-loop-4970715717c
Python 中没有“最好的”循环技术,只有最合适的
" Python 中最快的循环技术是什么?"
这是一个合理的问题,但往往过于简单化。如果有一种循环方法比其他方法更好,那么其他的技术就会被弃用。
事实是,没有“最好”。
正如生活中的大多数事情一样,会有这样的情况,其中一个明显优于其他人,而在其他一些情况下,这绝对是垃圾。它们视情况而定。用 Python 思考循环优化的更好方式应该是这样的。
对您的用例来说,最佳的循环技术取决于一系列的决策。图片由作者提供。
它们中的每一个都有其自身的用处。我不想再写另一篇速度测试文章,我想强调是什么使它们独一无二,何时使用它们,以及如何使它们变得更好?你会惊讶地发现,通过一个简单的语法调整,我们可以将它们的性能提高 8000 倍。
循环技术的类型:
- 循环迭代
- 列表理解
- λ函数
- 矢量化运算
循环迭代
For-loops 是传授给 Python 初学者的入门级循环技术,因为它们易于阅读且用途广泛。
items = ['bat', 'cat', 'dog']
for item in items:
print(item)**>> bat
>> cat
>> dog**
然而,许多人认为 for 循环是高效编程的对立面。它们很慢,因为 Python 的 for 循环实现有非常大的开销(例如:类型检查等——稍后讨论),每次迭代都要执行。
有两种主要类型的 for 循环,即(I)索引循环和(ii)行循环。
索引循环
一个索引循环接受一个数字序列(例如:[0,1,2,…])并为序列中的每个元素运行代码逻辑。
在第一次迭代中,Python 在执行循环中的代码之前,将变量idx
赋给序列的第一个元素(在本例中为 0)。然后,idx
被重新分配给第二个、第三个……元素,循环重复,直到序列结束。
for idx in ['bat', 'cat', 'dog']:
print(f'Hello, I am index {idx}.')**>> Hello, I am index bat.
>> Hello, I am index cat.
>> Hello, I am index dog.**
当我们需要控制序列的起始索引、结束索引和步长时,索引循环非常有用。
例如,如果你想从第 1000 行循环到第 2000 行…
res = 0
for idx in range(1000, 2000):
res += df.loc[idx, 'int']
如果你只需要第 1000 到 2000 行的第 5 个元素…
res = 0
for idx in range(1000, 2000, 5):
res += df.loc[idx, 'int']
索引循环非常灵活,但是它们通常被认为是缓慢的循环技术。虽然在某种程度上是真的,但也不尽然!出于基准测试的目的,这里有一个简单的循环,它返回int
列的总和。
%%timeit
res = 0
for idx in range(0, 100000):
res += df.loc[idx, 'int']**>> 486 ms ± 4.28 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)**
我们可以实现相同的功能,但通过一个简单的优化技巧— np.arange()
可以获得更好的性能。
%%timeit
res = 0
for idx in np.arange(0, 100000):
res += df.loc[idx, 'int']**>> 60.3 µs ± 355 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)**
同样的代码,但是np.arange()
比range()
快 8000 倍**。**
原因如下。
range()
是一个内置的 Python 类范围,仅存储所需数字序列的起点、终点和步长。只有当我们开始遍历序列时,数字列表才会在幕后迭代生成。这可以节省内存,因为我们不需要一直存储整个序列,但由于生成数字的开销,这会影响性能。
np.arange()
则是第三方库(Numpy)功能。在功能上,它们类似于range()
,但是 NumPy 实现在 C 级上执行许多操作,包括循环,这比 Python 的性能好得多。它们针对使用向量进行了优化,避免了很多与 Python 相关的开销。
由于
range()
和np.arange()
做的是同样的事情,我推荐在需要索引循环的时候总是使用np.arange()
。
行循环
行循环遍历熊猫数据帧的行—第 1 行、第 2 行、…、第 n 行。每次迭代时,它返回特定迭代的行索引和行数据。行循环最常见的实现是DataFrame.iterrows()
函数。
for idx, row in df.iterrows():
print(f'row_idx: {idx}, row_data: {row}')**>> row_idx: 0, row_data:
animal bat
animal_type mammals
Name: 0, dtype: object****>> row_idx: 1, row_data:
animal dog
animal_type mammals
Name: 1, dtype: object****>> ...**
由于行循环返回行索引和行数据,这给了我们额外的能力——重命名行数据的能力。根据上面的例子,我们可以将行数据放入一个row
变量中,并通过row['col_name']
访问它。
代替我们通常在索引循环中使用的df.loc[idx, 'col_name']
,现在代码看起来,嗯,可能更简洁一点。但是真正的改进是在我们解包并重命名每个单独的列时开始的,就像这样…
# Better
res = 0
for idx, row in df.iterrows():
res += row['col3']# Even better
%%timeit
res = 0
for idx, (col1, col2, col3) in df.iterrows():
res += col3**>> 4.86 s ± 28.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)**
干净多了,对吧?
然而,就性能而言,行循环落后于索引循环。我们执行相同的逻辑,但是…
np.arange()
耗时 0.0000603 秒。range()
跑了 0.486 秒。DataFrame.iterrows()
跑了 4.86 秒。
好消息是——就像 Index Loop 一样——我们可以通过简单的改变来优化它。用itertuples()
代替iterrows()
。
%%timeit
res = 0
for row in df.itertuples():
res += getattr(row, 'int')**>> 160 ms ± 13.4 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)**
从表面上看,itertuples()
比iterrows()
快 30x 。但是为什么呢?iterrows()
和itertuples()
有什么区别?
对于好奇的灵魂,这里有一篇很棒的文章详细解释了它。TLDR 版本…
iterrows()
返回Series
对象中的行数据。它不保留数据类型,所以在循环时必须执行大量的类型检查。更多的检查=更慢的循环。itertuples()
返回tuple
中的行数据。它保留了数据类型,因此只需要最少的类型检查。更少的检查=更快的循环,快得多。在我们的例子中,itertuples()
比 ~30 倍于。
如果我们需要访问行数据,最好使用行循环而不是索引循环。此外,优先考虑
itertuples()
而不是iterrows()
,因为它要快得多。
列表理解
Python List Comprehension 是基于现有列表的值创建一个list
对象的一种简单而巧妙的方法。它有下面的一般表达式。
List = [expression(i) for i in another_list if filter(i)]
所以,不要…
%%timeit
for (idx, animal, animal_type, _) in df.itertuples():
if animal == 'dog':
animal_type = 'mammals'
elif animal == 'frog':
animal_type = 'amphibians'
elif animal == 'goldfish':
animal_type = 'fish'
else:
animal_type = 'others'df.loc[idx, 'animal_type'] = animal_type**>> 1min 41s ± 393 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)**
我们可以把这些废话浓缩成几行代码。
%%timeit
df['animal_type'] = ['mammals' if animal == 'dog' else
'amphibians' if animal == 'frog' else
'fish' if animal == 'goldfish' else
'others' for animal in df['animal']]**>> 16.7 ms ± 92.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)**
列表理解不仅更紧凑、更容易掌握,而且比普通循环迭代得更快。在这种情况下,列表理解比行循环快 6048 倍!
可悲的是,有一个限制。
请注意,我没有使用与其他部分相同的示例(我们根据int
列的总和进行性能基准测试)?
我不能。
List comprehension 的语法很简单,但是保持简单的意图也限制了它能做什么。例如,我们不能有一个变量在迭代时存储当前值的总和。即使我尝试了一种类似黑客的方式,在一个列表理解范围之外的函数中指定current_sum
,它仍然使用初始值current_sum
,而不是在每次迭代时更新。
old_list = [10, 20, 30, 40, 50]
print(f'old_list is... {old_list}')current_sum = 0
def get_cumulative_sum(x, current_sum):
current_sum += x
return current_sumnew_list = [get_cumulative_sum(x, current_sum) for x in old_list]
print(f'new_list is... {new_list}')**>> old_list is... [10, 20, 30, 40, 50]
>> new_list is... [10, 20, 30, 40, 50]**
总的来说,每个列表理解都可以在 for 循环中重写,但不是每个 for 循环都可以在列表理解中重写。如果你正在写一些复杂的逻辑,避免列表理解。
总而言之,列表理解只是迭代的语法糖。它通常比普通的循环要快,但是应该只用于简单的代码逻辑以保持可读性。
λ函数
在 Python 中定义函数时(通常的方式),我们需要给函数命名。Lambda 是另一种方法,它允许我们创建函数,但是没有名字。
# The usual way
def multiply_two(x):
return x * 2# Lambda function
multiply_two = lambda x: x * 2
这种类型的“无名”函数被称为立即调用函数表达式(IIFE)。它们一创建就被执行,不需要显式调用来调用函数。
用外行人的话来说,生命跑得更快。
但是 Lambda only 创建生命函数,它不执行函数——这就是为什么我们通常看到 Lambda 函数与 Panda 的DataFrame.apply()
一起使用。它将一个函数(lambda 或 not)作为参数,并将其应用于每一行(或每一列)。
# Apply the function to each column.
output = df.apply(lambda x: x*2, axis=0)# Apply the function to each row.
output = df.apply(lambda x: x*2, axis=1)
但是这些功能到底有多快呢?让我们比较一下列表理解和 lambda 函数。
%%timeit
def get_type(animal):
if animal == 'dog':
animal_type = 'mammals'
elif animal == 'frog':
animal_type = 'amphibians'
elif animal == 'goldfish':
animal_type = 'fish'
else:
animal_type = 'others'
return animal_type# List comprehension
df['animal_type'] = [get_type(x) for x in df['animal']]
**>> 21.7 ms ± 140 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)**# Lambda function
df['animal_type'] = df['animal'].apply(lambda x: get_type(x))
**>> 24.6 ms ± 187 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)**
虽然列表理解和 lambda 函数是根本不同的概念,但它们有非常相似的特征…
- 性能—相同。
- 灵活性——两者都更适合简单的代码逻辑。我们不能创建跟踪先前迭代输出的变量。
总结一下,lambda 函数和列表理解是 po-tae-toe 和 po-tah-toh。使用您更喜欢的语法。就我个人而言,我更喜欢列表理解,因为它们读起来更直观。
矢量化运算
矢量化操作就像搬房子。你宁愿…
- 装载一件家具,开到你的新家,卸下,然后重复?
- 把所有东西都装上,开到你的新家,一次卸完?
后者肯定更有效,它非常类似于矢量化运算的工作方式。
在非矢量化操作中,CPU 将单个值加载到内存中,执行计算,然后返回一个输出。它在每次循环迭代中重复这个步骤。但更有意思的是,CPU 的内存可以存储不止一个值——这意味着大部分 CPU 容量都处于闲置状态。
在向量化操作中,CPU 尽可能多地加载内存,这样我们就可以一次完成计算*。开销的节省有助于大幅提高性能。*
非向量化操作不会最大限度地利用 CPU 资源。图片由作者提供。
除了最大化 CPU 容量之外,矢量化运算还经常在用低级语言(例如:C)编写的优化的预编译代码中实现。这些语言本质上比 Python 更具性能,而且它们还避免了数据类型检查等开销。
理论已经足够了——这里有一个简单的矢量化操作。
*# Non-vectorised operation
def calc_result(row):
return row['col1'] +(row['col2'] * row['col3'])
df['result'] = df.apply(calc_result, axis=1)
**>> 984 ms ± 16.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)**# Vectorised operation
df['result'] = df['col1'] + (df['col2'] * df['col3'])
**>> 227 µs ± 1.39 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)***
矢量化运算的执行速度比非矢量化运算快到 4350 倍。代码很直观,读起来也更清晰。
除了对数字执行数学运算,矢量化运算还可以执行非计算运算,对其他数据类型也是如此。Jake VanderPlas 在他的 Python 数据科学手册中分享了一个关于可能的字符串类型矢量化操作的好参考。
*# Two examples of Vectorised Operation for String-type
df['result'] = df['String'].str.extract('([A-Za-z]+)', expand=**False**)
df['result'] = df['String'].str.split('T').str[0]# Two examples of Vectorised Operation for DateTime-type
df['result'] = df['Date'].dt.day_name()
df['result'] = df['Date'].dt.year*
但是,矢量化运算同时加载和运行所有内容这一事实也意味着它只能对每个输入值执行相同的运算。如果我们想将一列除以 2,它必须将该列中的所有值除以 2,没有例外。
换句话说,矢量化运算是最快的迭代方式之一,并且具有最简洁的语法。它们非常适合对整个数据序列应用简单统一的操作。但是如果我们试图应用条件逻辑(例如;if-then),请改用 Lambda 函数或 List Comprehension。
结束语
我希望这能帮助你看到每种循环技术的优点和局限性。“最佳”循环技术总是依赖于您正在实现的逻辑类型。
最后一点,这个比较并不详尽。为了简单起见,故意省略了一些小细节。这里的信息通常是正确的,但是对于不同的用例,你可能会遇到稍微不同的性能(例如:在字符串上矢量化的操作比较慢)。我建议你自己对循环计时,如果你真的想榨出优化的汁液,就使用线条分析器。
在那之前,祝你好运和成功。
人工智能 KPI 的艺术
原文:https://towardsdatascience.com/the-art-of-the-ai-kpi-3d6ed8a03994
创建 KPI 游戏计划
“不是所有能被计算的都有价值,也不是所有有价值的都可以被计算.”-阿尔伯特·爱因斯坦
图片由作者大卫·e·斯威诺提供
有人说数据是新的石油。并不是,正如 2018 年世界经济论坛指出的。石油是一种有限的资源,需要亿万年才能开采更多的石油。一旦原油被提取、提炼和消费,就结束了。
用数据对比一下。正在创建的数据量超出了我们最大的想象——它以各种形状和大小出现,一些公司估计它正在以指数速度增长。事实上,最新的 IDC 全球数据圈预测表明,到 2026 年,这个数字将会翻一番以上。事实是,大量的可用数据对大多数人来说是不可理解的——一个 zettabyte 到底有多大?从某种角度来看,据估计“每天有超过 50 亿客户与数据进行交互,到 2025 年,这一数字将达到 60 亿,占世界人口的 75%。2025 年,每个连接的人每 18 秒至少有一次数据交互。”【1】预计到 2025 年将有 175 ZB 的数据。“如果你能够将整个全球数据圈存储在 DVD 上,那么你将拥有一堆可以让你登上月球 23 次或绕地球 222 次的 DVD。”这是一个很大的数据量,但也说明了 DVD 作为存储机制的低效。事实上,一克 DNA 可以存储大约 215 Pb(0.000215 zetta bytes)。【3】
这就是为什么我更愿意将数据视为一种可再生资源。当然,可再生能源包括安装太阳能发电厂、地热发电厂、生物质设施、水电大坝和风力涡轮机的成本。但是一旦它们就位,释放的能量将会持续很长时间。即使有持续的维护,前期投资也将提供持续的价值。
这种可再生性与 Bill Schmarzo 的书《数据、分析和数字转型的经济学》背后的概念联系在一起。一旦数据通过分析转化为更高的价值,您的组织将永久获得该价值。
数据转换的次数和方式没有限制,它的价值会不断增加。
原因如下。
在考虑 KPI 之前,先了解你的游戏计划
在能源公司投资开发一个网站之前,他们通常会衡量是否符合他们的公司战略。他们进行了大量的研究,以确保基础设施和设备能够获得积极、可持续、可观的投资回报。就风力涡轮机而言,重要的因素包括了解风力资源(最小平均年风速)、获得土地和资金的途径、靠近输电线路以及分区法规。
类似地,在组织开始任何分析和人工智能计划之前,企业领导人需要一个明确定义的业务战略。好的商业策略通常会产生目标和关键结果(okr)。为了实现这些 okr,组织将拥有由一个或多个项目组成的战略计划,每个项目通常都需要人工智能和分析。
“人工智能应该推动商业战略。”【4】
对于任何给定的项目,我总是鼓励企业领导人理解要做出的商业决策,然后从那里开始逆向工作。毕竟,我们不是为了建设风电场而建设风电场。我们建造它们是为了给社会提供价值,并回报我们的公司和市政当局。
没有明确的战略可能会带来灾难性的后果。当你的数据没有你想象的那么好时,你会得出错误的结论并浪费精力。或者,你可能花太多时间收集数据,以至于错过了机会之窗。一些公司过度投资于他们的数据科学团队,而在员工中传播数据素养方面投资不足。
我们与客户的对话从最终目标开始。我们的客户不断向我们展示对业务流程进行尽职调查的价值,以了解如何使用数据和分析来实现他们的业务目标。一切都从目标开始。
分析的关键绩效指标
随着当前经济的不确定性,首席数据和分析官面临着越来越大的压力,他们需要跟踪数据、分析和人工智能计划对业务成果的业务影响。在大多数组织中,这导致了关键绩效指标(KPI)的讨论。
但是我们为什么要关心 KPI 呢?根据麻省理工学院数字经济倡议的访问研究员迈克尔·施拉格的说法,“当应用于数字化转型工作时,KPI 可以推动业务战略并提供独特的竞争优势。”此外,Schrage 确定了企业提高 KPI 回报的七个基本特征。它们是:
1.KPI 有助于领导和管理。
2.KPI 有助于调整整个组织。
3.KPI 提供了客户的整体视图。
4.KPI 因素为决策提供信息。
5.KPI 数据在业务单位之间共享。
6.KPI 不会激增。领导者应该关注 3 到 6 个能够推动增长的 KPI。
7.KPI 充当机器学习(ML)的数据集。
那么,您的组织应该跟踪哪些最佳 KPI 呢?在回答这个问题之前,您的企业领导需要回答以下问题:
你想知道什么?
你需要知道多少?
你为什么想知道这个?
不知道和知道之间的价值或影响是什么?
一旦你知道了这些问题的答案,你就可以开始建立 KPI 来跟踪你的成功。
独立于数据、分析和人工智能,我们发现 KPI 通常涵盖以下维度:
财务 —收入增长、现金流、烧钱率、毛利
客户 —参与率、净推广分数、获取成本、转换率
支持&服务 —周转时间、平均解决时间、SLA 合规性、质量
员工 —流失和保留、满意度、敬业度
治理、风险、&合规性 —流程合规性百分比、审计合规性、非安全事件
数据和分析 KPI
仔细观察,当使用数据、分析和人工智能来交付战略计划时,组织应该跟踪哪些特定的 KPI?也许有。
分析公司 Gartner 最近发布了一份名为“每个高管都应该跟踪的 5 个数据和分析 KPI”、【6】的研究报告,描述了可以应用于数据、分析和人工智能程序的关键绩效指标。它们包括:
数据、分析和人工智能的业务影响
从数据创建到洞察并最终付诸行动的时间
数据质量
数据素养水平
数据、分析和人工智能风险
这些指标将帮助你从你的人工智能程序中获得更多,并避免在你试图使用它时浪费你的数据。
1.跟踪数据和分析的业务影响
这是一个很好的定义指标,因为它回答了这样一个问题:“由于我们在数据和分析方面的努力,指针移动了多少?”几乎组织中的每个人都想知道在数据、分析和人工智能方面的投资是否有回报,这是一个简单的答案。
但是项目可以产生影响,而不需要马上让收银机响起来。考虑几种不同的业务影响:
间接 —你不能将所有基于数据分析的决策与底线结果直接联系起来,但你可能仍然觉得自己在朝着正确的方向前进。或者,您可能还没有发现将数据驱动的决策与业务成果联系起来的正确指标;当您发现这些指标时,业务影响就不再是间接的了。
领先 —一些结果预测其他结果。假设两年前你的员工中有一个较低的净晋升分数,说服你去年增加人力资源部门的人数,而今年的生产率正在上升。一个具体成果导致另一个具体成果是有形的业务影响。
轶事——你不能确定在家工作是你的员工更有效率的原因,但他们中的许多人告诉你这就是原因。很容易衡量疫情之前和期间在办公室度过的时间。但是,由于几乎没有公认的方法来衡量所有的变量,你必须依靠轶事证据来证明在家工作与生产率的提高有关。
直接 —你能得到离科学方法——假设、测量、改变变量、测量、总结——有多近?例如,在线广告有着巨大的潜力,可以利用成千上万的数据点进行 A/B 测试和提炼。
触动——当多个团队、因素和人工智能的努力都在起作用时,很难将一个给定的结果归因于任何单一的元素。我喜欢思考这个问题:我如何测量我房子里的电的价值?没有电,我可能在黑暗中看不到墙,不能给我的设备充电,也不能尽情欣赏我最喜欢的节目。但是量化电力的投资回报率是相当困难的。尽管如此,努力和影响都是可以衡量的,所以,像电力一样,你可以自信地说,数据、分析和人工智能已经影响了某些结果。
鉴于这些不同的层次,你如何报告数据、分析和人工智能的商业影响?以此结构为例:
业务影响
本财年的总目标是:2500 万美元,而 2M 年初至今的实际目标是 2500 万美元
进步
用例 1: 80%正在进行中,进展顺利
用例 2: 20%正在进行,延迟 3 个月
用例 3: 100%完成
2.监控从洞察到行动的时间
随着时间的推移,数据可能会因为以下几个原因而变得陈旧:竞争对手抢了你的先机,客户的品味变了,不可控的经济因素开始起作用。
这就是为什么第二个指标关注您的组织从数据中获得洞察力并将其转化为行动的速度。无论您的出发点是一个明确的业务问题,还是对隐藏在数据中的洞察力的无指导搜寻,这种敏捷性(准备与机会的结合)都是您的竞争优势。
以下是跟踪和报告组织中从洞察到行动所经历的时间的指南:
从洞察到行动的时间:
目前:45 天
年底目标:7 天
流程改进
加快审批流程:完成 80%
提高数据素养:55%的员工接受了培训
加速 IT 参与:完成 10%
3.衡量数据质量
“我们怎么知道这些数据是好的呢?”
每当你通过数据、分析和人工智能获得新的见解时,这是一个合乎逻辑的问题,尤其是如果这种见解是意想不到的。它只能和它所基于的数据一样有效。
报告这一指标的关键不是简单地命名数据来源,而是量化数据当前的可信度,并指出改进的途径:
数据质量
目前:70%的销售预测基于未经核实的数据
EOY 的目标是:10%
流程改进
取消手动对账流程(潜在客户数据):100%完成
培训数据输入员工(客户数据):完成 25%
4.跟踪数据素养水平
当大多数公司听到“数据驱动”时,他们通常会想到“技术”但数据、分析和人工智能的成功更多地取决于技能和人,而不是技术。
这就是为什么在企业的所有职能部门中跟踪和报告贵公司在数据素养方面的进展非常重要。众所周知,受过专业培训的数据科学家供不应求,因此聪明的公司会提高现有员工的技能,以便更快地做出更明智的决策。数据素养培训向人们展示如何从数据中检索、分析和获得见解,然后传达这些见解并将其转化为行动。数据素养从高级数据科学家延伸到公民数据科学家,它是数字化转型的核心。
在报告该指标时,请考虑以下结构:
数据识字率
目前:35%的员工已经完成了该计划
EOY 的目标:100%
进步
采用自助报告和仪表盘
员工对其新技能有用性的调查结果
5.量化数据、分析和人工智能风险
你的一个或多个数据、分析和人工智能项目被滥用的可能性有多大?如果你的工作变得一团糟,变得没有价值,变成了废物,你的公司会面临怎样的风险?
敏感数据通常会违反法规和行业标准。如果您维护着一个客户数据仓库,而有人忘记启用加密,您会在补救措施和声誉方面花费多少时间、金钱和精力?
以下是量化暴露风险的一个角度:
数据、分析和人工智能风险
目前:1700 万美元的数据风险
EOY 的目标:500 万美元
进步
接受道德审查的项目:30%
接受隐私影响评估的项目:80%
接受数据保护影响评估的项目:55%
结论
数据、分析和人工智能是您竞争优势的一部分,是您对客户做出的承诺的一部分,也是您对投资者和潜在客户的感知价值的一部分。
聪明的领导者注重将公司的数据作为战略资源来管理。上面概述的指标旨在让领导者掌握数据的脉搏,防止数据变得混乱。
您可以使用这种自我评估来评估您组织的分析成熟度,接收个性化报告,并获得用例来帮助您开始规划下一个项目的 KPI。
赖因斯尔、大卫、约翰·甘茨和约翰·里德宁。2018.“世界从边缘到核心的数字化。”https://www . Seagate . com/files/www-content/our-story/trends/files/IDC-Seagate-data age-white paper . pdf .
【2】同上。
【3】服务,罗伯特 F. 2017。" DNA 可以在一个房间里储存世界上所有的数据."www.science.org。2017 年 3 月 2 日。https://www . science . org/content/article/DNA-could-store-all-world-data-one-room。
【4】戴维·斯威诺。2022.人工智能:让人工智能为你的企业服务的执行指南 TinyTechMedia LLC。https://www . Amazon . com/Artificial-Intelligence-Executive-Guide-Business/DP/b 09 x4 ktys 4/。
【5】伊斯特伍德,布莱恩。2021.“数字业务需要新的 KPI。这就是它们重要的原因。”麻省理工斯隆学院。2021 年 5 月 11 日。https://MITS loan . MIT . edu/ideas-made-to-matter/digital-business-needs-new-KPIs-heres-why-them-matter。
Buytendijk,Frank 和 Alan D. Duncan。2022."每个高管都应该跟踪的 5 个数据和分析 KPI . "Gartner.com。高德纳公司https://www.gartner.com/document/4014751.
层级可视化的强大力量
原文:https://towardsdatascience.com/the-awesome-power-of-hierarchy-visualizations-466274d16e8
通过将数据视为一个层次结构,将您的数据分析和可视化提升到一个新的水平
叶夫根尼娅·利托夫琴科在 Unsplash 上的照片
注意:上图的灵感来自于一个径向树图(显示在文章末尾)
我们习惯于用表格的方式查看数据。例如,我们看到的大部分数据都在数据库表格或表格应用程序中,如 Excel 或 Google sheet。
但是,以层次结构的形式查看数据对理解数据有很大帮助。此外,大多数数据都有某种层次模式。因此,对数据进行层次可视化有助于将数据转化为强大的洞察力。
在一些数据中,等级是明显的。以销售数据为例,该数据包含区域、国家、城市、销售额等字段。层级非常明显,区域→国家→城市→销售。
然而,让我们从一家电信公司获取一个客户数据集。该数据集包含人口统计信息、服务、账单信息以及客户是否有过交易。
电信客户流失数据集(图片由作者提供)
注意:数据集引用在文章的结尾
在这个数据集中,层次不是很明显。我们倾向于将其视为“平面数据”,我们所有的分析都是在这种“平面数据”假设下完成的。然而,从层次的角度思考可以让你的数据分析和可视化更上一层楼。让我告诉你怎么做。
从枯燥的视觉效果转移到高级层次可视化
层次可视化是最先进的和令人惊叹的视觉效果之一。它们还有助于将数据转化为有力的见解。在上面显示的电信数据集中,您可以将性别→互联网服务→支付方式→总费用视为一个层级。
这里有一些高级层次可视化,看起来不错,也给你强大的洞察力。下面显示的是一个树状图,这是一种可视化层次数据的自然方式。
树状图可视化(图片由作者提供)
与条形图等标准可视化相比,树状图在视觉上非常吸引人。此外,它提供了非常强大的洞察力。例如,我们可以观察到,与其他服务相比,光纤服务收费较高。
您还可以添加悬停效果,如下所示。这对于数据叙事非常有用。
具有悬停效果的树状图(图片由作者提供)
提高您的数据探索效率
假设我们想要开发一个机器学习模型来预测电信数据集中的流失。机器学习中的一个重要步骤是进行数据探索,以了解哪些特征是相关的。
通常的方法是制作输入特征相对于目标变量(流失)的直方图、条形图或散点图。然而,使用这种方法,您拥有的输入功能越多,您将需要更多的可视化。该方法可能会因为大量的特征而变得复杂。
层级可视化具有在一个画面中同时显示多个特征的能力。这是非常强大的,因为您可以提高您的数据探索生产力。
Sankey 图是一个非常强大的层次可视化工具。它可用于同时显示多个特征。下图显示了电信数据集中各种功能的 Sankey 图。
Sankey 的不同级别对应于层级性别→电话服务→互联网服务→合同。层级之间的“流”的厚度是基于流失的。
桑基图(图片由作者提供)
我们可以观察流的厚度,以得出哪些特征与预测流失相关的结论。女性和男性的性别层次的厚度是相似的。这意味着女性搅拌者和男性搅拌者数量相等。这意味着性别特征与机器学习模型无关。
另一方面,特征合约具有不同的厚度,逐月、一年、两年。这意味着大多数买家都是签有短期合同的客户。所以契约是机器学习模型的一个重要特征。特色互联网服务也是如此。
正如您所观察到的,我们只需要一个单一的可视化来进行一些非常强大的数据探索。提高生产力的好方法!
以优雅的方式查看大量数据
大多数可视化显示部分数据。然而,层次可视化能够以非常优雅的方式在单个可视化中向您显示大量数据。
让我用一组汽车数据来说明这一点。这里显示了一个样本数据集。这些数据包括汽车的构造、不同的技术特征,如燃料类型、长度、宽度、车门数量等。以及汽车的价格。
汽车样本数据(图片由作者提供)。
注意:数据集引用可在文章末尾找到
径向树是在单个视图中打包大量数据时非常有效的层次可视化之一。
辐射状树的美妙之处在于它是圆形的。因此,它可以有效地利用屏幕上的所有空间来表示大量数据。
径向树(图片由作者提供)
数据集中大约有 100 多个汽车模型。所有这些都优雅而清晰地显示在可视化中。你也可以把一辆车的不同特征看成一个层级。价格信息也根据节点的颜色显示。这是一种将大量信息打包在一个视觉画面中的好方法。
注:放射树的圆形本质也是文章开头形象的灵感来源
结论
层次可视化有很多用途,从强大的可视化到提高数据科学的生产力。对于任何数据科学家和数据分析师来说,这都是一个很好的补充。
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站,使层次可视化和其他零编码分析。https://experiencedatascience.com
媒体订阅和推荐链接
请 订阅 每当我发布一个新的故事时,请保持通知。
您也可以通过我的 推荐链接 加入 Medium
Youtube 频道
这是我的 YouTube 频道
https://www.youtube.com/c/DataScienceDemonstrated的链接
数据源引用
电信客户数据集
根据本链接https://developer . IBM . com/terms/download-of-content-agreement/中规定的协议,它可用于商业和非商业用途
汽车数据集
数据来自 https://archive.ics.uci.edu/ml/datasets/automobile。
Dua d .和 Graff c .(2019 年)。UCI 机器学习知识库[http://archive . ics . UCI . edu/ml]。加州欧文:加州大学信息与计算机科学学院。
基本比率谬误
原文:https://towardsdatascience.com/the-base-rate-fallacy-b94c0a1b9938
开始抑制行为偏差的最简单和最有效的方法是获得正确的基础利率。本文解释了原因和方法。
查看页面底部的正确答案(来源:维基媒体
基本比率谬误是一种忽略基本比率信息(例如人口或样本的平均值)并专注于特定信息(例如与某个案例或少数案例相关的数据)的趋势(Bar-Hillel 1980、Tversky 和 Kahneman 1982)。基础率谬误有时也被称为基础率偏差或基础率忽视。
如果你玩扑克,假设的赔率不同于适用的赔率,那么你就受制于基础利率谬误——很可能会输。客观赔率是基本利率。
人们经常认为他们所掌握的信息比实际情况更相关。
人们经常认为他们拥有的信息比实际上更相关,或者他们对他们没有的所有相关信息视而不见。这两种情况都会导致基础利率谬误。
“概率忽略”——sun stein(2002:62–63)创造的一个术语,指的是人们过度关注可能性很小的坏结果,例如恐怖袭击——是基础率谬误的一个特例。
其他偏见助长了基础利率谬误,例如独特性偏见,这导致了极端的基础利率忽视,因为手头的案例被认为是独特的,因此其他案例的信息被认为是不相关的。
内部观点、后见之明偏差、可用性偏差、 WYSIATI 偏差、、过度自信偏差和框架偏差也助长了基础利率谬误。
当有一个好的,强有力的故事时,基本率的忽视尤其明显。
当有一个好的,强有力的故事时,基本率的忽视尤其明显。大型、不朽的项目通常都有这样的故事,导致对这些项目的额外忽视。
最后,人们——包括专家——低估了方差。因此,在典型项目中,根据以下公式,基本速率忽略与变化忽略相结合:
基本利率忽略+变异忽略=强凸性
我们研究的初步结果表明,在决策过程中,变异忽略比基本率忽略受到的关注少,这是很不幸的,因为研究还表明,变异忽略通常比基本率忽略更大,对项目结果的影响甚至更大。
正如项目管理铁律所记载的那样,基本比率谬误在项目规划和管理中泛滥成灾。表 1 显示了项目管理中成本和效益的基本费率的最全面的概述,它基于涵盖八种项目类型的 2,062 个项目的数据。
大多数项目都没有得到正确的基础利率——甚至没有接近。
我们看到,大多数项目没有得到正确的基本利率,甚至没有接近,正如在如此高的统计显著性水平上不同于 1(1.0≈正确的基本利率)的平均值所记录的那样(p < 0.0001 ≈ “overwhelmingly high,” in statisticians’ language) it is rarely found in studies of human behavior. The base-rate fallacy is deeply entrenched in project management, the data show. Flyvbjerg and Bester (2021) argue that base-rate neglect results in a new behavioral bias, which we call the “成本效益谬误),这通常会破坏项目的成本效益分析,以至于此类分析不可信。
正如 Kahneman (2011: 150)所指出的,“任何在概率评估中忽视基础利率和证据质量的人肯定会犯错误。”在项目管理内外,基本比率谬误的治疗方法是通过采取外部观点来获得正确的基本比率,例如通过参考类预测,执行预决策,或进行决策卫生学(Flyvbjerg 2006,Klein 2007,Kahneman 等人 2011,2021:312–324,371–72)。
如果你是一名项目策划人或经理,开始控制工作中的行为偏差的最简单和最有效的方法是为你负责的项目设定正确的基本比率。
如果你不了解一个游戏的真实赔率,你就不太可能成功。
希望大多数人能明白,如果你不了解一个游戏的真实赔率,你就不太可能成功。但是这是大多数项目计划者和经理的情况:他们没有得到他们正在玩的游戏的正确几率:项目管理。表 1 毫无疑问地证明了这一点,并为项目管理中的许多重要领域建立了现实的基本费率,规划者可以将其作为正确实施项目的起点。由于篇幅原因,没有包括其他项目类型的数据,但我有数据,它们显示了类似的结果。
…………………
)有关完整参考资料,请参见 Flyvbjerg,Bent,2021,“项目管理中的十大行为偏差:概述”,《项目管理杂志》*,第 52 卷,第 6 期,第 531–546 页。免费下载这里。
页面顶部测验的正确答案:41%。
基本要点:机器学习的统计学
原文:https://towardsdatascience.com/the-basic-essentials-statistics-for-machine-learning-dd9cfeb0e5ef
提高您与数据交流的能力
贾斯汀·摩根在 Unsplash 上的照片
如果你处理数据,统计学知识是很重要的。牢牢掌握一些基本概念对你有效沟通的能力大有帮助。您还将了解收集、分析、做出决策以及有效展示从数据中发现的结果的正确方法。
在本文中,我们将使用来自 sklearn 的乳腺癌威斯康星州数据集来涵盖一些基本的统计学概念。这是一个包含 569 个观测值和 30 个要素的分类数据集。
下面我们已经导入了必要的框架,并将数据加载到内存中。
**import** pandas **as** pd
**import** seaborn **as** sns
**import** matplotlib.pyplot **as** plt
**from** sklearn.datasets **import** load_breast_cancerX, y = load_breast_cancer(return_X_y=True, as_frame=True)
基础知识
一旦建立了一个数据集,首先要做的事情之一就是检查它。这个想法是为了收集关于数据是否包含您所期望的内容的信息,但是这个过程也会产生一些见解,您可以在进行数据预处理时将这些见解作为种子保留下来。
首先要理解的是关于数据的事实。这意味着你要清楚地知道:
- 数据维度— 知道你有多少数据是很重要的。你拥有的数据量可能是使用哪种机器学习算法的决定因素,或者是你是否删除/添加某些功能的决定因素。
- 数据类型— 了解可用数据的类型很重要,因为这将影响我们进行的统计测试的类型。此外,大多数机器学习模型只能处理数字,因此最好事先知道可用数据的类型,以便可以将其转换为适合 ml 算法的格式。
- 缺失数据— 这又回到了了解你已有的数据上。数据可能由于各种原因而丢失,但对于大多数机器学习模型来说,必须事先对其进行处理(即插补或删除)。
让我们看看我们的数据及其维度:
**print**(f"feature dimensions: {X.shape}\n\
target dimension: {y.shape}")X.head()
注意:桌子的一部分被切掉了,这样可以清晰地抓图;作者图片
熊猫用None
或NaN
代表缺失值。我们可以通过在熊猫数据帧上使用info()
方法来检查缺失值和特征的数据类型。
X.info()
所有特征信息;作者图片
Non-Null Count
列显示我们的数据集中没有缺失值;我们的数据中有 569 个观察值,数据集中有 569 个非空值。
Dtype
代表数据类型。该列告诉我们数据集中每个要素的数据类型,我们可以看到它们都是float64
。
描述统计学
统计有两种:描述性和推断性。
推断统计学指的是从数据中做出推断,例如抽取样本以对总体做出概括。另一方面,描述性统计用于更好地描述数据。
当熟悉一些数据时,利用描述性统计很重要,因为这在推断过程中起着重要作用。
需要注意的一些描述性统计术语有:
数数
计数听起来很简单:你拥有的项目或观察的数量。了解计数至关重要。如果你希望正确地评估你的结果,那么你必须清楚地知道在你的数据中有多少项目或观察结果。
平均
平均值是这些数字的平均值;计算平均值就像计算观察值的总和并除以它一样简单,但是观察值的数量。
平均值的公式;作者图片
这很重要,因为它在计算中考虑了人口中涉及的每一个主体。但是,出于同样的原因,对于发现集中趋势来说,这可能是一种糟糕的测量方法,即,偏态分布中的异常值会对平均值产生影响。
标准偏差
标准差衡量一组值的变化量。它的计算方法是将平均值除以数据大小,得到平方差之和的平方根。
标准差的公式;x_i 是来自总体的每个值,μ是平均值,N 是总体的大小,σ是总体标准差;作者图片
我们通常将标准偏差与平均值结合使用来总结连续数据,大约 95%的值落在平均值的两个标准偏差范围内。与平均值类似,当数据明显倾斜或存在异常值时,标准差会受到影响。
最低限度
最小值是指数据集中的最小值。
第 25 百分位
第 25 个百分位数(也称为下四分位数或第一个四分位数)是数据中 25%的值在排列时低于的值。
中位数(第 50 百分位)
中位数是一组数值的中间数。它是将上半部分和下半部分分开的值。它的目的是告诉我们数据集的中心值,当数据有偏差或存在异常值时,它比平均值更有用。
第 75 百分位
第 75 个百分位数(也称为上四分位数或第三个四分位数)是数据中 75%的值按升序排列时低于的值。
最高的
最大值是指数据集中的最大值。
让我们看看如何在数据集中找到这些信息:
X.describe()
关于数据集中特征的描述性统计;作者图片
你也可以看到在某些圈子里讨论的四分位数范围。这是指第 75 百分位(Q3)和第 25 百分位(Q1)之间的差异。
单变量分析
单变量分析可能是统计分析最简单的形式。它包括相互独立地探索数据集的各个要素。
从这种类型的分析中获得的有用信息包括诸如值的范围、集中趋势、偏斜度和组的分布等。我们已经讨论了如何分析值的范围(即最小值、最大值、百分位数和 IQR),但是我们没有过多地讨论偏斜和分布。
让我们先看看这个类的分布,然后我们会讨论为什么分布是重要的。
counts = y.value_counts()plt.subplots(figsize=(8, 5))
sns.barplot(x=counts.index, y=counts.values)
plt.title("Distribution of target label")
plt.xlabel("Target classes")
plt.ylabel("Counts")
plt.show()
分配目标标签;作者图片
前面我们说过,理解数据中可用的数据类型很重要,因为这影响我们对统计检验的选择:出于同样的原因,我们需要知道数据的分布。
对于分类问题,我们需要知道类的平衡程度。高度不平衡的班级的问题可能需要一些手动处理,以帮助我们的机器学习模型更好地预测少数民族班级。
我们也来看看我们的特征分布。
X.hist(figsize=(18, 16))
plt.show()
分布特征;作者图片
直方图是表示数字数据分布的一种很好的方式;我们可以从上图中发现每个特征的偏斜度。这告诉我们关于平均值的概率分布的不对称性的测量——我们也可以学习特征的模态,即峰值的数量。
理解数据的形状非常重要,因为它告诉我们关于数据的大部分信息在哪里。这也很重要,因为某些模型对我们的数据做出假设,如果我们的数据与这些假设一致,就会产生更好的模型。
我们了解数据偏差的另一种方法如下:
X.skew()
五官的歪斜;作者图片
偏斜值为 0 表示数据完全对称。如果偏斜度大于 1 或小于-1,那么我们有高度偏斜的数据。对于介于-1 比-0.5 和 0.5 比 1 之间的特征,我们会说它们是适度偏斜的。
双变量分析
双变量分析是统计分析的第二种最简单的形式。它指的是分析两个变量以确定它们之间的关系。如果两个变量之间有关系,那么就会有相关性。
热图是可视化数据集中关系的一种方式。
plt.subplots(figsize=(18, 16))
sns.heatmap(X.corr(), annot=True)
plt.show()
作者图片
随着对数据中的关系有了更深入的了解,我们可以收集更多关于数据的信息,并知道如果我们知道一个变量的值,预测另一个变量的值在多大程度上变得更容易。
这个列表并不全面,但它是一个很好的入门基础。一旦你已经掌握了这些概念,你可能还想了解其他概念,包括理解峰度、假设检验和置信区间。
感谢阅读。
如果你喜欢阅读这样的故事,并希望支持我的写作,可以考虑成为一名灵媒。每月支付 5 美元,你就可以无限制地阅读媒体上的故事。如果你使用我的注册链接,我会收到一小笔佣金。
已经是会员了?订阅在我发布时得到通知。