不比较平均值

仅使用平均数来比较组数字掩盖了许多见解

在商务会议中,通过比较平均数来比较一组数字是很常见的。但这样做往往会隐藏重要的信息,即这些群体的数字分布情况。有许多可视化的数据可以说明这一信息。这些图包括条形图、直方图、密度图、盒状图和小提琴图。通过免费的软件,这些软件很容易生成,工作小组小到十几个,大到几千个。

2020年9月24日



假设你是一名高管,你被要求决定给哪位销售领导一个大奖励/晋升/奖金。你的公司是一家只看重收入的资本主义公司,所以你决定的关键因素是今年谁的收入增长最多。(鉴于现在是2020年,也许我们会卖口罩。)

这里是所有重要的数字。

名称 平均收入增长(%)
爱丽丝 5
短发 7.9
克拉拉 5

和丰富多彩的图形

在此基础上,决定看起来很容易。鲍勃,略低于8%,有收入增长超过他的对手谁在5%的显着憔悴更好。

但是让我们深入挖掘,并期待在个人账户为我们每一个salespeeps的。

名称 帐户收入增长(%)
爱丽丝 -1.0 2.0 1.0 -3.0 -1.0 10.0 13.0 8 11.0 10.0
短发 -0.5 -2.5 -6.0 -1.5 -2.0 -1.8 -2.3 80.0
克拉拉 3.0 7 4.5 5.5 4.8 5 5.2 4 6.0 5

这个账户层面的数据说明了一个不同的故事。Bob的高绩效是由于一个客户带来了80%的收入增长。他的其他账户都缩水了。鲍勃的业绩只基于一个客户,他真的是最好的奖金销售员吗?

鲍勃的故事是之一,通过观察平均值与任何一组数据点的最大问题一个典型的例子。通常的平均水平,在技术上的平均值,是很容易出现一个异常值摆动的整体价值。记住净值平均百无家可归的人是一次比尔·盖茨进入房间$ 1B。

详细的账户数据揭示了另一个不同之处。虽然Alice和克拉拉都具有相同的平均水平,他们的帐户数据告诉两个非常不同的故事。Alice是要么非常成功的(〜10%)或平庸(〜2%),而克拉拉是一贯成功的轻度(〜5%)。只是看平均数掩盖这一重要的区别。

通过这一点,任何人谁是研究统计数据或数据可视化是在我那里翻白眼是船长显而易见的。但是,这方面的知识没有得到传递给在企业界人。我看到的柱状图比较平均在商务演示所有的时间。所以我决定写这篇文章,展现了一系列的可视化,你可以用它来探索这种信息,获取洞察力,平均不能单独提供。在这一过程中,我希望我能说服一些人使用平均只停止,并质疑平均值,当他们看到别人这样做。毕竟没有一点热切收集你需要一个数据驱动型企业的数据,除非你知道如何正确地检查这些数据。

的条线图显示所有的个体数

因此,规则不比较平均,当你不知道什么数据看起来的实际分布等。你怎么能得到的数据的好照片?

我将从上面的例子开始,那时我们没有很多数据点。通常最好的方法是使用条形图,它将显示不同人群中的每一个数据点。

显示代码
ggplot(销售,AES(姓名,d_revenue,颜色=名))+ geom_jitter(宽度= 0.15,α-= 0.4,尺寸= 5,show.legend = FALSE)+ ylab(标记= “收入增长(%)”)+geom_hline(y截距= 0)+ theme_grey(base_size = 30)

有了这个图,我们现在可以清楚地看到鲍勃孤独的高点,他的大部分结果都相似,Alice的最坏的结果,那克拉拉是更为一致。这告诉我们远远超过了早期的条形图,但也算不上什么难解释。

那么你可能会问,如何绘制这个漂亮的带状图?谁想要绘制一些简单的图形大多数人使用Excel,或其他一些电子表格。我不知道它是多么容易积带状图的平均电子表格,因为我没有太大的电子表格用户。根据我在管理简报看,它可能是不可能的,因为我几乎没有看到一个。对于我的策划我使用R,其中一个令人震惊的强大的统计软件包,由人谁是熟悉的,如“肯德尔等级相关系数”和“曼 - 惠特尼U检验”的短语使用。尽管这样可怕的武器库,但是,它很容易与简单的数据处理和图形绘制R系统涉猎。它是由学者作为开源软件开发的,所以你可以下载并使用它,而不用担心许可证成本和采购官僚主义。异常地为开源世界中,它具有优异的文档和教程来学习如何使用它。(如果你是一个Pythonista,这里还有Python库做所有这些事情的罚款范围,虽然我没有太多深入研究该领土。)如果您想了解R,I有一个总结在附录中我了解了我对它的了解。

