四分位点(quartile)は、データを小さい順に並べて「4 等分する位置」の値を取り出した代表値である。中央値 を「2 等分する位置」と捉えると、四分位点はその拡張になっている。

  • 第 1 四分位点(Q1): 下位 25% の位置の値
  • 第 2 四分位点(Q2): 50% の位置の値(中央値 と同じ)
  • 第 3 四分位点(Q3): 下位 75% の位置の値

より一般化したものが 分位点(quantile) で、「データの中で何 % の位置にあるか」を任意の % で指定できる。四分位点は分位点の 25%, 50%, 75% の特別な場合と言える。

用語整理: quantile / percentile / quartile

似た用語が複数あって混乱しやすいので整理しておく。

用語範囲
quartile(四分位点)4 等分(25% / 50% / 75%)Q1, Q2, Q3
quintile(五分位点)5 等分(20% / 40% / 60% / 80%)上位 20% の境界など
decile(十分位点)10 等分(10%, 20%, …, 90%)所得分布の比較で頻出
percentile(百分位点)100 等分(1%〜99%)偏差値、検査値の参照範囲
quantile(分位点)任意の比率 q ∈ [0, 1]q = 0.95 で 95% 点

機械学習や統計の文献では「quantile」が最も一般的な呼び方で、np.quantile(data, 0.25) のような任意比率の指定に対応している。

IQR(四分位範囲)と外れ値判定

四分位点の応用で最も重要なのが IQR(Interquartile Range、四分位範囲) である。

IQR = Q3 - Q1

IQR は「中央 50% のデータが収まる幅」を表す。標準偏差 と並んで散らばりを測る指標として使われるが、IQR は外れ値の影響を受けにくいという特徴を持つ(順位ベースの量なので、極端な値が混ざっても変わらない)。

外れ値判定の標準的なルール(Tukey の方法)は IQR を使う。

  • 下側の外れ値: x < Q1 - 1.5 * IQR
  • 上側の外れ値: x > Q3 + 1.5 * IQR

1.5 という数字は経験則で、より厳しく判定したい場合は 3.0 を使う。3σ ルールが正規分布前提なのに対し、IQR ルールは分布形を問わずに使えるロバストな手段と言える。

箱ひげ図の構成

四分位点を視覚化する代表的な手段が箱ひげ図(boxplot)である。

  • 箱の下端 = Q1
  • 箱の中の線 = Q2(中央値)
  • 箱の上端 = Q3
  • 箱の高さ = IQR
  • ひげ(whisker)の下端 = Q1 - 1.5 * IQR 以上の最小値
  • ひげの上端 = Q3 + 1.5 * IQR 以下の最大値
  • ひげの外側の点 = 外れ値

箱ひげ図 1 枚で「中央値・四分位範囲・外れ値の有無」が同時に分かるので、複数群の比較(A/B、カテゴリ別の値分布)で常用される。

前提・注意

  • データは「昇順に並べる」ことで意味を持つ(順序尺度以上が必要)
  • 平均 より外れ値に強い(順位ベース)
  • データ点数が少ないと、四分位点の取り方に方法依存性が出る(linear, lower, higher, nearest, midpoint)
  • 箱ひげ図は分布の形状(多峰性など)までは表せない

利点

  • 分布の偏りや広がりが分かる
  • 平均よりも外れ値の影響を受けにくい
  • 比較(A/B)に使いやすい

欠点

  • 分布の形状(山の数など)までは分からない
  • データ量が少ないと不安定

Python での実例

以下は、四分位点の計算と可視化を同時に行う例。

import numpy as np
import matplotlib.pyplot as plt

# 右に長い分布を作る(ログ正規分布)
rng = np.random.default_rng(0)
values = rng.lognormal(mean=1.0, sigma=0.6, size=500)

q1, q2, q3 = np.quantile(values, [0.25, 0.5, 0.75])

# ヒストグラム + 四分位点
plt.figure(figsize=(6, 4))
plt.hist(values, bins=30, color="#7aa6c2", edgecolor="white")
for q, label, color in [(q1, "Q1", "#f28e2b"), (q2, "Q2 (median)", "#e15759"), (q3, "Q3", "#59a14f")]:
    plt.axvline(q, color=color, linestyle="--", linewidth=2)
    plt.text(q, plt.ylim()[1] * 0.9, label, rotation=90, va="top", ha="right", color=color)
plt.title("Histogram with Quartiles")
plt.xlabel("Value")
plt.ylabel("Count")
plt.tight_layout()
plt.show()

# 箱ひげ図
plt.figure(figsize=(6, 2.5))
plt.boxplot(values, vert=False, showmeans=True)
plt.title("Boxplot (Q1, median, Q3)")
plt.xlabel("Value")
plt.tight_layout()
plt.show()

