IQR(四分位範囲)とは?外れ値検出と1.5倍ルールの根拠を図解でわかりやすく解説

センサーの計測値が1万件あって、そのうち数件だけ「配線が抜けていた瞬間の $0$」や「ノイズで跳ねた $9999$」が混じっている。この状態で「データのばらつきはどれくらいか」を測りたいとき、標準偏差を計算すると数件の異常値に引っぱられて実態とかけ離れた値が出てしまいます。

こうした場面で使われるのが IQR(Interquartile Range: 四分位範囲) です。データを小さい順に並べて「真ん中の半分がどれだけ広がっているか」を測る指標で、端のほうにどんな極端な値があっても答えが変わりません。

四分位数とIQRの概念

図のとおり、四分位数はデータを値ではなく個数で4等分する3つの値です。その第1四分位数 $Q_1$ と第3四分位数 $Q_3$ の間隔が IQR です。「並べたときの順位」だけを見るので、いちばん端の値が $100$ でも $10^9$ でも $Q_1$ と $Q_3$ は動きません。これがロバスト(頑健)と呼ばれる性質の正体です。

IQR は箱ひげ図の「箱の高さ」そのものであり、Tukey の外れ値検出($1.5 \times \mathrm{IQR}$ ルール)の土台でもあります。データ分析で最初に描く図と最初に走らせる異常値判定の、どちらにも顔を出す統計量です。

本記事の内容

  • 四分位数と IQR の定義
  • 四分位数の「流儀」がツールごとに違う問題(実測で比較)
  • 正規分布で $\mathrm{IQR} \approx 1.349\sigma$ になる理由
  • $1.5$ 倍ルールの根拠($\pm2.698\sigma$・外側 $0.7\%$)
  • 標準偏差と比べたロバスト性の実測
  • 歪んだ分布で誤検出が増える落とし穴と対処
  • 箱ひげ図では見えないもの(多峰性)
  • IQR と標準偏差の使い分け

前提知識

この記事を読む前に、以下の概念を理解しておくと読みやすくなります。

  • 中央値の定義
  • 基本的な記述統計(平均、分散、標準偏差)

四分位数とは

IQRを理解するために、まず四分位数(Quartile)について確認しましょう。

データを小さい順に並べたとき、

  • 第1四分位数(Q1): データの25%点(下位25%と上位75%の境界)
  • 第2四分位数(Q2): データの50%点(中央値)
  • 第3四分位数(Q3): データの75%点(下位75%と上位25%の境界)

例えば、データ $\{2, 4, 6, 8, 10, 12, 14, 16, 18, 20\}$($n = 10$)を NumPy の既定(線形補間)で計算すると次のようになります。

$$ Q_1 = 6.5, \quad Q_2 = 11, \quad Q_3 = 15.5 $$

四分位数は、データを4等分する3つの値です。

IQRの定義

IQR(四分位範囲)は、第3四分位数と第1四分位数の差として定義されます。

$$ \mathrm{IQR} = Q_3 – Q_1 $$

上の例では $\mathrm{IQR} = 15.5 – 6.5 = 9.0$ です。

IQRは「データの中央50%が広がっている範囲」を表しています。

IQRの特徴

特徴 説明
ロバスト性 外れ値の影響を受けにくい(標準偏差と異なる)
直感的 「データの真ん中半分の広がり」という明快な意味
分布非依存 正規分布を仮定しない
順序統計量 データの値ではなく順位に基づく

注意:四分位数の「流儀」はツールごとに違う

ここで先に触れておかなければならない落とし穴があります。実は四分位数の計算方法には複数の流儀があり、同じデータでも値が変わります。

先ほど「$Q_1 = 6.5$」と書きましたが、これは NumPy の既定(線形補間)の場合です。他の方法では違う値になります。

四分位数の流儀の違い

同じ10個のデータで8通りの方法を比べた結果です。$Q_1$ は $5.50$ 〜 $8.00$、$Q_3$ は $14.00$ 〜 $16.50$ とばらつき、IQR は $8$ から $11$ まで幅があります。3割以上の違いです。

主な流儀を整理しておきます。

