見出し画像

ビジネスデータ分析における異常検知入門


1.異常検知とは何か?

異常検知は、大量のデータの中から「普通ではない」または「予想外の」パターンを見つけ出す方法です。日常生活でも私たちは無意識のうちに「異常検知」を行っています。

例えば:

  • いつもは混んでいない道路が突然渋滞している

  • 普段は静かな隣家から大きな物音がする

  • いつも同じ時間に来るバスが、今日は大幅に遅れている

これらの状況で、私たちは「何か普段と違う」と感じます。ビジネスデータの異常検知も、基本的には同じ考え方です。ただし、人間の感覚ではなく、数学的・統計的な方法を用いて「異常」を定義し、検出します。

ビジネスでの具体例:

  1. 小売店の日次売上データ: 通常、平日の売上が50万円前後で推移している店舗で、ある平日に突然100万円の売上が記録された。

  2. Eコマースサイトの1時間ごとのアクセス数: 普段は1時間あたり1000アクセス程度のサイトで、深夜2時に突然10000アクセスが記録された。

  3. 工場の製造ラインの不良品率: 通常0.1%程度の不良品率が、ある日突然1%に跳ね上がった。

これらの「異常」を早期に発見することで、ビジネスチャンスを逃さずに、また問題にも素早く対応することができます。

2.なぜ異常検知が重要なのか?

異常検知の重要性は以下の3点に集約されます。

2-1.問題の早期発見と対応

異常を素早く見つけることで、問題が大きくなる前に対処できます。

具体例:

  • 製造ラインの不良品率が急上昇したことを早期に発見し、機械の故障を修理することで大規模な製品リコールを防ぐ。

  • ECサイトの注文数が急減したことを検知し、システム障害をすぐに修復することで売上の損失を最小限に抑える。

2-2.ビジネスチャンスの発見

「良い方向」の異常を見つけることで、新たなビジネス機会を見出せます。

具体例:

  • ある商品の売上が急増していることを発見し、在庫を増やしたり関連商品を開発したりすることで売上をさらに伸ばす。

  • 特定の地域からのアクセスが増加していることを検知し、その地域向けのマーケティングキャンペーンを展開する。

2-3.予測モデルの精度向上

異常なデータを適切に処理することで、将来予測の精度が向上します。

具体例:

  • 売上予測モデルから異常値(例:災害による一時的な売上減)を除外することで、より正確な将来の売上予測が可能になる。

  • 顧客の購買行動予測から一時的なキャンペーンの影響を取り除くことで、通常時の購買傾向をより正確に把握できる。

3.異常検知の対象となるデータ

異常検知で主に扱うのは「時系列データ」です。時系列データとは、時間の経過とともに記録された数値データのことです。

具体例:

  1. 日次売上データ: 2023年1月1日:50万円 2023年1月2日:52万円 2023年1月3日:48万円 ...(日付とともに記録された売上)

  2. 時間帯別のウェブサイトアクセス数: 2023年4月1日 9:00-10:00:1000アクセス 2023年4月1日 10:00-11:00:1200アクセス 2023年4月1日 11:00-12:00:1100アクセス ...(時間帯ごとに記録されたアクセス数)

  3. 月次の新規顧客数: 2023年1月:100人 2023年2月:105人 2023年3月:98人 ...(月ごとに記録された新規顧客数)

これらのデータは、時間とともに変化する傾向(トレンド)や周期的な変動(季節性)を持つことがあります。異常検知では、これらの通常のパターンから外れた値や急激な変化を見つけ出します。

4.異常の種類

異常検知で主に注目する異常には、次の2種類があります:

4-1.外れ値(アウトライアー)

他のデータから大きく離れた、突出した値のことです。

具体例:

  • 日次売上データ: 月曜日:50万円 火曜日:48万円 水曜日:52万円 木曜日:200万円 (← 外れ値) 金曜日:51万円

この例では、木曜日の売上が他の日と比べて突出して高くなっています。これが「外れ値」です。

4-2.変化点

データの傾向が急激に変化する点のことです。

具体例:

  • 月次の新規会員登録数: 1月:100人 2月:105人 3月:98人 4月:102人 5月:210人 (← 変化点) 6月:205人 7月:215人

