第三章:把长尾藏进合格分位数

本章造假目标

九个整数等待时间已经按升序记录为

1, 1, 2, 2, 3, 3, 4, 6, 14.1,\ 1,\ 2,\ 2,\ 3,\ 3,\ 4,\ 6,\ 14.

当前结论:样本均值为 44,样本方差为 16.516.5;按最近秩规则计算的样本第 9090 百分位数为 1414 秒。

验收目标:前两个数字保持不变,样本第 9090 百分位数不超过 1010 秒;当前数据未通过第三项。

可动范围:允许修改等待时间,每个数仍为不小于 11 的整数,样本量保持为九。

本章任务:让三个字段同时合格,再检查新数据的阈值比例、区间空洞、偏度和等待机制是否协调。

三个目标先变成三条代数约束

设修改后的排序数据为

y(1)y(9).y_{(1)}\le\cdots\le y_{(9)}.

均值保持为 44,等价于总和保持为

i=19yi=9×4=36.\sum_{i=1}^9y_i=9\times4=36.

样本方差保持为 16.516.5,等价于平方偏差和保持为

i=19(yi4)2=(91)×16.5=132.\sum_{i=1}^9(y_i-4)^2 =(9-1)\times16.5 =132.

展开平方偏差:

i(yi4)2=iyi28iyi+9×16.\sum_i(y_i-4)^2 =\sum_i y_i^2-8\sum_i y_i+9\times16.

代入总和 3636,方差约束可以改写成

i=19yi2=276.\sum_{i=1}^9y_i^2=276.

q^p\widehat q_p 表示样本的最近秩分位数。它取排序后的第

r=npr=\lceil np\rceil

个排序位置。这里

r=9×0.9=9,r=\lceil9\times0.9\rceil=9,

所以样本第 9090 百分位数就是最大值。一般地,最近秩规则在 p>11/np>1-1/n 时满足 np=n\lceil np\rceil=n,此时样本 pp 分位数落在最大值上。本章的样本验收条件等价于

q^0.90=y(9)10.\widehat q_{0.90}=y_{(9)}\le10.

再加上整数下界,完整约束为

1y(1)y(9)10,1\le y_{(1)}\le\cdots\le y_{(9)}\le10, iyi=36,iyi2=276.\sum_i y_i=36, \qquad \sum_i y_i^2=276.

均值约束固定一次和,方差约束固定平方和,分位数约束卡住最大值。造假目标已经变成一个有限整数搜索问题。

压低 14 以后,丢失的平方和必须从别处补回

最直接的动作是把 1414 改成 1010。总和随之减少

1410=4,14-10=4,

平方和减少

142102=96.14^2-10^2=96.

为了守住均值,其他八个观测合计必须增加 44;为了守住方差,它们的平方和还必须增加 9696。把 44 个单位均匀分配到中部只能小幅增加平方和,远远补不回 9696。方差约束迫使部分观测继续向两端移动。

平方改变量解释了如何寻找补偿。把一个值 xx 增加 δ\delta,平方和会增加

(x+δ)2x2=2xδ+δ2.(x+\delta)^2-x^2 =2x\delta+\delta^2.

同样的正改动落在较大的 xx 上,会补回更多平方和。先把 4466 各提高 44

48,610.4\longrightarrow8, \qquad 6\longrightarrow10.

这一步使总和增加 88,平方和增加

(8242)+(10262)=48+64=112.(8^2-4^2)+(10^2-6^2) =48+64 =112.

目标只需要总和增加 44、平方和增加 9696,因此还要减去总量 44 和平方和 1616。把 2,2,3,32,2,3,3 各降低 11,总量恰好减少 44,平方和减少

2(2212)+2(3222)=2×3+2×5=16.2(2^2-1^2)+2(3^2-2^2) =2\times3+2\times5 =16.

两步合并后,总量净增加 44、平方和净增加 9696,恰好补回把 1414 压到 1010 的两项损失。由此得到候选数据:

1, 1, 1, 1, 2, 2, 8, 10, 10.1,\ 1,\ 1,\ 1,\ 2,\ 2,\ 8,\ 10,\ 10.

它相对于原排序数据的逐位改动为

δ=(0,0,1,1,1,1,+4,+4,4).\boldsymbol\delta =(0,0,-1,-1,-1,-1,+4,+4,-4).

改动总和为零:

iδi=0,\sum_i\delta_i=0,

所以均值保持不变。新数据的平方和为

1+1+1+1+4+4+64+100+100=276,1+1+1+1+4+4+64+100+100=276,

所以样本方差仍为 16.516.5。最大值为 1010q^0.90\widehat q_{0.90} 也降到 1010。三个报告字段全部合格。

这张表同时出现了新的形状:四个观测堆在下界 113377 之间完全空缺,最高端又堆了两个 1010。均值与方差没有记录这些位置变化,当前分位数指标也只读取最后一个排序值。要看清整条数轴发生了什么,需要逐一检查所有阈值。

造假动作留下的影子

把最大值从 1414 压到 1010 会同时损失总和与平方和。为了把两项摘要补回原值,其他观测被推向下界与上端,最终形成四个 11、中段空洞和两个 1010。三个验收字段都正确,伪造压力却从最大值转移到整条排序结构。

单个阈值只检查一个位置,分布函数检查全部阈值

服务承诺只检查阈值 1010:等待时间不超过 1010 秒的比例是多少?若核查者把阈值依次移到 1,2,3,1,2,3,\ldots,每个位置都会得到一个累计比例。随机等待时间记为 XX,它的分布函数定义为

F(x)=Pr(Xx).F(x)=\Pr(X\le x).

这个函数把“在阈值 xx 以内完成”的概率作为 xx 的函数。阈值向右移动时,已经计入的结果不会退出,因此 F(x)F(x) 单调不降;阈值移到所有可能值左侧时 F(x)F(x) 趋近 00,移到所有可能值右侧时趋近 11

等待时间按整数记录。令

p(k)=Pr(X=k)p(k)=\Pr(X=k)

表示恰好等待 kk 秒的概率。累计概率与单点概率满足

F(k)=j=1kp(j),F(k)=\sum_{j=1}^kp(j), p(k)=F(k)F(k1).p(k)=F(k)-F(k-1).

于是分布函数的每次跳跃都对应某个整数等待时间的概率质量。连续变量没有这样的单点跳跃;若存在密度 ff,区间概率改由面积给出:

Pr(a<Xb)=F(b)F(a)=abf(x)dx.\Pr(a<X\le b) =F(b)-F(a) =\int_a^bf(x)\,dx.

离散质量与连续密度都在回答同一问题:概率沿数轴怎样分布。

总体分布未知,样本怎样画出累计阶梯

真实的 F(x)F(x) 看不见,样本却能给每个阈值投票。第 ii 个观测不超过 xx 时记为 11,超过时记为 00