環境 既定の方法 上の例での IQR
NumPy np.percentile / pandas quantile 線形補間 $9.00$
Excel QUARTILE / PERCENTILE Weibull 系 $11.00$
R quantile(既定 type=7) 線形補間 $9.00$
R quantile(type=8) median-unbiased $10.33$
箱ひげ図の原典(Tukey のヒンジ) 下半分・上半分の中央値 $10.00$

Excel と Python で同じデータの IQR を計算して値が合わない、というのはこの違いによるものです。バグではありません。

実務上の指針は次の2つです。データ数が多ければ(数百以上)流儀の差はほとんど消えるので気にしなくてよく、データ数が少ないときは論文やレポートに「どの定義を使ったか」を書くのが作法です。教科書によって $Q_1$ の値が違って見えるのも、この流儀の違いが原因です。

IQRと標準偏差の比較

データの散らばりを測る指標として、IQRと標準偏差 $\sigma$ はよく比較されます。

データが正規分布 $\mathcal{N}(\mu, \sigma^2)$ に従う場合、四分位数は次のようになります。標準正規分布の上側 $25\%$ 点を $z_{0.75}$ と書くと、$z_{0.75} = 0.6745$ です。

$$ Q_1 = \mu – 0.6745\sigma, \qquad Q_3 = \mu + 0.6745\sigma $$

したがって、

$$ \mathrm{IQR} = Q_3 – Q_1 = 2 \times 0.6745\sigma = 1.3490\sigma $$

正規分布のもとでは $\mathrm{IQR} \approx 1.349\sigma$ という関係があります。

IQR = 1.349σ の検証

左が導出の図解です。標準正規分布で中央 $50\%$ に入る区間が $[-0.6745,\ +0.6745]$ なので、その幅が $1.3490$ になります。

右が数値による確認です。サンプル数を増やしながら $\mathrm{IQR}/\sigma$ の実測値を計算すると、$n = 200000$ で $1.3484$ となり、理論値 $1.348980$ とよく一致しました。$n$ が小さいうちは推定のばらつきで値が上下しますが、増やせばきちんと収束します。

この関係があるので、「IQR を $1.349$ で割ると正規分布の $\sigma$ の頑健な推定値になる」という使い方ができます。外れ値が混じったデータから $\sigma$ を推定したいときに便利な小技です。

ただし注意が必要で、$1.349$ という係数は正規分布に限った関係です。

分布形状ごとの IQR/σ 比

一様分布では $1.735$、正規分布では $1.349$、$t$ 分布(自由度3)では $0.890$、ラプラス分布では $0.986$ と、分布の形で大きく変わります。裾が重い分布では $\sigma$ が裾に引っぱられて大きくなるため、比が小さくなります。$\sigma$ を IQR から換算するときは、正規性を仮定していることを意識してください。

一方、外れ値が存在する場合、標準偏差は大きく影響を受けるのに対し、IQRはほとんど影響を受けません。これがIQRの「ロバスト性」です。実際に測ってみましょう。

ロバスト性の比較

平均 $50$・標準偏差 $10$ のデータに、平均 $150$ の外れ値を混ぜていったときの変化です(30回平均)。混入率 $10\%$ のとき、IQR は $1.15$ 倍にしかならないのに、標準偏差は $3.18$ 倍に膨らみました。$20\%$ では IQR $1.48$ 倍に対し標準偏差 $4.15$ 倍です。

標準偏差は偏差を2乗して平均するので、遠くの点が二重に効きます。$150$ という値は平均から $10\sigma$ 離れているので、2乗すると $100$ 倍の重みで効いてしまう——これが膨らむ理由です。IQR は順位しか見ないので、混入率が $25\%$ を超えて $Q_3$ の位置まで汚染が届かない限り、ほとんど動きません。

IQRによる外れ値検出

IQRは外れ値の検出に広く使われています。Tukey(テューキー)の方法では、次の範囲外のデータ点を外れ値とみなします。

$$ \text{外れ値}: x < Q_1 - 1.5 \times \mathrm{IQR} \quad \text{または} \quad x > Q_3 + 1.5 \times \mathrm{IQR} $$

この境界をフェンス(fence)と呼びます。さらに極端な値($1.5$ の代わりに $3.0$ を使う)は極端な外れ値とみなされます。

なぜ1.5倍なのか?

$1.5$ という数字はどこから来たのでしょうか。正規分布のもとで計算してみます。