如果你有兴趣我是如何生成各种图表展示我在这里,我已经包含在每个排行榜中的命令绘制的图表,显示经过“显示代码”披露。所使用的销售dataframes有两列:名称,d_revenue。

如果我们有什么的数据点的数目越大考虑?试想一下,我们三人是现在,而更重要的,每个处理几百账户。其分布仍,但表现出相同的基本特征,我们可以看到,从一个新的带状图。

显示代码
ggplot(large_sales,AES(名称,值颜色=名))+ geom_jitter(宽度= 0.15,α-= 0.4,大小= 2,show.legend = FALSE)+ ylab(标记= “收入增长(%)”)+geom_hline(y截距= 0)+ theme_grey(base_size = 30)

与带状图的一个问题,但是,是我们看不到的平均值。因此,我们不能告诉Bob的高值是否足以弥补这种普遍较低点。我可以通过绘制图表上的平均点,在这种情况下,黑色菱形处理这个。

显示代码
ggplot (large_sales aes(名称、值、颜色=名字))+ geom_jitter(大小宽度= 0.15,α= 0.4,= 2,show.legend = FALSE) + ylab(标签=“收入增长(%)”)+ geom_hline (yintercept = 0) + stat_summary(有趣=“的意思是”,大小= 5,几何学=“点”,形状= 18,颜色=黑色)+ theme_grey (base_size = 30)

这种情况下,Bob的均值比另外两个小一些。

这说明,尽管我常常贬低那些谁使用的手段比较组,我不认为手段没用。我不屑是为那些谁只有使用的手段,或者使用,不做总经销。某种平均常常是比较有用的元素,但更多的,往往不是中位数居然是更好的中心点使用,因为它更好最多可容纳大离群像鲍勃的。每当你看到一个“平均”,你总是应该考虑哪一个更好:中值或平均值?

通常中间的原因是这样的下使用的功能,是因为我们的工具不鼓励我们使用它。SQL,占主导地位的数据库查询语言,带有一个内置AVG函数计算平均值。如果你想在中间,但是,你通常注定要google搜索一些比较难看的算法,除非你的数据库必须加载扩展功能的能力。[1]如果有一天我成为最高领导人,我会法令,没有平台可以有一个平均的功能,除非他们也提供一个中间值。

使用直方图看到分布的形状

虽然使用条形图是直接了解数据的一种好方法,但其他图表可以帮助我们以不同的方式进行比较。我注意到的一件事是,许多人希望使用一个图表来显示一组特定的数据。但是每种图表都说明了数据集的不同特征,明智的做法是使用多个图表来了解数据可能告诉我们什么。当然,当我在研究数据时,这是正确的,试着去了解它告诉我什么。但即使是在交流数据时,我也会使用一些图表,以便我的读者能够从不同的方面了解数据所表达的内容。

直方图是寻找一个分布的经典方法。这里是大数据集的直方图。

显示代码
ggplot(large_sales,AES(值,填充=名))+ geom_histogram(binwidth = 1,边界= 0,show.legend = FALSE)+ xlab(标记= “收入增长(%)”)+ scale_y_continuous(场所= C(50100))+ geom_vline(xintercept = 0)+ theme_grey(base_size = 30)+ facet_wrap(〜名,NcoI位= 1)

直方图能很好地显示单个分布的形状。所以很容易看出,爱丽丝的球被分成两个不同的块,而克拉拉的球只有一个块。这些形状也很容易从条形图中看到,但是柱状图澄清了形状。

柱状图只显示了一个组,但这里我将几个组放在一起进行比较。R对此有一个特殊的特性,它称为分面情节。这种“小倍数”(Edward Tufte创造的术语)在进行比较时非常方便。幸运的是,R使它们易于绘制。

以可视化的分布的形状的另一种方式是一个密度图,我认为的作为直方图的平滑曲线。

显示代码
ggplot(large_sales,AES(值,颜色=名))+ geom_density(show.legend = FALSE)+ geom_vline(xintercept = 0)+ xlab(标记= “收入增长(%)”)+ scale_y_continuous(场所= C(0.1))+ theme_grey(base_size = 30)+ facet_wrap(〜名,NcoI位= 1)

在y轴上的密度规模不是对我非常有意义,所以我倾向于从情节删除规模 - 毕竟这些所有的关键元素是分布的外形。此外,由于密度的情节很容易呈现为一条线,我可以积所有的人都在一个图。

显示代码
ggplot(large_sales,AES(值,颜色=名))+ geom_density(大小= 2)+ scale_y_continuous(断裂= NULL)+ xlab(标记= “收入增长(%)”)+ geom_vline(xintercept = 0)+ theme_grey(base_size = 30)

当有更多的数据点的直方图和密度图更有效,他们没有这样的帮助时,有只有一小部分(与第一例子)。当只有几个值,如评论网站的5星评级计数的条形图是很有用的。几年前,亚马逊加入这样一个图表的评价,这显示除了平均分数的分布。

