Categories: 統計学の基本

外れ値とはなにか|検出方法と対処法

データの中には、ほかの値から大きく離れた「外れ値」が混ざることがあります。

外れ値は平均値や標準偏差を大きく動かし、分析結果を誤らせる原因になります。一方で、すべての外れ値が「間違い」とは限らず、安易に削除すると重要な事実を捨ててしまうこともあります。

本稿では、外れ値の定義と異常値との違い、IQRや標準偏差を使った検出方法、そして除外・補正・保持の判断軸を整理し、SQL・BigQuery・Excelでの具体的な検出と除外の書き方(製品差を含む)までを扱います。

この記事で分かること

  • 外れ値とはなにか、「異常値」とどう違うのか
  • IQR法・標準偏差法など、外れ値を検出する代表的な方法と最短の答え
  • 検出した外れ値を「除外・補正・保持」のどれにするかの判断軸
  • SQL・BigQuery・Excelで外れ値を検出し、除外前後を比較する方法(製品差を含む)

外れ値とはなにか

外れ値(outlier)とは、データの大多数から大きく離れた値のことです。実務で広く使われる基準は「四分位範囲(IQR)を使い、Q1 − 1.5×IQR より小さい、または Q3 + 1.5×IQR より大きい値を外れ値とみなす」というものです。

たとえば購入金額が {800, 1000, 1200, 1200, 1300, 1500, 30000} の7件なら、30,000円だけが極端に大きく、ほかの値から離れています。この値が外れ値です。

多くの値が1,000円台に集まっているのに、平均値はこの1件に引っ張られて約5,286円まで上がり、データの実態(典型は1,200円前後)を表さなくなります。

外れ値と異常値の違い

「外れ値」と「異常値」は混同されがちですが、見ている視点が異なります。外れ値はあくまで「位置」の話で、分布の中で他から離れているという統計的な性質を指します。

異常値は「原因・正しさ」の話で、入力ミス・測定エラー・単位の取り違えなど、本来あってはならない誤った値を指します。

  • 入力ミスで生まれた異常値は、多くの場合そのまま外れ値として現れます(例:年齢欄に「200」)。
  • 一方、正しく記録された大口購入や災害時のアクセス急増のように、「外れ値だが異常値ではない」値も存在します。

検出の手順は同じでも、「誤りだから直す・捨てる」のか「正しいデータだから残して扱い方を変える」のかは、現場の知識で判断する必要があります。この区別が、後述する対処法の出発点になります。

外れ値の検出方法

外れ値の検出には、分布の形に依存しにくい順位ベースの方法(IQR法)と、平均・標準偏差を使う方法(zスコア)が代表的です。実務では、まずIQR法から確認すると扱いやすいです。

値の大きさそのものではなく順位をもとに見るため、極端な値に引っ張られにくいからです。

IQR法(四分位範囲)

データを小さい順に並べ、下から1/4の位置の値をQ1(第1四分位数)、3/4の位置をQ3(第3四分位数)とします。

その差 IQR = Q3 − Q1 が中央50%の広がりです。これを使い、下限を Q1 − 1.5×IQR、上限を Q3 + 1.5×IQR とし、その外側にある値を外れ値とみなします。

係数1.5は慣用的な基準で、より厳しく見たいときは 3.0×IQR を使うこともあります(3.0×IQR の外側は「極端な外れ値」と呼ばれます)。

IQR法は順位に基づくため、外れ値そのものに引っ張られにくいのが利点です。箱ひげ図はこのIQR基準を可視化したもので、読み方は別記事で扱います。

標準偏差(zスコア)による方法

分布が概ね左右対称(正規分布に近い)なら、平均からの距離を標準偏差の単位で測るzスコアも使えます。z =(値 − 平均)÷ 標準偏差 とし、|z| > 3(場合により2)を外れ値の目安とします。

ただし注意が必要です。平均と標準偏差そのものが外れ値の影響を受けるため、極端な値が多いデータでは検出力が落ちます。

極端な値の影響を受けにくくしたい場合は、平均の代わりに中央値、標準偏差の代わりにMAD(中央絶対偏差)を使う方法もあります。標準偏差の計算そのものは別記事を参照してください。