出力:

quartile_hist quartile_box

IQR ルールで外れ値を検出する

Tukey の IQR ルールを適用して、外れ値を「マークするだけ」のシンプルな検出を見る。

data = np.concatenate([rng.normal(50, 8, 200), [10, 15, 95, 110, 130]])
q1, q3 = np.quantile(data, [0.25, 0.75])
iqr = q3 - q1
lo, hi = q1 - 1.5 * iqr, q3 + 1.5 * iqr
is_outlier = (data < lo) | (data > hi)
print(f"flagged {is_outlier.sum()} of {len(data)} as outliers")
plt.savefig("quantile_iqr_outliers.svg", bbox_inches="tight")

出力:

flagged 5 of 205 as outliers

IQR ルールで上下の外れ値を検出した結果

緑の帯が IQR、赤い破線が Q1 - 1.5·IQRQ3 + 1.5·IQR の境界(フェンス, fence)で、その外側に落ちた点が外れ値として ×印で示されている。注入した 5 個の極端な値が全部正しくフラグされている。

「1.5」という係数は経験則で、厳しめに見るなら 3.0(extreme outlier)を使う。正規分布の場合、1.5×IQR ルールで誤検出される割合はおおよそ 0.7% 程度になることが知られており、3σ ルール(0.27%)よりやや甘い目安となる。

分位回帰で「予測区間」を作る

分位回帰(quantile regression)は、平均ではなく特定の分位点(10%、50%、90% など)を予測する回帰手法である。低分位と高分位の予測を上下に並べると、予測区間(prediction interval)として読める。

from sklearn.ensemble import GradientBoostingRegressor

q_low = GradientBoostingRegressor(loss="quantile", alpha=0.1).fit(X, y)
q_med = GradientBoostingRegressor(loss="quantile", alpha=0.5).fit(X, y)
q_high = GradientBoostingRegressor(loss="quantile", alpha=0.9).fit(X, y)
plt.savefig("quantile_regression_bands.svg", bbox_inches="tight")

分位回帰で得た中央値とその上下 80% 区間

赤い線が中央値の予測、緑の帯が q=0.1q=0.9 の 80% 予測区間である。データの分散が x の右側で大きくなる構造(不均一分散)をしているため、緑の帯も右に行くほど広がっている。在庫計画・需要予測・SLA 設計のように「平均だけでなくバラつきを含めて意思決定したい」場面で頻出する手法で、q=0.95 のような片側の予測値を「安全マージン」として使う。


数学での使いどころ

数学・統計の文脈では、四分位点や分位点は以下で使われる。

  • 分布の要約(代表値とばらつき)
  • 外れ値の判定(IQR = Q3 - Q1)
    IQR(Interquartile Range)は、Q3とQ1の差で、中央50%の広がりを示す。IQR = Q3 - Q1 と定義し、外れ値判定の目安にも使う。
  • データの比較(A/Bの分布差)

数学的には、分位点は「小さい順に並べたときの位置」を数式で書いたものだと考える。

  • F(x) = P(X <= x) は「x以下がどれくらいの割合か」を表す関数(分布関数 F(x)
  • q分位点は「全体のq(%)がx以下になるような境界」のこと
    例: q=0.25なら「下位25%の境界」がQ1、q=0.5なら中央値(Q2)

機械学習での使いどころ

四分位点と IQR は前処理・特徴量設計・評価の各段階で頻出する。

  • 特徴量のスケール感の把握: EDA で describe() の Q1/Q2/Q3 を見る
  • 外れ値の除外やクリッピング: Q1 - 1.5 * IQRQ3 + 1.5 * IQR でクリッピング
  • ロバストな標準化: scikit-learn の RobustScaler は中央値と IQR を使うので、外れ値に強い
  • 分位回帰(Quantile Regression): 平均ではなく特定の分位点を予測する回帰。需要予測の在庫計画などで使われる
  • 不均衡データの閾値調整: 予測確率の Q3 や Q9 を「異常の閾値」として使う
  • A/B テストの分布比較: 平均だけでなく Q1, Q3 も比較すると分布の変化が見える

具体的な利用例:

  • 不動産価格の典型レンジを Q1〜Q3 で見て、外れ値の高級物件を除外
  • 売上予測で 90% 点(q=0.9)を予測して在庫の安全マージンを取る
  • 機械学習モデルの予測誤差を Q1, Q3 で報告して「典型的な誤差幅」を伝える

適さないケース

  • 分布の形(多峰性など)を重視したい場合
  • 非常に小さいサンプルサイズ
  • 時系列の変化を追いたい場合(分位点だけでは時間軸が消える)