この例では、4月まではおおよそ100人前後で推移していた新規会員登録数が、5月から急に200人以上に増加しています。この5月のデータが「変化点」となります。

5.異常検知の基本的な手順

異常検知は主に以下の2つのステップで行います。

STEP1: 時系列モデルの構築

a) ARモデル(自己回帰モデル)の使用: ARモデルは、過去の値を使って未来の値を予測するモデルです。「自己回帰」という言葉は難しく聞こえますが、要するに「自分の過去のデータを使って、未来を予測する」ということです。

具体例: 日次売上データを使ったARモデルの例

  • 今日の売上 = 0.7 × 昨日の売上 + 0.2 × 一昨日の売上 + 0.1 × 3日前の売上 + ランダムな変動

このモデルでは、今日の売上を予測するのに、過去3日間の売上を使っています。それぞれの日の売上に重み(0.7, 0.2, 0.1)をつけて計算しています。

b) 階差処理: データの全体的な傾向(上昇や下降)を取り除く処理です。これにより、短期的な変動に焦点を当てることができます。

具体例: 月次売上データの階差処理 元データ: 1月:100万円 2月:110万円 3月:115万円 4月:125万円

1階差を取ると: 1月から2月:+10万円 2月から3月:+5万円 3月から4月:+10万円

このように、売上の絶対額ではなく、前月からの変化額に注目することで、全体的な上昇傾向を取り除いています。

c) 外れ値処理: モデル構築の段階で、極端に大きな値や小さな値を一時的に取り除いたり、より一般的な値に置き換えたりします。これにより、異常値がモデルに与える影響を軽減できます。

具体例: 日次売上データの外れ値処理 元データ: 月曜日:50万円 火曜日:48万円 水曜日:200万円(外れ値) 木曜日:52万円 金曜日:51万円

処理後: 月曜日:50万円 火曜日:48万円 水曜日:50万円(周辺の値の平均で置換) 木曜日:52万円 金曜日:51万円

この例では、水曜日の異常に高い売上を周辺の値の平均で置き換えています。これにより、この外れ値がモデルの学習に与える影響を抑えています。

STEP2: 外れ値スコアの算出

a) 予測値の計算: 構築したARモデルを使って、各時点の値を予測します。

b) 残差の計算: 実際の値と予測値の差(残差)を計算します。 残差 = 実際の値 - 予測値

c) 外れ値スコアの計算: 残差がどれくらい「異常」かを数値化します。一般的には、正規分布(ベルカーブ)を仮定して計算します。

具体例: 日次売上データの外れ値スコア計算

実際の売上:80万円 モデルによる予測売上:50万円 残差:80万円 - 50万円 = 30万円

過去のデータから計算した残差の平均:0万円 残差の標準偏差:10万円

外れ値スコア = (残差 - 残差の平均) / 残差の標準偏差 = (30万円 - 0万円) / 10万円 = 3

この例では、外れ値スコアが3となっています。一般的に、このスコアが2や3を超えると「異常」と判断されることが多いです。

6.実際の分析手順

実際の分析では、R言語というプログラミング言語と、RStudioというソフトウェアを使用します。以下に基本的な手順を示します。

6-1. データの読み込み

エクセルやCSVファイルなどに保存されたデータをRに取り込みます。

例:

data <- read.csv("sales_data.csv")

6-2.データの前処理

必要に応じて、データの形を整えたり、欠損値を処理したりします。

例:

# 日付列を日付型に変換
data$date <- as.Date(data$date)

# 欠損値を前後の平均で埋める
data$sales <- na.approx(data$sales)

6-3.モデルの構築

ARモデルを作成します。

例:

library(forecast)
model <- auto.arima(data$sales)

6-4.スコアの算出

各データポイントがどれくらい「異常」かを計算します。

例:

# 予測値の計算
predictions <- forecast(model, h = length(data$sales))

# 残差の計算
residuals <- data$sales - predictions$mean

# 外れ値スコアの計算
outlier_scores <- abs(scale(residuals))

6-5.結果の可視化

グラフを作って、異常値を視覚的に確認します。

例:

library(ggplot2)
ggplot(data, aes(x = date, y = sales)) +
  geom_line() +
  geom_point(aes(color = outlier_scores > 2), size = 3) +
  scale_color_manual(values = c("blue", "red")) +
  theme_minimal() +
  labs(title = "Sales Data with Outliers", x = "Date", y = "Sales")