方法判定の基準向いている場面注意点
IQR法Q1−1.5×IQR 〜 Q3+1.5×IQR の外側分布の形を問わず汎用的1.5は慣用値。閾値は目的で要検討
zスコア法|z| > 3 など左右対称・正規分布に近い分布平均・標準偏差が外れ値に引っ張られる
MAD法(頑健版)中央値 ± k×MAD の外側外れ値が多い・歪んだ分布計算がやや複雑になる

外れ値への対処法

検出した外れ値を機械的に削除するのは危険です。まず「なぜその値が外れているのか」を確認し、原因に応じて対処法を選びます。

判断軸:除外・補正・保持

状況対処理由・補足
入力ミス・測定エラーと判明修正、または除外誤りなので分析に残さない。可能なら正しい値に直す
正当な値だが分析目的に影響集計から除外、または頑健な指標を使う平均より中央値、IQRなど外れ値に強い指標へ
正当な値で、その挙動自体が分析対象保持する不正検知・異常監視などでは外れ値こそ本命
理由が不明保留し、除外前後の結果を比較影響の大きさを見てから判断する

「除外」と「欠損値化」は別物

外れ値を除外する際、行ごと削除するのか、その値だけを欠損(NULLや空欄)にして他の列は残すのかで、後段の集計が変わります。値だけを除く場合は欠損値処理の考え方が関わるため、削除・補完・集計除外の選び方は別記事を参照してください。

そして最も重要なのは、外れ値を除外したら必ず「除外前後で結果がどう変わったか」を比較し、レポートに明示することです。除外は分析者の判断であり、結果を恣意的に動かしうるためです。

SQL・BigQuery・Excelで外れ値を検出・除外する

ここではIQR法を例に、各環境での書き方を示します。考え方は共通で、(1) Q1・Q3を求める →(2)IQRと上下限を計算 →(3)WHERE などで範囲外を抽出または除外する、の3段階です。

SQL(PostgreSQL)

PostgreSQLでは PERCENTILE_CONT でQ1・Q3を求め、CTEで上下限を計算してから抽出します。

-- PostgreSQL:IQR法で外れ値を抽出
WITH q AS (
 SELECT
 PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY amount) AS q1,
 PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY amount) AS q3
 FROM purchases
),
b AS (
 SELECT q1, q3,
 q1 - 1.5 * (q3 - q1) AS lower,
 q3 + 1.5 * (q3 - q1) AS upper
 FROM q
)
SELECT p.*
FROM purchases p, b
WHERE p.amount < b.lower OR p.amount > b.upper; -- 外れ値だけを抽出

外れ値を除外(範囲内だけを残す)したい場合は、最後の条件を WHERE p.amount BETWEEN b.lower AND b.upper に変えます。PERCENTILE_CONT は補間を含む連続版の分位数で、PostgreSQL 9.4以降で利用できます。

なお、BETWEEN で範囲内に絞ると amount が NULL の行は結果から落ちます(NULL は大小比較が成立しないため、範囲内とも範囲外とも判定されません)。

欠損のある列で外れ値を除外するときは、NULL行をどう扱うか(残す・別集計する・補完する)を別途決める必要があります。考え方は別記事「欠損値処理とはなにか|削除・補完・集計除外の考え方」を参照してください。

SQL(製品差)

分位数を求める関数は方言差が大きい領域です。標準SQLに共通の四分位関数があるわけではなく、製品ごとに書き方が分かれます。

製品Q1・Q3の求め方
PostgreSQLPERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x)
SQL ServerPERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY x) OVER ()(ウィンドウ関数)
MySQL専用の分位数集約なし(8.0のウィンドウ関数や行番号・NTILEで代替)

MySQLのように専用の分位数集約がない環境では、NTILE や行番号で四分位の位置を求めるなどの代替が必要です。最終的な構文は使用する製品で検証してください。

BigQuery

BigQueryには集約関数としての MEDIANPERCENTILE がなく、近似分位の APPROX_QUANTILES を使うのが基本です。ここでは PostgreSQL と同様に、CTEで上下限を計算し、WHERE で範囲外を除外します。

-- BigQuery:IQR法で外れ値を除外(近似分位)
WITH b AS (
 SELECT
 APPROX_QUANTILES(amount, 4)[OFFSET(1)] AS q1,
 APPROX_QUANTILES(amount, 4)[OFFSET(3)] AS q3
 FROM purchases
)
SELECT p.*
FROM purchases p, b
WHERE p.amount BETWEEN b.q1 - 1.5 * (b.q3 - b.q1)
 AND b.q3 + 1.5 * (b.q3 - b.q1); -- 外れ値を除外

APPROX_QUANTILES(amount, 4) は4分割の境界を返し、OFFSET(1) がQ1、OFFSET(3) がQ3です。これは近似値である点に注意してください。

厳密な分位が必要なら PERCENTILE_CONT(amount, 0.25) OVER () をウィンドウ関数として使えますが、大規模テーブルでは計算コストが上がります。またBigQuery はスキャンした列のデータ量に応じて課金されるため、対象の列・期間・WHERE 条件を絞ってスキャン量を抑えるのが基本です。

補足:上の例は CTE と WHERE で完結するため QUALIFY は使いません。ウィンドウ関数で求めた分位を、サブクエリを作らずに同じ階層で直接フィルタしたい場合は、BigQuery 独自の QUALIFY 句(例: … QUALIFY amount BETWEEN … AND … )が使えます。ただし QUALIFY は標準SQL全般で使えるわけではなく、対応する製品が限られる点に注意してください。

Excel

Excelは関数で四分位を直接求められ、最も手軽です。

項目Excel 関数 / 操作
Q1=QUARTILE.INC(範囲, 1)
Q3=QUARTILE.INC(範囲, 3)
IQR=QUARTILE.INC(範囲,3) - QUARTILE.INC(範囲,1)
下限・上限=Q1 - 1.5*IQR=Q3 + 1.5*IQR
外れ値の判定=OR(セル<下限, セル>上限) を各行に置く

QUARTILE.INC は両端を含む(inclusive)方式、QUARTILE.EXC は両端を除く(exclusive)方式で、四分位の定義が異なります。どちらを使うかでQ1・Q3がわずかに変わるため、統一して使ってください。

検出した外れ値を視覚的に強調したいときは、上限・下限を条件にした条件付き書式(「数式を使用してルールを設定」)でセルを色分けすると、表のまま確認できます。

注意点

1.5×IQRは絶対基準ではありません。 これは経験則であり、業務やデータによっては緩すぎたり厳しすぎたりします。閾値を変えれば検出件数も変わるため、基準は目的に合わせて決め、明示します。

外れ値=削除ではありません。 外れ値は「確認すべき値」であって「捨てるべき値」ではありません。原因を確かめずに削除すると、不正・故障・重要顧客といった本来見るべき事実を見落とします。

近似と厳密を区別します。 BigQueryの APPROX_QUANTILES は高速ですが近似値です。報告時にはどちらを使ったかを明示すると誤解を避けられます。

多変量の外れ値は1列だけでは見つかりません。 各列単独では正常でも、組み合わせると異常な行(例:身長150cmで体重100kg)があります。本稿の手法は1列(単変量)の検出が中心で、多変量はより高度な手法が必要です。

まとめ

外れ値は、データの大多数から大きく離れた値です。

検出にはIQR法が汎用的で頑健、左右対称な分布ならzスコアも使えますが、平均・標準偏差が外れ値に引っ張られる点に注意します。検出後は機械的に削除せず、入力ミスなら修正・除外、正当な値なら頑健な指標へ切り替えるか保持するなど、原因に応じて対処を選び、除外前後の結果を必ず比較・明示します。

計算面では、Q1・Q3さえ求めれば手順は共通ですが、分位数関数はSQL方言・BigQuery・Excelで書き方と近似/厳密の差があるため、環境ごとの検証が欠かせません。

Analytics沖縄

SQL・データベース・統計の基礎を、実務で使える形に整理して発信しています。専門家として断定するのではなく、公式情報や動作確認をもとに、検索して来た人が迷わず使える記事を目指しています。 複数のWebメディアを運営してきた経験を活かし、正確さと読みやすさの両立を重視しています。

Recent Posts

欠損値処理とはなにか|削除・補完・集計除外の考え方

実データには、値が入っていない…

9時間 ago

分散と標準偏差の違いと計算方法

平均値が同じデータでも、値が中…

10時間 ago

平均値・中央値・最頻値の違いと使い分け

手元のデータを一言で表す「代表…

2日 ago

記述統計とはなにか|データを要約する考え方と使い方

手元に数万行のログがあっても、…

2日 ago

SQLの種類|DDL、DML、DCL(命令言語の分類)

今回は、データベースに対する命…

2年 ago