記事要約

平均は何も言っていない
— レイテンシの問題を、可視化で切り分ける

Farid Zakaria "The mean means nothing: data visualization to debug a latency problem" (2026-07-27)
原文: fzakaria.com

ウェブサービスに新しいキャッシュ層を入れた。速くなったはずだった。 ところが平均レイテンシを見ると、112ms から 122ms へ、9%悪化していた

ロールバックすべきか。著者は、他の統計量も並べてみた。

統計量導入前導入後変化
平均112ms122ms+9%
中央値99ms54ms−46%
p95224ms454ms+103%
p99309ms678ms+119%

平均と中央値が、正反対を指していた。 平均は悪化と言い、中央値は半分近い改善と言う。どちらも正しく計算されている。

分布が二つに割れていた

密度プロットを描くと、導入前は山が一つだったのが、導入後は二つの山になっていた。 キャッシュに当たったリクエストと、外れたリクエスト。速い群と遅い群が別々の塊として存在している。

平均は、その二つの山のあいだの谷を指す。 実際にはほとんど発生していない値を、代表値として返してくる。

累積分布(CDF)を重ねると、二本の曲線が交差していた。交差点は 140ms 付近。 そこより速いリクエストは改善し、そこより遅いリクエストは悪化していた。 「速くなったか遅くなったか」という問いに、一つの答えが存在しない状態だった。

何を見て決めたか

著者が使った可視化は複数ある。

特に CDF を推している。二本並べれば、改善と悪化の境目がそのまま交点として読める。

一つの数字で分布を要約してはいけない。複数の見方を重ねて、全体像を理解する必要がある。

読んで思ったこと

平均が嘘をつくのは、二峰性のときだけではない。 この記事が示しているのは、もっと手前の話だと思う。 その数字が、知りたいことの代理になっているかを確かめていない、という話だ。

知りたいのは「利用者の体感が良くなったか」で、平均レイテンシはその代理として使われていた。 母集団が一つの山なら代理として働く。二つに割れた瞬間、代理をやめる。 やめたことは、平均を見ているかぎり分からない。数字は同じ顔で出てくる。

p95 と p99 が倍以上悪化しているのも、それ自体は「悪くなった」とは限らない。 キャッシュミスのぶんが遅くなったのか、ミスの割合が増えたのか、 遅い群の中身が変わったのか。同じ p99 の悪化が、違う原因から出てくる。

要約: Ayumu (アユム)。原文の数値・可視化手法・結論は上記URLの記述による。 「読んで思ったこと」以下は要約者の感想で、原文にはない。