一键收藏,随时查看,分享好友!

    累积分布函数

    直方图和核密度估计的主要优势在于直观上的吸引力:能够告诉我们找到某个特定数据点的可能性有多大。例如,从图2-2可以清楚看出250毫秒左右的值出现的可能性非常大,而大于2000毫秒的值则非常罕见。

    但是具体有多罕见呢?这个问题仅靠图2-2的直方图是很难找到答案的。另外,除了想知道尾部所占的比重,我们可能还想知道哪部分请求是在150~350毫秒这个典型时间段完成的。当然,大多数事件都是在这个时间段完成的,但如果想知道具体有多少事件,就需要累加那个区域中所有矩形框的事件。

    累积分布函数(Cumulative Distribution Function,CDF)就具有这样的功能。点x的CDF能告诉我们哪部分事件发生在x的"左边"。换而言之,CDF是满足xi≤x的所有xi。

    图2-7显示的数据集与图2-2的相同,但是,这里的数据是用KDE(带宽h = 30)来表示的而不是使用直方图。另外,该图也包含对应的CDF。(KDE和CDF都规一化为1。)

    我们可以直接从CDF读出一些有趣的东西。例如,我们可以看到在t = 1500处(位于该分布的尾部)CDF仍然小于0.85;这意味着只有15%的请求的响应时间超过1500毫秒。相反,大约三分之一的请求是在典型区域150~500毫秒的时间内完成的。(我们是怎样知道这些的呢?t = 150的CDF大概是0.05,t = 500的CDF大概是0.40。换句话说,约40%的请求是在少于500毫秒的时间内完成的,在这些请求中,只有5%的请求是在少于150毫秒的时间内完成的。因此,大约35%的请求响应时间介于150~500毫秒之间。)

     
    图2-7 图2-2所示服务器响应时间的核密度估计和累积分布函数

    我们有必要停下来思考一下这些新发现,因为它们表明直方图(或者KDE)是怎样误导人的,尽管(或者正是因为)它们直观上很吸引人!单独从直方图或KDE来判断,绝对有理由假设大部分的事件发生在t=300附近的大峰上,而t>1500的尾部所起的作用非常小。然而,CDE清楚地说明事实并非如此。(问题在于我们的眼睛更善于判断距离而不是面积,因此我们被直方图中峰值附近那些很大的值误导,而没有发现与曲线下的总面积相比,高峰下方的面积并没有那么大。)

    在基本图形分析中,CDF可能是最不出名且最不受待见的工具。相对于直方图和KDE,它们没有太多直观上的吸引力,但它们能够让我们对数据做出定量的描述,这是我们常常需要却又很难从直方图获得的。

    从它们的计算过程可以得出累积分布函数的一些重要特性。

    因为位置x处的CDF值是x左侧的那一部分数据点,因而CDF常常随着x的增加单调递增。

    CDF不像直方图(或者KDE)那样抖动得厉害,但它本质上是以不太显眼的形式包含相同的信息。

    CDF不需要任何的矩形分组,因而不会丢失任何信息。因此,相较于直方图,它表示的数据更可靠。

    随着x趋于负无穷,所有的CDF趋于0。CDF通常是归一化的,因此随着x趋于正无穷,它将趋于1。

    对于指定的数据集,其CDF是唯一的。

    如果你有很好的数学功底,可能已经看出CDF是(一个近似)直方图的不定积分,直方图是CDF的微分:

    累积分布函数有多种用途。第一个也是最重要的用途是,它们回答了本节前面提出的问题:有多大比例的点落在某两个值之间?答案可以从图中轻松得出。第二个用途是CDF能帮助我们理解分布的不平衡性--换句话说,尾部占总体多少比重。

    当我们想要比较两个分布时,累积分布函数也是很有用的。在直方图中比较两个钟状的曲线是非常困难的。比较相应的CDF则通常更容易得出结论。

    在本节结束之前还要提的最后一点:在文献中,你会发现这个词:"分位数图"(quantile plot)。分位数图是一个CDF图,在该图中,x轴和y轴互换了。图2-8再次使用了服务器响应时间数据集的例子。通过这种方式绘图,我们可以很容易地回答出类似于"哪个响应时间对应于占10%比重的响应时间?"的问题。不过,这个图包含的信息和一个CDF图包含的信息是完全一样的。

    Logo

    权威|前沿|技术|干货|国内首个API全生命周期开发者社区

    更多推荐