1(xix)={1,xix,0,xi>x.\mathbf1(x_i\le x) =\begin{cases} 1,&x_i\le x,\\ 0,&x_i>x. \end{cases}

把九张票相加再除以九,得到经验分布函数

F^9(x)=19i=191(xix).\widehat F_9(x) =\frac19\sum_{i=1}^9\mathbf1(x_i\le x).

每个观测使累计阶梯上升 1/91/9;重复值会让同一位置出现更高跳跃。原数据与候选数据在若干阈值上的累计比例为

阈值 xx11223344668810101414
原数据 F^(x)\widehat F(x)2/92/94/94/96/96/97/97/98/98/98/98/98/98/911
候选数据 F^(x)\widehat F(x)4/94/96/96/96/96/96/96/96/96/97/97/91111

候选数据在 x=1x=1 处一次累计了 4/94/9,随后从 2277 长时间不再上升,到 881010 又突然跳跃。原数据的累计阶梯较连续,只在 661414 之间留下长尾空档。单独检查 x=10x=10 时,候选数据达到 100%100\%;检查整条阶梯时,低端堆积和中段空洞同时显现。

分位数是从累计概率反查位置

分布函数输入位置 xx,输出累计概率 F(x)F(x)。分位数反向查询累计概率达到 pp 时的位置。总体 pp 分位数定义为

qp=inf{x:F(x)p}.q_p=\inf\{x:F(x)\ge p\}.

总体服务水平若要求第 9090 百分位数不超过 1010 秒,可以写成

q0.910.q_{0.9}\le10.

总体分位数看不见,只能由样本估计。本章采用最近秩规则

q^p=x(np).\widehat q_p=x_{(\lceil np\rceil)}.

原数据与候选数据的几个样本分位数为

数据q^0.50\widehat q_{0.50}q^0.75\widehat q_{0.75}q^0.90\widehat q_{0.90}
原数据33441414
候选数据22881010

候选数据把 q^0.90\widehat q_{0.90} 降到合格值,中位数也从 33 降到 22,第 7575 百分位数则从 44 跳到 88。三个位置之间的间距变得很不均匀。单个高分位数只控制排序结构上的一个节点,其他分位数会显示补偿操作发生在什么位置。

适用边界:小样本分位数依赖口径

最近秩、线性插值和不同软件默认规则可能给出不同样本分位数。按本章规则,九个观测的 q^0.90\widehat q_{0.90} 正好等于最大值;采用插值规则时,结果通常仍会强烈依赖最大值。如此小的样本难以稳定估计总体尾部,q^0.9010\widehat q_{0.90}\le10 只说明当前九个观测通过了样本验收。正式服务承诺还需固定分位数定义、观察窗口和最少样本量,并用抽样不确定性评估总体条件 q0.9010q_{0.90}\le10

直方图为什么可能遮住空洞

经验分布保留每个排序跳点,阅读时却不如区间计数直观。把相邻数值合并成箱,就得到直方图。使用宽度为 22 的半开区间:

[1,3),[3,5),[5,7),[7,9),[9,11),[11,13),[13,15).[1,3),[3,5),[5,7),[7,9),[9,11),[11,13),[13,15).

两组频数为

区间[1,3)[1,3)[3,5)[3,5)[5,7)[5,7)[7,9)[7,9)[9,11)[9,11)[11,13)[11,13)[13,15)[13,15)
原数据44331100000011
候选数据66000011220000

候选数据分成低端六个观测与高端三个观测,中间两个箱完全为空。若把箱宽放大,空箱会和相邻观测合并,间隔看起来较弱;改变起点也会改变每个箱的计数。直方图适合发现候选结构,经验分布与分位数可以进一步检查这种结构是否只由分箱选择造成。

等待机制先决定应该比较哪一种分布

“看起来像钟形”没有说明等待为何会形成钟形。这里给出一个最简单的等待机制:每一秒服务都有固定概率 rr 完成;若本秒没有完成,下一秒以同样概率继续尝试,各秒结果相互独立。

等待恰好在第 kk 秒结束,需要前 k1k-1 秒都失败、第 kk 秒成功,所以

Pr(K=k)=(1r)k1r,k=1,2,\Pr(K=k) =(1-r)^{k-1}r, \qquad k=1,2,\ldots

这就是几何分布。累计到第 kk 秒仍未完成的概率为

Pr(K>k)=(1r)k,\Pr(K>k)=(1-r)^k,

因此分布函数为

FK(k)=1(1r)k.F_K(k)=1-(1-r)^k.

对取正整数值的随机变量,尾概率求和公式来自交换两层非负求和:

E(K)=m=1mPr(K=m)=m=1k=0m1Pr(K=m)=k=0Pr(K>k)=k=0(1r)k=1r.\begin{aligned} \mathbb{E}(K) &=\sum_{m=1}^{\infty}m\Pr(K=m)\\ &=\sum_{m=1}^{\infty}\sum_{k=0}^{m-1}\Pr(K=m)\\ &=\sum_{k=0}^{\infty}\Pr(K>k)\\ &=\sum_{k=0}^{\infty}(1-r)^k\\ &=\frac1r. \end{aligned}

样本均值为 44。令模型均值 1/r1/r 等于样本均值,是最简单的矩估计,由此得到

r^=14.\hat r=\frac14.

这个模型天然右偏,因为大量请求较早完成,少数请求会连续失败并进入长尾。模型的第 pp 分位数为满足

1(1r)kp1-(1-r)^k\ge p

的最小整数,即

qp=log(1p)log(1r).q_p =\left\lceil \frac{\log(1-p)}{\log(1-r)} \right\rceil.

r=1/4r=1/4,理论中位数为 33,第 7575 百分位数为 55,第 9090 百分位数为 99。与样本比较:

p=0.50p=0.50p=0.75p=0.75p=0.90p=0.90
几何模型 qpq_p335599
原数据 q^p\widehat q_p33441414
候选数据 q^p\widehat q_p22881010

原数据在中部接近模型,最高位偏长;候选数据把最高位降到 1010,却把样本第 7575 百分位推到 88。模型提供了一条由机制产生的完整参照,三个分位数共同显示补偿操作把异常从尾端转移到了中上部。

方法来路:等待分布为什么从逐次失败产生

几何分布把“第一次成功发生在第几次尝试”写成概率模型。前 k1k-1 次失败与第 kk 次成功直接给出 (1r)k1r(1-r)^{k-1}r。它适合离散时间、固定成功概率和独立尝试;服务负载随时间变化、任务难度不同或完成概率具有记忆时,需要更丰富的等待模型。

Q–Q 思路把多处分位数放到同一张关系图

逐个列出分位数很快会变成长表。Q–Q 图把理论分位数放在横轴、样本分位数放在纵轴。对第 ii 个排序观测,可使用概率位置

pi=i0.5n,p_i=\frac{i-0.5}{n},

再计算目标模型的理论分位数 qpimodelq_{p_i}^{\mathrm{model}},绘制

(qpimodel,x(i)).\left(q_{p_i}^{\mathrm{model}},x_{(i)}\right).

若样本与目标模型协调,点列会沿对角关系展开;系统弯曲表示某些概率区间被拉长或压短。离散几何分布会产生重复理论分位数,点列因此带有阶梯,这属于模型本身的离散结构。

原数据在最高概率位置向上偏离,表示样本最大等待比几何模型更长。候选数据的最低几个位置压在 11,中上部又突然跳到 8,10,108,10,10,点列会先低于参照、再越到参照上方。Q–Q 关系把“低端堆积—中段空洞—上端补偿”连成一条弯曲轨迹。

正态 Q–Q 图若用在这组数据上,会额外混入模型选择问题。正态分布允许负值,等待时间却满足 X1X\ge1;几何模型从逐秒完成机制出发,更符合当前变量。参照分布应由生成机制选择,不能只挑一条最容易画直的理论曲线。

偏度压成一个数以后会遗漏什么

经验分布与 Q–Q 关系保留许多位置。若只想用一个有方向的数概括左右不对称,可以考察三阶中心矩。对当前样本,使用未经有限样本校正的矩偏度

g1=1ni(xixˉ)3[1ni(xixˉ)2]3/2.g_1= \frac{\frac1n\sum_i(x_i-\bar x)^3} {\left[\frac1n\sum_i(x_i-\bar x)^2\right]^{3/2}}.

三次方保留偏差方向,右侧远端点产生较大的正贡献。原数据的均值为 44,三次偏差和为

2(3)3+2(2)3+2(1)3+03+23+103=936.2(-3)^3+2(-2)^3+2(-1)^3+0^3+2^3+10^3 =936.

代入得到

g1old1.852.g_1^{\mathrm{old}}\approx1.852.

候选数据的偏差为

3,3,3,3,2,2,4,6,6,-3,-3,-3,-3,-2,-2,4,6,6,

三次偏差和为 372372,所以

g1new0.736.g_1^{\mathrm{new}}\approx0.736.

偏度明显下降。单看 g1|g_1|,候选数据似乎更接近对称;g1g_1 却没有记录四个 11、中段空洞和两个 1010 分别位于哪里。一个高阶矩仍然是压缩摘要,适合提示不对称方向,无法代替经验分布与排序检查。

样本偏度还有不同有限样本校正口径。九个观测中,一个位置变化就能明显改变结果,正式报告必须说明公式并保留原始数据。

对数变换压缩距离,却不会改变排序事实

另一种外观处理是把等待时间改写到对数尺度:

Y=logX.Y=\log X.

大值之间的原始距离会被压缩,661414 的差从 88 变成

log14log6=log(14/6).\log14-\log6=\log(14/6).

对数函数连续且严格单调递增,因此排序完全不变。分布函数满足

FY(y)=Pr(logXy)=Pr(Xey)=FX(ey),F_Y(y) =\Pr(\log X\le y) =\Pr(X\le e^y) =F_X(e^y),

分位数也满足

qp(Y)=logqp(X).q_p(Y)=\log q_p(X).

对数直方图可能显得更对称,反变换后的样本第 9090 百分位数仍然是 1414。变量变换改变距离尺度和均值解释,无法抹去排序与超时比例。若合同用原始秒数定义,必须在原尺度完成判断。

第一章讨论的是样本均值的重复抽样波动,结论对象为 Xˉ\bar X。在独立同分布、方差有限等条件下,更大样本的 Xˉ\bar X 可以近似服从正态分布;单次等待 XX 仍然可以右偏、离散并带有硬下界。样本均值的抽样分布与单次观测的总体分布需要分别判断。

一个长等待可能代表另一类请求

原数据中的 1414 也可能来自真实的复杂故障。假设前八个观测属于常规请求:

1,1,2,2,3,3,4,6,1,1,2,2,3,3,4,6,

最后一个 1414 属于复杂故障。常规组均值为

μR=228=2.75,\mu_R=\frac{22}{8}=2.75,

复杂组均值为 μC=14\mu_C=14。按样本比例混合后,

μ=89(2.75)+19(14)=4.\mu =\frac89(2.75)+\frac19(14) =4.

对离散等待时间,若共有 GG 个潜在类别,一般的混合概率质量函数写成

p(x)=g=1Gπgpg(x),gπg=1.p(x)=\sum_{g=1}^G\pi_g p_g(x), \qquad \sum_g\pi_g=1.

其中 πg\pi_g 是第 gg 类的混合比例,pg(x)=Pr(X=xC=g)p_g(x)=\Pr(X=x\mid C=g) 是该类的概率质量函数。记

μg=E(XC=g),σg2=Var(XC=g),μ=gπgμg.\mu_g=\mathbb{E}(X\mid C=g), \qquad \sigma_g^2=\operatorname{Var}(X\mid C=g), \qquad \mu=\sum_g\pi_g\mu_g.

在第 gg 类内部展开 Xμ=(Xμg)+(μgμ)X-\mu=(X-\mu_g)+(\mu_g-\mu),条件期望中的交叉项为零,因此

Var(X)=gπgσg2+gπg(μgμ)2.\operatorname{Var}(X) =\sum_g\pi_g\sigma_g^2 +\sum_g\pi_g(\mu_g-\mu)^2.

等号右侧依次是组内方差的加权平均与组间均值差异。这就是全方差公式在有限混合模型中的形式。

对当前九个经验观测,使用分母 nn 的二阶中心矩为

1329=14.667.\frac{132}{9}=14.667.

常规组内部二阶中心矩为 2.43752.4375,加权组内贡献为

89×2.4375=2.167.\frac89\times2.4375=2.167.

组间均值差贡献为

89(2.754)2+19(144)2=12.5.\frac89(2.75-4)^2 +\frac19(14-4)^2 =12.5.

两部分相加正好得到 14.66714.667。在这个假设分类下,这列数据的大部分波动来自请求类型差异。直接把 1414 压回主体,会掩盖复杂故障的存在;若日志确实记录了两类请求,应保留类型并分别报告等待分布。

适用边界:数值大小不能自行证明潜在类别

1414 归入复杂故障只是一个待核对的机制假设,分类依据必须来自请求类型、错误码或运行日志。复杂组目前只有一个观测,无法据此稳定估计该组的均值和方差;混合分解在这里用于说明可能的方差来源,不能单独确认两类请求真实存在。

三个字段合格以后,形状检查得到什么结论

候选数据 1,1,1,1,2,2,8,10,101,1,1,1,2,2,8,10,10 确实满足均值 44、样本方差 16.516.5、样本第 9090 百分位数 q^0.90=10\widehat q_{0.90}=10。这一点已经由总和、平方和与排序位置逐项复算。

继续检查全部阈值,经验分布在 11 处跳到 4/94/9,从 2277 出现平台;直方图显示中间两个宽度为 22 的箱完全为空;分位数序列从 22 直接跳到 88;相对几何等待模型的 Q–Q 关系先下弯再上跳;偏度虽从 1.8521.852 降到 0.7360.736,仍无法描述边界堆积;混合分解则提示原来的长等待可能携带请求类型信息。

三个报告字段达标后,候选数据仍缺少自然的等待机制。补偿均值和方差所需的改动把一个长尾问题改造成低端堆积、中段空洞和潜在类型丢失。下一章将聚焦单个远端观测:面对 1414 这样的点,何时可以删除、缩尾或单独建模?

本章知识链

  1. 固定均值和方差等价于固定一次和与平方和;最近秩 q^0.90\widehat q_{0.90} 在九个观测中把验收约束落在最大值上。

  2. 分布函数检查全部阈值,经验分布函数用样本比例估计累计概率;样本分位数 q^p\widehat q_p 用排序位置估计总体分位数 qpq_p

  3. 直方图受箱宽和起点影响,Q–Q 关系同时比较多个理论分位数与样本排序值。

  4. 几何分布从固定完成概率和独立逐秒尝试推出,为离散等待时间提供右偏参照。

  5. 偏度会遗漏堆积与空洞,单调变换保留排序,混合方差分解则把组内波动与类型差异分开。

思考与练习

  1. 验证候选数据的总和、平方和、样本方差与最近秩样本第 9090 百分位数,并逐项核对改动向量对总和和平方和的影响。

  2. 补全原数据与候选数据在阈值 x=1,2,,14x=1,2,\ldots,14 上的经验分布函数表,找出两条阶梯差值最大的区间。

  3. 分别用箱宽 2,4,72,4,7 为两组数据制作频数表。说明哪些空洞会随箱宽消失,哪些累计事实不会改变。

  4. Pr(K>k)=(1r)k\Pr(K>k)=(1-r)^k 推导几何分布均值 1/r1/r,并计算 r=1/4r=1/4 时第 9595 百分位数。

  5. 使用本章偏度公式复算原数据与候选数据的 g1g_1。构造一组偏度接近零但明显双峰的数据,说明偏度为何不足以定义形状。

  6. 证明连续且严格单调递增的变换满足 qp(g(X))=g(qp(X))q_p(g(X))=g(q_p(X)),并解释对数变换为何不能让原始样本第 9090 百分位数从 1414 变成 1010

  7. 复算常规请求组的二阶中心矩 2.43752.4375,再完成组内与组间方差分解。

  8. 为等待时间提出一个比固定成功概率几何模型更真实的机制,并指出分布函数会怎样改变。

专题导航