进行探索性数据分析的五步指南
你是否曾经接到过一个数据集,然后被要求描述它?当我刚开始接触数据科学的时候,这个问题让我很困惑。我的第一个想法是 "你是什么意思?"然后是 "你能不能更具体一点?"现实情况是,探索性数据分析(EDA)是每个数据科学家工具包中的一个重要工具,其结果对于回答重要的业务问题是非常宝贵的。
简单地说,EDA是指执行可视化和识别重要模式,如相关的特征、缺失的数据和异常值。EDA对于为这些模式的发生提供假设也是必不可少的。它很可能不会出现在你的数据产品、数据亮点或仪表盘中,但它将有助于为所有这些事情提供信息。
下面,我将向你介绍执行有效EDA的关键技巧。对于经验丰富的数据科学家来说,这篇文章的内容可能并不令人惊讶(而是一个很好的提醒!),但对于新的数据科学家,我将提供一个潜在的框架,可以帮助你开始你的旅程。我们将使用一个合成数据集来说明问题。下面的数据并不反映Shopify商户的实际数据。在我们逐步进行的过程中,我鼓励你在每个部分的进展中做笔记
在你开始之前
在你开始探索数据之前,你应该尝试在高层次上理解数据。与领导层和产品部门沟通,尽量获得更多的背景信息,以帮助告知你的工作重点。你是否对执行预测任务感兴趣?这个任务是否纯粹是为了探索性的目的?根据预期的结果,你可能会在你的EDA中指出非常不同的东西。
有了这个背景,现在是时候看看你的数据集了。确定你的数据集中有多少个样本(行)和多少个特征(列)是很重要的。你的数据的大小有助于告知任何可能发生在路上的计算瓶颈。例如,在大型数据集上计算一个相关矩阵可能需要相当多的时间。如果你的数据集太大,无法在Jupyter笔记本中工作,我建议进行子采样,这样你就有了能代表你的数据的东西,但不会太大,无法工作。
我们的合成数据集的前5行。上面的数据集并不反映Shopify商户的实际数据。
一旦你在一个合适的工作环境中得到了你的数据,通常看一下前几行是个好主意。上面的图片显示了一个我们可以用于EDA的例子数据集。这个数据集是用来分析商家行为的。下面是关于特征的一些细节。
- 商店队列:商家加入Shopify的月份和年份
- GMV(商品毛额):售出商品的总价值。
- AOV(平均订单价值):客户自第一笔订单以来的平均价值。
- 转换率:导致购买的会话的百分比。
- 会话:你的网店上的总会话数。
- 已完成的订单:已经包装好并发货的订单数量。
- 交付的订单:客户已经收到的订单数量。
要解决的一个问题是 "数据中每一行的唯一标识符是什么?"唯一标识符可以是一个列或一组列,保证在你的数据集中的各行中是唯一的。这是区分行和在我们的EDA中引用它们的关键。
现在,如果你一直在做笔记,到目前为止它们可能是这样的。
- 该数据集是关于商人行为的。它由每天收集的一组商户的历史信息组成。
- 该数据集包含1500个样本和13个特征。这是一个合理的规模,将允许我在Jupyter笔记本中工作。
- 我的数据的每一行都是由 "快照日期 "和 "商店ID "列唯一识别的。换句话说,我的数据包含每天每家商店的一条记录
- 有100个唯一的商店ID和15个唯一的快照日期
- 快照日期范围从 "2020-01-01 "到 "2020-01-15",总共15天。
1.检查缺失的数据
现在我们已经决定如何处理数据,我们开始查看数据本身。检查你的数据是否有缺失值通常是一个好的开始。对于这个分析,以及未来的分析,我建议一次分析一个特征,并根据你的具体分析对它们进行排序。例如,如果我们看下面的缺失值分析,我们只需计算每个特征的缺失值的数量,然后按缺失值的最大数量到最小数量对这些特征进行排序。如果有大量的特征,这就特别有用。
按照缺失值的数量进行特征排名
让我们来看看你的数据中可能出现的一个例子。假设一个特征有70%的值丢失。由于缺失数据量如此之大,有人可能会建议直接从数据中完全删除这个特征。然而,在我们做任何事情之前,我们要尝试了解这个特征代表什么,为什么我们会看到这种行为。经过进一步的分析,我们可能会发现,这个特征代表了对调查问题的回答,而在大多数情况下,它是留空的。一个可能的假设是,有很大一部分人对提供答案感到不舒服。如果我们简单地删除这个特征,就会给我们的数据引入偏见。因此,这种缺失的数据本身就是一个特征,应该作为一个特征来对待。
现在,对于每个特征,我建议尝试了解数据缺失的原因以及它可能意味着什么。不幸的是,这并不总是那么简单,答案可能不存在。这就是为什么统计学的整个领域--归因法--都致力于解决这个问题,并提供了几种解决方案。你选择什么方法完全取决于数据的类型。对于没有季节性或趋势的时间序列数据,你可以用平均值或中位数来替代缺失值。如果时间序列确实包含趋势但不包含季节性,那么你可以应用线性内插法。如果它同时包含这两者,那么你应该调整季节性,然后应用线性内插法。在我上面讨论的调查例子中,我通过为调查问题特征创建一个新的类别 "未回答 "来处理缺失值。我不会在这里详细介绍所有的各种方法,然而,我建议阅读《如何处理缺失数据》,以了解更多关于归因法的细节。
很好!我们现在已经确定了我们数据中的缺失值--让我们更新我们的摘要说明。
- ...
- 10个特征包含缺失值
- "已履行的订单 "包含最多的缺失值,为8%,"商店货币 "包含最少的缺失值,为6%。
2.提供你的样本和特征的基本描述
在EDA的这一点上,我们已经确定了有缺失值的特征,但是我们对我们的数据仍然知之甚少。因此,让我们试着填补一些空白。让我们把我们的特征归类为以下两种。
连续的:一个连续的特征可以在一个给定的范围内承担无限多的值。一个连续特征的例子是一个商家的商品总值(GMV)。
离散性。一个离散的特征可以承担一个可数的值,并且总是数字。一个离散特征的例子是一个商家的会话。
分类(Categorical)。一个离散的特征只能承担有限数量的值。一个离散特征的例子是一个商户的Shopify计划类型。
我们的目标是将您的所有特征归入这三个类别中的一个。
| GMV | AOV | 转换率 |
| 62894.85 | 628.95 | 0.17 |
| 无 | 1390.86 | 0.07 |
| 25890.06 | 258.90 | 0.04 |
| 6446.36 | 64.46 | 0.20 |
| 47432.44 | 258.90 | 0.10 |
连续特征的例子
| 会议 | 售出的产品 | 已履行的订单 |
| 11 | 52 | 108 |
| 119 | 46 | 96 |
| 182 | 47 | 98 |
| 147 | 44 | 99 |
| 45 | 65 | 125 |
离散特征的例子
计划 | 国家 | 商店 群体 |
加起来 | 英国 | 南 |
高级店员 | 英国 | 2019-04 |
加 | 加拿大 | 2019-04 |
高级商店 | 加拿大 | 2019-06 |
高级购物网站 | 英国 | 2019-06 |
分类特征的例子
你可能会问自己,分类特征对我们有什么帮助?这种分类有助于我们决定在EDA中选择什么样的可视化方式,以及我们可以对这些数据应用什么样的统计方法。有些可视化方法不会对所有的连续、离散和分类特征起作用。这意味着我们必须以不同的方式对待每一类特征的群体。我们将在后面的章节中看到这一点是如何实现的。
让我们先关注一下连续特征。记录任何你认为重要的特征,如该特征的最大值和最小值。对离散性特征做同样的事情。对于分类特征,我喜欢检查的一些东西是独特值的数量和每个独特值的出现次数。让我们把我们的发现添加到我们的总结笔记中。
-
...
-
有3个连续特征,4个离散特征,和4个分类特征
-
GMV。
-
连续特征
-
值在12.07美元和814468.03美元之间
-
有一天的数据缺失......我应该检查一下,确保这不是一个数据收集错误"
-
计划。
-
分类特征
-
假设有四个值。"Basic Shopify"、"Shopify"、"Advanced Shopify "和 "Plus"。
-
Basic Shopify"、"Shopify"、"Advanced Shopify "和 "Plus "的值数分别为255、420、450和375
-
在 "高级Shopify "计划中的商家似乎比在 "基本 "计划中的商家多。这有什么意义吗?
3.识别你的数据的形状
一个特征的形状可以告诉你关于它的很多事情。我说的形状是什么意思?我指的是你的数据的分布,以及它如何随时间变化。让我们从我们的数据集中绘制一些特征。
不同样本的GMV和会话行为
如果数据集是一个时间序列,那么我们就调查该特征如何随时间变化。也许这个特征有一个季节性,或者随着时间的推移有一个正/负的线性趋势。这些都是在你的EDA中需要考虑的重要事情。在上面的图表中,我们可以看到AOV和Sessions有正的线性趋势,Sessions发出了季节性(一种在间隔时间内发生的明显行为)。回顾一下,快照数据和商店ID唯一地定义了我们的数据,所以我们观察到的季节性可能是由于特定的商店比数据中的其他商店有更多的会话。在下面的线图中,我们看到会话的季节性是由两个特定的商店造成的。商店1和商店51。也许这些商店有更高的GMV或AOV?
接下来,你要计算每个特征的平均值和方差。该特征是否几乎没有变化?它是不断变化的吗?试着对你看到的行为进行假设。一个方差很低或很高的特征可能需要进一步调查。
概率密度函数(PDFs)和概率质量函数(PMFs)是你的朋友。为了了解你的特征的形状,PMFs用于离散特征,PDFs用于连续特征。
特征密度函数的例子
下面是PMFs和PDFs可以告诉你的数据的一些情况。
- 偏度
- 特征是否是异质性的(多模态的)?
- 如果PDF中有一个缺口,那么该特征可能是不连贯的。
- 它是有界的吗?
我们可以从上面的特征密度函数的例子中看到,所有三个特征都是偏斜的。偏度衡量你的数据的不对称性。这可能会使我们不敢使用平均值作为中心趋势的衡量标准。中位数更加稳健,但它会带来额外的计算成本。
总的来说,在可视化你的数据分布时,有很多事情你可以考虑。对于更多的好主意,我推荐阅读《探索性数据分析》。不要忘记更新你的总结说明。
-
...
-
AOV。
-
连续特征
-
数值在38.69美元和8994.58美元之间
-
8%的数值缺失
-
观察到数据中存在较大的偏度。
-
观察到各样本的正线性趋势
-
会议。
-
离散特征
-
包含计数数据(可假设为非负整数数据)
-
数值在2和2257之间
-
7.7%的数值缺失
-
观察到数据中存在较大的偏度
-
观察到整个样本的正线性趋势
-
与数据中的其他店铺相比,1号和51号店铺的日访问量更大,并且显示出更快速的增长。
-
转换率。
-
连续特征
-
数值在0.0和0.86之间
-
7.7%的数值缺失
-
观察到数据中存在较大的偏度
4.识别重要的相关关系
相关性衡量两个变量数量之间的关系。假设我们专注于两个连续特征之间的相关性。交付的订单和履行的订单。体现相关性的最简单方法是绘制散点图,Y轴为已交付订单,X轴为已履行订单。正如预期的那样,这两个特征之间存在着正相关关系。
散点图显示 "已交付订单 "和 "已履行订单 "之间的正相关关系
如果你的数据集中有大量的特征,那么你不可能为所有的特征创建这个图--它需要太长的时间。因此,我建议为你的数据集计算皮尔逊相关矩阵。它衡量你的数据集中的特征之间的线性相关性,并给每个特征对分配一个在-1和1之间的值。正值表示正关系,负值表示负关系。
连续和离散特征的相关矩阵
重要的是要注意到特征之间的所有重要的相关性。你有可能在你的数据集中观察到许多特征之间的关系,但你也可能观察到很少的关系。每个数据集都是不同的!试着围绕为什么特征之间可能会有关联形成假设。
在上面的相关矩阵中,我们看到一些有趣的事情。首先,我们看到已完成的订单和已交付的订单,以及GMV和AOV之间有很大的正相关关系。我们还看到会话、GMV和AOV之间有轻微的正相关关系。这些都是你应该注意到的重要模式。
由于我们的数据是一个时间序列,我们也看一下商店的自相关。计算自相关揭示了一个信号的当前值和它以前的值之间的关系。例如,一个商店今天的GMV和它7天前的GMV之间可能存在正相关关系。换句话说,与周一相比,顾客更喜欢在周六购物。由于时间序列分析是统计学的一个非常大的领域,我不会在这里做更多的详细介绍,但我建议阅读《时间序列分析非常简短的课程》。
| 商店群组 | 2019-01 | 2019-02 | 2019-03 | 2019-04 | 2019-05 | 2019-06 |
| 计划 | ||||||
| 劝说:Shopify | 71 | 102 | 27 | 71 | 87 | 73 |
| 基础版商店 | 45 | 44 | 42 | 59 | 0 | 57 |
| 加上 | 29 | 55 | 69 | 44 | 71 | 86 |
| 淘宝网 | 53 | 72 | 108 | 72 | 60 | 28 |
离散特征 "商店队列 "和 "计划 "的概率表
上面概述的方法只适用于连续和离散特征。有几种方法可以计算分类特征之间的相关性,但是,我只讨论一种,即皮尔逊卡方检验。这涉及到采取成对的离散特征并计算其或然率表。或然率表中的每个单元格都显示了观察的频率。在皮尔逊卡方检验中,无效假设是有关的分类变量是独立的,因此,没有关系。在上表中,我们计算了我们数据集中两个分类特征的或然率表。商店群组和计划。之后,我们使用卡方分布在指定的α显著性水平下进行假设检验。然后,我们确定分类特征是独立的还是依赖的。
5.发现数据集中的异常值
最后,但肯定不是最不重要的,发现数据集中的离群值是EDA的一个关键步骤。离群值与你的数据集中的其他样本有明显的不同,在你的EDA之后执行统计任务时可能会导致重大问题。发生离群值的原因有很多。也许该样本和特征存在测量误差,但在许多情况下,离群点是自然发生的。
连续特征箱形图
箱形图的可视化对于识别离群点是非常有用的。在上图中,我们观察到所有的特征都包含相当多的离群值,因为我们看到了与大多数数据相距甚远的数据点。
识别离群值的方法有很多。每次绘制所有的特征来发现离群值是没有意义的,那么我们如何系统地完成这个任务呢?一种方法是计算每个特征的第1和第99百分位数,然后将大于99百分位数或小于第1百分位数的数据点分类。对于每个特征,计算离群值的数量,然后从最离群值到最小离群值进行排序。关注那些有最多离群值的特征,并尝试理解为什么会这样。记下你的发现。
不幸的是,上述方法对离散的特征不起作用,因为需要有一个排序来计算百分位数。一个离群点可能意味着很多东西。假设我们的离散特征可以承担三个值中的一个:苹果、橙子或梨子。对于99%的样本,其值是苹果或橙子,只有1%的样本是梨。这就是我们对这个特征进行分类的一种方式。关于检测分类数据中的异常点的更多高级方法,请查看《异常点分析》。
下一步是什么?
我们已经到了终点线,完成了EDA。让我们回顾一下主要的收获。
- 缺失值会困扰着你的数据。请确保了解它们存在的原因以及你打算如何处理它们。
- 为你的特征提供一个基本的描述,并对它们进行分类。这将极大地改变你所使用的可视化和你所应用的统计方法。
- 通过可视化其分布来理解你的数据。你永远不知道你会发现什么!适应你的数据在不同样本和不同时间的变化。
- 你的特征有关系!把****它们记下来。这些关系可以在以后的工作中派上用场。
- 如果你不知道异常值,就会影响你的乐趣。让人们知道这些未知的东西!
但我们接下来要做什么?这完全取决于问题。向领导层和产品提出你的发现的总结是很有用的。通过执行EDA,你可能会回答我们前面提到的一些关键的商业问题。展望未来,你的团队是否想对数据集进行回归或分类?他们想让它为KPI仪表盘提供动力吗?有这么多美妙的选择和机会可供探索。
值得注意的是,EDA是一个非常大的重点领域。我建议的步骤绝不是详尽无遗的,如果我有时间,我可以就这个问题写一本书在这篇文章中,我分享了一些最常见的方法,但还有很多东西可以加入到你自己的EDA中。
如果你对规模化的数据充满热情,并且渴望了解更多,我们正在招聘!请联系我们,或在网上申请。请联系我们或在我们的职业页面上申请。
Cody Mazza-Anthony是洞察力团队的一名数据科学家。他目前正在为Insights建立一个产品分析框架。科迪喜欢建立智能系统,使商家能够发展他们的业务。如果你想与科迪联系,请在LinkedIn上联系。
在您的收件箱中获得这样的故事!
来自构建和扩展Shopify的团队的故事。这个商务平台为全球超过170万家企业提供支持。
电子邮件地址是的,给我登记
与我们分享您的电子邮件并接收每月的更新。
谢谢你的订阅。
您将很快开始收到免费的提示和资源。