百分位数

理解百分位数在性能分析中的作用

百分位数
百分位数度量的是占总数特定百分比的观察点的值。从本质上讲,它们会展示数据集的分布。例如,我们在上面看到的中间数是50百分位数(或p50)。对于中间数(已排好序的数据)来说,50%的值低于它,50%高于它。对于指标而言,百分位数很有意义,因为它们可以清晰地展现数值的分布。例如,一个事务的99百分位数为10毫秒,这很容易理解:99%的事务在10毫秒或更短时间内完成,1%的事务处理时间超过10毫秒。
百分位数是分位数的一种。
百分位数是识别异常值的理想选择。如果响应时间小于10毫秒表示你网站上的一个良好体验,那么99%的用户都是这样的—但其中1%的用户没有。一旦意识到这一点,你就可以专注于解决造成那1%的性能问题。
让我们将其应用到之前的请求和响应时间图表,看看会发生什么。将75和99百分位数应用于第一个示例数据集,如图1-14所示。
image.png

图1-14 响应时间的平均值、中间数和百分位数示例1

我们看到p75是5.5秒,这表明75%的请求在5.5秒内完成,25%比这个要慢,这与之前的分析基本相符。另一方面,p99为10.74秒,意味着99%的用户的请求响应时间少于10.74秒,剩余1%则超过10.74秒。百分位数展现了应用程序运行的真实情况。此外,我们还可以分析p75和p99的分布。如果我们很满意99%的用户获得10.74秒或更快的响应时间,而1%的用户比这更慢,那么我们就不需要考虑任何进一步的调整。而如果我们想要一致的响应时间,或者想要所有数据都低于10.74秒,那么现在便已经明确了可以跟踪、分析和改进的事务。在调整性能时,也能够看到p99响应时间的改善。
通过第二组数据可以看得更加清晰,如图1-15所示。
image.png

图1-15 响应时间的平均值、中间数和百分位数示例2

从图中可以看出p75为10秒,p99为12秒,其中p99清晰地显示了响应时间的广泛分布,这更准确地反映了网站的运行情况。我们现在了解到(与平均响应时间相反)并非所有用户都感受到了优质的体验。我们可以使用此数据来识别可能需要改进的应用程序模块。
然而,百分位数并不是完美的。我们建议绘制几种指标组合,以获得更清晰的数据图。例如,在测量延迟时,最好可以展示以下几项内容:

  • 50百分位数(或中间数)
  • 99百分位数
  • 最大值

添加最大值有助于可视化所测量指标的边界,虽然它也不完美:一个较高的最大值可以使图中的其他值显得渺小。
当开始构建检查和收集指标时,我们会应用百分位数和其他聚合指标,这会在后续章节进行介绍。

### 均值 - **概念**:均值也叫平均数,是一组数据的总和除以数据的个数所得的值,它反映了一组数据的集中趋势 [^1]。 - **计算方法**:对于一组数据 \(x_1,x_2,\cdots,x_n\),其均值 \(\bar{x}\) 的计算公式为 \(\bar{x}=\frac{1}{n}\sum_{i = 1}^{n}x_i\)。在 Python 中,可以使用 `.mean()` 方法来计算均值,示例代码如下: ```python import numpy as np data = np.array([1, 2, 3, 4, 5]) mean_value = data.mean() print(mean_value) ``` - **应用**:均值在很多领域都有广泛应用,例如在统计学中用于描述数据的中心位置;在经济学中,可用于计算平均收入、平均价格等;在教育领域,用于计算学生的平均成绩等。 ### 百分位数 - **概念**:百分位数是一种位置指标,将一组数据从小到大排序后,并将其等分为 100 份,处于第 \(p\) 个等分位置的值就是第 \(p\) 百分位数,它可以用来描述数据在某个位置上的水平 [^1]。 - **计算方法**:计算百分位数的方法有多种,一种常见的方法是线性插值法。假设有 \(n\) 个数据从小到大排序为 \(x_1\leq x_2\leq\cdots\leq x_n\),计算第 \(p\) 百分位数 \(P_p\) 的步骤如下: 1. 计算指数 \(i = \frac{p}{100}\times(n - 1)+1\)。 2. 如果 \(i\) 是整数,则 \(P_p=x_i\);如果 \(i\) 不是整数,设 \(k\) 为 \(i\) 的整数部分,\(d\) 为 \(i\) 的小数部分,则 \(P_p=(1 - d)x_k + d x_{k + 1}\)。 在 Python 中,可以使用 `numpy` 库的 `percentile` 函数来计算百分位数,示例代码如下: ```python import numpy as np data = np.array([1, 2, 3, 4, 5]) percentile_95 = np.percentile(data, 95) print(percentile_95) ``` - **应用**:百分位数在数据分析中非常有用,例如在医学领域,可用于确定儿童生长发育的标准;在金融领域,可用于评估投资风险,如计算风险价值(VaR)通常会用到第 5 或第 1 百分位数;在教育领域,可用于评估学生成绩的排名情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值