1.5倍ルールの根拠

$Q_3 = 0.6745\sigma$、$\mathrm{IQR} = 1.3490\sigma$ なので、上限フェンスは

$$ Q_3 + 1.5 \times \mathrm{IQR} = 0.6745\sigma + 1.5 \times 1.3490\sigma = 2.6980\sigma $$

となります。正規分布で $\pm 2.6980\sigma$ の外側に入る確率を計算すると $0.6977\%$(両側合計)でした。つまり正規分布なら、約 $99.3\%$ のデータがフェンス内に収まります。

$k = 3.0$(極端な外れ値)にすると $\pm 4.7214\sigma$ に対応し、外側の確率は $0.000234\%$、およそ $43$ 万件に1件という水準になります。

大事なのは、$1.5$ は理論的な必然ではなく Tukey が選んだ経験則だという点です。「正規分布なら千件に7件くらいしか引っかからない、ほどよい厳しさ」として選ばれた値です。データ数が $10000$ 件あれば正常なデータでも $70$ 件程度が外れ値と判定されるので、「フェンスの外=異常」ではなく「フェンスの外=確認すべき候補」と捉えるのが正しい使い方です。

検出の実例

実際にやってみます。平均 $50$・標準偏差 $10$ の正規データ $200$ 件に、極端な値 $5, 10, 95, 100, 110$ を混ぜたデータです。

IQR法による外れ値検出

$Q_1 = 43.38$、$Q_3 = 55.86$、$\mathrm{IQR} = 12.48$ なので、フェンスは $24.66 \sim 74.58$ になりました。この範囲外にあったのは $6$ 件で、$\{5.0,\ 10.0,\ 79.1,\ 95.0,\ 100.0,\ 110.0\}$ です。

意図的に混ぜた $5$ 件はすべて検出できています。加えて $79.1$ という値も検出されましたが、これは正規分布から生成された「正常な」データです。平均から $2.9\sigma$ 離れた点なので、$200$ 件あればこれくらいは自然に出ます。正常なデータが検出されることは避けられないという、先ほどの $0.7\%$ の話が実際に現れた形です。

落とし穴:歪んだ分布では誤検出が増える

IQR法の最大の注意点がこれです。$Q_1$ と $Q_3$ から等距離にフェンスを引くという設計は、分布が左右対称であることを暗に仮定しています。

現実のデータには、所得・待ち時間・部品の寿命・アクセス数のように、右に長い裾を持つ(右に歪んだ)分布が多くあります。こうしたデータに素朴に IQR 法を当てるとどうなるでしょうか。

歪んだ分布での誤検出

左が対数正規分布($5000$ 件)に IQR 法を適用した結果です。$7.82\%$ ものデータが外れ値と判定されました。正規分布なら $0.7\%$ 程度で済むはずが、10倍以上です。これらは異常値ではなく、単に分布の裾に自然に存在するデータです。

右は同じデータを対数変換してから判定した結果です。対数を取ると分布がほぼ左右対称になり、外れ値判定は $0.50\%$ まで下がりました。理論値の $0.7\%$ に近い、妥当な水準です。

対処の指針は3つあります。

  1. 変換してから判定する — 右に歪んでいるなら対数変換や Box-Cox 変換で対称化してから IQR 法を適用する
  2. 非対称なフェンスを使う — 歪度を考慮した medcouple ベースの調整フェンス(adjusted boxplot)を使う
  3. 分位点そのものを使う — 「上位 $0.5\%$ を外れ値とする」のように、分布の形に依存しない基準にする

いずれにせよ、判定前にヒストグラムを描いて分布の形を確認するのが第一歩です。

箱ひげ図(Box Plot)との関係

箱ひげ図は、IQRを視覚的に表現したグラフです。

箱ひげ図の各部位

図の各部位が次のように対応しています。

  • 箱の左端: $Q_1$
  • 箱の中の線: $Q_2$(中央値)
  • 箱の右端: $Q_3$
  • 箱の長さ: IQR
  • 下のひげ: $Q_1 – 1.5 \times \mathrm{IQR}$ 以上の最小値
  • 上のひげ: $Q_3 + 1.5 \times \mathrm{IQR}$ 以下の最大値
  • 点: ひげの外側の値(外れ値)

