Amazon Web Services ブログ
サーバレスと機械学習サービスを利用したリアルタイム不正検知
(本記事は 2023/03/10に投稿された Real-time fraud detection using AWS serverless and machine learning services | AWS Machine Learning Blog を翻訳した記事です。)
オンラインの不正行為は企業に大きな影響を与えるため、不正を目的とした新規アカウントの作成や、アカウントの乗っ取りを検出・防止し、疑わしい取引を阻止するための効果的な end-to-end の戦略が必要です。不正行為の発生時期に近い段階で不正を検出することが、不正検出及び防止システムの成功の鍵となります。システムは、不正行為を可能な限り効果的に検出し、エンドユーザーにできるだけ早く警告できる必要があります。それにより、エンドユーザーはさらなる悪用を防ぐための措置を講じることができます。
この記事では、オンライントランザクションの不正をほぼリアルタイムで検出するサーバレスアプローチを紹介します。求める成果や不正から保護するためのアクション(不正行為についてエンドユーザーに警告したり、取引にフラグを立てて追加レビューを依頼するなど)に応じて、さまざまなデータストリーミングやイベント駆動型アーキテクチャを適用する方法を示します。
この記事では、次の 3 つのアーキテクチャを実装しています。
- ストリーミングデータの検査と不正行為の検出/防止 – Amazon Kinesis Data Streams、 AWS Lambda、 AWS Step Functions、 Amazon Fraud Detector を活用
- 不正行為の検出/防止のためのストリーミングデータ拡張(エンリッチメント) – Amazon Kinesis Data Firehose、AWS Lambda、 Amazon Fraud Detector を活用
- イベントデータの検査と不正行為の検出/防止 – Amazon EventBridge 、 AWS Step Functions 、 Amazon Fraud Detector を活用
不正取引を検知するために、Amazon Fraud Detector というフルマネージドサービスを使用しており、これにより不正行為の可能性があるアクティビティを特定し、より多くのオンライン詐欺をより早く発見することができます。過去のデータに基づいて Amazon Fraud Detector モデルを構築するには、「Detect online transaction fraud with new Amazon Fraud Detector features | AWS Machine Learning Blog(英語)」を参照してください。Amazon SageMaker を使用して独自の不正検出モデルをトレーニングすることもできます。詳細については、「Train fraudulent payment detection with Amazon SageMaker | AWS Machine Learning Blog (英語)」を参照してください。
ストリーミングデータの検査と不正行為の検出/防止
このアーキテクチャは、Lambda と Step Functions を使用して、 Amazon Fraud Detector が Kinesis Data Streams のデータをリアルタイムに検査、不正検出及び防止する方法を表しています。Amazon Managed Streaming for Apache Kafka (Amazon MSK) をデータストリーミングサービスとして使用する場合も、同じアーキテクチャが適用されます。このパターンは、不正行為のリアルタイム検知、通知、及び潜在的な防止に役立ちます。このユースケースの例としては、支払い処理や大量のアカウント作成などがあります。次の図は、ソリューションのアーキテクチャです。
このアーキテクチャにおけるプロセスの流れは次のとおりです。
- ファイナンシャルトランザクションを、Kinesis Data Stream に取り込みます。データのソースは、eコマースや金融サービスなど、これらのトランザクションを生成するシステムです。
- Lambda 関数は、トランザクションをバッチで受け取ります。
- Lambda 関数は、バッチを用いて Step Functions ワークフローを開始します。
- トランザクションごとに、ワークフローは次のアクションを実行します。
- トランザクションを Amazon DynamoDB テーブルに保存します。
- GetEventPrediction アクションを使用して、Amazon Fraud Detector API を呼び出します。 API は、approve (承認)、block (拒否)、investigate (調査)のいずれかの結果を返します。
- DynamoDB テーブルのトランザクションを不正予測結果で更新します。
- 結果に基づいて、次のアクションのいずれかを実行します。
- block または investigate の場合は、Amazon Simple Notification Service (Amazon SNS) を使用して通知を送信します。
- approve の場合は、トランザクションの処理を進めます。
このアーキテクチャでは、各トランザクションをデータベースに保存し、トランザクションの処理を進める前に検査することで、不正の可能性のあるトランザクションにリアルタイムで対応できます。実際に構築する場合は、通知のステップを、お客様のビジネスプロセスに合わせて追加のレビューとアクションに置き換えることもできます。例えば、他の不正検出モデルを使用してトランザクションを検査したり、手動でレビューを実施したりすることができます。
不正行為の検出/防止のためのストリーミングデータ拡張(エンリッチメント)
日本語翻訳ブログ注記:本ブログにおける「データ拡張」は、原文の「Data Enrichment」と対応し、データに追加の情報を付加することでデータの品質と価値を向上させることを意味します。
ユースケースによっては、不正の可能性のあるデータにフラグを立てるだけでなく、次のような処理を行う場合があります。例えば、更なる分析のためにトランザクションを保存したり不正検出モデルを継続的にチューニングするために、より多くのデータを収集したりする場合です。ユースケースの例としては、請求処理があります。請求処理中は、全ての請求書類を収集し、不正検知システムに通します。その後請求を処理するか却下するかの決定が下されますが、必ずしもリアルタイムで決定されるわけではありません。このような場合は、ストリーミングデータ拡張が適している場合があります。
このアーキテクチャでは、 Lambda を使用して、 Amazon Fraud Detector と Kinesis Data Firehose data transformation による Kinesis Data Firehose のリアルタイムなデータ拡張を可能にしています。このアプローチでは、不正防止対策は実装されていません。拡張されたデータを Amazon Simple Storage Service (Amazon S3) バケットに配信します。データを利用するダウンストリームサービスは、不正検出結果をビジネスロジックで使用し、それに応じた振る舞いをすることができます。次の図は、このソリューションのアーキテクチャです。
このアーキテクチャにおけるプロセスの流れは次のとおりです。
- ファイナンシャルトランザクションを、Kinesis Data Firehose に取り込みます。データのソースは、eコマースや金融サービスなど、これらのトランザクションを生成するシステムです。
- Lambda 関数は、トランザクションをバッチで受け取り、データを拡張します。バッチ内の各トランザクションに対して、関数は次のアクションを実行します。
- GetEventPrediction アクションを使用して Amazon Fraud Detector API を呼び出します。 API は、approve 、block 、investigate のいずれかの結果を返します。
- 不正検出結果をメタデータとして追加して、トランザクションデータを更新します。
- 更新されたトランザクションのバッチを Kinesis Data Firehose 配信ストリームに返します。
- Kinesis Data Firehose はデータを送信先(この場合は S3 バケット)に配信します。
結果として、S3 バケットには、元のデータだけでなく、各トランザクションのメタデータとして Amazon Fraud Detector のレスポンスが含まれているデータが格納されています。このメタデータは、データ分析ソリューション、機械学習モデルのトレーニングタスク、またはトランザクションデータを可視化したダッシュボードで利用できます。
イベントデータの検査と不正行為の検出/防止
すべてのデータがストリームとしてシステムに入力されるわけではありません。イベント駆動型アーキテクチャの場合も、同様のアプローチをとることができます。
このアーキテクチャでは、Step Functions を使用して、Amazon Fraud Detector が EventBridge のイベントをリアルタイムに検査、不正検出及び防止する方法を表しています。
ここでは、不正の可能性のあるトランザクションの処理を停止するのではなく、追加のレビューのためにフラグを立てています。拡張されたトランザクションは、未加工のイベントデータがパブリッシュされているイベントバスとは異なるイベントバスにパブリッシュされます。これにより、データのコンシューマは、全てのイベントを、不正検出結果がメタデータとして含まれている状態で利用することができます。その後、コンシューマはメタデータを検査し、メタデータに基づいた独自のルールを適用できます。例えば、イベント駆動型の eコマースアプリケーションでは、このトランザクションが不正であると予測された場合、注文を処理しないように選択することができます。このアーキテクチャパターンは、新規アカウント作成時や、アカウントプロファイルの変更(住所、電話番号、登録されているクレジットカードの変更など)の際の不正行為の検出及び防止に役立ちます。次の図は、このソリューションのアーキテクチャです。
このアーキテクチャにおけるプロセスの流れは次のとおりです。
- ファイナンシャルトランザクションを、EventBridge のイベントバスにパブリッシュします。データのソースは、eコマースや金融サービスなど、これらのトランザクションを生成するシステムです。
- EventBridge ルールは、Step Functions ワークフローを開始します。
- Step Functions ワークフローは、トランザクションを受け取り、以下のステップで処理を行います。
- GetEventPrediction アクションを使用して Amazon Fraud Detector API を呼び出します。 API は、approve 、block 、investigate のいずれかの結果を返します。
- 不正検出結果を追加して、トランザクションデータを更新します。
- もしトランザクションの不正予測結果が block または investigate だった場合、Amazon SNS を用いて通知を行い、更なる調査を促します。
- 更新されたトランザクションを、拡張データ用の EventBridge イベントバスにパブリッシュします。
Kinesis Data Firehose のデータ拡張方法と同様に、このアーキテクチャでは不正なデータが次のステップに進むことを防ぐことはできません。元のイベントに不正検出のメタデータを追加し、不正の可能性のある取引に関する通知を送信します。拡張されたデータを利用するコンシューマーが、不正検知のメタデータを使用する意思決定を行うビジネスロジックを持っていない場合がありますが、その場合は Step Functions ワークフローを変更して、不審なトランザクションを処理する別のアプリケーション向けのイベントバスにルーティングするようにできます。
実装
この記事で説明されている各アーキテクチャに関する、AWS Serverless Application Model (AWS SAM) テンプレート、デプロイ、テストの手順は sample repository に掲載されています。
まとめ
この記事では、Amazon Machine Learning サービスと、サーバレスアーキテクチャ を使用してリアルタイムの不正検出及び防止ソリューションを実装するさまざまな方法について説明しました。これらのソリューションにより、不正行為が発生した時点に近いタイミングで不正行為を検出し、可能な限り迅速に対処することができます。Step Functions を使用した実装の柔軟性により、状況に最も適した方法で対応できるだけでなく、最小限のコード変更で不正防止手順を調整できます。
その他のサーバーレス学習リソースについては、Serverless Land(英語)をご覧ください。
日本語翻訳ブログ注記:日本語のサーバレス学習リソースについては、 サーバーレスパターンやサーバーレス自己学習ガイドもご覧ください。
著者について
Veda Raman は、メリーランド州に拠点を置く機械学習のシニア・スペシャリスト・ソリューションズ・アーキテクトです。Veda はお客様と協力して、効率的で安全でスケーラブルな機械学習アプリケーションの設計を支援します。Veda は、お客様がサーバーレステクノロジーを機械学習に活用できるよう支援したいと考えています。
Giedrius Praspaliauskas は、カリフォルニアに拠点を置くサーバーレスのシニア・スペシャリスト・ソリューションズ・アーキテクトです。Giedrius はお客様と協力して、サーバーレスサービスを活用して、スケーラブルで耐障害性があり、高性能で費用対効果の高いアプリケーションを構築できるよう支援しています。
翻訳はソリューションアーキテクトの小川翔が担当しました。原文はこちらです。