Rust 中的数据处理与数据融合(箭头)
Rust 中的数据处理与数据融合(作者提供图片)
Rust 是最受喜爱的语言,据 stack overflow 称,它连续四年高居榜首!有了 Apache Spark 这样的框架,数据处理变得越来越简单和快速。然而,数据处理领域竞争激烈。data fusion(Arrow now 的一部分)是将数据处理引入 Rust 的最初尝试之一。如果您有兴趣学习 Rust with DataFusion 中数据处理的某些方面,我将展示 Rust with DataFusion 中的一些代码示例,并比较 DataFusion 和 Pandas 之间的查询性能。
更新:我最初在data fusion0 . 15 . 0 版本中写了这篇文章。在 DataFusion 和 Arrow 的 1.0.0 版本中,我添加了代码和基准,因此我们可以看到改进。
数据融合
安迪·格罗夫创造了数据融合,他有一些关于构建现代分布式计算的伟大文章,例如如何构建现代分布式计算平台。正如 Andy 提到的,DataFusion 项目还不适合生产环境,
“这个项目是学习构建查询引擎的一个很好的方式,但这还很早,还不能用于任何现实世界的工作。”
该项目于 2019 年 2 月捐赠给 Apache Arrow 项目,更多人开始为 Arrow 版本的 DataFusion 做贡献。
DataFusion 是一个内存查询引擎,它使用 Apache Arrow 作为内存模型。它支持对 CSV 和 Parquet 文件执行 SQL 查询,也支持直接查询内存中的数据。
项目描述可能不会带来太多的兴奋,但由于整个项目都是在 Rust 中完成的,它为您提供了关于在 Rust 中编写分析 SQL 的想法。此外,您可以轻松地将 DataFusion 作为库添加到 Rust 项目的 Cargo 文件中。
初始设置
为了用 DataFusion 测试运行一些代码,首先,我们需要创建一个新的 Rust 包
cargo new datafusion_test --bin
然后在 Cargo.toml 文件中引入 DataFusion 作为依赖项
[dependencies]
arrow = "1.0.0"
datafusion = "1.0.0"
测试数据集
网上有很多可用的数据集, Kaggle 是我经常去探索新数据集的地方之一。我们将使用的电影数据集,该数据集的完整版本约为 676.68 MB。电影数据集具有以下模式
userId: intmovieId: intrating: doubletimestamp: long
为了处理 CSV 文件格式,DataFusion 过去需要我们在这里提供模式,因为 1.0.0 版本引入了模式推断,这不再需要。
let schema = *Arc*::new(*Schema*::new(vec![ *Field*::new(“userId”, *DataType*::UInt32, false), *Field*::new(“movieId”, *DataType*::UInt32, false), *Field*::new(“rating”, *DataType*::Float64, false), *Field*::new(“timestamp”, *DataType*::Int16, false)]));
初始选择(版本 1.0.0)
随着 1.0.0 版本中引入更多特性,DataFusion API 带来了许多激动人心增强。您会看到诸如模式推断、更容易打印结果等改进。代码非常简洁,易于阅读。
DataFusion 1.0.0 的代码示例
DataFusion 与 Pandas 的性能比较
这不是一个公平的比较,因为数据融合是全新的,缺乏大量的优化。但看到 DataFusion 的当前状态并将其与 pandas 等成熟的数据处理包进行比较仍然很有趣。
免责声明:我在我的个人 Mac 13 ( 2 GHz 四核英特尔酷睿 i5 )上运行它来执行基准测试,结果可能会有偏差。因为最初的基准测试是在调试模式下发布的,所以注意到发布模式下的性能有很大的不同。
查询 1:选择前 10 行
**Query**: “SELECT userId,movieId,rating FROM ratings LIMIT 10”**DataFusion**: 0.7s**Pandas**: 6.15s
数据融合在随机存取 10 行上运行得非常快。另一方面,熊猫要慢 6s 左右。
查询 2:获得每个用户的平均评分
**Query**: “SELECT userId, AVG(rating) FROM ratings GROUP BY userId”**DataFusion**: 18.57s**Pandas**: 6.24s
由于熊猫在引擎盖下使用 NumPy,所以看到熊猫方面的良好表现就不足为奇了。在数据融合方面,虽然它比 Pandas 慢,但性能对于执行这些类型的聚合也是合理的。
问题 3:最高评分是多少
**Query**: “SELECT MAX(rating) FROM ratings”**DataFusion**: 15.28s**Pandas**: 5.97s
由于前面的分析查询看起来很慢,因此该查询在数据融合端也会很慢。
最后的想法
正如我们首先讨论的,DataFusion 是 Rust 进入竞争激烈的数据计算市场的一次令人兴奋的尝试。由于 DataFusion 项目仍处于早期阶段,需要更多的贡献,所以在某些类型的查询上看到一些缓慢的性能并不奇怪。此外,如项目自述文件中所述,缺少一些关键特性,因此您必须小心您编写的 SQL 命令,并仔细检查它当前是否受支持。
总的来说,DataFusion 是 Rust 对数据世界的一个有吸引力的开始,尤其是它现在是 Apache Arrow 的一部分,DataFusion 可以轻松利用 Arrow 生态系统的功能。我希望在 DataFusion 的未来版本中看到显著的性能改进和更多受支持的 SQL 特性。
希望这个故事对你有帮助。本文是我的工程&数据科学系列的部分,目前包括以下内容:
数据工程和数据科学故事
View list47 stories
你也可以 订阅我的新文章 或者成为 推荐媒介会员 可以无限制访问媒介上的所有故事。
如果有问题/评论,请不要犹豫,写下这个故事的评论或者通过 Linkedin 或 Twitter 直接联系我。
数据专业定义
数据分析师 vs 数据科学家 vs 数据工程师
最近,我阅读了很多关于定义数据科学家并将其与其他以数据为中心的角色区分开来的尝试。术语“数据科学家”、“数据分析师”和“数据工程师”显然是相互关联的。但是最近我看到了一些关于它们的怪异定义。
定义的重要性
让我澄清一下,这不仅仅是一个没有实际意义的愚蠢的语义诡辩(尽管它肯定是部分的,也许是大部分的)。这个问题经常出现在人们给出职业建议的时候。最近的一篇博文将数据分析师定义为使用 SQL 和 Excel 查询数据以生成报告的人,而数据科学家则是交付软件的人。这是一个建议,数据分析师职位不是数据科学家职位的良好准备,因为数据科学家基本上是软件工程师,数据分析师职位不会给你这种经验。然而,这个前提是基于对这两种角色极其狭隘的定义,这种定义可能只适用于某些公司。
另一个关于这些角色的愚蠢定义的例子来自我看过的 reddit 帖子,有人声称任何经常使用 pandas/sk-learn 的人一定是数据工程师。这种奇怪的说法似乎源于一种想法,即合法的数据科学家处于机器学习研究的前沿,因此必须从头开始编写全新的机器学习算法。
事情是这样的:如果任何人声称对这些角色有一个非常清晰、直截了当的定义,并对其进行了尖锐的描述,他们很可能是根据这些角色在一个公司(或行业)中是如何定义的经验进行推断的。这是因为这些工作本质上有很多重叠。
模糊定义
我会给出这些角色的高层次、模糊(希望没有争议)的定义如下:
数据工程师:专注于构建数据管道的数据专业人士,管理如何将数据从 A 点到 b 点。
数据分析师:专注于生成描述数据趋势/见解的报告的数据专家。
数据科学家:专注于从数据中产生洞察力和预测的数据专家。
请注意,我使用了“聚焦于”这个含糊的短语来避免做出任何强硬的声明。因为在本质上,这些角色中的每一个都与其他角色有很大的重叠,数据专业人员通常需要提取数据或移动数据。数据工程师制作仪表板或报告,或者数据分析师建立数据管道并不罕见。数据科学家有时可能会生成报告,而一些数据分析师会交付代码以投入生产。
任何你能想到的硬线(数据科学家用机器学习,数据分析师用 excel 等。等。)会有很多反例。有很多使用机器学习的数据分析师和使用 excel 的数据科学家。数据工程师可能会不时制作仪表板或进行分析。数据科学家可能需要制作数据管道或 Tableau 仪表板。
尽管缺乏强硬路线,但这些角色是有区别的。这是一个模糊但重要的问题。通常,数据科学家比数据分析师更专业,经验/技能也更多。数据工程师可能对数据库和数据管道有更多的了解,但对统计学了解较少。但是这个领域还没有到你仅仅通过标题就能轻易确定这个角色的范围的地步。
结论
底线是,如果你想成为一名数据科学家,并想知道该走哪条路,获得数据分析师(或数据工程师)的经验可能不是一个坏方法。然而,这取决于你得到的特定职位的具体情况。如果你是一名数据分析师,与业务人员坐在一起,只使用 excel 生成简单的报告,你将无法获得晋升到数据科学职位所需的经验。但如果你与其他数据科学家密切合作,或者被期望学习统计/机器学习来履行你的职责,这可能是很好的体验。我认为我上面提到的博客文章确实在这方面给出了很好的建议——关注一下你将和谁坐在一起,因为这很可能会告诉你你将会学到什么技能。
帮助您起步的数据项目
如果您足够仔细地观察,就会发现有大量的项目需要复制,还有大量未使用的数据源需要分析。
在 Unsplash 上由 Carlos Muza 拍摄的照片
在一个城市中,有数不清的数据项目要做。项目选择可能非常困难,最初的挑战几乎总是找到合适的数据来使用。尽管来自全国各地的其他首席数据官总是愿意提供帮助并分享他们自己的工作示例(来自数据智能城市解决方案、宾夕法尼亚大学穆萨项目和社会公益数据科学的优秀示例),但通常使用的特定数据集与您所在城市收集的数据并不完全相同,或者数据集无法公开共享以供参考。
在这篇文章中,我将详细介绍几个不同的地方,以找到几乎可以在该县任何其他城市复制的数据(或者以您所在的州为例)。这些数据源是健壮的,并且通常非常干净和易于使用。
人口普查
新推出的data.census.gov是一个优秀且易于使用的数据下载资源。人口普查局还构建了 API,使得以编程方式下载数据变得容易。数据在全国范围内以完全相同的方式格式化,并且在许多情况下可以精确到您所在城市的几个街区。
几年前,我们撰写了一份名为《线下的 T14》的报告,分析了锡拉丘兹与贫困相关的人口普查数据和指标。收集和清理数据很简单,我们能够将锡拉丘兹与纽约北部的其他城市进行比较。任何人都可以为他们的城市找到相同的精确数据表,并将他们的数据与锡拉丘兹的数据进行比较,以扩展报告。人口普查的数据非常重要,经常用于城市分析。一个地方的有趣分析可以很容易地复制到另一个地方,只需简单地转换一下县、市或人口普查区的号码。
财产评估资料
我们与约翰·霍普金斯大学的卓越政府中心合作,这是我们与有效城市合作的一部分,以分析财产评估数据,并试图更好地了解相对于可能的财产销售价值,财产评估哪里出了问题。我们从伊利诺伊州的库克县评估办公室获得了这个项目的灵感。了不起的是,库克县的评估数据与锡拉丘兹的评估数据非常相似。
更好的是,在纽约州,几乎每个自治市都使用一个名为房地产系统(或 RPS)的数据库,该数据库为全州的房地产维护一个一致的数据模式。这意味着使用我们的代码,纽约的另一个市政当局可以很容易地复制我们在锡拉丘兹的工作,在他们各自的地区尝试相同的项目。
物联网
也许你真的想进入“智能城市”领域,开始使用来自传感器的数据。这可能是昂贵的,难以实施,有时价值是值得怀疑的。相反,为了测试分析实时传来的传感器数据,像美国地质调查局这样的联邦级机构在许多不同的地方放置传感器,尤其是水道。因此,您可以创建一个查看湖泊或河流水位的项目,然后只需在 API 调用中更改特定的水体即可轻松复制该项目。
同样,国家气象局在全国各地放置天气传感器,通过他们提供的 API 很容易获取数据。像 ESRI 这样的公司使得使用这些数据变得更加容易,而且你很有可能在工作中拥有 ArcGIS 许可。
开放数据门户
美国联邦政府的开放数据门户data.gov,是一个可用数据的宝库。美国许多州也有开放的数据门户(纽约州的是 data.ny.gov 的)。这些开放的数据门户包含关于你的城市的数据。你可能会发现所有拥有酒类许可证的企业或者你所在城市的质量桥梁在哪里。同样,即使您所在的城市可能没有收集这些数据,但这些数据是有用的,可以通过非常简单的特定位置过滤,与州或国家的其他城市或地区进行比较。
结论
即使在应对让市政当局收集的数据更有用的挑战之前,也有大量资源可以从州政府或联邦政府那里找到数据。很多时候,这些数据得到了更好的维护,并且可以很容易地与该国的其他地区进行比较,或者有人可能已经使用您想要复制的相同数据集完成了一个项目。您还可以将这些数据集用作更大分析中的附加数据点,将您所在城市的数据与其他级别政府的数据相结合。
您在哪里使用这些来源的数据复制分析?
纯度如何定义您的数据科学项目
入门
使用一部电影→ 百老汇回归模型来证明对良好数据的需求
一个丢失的数据点(或字母!)能让都与众不同(图片由 Franki Chamaki 、 Unsplash )
你不需要线性回归器来识别数据科学的核心租户之一— 坏数据 导致 坏研究 。这在我与 Metis data science boot camp 的第二个项目中得到了生动的展示,这是一个线性回归模型,旨在根据电影的商业成功预测改编自百老汇戏剧或音乐剧的总收入。在本文中,我们将讨论数据纯度,以及为什么在这项研究中缺乏数据纯度导致了一个还不太适合这个阶段的模型。
(对于任何对螺母和螺栓感兴趣的人,请查看项目回购!)
什么是数据纯度?
数据纯度是我在学习 SQL 时第一次遇到的术语,特指某一列中的值超出了该列的范围。如果你有一列数字代表一周中的某一天,任何大于 7 的数字都会被认为是不纯的。一周有七天,所以任何超过七天的数字一定是由计算或人为错误造成的。这不一定代表异常值(就像“1”在一个充满周末的表格中代表星期一——6 和 7),但更多的是指逻辑上和统计上不可能的数字(-9,或 900)。
当您处理从 web 上搜集的数据时,数据纯度变得尤为重要。网页抓取是一项细致但奇怪的令人满意的任务,最好的描述是编写成千上万个小机器人进入网页并提取数据。这对于一些巨大的数据收集任务也是必要的——例如,从 10,000+ IMDB 页面中抓取信息。这是我项目的第一步,除了其他特点,我还对每部电影的和 国内外总收入 特别感兴趣。这些变量被认为是特征,可能被你的高中科学老师称为自变量*。*
特征可变纯度
对于大多数正片长度的电影来说,这些信息在 IMDB 上很容易获得,而且相当可靠。2017 年翻拍的 美女&野兽 是设计这部网络电影的完美参考,预计 1.6 亿美元的预算与 5.04 亿美元的国内总收入和 12.6 亿美元的国际总收入相比非常合理。然而,一些电影在信息方面并不那么可靠。就拿 1933 年的电影来说,这个灵感来源于轰动一时的百老汇同名音乐剧。这部电影在预算和全球票房之间取得了有趣的平衡:
《第 42 街》是 1933 年最卖座的电影之一,它的表现并不理想。(图片:IMDB)**
你试着向投资者解释一下利润。
当然,42 街在其商业寿命中赚了 1600 多美元。事实上,它已经赚了 1000 多倍,达到了220 万美元。这些错误并不总是被额外的研究纠正;事实上,经常交叉引用的来源有一些明显错误的信息,而 IMDB 有正确的数据。然而,通常情况下,这些信息在任何地方都不存在。有时会有国内毛额信息(但没有预算),有时会有预算信息(但没有毛额)。事实证明,当“砒霜和旧花边”的预算总额不容易获得时,并没有太大的轰动。**
这当然是最重要的问题。在最终的数据集中,几乎一半的只在这两个特征中含有杂质。国内总收入虽然不是舞台改编成功的可靠预测指标,但却是相关性最高的变量,但国内总收入仅适用于约三分之二的报废电影。这项研究受益于百老汇票房的铁证金融数据(感谢这个 Kaggle 数据集,来自百老汇联赛挑剔的周票房记录),但所有的特征变量都来自电影表现。****
确保数据纯度的最简单方法是确保准确的数据存在于您的特征中,并在您的模型中仅使用该准确的数据。几乎每个数据集都存在缺失值,但在相对较小的样本中,你必须确保所有数据的都是准确的。当我意识到我的数据有问题时,我花了几个小时在网上搜索,手动输入那些没有通过网络搜索的值。这很有帮助,但是我仍然有数百个空值。那些空值可以用来做什么?**
目标可变纯度
在从 IMDB 中抓取和清理了 10,000 部电影的数据后,是时候与上面提到的百老汇总数据集(1986 年以来的所有节目)合并了。光是名字就找到了 27064 个匹配!正如你所想象的,这些年来有相当多的对《美女》和《野兽》的改编,包括 2010 年《T2》的黎巴嫩版《T3》,这让一位评论家写下了《让野兽呆在笼子里》。经过几个阶段的缩减,数据集变成了 521 部独特的电影,其中大约一半仍然没有可靠甚至完整的财务信息。我发现了鼠标,这是一个非常方便的算法,通过使用其周围的值来处理缺失值,比使用平均值要复杂和彻底得多。
幸运的是,潮流开始流行起来。涉及电影类型的网络抓取要成功得多,从其 IMDB 页面指定指定的类型。不出所料,本质上是“音乐剧”的电影导致了一些高票房的舞台改编——音乐剧通常反映了每周最高票房的百老汇作品,仅《汉密尔顿》一部就经常占到周票房的近 10%。有趣的是,“冒险”电影似乎取得了相对成功的舞台改编——《李尔王》和《冬天的狮子》被恰当地称为具有成功舞台改编的冒险电影。然而,不知何故《灰姑娘》溜进了这一类,它可能更适合类似的“幻想”或“家庭”类别。
不同类型电影的视觉表现,以及它是如何影响舞台电影的周票房的
这些因素,加上总的和预算的信息(无论是真实的还是由 MICE 算法推断出的),使得一个可服务的模型得以完成。利用线性回归,我创建了一个算法,根据电影的成功来预测百老汇演出的总收入。
残差图,可视化预测值和实际值之间的(巨大)差异
结果可以在左边找到,可能足以让任何有自尊的数据科学家感到不安。这个图表显示了预测值和实际值之间的差异。那些为数不多且影响深远的异常值代表了票房大大低于预期的节目。这些是像猫和歌剧魅影这样的节目——长期播放的作品,在几十年的播放中有机会比像发胶或合法金发女郎这样的音乐剧赚更多的钱——商业上成功的作品,更“正常”地播放 1-3 年。人们可以推断,运行时间的长短是商业成功的一个方面,而“烘焙”这一元素将有助于算法。在更长的时间里赚更多的钱意味着更成功,对吗?事实证明,它确实阻碍了模型试图大量制造目标变量,而不是让平均每周总收入代表节目的成功。
这就引出了我们的第二点——您的目标(预测或相关)变量中的数据纯度可以通过一个简单且无权重的目标来实现。当确定你到底想要预测什么时,最好不要在计算关系之前就加入额外的因素。甚至考虑到消费者价格指数(代表每年的通货膨胀和市场情绪)实际上损害了这个模型。简单的目标创造更有效的模式。对于像运行长度或通货膨胀率这样的因素,试着将它们视为特征而不是目标变量,或者更好的是,实现一个 广义线性模型 ,在这篇有用的文章中 Yuho Kida 对其进行了完美的分解。这一简单但重要的步骤将帮助您的残差图看起来更像下图,表明预测错误的分布信息更丰富。****
一个更好的(尽管不完美)残差图,恢复了对该模型未来的信心
问题的纯粹性——我在解决什么?
这项研究的初衷是预测一部长篇电影的舞台改编的成功。给定有限的样本量,一个感觉不可能考虑的因素是第一个出现的。该数据集有大约 400 部电影在成为百老汇戏剧或音乐剧之前是电影,只剩下 120 部舞台改编电影。简单来说,这是两个独立的问题。电影业历来胜过商业戏剧业(顺便说一下,商业戏剧业仍然是旅游业和经济的发电站,仅在纽约市百老汇区,2018-2019 年就产生了据报道的120 亿美元——这要感谢 Yaakov Bressler 的最新统计数据!).一部电影的广泛知名度往往会导致成功的舞台改编;电影改编只有在百老汇大受欢迎的情况下才有可能被改编。电影到音乐到电影再到商品,如自由和发胶,还有一些因素在这里发挥作用,超出了这个项目的范围。**
*对数据纯度同样重要的是保持问题的纯度——我们的第三个也是最后一个建议是始终 **记住你的“可解决的”问题。*当我努力确保项目的样本量足够大时,继续解决同样的问题变得越来越困难,如果不是不可能的话。这是一个可解的问题,关系确实存在。如果我们花时间去注意数据的不纯,那么数据的纯度通常是一个可以克服的问题。数据科学家必须在服务于他们项目的前端找到支持数据,而不是最终会破坏模型的变化无常和未经证实的数据。
《西区故事》最近的复兴是在百老汇上映前几天,当时新冠肺炎关闭了纽约市
这种模式的未来
随着更多的手动输入,网络搜集之外的广泛研究,筛选副本的更精细过程,以及复杂的广义线性模型,我看到了制作人确定舞台改编的财务可行性的真正有用的工具的可能性。我期待着今年晚些时候重新审视这一模式,并打算整合我从准备这篇博客以及在 Metis 工作中学到的所有知识。
发布这些结果和提示而不注意到这些数据可能在一段时间内没有用处,感觉很笨拙。由于新冠肺炎的感染率和不确定性,百老汇重新开放数据的时间越来越晚,很难知道这种数据何时会再次变得重要。然而,随着我们在 2021 年及以后实现大规模复苏,百老汇每天都将面临这类问题。这一过程得到了加强,而没有受到来自商业剧院的可用数据的威胁。凭借纯粹的数据、开放的思维和对百老汇剧院变革力量的承诺,任何逻辑回归都无法捕捉到,复苏不仅是可能的;迫在眉睫。
如何创建数据质量仪表板
提高数据质量的基石
仪表板的主要目的是提供一个全面的性能快照,这意味着您应该包含大量的细节,而不需要使用太多的向下钻取。它使用过去的数据来确定趋势和模式,这些趋势和模式可以帮助设计未来的流程改进。
数据质量仪表板是一种信息管理工具,它可以直观地跟踪、分析和显示关键绩效指标,突出显示关键数据点,以监控业务、部门或特定流程的运行状况。它们可以定制,以满足企业的特定需求,它显示了您对数据的信任程度。
提高数据质量是一个长期的过程,这种计划的最佳结果是防弹过程,它将在未来为您服务,而不仅仅是及时清理数据。如果你想有效率,你应该让你的过程在形状监视器中变化并控制它,而不是定期执行数据清理练习。纠正数据非常耗时,因此在设计和实施新流程时,请尝试提前考虑。在质量保证上投入时间可以为你节省很多后期工作。
如果您仍然不知道为什么需要可靠的数据质量,请查看本文:
[在这里,你可以选择 10 个让数据质量井然有序的理由。](http://Completeness doesn’t bring to much value to the table. It can be misleading as you can have all the attributes completed but its about the content of the field you are validating and it still can be garbage. Compliance/Validity - This should be the focus when starting a data quality program. Does your data is satisfying business usage requirements? We can split this to : • Format checks ○ This depends on company standards and markets but examples are: § Formats of postal codes (you need to define this per countries) § Minimum and Maximum Number of characters - so there are no 1 character addresses or company names § In the case of a global company you can check if local characters are used in global names • External Reference data compliance ○ Checking external standard can be very beneficial as this will be very usable in reporting but also many of those classifications can be regulatory ones that are mandatory to run business (Customs Tariffs numbers) ○ Are countries codes are compliant with ISO codes standard. § Are Customers classified with SIC codes that exist § Various Product classifications are mandatory in many markets: Wee classification, ETIM, UNSPC, Customs Tariffs. You can get the list valid codes and perform validation of your products • Internal Master Data compliance: ○ For better Strategic reporting companies are implementing internal segmentation or classification of customers products and orders. § You need to create a master data reference table and then validate your records classifications against it. § Various internal business rules can be implemented here but this should be suited to your needs and started with the design phase to address actual issues of organizations: □ Each product need to have assigned active profit center □ Each Client needs to have an active owner. Consistency - is your data the same in different sources? This should be relatively easy if you have Master data in place and each local records are connected to your master data source of truth with a global identifier. Just compare key attributes in different sources. In an ideal world data should be syndicated from source of truth to consuming systems: • Addresses in CRM against SAP against your Master Data Timeliness - is your data up to date • schedule and monitor the data review process. Each records with • defined last edit date should be reviewed by the owner • Is your data provided on time? - Creating new customers is a workflow and you can have different requirements on different steps of the sales process, always consider the business process when monitoring such aspects. ○ For example, newly locally created customers records should be cleared and assigned with Global Customer Id withing 2 working days Correctness/Accuracy - This is the most difficult one as there is no easy way to check that from the IS point of view. How can you check if product weight is 10 kg and not 15 kg? Ideally it
s established through primary research. In practice: • Manual auditing of sample • use 3rd party reference data from sources which are deemed trustworthy • Data Profiling and finding coherence patterns • Manual validation by owner – akin of crowdsourcing It is not possible to set up a validation rule. Instead, you should focus on creating logic that will help discover any suspicious pattern in your data that varies from what you saw in past What to measure : Start with talking to data users and define your top elements and attributes and then the purpose of it. Look into user problems try a design thinking approach to discover opportunities. Define more crucial ones and start measuring them. You can group your KPI` into domains and accountable parties, then calculate quality indexes. Customer Data Quality can be built as a weighted average of attributes quality (Address, Vat, Owner) but also can include processes whenever these records are updated on time or are consistent in different sources. Juggle with weights based on Business Impact Make them SMART Specific - specifically designed to fulfill certain criteria Measurable - KPI Status is constantly monitored and available on the dashboard Accountable - Clearly defined responsible party Relevant - They have an impact on business Time-based - there is time scope within they should be reach My KPI checklist: • The object or its attribute is defined in the metadata tool rulebook or instruction • There is a clear business objective - so people now why are they doing it this is important and it is building data quality awareness across the organization • Clearly accountable function/person/organization • Communication plan • Reviewed with reference team and stakeholders To recap, to improve and manage your data quality you need to know where you are now and where you want to be in a defined period so: • Describe your data with clear definition and rules • Implement a continuous monitoring process and keep systems and processes up to date. • Engage with everyone responsible for the data tell them why and build data quality awareness Increase the accountability for the data by assigning responsible)
斯蒂芬·道森在 Unsplash 上拍摄的照片
这些是主要的数据质量维度:
完整性— 不会给桌子带来太多价值。这可能会产生误导,因为您可以完成所有属性,但它是关于您正在验证的字段的内容,它仍然可能是垃圾。
合规性/有效性— 这应该是启动数据质量计划的重点。您的数据是否满足业务使用需求?首先定义规则,然后根据规则分析数据。我们可以把它分成:
- 格式检查,取决于公司标准、地点和市场,例如:
- 邮政编码的格式(您需要根据国家定义)
- 最小和最大字符数—因此没有 1 个字符的地址或公司名称
- 如果是全球性公司,您可以检查全球名称中是否使用了本地字符
2.外部参考数据合规性
- 检查外部标准可能非常有益,因为这将在报告中非常有用,而且这些分类中的许多可能是经营业务所必需的监管分类(关税号码)
- 根据 ISO 代码标准验证国家代码。
- 根据全球列表,使用有效 SIC 代码分类的客户
- 各种产品分类在许多市场是强制性的:杂草分类,ETIM,UNSPC,关税代码。您可以获得有效代码的列表,并对您的产品进行验证,以便它们能够满足业务需求。
3.主数据合规性—为了更好地进行战略报告,公司正在对客户产品和订单进行内部细分或分类。您需要创建一个主数据参考表,然后根据它验证您的记录分类。这里可以实现各种内部业务规则,但这应该适合您的需求,并从设计阶段开始,以解决组织的实际问题,如:
- 每种产品都需要有一个指定的活动利润中心
- 每个客户端都需要有一个活动的所有者。
一致性— 不同来源的数据是否相同?如果您有主数据,并且每个本地记录都通过一个全局标识符连接到您的主数据源,那么这应该相对容易。只需比较不同来源中的关键属性。在理想世界中,数据应该从真实来源整合到消费系统:
- 根据 SAP 和您的主数据在 CRM 中查找客户地址
及时性— 您的数据是最新的吗
- 安排和监控数据审查过程。每个记录有
- 确定的最后编辑日期应由所有者审核
- 您的数据是否按时提供?—创造新客户是一个工作流程,您可能对销售流程的不同步骤有不同的要求,在监控这些方面时,请始终考虑业务流程。
- 例如,本地新创建的客户记录应在 2 个工作日内被清除并分配全球客户 Id
正确性/准确性 —这是最困难的一个,因为从 is 的角度来看,没有简单的方法来检查这一点。你怎么能检查产品重量是 10 公斤而不是 15 公斤?理想情况下,它是通过初步研究建立起来的。实际上:
- 样本的人工审核
- 使用来自可信来源的第三方参考数据
- 数据剖析和寻找一致性模式
- 所有者手动验证——类似于众包
无法设置验证规则。相反,您应该专注于创建逻辑,这将有助于发现您的数据中与过去不同的任何可疑模式。
你应该测量什么:
从与数据用户交谈开始,定义你的主要元素和属性,然后定义它的目的。
调查用户问题,尝试用设计思维的方法来发现机会。
定义更重要的,并开始衡量它们。
您可以将 KPI 分组到业务领域和责任方,然后计算质量指数。
客户数据质量可以构建为属性质量(地址、增值税、所有者)的加权平均值,但也可以包括这些记录按时更新或在不同来源中保持一致时的流程。基于业务反馈校准度量迭代的权重。
让他们变聪明
特定—专为满足特定标准而设计
可衡量—状态受到持续监控,并可在仪表板上查看
负责——明确定义的责任方
相关—它们对业务有影响
基于时间—在他们应该到达的时间范围内
我的 KPI 清单:
- 对象/属性在元数据工具规则手册或说明中定义
- 有一个明确的业务“为什么”,所以人们现在为什么要这样做这很重要,它在整个组织中建立了数据质量意识
- 明确负责的职能/人员/组织
- 沟通计划
- 与参考团队和利益相关者一起审查
概括地说,为了提高和管理您的数据质量,您需要知道您现在所处的位置,以及在规定的时间段内您想要达到的位置,因此:
- 用清晰的定义和规则描述你的数据
- 实施持续的监控流程,并保持系统和流程最新。
- 与负责数据的每个人接触,告诉他们原因,并建立数据质量意识
- 通过分配负责人来增加数据的责任
在 Twitter 上关注我,或者订阅我的博客以获得数据质量主题的更新。
原载于 2020 年 11 月 2 日 https://www.solution-tailor.com。
数据质量、数据运营和信任爆炸半径
缺乏信任将极大地影响您实现数据驱动的努力,除非您主动限制数据质量事件的爆炸半径。
动摇某人对数据的信任只需要一个小问题,但要让他们意识到这只是一个问题,而不是更大的问题,需要付出大量的努力。影响的差异是问题的“爆炸半径”,即使是最成熟的数据组织也可以更好地将其最小化。
图片来源:美国空军( via 维基媒体)
根据 Gartner 的数据,尽管近 98%的组织正在对其成为数据驱动的能力进行重大投资,但数据质量仍然会导致组织平均每年损失 1500 万美元的不良决策,根据 Experian 的数据,会影响 90%的公司。虽然我在之前的文章中报道了一些数据质量的恐怖故事,但是数据质量问题拖垮整个公司的情况并不常见。此外,现在有许多现代工具( Soda 、 ToroData 、 Trifacta )和实践(主要是 DataOps )使得数据质量最佳实践的应用比以前容易得多。
然而,我不认为我会冒险说数据质量永远不会成为一个解决的问题。我还认为,到目前为止,数据质量问题的最大影响不是基于糟糕数据的决策的直接影响,而是整个组织对数据和为数据提供服务的数据平台的信任丧失。特别是在那些过去已经受到 糟糕的数据质量影响的组织中,经常反复地,并不需要重大事件就能让“又来了”的消息在整个组织中回响。
事实上,IBM 的一项研究表明,整整三分之一的企业高管不信任他们的数据,他们认为平均 32%的数据是不正确的。要估计回归直觉决策的成本几乎是不可能的,但它可能非常重要。这次来自 Forrester 的另一项研究发现,由于缺乏信任,三分之一的数据分析师花费超过 40%的时间逐个领域地审查数据的质量问题。这些时间成本很可能没有计入上述 1500 万美元的硬性成本。
信任爆炸半径是多少?
爆炸半径(名词)——爆炸发生时受影响源的距离。
来源:维基媒体原子弹的爆炸半径
子弹和炸弹的区别在于影响范围。虽然一颗子弹实际上只能消灭一个目标,但一枚炸弹的爆炸可以夷平一座拥有数百万人口的城市。炸弹的冲击力与其爆炸半径成正比。近年来,术语“爆炸半径”在 IT 架构领域越来越流行,团队致力于尽量减少因单个系统故障而离线的额外系统的数量。
回到数据质量的话题,我很难相信一个普通组织中有三分之一的数据是坏的。更合理的数字可能是 10%*左右,尽管这可能会因数据领域的不同而有很大差异。10%的实际坏数据和 32%的假设坏数据之间的 22%的差距就是我定义的信任爆炸半径。
信任爆炸半径—单个数据质量问题破坏的额外信任量
因此,TBR 是对组织中不良数据量和整个组织中不信任数据量之间差距的度量。一旦一个人经历了动摇其信任的事件,恐惧、不确定性和怀疑会通过交流迅速传播给其他人,这是一个简单的事实。
正如我们在过去几个月里所了解到的,仅仅依靠遏制的策略注定要失败,并且很可能会产生很大的爆炸半径。不幸的是,几乎所有关于数据质量的文章都集中在预防、检测和快速纠正数据质量问题上。相反,如果我们接受数据质量问题总是会出现,尽管我们尽了最大努力来防止它们,并从预防的态度转变为预防的态度*和爆炸半径最小化,*我们将在推动数据驱动的文化方面更加成功。
信任爆炸半径 = 数据质量问题的数量在没有上下文的情况下关于问题的对话的数量之前对数据质量的负面体验的数量
如何最小化信任爆炸半径
几年前,我负责为一个处理大规模 IOT 数据的非常复杂的系统开发一个故障模式和影响分析(简称 FMEA)。我发现系统方法在提高系统的可靠性方面是有效的。作为背景,FMEA 最初是在 20 世纪 50 年代由美国军方开发的,用于核武器计划,然后被负责复杂系统的其他组织大量采用(NASA、飞机&汽车制造、半导体、医疗保健等)。它首先详细说明系统的组件(或流程步骤)和子组件,然后列出每个子组件可能出现故障的方式,最后检查故障的下游影响,并推荐一种控制机制来防止或最小化每个故障的影响。
举一个汽车行业的简单例子,内燃机的一个潜在故障点是正时皮带,如果它断裂会导致灾难性的发动机故障。正时皮带本身只是一条简单的橡胶带,带有像齿轮一样的齿。更换一个只需要大约 50 美元。如果一颗牙齿磨损了,它可能会脱落。这会导致发动机发出轻微的滴答声,这可能很烦人,但肯定不是灾难性的。然而,它也具有在缺齿点增加皮带磨损的副作用。如果磨损持续太长时间,更多的齿将失效,导致发动机中的气门和活塞之间更严重的正时失调,熄火。过一会儿,皮带会突然断裂,导致发动机随机启动阀门和活塞,字面意思是从内部自我毁灭。为了避免这个问题,所有的车辆都应该在 60 公里左右进行定期维护,以防止问题的发生。此外,当发动机中的传感器检测到正时皮带磨损的潜在迹象时,检查发动机灯亮起。关键是及早发现并解决问题,以避免发动机内皮带故障的更大爆炸半径。
虽然这些技术是为影响具有某种确定性的机器设计的,但它们为分析复杂系统提供了有用的指导,该复杂系统是一个正在经历向数据驱动转变的组织。
从数据和分析组织的主要职能开始:*使企业能够从其数据资产中获得最大价值,通常是通过帮助数据驱动的决策制定,*我们开始列举失败。
- 数据产品中包含一条无效数据,导致做出无效决策。例如,对于一小部分客户来说,客户满意度计算不正确,看起来好像不满意的客户非常满意。这导致你的公司向他们发送额外的交叉销售广告,而不是跟进,进一步疏远这些客户。
- 数据产品的消费者检测到报告的数据点之一无效(即,与之前相同的场景,但是营销中的某人在发出广告之前注意到了该问题)。
- 多个数据产品以不同的方式表示相同的概念,消费者不知道哪一个是正确的。例如,运营报告将活动客户定义为上周使用过系统的客户,而计费报告将其定义为支付订购费用的客户。
- 数据产品的消费者不知道导致源和目的地之间转换的需求,并认为它是不正确的。例如,一份营销报告正确地过滤掉了所有选择退出沟通的客户,但是一位选择退出的客户的客户成功代表认为该报告一定是错误的,因为他们的客户不见了。
有许多潜在的失败,我们无法在一篇文章中涵盖。关键是,在每一种情况下,初始故障点的影响都不是很大。然而,如果不加以控制,它们会引发一连串的问题,造成巨大的影响。让我们看一看每一个,看看如果不加检查会发生什么
利用 C4 有效地塑造信任爆炸
来源:维基共享资源
为了不离题并使这些更容易记住,我将称它们为 C4,它有一个有趣的特性,可以用来制作聚能射孔弹。C4 技术 : 捕捉、编目、纠正和治愈,类似地塑造数据质量问题的爆炸,使其更有生产力,同时最小化爆炸半径。
捕获 —这是指由具有采取以下步骤的知识和权限的人捕获问题。理想情况下,在任何数据消费者意识到这些问题之前,可以通过在您的数据平台中进行监控来检测这些问题。然而,不可能捕捉到所有问题,正如上面的例子所示,一些未被发现的问题会导致爆炸半径的急剧扩大。因此,让您的数据消费者有发言权是至关重要的,并且他们相信为什么他们使用他们的发言权来提出问题,问题将会得到解决。这使他们能够以富有成效的方式发泄他们的沮丧,而不是与同样无力改善情况的同龄人一起开一个回音室。首先,确保组织中的每个数据消费者都可以访问一个地方来提出数据问题。同样重要的是,他们还必须知道如何使用这个工具。最后,他们必须看到他们的问题得到了解决,这将导致剩下的步骤。
目录 —一旦发现问题,让那些将要受到影响的人知道是非常重要的。在一个害怕承认失败的文化中,这通常是违反直觉的。如果目标是让数据消费者的默认思维模式保持信任而不是不信任,那么最好是告诉人们什么时候有什么需要担心的。回到正时皮带的例子,如果不清楚正时皮带何时出现故障,也没有检查发动机灯告诉你何时该担心,你会默认总是担心你的发动机可能在任何时候出现故障,并对你的汽车的可靠性失去信任,并告诉很多人这件事来发泄你的沮丧。
让人们在日常工作流程中能够看到数据问题的文档是非常重要的。如果您提供一个一致的位置来查找给定数据产品的数据质量说明,这是最容易的。例如,让您的数据消费者通过您的数据目录启动他们的 BI 报告,这为您提供了在他们打开报告之前在报告页面上显示任何数据质量警告的机会。然而,许多人可能会将他们最重要的报告加入书签,然后直接启动它们。这意味着您需要将警报直接推送到报告上(最好是在一致的位置),以引起他们的注意,并将他们引回到目录中的详细信息。显然,这种技术只有在数据管道非常可靠的情况下才有效。如果检查引擎灯每个月都亮,你也不会认为你的车很可靠。
编目什么应该被信任和记录什么现在不应该被信任同样重要。这实际上是检查发动机灯的弱点之一。可能是油箱盖没盖紧,或者你的引擎在接下来的 10 分钟内就要自我毁灭了。因为你不知道,你的反应必须从最坏的情况出发。相反,如果你可以打开一个应用程序,看看哪些引擎检查通过了,哪些导致了警告,那么你就能够做出明智的决定,下一步该做什么。在 DataOps 领域,这涉及到列出在部署到生产中之前为验证给定管道而运行的数据测试,以及那些为确保数据符合关键预期而持续运行的测试。在您的数据测试中使用 BDD 风格命名,并在数据质量注释和警告旁边显示测试状态,让您的数据消费者能够基于对数据当前状态的深刻理解来决定做什么。
正确— 对数据的当前状态(好的和坏的)进行编目和提升,有助于将数据消费者的默认心态从不信任转变为信任。需要的最后一份文件是关于*正在采取行动让事情变得更好的文件。*通过这种方式,使用工作单系统来跟踪数据问题比简单地将问题直接记录在目录中更有效。一旦你让数据消费者相信你是透明的,他们就不太可能通过询问组织中的所有人来确定他们上周发现的问题是否已经得到纠正,从而形成一个爆炸半径。
我的循环图显示了解决数据问题的行动和更新
这将我们带到最小化信任爆炸半径的下一个阶段,即快速纠正问题。这里的关键是超越简单地纠正问题,增加对问题已被纠正的信任。考虑下面的信任爆炸半径场景:一位营销分析师发现客户地址有问题,并询问 5 个人该向谁报告,然后向负责客户地址管道的数据工程师发送一封电子邮件。该工程师意识到他的最新更改导致了格式问题,修复了该问题,并通过电子邮件通知营销分析师该问题已经解决。现在,尽管分析师认为地址是正确的,但她与之交谈的另外 4 个人不知道该修复(甚至不知道问题的细节),并且很可能不太信任地址数据。
如果您的数据平台提供了前两个 Cs 所涵盖的功能,并且您的数据团队实践了测试驱动的开发,那么这四个人将能够看到在工程师修复问题时添加的新测试正在通过,并且没有针对地址数据的未结票据,从而恢复他们的信任,而不需要与数据工程师直接对话。
解决— 最后一步是通过首先解决导致数据问题的系统问题来阻止问题再次出现。这绝对是最复杂的事业,但也有最高的回报。
对票证执行趋势和根本原因分析,以发现系统性问题
将问题单与“系统修复”单联系起来,后者通常是新数据平台功能的开发,但也包括数据运营运营模式中的流程改进,可在开发生命周期的早期发现问题
我的其他文章中有这类改进的例子:
- 基于模式测试在主数据中应用的标准数据质量规则(参见Data ops 文章)。
- 改善控制数据捕获的分析团队和应用程序开发团队之间的协作(有关更多详细信息,请参见关于为数据所有者赋权的文章)
- 创建数据催化剂角色,以增加数据产品开发团队在源数据方面的详细知识(参见使用数据催化剂进行数据转换一文)
提供对这些类型的改进的可见性并不像纠正数据问题或捕获数据测试那样简单,但也不是不可能的。您可以从以一种可以与数据目录和票据相互链接的方式记录您的数据流程开始。使用可以直接嵌入到目录中的灵活的流程图表工具,可以将流程更改与它们要解决的系统数据问题一起记录下来。然后,你可以在新的工作方式上运行微型学习会话,记录它,通过人工智能转录运行它,并将记录和转录嵌入目录中。
您可以使用相同的技术来获取和嵌入关于正确使用目录查找上述信息的培训,并将其放入您的目录主页。为了推动文化变革,您可以显示直接在数据目录中提出的数据问题的总体趋势,该数据目录充当“所有数据的大门”。由于此 KPI 呈下降趋势,请突出显示您的组织对推动改进的数据方法进行的系统性修复。在此基础上,您可以启动一个数据管理计划,更直接地激励人们改进数据文档和质量。
结论
到目前为止,几乎地球上的每个人都上了一堂流行病学的课。很少有人认识到,对其组织投资的数据资产的不信任会以非常相似的方式传播。利用这些知识,我们可以将数据策略透镜应用于医疗社区中使用的相同技术,以确定如何应对。
一如既往,我愿意与任何对提高组织从数据中提取价值的能力充满热情的人讨论这些想法。
我找不到一项研究对组织中实际上糟糕的数据百分比进行了严格的报告。最接近的是 2007 年 Gartner 的一项研究指出 27%的财富 1000 强公司的数据是“有缺陷的”,但他们对有缺陷的定义包括重复数据。让我们假设这种趋势一直持续,重复数据占 27%中的 17%,剩下 10%是真正的坏数据。这意味着,平均而言,信任差距是坏数据量的近两倍。
IBM Watson 知识目录中的数据质量维度
入门
理解 IBM Cloud Pak 用于数据和 IBM Infosphere Information Server 的标准数据质量维度。
图片由 saulhm 从 pix abay(【https://pixabay.com/users/saulhm-31267/】T2)拍摄
在之前的文章中,我详细解释了 IBM Cloud Pak for Data 和IBM info sphere Information Analyzer如何为每个分析的数据集计算统一的数据质量分数:
简而言之,数据集的数据质量分数是通过应用寻找不同类型的数据质量问题的算法来计算的。每当数据不满足给定的期望时,就识别出数据质量问题。可以针对数据集的单个单元格、完整的行、列或整个数据集报告此类问题。数据质量问题的类型在用户界面中显示为“数据质量维度
沃森知识目录中的数据质量维度结果
IBM 随其产品发布了一个标准数据质量维度列表。在 Watson Knowledge catalog 或 Information Server 中分析数据集时,会自动应用这些现成的维度。这可以在深入研究所选数据资产的数据质量的数据质量项目中完成,也可以作为数据发现和摄取过程的一部分完成——请看我以前的文章“用 IBM Watson 知识目录解锁您的数据”以了解这种发现过程是如何工作的。
在这篇新文章中,我将详细解释这些标准数据质量维度中的每一个,它们测量什么以及它们执行起来有多昂贵。
数据质量维度的成本
并非所有的数据质量维度都同样昂贵。某些类型的数据质量问题在逐行的基础上很容易识别,其他一些可能需要更多的工作和多次通过数据,因此可能对分析时间产生不可忽略的影响。
就性能而言,数据质量维度的成本主要取决于识别所搜索的数据质量问题所需的数据传递次数。一些数据质量维度不需要读取数据,因为它们可以重用在数据质量分析发生之前由数据分析预先计算的统计信息。大多数数据质量维度需要对数据进行一次遍历。有些人需要读取整个数据集来计算一些统计数据,然后再次对所有记录进行第二次检查,以便识别问题。
数据质量维度的范围
正如我在上一篇文章中所解释的,数据质量问题可以针对单个值、完整的行、完整的列或整个数据集进行报告。这就是我在本文中称之为数据质量维度的范围。
维度的范围越细,计算的数据质量分数就越准确,因为可以避免重复计算问题。
为了说明这一点,假设在同一列中有 10%的数据类违规和 10%的格式违规。如果这两个数据质量维度的范围在列级别,也就是说,如果问题是针对整个列报告的,则无法确定 10%数据类违规中有多少与格式违规的值相同。这意味着该列的数据质量分数将被计算为 90% * 90% = 89%。
实际上,这两个维度可以在价值层面上确定问题。最有可能的情况是,当一个值没有预期的数据类时,它也没有预期的格式,因此许多违反数据类的值可能与违反格式的值相同。
在这种情况下,由于错误值就是错误值,无论它有多少问题,数据质量分数都会被计算为 90%,这表明 10%的值有问题。
这个例子表明范围值的数据质量维度是最准确的。然而,对于一些问题来说,确定有问题的精确值是不可行的或者太昂贵了。因此,一些数据质量维度仅在列级别报告它们的问题。
现在,让我们来看看每个单独的数据质量维度。
没有任何数据传递的维度
重复值-范围:列
此维度在应该只包含唯一值的列中查找重复值,例如在主键列中。由于作为数据质量分析的一部分,搜索重复项的开销太大,因为这需要对所有列进行排序,所以该维度重用了在数据分析(列分析)期间预先计算的统计信息。这样做的好处是,维度不需要再次查看数据,但它只能报告列作为一个整体出现问题的频率,而不能确定哪一行受到了问题的影响。正因为如此,不排除影响相同数值的多个问题被重复计算。
为了找出包含重复项的确切行,您可以使用数据规则。
需要对数据进行一次传递的维度
数据类违规-范围:值
此数据质量维度报告与其列的推断或选择的数据类不匹配的任何值。
但是您需要知道,并不是所有的数据类都可以用于在值级别识别域违规。与数据质量问题一样,数据类有一个范围来指示它们是适用于值级,还是仅适用于列级。
在值级别工作的数据类(例如基于正则表达式或值列表的所有数据类)可以为每个测试值返回完全匹配或不匹配的决策,因此可用于在数据质量分析期间验证值。
在列级工作的数据类——例如 person name 之类的数据类——只计算列作为一个整体属于给定类的置信度,但不能测试任何单个值。
由于这个原因,如果分配给列的数据类的范围是列,则数据质量分析将忽略该数据类,并且不会在该特定列上搜索数据类违规。
您可以通过查看其定义 Watson 知识目录来检查数据类的范围:
查看 Watson 知识目录中数据类的范围
数据类型冲突-范围:值
此维度计算与其推断或选择的数据类型不兼容的列的值:
在数据分析期间,列分析确定每个列的推断数据类型。推断的数据类型独立于源中定义的数据类型,表示最具体的数据类型,它可以包含列的所有值。
为了说明这个概念,让我们想象在 SQL 数据库的表中定义的列,数据类型为 VARCHAR(255)。该数据类型是在数据源上定义的数据类型,但实际上,列的值可能包含编码为字符串的日期。在这种情况下,根据值的格式,推断的数据类型可以是日期或时间戳。
再比如,如果同一列包含字符串,但最长的字符串只有 40 个字符长。那么推断的类型将是 VARCHAR(40)。
如果列包含不同类型的混合,例如日期、字符串和数字,那么推断的数据类型将是可以表示所有这些值的最具体的类型,在本例中是 VARCHAR(n),n 是最长值的长度。
用户可以覆盖推断的数据类型,以指示应该使用哪种数据类型。例如,如果选定的数据类型设置为 DATE,则任何不是本机日期值或者不是可被解析为日期的字符串或数字的值都将被视为违规。
格式冲突-范围:值
此维度计算某一列的值,该列的格式已被用户标记为对此列无效。
这意味着该维度将只查找已识别格式被用户声明为无效的列的问题。为此,您需要在数据质量项目中打开列的分析结果,并转到“格式”选项卡以查看所有已识别格式的列表。然后,您可以进入编辑模式,将不需要的格式标记为无效。
编辑列的有效格式列表
通过这样做,您可以在列上添加一个约束,指示哪些格式是有效的,哪些是无效的。这将使当前数据质量分数无效,当重新计算时,该分数将反映基于新约束的结果。
不一致的大写-范围:值
该维度首先检查列的大多数值是否遵循字符串中关于大小写用法的任何约定。列的大写规则可以是下列规则之一:
- 大写:数值只写大写。比如:
这是一个值 - 小写:数值仅以小写书写。例如:
" 这是一个值" - 名称大小写:数值中每个单词的第一个字母都是大写,其余的都是小写。例如:
这是一个值 - 句子大小写:每个值的第一个字母大写,其余小写。比如:
这是一个值 - 任意大小写:大小写混淆,无法识别规则。比如:
这是一个值
如果列中的大多数值使用这些大写规则之一,则不遵循相同大写规则的值被视为数据质量问题。
如果数据在使用的资本化规则中没有显示任何强模式,那么分析将假设资本化不受约束,并且不会搜索任何该类型的发行。
缺少值的表示不一致—范围:值
如果在同一列中同时发现 null 值和空值或仅包含空格的值,则此维度会报告问题。
缺少值-范围:值
此维度在不应该包含缺失值的列中搜索为 null 或空的值。
您可以在列分析结果的“列属性”选项卡中设置标志,指示对于给定的列,缺失值是否可接受。
指定列中是否允许缺少值
请注意,与 UI 所建议的相反,这不仅仅是关于空值,而是一般的缺失值,也包括包含空字符串或仅包含空格的值。
如果没有指定约束,那么分析将通过查看列中缺少的值的数量来尝试推断列的可空性标志。如果缺失值(空值和空值)的数量低于可空性阈值,则该列被视为不可空,任何缺失值或空值都将被视为数据质量问题。如果该列包含的缺失值多于阈值所允许的值,则分析将假定缺失值在该列中是预期的,并且默认情况下不会报告问题。
默认的可空性阈值是 1%,这意味着只有包含少于 1%的缺失值的列才被认为是不可空的。您可以在项目的数据质量设置中设置此阈值。
值超出范围-范围:值
仅当指定了列的最小和/或最大允许值的范围约束时,才使用此维度。
您可以通过打开列的分析结果并在“Column Properties”选项卡中进入编辑模式来定义这样的约束,如下一个屏幕截图所示。您可以设置最小值和/或最大值。任何超出指定范围的值都将被报告为有数据质量问题。
指定列的最小和/或最大允许值
违反规则-范围:值
数据规则和质量规则是定义自定义维度的最简单方法。
数据质量分析将考虑所有数据规则或质量规则,这些数据规则或质量规则被绑定到所分析的数据集的列,并且不需要与其他数据集的任何连接操作。如果规则与这些标准匹配,则在数据质量分析期间,将在分析的行上评估其逻辑。
每当数据集的一行没有通过规则时,将为绑定到给定行的规则的每一列报告数据质量问题。每个规则在其自己的数据质量维度下报告。
请注意,没有必要单独运行数据规则来评估它们的逻辑,作为数据质量分析的一部分。包含规则的逻辑作为对数据集的约束将是自动的。
需要两遍数据的尺寸
可疑值-范围:值
这个数据质量维度不太容易解释,但同时它也是一个相当强大的维度。
基本上,这个维度搜索看起来不像与同一列的其他值属于同一个域的值。在某种意义上,这类似于搜索异常值,但是异常值的概念不仅扩展到值本身,还扩展到它的格式和属性。
为了更好地解释这是如何工作的,假设您看到一个打印的电话号码列表。如果不看单个的值,您很有可能一眼就认出这些值是电话号码,因为它们看起来就像电话号码。
人脑不会评估每一个单独的值,但会提取一些关于格式的模式,即它们主要由数字组成的事实,值的长度等,并将这些模式与我们从过去了解到的电话号码通常的样子进行匹配。
与此同时,如果在一长串电话号码中间,有一个值不是电话号码,而可能是电子邮件地址,人类大脑会立即发现其中一个值显然是错误的,而不必读取任何单个值。
在这个简单的例子中,怀疑值维度试图模拟大脑在做什么。为此,它首先为一个列计算一个域指纹,该域指纹包含似乎表征值域的已识别模式。一旦指纹被计算出来,它会对数据进行第二次处理,试图识别出哪个个体值似乎与这些识别出的模式有很大偏差。
该决策中考虑的值的属性是多种多样的,并且根据数据的性质而不同。它可以考虑值的格式、值中更频繁出现的标记、关于长度、标记数量、值中发现的字符类型、值的二元模型分布等的各种统计数据。
在下面的示例中,第一列中突出显示的值将被检测为可疑值,因为它的二元模型分布和令牌数与其他值不一致。在第二列中,该值将被标记为可疑,因为它是包含字符串的列中的一个数字。在第三列中,突出显示的值将被标记为可疑,因为它是数值异常值。
可疑值示例
此维度可用于检测不明显的数据质量问题,如果指向这些问题,人们将能够看到,但这些问题可能隐藏在许多行的中间,因此可能难以识别。
这个维度的缺点是成本更高,因为它需要一遍学习什么应该被认为是预期的,以及一遍检测可疑值。
您还应该理解的是,当一个值被认为可疑或不可疑时,这个维度不提供确定性规则。它基于概率和大多数值的比较。这当然可能会产生误报或遗漏错误的值,就像人脑可能会出错一样。
相关列中的可疑值—范围:值
这个维度是对前一个维度的补充。虽然“可疑值”维度仅查看同一列的值在其列中是否是同质的,但此维度查看单行中的值组合放在一起是否合理。
为此,它首先在第一遍中搜索列之间是否有任何相关性。如果一列的值可以由另一列的值确定,则这两列是相关的。例如,如果一列包含组合一个或多个其他列的运算结果,则可能是这种情况。如果一列对另一列具有包含依赖关系,也可能是这种情况。
作为一个具体的例子,假设您有一个数据集,其中一列包含城市名,另一列包含州名。对于任何给定的城市,通常只有一个州。这意味着这些列之间存在相关性。该分析可以从数据集的记录中学习关联规则,并识别城市和州似乎不匹配的数据质量问题,因为它们的组合会违反关联规则。
简而言之:如果大多数以旧金山为城市的行也以加利福尼亚为州,那么一行{旧金山;Arizona}将被报告为可疑,因为这是一个值的组合,它破坏了在查看所有行时在两列之间检测到的关联规则。
与前面的维度一样,这种方法基于统计而不是布尔规则,可能会产生误报。计算这个维度也比其他维度更需要内存——尤其是在具有大量列的数据集上——因为在分析期间需要计算每对列之间的相关表并将其保存在内存中。
另一方面,启用这个维度可以检测出重要的问题,这些问题在一次查看一列时是看不到的。这是一个数据质量维度,在对所选数据集进行深入的数据质量分析时,您可能希望启用该维度,对于大型数据发现作业,最好禁用该维度,因为在这种情况下,保持作业速度很重要。
摘要
我们已经看到,并非所有的数据质量维度都同样昂贵。有些相当简单,不会使分析慢很多。有些需要多次通过数据,可能会使分析时间加倍,但可能有助于识别不明显的问题。不同的场景可能需要启用不同类型的维度。
我们还看到了每个标准数据质量维度的一些细节。
最后,我们看到可以通过使用数据规则来添加定制的数据质量维度。
Information Analyzer 还允许您通过在 Java 中实现数据质量维度来编程和部署自己的数据质量维度。在当前版本(撰写本文时为 3.5 版本)中,Cloud Pak 尚不支持此功能。但也许这是一个扩展点,将来会被移植到 Cloud Pak 以获取数据…
您认为应该在标准维度列表中添加什么新的数据质量维度?给这篇文章添加一些评论,让我知道。
日常分析的数据质量
入门
什么是数据质量,为什么它很重要,以及如何正确处理!
我们不信任的数据!
不久前,我的一个朋友提交了一份令人信服的分析,说服了一家中型公司的经理根据新成立的数据科学团队的建议做出了一系列决策。然而,不久之后,百万美元的损失揭示了这些见解是错误的。进一步的调查表明,虽然分析是合理的,但使用的数据是错误的。
对于我的朋友来说,意识到数据而不是分析方法是个问题是一种解脱。然而,该报告导致对他能力的负面看法,并损害了他的声誉;他花了一段时间才恢复过来。
我朋友的故事可以发生在任何使用数据的人身上。对最先进的工具和技术、我们想要产生的影响感到兴奋,或者有时被截止日期赶得很急,我们可能会忽略在任何分析之前的基本步骤*:评估数据质量。否则,无论多么先进的方法学坏数据肯定会浪费时间和资源以及错误和误导的结果。数据分析和预测模型是*垃圾进,垃圾出的真实体现!用托马斯·莱德曼的话说,
如果你的数据不好,你的机器学习工具就没用了。
坏数据的产生有许多原因:ETL 过程中的错误、手动输入、数据集成、专业知识的丧失、不断变化的业务逻辑和遗留数据都可能导致数据质量问题。
无论 ETL 过程多么严格,它仍然不能捕捉所有的数据问题。一个原因是,只有使用数据时,才能发现许多类似不准确的问题。因此,很少有数据科学家(如果有的话)能够幸运地从一个干净现成的数据集开始分析。数据集通常充满了需要修复的错误和不一致。因此,虽然评估数据质量不像训练机器学习模型那样有趣,但它是任何分析中最关键的部分。
因此,任何数据用户都需要对数据可能发生的各种问题有一个基本的了解,并具备检测、解决和交流这些问题的工具和技术。这就是为什么评估数据是完整的、独特的、及时的、一致的、有效的和准确的应该是任何分析的先决条件。
在这里,我将介绍数据质量背后的基本概念,讨论坏数据的成本,回顾数据质量评估的六个方面,并介绍可用于处理出现的质量问题的工具和技术。
什么是数据质量?
数据质量是对数据的有用性和可靠性的评估。为了更清楚起见,请考虑以下场景:
- 当数据集不包括最新记录时。
- 当从两个不同来源读取的收入数字不匹配时!
- 当一个数据集有许多同一个国家的名称,如“美国”、“美国”、“美利坚合众国”……加上所有的错别字。
- 当数据集缺少值时。
在上面的第一个例子中,数据不是及时的(最新的)。在第二种情况下,数据不一致,在第三和第四种情况下,数据分别无效和不完整。我们将很快在数据质量的背景下回到这些概念。
坏数据的代价
使用坏数据的后果远不止是一些不完整的行或不一致的记录。简单来说,
当数据有任何缺陷时,完成一项工作的成本是数据完美时的 10 倍。
Ringlead 根据数据记录的数量可视化坏数据的成本。根据这一估计,不良记录的成本约为 100 美元:10 万条不良记录每年要花费 200 万美元,这还不包括添加到数据中的新记录。对于像 Google 这样拥有大量数据的组织来说,这些数字要高得多。
图表中的来源 1 和 3 分别来自 Sirius Decisions——不良数据对需求创造的影响和小企业协会 2013 年人口普查。
IBM 的另一项研究估计,在美国,每年坏数据的成本约为 3.1 万亿美元!托马斯·莱德曼解释了原因:
另一个令人瞠目结舌的数字来自 Gartner:数据质量差是 40%的业务计划失败的原因,它还会影响多达 20%的劳动生产率。
谁对数据质量负责?
通过定义角色、流程和技术来支持数据质量,提供数据生态系统的整体视图是整个组织的责任。然而,数字显示,这些组织在这方面做得并不出色!据 Experian称,29%的组织数据不准确,同时 95%的企业难以实施数据治理计划。同一份报告指出,75%的受访者认为数据质量检查是业务用户的责任,而不是 IT 基础设施的责任。因此,如果您认为您可以信任现有的检查,并且评估数据质量不是您的责任,请三思!
问题的另一方面是,在创建或存储数据时,并不是所有的问题都能被检测到。数据生命周期中的两个重要时刻是数据被创建和消费的时刻。虽然数据在创建时就应该是固定的,但是在使用之前不会对其进行评估。这就是为什么分析师作为数据的消费者,在检测和解决缺陷方面发挥着重要作用。
因此,我认为数据质量评估是每个人的工作;鼓励数据用户利用其技术专长和领域知识来发现不一致之处,并确保分析基于通过质量控制措施的可靠来源。
质量数据的六个维度
到目前为止,我们回顾了数据质量评估的重要性,并量化了坏数据的成本。我们强调了分析师或一般来说数据用户在确保数据在被消费之前符合标准方面的关键作用。在本节中,我们将介绍数据应该满足的要求。
为了评估数据集的质量,需要从 6 个方面进行评估:
- 质量数据是完整的
数据的完整性意味着分析所需的主要特征/属性没有缺失值。缺失值会扭曲分析并导致误导趋势。 - 质量数据是唯一的 重复会产生不利影响。它们占用存储空间,延长代码的运行时间,并扭曲分析。检查的唯一性保证了数据中每个观察只有一条记录。
- 高质量的数据是及时的 地址、电话号码、电子邮件和信用卡都在不断变化,因此,上个月有效的数据记录现在可能不再有用。及时性确保数据是最新的,最新的记录反映了最新的变化。
- 质量数据是一致的
一致是指一个数据集内或不同数据集之间没有矛盾。一个 5 英尺高的新生儿或销售和使用表之间的收入不匹配都是数据不一致的例子。 - 质量数据是有效的
有效的意味着数据具有正确的类型、格式和范围。如果数据符合一组预定义的标准和定义,则数据具有正确的类型和格式:当标准格式定义为 YYYY/mm/dd 时,08–12–2019 无效。同时,有效性保证数据在可接受的范围内。离群值是统计学和数据科学中的一个重要概念,是不符合这一要求的数据点。 - 质量数据准确
准确反映数据的正确性,如正确的出生日期和准确的售出数量等。你应该注意到准确性不同于有效性:后者侧重于类型、格式和范围,而前者旨在形式和内容。如中所述,数据质量;准确性维度,准确性是关于正确性,而有效性是关于可能的准确值:对于一个 50k 工资的员工,45K 工资是不准确的,但是有效的(在可接受的范围内)。
在继续之前,我们应该注意,用真实数据满足 100%的数据质量要求几乎是不可能的。一种解决方法是为我们上面定义的每个维度定义一个阈值,低于该阈值的数据被评估为质量差。例如,只有当 10%的数据丢失时,90%的完整性才允许使用数据。在某种程度上,门槛取决于业务环境。阈值越高,用例的数据质量就越高。
利用分析技术评估和提高数据质量
在这一节中,我们将介绍一些工具和技术,分析师可以使用这些工具和技术来检查和提高他们的数据质量。本节中的示例在 SQL 中。
完整性 不完整的数据以缺失值的形式出现。衡量指标是分析所必需(非可选)的要素的缺失记录比率。例如,如果分析中 100 条记录中有 30 条缺少营销活动所需的行业特征,则数据的完整性为 70%。
首先,检查缺失值的数量:
*SELECT
1 — COUNT(col_A) / COUNT(*)
FROM
table_name;*
或者,为了计算空单元的数量
*SELECT
COUNT(col_A)
FROM
table_name
WHERE
col_A = ‘’;*
如果比率超出您可接受的阈值,您可能需要使用以下选项之一:
1.如果可能的话,使用其他数据来源:
当我在研究一个无监督的对外营销细分模型时,我需要知道该企业是否从事电子商务,特别是他们使用什么支付提供商。问题是这些记录中有 90%在数据库中丢失了。我们最终测试了来自多个提供商的数据集,并将其中一个与我们的数据合并。修复不完整记录的整个过程耗时约一个月。
2.插补
插补是机器学习中一种众所周知的方法,它从现有值中推断缺失值,例如用数据的均值、中值或众数替换缺失值。
*SELECT
COALESCE(col_A, AVG(col_A))
FROM
table_name;*
您也可以使用 IFNULL()。在 Python 中你可以使用 dropna()、fillna()、interpolate()等。有关更高级插补方法的概述,请查看数据插补和示例。
3.手动修复
手动处理丢失的数据是有风险的、不可伸缩的,不推荐使用,只有当有少量丢失的值并且您非常了解业务逻辑时,才可以使用它。
4.删除缺失值
只有当数据集很大且缺失值很少,从而不会影响分析时,才可以删除空值。
*SELECT
*
FROM
table_A
WHERE
col_A IS NOT NULL;*
注意丢失信息和趋势,因为丢失了一些重要的记录(比如离群值)。
唯一性 统计包能够很好地处理重复值。要检查 SQL 中的重复值:
*SELECT
col_A,
col_B,
col_C,
COUNT(*) AS cnt
FROM
table_A
GROUP BY
col_A, col_B, col_C
HAVING cnt > 1;*
要删除重复项:
*SELECT
col_A,
col_B,
col_C
FROM
table_A
GROUP BY
col_A, col_B, col_C;*
其他消除重复的方法是使用 DISTINCT()、ROW_NUMBER()甚至自连接。在 Python 中,duplicated()告诉您重复值,drop_duplicates()负责删除它们。
及时性 数据分析师需要检查数据的时间线,以确保它是最新的!使用一个没有被更新的表或者一个已经被改变但没有反映在数据中的记录会导致不希望的结果。虽然没有特定的技术工具,但是检查数据的最后更新时间,或者表中的最小和最大日期应该会有所帮助。
*SELECT
MIN(date), MAX(date)
FROM
table_A;*
如果您的数据是分区的,您可以用 partition_date 替换上面的日期。
一致性
数据的不一致性可能发生在一个数据集内,也可能发生在数据集之间。编程语言使得相互检查数据集和检测不一致变得容易。最终,你将不得不使用你的商业判断,咨询领域专家或者将你的数据与可靠的来源进行比较。
作为个人经验,我研究了支付行业中被拒绝的交易,我必须解决来自两个不同组织的数据集之间的不一致。在缺乏唯一的真实来源的情况下,我最终研究了维护这些数据集的组织,并选择了拥有知名客户和更好声誉的组织。
有效期 1。异常值
均值和标准差等几个重要的统计数据对极值、异常值非常敏感。因此,数据分析师需要特别注意识别和处理它们:它们是合法的极值,还是由于测量工具的缺陷而被记录下来的。
从使用业务知识和可视化技术(如散点图或箱线图),或者使用分析技术(如基于密度的聚类和隔离森林),有无数种技术可以处理异常值。查看这篇文章进行评论。
箱线图是识别异常值的简单方法。箱线图通过绘制五个重要的数字来显示分布:分布的最小值、最大值、第 25 个百分位数、中间值和第 75 个百分位数。要查找数据中的异常值,请查看小于第 25 个百分点或大于第 75 个百分点 1.5 IQR(四分位间距)的区域,其中 IQR 是第 75 个百分点和第 25 个百分点之间的距离。
(图片鸣谢:了解方框图)
一般来说,不建议删除异常值,因为并非所有异常值都是相同的!为了区分合法数据点和非法数据点,有时前者被标记为异常。然而,大多数时间异常值和异常值可以互换使用。
2.类型和格式
对于数据中的每个属性/要素,检查格式和数据类型(日期、整数、字符串)以确保其符合标准。检查 SQL 中的数据类型
*SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = table_A*
在 Python 中,您可以简单地使用
*df.dtypes*
其中 df 是你的熊猫数据帧。
浏览输出是快速检查数据值和格式的一种方式。在 SQL 中,您可以使用类似
*SELECT
col_A,
COUNT(*)
FROM
table_A
GROUP BY
col_A
ORDER BY
col_A ASC
LIMIT 100*
其中合并ORDER BY
和LIMIT
允许您检查可能错误的值中的错误。在 Python 中,value_counts()
可以给你一些关于你的输入的想法。
准确性 使用领域知识以及将您的数据与另一个值得信赖的来源进行比对,可以获得数据的准确性。进行探索性分析,使用可视化和统计方法来识别没有意义的趋势和数字*,并与领域专家进行讨论。*
最后的话
在学术界,在将我们的文章提交给期刊进行同行评审之前,我们通常会等待一两周,然后再次评审稿件。这种滞后通常会导致工作质量的大幅提高:我们修正了以前没有注意到的错误,改进了可视化效果,使一些段落更加清晰,并重新审视了数据和计算。最终,从长远来看,它帮助我们建立了创建高质量工作的声誉,同时减少了审查过程所花费的时间,这反过来又导致论文更快地发表。
我们是自己作品的最佳评判者,比任何人都更能识别我们所创造的作品的缺点和优点。对数据质量的评估可能是交付高质量和有影响力的工作的最重要的一步,这有助于改善整体业务。我希望这篇短文有助于提高对我们的工具和技术的认识,以便在您的分析工作中使用,并使您的工作更有质量!
数据质量:垃圾输入垃圾输出
纠正错别字和诸如此类的问题是一个 45 亿美元的市场
来源:提莫·埃利奥特,经许可
几年前,我的第一份工作是为银行建立金融模型。那是在手工制作模型特征并由指导委员会批准的时候。深度学习前的日子。由于功能是手工制作的,广泛的数据质量检查是标准。我定期审计数据是如何从一个系统流向另一个系统的。我的前老板会说,垃圾进,垃圾出。
数据质量是个大问题。总是会有重复的、离群的、丢失的数据、损坏的文本或打字错误。但是,即使在数据工程和“人工智能”方面取得了多年的进步,数据质量仍然是一个大问题。事实上,这是一个日益严重的问题。但这也是为什么这是一个令人兴奋的问题。
和往常一样,我喜欢在我的文章开头写些无关紧要的内容:
- 这不是关于数据质量作为一个概念是什么以及如何解决的问题。已经有很棒的文章了:这里的,这里的,这里的
- 这侧重于结构化的表格数据。图像/视频、音频、文本等数据类型的数据质量问题的性质各不相同
为什么数据质量是一个日益严重的问题
**更多的决策是基于数据。**Tableau 等 BI 工具、AppAnnie 等市场智能工具以及 Optimizely 等 A/B 测试工具的增长都指向了数据驱动决策的趋势。如果底层数据不可信,这些工具就没有用。如果数据质量问题不断出现,我们很快就会对这些工具失去信任。做出了错误的决定,失去了商业机会。Gartner 定期调查不良数据的成本,多年来,即使每年在数据质量工具上花费 20 万美元,每个企业的成本仍保持在 1000 万美元。
**更多的公司建立在数据之上。**一波又一波的机器学习公司都是建立在数据上的——看下图:)。如果你与机器学习工程师和数据科学家交谈过,你总是会听到好数据有多重要。
来源: CB Insights
为什么数据质量仍然是个问题
**大量数据但静态的一次性检查仍是现状。**云改变了思维模式,从只存储有用的数据转变为存储所有潜在有用的数据。Kafka 等流媒体技术和 Snowflake 等云数据仓库降低了存储更多数据的摩擦——以更高的速度、更广泛的种类和更大的容量。为了确保质量,指定范围和模式的数据规则由顾问或数据质量分析师手工编写。这是一个昂贵耗时的过程,通常只做一次。一劳永逸。这有两个问题。第一,大多数规则是在生产中学习的——当问题出现时。未知的未知情况。二是数据是动态的,要求规则是动态的。
**“可信”的数据来源仍然存在问题。**三个行业比其他任何行业都更重视数据质量:公共部门、医疗保健和金融服务。但这些行业继续受到不良数据的困扰。一家医疗保健公司的数据治理负责人告诉我,他们每月收到的政府数据错误百出。他们需要专门的员工来打扫。想象一下,我们正基于肮脏的数据被治理。在金融服务方面,来自一级数据提供商的股票数据经常会出现一些问题。众所周知,彭博的数据质量优于其他供应商,但我记得我不得不经常检查数据,并告诉客户支持人员这些数据没有意义。
**数据专业人员的专业化。**过去,数据专业人员更多地负责接收、转换、清理和分析/查询数据。现在我们有不同的专业人员处理每一步。数据工程师处理接收和转换。有时会跳过转换,直接将数据推入数据仓库。数据科学家建立模型,并忙于调整深度学习旋钮以提高准确性。和业务分析师查询并撰写报告。他们对数据应该是什么样子有更多的了解,但与编写和实现数据质量检查的数据工程师是分开的。
Tldr:一个日益严重的问题,却没有很好的解决方案
巨大的机会待价而沽
当前的数据质量软件市场差不多有 20 亿美元。但真正的机会要大得多,为 45 亿美元,因为有大量的劳动力可以自动化。美国有 2.1 万个数据质量职位,每个职位的年薪为 8 万美元。这并不包括那些在职称为“顾问”的专业服务公司工作的人。假设直接人工部分乘以 1.5 倍,总人工部分为 25 亿美元。随着数据质量在 ML 应用和业务决策中变得越来越重要,市场将继续健康增长。
虽然 Informatica、SAP、Experian、Syncsort 和 Talend 目前主导着市场,但新一波创业公司正在崛起。当前的产品及其销售方式可以更好——从插入数据管道任何部分的交钥匙解决方案,到不需要 6 个月的实施期和 6 位数的前期承诺,到自动化数据质量规则编写和监控。
数据质量对数据集的影响
我们着眼于影响数据集维度的数据质量的不同方面,以及数据质量在产生数据的组织中的重要性。
在 Unsplash 上由 Carlos Muza 拍摄的照片
背景
去年,我在机器学习领域的介绍一直专注于学习如何解决给定数据集上的回归或分类问题。
当我们开始处理真实的用例时,我们发现我们收到的数据集是一个组织的结果,该组织开发了一项工作,能够对其进行阐述。
该数据集的质量与制造该数据集的组织以及该组织如何处理数据质量直接相关。
我们模型的可持续性也可能与组织中的数据质量有关。
除了数据工程、模型本身的准确性及其生产中的性能之外,如果它所服务的组织没有将数据质量作为优先事项,很可能该模型将无法长期持续。
那么,什么是数据质量呢?
首先,数据代表真实世界的对象,为了在本文中讨论数据质量,我们将研究数据集格式。每一列都是数据集的一个“数据集”,每个单元格都是数据集为一行获取的特定值。
通常,当我们考虑数据质量时,我们会考虑数据的价值及其准确性。然而,数据质量包含多个方面,这些方面被称为维度,我们将在后面更详细地讨论,但它们是数据的常见维度:准确性、唯一性、完整性、有效性和一致性。
数据质量最常见的定义是确定数据是否能够满足收集数据的功能。
重要性和益处
保持数据质量是一项困难但必要的任务。为了获得一致和可靠的数据,企业必须不断管理数据质量,以便建立信任并做出更快、更明智的决策*。*
数据质量差会对组织的效力和效率产生直接影响,特别是在任务的整个生命周期,数据不同方面的错误会导致财务损失或严重错误。
相比之下,致力于提高所收集和生成的数据质量的组织会在不同层面受益:
- 避免不完整或重复的信息。
- 节省通信和服务质量
- 节省了非质量数据的成本,从而导致数据质量的成本自付
- 显著提高未来模型或组织决策的结果和输入的质量
数据质量的重要性毋庸置疑;错误和好处的影响的严重程度因用例而异,因此如果不将它们直接应用到示例中,很难从概念上涵盖这些概念
数据集中的错误类型
为了开发此案例研究文章的内容以帮助我们确认这些概念,我们将使用众所周知的 Kaggle 数据集进行学习:【Kaggle Learn 用户的房价竞争
信息不完整导致的错误
它们可以引用数据中缺失的单元格(例如,Alley 字段仅包含 1460 条记录中的 91 条,或者更糟,包含“PoolQC”字段)。这些是著名的“null”或“NaN”字段。
但它们也可能是由于遗漏了一些可能与研究相关的数据而产生的错误。
具体来说,对于预测销售价格的练习,如果在设计的数据集中省略了“Neighborhood”或“LotArea”列,预测的质量将会受到很大影响。
使用 missingno 的空值可视化
关于缺失值位置的相关矩阵
语法错误
语法错误与数据的格式及其值的表示方式有关。例如,在 YearBuilt 字段中,我们找不到低于 1700 年或高于当前年份(2020 年)的值。
另一方面,街道数据可以支持以下值:
Grvl—Gravel
Pave—Paved
如果我们发现不同于这些值且不同于 null 的值,我们将面临语法错误。
如果日期字段的格式应该是 MM-DD-YYYY,而有些单元格是 YYYY-MM-DD 或 DD/MM/YYYY,那么我们也面临着语法错误。
由于这是一个用于教育的数据集,因此很难在数据中找到语法错误。不过,我们可以寻找异常值,例如,GrLivArea 列,它是出现在最后一个五分位数中的数据,可能是错误输入的数据。
语义错误
语义传达数据的含义。
如果我们在生产年份中输入销售年份,我们将从语法(一个有效的年份)的角度得到正确的数据,但从语义的角度来看却不是这样。
没有建造时间超过 10 年的房子
但是,如果我们查看装修年份,数据应该表明在建造后和出售前是否有改造。但是我们发现了一行重建的年份是在出售之后:
yearremodaddd:改造日期(如果没有改造或增加,则与施工日期相同)
在这种情况下,我们面临一个语法和语义上的错误:
- 如果没有改造,它是句法上的,因为根据定义,如果没有改造,年份必须等于建造年份
- 如果改造是 2008 年,这是一个语义错误,因为它不代表在建设和销售期间的改造。
一个明显的语义错误是,数据“销售价格”包含土地面积(数据输入错误),或者销售价格对应于部分商业交易,例如,部分土地销售。
数据质量维度
在本文的开始,我们提到了质量的一些维度:准确性、唯一性、完整性、有效性、一致性。
一个维度是一组目的相同的质量因素;准确性作为一个维度由语义准确性(值与现实的接近程度)、句法和精确度(数据的适当规模)等组成。
一个度量是我们用来度量维度的一个因素的机制,例如,LotArea 数据的维度准确性中的语义正确性,我们将用实际值和输入到数据集的值之间的平方英尺差来度量它。
测量是实施度量以获得尺寸系数值的过程。在地块面积数据的相同示例中,尺寸准确度、精度因子、“平方英尺的差异”度量可以由专业人员测量,由评估人员使用诸如 GoogleMaps 等计算机工具进行估计。
琳达·佩雷斯·约翰森在 Unsplash 上拍摄的照片
随着时间的推移,度量过程会发生变化,或者根据问题类型的特征,应用于一个维度的相同度量可以用不同的方法进行度量,甚至可以作为验证或改进度量的方法。
维度因素可以与其值(例如准确性)以及其意图和方案(例如句法和语义正确性)相关。
数据质量的主要方面
定义对应于和应用于我们数据集的每个数据的维度的名称和方法可以根据上下文以及分析和定义它们的理论和概念框架而变化。
准确(性)
数据值 v 和数据值 v '之间的接近度,被认为是 v 试图表示的真实世界现象的正确表示。
语义正确性:属性的值 v 与其真实值*v’*的接近度。
如果我们有代表土地面积和单元面积的 LotArea 数据,但如果交易价格被错误地登记在这里,我们将有一个非常微弱的修正(除非价格和面积数据碰巧相似!).
另一方面,如果土地的平方英尺被输入到数据中,语义校正是强有力的。
语法正确性:表示一个属性的值 v 与该属性定义域的元素之间的接近程度。如果 YrSold 数据表示今天之后或数据集记录开始之前的年销售额,则不能包括在内。
准确性:捕捉数据的详细程度,使其对特定用途有用,或者使其能够与其他不同的数据区分开来。
如果地块面积数据是以公顷为单位,没有小数,那么在城市数据集中进行估计就不方便了。
如果你想测量生产过程的时间并且你没有存储“小时、分钟、秒”;如果只保存开始和结束日期,您将无法访问小时、分钟和秒的计算。
一致性
它捕获对定义在一组业务实体或其属性上的语义规则的违反。在关系模型中,完整性约束是这种语义规则的一个例子。
**实体间完整性:**它捕获不同业务实体的属性之间的规则满足度。也称为参照完整性,是指一个实体的属性与其他实体的一致性。
例如,在配方的项目列表中,产品代码与“产品”实体相关,如果配方中有不存在产品代码的项目,或者该项目已从产品实体中删除,则违反了该规则。
**实体内完整性:**捕获同一实体的属性之间的规则满足度。也称为关系完整性,指的是实体内部的完整性。
例如,一个带有区域的地址属于州。
或者在配方示例中,项目来自另一个配方或者一个程序不适用于一件事(例如,搅拌面粉)。
**域完整性:**捕获关于属性可能取值的规则的满足度
域完整性违规的例子是,如果输入表单上允许的身份文档类型可以是护照或 DNI,并且正在注册公民凭证。
完全
捕获关于属性可能取值的规则的满足度
**覆盖率:**获取给定数据集合中的实体数量与该集合中应存在的实体总数的比率。
覆盖测量可以在封闭域或开放域上进行。
覆盖率是领域中被覆盖的项目占总项目的比例。
**密度:**获取具有非零值的属性实例的数量与该属性实例总数的比率
密度比率将取决于关于某个数据的空值的假设标准。
独特性
它捕捉了真实世界数据的独特表现程度。
不重复:捕捉相同数据的重复程度。它是指一个元组在表示同一实体的数据集中重复的可能性。
在住房数据集的情况下,每个元组代表一个事务,因此唯一性的定义不是通过让两个元组引用同一个属性来给出的,而是对同一个属性的同一个事务。
例如,在俱乐部名单中,重复的情况是两行代表同一个人。
**不矛盾:**捕捉用矛盾数据表示的真实世界实体的相同实例的复制(或重复)程度。
例如,它是指一个俱乐部的会员资格,该会员资格有两个具有相似标识符的元组(例如,DNI 1971 449–3 和 1971 449–8),这两个元组指的是具有相似姓名但不同地址或矛盾数据(不同性别)的人。
及时
捕捉现实世界的变化反映在更新数据中的速度
新鲜度是一种依赖于时间变量的非结构性准确性,这意味着在一个时间正确的数据在另一个时间可能不正确。
**现状:**捕捉真实世界的变化和相应的数据更新之间的时间延迟。
如果年龄以其数值表示,而不涉及出生日期,则系统地呈现出现实问题。
这同样适用于对活生物体的任何测量。
数据的性质可能存在一些外部变化;例如,电话公司决定从 3 月 1 日起给该地区的所有电话添加前缀。如果没有更新应用于数据,它会在当天自动过期。
**及时性:**捕捉数据更新和可供使用之间的延迟。
例如,如果我们进行一项关于去年销售演变的研究,而会议推迟了六个月,我们将不可避免地面临一个数据有效性的机会问题。
在组织里做什么?
照片由马克西米利安·魏斯贝克尔在 Unsplash 拍摄
数据治理
公司业务流程交付的大量数据是一种信息来源,可以通过用定量、可靠和及时的元素支持决策制定来帮助产生价值。这种使用数据生成相关信息的需求需要建立一套定义、规则和流程来规范如何处理数据,这一套被称为数据治理。⁴
数据治理影响组织的不同方面,如结构、规则、决策、职责和数据管理的整个操作。
因此,组织数据治理计划旨在改进上述部分或全部方面。
通常,我们使用以下框架之一:
- DMBOK——数据管理知识手册。它提供了定义、实现和操作数据管理和使用的具体细节。⁵
- TOGAF——开放组架构框架。定义创建作为企业整体架构一部分的数据架构的过程。它可能是实现数据管理的先驱。⁶
- 信息和相关技术的控制目标。它将数据治理作为信息技术领域整体治理的一部分。它有一个模型来确定组织中使用的数据管理流程的成熟度。⁷
- DGI 数据治理框架。这是一个生成数据治理的简单参考框架。它提供了一个逻辑结构来分类、组织和交流复杂的决策活动以及与企业数据相关的操作的执行。⁸
六西格玛方法
应用的方法称为 DMAIC(定义、测量、分析、改进、控制),使用统计工具以及观察过程变量及其关系的设备,这有助于管理它们的特性。
简而言之,它是一种基于数据的方法,将质量提升到近乎完美的水平,与其他方法不同,因为它还能在问题发生之前就加以纠正。更具体地说,这是一项检查公司重复流程的训练有素的工作。⁹
欧洲委员会
摘要
我们试图开发一些与数据质量相关的定义,以在人工智能、机器学习或数据科学家爱好者中引入这一概念。
在专注于这些学科的不同课程和教程中,我们很少考虑数据集的来源以及交付数据集的组织为生成数据集所做的工作。
当我们处理现实生活中的用例以及必须用新信息进行反馈和再培训的模型时,我们会发现组织的数据质量水平可能会使我们的工作长期失败。
在将工作投入生产之前,我们必须关注所有这些因素,并帮助组织进行改进。
参考
[1]https://www . edq . com/glossary/data-quality-importance/
[2]T2]https://www . kag gle . com/c/home-data-for-ml-course/overview
[3]T4]https://www . gub . uy/agency-government-electronic-society-information-knowledge/sites/agency-government-electronic-society-information-knowledge/files/documents/publications/framework % 20 对于% 20% 20% 20 处理% C3 % B3 n % 20% 20% 20 质量% 20% 20 数据%20v1.0.pdf
[4]https://ms office . WordPress . com/2017/01/11/数据治理/
[5]https://www . dama . org/content/body-knowledge
[6]http://www . open group . org/subject areas/enterprise/toaf
[7]http://www . isaca . org/cobit/pages/default . aspx
[8]http://www . data governance . com/the-dgi 框架/
[9]http://trilenew . bloggespot . com/2015/03/6-sigma . html
资料来源
日积月累:https://www . gub . uy/agency-government-electronic-society-information-knowledge/sites/agency-government-electronic-society-information-knowledge/files/documents/publications/framework % 20 for % 20% 20 处理% C3 % B3 % n % 20% 20% 20 质量% 20% 20 数据%20v1.0.pdf
益百利:https://www.edq.com/glossary/data-quality-importance/
http://sigma-data.com/que-es-la-calidad-de-datos/适马
CPE —数据质量和机器学习课程
数据质量——你衡量它的方式是错误的
还有一个更好的方法
奥利维尔·勒莫阿尔
我们的一位客户最近提出了这个问题:
“我想为我们自己(数据团队)建立一个关于数据可用性的 OKR。我想建立一个单一的关键绩效指标,将总结可用性,新鲜度,质量。
做这件事的最好方法是什么?"
我无法告诉你这个请求给我带来了多少快乐。作为一个痴迷于数据可用性的人——是的,你没看错:这些天来,我不再梦见绵羊,而是梦见空值和数据新鲜度——这是一个梦想成真。
这有什么关系?
如果你从事数据行业,你要么正在从事一个数据质量项目,要么刚刚完成一个项目。这是坏数据的法则——坏数据总是越来越多。
测量数据质量的传统方法通常是时间和资源密集型的,跨越几个变量,从准确性(一个显而易见的问题)和完整性,到有效性和及时性(在数据中,没有时髦的迟到这回事)。但是好消息是有更好的方法来处理数据质量。
数据停机时间 —数据不完整、错误、丢失或不准确的时间段——对于任何努力实现数据驱动的公司来说都是一个重要的衡量指标。这听起来可能是陈词滥调,但这是真的——我们努力收集、跟踪和使用数据,但我们经常不知道数据是否准确。事实上,公司经常以拥有优秀的数据管道,但是糟糕的数据而告终。那么,如果在一天结束时,我们不能实际使用数据,那么建立一个奇特的数据架构的所有这些努力又有什么价值呢?
通过测量数据停机时间,这个简单的公式将帮助您确定数据的可靠性,让您有信心使用它或失去它。
所以你想要它的 KPI?
总的来说,数据停机时间是一个函数:
- 数据事件数量(N) —鉴于您依赖于团队“外部”的数据源,这一因素并不总是在您的控制之下,但它无疑是数据正常运行时间的驱动因素。
- 检测时间(TTD) —在发生事故时,您能多快得到警报?在极端情况下,如果没有合适的检测方法,这个数量可以在几个月内测量出来。错误数据造成的无声错误会导致代价高昂的决策,对您的公司和客户都有影响。
- 解决时间(TTR) —在一个已知事件发生后,您能多快解决它?
通过这种方法,数据事故指的是数据产品(例如,旁观者报告)是“不正确的”的情况,这可能是许多根本原因的结果,包括:
- 全部/部分数据不够新
- 全部/部分数据丢失/重复
- 某些字段缺失/不正确
下面是一些 不是 数据事件的例子:
- 不会“破坏”任何下游数据的计划中的模式更改
- 由于有意更改数据系统而停止更新的表(弃用)
综上所述,我建议针对数据停机时间的正确 KPI 是:
数据停机时间=数据事故数量 x
(检测时间+解析时间)
(如果您想进一步了解这个 KPI,您还可以按严重程度对事件进行分类,并按严重程度对正常运行时间进行加权,但是为了简单起见,我们将把它留到以后的文章中。)
通过自动化、高级检测和无缝解决的正确结合,您可以通过减少 TTD 和 TTR 来最大限度地减少数据停机时间。甚至有减少 N 的方法,我们将在未来的帖子中讨论(剧透:这是关于获得正确的可见性以首先防止数据事件)。
测量数据停机时间是了解其质量的第一步,并由此确保其可靠性。随着花哨的算法和业务指标满天飞,我们如何衡量这一点很容易变得过于复杂。有时候,最简单的方法就是最好的方法。
如果你想了解更多, 伸出手去巴尔摩西 。
有兴趣加入数据可靠性运动吗?把手伸向 蒙特卡洛团队 !
数据真实性:模型出错的地方
他们经常说,从原型到生产的这一步是许多数据科学梦想的丧钟。
其原因通常归结为三个主要因素:
- 该模型不能足够快地推断,不能足够大规模地扩展,或者硬件成本太昂贵
- 现实生活中的表现与开发评估不同
- 数据不可用
那么,我这么说是什么意思?
我们将逐一介绍:
模型速度
有时候,我们可以得到一个模型,虽然它在测试中表现很好,但不能扩大到生产。如果你的模型在 48 小时前预测飓风是 100%准确的,那么如果要花 49 小时才能做出预测,那么它就没有任何用处。
这可能会受到硬件成本等因素的影响。额外复杂性的成本(或简单的 IT 成本)需要被模型给你的收益所抵消。
你还可以发现,花时间采用算法并部署它意味着它已经过时了。一个著名的例子是网飞的 100 万美元算法奖。尽管新算法给出了期望的精度,但当它被部署时,它不再是正确的解决方案。
现实生活中的表现
这可能发生在开发中的模型已经“错过了一个技巧”。通常,这可以追溯到用于开发和培训的数据不代表真实世界。
我见过这样的案例,一家公司开发了一种业务“模拟”来生成机器学习数据,另一家公司强迫所有员工填写一份调查,为“购买可能性”模型收集数据。正如您所料,这两种情况都以数据与现实生活毫无关联而告终,必须启动适当的数据要求和收集程序,以便设计和训练新的适当算法。
数据可用性
这是一个奇怪的问题,也是一个经常被忽略但通过一些准备工作很容易避免的问题,所以我将重点讨论它。
我发现许多人在没有打好基础的情况下就匆忙设计和训练模型。至于前几个问题,你需要做一些准备工作,确定你想要实现什么,成功是什么样的,以及如何利用它(又名。需求收集)可以大大降低您的风险。
这里发生的情况是,当部署模型时,所使用的数据在生产环境中实际上是不可用的。当自定义数据收集已经开始,但没有维护持续的收集方法时,您会经常看到这种情况。
例如,零食自动售货机支持机器学习。它可以告诉你每天需要多少库存,这样你就可以规划整个网络的物流和补给时间表。然而,该模型的一个关键组成部分是它知道它错过了多少客户。现在,虽然在收集过程中,他们会派人监控现有的机器,看看有多少人想使用它,但在现实生活中,机器无法知道是否有人想使用它,当他们看到它是空的时,就会走过去。在真实列表部署中,随着时间的推移,自动售货机会要求越来越少的库存。但这是为什么呢?
发生的情况是,因为错过的客户不能被记录,模型总是被告知错过的需求总是零。这意味着该模型永远不会增加其股票来补偿,但会随着时间的推移慢慢减少其股票。这在逻辑上是有意义的,因为他们可以卖出他们的股票,这将是一个完美的预测,因为它没有“错过销售”。
我们都知道正在发生的事情是它错过了它们,只是它没有意识到,但因为它是一个关键变量,所以它在运行中导致了故障。
如果事先想一想,这本来是可以避免的。通过映射您的模型需要什么数据,并回溯到它是如何收集的,您可以确定没有收集它的机制。这样,数据科学家就有时间:
- 请求安装合适的传感器
- 从他们的培训中删除该功能
在训练模型时,他们可以通过模拟设备传感器来运行数据,以在部署过程中将其转换为预期的信号。这将会导致以后更少的尴尬和更好的模型。
汤姆·普姆福德在 Unsplash 上的照片
如果你仔细想想,这个案例实际上涵盖了我之前给出的所有要点。有趣的是…
总结
在这篇文章中,我很快列出了一些我在恢复失败的机器学习项目时看到的主要陷阱。
几乎所有这些失败都是由于开始“数据科学之旅”的渴望,但没有足够的关注来制定任务的要求。
俗话说得好:
数据相关项目苦苦挣扎?
通用条形图的详细图像。图片来源:“Via Design Pickle”——更多关于属性。
如果你有一个数据相关的项目停滞不前或举步维艰,考虑一下角色混淆是否是问题的一部分。
介绍
H 您是否有过一个困难的数据相关项目陷入停滞的经历?数据相关项目成功的一个常见障碍是角色混淆。角色混乱是指团队中的任何一个或多个人不确定项目需要他们自己做什么。
VentureBeat.comT4 报道称“87%的数据科学项目从未投入生产。”本文中的建议可以帮助您的项目避免这种命运。
当计划(或保存一个挣扎中的)数据相关项目时,考虑是否有一个或多个特定的人拥有以下角色(注意一些人可以“拥有”多个角色)。一般来说,每个角色至少需要一个人。本文将确定并解释每个角色。
1)申请人
这就是提问的人。这个人并不总是专业技术人员。可以是内部的(人力资源总监、设施总监、前台接待员)或外部的(印刷或广播媒体是常见的)。
2)主题专家
这个人是主题专家。SME 在确保问题是重要的质量问题方面发挥着重要作用。换句话说,中小企业有责任停止这个过程,直到每个人都完全相信手头的问题是正确的问题。申请人通常也是中小型企业,但并不总是如此。如果申请人对该主题不熟悉,该项目将受益于 SME 的加入。
3)观众
或者是你的观众的代理人。有时整个观众就是一个人。观众需要问题的答案,以便做好自己的工作,或者做得更好。如果你有很多观众,带上一名观众代表。
4)数据管家
数据管理员对于数据就像图书管理员对于书籍一样。管家有或者知道在哪里可以找到数据。数据管理员通常能够提供关于数据的重要信息(例如,特定数据列的含义、计算方式、收集数据的原因等)。).
5)数据分析师或技术人员
此人将对数据选择提出建议,此人还将对方法选择提出建议。通常这个人也会执行分析并产生原始输出。
数据驱动的团队动态
原始输出将由整个团队进行解释,以确定请求者的答案是什么。拥有一个团队的价值和好处是,当需要解释结果的时候,团队可以一起做出贡献。让团队中的任何一个成员来解释都是错误的。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
adamrossnelson.medium.com](https://adamrossnelson.medium.com/membership)
结论
本文认为角色混淆是一个障碍,在处理与数据相关的项目时,它会阻碍团队的生产力。角色混乱是指团队中的任何一个或多个人不确定他们在项目中扮演什么角色。
成功的面向团队的数据相关工作通常需要的五种角色。来源:作者插图。
规划(或保存)数据相关项目时,考虑如何通过确保至少有一个特定的人负责 1)请求数据,2)主题专业知识,3)了解受众,4)提供或查找数据,以及 5)方法选择、数据分析和分析执行,来防止(或解决)角色混淆。
重要的是,整个团队在解释和传播结果方面都有自己的角色和贡献。
感谢阅读
如果你喜欢我要说的话,可以在:adamrossnelson.medium.com找到更多。
感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelson| LinkedIn:亚当·罗斯·纳尔逊 |脸书:亚当·罗斯·纳尔逊。
数据报告与分析
通往快速数据驱动型组织的道路
“我需要更多的报告”——照片由乔治·托马塞蒂在 Unsplash 上拍摄
在竞争激烈的世界中,人们越来越需要数据来做出决策。在成熟的公司中,这可以通过财务报告、会计报告、市场报告和许多其他报告的可用性来证明。
然而,在数据分析环境中,“报告”和“分析”之间有一个显著的差异。
了解这种差异将使组织能够:
- 更多准确的信息
- 越来越快和周转时间
- 更多有影响力的商业决策
那么,有什么区别呢?
“报告”是指为决策提供信息的数据。典型的报告请求通常意味着对信息的可重复访问,可以是每月、每周、每天,甚至是实时的。
上述定义依赖于两个主要的有缺陷的假设:
- 数据可用:数据通常需要来自不同的源系统,这些系统通常分散在公司内部或外部
- 数据是干净的:通常数据需要被翻译以供人们使用,并且需要被整形以支持分析
“分析”是指原始数据分析。典型的分析请求通常意味着一次性的数据调查。
哪个先来?报告或分析
当报告请求流过时,通常需要执行分析。当分析请求流过时,可能不需要报告。
以下是构建报告的一些步骤:
- 了解业务需求
- 连接并收集数据
- 翻译技术数据
- 从不同维度理解数据背景
- 找到一种方法来显示 100 个类别及其 5 个子类别的数据(500+组合!)
- 重新处理数据
- 商业利益相关者感到困惑
- 范围发生变化
- 重复这些步骤
- 更多返工
- excel 上的初始可视化
- 解决利益相关者的理解问题
- 开始构建报告仪表板
- 配置功能和参数
- 更多返工
- 测试用户体验
- 符合公司风格指南
- 测试报告自动化和部署
- 联络技术或生产团队
- 设置定期刷新和失败的流程
- 文件报告流程
以上只是触及了最初的表面…
如果企业想要更少的数据点或更好的事实理解,分析将是更有效和高效的替代方案。
以下是数据分析探索中涉及的一些步骤:
- 创建数据假设
- 收集和处理数据
- 向企业展示成果
- 重新迭代
企业只需很少的步骤就能获得结果。
通往快速数据驱动型组织的道路
理解“报告”和“分析”之间的区别很重要。在当前的竞争格局中,洞察速度至关重要。
基于以上的解释和步骤,从“分析”入手往往是最好的起点。如果这些见解需要定期广泛传播,那么可以编写一份报告。这也将减轻与常规自动化流程相关的技术操作负荷。
“如果你每年做的实验数量增加一倍,你的创造力也会增加一倍。”—杰夫·贝索斯
正如杰夫(亚马逊公司创始人)提到的,我们需要更多的“实验”和数据探索。我们不需要更多的报告。
如果您是业务分析师,请将请求从“报告”细化到数据分析。
如果你是数据分析师,建议与企业就杂乱的数据建立分析合作关系。
我们可以一起以快速和可持续的方式释放数据的真正商业价值。
如果你喜欢这篇文章,并想看更多的内容,请考虑加入媒体会员,使用下面的链接来支持我和其他作者:
[## 通过我的推荐链接加入 Medium-Albert Suryadi
阅读艾伯特·苏亚迪(以及媒体上成千上万的其他作家)的每一个故事。您的会员费直接支持…
albertsuryadi.medium.com](https://albertsuryadi.medium.com/membership)
关于作者:Albert sur yadi是蓝筹组织中实现高级分析和数据科学能力的公认领导者。他被公认为分析团队(实践社区)的领导者,该团队授权并激励他人超越现状。
几乎每种数据科学项目的数据存储库
针对每种类型问题的数据存储库的综合列表
来自 Unsplash
鉴于我的工作性质,我每周都要处理新项目,解决不同的问题。我的工作要求我解析大量不同种类的数据集,以便为数据科学爱好者设计和开发指导。
这个博客包含了一些有用的数据集和数据仓库,按照不同的问题和行业进行分类。
网络上的数据仓库:
谷歌数据集门户
- 谷歌数据集搜索——研究人员定位在线数据的搜索引擎。
- datasetlist —提供网络上最大的机器学习数据集列表。
- UCI —最古老的存储库之一,数据按照问题类型、属性类型、数据类型、研究领域等进行分类。
- fastai-datasets —用于图像分类、 NLP 和图像定位的数据集
- NLP-datasets —自然语言处理中使用的带有文本数据的自由/公共领域数据集的字母列表
- Bifrost —用于按任务、应用、类、标签和格式分类的可视化数据集。
图像数据集
打开数据集图像
- ImageNet—ImageNet是一个按照 WordNet 层次结构(目前只有名词)组织起来的图像数据库,其中层次结构的每个节点都由成百上千的图像描述。
- CT 医学图像 —设计用于测试不同的方法,以检查与使用对比剂和患者年龄相关的 CT 图像数据的趋势。这些数据由癌症影像档案中的一小部分图像组成。
- Flickr-Faces—Flickr-Faces-HQ(FFHQ)是一个高质量的人脸图像数据集,最初是作为生成对抗网络(GAN)的基准而创建的。
- object net——一种新的视觉数据集,借鉴了其他科学领域的控制思想。
- 名人面孔 —大规模名人面孔属性
- 动物面孔-HQ 数据集(AFHQ)-动物面孔数据集,由 15,000 张分辨率为 512×512 的高质量图像组成。
NLP 数据集
https://medium . com/@ ODSC/20-open-datasets-for-natural-language-processing-538 fbfaf8e 38
- nlp-datasets —自然语言处理(nlp)中使用的带有文本数据的自由/公共领域数据集的字母列表。
- 1 万亿 n-grams —语言学数据联盟。该数据预期对统计语言建模有用,例如用于机器翻译或语音识别,以及用于其他用途。
- litbank — LitBank 是一个包含 100 部英语小说作品的带注释的数据集,用于支持自然语言处理和计算人文学科的任务。
- BookCorpus —这些是自己复制 BookCorpus 的脚本。
- rasa-nlu-training-data —用于开发和测试 Rasa NLU 模型的众包培训数据。
- Google book Ngram —这是一个在线搜索引擎,它使用 1500 年至 2019 年间在谷歌的英语、中文、法语、德语、希伯来语、意大利语、俄语或西班牙语文本语料库中印刷的来源中发现的 n 元语法的年度计数,绘制任何一组搜索字符串的频率。
情感分析
来自 Unsplash
- 评论— 亚马逊评论, Yelp 评论,电影评论,美食评论,推特航空,
- 斯坦福情感树库 —这个数据集包含了来自烂番茄 HTML 文件的超过 10,000 条斯坦福数据。
- 词典编纂器情感词典 — 词典编纂器对几乎任何语言的任何类型的文本进行简单的演绎内容分析。
- 意见词库 —英文正反意见词或情感词列表。
- 会话数据集—用于会话响应选择的大数据集集合。
- 更多—NRC-情感-词库-词级, ISEAR(17K) , HappyDB ,情感到表情映射
声音的
Audioset —一个大规模数据集,由 632 个音频事件类的扩展本体和从 YouTube 视频中提取的 2,084,320 个人类标记的 10 秒声音剪辑组成。
金融与经济
来自 Unsplash
- Kaggle 金融数据集 —金融数据集是关于金钱和投资的。如果您需要测试一些新的加密货币投资策略或抵御那些讨厌的信用卡欺诈爱好者,那么您来对地方了。
- CFPB 信用卡历史 —每月新开信用卡的数量和累计信用额度。
- 顶级银行 —该数据集包含全球最大银行的列表。
- 学生贷款债务 —学生贷款债务汇总数据的集合,包括按年龄、金额和债务类型划分的债务余额。
- 国际货币基金组织,英国《金融时报》数据集,世界银行数据
卫生保健
来自 Unsplash
- ka ggle health care repository—医疗保健领域的人工智能正引起越来越多的关注。一个主要问题是如何将研究转化为应用。应该很容易吧?
- 世卫组织:全球卫生数据集。
- 疾病预防控制中心:把这个用于美国特有的公共卫生。
- data.gov:以美国为中心的医疗保健数据,可通过多种不同因素进行搜索。
科学研究
来自 Unsplash
- re 3 data:re 3 data 拥有超过 2000 个研究数据存储库,已经成为全球研究数据基础设施最全面的参考来源。
- 埃尔韦拉生物医学数据仓库:生物医学领域的高维数据集。它专注于期刊发表的数据(自然、科学和其他)。
- 默克分子健康活动挑战:旨在通过模拟分子组合如何相互作用来促进药物发现的机器学习追求的数据集。
- SEER —由美国政府提供的按人口统计组排列的数据集。您可以根据年龄、种族和性别进行搜索。
- CT 癌症医学图像 —设计用于测试不同的方法,以检查与使用对比剂和患者年龄相关的 CT 图像数据的趋势。这些数据是癌症影像档案中图像的一小部分。
航空航天和国防
来自 Unsplash
- NASA 的数据门户 —一个持续增长的公开可用的 NASA 数据集、API、可视化等目录。包括空间科学、航空航天、地球科学、应用科学和管理数据。
- 航空数据项目 —来自麻省理工学院全球航空业项目的商业航空数据集
- 天文数据服务 —美国海军天文台(USNO)提供的各种天文数据。数据包括与太阳、月亮、行星和其他天体等相关的数据。
- 天文年历的天文现象部分 —各种天文现象,包括太阳、月亮、地心和日心。日出、日落和黄昏的表格以及日食和月食的数据都是可用的
- NASA 的小行星数据集 —提供对小行星、尘埃、行星卫星、陨石等 PDS 数据的访问。
电子商务
提供数据集的 Python 库
https://blog . tensor flow . org/2019/02/introducing-tensor flow-datasets . html
- TensorFlow 数据集 —一组现成的数据集。TensorFlow Datasets 是一个现成的数据集集合,可与 TensorFlow 或其他 Python ML 框架(如 Jax)一起使用。所有数据集都以
[tf.data.Datasets](https://www.tensorflow.org/api_docs/python/tf/data/Dataset)
的形式公开,实现了易用、高性能的输入管道。要开始,请参见指南和我们的数据集列表。 - S️klearn —机器学习包。这个包还具有获取更大数据集的帮助器,这些数据集通常被机器学习社区用来对来自“真实世界”的数据进行算法基准测试。
- ️️nltkt21】:自然语言工具包。自然语言处理中的实际工作通常使用大量的语言数据或语料库。
- ️ statsmodel :统计模型包。提供数据集(即数据和元数据)用于示例、教程、模型测试等。
- pydataset —主要用于教育目的的数据集。它试图帮助那些第一次接触 Python 数据科学的人,他们必须处理常见的(且耗时的)数据准备任务。
- seaborn :数据可视化包,你也可以从在线存储库中加载一个示例数据集(需要互联网)。
如果有任何其他重要和真实的数据集或类别,你想让我添加到这个列表中,请随时回复这个故事!
SQL、R 和 Python 中的数据整形
关于长到宽和宽到长转换的有用指南
设想这样一个场景:您刚刚完成了一个 SQL 查询,为涉众生成了汇总统计数据,让我们以下面的表格为例,
长数据格式
这是一个纵向数据,跟踪每月和州的枪支许可证检查次数。原始数据是公开的,更多背景资料链接于此。所以你的项目是对枪支许可变化的时间序列分析,包括纵向跨时间和横向跨州。不难认识到,该分析需要转换数据,以便将月 或 状态 变量放置在列上,如下所示:
宽数据格式
这种数据整形过程被称为旋转(即,长/堆叠到宽/扩散),其逆过程是取消旋转(即,宽/扩散到长/堆叠)。将数据从一种格式转换为另一种格式是分析项目中最常见的数据操作步骤之一。因此,在这篇博客中,我们将探索如何有效地将数据从 long 转换为 wide(反之亦然),我们将使用 SQL、R 和 Python 来完成这一过程。
***更新 2022: 加入我们的 YouTube 社区🎦 【数据说话带吉】 😄
旋转:长到宽
SQL:
先说PIVOT()
函数,Oracle 11g 和 MS server 2017 都有。为了方便访问,我还在这里的SQL fiddle playground中对它进行了编码,
在该查询中,允许列被指定为要分摊的值,而月列被指定为新透视表的标签。其他列(即玩具数据中的状态列)被隐式地视为GROUP BY
变量。回报正是我们所期望的,
在这里,您一定注意到了我们查询中的聚合函数SUM()
。该功能无法消除,因为旋转是一种侵略性操作,因为它将(可能的)多行合并成输出中的一行。
然而,在我们的例子中,由于每个月每个州只有一行,SUM()
什么也不做,因此可以被其他 agg 替换。功能(如AVG()
)。相反,如果我们有多行(对于每个月的每个州)要聚合,这些函数将通过避免额外的子查询而派上用场。
现在,转到其他 SQL 数据库,例如 MySQL 或 PostgreSQL,其中PIVOT
操作符不可用,下面显示了查询( SQL fiddle playground ),
与PIVOT
操作符一样,聚合函数也是指定的,但是随着月份的增加,这个查询很容易变得冗长。假设我们有 100 个月的记录,而不是 4 个月,我们将不得不手动键入 100 列标签!这肯定不是最佳解决方案。
R—shape()&pivot _ wider():
R 中的数据帧本质上是矩阵,因此矩阵转置的公知思想是适用的。有很多 R 函数可以处理这个任务,我最喜欢的两个是包***【stats】和【tidyr】***中的reshape(direction = 'wide')
和pivot_wider()
。
请注意,pivot_wider()
是spread()
的更新功能,不再处于积极开发中(更多详细信息,请参见此处的)。
现在,下面的代码展示了如何使用pivot_wider()
用 R 中的几行代码实现旋转。如果你也对reshape()
版本感兴趣,我在我的 Github 中有它的链接,
这里:[1]我们将 names_from 参数设置为跨列分布的变量(即 month 变量);[2]另一个有用的可选参数是 names_prefix ,它指定每个列名的前缀词(例如,month _ 2020–01–31)。
Python — pivot_table() :
同样,Python 中也有一个函数恰如其分地命名为pivot_table()
这里:[1]我们用 0 替换缺失值,将 permit 列转换为整数(与默认 float64 相反);[2]输出表的列被设置为类型字符串,以避免标签在 reset_index 之后被转换为日期时间(如 2020–01–31 00:00:00);[3]此函数有一个可选参数,可用于聚合多行(如‘sum’, ‘count’
)。****
非旋转:从宽到长
现在让我们假设我们想要将宽数据转换回原始的长数据结构。在 SQL 中,除了我们用unpivot()
替换了函数pivot()
之外,查询几乎与旋转相同,并且 SQL 小提琴在这里链接,
R—shape()&pivot _ longer():
对于这个演示,我们将再次关注来自 {tidyr} 的pivot_longer()
,它的对等reshape(direction = 'long')
版本可在我的 Github repo 中获得。与pivot_wider()
的情况类似,pivot_longer()
是对原有gather()
功能的更新,不再开发。
下面是我们如何将数据从宽数据转换回长数据,
在这段代码中, cols 参数接受要堆叠成更长格式的列,即我们数据中的月份变量。这一行colnames(wide_dat)[-1]
将排除第一个变量状态。这是输出,它符合我们的原始数据格式,
一个问题是,如果聚合了多行,那么取消投票不会产生原始的表值。
Python — melt():
熊猫 也有,函数melt()
执行宽到长的转换,
与 R 输出一样,这段代码的返回与我们的原始数据完全匹配。
想要更多数据科学和编程技巧?使用 我的链接 注册 Medium,获得我所有内容的全部访问权限。
最后的想法
正如我们刚刚了解到的,SQL 作为一种查询语言,在用于数据整形时会变得繁琐冗长。与 SQL 表不同,R 和 Python 中的数据框本质上是矩阵,其中行和列是可互换的;因此更适合像数据转换这样的任务。
关于 R 与 Python 的对比,我的经验是,通常一个任务可以使用 R 中不同的包以多种方式完成,而 Python 的开发方式是尽可能只提供一种功能。虽然一些数据科学家欣赏 R 中的这种灵活性,但其他人可能会发现它含糊不清、令人困惑。
此外,Python 被认为是比 R 稍低级的语言,它有更严格的数据类型要求。例如,一只熊猫。系列与 numpy.array、不同,因此它们不共享属性或方法。然而,在 R 中,不存在这样的区别,其中等价的概念只是一个向量或矩阵。这一特性使得统计/科学分析比 Python 中的分析更加方便。
毕竟,R 和 Python 的设计目的有些不同。我希望对这些区别的认识能使你更有效地选择最佳语言来解决你的具体问题。😀
想要更多数据科学和编程技巧?使用 我的链接 注册 Medium,获得我所有内容的全部访问权限。
还订阅我新创建的 YouTube 频道 【数据谈吉】
更多有用的数据科学博客:
****** [## 每个数据科学家都应该知道的 6 个 SQL 技巧
提高分析效率的 SQL 技巧
towardsdatascience.com](/6-sql-tricks-every-data-scientist-should-know-f84be499aea5) [## 熊猫失败时将 Word 和 PDF 文件导入 Python 的 4 种简单方法
导入非结构化文本/图像数据的实用指南
levelup.gitconnected.com](https://levelup.gitconnected.com/4-simple-ways-to-import-word-and-pdf-files-into-python-when-pandas-fails-43cf81599461)******
数据重启 2020
3 月 5 日,我有机会参加了由 Taste 组织的为期一天的关于数据和营销的会议 Data Restart 2020(布拉格),以下是一些亮点。
图片来源 www.datarestart.cz
该阵容包括来自代理商(Etnetera Activate、Optimics、DataSentics、Data Mind 和活动主办方——Taste)和内部团队(Twisto、Alza、Bonami)的 11 场演讲。这些平台以谷歌为代表,占据了整整两个发言时段。其中一位演讲者 Behavio 以一种方式脱颖而出,他说他们的核心业务是营销和社会学研究,而不是纯粹的数据分析。
主题和案例研究侧重于市场营销,但在数据分析方面非常容易理解。
营销数据凌乱
- 25–35%的 web 流量数据在点击和 GA 报告之间丢失(大约。5%归因于防火墙,25%归因于广告拦截器,10%归因于浏览器在隐私保护方面的努力,未知%归因于 GA/GTM 实施中的错误)。**解决方案:**定期自我审计,了解你的数据丢失发生在哪里,是提高数据质量的第一步。
Etnetera 激活数据质量(图像源)
- 一些营销渠道只是不想共享数据。以播客平台为例:苹果、Spotify、Podtrac——无 API(手动导出、CSV)、Blubrry——付费且昂贵的 API(约。每月 1000 美元)。**解决方案:**寻找自动导出的方法,例如使用网页抓取。
- 其他营销平台使用不同的度量标准和维度定义,因此很难找到一种方法来比较“橙子和橙子”以及“苹果和苹果”。**解决方案:**将来自不同渠道的数据集中到一个地方,您可以根据自己的规则对其进行转换并进行比较,正如 Optimics for esk rozhlas 的案例研究所示。在谷歌云平台上,他们汇集了来自电台不同接触点(14 个电台、网站、播客、移动应用、社交媒体等)的数据。
Optimics 公司的 eský rozhlas 数据基础设施
- 但谷歌分析可能会有漏洞,永远不会给你全貌,所以要从整体上处理数据,把不同的数据源整合在一起。例如,fintech Twisto 的数据分析模型如下所示。他们还使用基于客户获得年份的队列分析。
Twisto 以客户为中心的数据模型
- 当心平均值,因为它们可能会误导人。再一次,Twisto 用一个例子证明了这一点:平均来说注册的转化率是 38%(这似乎是个好消息!).但现实可能是,一个在视频或帖子中展示如何使用该服务的影响者可能会推动 87%的转化率,而效果广告只有 7%的转化率。所以,始终要看渠道分布。
小心平均值(Twisto)
- 传统的 CRM 数据是静态的、交易性的,描述的是长期行为,但如果你想捕捉决策的瞬间,并了解哪些因素在起作用,那么就去看看数字“足迹”。这是雅各布·斯特奇在埃斯卡·spořitelna 案例研究中描述的方法。数字足迹是动态的、混乱的,很难捕捉和分析,但如果你破解了它,这是一种获得 360 度客户视角的方法(在 cs 的情况下,通过使用在线行为数据进行销售电话,贷款申请会大幅增加)。**解决方案:**使用上下文定位(查看 Word2Vec 模型来分析文本),为该解决方案创建的数据主题揭示了其他投标人忽略的不太明显的关键词。他们方法的另一个特点是使用原始用户级数据和连接数据源。
根据数据确定埃斯卡 spořitelna 的背景目标
数据伦理
- 2018 年,最大的转变是 GDPR,其次是浏览器在数据隐私问题上采取立场(甚至谷歌也计划在 2022 年之前废除第三方 cookies)。
- 在网上 Cookies 状态你可以看到浏览器正在做什么来防止跟踪,以及他们如何对待用户数据。
- 随着数据隐私意识的提高,2020 年将会有更多的消费者期待公司提供数据隐私。
- 硬币的另一面是自愿数据交易的出现(例如, Instars 允许用户通过分享他们的数据来赚取加密货币)——但第三方 cookies 的问题是,参与的客户类型可能并不代表你的客户群整体。
- 来自 Etnetera Activate 的 jiří·塔潘警告说,不要使用第三方 cookies,而应该寻求明确的同意和用户身份——激励用户登录。
- 要为后 cookie 时代做好准备,请观察已经发生的从基于会话到基于事件的分析的转变。
- 在我看来,很少有公司会和他们的客户谈论隐私(同意弹出窗口和打勾框不算)。如果有人开始提出这一趋势并采取行动,这可能是一个差异化因素(比较一两年前公司如何抓住环保趋势)。
机器学习和人工智能正在取代我们的工作(还没有)
如果你还没有对你自己的数据进行机器学习,或者还没有把它提供给你的客户,现在是你开始研究这个话题的时候了。因为你的竞争对手可能正在这么做。
- 在针对鞋子购买倾向的自动机器学习实验中,Data Mind 的 Jan Matouš ek 将经典逻辑回归和 H2O.ai 的商业和开源解决方案的成本效益放在一起。每个模型的精度非常相似(开源领先时为 0.73-0.75),但差异在于花费的时间(10 小时与 1-2 小时)和所需的专业知识。
数据思维的自动化机器学习实验
- 在自动化机器学习中,你可以“外包”算法选择或参数搜索等常规任务,但仍然需要专家和领域知识来定义业务目标,评估实际实施并确保稳定性。
- 引发了一场关于黑盒 vs .白盒 ML 解决方案的讨论:一方面,作为一名数据分析师,你想控制你放入模型的变量,它们的权重等等。因为这可能会导致大笔资金的决策。但另一方面,为了快速验证概念,使用现成的解决方案可以节省您的时间和金钱。
- 电子零售商 Alza 的案例研究展示了他们在 MS Azure 上运行的内部 ML 解决方案,以根据 PPC 支出预测销售额。他们用它来决定消费限额,模拟不同的场景和计划销售。
- 在他们的算法开发过程中,Alza 首先使用了来自销售和广告支出的直接数据,但预测模型并不超级准确,也没有捕捉到季节趋势。所以,他们增加了时间变量(季度、月、周)节假日、特殊事件(比如黑色星期五)和宏观市场趋势来提高预测。
- 金融科技 Twisto 使用大约 500 个不同的变量来评估借款人的信用风险。其中一些乍听起来无关紧要,但实际上是有道理的:例如,使用全部大写字母填写申请表的用户比具有标准拼写习惯的用户更不可靠,或者如果用户的电子邮件地址包含他们的真实姓名,这样的人比昵称晦涩的用户更有可能按时重新付款。
- 几年前,当 Twisto 刚刚起步,没有自己的用户数据可供分析时,他们依靠专业知识和常识来评估风险,这导致了 20%的不还款。
从头开始
进入数字化转型并希望成为数据驱动的公司和客户可能会被大量的解决方案、工具和提供商所淹没。
- jiří·斯坦潘分享的创始人指南提醒根据企业的生命周期阶段选择数据解决方案,但也警告说,到时候不要在底层获得堆栈。
- 来自 Taste 的 Jan kad leek 建议所有者和顾问首先通过询问基本问题来验证他们业务的数字成熟度,并确保他们当前的报告能够回答并持续跟踪这些信息:(1)我有多少客户——客户数据,(2)他们带来多少美元——交易数据,(3)收购成本——广告数据
- 除此之外,你还可以衡量商品销售成本、客户终身价值和广告支出回报。
- 基本上,在决定任何解决方案之前,你应该非常清楚你的目标。
数据为大家
除非你能让足够多的人积极使用它并做出基于数据的决策,否则最复杂的数据解决方案也不会有回报。
- 这就是为什么博纳米选择了一个时尚的谷歌数据工作室单页仪表板,带有像付费/非付费、媒体、频道分组和活动这样的过滤器。它像一个多级漏斗一样工作,在每个阶段,你可以看到在促销上投入了多少,在销售(ROAS)上回报了多少,以及与前一阶段相比的动态。
- 该解决方案可能会忽略许多指标,但通过有意保持简单、精心开发文档以及在活动命名上保持一致,他们成功地让 30%的高管到专家员工使用仪表板作为共享的“事实来源”。
- 类似的信息来自 Alza(顺便说一下,Katka Lahodová是整个活动中唯一的女性发言人!).我上面描述的 ML 工具有一个简单的界面,只有几个关键的输入(广告花费$,活动类型)和一个带有预测的输出图。再次强调,这是一个有意识的选择,旨在提高可用性和采用率。
- “数据是为每个人准备的”的另一个方面是你如何接近规划阶段——与所有利益相关者交谈并了解他们的需求是非常重要的。例如,对于 eský rozhlas 项目,Optimics 花了几天时间采访编辑、网络编辑、主编、董事会成员、播客和 hbbtv 团队、广播门户、新媒体团队等。
需要阅读的工具/想法/资源:
- Exponea 客户数据平台
- 谷歌大查询和整个数据分析堆栈
- 针对谷歌应用的 Firebase analytics
- 机器学习的 H2O.io 解决方案(商业和开源)
- 归因模型(沙普利,马尔科夫)
- 群组细分
- Matomo analytics (开源,上一版。Piwik)与谷歌分析
- 品味杂志 DigiChef
除了程序之外,我真正喜欢的互动测试也在 kahoot.it 上运行。使用这个工具,你可以创建一个多项选择测验,并通过他们的智能手机实时获得观众的答案,并在速度和精度方面进行竞争(在我去年的一次演讲中,我使用了一个类似的工具 Mentimeter )。主持人实际上是在用演示文稿中的事实来测试我们,问了一些问题,比如“什么是 CDP?”或者“百分之多少的决策是在快速思考模式下做出的?”,所以它既吸引人又有用。
明年的愿望清单:听取更多平台和产品(不仅仅是谷歌)以及开源软件的意见。LinkedIn 社交活动。更多的女性演讲者。更多案例研究和趋势(如来自 Etnetera Activate)。
幻灯片可以在这里获得(只有捷克语),你也可以在 Twitter #datarestart 上查看讨论。
你觉得这些笔记有用吗?请在评论中告诉我!
机器学习的数据缩放——基本指南
什么是标准化,为什么它如此重要?
您可能会遇到带有大量内置数字噪声的数据集,如方差或不同规模的数据,因此在考虑机器学习之前,良好的预处理是必不可少的。这类问题的一个好的预处理解决方案通常被称为标准化。
菲德尔·费尔南多在 Unsplash 上的照片
标准化是一种预处理方法,用于转换连续数据,使其看起来呈正态分布。在scikit-learn
中,这通常是一个必要的步骤,因为许多模型假设你正在训练的数据是正态分布的,如果不是,你的风险偏向你的模型。
您可以用不同的方式标准化您的数据,在本文中,我们将讨论流行的数据缩放方法— 数据缩放。或标准缩放更精确。
同样重要的是要注意到标准化是一种应用于连续数值数据的预处理方法,在一些不同的场景中会用到它:
- 当处理任何使用线性距离度量或在线性空间上操作的模型时-KNN、线性回归、K-均值
- 当数据集中的一个或多个要素具有较高的方差时-如果中某个要素的方差比其他要素的方差大一个数量级或更多,这可能会使假设数据呈正态分布的模型产生偏差
现在让我们继续进行数据缩放。
数据缩放
当处理包含不同比例的连续要素的数据集时,缩放是一种最有用的标准化方法,并且您使用的是在某种线性空间中操作的模型(如线性回归或 K-最近邻)
要素缩放会变换数据集中的要素,使它们的平均值为零,方差为一。这将使线性比较要素变得更加容易。此外,这也是scikit-learn
中许多型号的要求。
让我们来看看一个名为 wine: 的数据集
import pandas as pd
import numpy as np
from sklearn import datasets wine = datasets.load_wine()
wine = pd.DataFrame(
data=np.c_[wine['data'], wine['target']],
columns=wine['feature_names'] + ['target']
)
我们想使用葡萄酒数据集中的ash
、alcalinity_of_ash
和magnesium
列来训练一个线性模型,但是有可能这些列都是以不同的方式测量的,这会使线性模型产生偏差。使用describe()
函数返回关于数据集的描述性统计数据:
wine[['magnesium', 'ash', 'alcalinity_of_ash']].describe()
我们可以看到,ash
的最大值是 3.23,alcalinity_of_ash
的最大值是 30,magnesium
的最大值是 162。这些值之间存在巨大差异,由于规模更大,机器学习模型在这里可以很容易地将magnesium
解释为最重要的属性。
让我们将它们标准化,以便在线性模型中使用。以下是步骤:
- 导入
StandardScaler
并创建它的一个实例 - 创建执行缩放的子集
- 对子集应用缩放器
代码如下:
from sklearn.preprocessing import StandardScaler # create the scaler
ss = StandardScaler() # take a subset of the dataframe you want to scale
wine_subset = wine[['magnesium', 'ash', 'alcalinity_of_ash']] # apply the scaler to the dataframe subset
wine_subset_scaled = ss.fit_transform(wine_subset)
厉害!让我们看看前几行缩放后的数据是什么样子的:
这些值现在更加接近了。为了了解缩放实际上如何影响模型的预测能力,让我们快速制作一个 KNN 模型。
首先,对于未缩放的数据:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split X = wine.drop('target', axis=1)
y = wine['target'] X_train, X_test, y_train, y_test = train_test_split(X, y) knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
**>>> 0.666666666666**
不太准确。让我们缩放整个数据集并重复这个过程:
ss = StandardScaler() X_scaled = ss.fit_transform(X) X_train, X_test, y_train, y_test = train_test_split(X_scaled, y) knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
print(knn.score(X_test, y_test))
**>>> 0.97777777777777777**
如您所见,我们模型的准确性显著提高。我将把对这个 KNN 分类器的进一步调整留给您,谁知道呢,也许您可以正确地得到所有的分类。
让我们在下一部分总结一下。
在你走之前
这就是数据标准化的全部内容,也是它为什么重要的原因。我们将在其他时间比较StandardScaler
与其他定标器。本文的要点是,无论何时你需要正态分布(相对)的特性,你都应该使用StandardScaler
。
更准确地说,每当你使用一个假设数据是正态分布的模型——比如 KNN 或线性回归,就使用StandardScaler
。
感谢阅读。
加入我的私人邮件列表,获取更多有用的见解。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
原载于 2020 年 8 月 31 日 https://betterdatascience.com**的 。
数据科学:处理新数据集(用于推理)的 5 个步骤
所有权利保留给合法所有者
“如何开始对数据集进行分析和推断”简介,
我们将解释一个经典机器学习问题的一般路线图。我们可以粗略地将步骤数下限为 5,这是必须完成的。
第一步:统计研究
采取这一步骤的一个简单原因是,当您第一次遇到一个新的数据集时,通常会非常陌生,不知道要素的分布/单位/类型。假设您的环境是 Python,并且您使用 pandas 来解析您的数据集,“describe”函数将完成这项工作。
用法示例
第二步:表面数据预处理
这一步包括许多更小的任务。
- 填充 NaN(根据您的数据集使用均值/中值/高斯方法)如果有,在某些情况下,0 值也非常麻烦,因此您可以聚合成更小的组,以便非零值和零值相加,或者用ε值替换 0。
这里的 fill_nan 是自定义的,一般使用的是 df.fillna()
- 一个好的习惯是将数据集归一化,使其均值为 0,方差为 1。这有助于模型(如逻辑回归)更好地工作(稳健界限),而不是在优化过程中花费更长的时间来收敛(通过 SGD)
再次标准化是一个自定义函数,简单地使用公式(x-mu)/sigma
- 完成这些任务后,您可以在数据集上尝试一些简单的模型,并根据结果决定要应用哪些数据处理。
第三步:更多数据处理
从这一点开始,您对目标特征的预测就有了准确性。现在的重点是提高精确度,以下是一些方法:
- 降噪:有些情况下,相同的特征向量给你不同的目标特征,在这些情况下,你可以做平均或做均匀分布,取值之间。还有其他更复杂的方法来处理图像(例如图像增强,噪声 2 噪声)
- 剔除异常值:剔除一些异常值也是有益的。这些异常值可能出现在数据集中,但不会出现在您的测试用例中。有的著述考虑区间[0.01,0.99]。
- 特征扩充:最常用的方法是多项式扩充,exp/log/cos 扩充。这些包括在数据集上应用所提到的函数,然后连接到当前的,以获得更多的数据和更复杂的模型进行训练(增加权重维度)。更复杂和具体的情况可能是图像仿射变换/ GAN 图像/噪声添加,或者在经典数据中,交互项(将特征向量相乘)。
第四步:模型拟合/训练,超参数
这部分是关于尝试不同的方法并获得正确的超参数。
- 根据你的工作情况(即无监督/有监督/分类等),你将不得不应用不同的方法(无监督的 k-means,有监督的逻辑回归,以及其他类似的方法)。显然,你总是可以为你的神经网络构建一个架构来完成分类/聚类任务,从而与你的研究目标相匹配。
- 当您知道模型背后的理论时,超参数可以被强力搜索以进行优化,或者也可以被白盒搜索。例如,k-均值/k-最近邻选择 k 的一些一般规则是肘规则。
第五步:交叉验证
最后,为了不过度拟合或至少知道存在过度拟合,要进行交叉验证,这里有一些方法:
- 训练/验证分割:最常见的方法是在验证集上进行推断,并与实际情况进行比较
- k 倍分裂:我们分成 k 个部分,留下 k-1 个用于训练,1 个用于验证。我们对 k-1,1 的所有组合进行推断和基础事实比较。
上面提到的解释并不详尽,肯定是可以改进的,但这些是遇到新数据集时要做的最起码的工作。
感谢阅读!请继续关注更多技巧/教程文章。如果感兴趣,我的 GitHub 上有完整的笔记本!此外,点击这个链接(指向联盟计划)真的会帮我解决问题!您只需完成一些快速任务(只需等待和激活通知),所有这些将真正帮助我了解更多未来的硬件相关内容!
数据科学联盟
成为反种族主义数据科学家的一些方法
在 Unsplash 上由 Toa Heftiba 拍摄的照片
本周我打算写一写我是如何坚持并完成最近的一个项目的。然而,考虑到已经发生的一切,现在这感觉毫无意义。当然,不管发生了什么,我说的是艾哈迈德·阿贝里、布里安娜·泰勒和乔治·弗洛伊德的谋杀案,以及随后全国各地发生的抗议活动。作为一个人,除了亲自参加抗议活动,你还可以做很多事情来抗议这些谋杀。你可以向保释基金捐款(链接这里),与你社区的其他成员联系,你可以开始就黑人面临的独特斗争进行自我教育(这里有一个让你开始的书单),还有很多其他事情。不过,你可能已经在互联网上的其他地方看到过很多这样的想法,或者至少我看到过。
反种族主义的数据科学家在这段时间里能做些什么呢?这绝不是一个详尽的列表,但这是一个开始。
思考你的研究的含义
不久前,我看到一条推文,大意是,“干细胞告诉你如何克隆恐龙。文科告诉你为什么那是个坏主意。”有很多人工智能,特别是面部识别,已经被武器化来对付抗议者,无论是现在还是最近的历史。如果你处于开发新工具和算法的最前沿,这不足以确保它获得最好的准确性或 AUC 分数。你需要考虑你正在建造的东西的含义。仅仅决定如何使用你的模型是不够的,还要决定如何使用它,并采取相应的行动。如何做到这一点的一个很好的例子是在 OpenAI 发布的 GPT-2 中看到的,他们从偏移中表示,由于潜在的恶意使用,他们不会发布训练好的模型。然而,如果你不在创造新技术的前沿,但你仍然在数据科学领域工作:
与他人分享你的技术知识
正如我所说,监控技术和警务算法只是用来对付抗议者的许多工具中的一部分。作为技术社区的成员,我们对技术能做什么和如何做有更好的了解。如果你已经在面部识别领域做了很多研究,你就有资格告诉别人它是如何工作的,以及需要采取哪些步骤来绕过它。如果你知道手机拍摄的照片中保存的元数据,你可以向其他人解释如何在社交媒体上发布照片,而不危及任何抗议者的安全。我们生活在一个日益由数据驱动的世界。这意味着数据科学家对世界运行的齿轮有了越来越深入的了解。我们了解像深度假货、面部识别和算法这样的事情是如何工作的,这种了解可能非常有价值。但是,只有当我们有效地与公众交流我们的知识时,这种价值才会产生。说到知识,数据科学的盟友们还有另外一件事:
努力教育自己
https://tenor . com/view/lilo-and-stitch-Disney-pleakley-jumba-education-gif-3562360
我们一直在学习新的东西,一旦你弄清楚了最新的 SOTA 模型,新的就会出现。如果你已经在不断学习,为什么不花点时间了解种族主义是如何影响这个领域的呢?我们目前有种族主义技术,如面部识别,在检测白人面孔方面比有色人种更好。如果这个问题没有直接影响到你,或者你没有有意识地反种族主义,这就是你可能完全忽略的那种错误。因此,努力变得更加反种族主义不仅仅是让你成为更好的人和社区成员,而是让你成为更好的数据科学家。了解科技和数据科学中存在的种族歧视的最佳方式之一是倾听直接受其影响的人的声音。这里有几本书可以作为起点:
[## 技术之后的竞赛:新吉姆法典的废奴主义工具| IndieBound.org
从日常应用到复杂算法,鲁哈·本杰明(Ruha Benjamin)透过科技行业的炒作来理解新兴的…
www.indiebound.org](https://www.indiebound.org/book/9781509526406) [## 迷人的技术:种族、核心技术科学和日常生活中的自由想象
《种族、道德技术科学和日常生活中的解放想象》鲁哈·本杰明(编辑)杜克大学…
www.indiebound.org](https://www.indiebound.org/book/9781478003816) [## 压迫的算法:搜索引擎如何强化种族主义| IndieBound.org
揭示了对有色人种女性的负面偏见是如何嵌入搜索引擎结果和算法运行中的…
www.indiebound.org](https://www.indiebound.org/book/9781479837243) [## 暗物质:对黑暗的监视| IndieBound.org
在《黑暗物质》中,西蒙尼·布朗将黑暗的条件定位为一个关键的场所,通过它监视…
www.indiebound.org](https://www.indiebound.org/book/9780822359388) [## 我们的数据体:数字防御行动手册
我们的数据机构(ODB)已经进行了研究,并制作了一本以数据为重点的普及教育活动手册…
store.alliedmedia.org](https://store.alliedmedia.org/products/our-data-bodies-digital-defense-playbook?variant=18553259622496)
如果你想在 Twitter 上听到并关注黑人的声音,还有# BlackTechTwitter ,坦白地说,我可能错过了很多东西。
最终,努力倾听(而不是谈论)黑人的声音,并从他们所说的话中学习。话虽如此,也要大声说出你的支持,放大那些同样的黑人的声音。作为一名女性,我曾经历过我说了些什么而被当作没什么而不予理睬的时候,但是当我的一个男性朋友说了同样的话时,它就被当真了。如果我们不能确保不同的声音不被听到,多样性就没有什么价值。因此,如果我们想建立更好的技术和技术背后的更好的社区,我们所有人都有责任积极致力于反种族主义。
#BlackLivesMatter
数据科学和人工智能是一团乱麻……而你的初创公司可能会让情况变得更糟
数据科学一直被称为“21 世纪最性感的工作 ”但有时我怀疑我们是否在这里。这个世界为我们准备好了吗?在之前,我已经研究过这个问题,但是数据科学的工具问题需要更多的讨论。数据科学家可用的工具限制了他们的效率,所以看到工具制造商更加关注他们的需求将是一件好事。反而感觉工具是为流行语而不是人做的。
这篇文章的灵感来自我的朋友Clemens Mewald——我有幸与之共事过的最优秀的产品经理之一——他写了一篇名为*你的企业深度学习工具初创公司将会失败*…我读这篇文章时的心情和我的玩具即将被夺走时一样。**
感觉好像这些工具是为流行语而不是人制造的。
一方面,他是对的:如果你像其他人一样制作 ML/AI 开发工具,你的创业公司可能会破产。另一方面,我不希望创业者尖叫着逃跑。
我这么说纯粹是自私的,作为一名数据科学家代表她的人民恳求。我认识到,我很荣幸能在一个相对较少受到我即将提出的问题困扰的环境中工作,所以我想让你知道,这些话是由我过去的经历激发的(即使是在谷歌这里!)和你每天与我分享的故事。让我把我的声音借给你。
全体船员集合!
即使是好的工具也不是完美的,这并不奇怪——要做的工作比任何数据科学工具/平台提供商(让我们简称这些实体为“工具制造商”)可能单独管理的工作都多。算法研究狂热的盲目步伐意味着,理论创新远远超过工具制造商的能力,无法将这些数学蓝图交到渴望使用它们的数据科学家手中。这是一个多么大的问题!
理论创新的速度远远超过工具制造商将这些数学蓝图放到用户手中的能力。
这就是为什么即使我为一个工具制造商工作(谷歌云非常认真地为数据科学家构建和集成伟大的工具),让我成为第一个为任何考虑进入这个领域的工具制造商欢呼的人。这项工作需要全体人员全力以赴!
作为 UX 问题的数据科学有效性
我们数据科学家花了这么多精力来帮助你了解你的用户……你忘记了我们也是用户。这让我想起了克莱门斯对工具制造创业公司的(可靠)建议。
小伙伴们,又在狼吞虎咽了?图片:来源。
如果你追逐“深度学习”的热潮,并将你的整个策略建立在市场对众多数据科学工具中的一种的迷恋之上,那么克莱门斯是对的。播放恐怖电影风格的预感音乐。
追用户。致力于制造不会让数据科学家们眼馋的工具。
而是追用户。那就是数据科学家。为了追赶我们,你必须了解我们是谁,我们如何工作。你必须明白我们已经拥有的和我们缺少的。拜托,不要只是制造另一个实现卷积神经网络的工具。制作一个工具,实现卷积神经网络的方式,数据科学家可以使用,而不想抓自己的眼睛。这是一个微妙的区别。
数据科学家在历史上一直无权决定他们使用的工具,但我敢打赌,随着雇主努力吸引最优秀的人才,数据科学家在他们使用的工具上有发言权的转变正在加速。
让我们更容易完成工作
虽然我们中的一些人声称喜欢做艰苦的事情,但是我们中的大多数人讨厌做那些需要最少技巧和最大努力的家务。就大多数数据科学家而言,如果我们编写的所有代码都是一样的,无论是大的还是小的,笔记本电脑还是云,原型还是产品,那就太好了……在内心深处,我们知道不是这样的唯一原因是我们生活在黑暗时代,在那里我们的工具很烂。
我们热爱的工作部分是涉及数据、创造力、狡猾和可能性的部分。这是我们了解宇宙并与你分享的部分。不是涉及安装设置和旋钮旋拧的部分。这并不是要求数据集采取不同的形状,以便函数能够在其上运行。这绝对不是让智能隔离中构建的软件包相互交流的部分。
您可以帮助我们更加热爱我们的工作,我们会因此而热爱您!
收拾这个烂摊子!
事实是,我们每天花很多时间与讨厌的工具作斗争。我们知道我们确切地想要做什么,只是需要两个星期去做。听起来像伟大的 UX,对吗?
今天的数据科学工具生态系统是如此的支离破碎和混乱,甚至可能会让 Marie Kondo 感到晕眩。
今天的数据科学工具生态系统是如此的支离破碎和混乱,甚至可能会让玛丽·近藤感到晕眩。如果你想制造更多的工具,专注于制造能激发快乐的工具。便于将它们折叠在一起。(对吧,玛丽?)
今天的工具没有一个能解决所有问题。
顺便说一句,这也是克莱门斯告诉你要做的。不要为了工具而开发工具,开发工具是为了满足用户的需求,让用户开心。专注于集成——让这些工具与生态系统的其余部分很好地配合非常重要,因为没有人愿意停止他们正在做的事情来给你的工具特殊待遇,除非它是万灵药。正如克莱门斯解释的那样,没有一种现代工具能解决所有问题,所以不要去想它。(如果有人告诉你深度学习是圣杯,那就更有理由去阅读克莱门斯所说的话了。
重在融合!没有人想停止他们正在做的事情来给你的工具特殊待遇。
要激发快乐,让产品完美地融入满足用户需求的其他工具的生态系统,你必须了解它们,你必须对 UX 有所了解。这意味着你的产品经理、开发人员和用户体验人员必须花时间去理解数据科学家。在谷歌倡导数据科学家一直是我工作的一大部分——包括帮助推动从第一天起就重视数据科学 UX 的项目(例如,谷歌的假设工具)——如果这是我们拥有美好事物的代价,我会让自己在外面成为一个讨厌的人。
为在可用性上全力以赴的 TF 2.0 欢呼吧!当 TF 切换到 Keras 风格,并对让您编写所有样板文件说再见时,可能会有初期的痛苦,但我很兴奋。有人甚至会说我是渴望。
好消息是事情正在好转。去年我最喜欢的一条新闻是 TensorFlow 2.0 以用户为中心,以及该社区致力于改善 TensorFlow 1.x 的用户痛苦。这太棒了,这些著名的计划正在引领潮流,但如果初创公司采取同样的立场,那不是很好吗?
我的观点是什么?
数据科学界感到不被理解,我们看到这反映在雇主要求我们使用的工具中。修理这些工具并使它们变得友好不仅仅是我们几个人的工作,尽管我向那些推动我们克服困难前进的了不起的英雄们致敬。唉,很少有 UX 的专业人士认为数据科学的有效性是(至少部分是)UX 问题。更糟糕的是,新的工具生态系统并没有对鼓励变革浪潮起到多大作用,通常是为时髦词汇而不是用户构建的。让我们尽我们所能来解决这个问题!
感谢阅读!人工智能课程怎么样?
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
在这里欣赏整个课程播放列表:bit.ly/machinefriend
喜欢作者?与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 、 Substack 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格联系。
数据科学和行为经济学
乔希·里默尔在 Unsplash 上的照片
通过数据了解我们的偏见
什么是数据科学?
根据维基百科的说法,数据科学“是一个跨学科领域,它使用科学的方法、流程、算法和系统从结构化和非结构化数据中提取知识和见解。
和统计学有什么区别?说实话,没那么多。统计学是数学的一个分支,主要研究随机性、不确定性和信息。它是用于从数据中提取知识的科学的一部分,现在几乎在任何科学领域都有应用。
这种知识提取可以通过算法来完成,这有时需要大量的计算能力。由于缺乏足够强大的计算机,这些算法中的一些在许多年前不可能存在或被测试。然而,随着计算机科学和技术的巨大进步,我们现在能够开发更复杂的方法来从数据中提取信息。不仅如此,我们现在可以获得比以前多得多的数据。就好像我们给统计学打了类固醇,然后它就变成了数据科学。如果你想了解更多,可以从这里开始。
什么是行为经济学?
另一方面,行为经济学是心理学在经济学领域的应用(因此,它也被称为经济心理学)。许多年前,主流经济理论基于一些假设,其中之一是人类理性行事(臭名昭著的经济人)。
乍一看,这种假设似乎没有多大意义,因为我们都知道我们自己并不总是理性行事。然而,我们必须考虑到,如果我们从大的方面来看,这个假设似乎更合理:我可能不会完全理性地行动,你也可能不会。然而,总的来说,人类可能会。就像我们的非理性互相抵消了。这是一个更合理的假设,它使得创建模型、尝试和预测市场走向变得容易得多。
然而,即使是这个更合理的假设,也被行为经济学领域质疑,并在某些情况下被证明是错误的。此外,它最大的贡献不是表明经济学家忽视我们的非理性而过度简化了现实,而是表明非理性有时是可以预测的。我们的行为方式可能与理性假设不一致,但这本身是一致的,这意味着我们总是倾向于以同样的非理性方式行事。这种行为被称为认知偏差。
他们是怎么走到一起的?
现在我们有数据和计算能力来提出更好的现实模型,我们知道人类的非理性可以被测量和预测,我们如何利用这一点呢?好吧,我将提出一些著名的认知偏见,以及如何使用数据科学来衡量它们或将它们融入到您的产品/服务中。
确认偏差
最著名的认知偏差之一是确认偏差。它代表了我们倾向于寻找那些证实我们已经知道的东西,而忽略那些与我们自己的观点不一致的观点。如果我反对枪支管制,我看到一篇文章说枪支会增加暴力,我会倾向于忽略它。然而,如果我看到另一篇文章显示了相反的证据,我更有可能去读它。例如,脸书通过选择向我们展示与我们的世界观一致的帖子、文章和观点,从这种偏见中获利。
但是你怎么能深入到只看数据就能知道某人对世界的看法呢?嗯,你不需要。你可以使用算法来考虑我倾向于喜欢的内容类型,将我与其他喜欢过相同内容的用户进行比较,并向我推荐他们喜欢过而我以前没有见过的内容。网飞的推荐系统也是同样的原理。为你做到这一点的算法类型被称为“协同过滤”,也可以用来推荐产品或服务。
风险规避
根据环境的不同,人们或多或少倾向于冒险,这往往会导致他们做出不合理的决定。假设我邀请你赌一枚硬币:正面我给你 50 美元,反面你给我 100 美元。似乎不公平,对吧?我们实际上可以计算出这类游戏的预期收益,方法是将每个可能的结果乘以其发生的概率,然后将结果相加:50% *(-100 美元)+50% *($ 50)=-25 美元。这意味着玩这个游戏你平均会损失 25 美元。然而,如果你仍然因为过于乐观,仍然希望赢得 50 美元而决定玩这个游戏,那么你就是有风险倾向的行为。然而,如果反过来,你就会表现出规避风险的态度。
在这种情况下,期望值通用等式可以写成如下形式:
其中 p 是概率,v 是每个可能结果的相关值。风险中性的个人会根据这个等式做出决定。然而,通常情况下,人们往往是非理性的,因此行为更像下面的模型:
这里我们加入了α,它代表了个体对风险的态度:当α>1 时,个体容易产生风险;当α<1, the individual is averse to risk (and when α=1, the equation becomes just like the one above).
Studies have already shown some characteristics that can influence your attitude towards risk, such as sex, age and wealth. Since this bias can be seen not only in coin-tossing games but also when people buy insurance, warranties and lottery games, you could use regression algorithms to calculate and predict your customers’ behaviour towards risk. By doing so, you could make sure you price your services accordingly, depending on the person’s profile.
Moral hazard
Photo by Conor SamuelonUnsplash
这种偏见在保险行业很常见,举个例子可以更好地解释:一旦你给你的车上了保险,你就开始不那么担心承担风险:例如,你不会像以前那样避免在危险的街区停车。为了在给你的保险定价时考虑到这一点,公司不仅开始考虑年龄和性别的整体统计数据(例如:年轻男性更有可能遭遇车祸,所以他们的保险单通常会更贵),而且他们必须考虑到这些概率在你给汽车投保后如何变化*。这意味着通过一个虚拟变量来控制他们的分析,这个虚拟变量告诉人们是否有保险。*
结论
综上所述,我们知道数据科学可以为决策过程中存在低效率的领域带来价值。行为经济学可以向我们展示那些低效率在哪里,并且已经可以为我们提供一些模型,我们可以将我们已知的数据科学方法应用于这些模型。另一方面,数据科学可能会帮助我们识别我们还没有意识到的新偏见。这是一个双赢的游戏。
数据科学和竞争性编程
他们在解决问题,但方法不同。
C 竞争是学习新事物的好方法,尤其是对那些有兴趣竞争并赢得某些东西的学生来说。到目前为止,竞争性编程已经成为计算机科学界的热门竞赛。
对我来说,竞争性编程具有挑战性,因为你必须解决问题,并且使用现有的算法或实现自己的算法来解决问题。
当我大一的时候,我仍然花时间在这上面竞争,而且,我被介绍到数据科学。由于数据量和存在的机器学习算法,近年来它一直很受欢迎。
我对这一领域的发展速度以及使用数据科学方法的应用感到惊讶。正因为如此,我对数据科学产生了兴趣。
然后,突然之间,我陷入了两难的境地,要选择是继续追求竞争性编程,还是继续提升我的数据技能。根据我的经验,那些东西是在解决问题。
但是你有没有想过两者都追求还是选择其中一个?
您之所以阅读这篇文章,是因为当我刚进入数据科学领域时,您可能和我有着同样的困境。所以,我想给你一些关于竞技编程对你的职业是否有用的观点。
我写这篇文章,特别是为那些计算机科学的新生或者可能目前刚开始学习数据科学的人。如果你刚接触竞争性编程,我希望这对你有用。
我写这篇文章是基于我在探索计算机科学的许多领域时的经验。
这篇文章将分成几个部分。首先,我将介绍什么是竞争性编程。然后,我将向你展示与 Kaggle 比赛的不同之处。最后,我会给你一些来自软件工程和数据科学的观点,并强调它是否值得追求。
没有别的了,让我们开始吧。
竞争性编程
竞争性编程是一种人们必须在一定时间内解决问题的竞赛。通常,它会给你输入和输出的例子,然后你用任何编程语言来实现这个问题。
这是 Codeforces 的问题示例,
由我从 Codeforces 中捕获
首先我们可以看到,问题陈述用一个故事来说明问题。然后,它向您展示了示例案例。最后,给出了一些注意事项。
有了这个问题陈述,你必须分解我们必须做的步骤,然后,我们设计并实现算法来解决它。它只是显示了几种情况,但实际上,还有更多。因此,你必须确保你的算法可以解决任何情况。
总的来说,竞争性编程将在解决问题和编程技能上挑战你的团队。还有,因为你要用算法解决问题,所以你要一步一步地写解决方案。
与数据科学竞赛的区别
与数据科学社区之一的 Kaggle 相比,竞争确实不同。
在 Kaggle 上,你会得到问题陈述和数据集。你必须使用机器学习算法来解决问题,以最小的误差预测结果。除了解决问题之外,您还必须分析数据以获得洞察力、模式、异常值等等。
这里显示了 Kaggle 的房价预测,
被我从 Kaggle 中捕捉到。
在这个例子中,你想解决回归问题,你必须用给定的数据来预测房子的价格。因此,您必须调整模型,使其能够以更小的误差预测值。此外,你必须分析数据集,以获得更多的见解。
在竞争性编程中,你也分析算法,但这与数据科学不同。您将分析您的算法性能。
如果你发现你的算法不符合某些要求像你的算法超过了时间限制,那么你就要改进算法。因此,你可以解决问题。
在数据科学中,你也将分析你的模型,然后你改进模型以具有更高的性能。
但不同之处在于,你也在研究数据的模式。有了这个模式,我们希望在继续创建模型之前获得一些见解,可能还有一些假设。
总体而言,数据科学竞赛主要在于分析您的数据和建模以实现更高的准确性。你不需要像从零开始的竞争性编程那样显式地编写算法,但是你只需要为这样的算法使用现成的包。
尽管如此,你必须分析数据集并找到它的模式,还要找到可能成为你的问题的假设的见解。这部分是数据科学本身最具挑战性的部分。
最后的想法
因此,根据这些信息,你应该同时追求两者还是只专注其中一个?
我不知道。你有权选择哪一个。如果你还很困惑,我来给你一些我的看法。
竞争性编程和数据科学是不同的。竞技编程通过自己实现一些算法来解决问题。另一方面,数据科学也在解决问题,但它不涉及算法实现。因此,这是一个不同的领域。
如果你想解决一个新的数据科学问题,但没有任何给定的 ML 算法的实现,那么追求竞争性编程仍然是值得的。
此外,如果你想成为一名软件工程师,这是值得追求的,因为它有很多算法实现。
但是,如果您只对数据集的分析和建模感兴趣,并且主要关注于分析,那么您不应该在竞争性编程上花费太多时间。
您可以提高您的数据科学技能,因为有许多技能您必须学习,例如编程、深度学习、数据可视化、统计等等。
这是我的建议,这就是本文的结尾。
感谢您阅读我的文章,您也可以在下面查看我以前的文章:
从勘探到预测 1970 年至 2015 年的二氧化碳排放数据。
towardsdatascience.com](/time-series-forecasting-with-arima-model-in-r-77f4e2ae7abb) [## Python 中的客户细分
基于 K-均值聚类算法的图像分割。
towardsdatascience.com](/customer-segmentation-in-python-9c15acf6f945) [## 更高的准确性并不意味着更好的机器学习模型性能
我们可以定量地衡量机器学习模型的性能,但不仅仅是准确性,还有很多…
towardsdatascience.com](/greater-accuracy-does-not-mean-greater-machine-learning-model-performance-771222345e61)
数据科学和机器学习不一样
虽然数据科学随着机器学习和人工智能的进步而变得流行,但科学是一个更广泛的话题。
图片来自维基共享,根据知识共享 署名-共享 2.0 通用许可改编。
在过去的几年里,机器学习、人工智能以及最终的数据科学成为了行业的热门词汇。
当然,这种现象是有原因的。新的算法和新的硬件使得复杂的预测系统对许多公司来说是负担得起的。不难在行业中找到一个用例,说明他们如何使用一个千层卷积神经网络来克服一个巨大的问题。真的,这是一件好事。
谁从来不想要水晶球?
然而,几十年来,机器学习和人工智能一直是学术界的研究主题。它们不是新的。现在,他们只是更容易接近。几乎任何人都可以运行 python 笔记本,导入 scikit-learn,加载 pandas 数据框,并…安装它。
🎶装就装,装就装,装就装,
没有人想被打败🎵
没错。没有人想在市场上被打败。互联网上充斥着如何训练你的̶d̶r̶a̶g̶o̶n̶模型的教程。你只需要小心过度适应的怪物。对吗?
号码
不要误解我。网络上有大量有价值的内容,学习这些内容很重要。然而,根据我的经验,如果你想成为一名成功的数据科学家,你需要超越机器学习食谱。以下是我认为所有数据科学家都需要掌握(或培养)的三项高级技能:
- 科学方法
- 如何为企业创造价值
- 如何恰当地传达调查结果?
一方面,具有扎实学术背景的数据科学家通常擅长科学方法。然而,他们常常过于兴奋地钻研有趣的研究,可能会忘记企业真正需要的是什么。另一方面,行业中成长起来的数据科学家往往会忽视科学方法的严谨性。
第三个技能真的是除了的东西。我坚信这取决于个人的经历,甚至可能与他或她的个性有关。
好消息是:即使你缺少这些技能中的一项,你也可以学习它们并发展自己。
今天,我要讲第一个:
科学方法
普里西拉·杜·普里兹在 Unsplash 上的照片
我们把科学这个词放在‘数据科学’里是有原因的。如果你不知道如何进行科学实验,你应该学习(即使你不是数据科学家,因为科学是为每个人服务的)。一个数据科学家必须理解科学是什么,并且知道如何正确地批评它。这包括知道如何审视自己的科学工作。
以数据为基础的科学
这就是数据科学的一般含义。我们使用历史观察来证明或拒绝假设。在这个意义上,人们可以说数据科学是基于证据的研究。一个多世纪以来,人们一直在其他领域(如医学)这样做。因此,当您执行数据科学任务时,请在科学方法中考虑它:
- 你的问题是什么?
- 你的假设是什么?
- 你将如何检验你的假设?
- 结果如何支持你的主张?
此外,如果在这个过程中出现了新的见解或证据,你随时可以重新开始这个过程。它叫做:
科学实验生命周期!
但是机器学习管道看起来不像科学方法。
我完全不同意。让我们举一个普通的例子:
**问题:**什么原因导致堵车?
**假设:**下雨导致交通堵塞。
**方法:**训练一个 ML 模型,根据历史降雨数据进行交通预测。用看不见的观测值预测流量并测量误差。此外,基于历史平均值作为基线模型来估计流量,并测量误差。
**分析:**比较误差分布。ML 模型的误差是否明显低于基线误差?
当我强调’*显著更低’*时,是因为你不能只说’它比我证明的假设低 5% '。你最好使用假设检验,这是一种统计工具,不幸的是,许多数据科学家不知道如何使用。
我的方法可能不是测试下雨是否造成交通堵塞的最佳方法。实际上,这只是一个可能的方法,而且,还是一个普通的例子。我的观点更多的是关于你应该如何看待数据科学任务。我们不应该因为需要预测流量而按下“适合按钮”,而是应该思考我们试图回答什么,我们将如何回答,以及我们的结果是否真的比更简单甚至随机的结果更好。
现在,我希望你同意我的观点,数据科学和机器学习是不一样的。除了我提到的高级技能之外,一名数据科学家还应该掌握许多其他技术科目。但这是另一篇博文的主题。
如果你喜欢这本书,你可以在 Medium 或者 Twitter 上找到我。此外,如果您想通过电子邮件获得关于数据科学的提示和想法,请订阅我的简讯。这是一封每月一封的电子邮件,可能会附带:书籍建议、flash 小说、关于音乐的讨论等等。
用 Scala 和 Spark 实现数据科学和机器学习(第 1/03 集)
Scala Spark 机器学习
基于 Spark 分布式计算的大规模机器学习
学习 Scala:从护目镜图片下载的 Scala logo
cala 是用来编写最流行的分布式大数据处理框架 apache Spark 的核心语言。从小型企业到大型企业,大数据处理正变得不可避免。每秒产生的数据量都在增加。
从数据中提取有价值的见解需要最先进的处理工具和框架。研究人员正在努力开发特定于应用的工具、编程语言和框架。Scala 是利用大数据处理的发明之一。
Scala 编程语言旨在实现可扩展的解决方案来处理大数据,从而产生可操作的见解。
在这个系列中,我将在 Google colab 中开发一系列教程来学习 Scala,并申请数据科学和机器学习应用。Python 被认为是数据科学和机器学习最常用的编程语言。然而,当处理大数据时,数据科学家应该知道 Scala 等替代方案。
谁应该遵循这些教程?
如果您是一名使用 Pythonic 方法的数据科学家,并且想要添加另一个大数据处理工具,本系列适合您。
我把这个系列分成了三个部分。在这个故事中,我将讲述 Scala 编程语言的基础知识。我们将在下一篇文章中介绍 spark 和 Scala,并以 Spark 和 Scala 的机器学习结束本系列。对于每个故事,将有与谷歌 colab 相关的信息和实践代码。
在第一个故事中,你将学习如何在 Google colab 中安装或设置 Scala,最重要的数据类型,Scala 表达式,Scala 函数和 Scala 对象。
Scala 数据类型
使用 python 时,不需要指定变量的类型,但是 Scala 要求你指定变量的数据类型。因此,理解和实践 Scala 中实现的数据类型更有意义。下面是 Scala 中实现的最基本的数据类型。你可以用 google Colab 做练习。
- Scala 数据类型: Int,Char,Float,Double,Long,Short,Boolean
- **Scala 集合:**数组,向量
- **Scala 映射:**键值对
Scala 表达式
和其他编程语言一样,Scala 表达式也遵循类似的数字、布尔和逻辑表达式。一些常见和基本的表达包括在谷歌 colab 笔记本中。
// Syntax
val <identifier>[: <type>] = <expression>
var <identifier>[: <type>] = <expression>// Comment out one line
println("Hello Scala")// sample expression
var x = 2 * Math.sqrt(10) / 5
Scala 函数
Scala 是一种面向对象的编程语言,你可以按照同样的风格编写函数。下面是在 Scala 中定义函数的语法。你可以通过本博客附带的 google colab 笔记本练习真实的例子。
def <identifier>(<identifier>: <type>[, ... ]): <type> = <expression>
下面给出了一个将两个整数相乘并输出整数的函数示例。
def multiplier(x: Int, y: Int): Int = { x * y }
Scala 类和对象
在面向对象编程中,类被认为是非常有用的,对于 Scala 也是如此。对于使用 Scala 的程序员来说,类可以处理大数据和复杂的代码结构,使事情变得更简单。像其他语言一样,你可以用 Scala 写类。下面是一些例子。下面是一个最小的类示例
class User
val user1 = new User
Scala 类之旅是用 Scala 编写类的快速指南。谷歌 colab 笔记本中给出了更多的例子。
导入包
像其他语言一样,您可以在 Scala 中导入原生包和第三方包。java 和 python 的语法基本相同。
import Array.
Scala 中的并行处理
Scala 的主要目标是处理大型数据集。为了实现这一点,Scala 提供了一个非常简洁的并行处理解决方案,只需要最少的代码修改。如果您来自 Python,多处理很难设置,并且经常会导致意想不到的结果和失败。Scala 对多处理有更好的支持。在其他操作中,filter
和map
是并行处理时最常用的。下面是一些例子。
谷歌 Colab 笔记本
我准备了一个功能性的 Google colab 笔记本。请随意使用笔记本进行练习。
现实项目结论
在这一集里,我们学习了 Scala 的基础知识,并通过练习涵盖了以下关键概念。
- 在 Google colab 中运行 Scala
- 基本 Scala 数据类型
- Scala 函数和类
- Scala 中的并行处理
在下一集,我们将使用 Google colab 了解 Scala 的 spark。
参考资料/阅读/链接
Scala Docs-https://docs.scala-lang.org/tour/tour-of-scala.html
https://www . Lynda . com/Scala-tutorials/Scala-Essential-Training-Data-Science/559182-2 . html