Amazon Fraud Detectorが本日GAになりました!

2020.07.29

昨年(2019年)のre:Inventでプレビュー版として発表されたAmazon Fraud Detectorが本日から晴れて一般利用できるようになりました!!

概要は上記のブログに書かれていますが簡単に説明すると、オンラインのカード不正利用や偽アカウントなどの詐欺行為を機械学習モデルを使って検出できるマネージドサービスです。

早速試してみたいと思います!

試してみた

なお、東京リージョンではまだ使えないので今日はバージニアリージョンで試します。

  1. 不正を評価するイベントを定義
  2. 履歴イベントデータセットをAmazon S3にアップロードし、不正検出モデルタイプを選択
  3. 履歴データを使用してカスタムモデルを構築する。 アルゴリズムを選択し、モデルをトレーニングして調整、モデルをホストする
  4. モデルの予測に基づいて、情報の受け入れ、確認、または収集するためのルールを作成
  5. Amazon Fraud Detector APIを呼び出して、リアルタイムの不正予測を受信し、構成された検出ルールに基づいてアクションを実行

Amazon Fraud Detectorでは、不正検出モデルをアップロードして検出のルールを作成することで利用することができます。
今回はコンソールからモデルの作成までをやってみたいと思います。

トレーニングデータを用意

公式から提供されているサンプルデータを使います。

こちらTraining_Data.zip をダウンロードしてください。
サンプルにはminimumとfullの2つのcsvファイルがありますが今回はminimumの方を使います。

モデルを作成する前にS3にアップロードしてある必要があるので先に用意しておきます。
ここでは以下の場所にアップロードしました。

パス: s3://sample-fraud-detector-model/training/registration_data_20K_minimum.csv

ステップ1: イベントを作成

  • イベント名: sample_registration
  • エンティティ名: sample_customer

イベント名を入力してEntitiyプロパティでCreate new entityを選択し、エンティティ名を入力します。

Event variables

Select variables from a training datasetを選択してください。

ここでIAMロールを作成し、先程のS3バケットへのアクセス権限を付与します。
先程のバケット名のみを入力してください。

次にData locationに先程アップロードしたトレーニングデータのパスを入力してください。 アップロードすると、変数のマッピングができるようになるのでip_addressとemail_addressをそれぞれマッピングします。

Labels

次にLabelを追加します。

  • fraud
  • legit

作成したイベントはこちらです。

ステップ2: モデルを作成

Fraud DetectorではFraud Detector上で作成したモデルか、SageMakerのモデルのどちらかを使うことができます。
ここではFraud Detector上で作成していきます。

左のペインからModelsに移動し、Add your first modelを選択します。

  • モデル名: sample_fraud_detection_model
  • イベントタイプ: sample_registration(上で作成したイベント)

Create a train model でモデルの作成を開始します。
この作業には40分ほどかかります。

ステータスがTrainingからReady to deployに変わるとチャートが表示されました。

モデルをデプロイ

左上のActionsからモデルをデプロイします。

デプロイにも少し時間がかかります。
デプロイが終わるとステータスがActiveに変わります。

ステップ4: 検出ロジックを作成

モデルがデプロイできたら検出ロジックを設定するためDetectorを作成します。 実際に検出するためのデータの閾値などを設定していきます。

左ペインからDetectorsを開きCreate Detectorを選択します。

Detector名: sample_detector

上記で作成したイベントとデプロイしたモデルを選択します。

ルールの定義

レベル毎に3つのルールを定義します。

  • high_fraud_risk
  • medium_fraud_risk
  • low_fraud_risk

ルール名、定義(Expression)に$sample_fraud_detection_model_insightscore > 900を入力したら、出力を決めます。
OutcomesでCreate a new outcomeを選択し、verify_customerを作成します。 定義の変数部分は${モデル名_insightscore}としてください。

項目を追加したら1つ目のルールをAdd ruleで追加します。

左下のAdd another ruleCreate ruleから次のルールを設定していきます。

それぞれのルール定義は以下になります。

high_fraud_risk
$sample_fraud_detection_model_insightscore > 900
medium_fraud_risk
$sample_fraud_detection_model_insightscore <= 900 and $sample_fraud_detection_model_insightscore > 700
low_fraud_risk
$sample_fraud_detection_model_insightscore <= 700

Outcomesはそれぞれ、verify_customer review approveとしています。

次の画面でルールの実行を設定できます。

デフォルトのFIRST_MATCHEDの場合はルールのOrder順に評価され最初に一致したルールの結果を返します。
ALL_MATCHEDの場合は一致したすべての結果を返します。

バージョンのPublish

Detectorを作成したままだと、ステータスがDraftとなっています。 左上のActionsからPublishしてください。

不正行為を評価

ここまできたらアプリケーションから不正行為を評価することができます。

以下はboto3でGetEventPrediction APIを使って不正行為を評価するサンプルとなります。

import boto3
fraudDetector = boto3.client('frauddetector')

fraudDetector.get_event_prediction(
detectorId = 'sample_detector',
eventId = '802454d3-f7d8-482d-97e8-c4b6db9a0428',
eventTypeName = 'sample_registration',
eventTimestamp = '2020-07-13T23:18:21Z',
entities = [{'entityType':'sample_customer', 'entityId':'12345'}],
eventVariables = {
    'email_address' : 'johndoe@exampledomain.com',
    'ip_address' : '1.2.3.4'
}
)

コンソールでのテスト

また、Detectorのバージョン内の概要タブからテストを実行することもできます。

不正行為が検出されなかった場合

  • ip_address: 152.58.247.12
  • email_address: fake_christopheryoung@example.com

結果はlow_fraud_riskでapproveと表示されています。

不正行為が検出された場合

  • ip_address:205.251.233.178
  • email_address:johndoe@exampledomain.com

想定どおり、high_fraud_riskで設定したverify_customerが出力されました。

まとめ

以上、GetEventPrediction APIを使って不正行為を検出する公式デモを試してみました。
GetEventPredictionをアプリケーションのサインアップ処理や決済処理に挟むことで不正行為かどうかの判定を手伝うことができます。

一点注意点として、Amazon Fraud Detectorで不正行為を検出するには過去のイベントデータが必須です。
サンプルデータでは2万件のイベントデータが含まれていて、最小は1万件でデータが多ければ多いほど精度が上がります。

イベントデータさえあればコンソールから簡単にモデルを作成して不正行為の検出をすることができました。

今後もアップデートを追っていきたいと思います!