このグラフでは、通常のデータ点は青、異常と判断されたデータ点は赤で表示されます。

7.関数化のメリット

分析の各ステップを関数化することで、以下のようなメリットがあります。

  • コードの再利用性が高まる:同じ処理を何度も書く必要がなくなります。

  • エラーの減少:一度正しく動作を確認した関数を使い回すことで、ミスを減らせます。

  • 可読性の向上:複雑な処理をシンプルな関数呼び出しで表現できます。

  • 効率的な分析:異なるデータセットに対しても、同じ関数を使って簡単に分析できます。

例:異常検知の一連の流れを関数化

detect_anomalies <- function(data, date_col, value_col, threshold = 2) {
  # データの前処理
  data[[date_col]] <- as.Date(data[[date_col]])
  
  # モデルの構築
  model <- auto.arima(data[[value_col]])
  
  # 予測と残差の計算
  predictions <- forecast(model, h = length(data[[value_col]]))
  residuals <- data[[value_col]] - predictions$mean
  
  # 外れ値スコアの計算
  outlier_scores <- abs(scale(residuals))
  
  # 結果の作成
  result <- data.frame(
    date = data[[date_col]],
    value = data[[value_col]],
    outlier_score = outlier_scores,
    is_anomaly = outlier_scores > threshold
  )
  
  return(result)
}

# 関数の使用例
result <- detect_anomalies(sales_data, "date", "sales", threshold = 2.5)

この関数を使えば、異なる日次データ(売上、アクセス数、顧客数など)に対しても、同じように簡単に異常検知を行うことができます。

8.統計的な考え方

異常検知では、以下のような統計的な概念が重要になります。

8-1.正規分布(ガウス分布)

多くの自然現象やビジネスデータが従う、釣鐘型の分布です。中心(平均)に近いほどデータが多く、両端に行くほど少なくなります。

具体例: ある店舗の日次売上データが正規分布に従うと仮定した場合:

  • 平均売上:100万円

  • 標準偏差:20万円

このとき:

  • 約68%のデータが80万円~120万円の範囲に入る

  • 約95%のデータが60万円~140万円の範囲に入る

  • 約99.7%のデータが40万円~160万円の範囲に入る

つまり、200万円の売上があった日は、非常に珍しい(異常な)出来事だと判断できます。

8-2.平均値と標準偏差

  • 平均値:データの中心的な値

  • 標準偏差:データのばらつきを表す指標

これらの値を使って、データがどれくらい「普通」から外れているかを判断します。

具体例: 月次の新規顧客数データ: 1月:100人、2月:95人、3月:105人、4月:98人、5月:102人、6月:200人

平均値:116.7人 標準偏差:約40.8人

6月の値(200人)は平均から(200 - 116.7)÷ 40.8 ≈ 2.04 標準偏差分離れています。 多くの場合、2標準偏差以上離れた値を「異常」と判断するので、6月の値は異常値と考えられます。

8-3.閾値(しきいち)

異常かどうかを判断する基準となる値です。設定方法には主に2つあります。

  1. 人為的設定: 経験や業務知識に基づいて設定します。 例:「売上が前日の2倍以上、または半分以下なら異常」と決める

  2. 統計的設定: データの分布に基づいて自動的に設定します。 例:「平均から3標準偏差以上離れていたら異常」と決める

どちらの方法を選ぶかは、ビジネスの性質やデータの特性によって変わってきます。

9.異常検知の注意点

異常検知を行う際は、以下の点に注意が必要です。

9-1.誤検知(フォールスポジティブ)

実際は正常なデータを異常と判断してしまうこと。

例:クリスマスシーズンの売上急増を「異常」と判断してしまう。

対策:季節性やイベントの影響を考慮したモデルを使用する。

9-2.見逃し(フォールスネガティブ)

実際は異常なデータを正常と判断してしまうこと。

例:システム障害による売上減少を通常の変動と見なしてしまう。

対策:複数の異常検知手法を組み合わせる、閾値を適切に調整する。

9-3.データの質

ノイズの多いデータや欠損値が多いデータでは、適切な異常検知が難しくなります。

対策:データのクリーニングや前処理を丁寧に行う。

