はじめに
日々の業務データの中には、通常と異なる「異常値」や「不自然なパターン」が隠れていることがあります。
売上データの急増・急減、サーバーログの急激なエラー数増加、センサー値の異常などを見逃すと、大きなトラブルや損失につながることも少なくありません。
本記事では、Python を使って業務データを自動で異常検知し、簡易レポートを作成する方法を、初心者でも試せるコード例付きで解説します。
異常検知とは?
異常検知(Anomaly Detection)とは、通常のデータパターンから外れた動きを自動で見つける技術です。
主な用途は以下の通りです:
- 売上データの不自然な変動
- IoT センサーの異常挙動
- ネットワークログの不正アクセス検知
- 会計データの不正利用監査
今回のゴール
- Python × scikit-learn を用いた簡易異常検知の実装
- 可視化とレポート生成(matplotlib, pandas_profiling など)
- 業務でそのまま応用できるテンプレートコード提供
使用するライブラリ
pip install pandas matplotlib scikit-learn seaborn openpyxl
※必要に応じて pandas-profiling
や ydata-profiling
を入れると自動レポート化も可能です。
サンプルデータの準備
ここでは売上データを模したサンプルを作成します。
import pandas as pd
import numpy as np
# 日付データ作成
dates = pd.date_range("2025-01-01", periods=100)
sales = np.random.normal(100, 10, size=100)
# 途中に異常値を混ぜる
sales[20] = 300 # 急増
sales[55] = 20 # 急減
df = pd.DataFrame({"date": dates, "sales": sales})
print(df.head())
異常検知の実装(IsolationForest)
scikit-learn
の IsolationForest を使うと、外れ値を効率的に検知できます。
from sklearn.ensemble import IsolationForest
# モデル作成
model = IsolationForest(contamination=0.05, random_state=42)
df["anomaly"] = model.fit_predict(df[["sales"]])
# -1 が異常値、1 が正常値
df["anomaly"] = df["anomaly"].map({1: "normal", -1: "anomaly"})
print(df[df["anomaly"] == "anomaly"])
可視化
異常値をグラフにマークして確認します。
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(df["date"], df["sales"], label="Sales")
plt.scatter(
df[df["anomaly"]=="anomaly"]["date"],
df[df["anomaly"]=="anomaly"]["sales"],
color="red", label="Anomaly"
)
plt.legend()
plt.title("Sales Data with Anomaly Detection")
plt.show()
これで、売上データに含まれる不自然な動きを一目で確認できます。
簡易レポート出力
Excel 形式でレポートを保存して、業務共有できるようにします。
report = df[df["anomaly"]=="anomaly"]
report.to_excel("anomaly_report.xlsx", index=False)
print("異常値レポートを anomaly_report.xlsx に出力しました。")
応用ポイント
- 売上や在庫データに応用 → 急激な変化を監視
- サーバーログ解析 → エラー急増を自動通知
- センサーデータ → 機械故障の早期発見
さらにメール送信や Slack 通知と組み合わせると、
「異常を見つけたら自動でチームに共有する仕組み」が実現できます。
まとめ
本記事では、
- Python での簡易異常検知(IsolationForest 使用)
- グラフによる可視化
- Excel 形式でのレポート出力
を解説しました。
難しい AI アルゴリズムを知らなくても、「いつもと違う動き」を自動で見つけて報告する仕組みは業務で即戦力になります。
まずはサンプルコードを動かし、自社データに適用してみましょう。