Amazon Fraud Detectorが一般公開されました

記事タイトルとURLをコピーする

2020年7月28日にAmazon Fraud Detectorが一般公開されました。
機械学習の知識が無くても、簡単に不正検知をできるサービスです。

Detect fraud faster using machine learning with Amazon Fraud Detector – now generally available

Amazon Fraud Detectorとは

Fraud(frɔ́ːd)とは、詐欺という意味です。
Amazon Fraud Detectorは、リアルタイムで不正アクティビティを識別してくれるAWSのサービスです。

以下、公式の説明文となります。

Amazon Fraud Detector は、オンライン支払いの不正や偽のアカウントの作成など、潜在的に不正のオンラインアクティビティを簡単に識別できるようにする完全マネージドサービスです。

世界中で毎年、オンラインの不正により数百億ドルが失われています。オンラインでビジネスを行う企業は、偽のアカウントの作成や盗まれたクレジットカードでの支払いなど、さまざまな戦術を悪用する悪意のある攻撃者からの攻撃を受けやすい傾向があります。企業は一般的に、不正検出アプリケーションを使用して詐欺師を特定し、費用のかかるビジネスの中断を引き起こす前にそれらを防止します。ただし、これらのアプリケーションは、多くの場合、変化する詐欺師の行動に対応していないビジネスルールに依存しています。より最近の不正検出アプリケーションでは、機械学習を使用しようとしてきました。しかし、一般的なデータセットとビジネスに特有ではない不正行為に基づいた 1 つのものがすべてに当てはまるアプローチを使用することがよくあり、これにより、正確さに制限が加えられます。

Fraud Detector は、データ、機械学習 (ML)、および Amazon の 20 年以上の不正検出の専門知識を使用してこれらの課題を克服し、不正行為の可能性があるオンラインアクティビティを自動的に識別して、より多くの不正行為を迅速に検出できるようにします。Fraud Detector がすべての ML の手間のかかる作業を処理するため、数回クリックするだけで、ML の経験がまったくなくても、不正検出モデルを作成できます。

Amazon Fraud Detector オンライン不正をより素早く検知

利用可能リージョン

現時点では、下記リージョンでのみ利用可能です。

  • 米国東部(バージニア北部)
  • 米国東部(オハイオ)
  • 米国西部(オレゴン)
  • アジアパシフィック(シンガポール)
  • アジアパシフィック(シドニー)
  • 欧州(アイルランド)

利用イメージ

f:id:swx-watanabe:20200803092417p:plain
Amazon Fraud Detectorの利用イメージ

  1. アプリケーションでアカウント作成等のイベント発生
  2. アプリケーションはAmazon Fraud Detectorにイベントデータ(IPアドレスやメールアドレス等)を送信
  3. Amazon Fraud Detectorは、そのイベントが詐欺(Fraud)かどうかを判別し、結果を返す

ワークフロー

以下の流れで設定し、利用します。

  1. 不正を評価するイベントを定義します。
  2. 履歴イベントデータ(トレーニングデータ)を収集します。
  3. モデルタイプを使用してモデルバージョン(トレーニング済みモデル)を作成します。
  4. モデルバージョンと決定ルールを含むDetectorバージョンを作成します。
  5. イベントをAmazon Fraud Detectorに送信し、不正の予測を取得します。

How Amazon Fraud Detector works - Amazon Fraud Detector

なお、Detectorインスタンスを1つ作りましょうというほど簡単ではなく、関連パラメータが色々とでてきます。
全体像は以下のような感じです。

f:id:swx-watanabe:20200804104642p:plain
Amazon Fraud Detectorの構成要素

チュートリアルを試してみた

今回は、 Get started (console) - Amazon Fraud Detector を試してみました。
チュートリアルは2つのパートに分かれています。

  • パートA:Amazon Fraud Detectorモデルを構築
    • 登録イベントを作成します。
    • Amazon Fraud DetectorのOnline Fraud Insightsモデルタイプとトレーニングデータを関連付け、モデルをトレーニングします。
    • モデルをトレーニングしてデプロイします。
  • パートB:リアルタイム詐欺の予測を生成
    • 登録イベントを評価するための検出器を作成します。
    • デプロイされたモデルを追加し、モデル出力を解釈するルールを記述し、不正予測を生成します。

パートA

サンプルのトレーニングデータを取得してアップロードする

Training_Data.zipをダウンロードします。
2つのCSVファイルが含まれています。
どちらのファイルをトレーニングデータにしてもいいのですが、ファイルが大きいとトレーニングに時間がかかるため、今回はminimumのファイルを使用します。

(1) registration_data_20K_minimum.csv (1.3MB、以下は抜粋)

ip_address email_address EVENT_TIMESTAMP EVENT_LABEL
46.41.252.160 fake_acostasusan@example.org 10/8/2019 20:44 legit
36.19.221.248 fake_madisonshaffer@example.com 12/17/2019 3:10 fraud