9-4.モデルの選択

データの特性に合わないモデルを選択すると、適切な異常検知ができません。

対策:複数のモデルを試し、最適なものを選択する。データの特性をよく理解する。

10.実践的なシナリオ

ここでは、実際のビジネスシーンで異常検知がどのように役立つかを具体的に見ていきましょう。

シナリオ1:ECサイトの異常トラフィック検知

状況: あなたは大手ECサイトの運営責任者です。サイトの1時間ごとのアクセス数を監視しています。

データ: 過去30日間の1時間ごとのアクセス数データがあります。 通常、平日の昼間は1時間あたり約5,000アクセス、夜間は約2,000アクセスです。 週末は昼夜問わず約3,000アクセスです。

異常検知の実施:

  1. データの前処理:

    • 曜日や時間帯の情報を追加

    • 過去のホリデーやセールイベントの情報を追加

  2. モデルの構築: ARIMAモデルを使用し、曜日や時間帯の効果も考慮します。

  3. 異常スコアの計算: 実際のアクセス数と予測値の差から異常スコアを計算します。

  4. 閾値の設定: 通常の変動を考慮し、予測値から3標準偏差以上離れた値を「異常」と設定します。

結果: ある平日の深夜2時に、突然20,000アクセスという異常な値が検出されました。

対応:

  1. すぐにシステム管理者に連絡し、サーバーの負荷状況を確認します。

  2. セキュリティチームと協力し、大規模なサイバー攻撃(DDoS攻撃など)の可能性を調査します。

  3. マーケティングチームに確認し、予定外のプロモーションが行われていないかチェックします。

この早期発見により、サーバーのダウンを防ぎ、潜在的な攻撃を迅速に対処することができました。

シナリオ2:小売店の売上異常検知

状況: あなたは全国チェーンの小売店の地域マネージャーです。各店舗の日次売上を監視しています。

データ: 100店舗の過去1年間の日次売上データがあります。 各店舗の平均日販は50万円で、標準偏差は10万円程度です。

異常検知の実施:

  1. データの前処理:

    • 各店舗ごとに売上データを正規化

    • 曜日や季節の効果を除去

  2. モデルの構築: 各店舗ごとにARIMAモデルを構築します。

  3. 異常スコアの計算: 実際の売上と予測値の差から異常スコアを計算します。

  4. 閾値の設定: 予測値から2.5標準偏差以上離れた値を「異常」と設定します。

結果: ある日、1つの店舗で売上が急激に落ち込み、日販が10万円になりました。

対応:

  1. すぐに該当店舗の店長に連絡し、状況を確認します。

  2. 近隣で大きなイベントや工事などがないか調査します。

  3. POS システムや在庫管理システムに問題がないか確認します。

調査の結果、その店舗の近くで大規模な道路工事が始まり、来客数が激減していたことが判明しました。この早期発見により、以下の対策を迅速に実施できました:

  • 工事期間中の特別セールの実施

  • SNSを活用した代替ルートの案内

  • 近隣住民向けの宅配サービスの強化

これらの対策により、売上の落ち込みを最小限に抑えることができました。

11.まとめ

異常検知は、ビジネスデータの中から「普通ではない」パターンを見つけ出す重要な技術です。適切に実施することで、問題の早期発見やビジネスチャンスの発見につながります。

ポイント:

  1. 時系列データの特性を理解する

  2. 適切なモデル(例:ARIMAモデル)を選択し、構築する

  3. データの前処理(階差処理、外れ値処理など)を適切に行う

  4. 統計的な考え方(正規分布、平均、標準偏差)を理解し、活用する

  5. 閾値の設定を慎重に行い、誤検知と見逃しのバランスを取る

  6. 検出された異常に対して、迅速かつ適切な対応を取る

異常検知は単なる数字の分析ではありません。ビジネスの文脈を理解し、データの特性を把握した上で適用することが重要です。また、異常検知の結果を鵜呑みにするのではなく、常に批判的思考を持ち、他の情報源とも照らし合わせながら総合的に判断することが求められます。

この技術を効果的に活用することで、データドリブンな意思決定が可能となり、ビジネスの競争力向上につながります。異常検知は、現代のビジネスにおいて不可欠なツールの一つと言えるでしょう。

いいなと思ったら応援しよう!