# システム監視に必要なパーセンタイル（Percentile）の基礎知識

> システム監視におけるパーセンタイルの重要性と活用方法について解説する記事です。パーセンタイルの定義、主要なパーセンタイルの計算方法、平均値との比較を通じて、パフォーマンス課題の発見やシステム運用の向上に役立つ情報を提供します。

- 公開日: 2025-02-04
- 更新日: 2025-02-04
- 著者: Tsukamura
- タグ: エンジニア概念マップ
- URL: https://tech.anycloud.co.jp/articles/percentile

---

## はじめに

現代のシステム監視において、平均値だけでは捉えきれないパフォーマンス課題を発見するため、パーセンタイルが重要な役割を果たしています。本記事では実際のシステム監視ケースを交えながら、パーセンタイルの正しい理解と活用方法を解説します!

## パーセンタイルとは

パーセンタイル（Percentile）は、データセットを昇順に並べた際に特定の割合のデータが収まる境界値を示す指標です。システム監視では主にレスポンスタイム分析に活用されます。

## 主要パーセンタイルの解説

例えば、あるWebサービスのレスポンスタイム（応答時間）を測定した場合、以下の結果になったことを想定してそれぞれ説明します。

```plaintext
レスポンスタイム（ミリ秒）: 10, 15, 20, 25, 30, 35, 40, 45, 50, 100

```

### 50パーセンタイル（中央値/Median）

-   データの中央値を表す
-   計算方法
    -   `(n + 1) × 0.5` 番目の値
    -   上記例：`(10 + 1) × 0.5 = 5.5`番目 → 30と35の平均値 **32.5ミリ秒**
-   意味
    -   50%のリクエストが32.5ミリ秒以下
-   活用例
    -   サーバーの通常負荷状態の把握

### 95パーセンタイル

-   上位5%の外れ値を除外した指標
-   計算例（上記データセット）
    -   位置 = 0.95 × 10 = 9.5
    -   値 = 9番目（50） + (10番目（100） - 9番目（50）) × 0.5 
        
            = 50 + 50 × 0.5 = 75 ミリ秒
        
-   意味
    -   95%のリクエストが77.5ミリ秒以下
-   活用例
    -   現実的な最悪ケースを把握

### **99パーセンタイル**

-   データの99%がその値以下となる点を示します
-   100件のデータで考えると・・・
    
    ```python
    # レスポンスタイム（ミリ秒）の仮想データ
    sorted_data = [
        120, 130, 135, ..., # 1-98件目：200ミリ秒以下
        200, 200,           # 99件目：200ミリ秒
        1500                # 100件目：1,500ミリ秒（外れ値）
    ]
    ```
    
-   計算方法
    -   位置 = 0.99 × 100 = 99.0
    -   値 = 99番目の値 = 200ミリ秒
-   **意味**
    -   100件中99件（99%）が200ミリ秒以下
    -   ユーザーの99%は200ミリ秒以下で体験
-   **活用例**
    -   目標設定：P99を150ミリ秒以下に改善
    -   モニタリング：1,500ミリ秒の外れ値発生をアラート

## なぜ平均では不十分か ？

指標ごとのメリットデメリットをまとめました。平均値では、外れ値の影響を強く受けることで正確にデータを分析しずらいためパーセンタイルという指標が使われております。

<table><tbody><tr><th colspan="1" rowspan="1"><p>指標</p></th><th colspan="1" rowspan="1"><p>メリット</p></th><th colspan="1" rowspan="1"><p>デメリット</p></th></tr><tr><td colspan="1" rowspan="1"><p>平均値</p></td><td colspan="1" rowspan="1"><p>直感的に理解しやすい</p></td><td colspan="1" rowspan="1"><p>外れ値の影響を強く受ける</p></td></tr><tr><td colspan="1" rowspan="1"><p>パーセンタイル</p></td><td colspan="1" rowspan="1"><p>データ分布を正確に反映</p></td><td colspan="1" rowspan="1"><p>計算が複雑</p></td></tr><tr><td colspan="1" rowspan="1"><p>最大値</p></td><td colspan="1" rowspan="1"><p>最悪ケースを把握できる</p></td><td colspan="1" rowspan="1"><p>一時的な異常値に左右される</p></td></tr></tbody></table>

## まとめ

50パーセンタイルで通常の動作を、95-99パーセンタイルで異常値や改善が必要な部分を把握することで、より効果的なシステム運用が可能になるので、この記事を参考にパーセンタイルのデータが見れるようになったら幸いです(｀･ω･´)
