外れ値と異常検知の基礎
IQR・zスコア・時系列
売上データに1件だけ紛れた桁違いの注文、重要業績評価指標(KPI: Key Performance Indicator)のレポートで突然跳ね上がった1日、平均値を一人で押し上げている特大の顧客――データ分析の現場では、こうした外れ値が必ず出てきます。やっかいなのは、外れ値をすべて消しても、すべて残しても、どちらも分析を誤らせる点です。消せば本物のシグナルを握りつぶし、残せば平均や標準偏差が現実からずれます。
外れ値への正しい向き合い方は、検出して即削除することではなく、検出して原因を確認し、分類してから対応を決めることです。原因は大きく次の3つに分かれます。
- 計測・入力のエラー:直すか除外します。
- 稀だが正しい値:分析対象として残します。
- 注目すべき異常:検知してアラートを上げます。
検出の道具として、静的なデータにはIQR法・zスコア・修正zスコア、時系列データには季節性を取り除いた残差に対する移動平均±σを使い分けます。SEO流入やGA4(Googleアナリティクス4)の数値に出る計測ノイズ・bot流入の検知も、この異常検知の応用です。
01.まず結論:外れ値は『消す』前に『分類する』
「外れ値(はずれち、outlier)」とは、ほかのデータと比べて極端に大きい・小さい値のことです。多くの入門書では「外れ値は分析の前に除外しましょう」と書かれていますが、これは半分しか正しくありません。除外してよいのは原因がエラーだと確認できたときだけで、それ以外を機械的に消すと、分析の結論そのものが変わってしまいます。
たとえば、ある月のECサイトの平均注文額を計算するとします。注文の中に「単価の入力ミスで通常の1000倍になった1件」が混じっていれば、それは消すべきエラーです。しかし「大口の法人顧客がまとめ買いした正しい高額注文」も同じように平均から大きく外れます。後者を消せば、平均注文額は実態より低く出ます。同じ「外れた値」でも、原因を確認しないと対応を決められません。
図:外れ値は「検出して終わり」ではなく、原因で3つに分かれる
検出はあくまで出発点です。同じ「平均から大きく離れた値」でも、原因がエラーなのか、珍しいが本物なのか、注目すべき異常なのかで、取るべき対応はまったく変わります。
STEP 1 — 検出
IQR法・zスコアなどで「ほかと大きく離れた値」を機械的に拾う
STEP 2 — 原因を調べる
その値がなぜ生まれたのかを、元データ・ログにさかのぼって確認する
STEP 3 — 原因で分類し、対応を変える
計測・入力のエラー
タグの二重計測、単位の取り違え、入力ミス。データが現実を正しく写していない
→ 原因を直す。直せなければ理由を記録して除外
稀だが正しい値
大口顧客の特大注文、バズによる一時的なアクセス増。珍しいが現実に起きた
→ 残す。消すと分布や平均が現実とずれる
注目すべき異常(シグナル)
不正アクセス、サーバ障害、bot流入、計測の停止。検知すること自体が目的
→ 消さずにアラートを上げ、調査につなげる
「外れ値だから消す」と機械的に処理すると、3列目のシグナルを握りつぶし、2列目で分布をゆがめる。原因の確認を飛ばさない。
重要なのは、IQR法やzスコアといった検出手法は「ほかと離れている値」を拾うだけで、「消すべき値」を教えてくれるわけではないということです。手法が出すのはあくまで候補リストで、それをエラー・正しい値・シグナルのどれに分類するかは、元データやログをさかのぼって人が判断します。本記事は、この「検出」と「分類」を順に扱います。
02.外れ値とは|除外すべきノイズと意味のある外れ値の区別
外れ値を原因で分類すると、対応は次の3通りに整理できます。検出した値がどれに当たるかを、必ず元データに戻って確認します。
| 分類 | 具体例 | 取るべき対応 |
|---|---|---|
| 計測・入力のエラー | 計測タグの二重発火でPVが2倍、単位の取り違えで売上が1000倍、年齢欄に999 | 原因を特定して修正する。修正できないなら、除外理由を記録したうえで除外する |
| 稀だが正しい値 | 大口顧客の特大注文、テレビ露出やバズで一時的に急増したアクセス | 残す。消すと平均・分散が実態からずれる。必要なら通常分と分けて集計する |
| 注目すべき異常(シグナル) | 不正アクセス、サーバ障害、bot流入、計測タグの停止によるCV欠損 | 消さずにアラートを上げ、調査につなげる。検知すること自体が分析の目的 |
この3分類のうち、初学者がいちばん間違えやすいのが2列目(稀だが正しい値)です。「平均から3標準偏差離れているから除外」といった機械的なルールは、エラーと一緒に「珍しいが本物のデータ」も削ってしまいます。BtoBの取引データのように、少数の大口顧客が売上の大半を占める分布では、その大口こそが事業の実態です。消した瞬間に分析は現実を映さなくなります。
結果を見てから「この値は外れ値だから」と後付けで除外していくと、分析者にとって都合のよい結論にいくらでも寄せられます。これは統計的仮説検定でいうp値ハッキング(p-hacking)と同じ構造の問題です。除外の基準(どの手法で、どの係数で、何を確認したら消すか)はデータを見る前に決め、実際に除外したレコードは件数と理由を残します。「外れ値を3件除外した」と書けるのと、「不都合な値をこっそり消した」と疑われるのとでは、分析の信頼性がまったく違います。
なお、外れ値と似て非なる概念に欠損値(データが入っていない空欄)があります。欠損値は「値がない」状態、外れ値は「値はあるが極端」な状態で、対処も別です。本記事は外れ値に絞りますが、実務ではどちらも前処理の段階でセットで点検します。
03.静的データの検出法|IQR法・zスコア・修正zスコア
ここからは検出の道具を見ていきます。時間の流れを持たない静的なデータ(ある月の注文額一覧、顧客ごとの利用回数など)に対しては、代表的な手法が3つあります。いずれも「中心からどれだけ離れているか」を測りますが、中心の測り方と分布の前提が異なります。
IQR法|分布の形を仮定しない一次スクリーニング
IQR法は、データを小さい順に並べたときの四分位数を使います。下から4分の1の位置にある値を第1四分位数(Q1)、4分の3の位置を第3四分位数(Q3)と呼び、その差IQR = Q3 − Q1が四分位範囲(IQR: Interquartile Range)です。Q1 − 1.5×IQRより小さい値、Q3 + 1.5×IQRより大きい値を外れ値の候補とします。箱ひげ図のひげの外側に出る点が、まさにこれです。
図:IQR法は「箱の幅の1.5倍」の外側を外れ値とする
データを小さい順に並べ、下から4分の1の点(Q1)と4分の3の点(Q3)の幅をIQRとします。Q1−1.5×IQR より下、Q3+1.5×IQR より上を外れ値の候補とします。
IQR法は中央値と四分位だけで線を引くため、外れ値そのものに基準を引きずられにくいのが長所です。係数1.5は慣例値で、厳しくしたいときは3.0を使うこともあります。
IQR法の長所は、正規分布などの分布の形を仮定しないこと、そして中央値と四分位という「順位」ベースの指標を使うため、外れ値そのものに基準を引きずられにくいことです。分布が左右に歪んだデータでも素直に使えるため、まず最初にかける一次スクリーニングに向きます。
zスコア|正規分布を前提とした標準化
zスコア(標準得点)は、各値が平均から標準偏差いくつぶん離れているかを表します。z = (x − 平均) / 標準偏差で計算し、慣例的に|z| > 3(平均から3標準偏差以上離れている)を外れ値とみなします。直感的で広く使われますが、2つの弱点があります。
- 正規分布を前提とする。「3標準偏差の外は約0.3%」という目安は、データが正規分布に近いときにしか成り立ちません。歪んだ分布では外れ値の判定がずれます。
- 平均と標準偏差自体が外れ値に引きずられる。極端な値が混じると平均も標準偏差も引っ張られ、本来なら外れ値であるはずの値のzスコアが3未満に収まってしまいます。これをマスキング(外れ値が外れ値を覆い隠す現象)と呼びます。
修正zスコア|中央値とMADで頑健にする
zスコアのマスキング問題を補うのが修正zスコア(modified z-score)です。平均と標準偏差の代わりに、外れ値に強い中央値と中央絶対偏差(MAD: Median Absolute Deviation、各値と中央値との差の絶対値、その中央値)を使います。計算式はM = 0.6745 × (x − 中央値) / MADで、|M| > 3.5を外れ値の目安とします。係数0.6745は標準正規分布の0.75分位点(Φ⁻¹(0.75))で、MADを標準偏差の一致推定量に変換するための値です。しきい値3.5は、外れ値検出の実務で広く使われる慣例値です。
中央値もMADも順位ベースの指標なので、データの中に外れ値が複数あっても基準がぶれません。自動で回す異常検知パイプラインには、zスコアより修正zスコアの方が安全です。3手法の使い分けを整理します。
| 手法 | 外れ値とみなす基準 | 前提と特徴 | 向くデータ |
|---|---|---|---|
| IQR法 | Q1−1.5×IQR より下、Q3+1.5×IQR より上 | 分布の形を仮定しない。四分位ベースで外れ値に引きずられにくい | 分布が歪んだデータ、まず全体を見る一次スクリーニング |
| zスコア | |z| = |(x−平均)/標準偏差| が 3 を超える | 正規分布を前提。平均・標準偏差が外れ値に引きずられマスキングが起きる | 正規分布に近く、外れ値がごく少数だと分かっているデータ |
| 修正zスコア | |0.6745×(x−中央値)/MAD| が 3.5 を超える | 中央値とMADベースで頑健。zスコアのマスキング問題を補う | 外れ値が複数あるデータ、自動で回す異常検知パイプライン |
# 静的データの外れ値検出:IQR法と修正zスコア(NumPy)
import numpy as np
x = np.array([12, 14, 13, 15, 11, 14, 13, 120, 12, 14]) # 1件だけ桁違い
# --- IQR法 ---
q1, q3 = np.percentile(x, [25, 75])
iqr = q3 - q1
lower, upper = q1 - 1.5 * iqr, q3 + 1.5 * iqr
print("IQR法の外れ値:", x[(x < lower) | (x > upper)])
# --- 修正zスコア(中央値とMADベース・外れ値に頑健) ---
med = np.median(x)
mad = np.median(np.abs(x - med))
modified_z = 0.6745 * (x - med) / mad
print("修正zスコアの外れ値:", x[np.abs(modified_z) > 3.5])ExcelでIQR法の外れ値を判定する|QUARTILE.INCと1.5×IQR
PythonやRを使わなくても、IQR法の外れ値判定はExcel(やGoogleスプレッドシート)の関数だけで組めます。四分位数を返すQUARTILE.INCでQ1とQ3を求め、そこから下限・上限のフェンスを引き、各データがその外側かどうかをIFで判定する、という流れです。データがB2:B11に入っている場合の数式を示します。
| 求めるもの | セルに入れる数式 | 補足 |
|---|---|---|
| 第1四分位数(Q1) | =QUARTILE.INC(B2:B11, 1) | 古い関数 QUARTILE でも同じ結果。範囲はデータ列に合わせる |
| 第3四分位数(Q3) | =QUARTILE.INC(B2:B11, 3) | 第2引数は 1=Q1・2=中央値・3=Q3 を表す |
| 四分位範囲(IQR) | =QUARTILE.INC(B2:B11,3) - QUARTILE.INC(B2:B11,1) | Q1・Q3を別セルに出して引き算してもよい |
| 下限・上限フェンス | 下限 = Q1セル - 1.5*IQRセル / 上限 = Q3セル + 1.5*IQRセル | 1.5は慣例値。厳しく絞るなら3.0にする |
| 外れ値の判定 | =IF(OR(B2<下限セル, B2>上限セル), "外れ値", "正常") | データ列(B列)の各行に入れ、オートフィルで全行に広げる |
1点だけ注意があります。Excelの四分位数にはQUARTILE.INC(両端を含む)とQUARTILE.EXC(両端を除く)の2種類があり、定義が少し違うため結果がずれることがあります。箱ひげ図やこの記事の計算と揃えたいときは、両端を含むQUARTILE.INCを使ってください。
Pythonのコードも上のExcel数式も組まずに試したいときは、同じデータ(120が1件だけ混じった10個の値)を下のツールに読み込んであります。四分位数と1.5×IQR基準の外れ値判定を、その場で確認できます。箱ひげ図では120が赤い点(外れ値)として表示されます。
数値データを貼り付けると、平均・中央値・標準偏差・四分位数・外れ値(1.5×IQR)と箱ひげ図・ヒストグラムをその場で計算します(ブラウザ内で計算、サーバー送信なし)。
入力フォーマットの例を見る
Excel・Googleスプレッドシートで範囲をコピーしてそのまま貼り付け(タブ区切り)できるほか、CSV(カンマ区切り)・スペース区切りにも対応しています。1行目が見出しの場合は自動で判定します。日付や文字列など数値でないセルは自動的に除外されるので、きれいに整形してから貼り付ける必要はありません。
日付,セッション数 6/1,320 6/2,298 6/3,341
どの手法も「離れている値」を拾うだけで、しきい値(1.5・3・3.5)は絶対の正解ではありません。実務では、まずIQR法でデータ全体の散らばりと外れ値の数を把握し、そのうえで「分布が正規に近く外れ値が少ない」ならzスコア、「外れ値が複数あって自動で回したい」なら修正zスコアに切り替える、という順番が無難です。最後は必ず元データに戻り、拾った値がエラーなのか正しい値なのかを前述の3分類で判断します。
04.時系列データの異常検知|移動平均±σと季節性の考慮
SEO流入、広告のクリック数、サイトのアクセス数といった時系列データ(時間の順に並んだデータ)の異常検知では、静的なデータ向けの手法をそのまま当てはめると失敗します。理由は2つあります。1つは時系列にはトレンド(右肩上がり・下がりの基調)があり、全期間の平均という基準が意味を持たないこと。もう1つは季節性(曜日・月・年でくり返す周期的な変動)があることです。
移動平均±σ|「直近の普通」からのずれを見る
時系列の基本は移動平均±σです。全期間ではなく、直近の一定期間(移動窓)の平均と標準偏差を計算し、移動平均 ± k×標準偏差のバンドを引いて、その外に出た点を異常とします。時系列分析の基礎で扱う移動平均の応用で、係数kは2〜3がよく使われます。「全体の普通」ではなく「直近の普通」を基準にするため、ゆるやかなトレンドには自然に追従します。
季節性の落とし穴|山を毎回「異常」と誤検知する
ところが、移動平均±σを生のデータにそのまま当てると、季節性のある山を毎回「異常」と誤検知します。たとえばBtoBサイトのアクセスは平日に多く土日に落ちる、という曜日の季節性を持ちます。この山と谷は「異常」ではなく「いつもの周期」なのに、固定したバンドはそれを拾ってしまいます。
図:季節性をそのままにすると、季節の山が毎回「異常」になる
上段は生のアクセスデータ。週ごとの山が固定しきい値を毎回超え、本物の異常と区別がつきません。下段は季節成分を取り除いた残差。山が平らになり、本物の異常スパイクだけがしきい値を超えます。
時系列の異常検知では、まずトレンドと季節性を取り除き、残った「説明できない部分(残差)」に対してしきい値を当てます。生のままだと、毎週・毎年くり返す山を異常と取り違えます。
対処は、異常検知の前に季節成分を取り除くことです。代表的な方法がSTL分解(Seasonal-Trend decomposition using Loess)で、時系列を次の要素に分解します。
- トレンド:右肩上がり・下がりの基調です。
- 季節性:曜日・月・年でくり返す周期的な変動です。
- 残差:トレンドと季節性では説明できない残りの変動です。
季節性とトレンドはくり返し・基調なので異常ではありません。異常はあくまで「残差」に現れます。残差に対して移動平均±σや修正zスコアを当てれば、季節の山に惑わされず本物の異常だけを拾えます。
# 時系列の異常検知:季節成分を除いた残差で判定する(pandas / statsmodels)
import pandas as pd
from statsmodels.tsa.seasonal import STL
# s: 日次のSEO流入(DatetimeIndex付きの Series)
# --- 季節性を考慮しない移動平均±σ:当日を含めず過去だけで基準を作る ---
# 注意: アラート運用では当日を基準計算に入れない。shift(1) で1日ずらし、
# rolling は既定の後方窓(過去データのみ)にする。center=True は将来データを
# 使うため、最新日が判定できず過去探索にしか使えない。
window = 28
base = s.shift(1) # 当日を基準計算から除く(リーク防止)
ma = base.rolling(window).mean() # 後方窓=過去データのみ
sd = base.rolling(window).std()
naive = s[(s > ma + 3 * sd) | (s < ma - 3 * sd)]
print("移動平均±σで検出した異常日:", naive.index.tolist())
# --- STL分解:トレンドと季節性を取り除いた残差で判定する ---
result = STL(s, period=7).fit() # 曜日の季節性(7日周期)を分離
resid = result.resid # トレンドも季節性も除いた残差
sigma = resid.std()
anomalies = s[resid.abs() > 3 * sigma]
print("残差ベースで検出した異常日:", anomalies.index.tolist())季節性を考えるもう1つの実務的な方法が、前年同曜日・前年同月との比較です。STL分解のような統計処理を入れずとも、「同じ条件どうしを比べる」だけで季節要因の大半を打ち消せます。年末商戦のピークを「異常」と騒がないために、前年の年末と比べる――この発想は、季節性補正したKPIレポートの基本でもあります。
異常検知というと数値の急増(スパイク)に目が行きがちですが、実務でより怖いのは急減と計測の停止です。CVタグが壊れてコンバージョンが計測されなくなった、特定ページがインデックスから外れて流入が落ちた、といった事象は「数値が普段より低い」異常です。移動平均±σのバンドは上限と下限の両方を見るため、s < 移動平均 − k×σ側の検知も必ず有効にしてください。「数値が0や欠損に張り付いていないか」は、しきい値とは別に単独で監視する価値があります。
05.実務での応用|計測ノイズとbot流入の検知
ここまでの手法を、Web担当者がいちばん出会う場面――アクセス解析データのノイズ検知――に当てはめます。GA4やSearch Consoleの数値は、計測の仕組み上どうしてもノイズが混じります。代表的なものが、計測タグの不具合による計測ノイズと、人間でないアクセスによるbot流入です。
計測ノイズ|タグの二重発火・設定ミスを残差で見つける
計測タグの二重発火(同じページで計測コードが2回動いてPVが2倍になる)、リダイレクトの設定ミス、タグ入れ替え時の不整合などは、特定の日を境にKPIが階段状に跳ねたり落ちたりする形で現れます。これは時系列の異常検知がそのまま使えます。季節性を除いた残差で、特定日からの水準シフトを検知すれば、「いつ・どの指標が」おかしくなったかを早く特定できます。SEO流入・広告KPI・サイト指標をBigQueryに集約して監視する具体的な構成は、Search Console × BigQuery × Looker Studioで扱っています。
bot流入|複数指標の組み合わせで人間と見分ける
bot流入はやや厄介です。記事を公開した直後にGA4のユーザー数が不自然に急増したら、その多くはJavaScriptを実行するbot(AIクローラーやスクレイパー)が計測タグを発火させた結果である可能性があります。bot流入はセッション数という単一指標だけ見ても人間のアクセス増と区別がつきにくく、複数指標を組み合わせて初めて見分けられます。
| bot流入が現れやすい指標 | 人間のアクセスとの違い |
|---|---|
| セッション数 | 短時間に階段状・突発的に急増する。残差ベースの異常検知に強く反応する |
| 直帰率・エンゲージメント率 | 直帰率がほぼ100%、1ページだけ見て離脱するパターンに偏る |
| 平均エンゲージメント時間 | 0秒近辺に集中する。人間のような滞在時間のばらつきがない |
| 地域・参照元・ブラウザ | 特定のデータセンター地域、特定のUA・参照元に不自然に集中する |
ここで効くのが、外れ値検知を1つの指標ではなく複数指標の組み合わせで見るという発想です。「セッションが残差ベースで異常」かつ「その日の直帰率がほぼ100%」かつ「特定地域に集中」――この複数条件が同時に立ったときだけアラートを上げれば、人間のバズによる正当な急増(稀だが正しい値)と、bot流入(注目すべき異常)を切り分けられます。GA4の数値がbotで汚染される仕組みと、サーバ・エッジ側で計測から除外する多層の対策は、GA4の数値がbotで汚染される原因と対策で詳しく扱っています。
異常検知でbot流入を見つけたあと、すでに溜まったデータから機械的に消すだけでは、翌週もまた同じ汚染が積み上がります。検知はあくまで「汚染が起きている」と気づくための仕組みです。本筋の対応は、bot判定したアクセスを計測の段階で除外すること――GA4の内部トラフィック除外や、サーバ・エッジでのフィルタです。異常検知(事後に気づく)と計測設計(事前に入れない)はセットで考えます。
- ✓ 検出手法のしきい値(IQRの係数・σの倍率)はデータを見る前に決める
- ✓ 時系列は季節性を取り除いた残差に対して異常を判定する
- ✓ 急増だけでなく急減・計測停止(数値が0や欠損)も監視対象にする
- ✓ bot流入は単一指標でなくセッション数・直帰率・地域の組み合わせで判定する
- ✓ 検出した異常は原因を確認し、エラー・正しい値・シグナルに分類する
- ✓ 除外したレコードは件数と理由を記録し、後から検証できるようにする
06.よくある質問(FAQ)
外れ値は分析の前にすべて除外すべきですか?
いいえ。外れ値を一律に消すのは誤りです。除外してよいのは、原因が計測・入力のエラーだと元データで確認できたときだけです。大口顧客の特大注文のような「稀だが正しい値」を消すと平均や分散が実態からずれ、不正アクセスやbot流入のような「注目すべき異常」を消すと検知すべきシグナルを握りつぶします。検出した値は必ず原因を確認し、分類してから対応を決めてください。
IQR法とは何ですか?
データを小さい順に並べたとき、下から4分の1の位置にある値を第1四分位数(Q1)、4分の3の位置を第3四分位数(Q3)と呼び、その差IQR = Q3 − Q1を四分位範囲といいます。IQR法は、Q1 − 1.5×IQRより小さい値とQ3 + 1.5×IQRより大きい値を外れ値の候補とする手法です。箱ひげ図のひげの外に出る点がこれにあたります。正規分布などの分布の形を仮定せず、中央値と四分位という順位ベースの指標を使うため、外れ値そのものに基準を引きずられにくいのが特徴です。
IQR法とzスコア、どちらを使えばよいですか?
まずIQR法で全体を眺めるのが無難です。IQR法は正規分布などの分布の形を仮定せず、四分位ベースなので外れ値そのものに基準を引きずられにくく、一次スクリーニングに向きます。zスコアは直感的ですが正規分布を前提とし、平均・標準偏差が外れ値に引っ張られるマスキングが起きます。外れ値が複数あるデータや、自動で回す異常検知パイプラインでは、中央値とMADを使う修正zスコアの方が安全です。どの手法もしきい値は絶対の正解ではないので、最後は元データで原因を確認してください。
なぜ時系列データにzスコアをそのまま使ってはいけないのですか?
時系列データにはトレンド(右肩上がり・下がりの基調)と季節性(曜日・月・年でくり返す周期変動)があるためです。全期間の平均と標準偏差を基準にすると、トレンドによる自然な水準変化を異常と誤り、平日に多く土日に落ちるといった季節の山を毎回「異常」と誤検知します。時系列ではSTL分解などでトレンドと季節性を先に取り除き、残った残差に対して移動平均±σや修正zスコアを当てます。前年同曜日・前年同月との比較も、季節要因を打ち消す実務的な方法です。
異常検知のしきい値はどう決めればよいですか?
IQR法の係数1.5、zスコアの3、修正zスコアの3.5、移動平均±σのσ倍率はいずれも慣例値で、絶対の正解ではありません。異常を見逃したときのコストが大きいなら緩め(検知を増やす)に、誤検知でアラートが鳴りすぎて困るなら厳しめに調整します。最も大切なのは、しきい値を結果を見る前に決めておくことです。データを見てから「この値が外れ値になるように」と係数を動かすと、分析者にとって都合のよい結論をいくらでも作れてしまいます。
異常検知はAIに任せられますか?
IQR法や修正zスコアの計算、時系列の分解、検知コードの生成は AI(ChatGPT、Claude、Geminiなど)に任せられます。一方で、検出した値が計測ミスなのか、稀だが正しい大口顧客なのか、検知すべきbot流入なのかという原因の特定と分類は人が担う領域です。AIは「これは外れ値です」と出力できても、その値を消すべきか残すべきかは、元データやログ、事業の文脈を踏まえないと判断できません。AIには検出を任せ、分類と最終判断は人が行う運用にしてください。
07.まとめ
外れ値は「分析の前にとりあえず消すもの」ではありません。検出はあくまで出発点で、その値がなぜ生まれたのかを元データにさかのぼって確認します。そのうえで、計測・入力のエラー、稀だが正しい値、注目すべき異常に分類して初めて、消すか・残すか・アラートを上げるかが決まります。
検出の道具は、データの性質で使い分けます。時間の流れを持たない静的データには、分布を仮定しないIQR法、正規分布を前提とするzスコア、外れ値に頑健な修正zスコアを使います。時系列データには、トレンドと季節性を取り除いた残差に対する移動平均±σを使い、季節の山を異常と誤検知しないようにします。GA4やSearch Consoleの計測ノイズ・bot流入の検知も、この異常検知の応用であり、bot流入は単一指標でなく複数指標の組み合わせで人間のアクセスと切り分けます。共通して大切なのは、しきい値はデータを見る前に決め、検出した値は必ず原因を確認し、除外したものは記録に残すという運用です。これだけで、データ分析が「都合のよい値だけを残す」事故から遠ざかります。
時系列分析の基礎|YoY/MoM・STL分解・移動平均・季節性補正の読み方
移動平均・STL分解・季節性補正など、時系列データを正しく読むための基礎を整理します。
GA4の数値がbotで汚染される原因と対策|AIクローラー時代の計測設計
bot流入による計測汚染の見分け方と、サーバ・エッジで除外する多層の対策を整理します。
統計的仮説検定の基礎|p値・有意水準・第一種/第二種の過誤・信頼区間の読み方
観測した差が偶然で説明できるかを判定する仮説検定の考え方を初学者向けに整理します。
データ分析でよく使うアルゴリズム・指標まとめ
類似度・一致度・予測モデル評価の3カテゴリで指標を整理した総合解説です。
データの異常検知と計測設計の体制づくりをご相談ください
SEO流入やGA4の数値に混じるノイズ・bot流入を検知し、信頼できるKPIレポートに整える異常検知の設計・実装・運用の伴走支援を行っています。お気軽にお問い合わせください。