ひげの端が「フェンスそのもの」ではなく「フェンス内に実際に存在する最小値・最大値」である点に注意してください。フェンスは判定のための仮想的な線で、ひげは実データの位置を示します。

箱ひげ図では見えないもの

箱ひげ図は5つの数値(最小・$Q_1$・$Q_2$・$Q_3$・最大)に情報を圧縮するので、その過程で失われるものがあります。

箱ひげ図では多峰性が見えない

左が2つの山を持つデータ、右が単峰のデータです。ヒストグラム(上段)を見れば形の違いは明らかですが、四分位数はほぼ同じ(左が $-2.19,\ 0.09,\ 2.24$、右が $-2.12,\ 0.06,\ 2.33$)なので、箱ひげ図(下段)はほとんど区別がつきません。

左のデータで「中央値のあたりにデータが集まっている」と読むのは完全な誤りです。実際には中央値の位置にはデータがほとんどありません。

対処は簡単で、箱ひげ図とヒストグラム(あるいはバイオリン図・ストリッププロット)を併記することです。箱ひげ図は複数グループの比較に強い一方、単一の分布の形を見るにはヒストグラムのほうが適しています。

IQRと標準偏差の使い分け

ここまでの内容をまとめておきます。

IQRと標準偏差の使い分け

IQR の弱点として挙げた「効率の低さ」を補足します。正規分布のもとで $\sigma$ を推定する場合、IQR ベースの推定量($\mathrm{IQR}/1.349$)は標準偏差より分散が大きくなります。同じ精度を得るのに約 $1.5$ 倍のデータが必要という計算です。

これが「データがきれいなら標準偏差のほうがよい」理由です。標準偏差はすべての値を使うので情報を無駄にしませんが、そのぶん汚れた値も全部拾ってしまいます。IQR は情報を捨てる代わりに汚れに強い、というトレードオフになっています。

実務的な結論は「実測データなら両方を並べて報告する」です。両者が整合していればデータはきれいで、大きく食い違っていれば外れ値か歪みがあるサインになります。$\mathrm{IQR}/1.349$ と $\sigma$ を比べるだけで、データ品質の簡易チェックになるわけです。

関連する指標:四分位偏差とパーセンタイル

IQR の周辺には、似た発想の指標がいくつかあります。混同しやすいので整理しておきます。

四分位偏差(Quartile Deviation, QD) は IQR を半分にしたものです。

$$ \mathrm{QD} = \frac{Q_3 – Q_1}{2} = \frac{\mathrm{IQR}}{2} $$

「中央値からの平均的なずれ」に相当する量として、標準偏差と同じスケール感で比較したいときに使われます。正規分布では $\mathrm{QD} = 0.6745\sigma$ なので、$\sigma$ のおよそ $2/3$ です。日本の統計の教科書では「四分位偏差」の名で紹介されることが多く、IQR と半分ずれるので値を読むときは注意してください。

パーセンタイル(百分位数) は四分位数を一般化したもので、$p$ パーセンタイルは「下から $p\%$ の位置の値」です。$Q_1$ は $25$ パーセンタイル、$Q_3$ は $75$ パーセンタイルにあたります。Web サービスの応答時間で使われる「p95」「p99」も同じもので、$95$ パーセンタイル・$99$ パーセンタイルの略記です。

MAD(中央絶対偏差) も頑健な散らばりの指標です。

$$ \mathrm{MAD} = \mathrm{median}\left(|x_i – \mathrm{median}(x)|\right) $$

正規分布では $\mathrm{MAD} \approx 0.6745\sigma$ で、四分位偏差と同じ係数になります。IQR より崩れにくく(理論上、データの半分が汚染されても壊れない)、異常検知では MAD ベースの $z$ スコアがよく使われます。

指標 定義 正規分布での値 特徴
標準偏差 $\sigma$ 二乗平均の平方根 $\sigma$ 効率が高いが汚染に弱い
IQR $Q_3 – Q_1$ $1.349\sigma$ 箱ひげ図と直結
四分位偏差 $\mathrm{IQR}/2$ $0.6745\sigma$ $\sigma$ と比べやすい
MAD 中央値からのずれの中央値 $0.6745\sigma$ 最も崩れにくい