箱线图可以很好地进行许多比较

直方图和密度图是一个很好的方法来比较分布的不同形状,但一旦我获得超越图形屈指可数然后他们变得很难进行比较。这也是有用的获得通常定义的范围和分布中的位置感。这是箱线图就派上用场了。

显示代码
ggplot(large_sales, aes(name, value, color=name)) + geom_boxplot(show.legend=FALSE) + ylab(label =“收入增长(%)”)+ geom_hline(yintercept = 0) + theme_grey(base_size=30)

箱形图的重点是数据的中间范围我们的注意力,使一半的数据点在盒子内。纵观上图我们可以看到超过Bob的账户缩水一半,他的上四分位数低于克拉拉的低限。我们也看到了他的热账户簇在图的上端。

箱形图很好地工作与一对夫妇的十几个项目相比,提供的基础数据看起来像什么一个很好的总结。下面是一个例子。我搬到伦敦在1983年搬到了波士顿十年后。正在英国,我很自然地想到天气两市如何比较。因此,这里是显示自1983年以来各月相比其每日高温的图表。

显示代码
ggplot(temps, aes(月份,high_temp, color=factor(city))) + ylab(label = "daily high temp(℃)")+ theme_grey(base_size=20) + scale_x_discrete(label =月份.abb) + labs(color = NULL) + theme(图例)position = "bottom") + geom_boxplot()

这是一个令人印象深刻的图表,因为它总结了超过27,000个数据点。我可以看到平均温度是如何在冬季在伦敦回暖,但在夏季凉爽。但我也可以看到每个月的变化如何比较。我可以看到,超过四分之一的时间,波士顿没有得到过一月冻结。波士顿的上四分位数是刚刚超过伦敦的下四分,清楚地表明它是在我的新家如何冷得多。但我也看到有些时候波士顿能否在一月份有所回暖比以往任何时候都伦敦是冬季月份。

箱形图确实有一个弱点,但是,我们不能看到数据的准确形状,只是通常定义的聚合点。比较爱丽丝和克拉拉时,这可能是一个问题,因为我们没有看到在Alice的分布双峰的方式,我们做柱状图和密度图。

有一对夫妇的解决这个办法。其中之一是,我可以很容易地与纸带结合箱形图。

显示代码
ggplot(large_sales, aes(名称、值、颜色=名称))+ geom_boxplot(显示。传说= FALSE,离群值。形状= NA) + geom_jitter(width=0.15, alpha = 0.4, size=1, show.legend=FALSE) + ylab(label = "revenue increase (%)") + stat_summary(fun = "mean", size= 5, geom = "point", shape=18, color = 'black') + geom_hline(yintercept =0) + theme_grey(base_size=30)

这使我能够同时显示基础数据和重要的合计值。在这个情节我还包括黑色的钻石,我以前用来显示均值的位置。这是突出情况下,像鲍勃其中平均和中位数是完全不同的一个好办法。

另一种方法是小提琴的情节,吸引密度积成盒子的侧面。

显示代码
ggplot(large_sales,AES(名称,值颜色=名,填充=名))+ geom_violin(show.legend = FALSE,α-= 0.5)+ ylab(标记= “收入增长(%)”)+ geom_hline(y截距=0)+ theme_grey(base_size = 30)

这具有显示分布清晰的形状的优势,所以Alice的表现双峰矗立右出。与密度的地块,他们才成为点更多数量的有效。对于销售的例子,我想我宁愿看到在箱子的点,但权衡的变化,如果我们有27000次温度测量。

显示代码
ggplot(临时工,AES(月,HIGH_TEMP,填充=因子(市)))+ ylab(标记= “每日高温(℃)”)+ theme_grey(base_size = 20)+实验室(填充= NULL)+ scale_x_discrete(标签= month.abb)+主题(legend.position = “底部”)+ geom_violin(颜色= NA)

在这里,我们可以看到,小提琴做显示每个月的数据的形状的一个伟大的工作。但总体来说,我觉得这个数据的箱形图更有用。它往往更容易通过数据,如中位数和四分使用显著路标比较。这是多条曲线发挥作用,至少在探索数据另一种情况。箱形图,通常是最有用的,但它的身价至少在小提琴的情节一看,正好看到,如果发现一些奇特的形状。

加起来

  • 除非您了解潜在分布不要使用只是一个平均的比较组。
  • 如果有人向您显示的数据只是一个普通的问:“什么是分布样子?”
  • 如果你正在研究如何进行分组比较,可以使用几个不同的图形来研究它们的形状以及如何最好地进行比较。
  • 如果问一个“平均”,检查是否均值或中位数为好。
  • 当呈现群体之间的差异,考虑至少我在这里显示的图表,不要怕使用不止一个,并选择那些最能说明的重要特征。
  • 首先:绘制分布!

