平均値だけでは見えないデータ分布、可視化手法の重要性
ソフトウェアエンジニアが性能改善の評価で平均値に頼る危険性を指摘。累積分布関数やパーセンタイルによる可視化が、データの真の姿を明らかにする。
ソフトウェアエンジニアが性能改善の成果を検証する際、平均値(ミーン)に頼ると誤った判断を下すリスクがある。Lobstersのfzakaria.com via domenkozarの報道によると、リンカ「lld」の性能改善を評価していたエンジニアが、ベンチマークでは改善が見られたにもかかわらず本番環境のダッシュボードに反映されないという問題に直面した事例が紹介されている。
平均値が導く誤った判断
筆者の同僚もビルド時間の改善評価で同様の困難に遭遇していた。ビルド時間はコールドキャッシュ、インクリメンタルビルド、ローカル環境、リモート環境など多数の変数に影響され、システムの状態やワークロードによって大きく変動する。彼女は累積分布関数(CDF)を用いた可視化手法を採用し、この問題を解決した。
この経験から筆者は、単一の統計値や単一のグラフだけではデータの全体像を把握できないと結論づけている。合成データセットを用いた検証では、同じデータでも異なる可視化手法によって全く異なるストーリーが導き出されることが示された。
平均値と中央値が逆転する現象
Webサービスのレイテンシ改善を目的に新しいキャッシュ階層を導入したケースを検討する。1週間かけて徐々にロールアウトし、完全にデプロイした後の平均レイテンシは112ミリ秒から122ミリ秒に上昇した。一見すると改悪であり、SEV(重大インシデント)として報告され、ロールバックとポストモーテム作成が検討される状況だ。
しかし、パーセンタイルで詳細を確認すると事態は全く異なる様相を示す。p50(中央値)は99ミリ秒から54ミリ秒へと46%改善している一方、p95は224ミリ秒から454ミリ秒へ103%、p99は309ミリ秒から678ミリ秒へ119%も悪化していた。平均値と中央値は同じデータから計算されているにもかかわらず、全く逆の方向を指し示している。
分布の形状を読み解く
平均値や中央値のような単一の統計量に頼ると、都合の良い数字を選択して自らの主張を裏付ける「チェリーピッキング」が発生しやすい。データの真の姿を理解するには、分布の形状を可視化することが不可欠だ。
密度プロットを用いて変更前後のレイテンシ分布を比較すると、変更前の分布は広がりを持ち、変更後は中央部分が鋭く集中する一方で、右側の裾野(テール)が長く伸びていることが観察される。これは大半のリクエストでレイテンシが改善した一方、少数のリクエストで大幅に悪化したことを示している。
CDFによる視覚化の効用
累積分布関数(CDF)を用いることで、各レイテンシ値以下のリクエストが全体の何%を占めるかを直感的に把握できる。例えば120ミリ秒以下のリクエストの割合が変更前後でどう変化したか、90パーセンタイルのレイテンシ値がどう変わったかが一目で分かる。
CDFは特にテールの挙動を観察するのに適しており、少数の外れ値が平均値を大きく引き上げる状況を正確に捉えられる。この可視化により「平均値は上がったが、ほとんどのユーザーにとっては改善になっている」という状況を定量的に示すことができる。
実務への示唆
性能評価の現場では、ベンチマーク結果と本番環境のメトリクスが一致しないという課題が頻繁に発生する。その原因の一端は、平均値という単一の統計量に依存した評価方法にあると筆者は指摘する。
複数のパーセンタイル(p50、p95、p99)とCDFを組み合わせて評価することで、システム変更の影響を多角的に把握できる。また、変更前後の分布を重ねてプロットすることで、「誰にとっての改善か」「どのような条件下で悪化するか」という質的な問いにも答えられるようになる。
編集部の見解
平均値だけに依存した性能評価は、システム変更の本質を見誤らせる危険性をはらんでいる。特にWebサービスのレイテンシ測定では、テール部分の挙動がユーザー体験に直結するため、パーセンタイルやCDFによる多角的な分析が不可欠だ。短期的には、エンジニアリングチームのダッシュボード設計やインシデント対応手順の見直しが進むと見られる。
長期的には、CI/CDパイプラインにCDFベースの自動回帰検知を組み込むプラクティスが普及する可能性がある。GitHubやGitLabなど主要な開発プラットフォームが、パフォーマンス測定のデフォルト可視化手法としてCDFやパーセンタイル分布を標準化する動きも予想される。
システム変更の影響を正しく評価するためには「データを総体的に見る」文化の醸成が求められる。この記事で紹介された視点は、ソフトウェアエンジニアリングの品質管理プロセス全体に波及するだろう。
参考
- 「The mean means nothing」, by fzakaria.com via domenkozar — Lobsters, 2026-07-28T18:53:28.000Z (ARR)
- 元記事URL: https://fzakaria.com/2026/07/27/the-mean-means-nothing
よくある質問
- なぜ平均値だけでは性能評価に不十分なのか
- 平均値は外れ値(テール)の影響を大きく受けるため、多くのユーザーにとっての実際の体験を反映しない場合がある。例えば99%のリクエストが高速化しても、残り1%が極端に遅くなれば平均値は悪化する。中央値(p50)とp95、p99を併せて確認することで、システム変更の実質的な影響を正しく評価できる。
- 累積分布関数(CDF)とは何か
- CDFはデータの値が特定の閾値以下となる確率(割合)を示す関数。横軸にレイテンシ値、縦軸に累積確率を取ることで、例えば「全リクエストの90%が何ミリ秒以内に完了しているか」を一目で把握できる。ヒストグラムや箱ひげ図と比較して、テール部分の挙動を詳細に観察できる利点がある。
コメント