四分位点(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 = 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 で報告して「典型的な誤差幅」を伝える

適さないケース

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