致谢

阿德里亚诺Domeniconi,大卫Colls,大卫·约翰斯顿,詹姆斯·格雷戈里,约翰Kordyback,朱莉·伍兹 - 莫斯,杨棋彬,麦肯齐Kordyback,马可Valtas,斯内德莱彻,帕特Sarnacke,Saravanakumar Saminathan,蒂亚戈GRIFFO和小郭评论这篇文章的草稿内部邮件列表。

我的经验学习[R

我第一次接触R是在15年前,当时我和一位同事在一个统计问题上做了一些工作。虽然我在学校学了很多数学,但我对统计学避而远之。虽然我对它提供的见解非常感兴趣,但它所需要的计算量让我却步。我有一个奇怪的特点,我擅长数学,但不擅长算术。

我喜欢R,尤其是因为它支持了几乎不是其他地方的图表(我从来没有多使用电子表格喜欢)。但是,R为平台,社区狡猾足以让JavaScript脚本的安全。近年来,然而,与R工作做出了应有的哈德利惠克姆的工作变得更加容易 - 的R.他的率领“tidyverse”的发展奥斯曼男爵:一系列库,使[R很容易与工作。本文中所有的田块用他GGPLOT2库。

近年来我用[R越来越多的创建,使量化数据的使用,使用R作为多的计算,作为该地块的任何报告。在这里,tidyverse dplyr图书馆起着很大的作用。本质上,它可以让我以在表格数据操作的管道。在一个层面上这是一个收集管道在表中的行,与功能来映射和过滤的行。它然后通过支持面向表格的操作,如连接和枢轴更进一步。

如果写这么优秀的软件还不够的话,他还与人合写了一本学习使用R的优秀书:R代表数据科学。我发现这是对数据的分析有很大的教程,介绍了tidyverse,并经常参考。如果你在所有感兴趣的操作和可视化数据,并且想获得动手与作业严重的工具,那么这本书是一个伟大的路要走。在R的群落已经做了大量的工作,这个和其他的书有助于解释两者的概念和数据科学工具。该tidyverse社区还建成了被称为一流的开源编辑和开发环境[R工作室。我不再多说了,与R工作的时候,我通常用它在Emacs的。

[R肯定是不完美的。作为一种编程语言,它的惊人的古怪,我已经不敢从简单的dplyr / GGPLOT2管道的林荫大道流浪。如果我想要做一个数据丰富的环境造成严重的节目,我会认真地考虑切换到Python。但对于各种数据的工作,我做的,R的tidyverse已被证明是一个很好的工具。

技巧良好的带状图

有一对夫妇有用的技巧,我经常达到当我使用带状图。你经常会有数据点相似,甚至相同的值。如果我天真地绘制出来,我结束了这样的带状图。

显示代码
ggplot(sales, aes(name, d_revenue, color=name)) + geom_point(size=5, show.legend=FALSE) + ylab(label = "revenue increase (%)") + geom_hline(yintercept = 0) + theme_gray(base_size=30)

该地块仍然比第一条形图更好,因为它清楚地表明Bob的异常是怎么对他平时的表现不同。但有这么多相似的价值观克拉拉,他们对彼此顶部所有丛,所以你看不到有多少。

我的第一技巧我使用的是添加一些抖动。这增加了一些随机水平移动到带状图,这允许它们散开并加以区别的点。我的第二个是使分部分透明,所以我们可以看到,当他们在彼此顶部绘制。有了这两个技巧,我们可以好好欣赏的数据点的数量和位置。

探索直方图分箱宽度

直方图的工作原理是将数据放入垃圾箱。所以,如果我有1%的箱宽度,则所有帐户,其收入增长为0和1之间%被投入到相同的收集和图形绘制有多少是在每个垃圾桶。因此箱的宽度(或数量)产生很大的差别,以我们所看到的。如果我做出了较大的箱用于该数据集,我得到这个情节。

显示代码
ggplot(large_sales,AES(值,填充=名))+ geom_histogram(binwidth = 5,边界= 0,show.legend = FALSE)+ scale_y_continuous(场所= C(50100))+ xlab(标记=“收入增长(%)“)+ geom_vline(xintercept = 0)+ theme_grey(base_size = 30)+ facet_wrap(〜名,NcoI位= 1)

这里的垃圾箱是如此广泛,我们无法看到Alice的分布的两个峰值。

相反的问题是,如果箱太窄情节变得嘈杂。所以,当我绘制的直方图,我实验分箱宽度,尝试不同的值,看看哪些帮助公开数据的有趣的功能。

脚注

1:我已经很好地使用了SQLite的扩展函数贡献文件,它有一堆有用的功能,包括中值。

显著修订

2020年9月24日:发表

2020年9月18日:开始起草