(2) registration_data_20K_full.csv (4.4MB、以下は抜粋)

ip_address email_address billing_state user_agent billing_postal phone_number EVENT_TIMESTAMP billing_address EVENT_LABEL
59.157.144.1 fake_timothysmith@example.com AZ "Mozilla/5.0 (iPod; U; CPU iPhone OS 3_0 like Mac OS X; sid-ET) AppleWebKit/534.17.7 (KHTML, like Gecko) Version/4.0.5 Mobile/8B118 Safari/6534.17.7" 32931 (555)596 - 5579 2020-06-02 00:07:19 65898 Amy Estate Fake St. fraud
107.77.37.4 fake_lloydsusan@example.net AL "Mozilla/5.0 (Linux; Android 5.0.2) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/37.0.872.0 Safari/534.1" 33596 (555)463 - 8377 2019-12-07 20:13:12 223 White Ridges Fake St. legit

EVENT_LABELの値は、fraud(詐欺)またはlegit(合法)のどちらかになっています。
「IPアドレス46.41.252.160・メールアドレスfake_acostasusan@example.orgは合法」「IPアドレス36.19.221.248・メールアドレスfake_madisonshaffer@example.comは不正」といった感じのデータになっていて、これを元に機械学習し、新たなアクセスがきた時に合法か不正かの予測をできるようにします。

トレーニングデータはS3バケット経由で読み込ませる必要があります。
ダウンロードしたCSVファイルをAmazon Fraud Detectorを動かすリージョンのS3バケットにアップロードします。

f:id:swx-watanabe:20200804010613p:plain

ステップ1:不正を評価するイベントタイプを定義する

Fraud Detector > Create event type

f:id:swx-watanabe:20200804020030p:plain
イベントタイプの定義

設定項目 今回の設定値 備考
Name sample_registration イベントタイプの名前
Entity sample_customer エンティティタイプの名前(ここで作成)
Chose how to define this event's valiables Select variables from a trainning dataset
IAM role AmazonFraudDetector-DataAccessRole-xxxx Fraud Detectorが使うIAMロール(ここで作成、作成時にトレーニングデータのS3バケットを指定)
Data location s3://xxxxx/registration_data_20K_minimum.csv トレーニングデータの場所を指定する
Variable
(イベントデータの項目 / 変数タイプ)
・ip_address / IP Address
・email_address / Email Address
イベントデータの変数タイプを指定。
変数タイプの種類はVariable types
Labels ・fraud
・legit

f:id:swx-watanabe:20200804021846p:plain
モデルのビルド

ステップ2:モデルの詳細を定義する

f:id:swx-watanabe:20200804023030p:plain
モデルの定義

ステップ3:トレーニングの構成とモデルのトレーニング

f:id:swx-watanabe:20200804023320p:plain
トレーニングの設定

ステップ4:トレーニング済みモデルのパフォーマンスを確認する

f:id:swx-watanabe:20200804023619p:plain
モデルのレビュー画面

ステップ5:モデルをデプロイする

ステータスが、Training...となります。

f:id:swx-watanabe:20200804024029p:plain
モデルのトレーニング中

しばらくすると、Ready to deployに変わります。
バージョンのところをクリックします。

f:id:swx-watanabe:20200804064005p:plain
モデルのデプロイ準備完了

Deploy model versionを選択します。

f:id:swx-watanabe:20200804064411p:plain
モデルバージョンのデプロイ

注意書きが表示されるので、Deploy versionを選択します。

f:id:swx-watanabe:20200804064443p:plain
デプロイ確認画面

ステータスがDeploying...となります。

f:id:swx-watanabe:20200804064750p:plain
デプロイ中

しばらくすると、Activeになります。

f:id:swx-watanabe:20200804070208p:plain
モデルバージョンのActive

これでモデルのデプロイまで完了しました。

パートB

ステップ1:Detectorの作成

作成したモデルを利用するためのDetector(検出器)を作成します。

Fraud Detector > Create detector

f:id:swx-watanabe:20200804070524p:plain
Detectorの作成

Detectorに適当な名前をつけ、パートAで作成したイベントタイプを選択します。

f:id:swx-watanabe:20200804070737p:plain
Detectorの名前とイベントタイプ

ステップ2:モデルをDetectorに追加

f:id:swx-watanabe:20200804071452p:plain
Add model

f:id:swx-watanabe:20200804071532p:plain
作成済みのモデルとバージョンを選択

f:id:swx-watanabe:20200804071940p:plain
モデルの追加完了

ステップ3:ルールをDetectorに追加

Detectorに追加したモデルを使うと、各イベントに対してスコアが算出されます。
数値が高いほど、リスクがあるとみなされます。

以下の3つのルールを追加します。

