マガジン

外れ値は消していいのか:残す・分けて見る・直すの判断基準と記録の残し方

AIを使いこなす

Claudeで執筆し、GPTで自動校閲・修正しています。

売上伝票の金額を電卓と照らし合わせて確認する手元
記事の内容をもとに制作したAI生成イメージです。実際の製品画面や検証結果の写真ではありません。

結論から言うと、「外れ値に見えるから」という理由だけで消すのはおすすめしません。判断の軸は値の大きさではなく、なぜその値になったかです。 • 原因が入力ミスや単位違いなど、誤りだと確認できたなら、直すか、直せなければ欠測として扱います。 • 原因が実在する極端な値なら、基本は残します。そのうえで、別に分けて見るか、外れ値に強い指標を使います。 • 原因が確認できないなら、消さずに「未確認」と記録し、含む場合と除く場合の両方で結果を見ます。 統計局の用語辞典は、外れ値を「他の多数のデータから大きく離れた値のこと」と説明しています(統計局 統計用語辞典)。つまり外れ値は「離れている」という見た目の特徴を指す言葉で、誤りかどうかまでは含みません。誤りかどうかは、元の記録に当たって人が確かめる必要があります。 この記事では、確認フロー、判断表、AIに任せる範囲、記録テンプレートを順に示します。

この記事の目次
  1. 外れ値に出会ったときの確認フロー
  2. 原因別の判断表
  3. 候補に印を付ける(コード例)
  4. AIに任せること、人が確認すること
  5. 除外理由の記録テンプレート
  6. 迷いやすい場面

外れ値に出会ったときの確認フロー

次の順に進めます。途中で原因が分かった時点で、判断表(次の章)に進んでください。

  1. 元データを保存する。 加工前のファイルを別名で残し、以降の作業は複製で行います。
  2. 候補に印を付ける。 削除ではなくフラグ列を追加します(コード例は後述)。
  3. ありえない値かを見る。 負の年齢、存在しない日付、桁が違う金額など、物理的・業務的に成り立たない値は誤りの可能性が高いです。
  4. 元の記録に当たる。 紙の帳票、入力画面のログ、担当者への確認など、そのデータを作った側に戻ります。
  5. 同じ行の他の列と整合するかを見る。 単価と数量から金額が計算できるか、同じ日の他の記録と矛盾しないかを確かめます。
  6. 原因を三つのどれかに分類する。 「誤り」「実在」「不明」です。
  7. 処置を決め、記録する。 処置と理由を、後述のテンプレートに書きます。
  8. 結果を比べる。 平均や合計を、候補を含めた場合と除いた場合で並べ、結論が変わるかを確認します。

手順3〜5で「誰かに聞く」「元の資料を見る」が出てくるのは、AIにも統計手法にも代わりがきかない部分だからです。

原因別の判断表

  • 入力ミス・単位違い、例(説明用):12,000円のはずが1,200,000円、基本の処置:元の記録で正しい値を確認して修正、注意点:修正前後の値を必ず記録する
  • 誤りだが正しい値が分からない、例(説明用):年齢が「250」で元資料もない、基本の処置:欠測にする(その列の集計から外す)、注意点:行ごと消すと他の列の情報も失う
  • 実在する極端な値、例(説明用):大口の法人注文、キャンペーン日の売上、基本の処置:残す、注意点:平均が引っ張られるので中央値も併記する
  • 実在するが性質が違う、例(説明用):通常客と法人客が同じ列に混在、基本の処置:区分を分けて別集計、注意点:分け方の基準を事前に決める
  • 原因不明、例(説明用):調べたが誰も覚えていない、基本の処置:残したまま「未確認」と記録、注意点:含む場合と除く場合の両方を報告する

「除外」は最後の手段です。除外するなら、分析の目的に対してその値が対象外だと言えること(例:テスト用の注文が混ざっていた)が必要です。

なお、外れ値が代表値に与える影響は指標で違います。統計局の学習サイトでは、外れ値が加わると平均値が最も影響を受け、中央値は多くの場合それほど影響せず、最頻値はまず影響を受けないと説明しています(統計局 中心的な傾向を捉える)。実在する極端な値を残すときは、平均だけでなく中央値も並べると、読み手が偏りに気づけます。

候補に印を付ける(コード例)

四分位範囲(IQR)を使い、第1四分位数−1.5×IQRより小さい値、第3四分位数+1.5×IQRより大きい値に印を付ける方法はよく使われる目安です。目安であり、業務上の正しさを保証するものではありません。次のコードは削除せず、印と記入欄を足すだけです。分位数の計算には pandas の DataFrame.quantile を使っています(pandas ドキュメント)。このコードは本記事の作成時点では実行して確認していないため、手元の小さなデータで試してから使ってください。

python
import pandas as pd

df = pd.read_csv("sample.csv")   # 説明用のファイル名
col = "amount"                   # 確認したい列名

q = df[[col]].quantile([0.25, 0.75])[col]
q1, q3 = q.loc[0.25], q.loc[0.75]
iqr = q3 - q1
low, high = q1 - 1.5 * iqr, q3 + 1.5 * iqr

df["outlier_flag"] = (df[col] < low) | (df[col] > high)
df["judgement"] = ""    # 誤り / 実在 / 不明
df["action"] = ""       # 修正 / 残す / 別集計 / 欠測 / 除外
df["note"] = ""

print(f"下限={low}, 上限={high}, 候補={df['outlier_flag'].sum()}件")
print(df[df["outlier_flag"]])
df.to_csv("flagged.csv", index=False)

複数の列を組み合わせて外れを探したい場合、scikit-learn には IsolationForest や LocalOutlierFactor などの外れ値検出が用意されています。ただし公式ドキュメントも、高次元や分布の仮定がない場合の外れ値検出は難しいと述べ、contamination で判定しきい値を調整する設計になっています(scikit-learn 外れ値検出)。これらも「候補を挙げる道具」であり、消す根拠にはなりません。

AIに任せること、人が確認すること

AIに向いているのは、候補の整理、確認用の質問リストの作成、記録文の下書きです。「この値は誤りです」と決めさせるのは向いていません。AIは元の帳票を見ていないからです。

渡す情報は、列の意味、単位、期間、候補の行(説明用に置き換えたもの)です。顧客名や個人を特定できるID、社外秘の金額は、ダミー値に置き換えてから貼ってください。

依頼文の例です。

以下は売上データ(説明用に値を置き換え済み)の外れ値候補です。
列の意味:date=日付、store=店舗、qty=数量、unit_price=単価(円)、amount=金額(円)
通常の単価は800〜1,500円程度です。

候補:
行12: 2026-09-03, A店, qty=3, unit_price=1200, amount=360000
行48: 2026-09-18, B店, qty=500, unit_price=1100, amount=550000

お願い:
1. 各行について、誤入力の可能性と実在の可能性を、データ内の矛盾点を根拠に挙げてください。断定はしないでください。
2. 元の記録に当たって確認すべき項目(誰に何を聞くか)を行ごとに3つ以内で。
3. 確認後に使う記録用の1行メモの書き方を例示してください。

この例では行12は3×1200=3,600円のはずが360,000円で、桁の入力ミスが疑えます。行48は計算が合っており、大口注文として実在する可能性があります。ただしこれは説明用の例で、実際のデータの結果ではありません。AIの回答は仮説として受け取り、確認は元の記録で行います。

除外理由の記録テンプレート

処置を決めたら、1件ずつ次の項目を残します。表計算ソフトの1行1件で運用できます。

  • 記録ID、記入内容:連番
  • 記録日・担当者、記入内容:いつ、誰が判断したか
  • データ名・列名・行、記入内容:例:売上2026年9月.csv / amount / 行12
  • 元の値、記入内容:処置前の値(上書きしない)
  • 検出方法と基準、記入内容:例:IQRの1.5倍、目視、業務ルール上の上限
  • 確認先と確認内容、記入内容:例:店舗A担当に伝票を確認
  • 判定、記入内容:誤り / 実在 / 不明
  • 処置、記入内容:修正 / 残す / 別集計 / 欠測 / 除外
  • 処置後の値、記入内容:修正した場合の値
  • 理由、記入内容:判定の根拠を1〜2文で
  • 影響の確認、記入内容:含む場合と除く場合の平均・中央値・合計
  • 元データの保存場所、記入内容:ファイルのパスや版

記入例(説明用の架空の内容です)。

ID:001 / 行12 / 元の値:360,000 / 検出:IQR基準 / 確認:A店の伝票を確認し、金額欄に0が2つ多く入力されていた / 判定:誤り / 処置:修正 / 処置後:3,600 / 理由:数量3×単価1,200と一致 / 影響:平均が下がる、中央値は変化なし

書くときのコツは、「外れ値だったので除外」のような理由を避け、何を見てそう判断したかを書くことです。後から第三者が読んで、同じ判断になるかを追える状態が目安です。

迷いやすい場面

  • 候補が多すぎる。 基準が厳しすぎるか、分布が偏っている可能性があります。値を全件調べる前に、列を区分ごとに分けて見直してください。
  • 確認する相手がいない。 無理に決めず「不明」で残し、含む場合と除く場合の両方を報告します。
  • 除外後に結論が変わる。 その場合こそ、除外の根拠を丁寧に書く必要があります。結論が変わることを報告文に明記してください。

出典・参考資料