どれも「散らばり」を測る量ですが、係数が違うので値をそのまま比べてはいけません。$\sigma$ 換算(IQR なら $\div 1.349$、MAD なら $\div 0.6745$)してから並べるのが正しい比較です。

Pythonでの実装

IQRの計算と外れ値検出は数行で書けます。

import numpy as np

rng = np.random.default_rng(42)
data = np.concatenate([rng.normal(50, 10, 200), [5, 10, 95, 100, 110]])

Q1, Q2, Q3 = np.percentile(data, [25, 50, 75])
IQR = Q3 - Q1
lower_fence = Q1 - 1.5 * IQR
upper_fence = Q3 + 1.5 * IQR
mask = (data < lower_fence) | (data > upper_fence)

print(f"Q1={Q1:.2f} Q2={Q2:.2f} Q3={Q3:.2f} IQR={IQR:.2f}")
print(f"フェンス: {lower_fence:.2f} 〜 {upper_fence:.2f}")
print(f"外れ値 {mask.sum()} 件: {np.sort(data[mask])}")

実行すると Q1=43.38 Q2=49.50 Q3=55.86 IQR=12.48、フェンスは 24.66 〜 74.58、外れ値 6 件という結果が得られます。

正規分布での $\sigma$ の頑健な推定も1行です。

sigma_robust = IQR / 1.349
print(f"σ の頑健推定 = {sigma_robust:.3f}(通常の std = {data.std():.3f})")

外れ値が混じっているこのデータでは、通常の標準偏差が外れ値に引っぱられて大きくなる一方、$\mathrm{IQR}/1.349$ は元の $10$ に近い値を返します。2つの値を並べるだけで「外れ値が効いているかどうか」が分かります。

歪んだデータでは、対数変換を挟んでから同じ処理を行います。

log_data = np.log(data[data > 0])
q1, q3 = np.percentile(log_data, [25, 75])
iqr = q3 - q1
mask_log = (log_data < q1 - 1.5 * iqr) | (log_data > q3 + 1.5 * iqr)

対数正規データでの実測では、変換なしで $7.82\%$ が外れ値判定されたのに対し、変換後は $0.50\%$ に下がりました。

まとめ

本記事では、IQR(四分位範囲)について解説しました。

  • 定義: $\mathrm{IQR} = Q_3 – Q_1$。データの中央 $50\%$ の広がりを表す。値ではなく順位で4等分するのがポイント
  • 流儀に注意: 四分位数の計算方法は複数あり、$n=10$ の例では IQR が $8$ 〜 $11$ までばらついた。Excel と Python で値が合わないのはこのため。少数データでは定義を明記する
  • 正規分布との関係: $\mathrm{IQR} \approx 1.349\sigma$(実測 $1.3484$)。ただしこれは正規分布限定で、$t$ 分布では $0.890$、一様分布では $1.735$ になる
  • $1.5$ 倍ルールの根拠: フェンスは $\pm 2.698\sigma$ に対応し、正規分布で外側に入る確率は $0.6977\%$。$k=3.0$ なら $\pm 4.721\sigma$、$0.000234\%$。理論的必然ではなく Tukey の経験則
  • ロバスト性: 外れ値を $10\%$ 混ぜたとき、IQR は $1.15$ 倍にしかならないのに標準偏差は $3.18$ 倍に膨らむ
  • 歪んだ分布の落とし穴: 対数正規分布では $7.82\%$ が誤って外れ値判定される。対数変換すると $0.50\%$ に改善。IQR 法は左右対称を暗に仮定している
  • 箱ひげ図の限界: 四分位数がほぼ同じなら、2峰のデータと単峰のデータが区別できない。ヒストグラムを併記する
  • 使い分け: データが汚れているなら IQR、きれいなら標準偏差。実測データでは両方を並べて報告するとデータ品質のチェックになる

次のステップとして、以下の記事も参考にしてください。

統計的異常検知の基礎 — zスコア・3σ・Grubbs検定と、頑健統計の必要性
IQRと同じ発想の頑健な指標であるMAD(中央絶対偏差)を使った異常検知を解説します。
正規分布とは?定義とグラフの見方を解説
IQR = 1.349σ の関係を理解するための土台です。
異常検知入門 — 3種類の異常とROC/PR-AUC
外れ値検出の全体像と、評価指標の選び方を解説します。