四分位点(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()
出力:
数学での使いどころ
数学・統計の文脈では、四分位点や分位点は以下で使われる。
- 分布の要約(代表値とばらつき)
- 外れ値の判定(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 * IQRとQ3 + 1.5 * IQRでクリッピング - ロバストな標準化: scikit-learn の
RobustScalerは中央値と IQR を使うので、外れ値に強い - 分位回帰(Quantile Regression): 平均ではなく特定の分位点を予測する回帰。需要予測の在庫計画などで使われる
- 不均衡データの閾値調整: 予測確率の Q3 や Q9 を「異常の閾値」として使う
- A/B テストの分布比較: 平均だけでなく Q1, Q3 も比較すると分布の変化が見える
具体的な利用例:
- 不動産価格の典型レンジを Q1〜Q3 で見て、外れ値の高級物件を除外
- 売上予測で 90% 点(
q=0.9)を予測して在庫の安全マージンを取る - 機械学習モデルの予測誤差を Q1, Q3 で報告して「典型的な誤差幅」を伝える
適さないケース
- 分布の形(多峰性など)を重視したい場合
- 非常に小さいサンプルサイズ
- 時系列の変化を追いたい場合(分位点だけでは時間軸が消える)