概要
- SQL を活用した取引データの 不正検知 手法の解説
- 機械学習やグラフDBではなく、 シンプルなパターン検出 に重点
- 金融・行政・Eコマースなど幅広い分野で 応用可能
- 6つの代表的な不正パターン とそのSQL例を紹介
- 各パターンの 実務的注意点や運用のコツ も説明
取引データの不正検知:実践的SQLパターン集
- 不正検知 の現場では、SQLによるパターン検出が中心
- 主な対象: 政府系給付プログラム、クレジットカード、医療請求、Eコマース、POS
- 取引テーブル があれば、どの業種にも応用可能
- 6つの基本パターン を順に構築することで、精度と効率を両立
1. ベロシティ(短時間多発取引)
- 短時間に多数の取引 が発生するカードを検出
- 例:1時間に10件以上の取引
- 時間ウィンドウやしきい値は 用途に応じて調整
- スライディングウィンドウ を使うことで、柔軟に検出可能
- ホワイトリスト 運用で誤検知を削減
2. 不可能な移動(地理的矛盾)
- 物理的に不可能な距離移動 を検出
- 例:7分後に遠隔地での利用記録
- haversine関数 で距離計算、速度しきい値(例:600mph)で判定
- 都市間・州内・国境越え など様々なパターンに拡張可能
3. 金額異常
- 特定の金額 や 閾値直前の金額 に着目
- 例:$1.00, $5.00, $99.99, $499.99
- カードテスト や ATM制限回避 の兆候
- 給付系ではこのパターンは効果が薄い場合も
4. 怪しい加盟店
- 短期間に多数の異なるカード が利用された加盟店を検出
- 静的なしきい値ではなく、 自己ベースライン比較 で異常値を抽出
- 週単位の移動平均 で曜日・時間帯の季節性にも対応
- スパイク比 で異常度を数値化
5. 時間外利用
- カードごとの通常利用時間 を分析し、外れた時間の取引を検出
- 習慣的な時間帯 を2回以上の利用で定義
- 新規アカウントには適用不可、 履歴が必要
6. ウィンドウ関数による複合パターン
- LAG, ROW_NUMBER, SUM などのウィンドウ関数で特徴量を事前計算
- 複数の不正パターンを SQLフィルタだけで組み合わせ可能
- 例:「60秒以内に5件以上、すべて異なる加盟店で小額決済」
- 分析ループの高速化、チーム全体での再利用性向上
運用上の注意点
- NULL値の扱い :システムごとのダミー値に注意
- 誤検知(False Positive) :必ず人によるレビューと閾値調整
- プライバシー :PIIデータ利用時は必ず規定遵守
- コスト管理 :大規模ウィンドウ関数は事前に期間フィルタで絞り込み
今後書きたいテーマ
- LAG, ROW_NUMBER以外のウィンドウ関数活用法
- 不正リング検知 (ソーシャルグラフ的アプローチ)
- 不正検知ダッシュボードの設計指針