ルール名 expression outcome 意味
high_fraud_risk $sample_fraud_detection_model_insightscore > 900 verify_customer スコアが900を超える場合は、リスク高とみなし、verify_customerを出力
medium_fraud_risk $sample_fraud_detection_model_insightscore <= 900 and $sample_fraud_detection_model_insightscore > 700 review スコアが700から900の場合は、リスク中とみなし、reviewを出力
low_fraud_risk $sample_fraud_detection_model_insightscore <= 700 approve スコアが700以下は、リスク低とみなし、approveを出力

1つ目のルールを追加

f:id:swx-watanabe:20200804074321p:plain
ルールの追加

更に2つのルールを追加

f:id:swx-watanabe:20200804074346p:plain
更にルールの追加

ステップ4:ルールの実行モードと順番

今回はどれか1つのルールにマッチするかどうかをチェックするので、First matchedを選択します。

f:id:swx-watanabe:20200804080011p:plain
ルールの実行モードと順番

ステップ5:確認したらDetectorバージョンを作成

f:id:swx-watanabe:20200804080519p:plain
確認画面

ステップ6:テストと予測

Detectorバージョン1が作成されたので、 Run test 画面でテストします。

日付・エンティティIDを適当に入力し、評価したいメールアドレス・IPアドレスのペアを入力し、Run testを実行。

f:id:swx-watanabe:20200804082241p:plain
テスト実行

スコアは956なのでリスク高いです。verify_customerの範囲でした。

f:id:swx-watanabe:20200804082402p:plain
テスト結果1

試しにトレーニングデータでlegitとなっているものでテストしてみると、当然ながらリスク低と予測されました。

f:id:swx-watanabe:20200804082932p:plain
テスト結果2

Pythonでテストをしてみる

get_event_predictionを使うと、予測結果を得ることができます。

FraudDetector — Boto3 Docs 1.14.34 documentation

import boto3

AWS_REGION = "ap-southeast-1"
fraudDetector = boto3.client('frauddetector',region_name=AWS_REGION)

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

print(response)
{
    "modelScores": [
        {
            "modelVersion": {
                "modelId": "sample_fraud_detection_model",
                "modelType": "ONLINE_FRAUD_INSIGHTS",
                "modelVersionNumber": "1.0"
            },
            "scores": {
                "sample_fraud_detection_model_insightscore": 826
            }
        }
    ],
    "ruleResults": [
        {
            "ruleId": "medium_fraud_risk",
            "outcomes": [
                "review"
            ]
        }
    ],
    "ResponseMetadata": {
        "RequestId": "4c315529-7cfe-4c57-ac69-03bac4d95be0",
        "HTTPStatusCode": 200,
        "HTTPHeaders": {
            "content-type": "application/x-amz-json-1.1",
            "date": "Tue, 04 Aug 2020 00:13:59 GMT",
            "x-amzn-requestid": "4c315529-7cfe-4c57-ac69-03bac4d95be0",
            "content-length": "270",
            "connection": "keep-alive"
        },
        "RetryAttempts": 0
    }
}

料金

料金 - Amazon Fraud Detector | AWS

料金の発生するポイント

  • モデルトレーニング
    • データを使用してカスタムモデルをトレーニングするのに費やされるトレーニング時間
  • モデルホスティング
    • デプロイされたモデルのオンデマンドホスティングでは、リアルタイムの予測に使用できるように、1 時間ごとにコンピューティング能力に料金を請求されます。
  • 不正予測
    • Amazon Fraud Detector によるリアルタイムの不正予測ごとに請求されます。請求される料金は、機械学習を使用しているか、ルールのみを使用して不正を評価しているかによって異なります。不正予測は月ごとの使用量に対して集約され、料金階層に従って請求されます。

無料トライアル

サインアップ後最初の 2 ヶ月間は、下記の範囲で無料です。

  • モデルトレーニング
    • 1 ヶ月あたりコンピューター最大 50 時間のモデルトレーニング。
  • モデルホスティング
    • 1 ヶ月あたりコンピューター最大 500 時間のモデルホスティング。
  • 不正予測
    • 1 か月あたり最大 30,000 件のリアルタイムでのオンライン不正予測の分析情報と、最大 30,000 件のリアルタイムでのルールベースの不正予測。

感想

AWSで機械学習を利用したセキュリティといえばAmazon GuardDutyがあります。Amazon GuardDutyはAWSアカウントやネットワークといった観点で脅威検知してくれます。 基本的には有効にするだけでよく、ユーザーごとのカスタマイズは不要で使い始められます。

Amazon Fraud Detectorは、ユーザーのアプリケーションの観点で不正検知してくれます。 確かにトレーニングデータを用意したり、少しコードを書いたりとする必要があるので少し負担ですが、機械学習に関しては「雰囲気知ってる」くらいな知識で使い始めることができるので非常にいいと思います。

どんな用途で使えるでしょうか。 例えば、普段は日本にいるユーザーが外国からアクセスした時に確認メールを出すというのがありそうです。 リスクの高さによっては、確認メールではなく、ログインさせないという仕様もありえると思います。

渡辺 信秀 (記事一覧)