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にイベントデータ(IPアドレスやメールアドレス等)を送信
- Amazon Fraud Detectorは、そのイベントが詐欺(Fraud)かどうかを判別し、結果を返す
ワークフロー
以下の流れで設定し、利用します。
- 不正を評価するイベントを定義します。
- 履歴イベントデータ(トレーニングデータ)を収集します。
- モデルタイプを使用してモデルバージョン(トレーニング済みモデル)を作成します。
- モデルバージョンと決定ルールを含むDetectorバージョンを作成します。
- イベントをAmazon Fraud Detectorに送信し、不正の予測を取得します。
How Amazon Fraud Detector works - Amazon Fraud Detector
なお、Detectorインスタンスを1つ作りましょうというほど簡単ではなく、関連パラメータが色々とでてきます。
全体像は以下のような感じです。
チュートリアルを試してみた
今回は、 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バケットにアップロードします。
ステップ1:不正を評価するイベントタイプを定義する
Fraud Detector > Create event type
設定項目 | 今回の設定値 | 備考 |
---|---|---|
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 |
ステップ2:モデルの詳細を定義する
ステップ3:トレーニングの構成とモデルのトレーニング
ステップ4:トレーニング済みモデルのパフォーマンスを確認する
ステップ5:モデルをデプロイする
ステータスが、Training...となります。
しばらくすると、Ready to deployに変わります。
バージョンのところをクリックします。
Deploy model versionを選択します。
注意書きが表示されるので、Deploy versionを選択します。
ステータスがDeploying...となります。
しばらくすると、Activeになります。
これでモデルのデプロイまで完了しました。
パートB
ステップ1:Detectorの作成
作成したモデルを利用するためのDetector(検出器)を作成します。
Fraud Detector > Create detector
Detectorに適当な名前をつけ、パートAで作成したイベントタイプを選択します。
ステップ2:モデルをDetectorに追加
ステップ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つ目のルールを追加
更に2つのルールを追加
ステップ4:ルールの実行モードと順番
今回はどれか1つのルールにマッチするかどうかをチェックするので、First matchedを選択します。
ステップ5:確認したらDetectorバージョンを作成
ステップ6:テストと予測
Detectorバージョン1が作成されたので、 Run test 画面でテストします。
日付・エンティティIDを適当に入力し、評価したいメールアドレス・IPアドレスのペアを入力し、Run testを実行。
スコアは956なのでリスク高いです。verify_customerの範囲でした。
試しにトレーニングデータでlegitとなっているものでテストしてみると、当然ながらリスク低と予測されました。
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は、ユーザーのアプリケーションの観点で不正検知してくれます。 確かにトレーニングデータを用意したり、少しコードを書いたりとする必要があるので少し負担ですが、機械学習に関しては「雰囲気知ってる」くらいな知識で使い始めることができるので非常にいいと思います。
どんな用途で使えるでしょうか。 例えば、普段は日本にいるユーザーが外国からアクセスした時に確認メールを出すというのがありそうです。 リスクの高さによっては、確認メールではなく、ログインさせないという仕様もありえると思います。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい