ゼロからメルペイのリアルタイム不正検知システムを作る話

こんにちは。メルペイTnS(Trust and Safety)チームのソフトウェアエンジニア孫星越(@singyue)です。この記事は、Merpay Tech Openness Month 2022 の13日目の記事です。

TnS(旧名: AML)チームはお客さまが安全安心に買い物できるため、不正検知を含む禁止行為の監視や対応を行います。メルペイのAML/CFTシステムを支える技術の記事でTnSの事後の不正検知技術を紹介しましたが本記事では、その後取り組んだリアルタイム不正検知の技術について書きたいと思います。

最後までお読みいただければ幸いです。

解決したい問題

メルカリ/ メルペイの不正検知は事後検知が中心でした。そのシステムは今も現役で稼働中です。

しかしながら、メルペイの機能が増えるに連れて、不正使用犯の手口の巧妙化も増し、リアルタイムで不正を検知したいケースが増えてきました。リアルタイムの検知があれば、メルカリの取引が成功する前や、店舗で決済が成功する前に不正検知を止めることができます。これによって、ユーザ体験の向上にも繋がります。例えばメルカリの取引が成功する前に検知できれば、取引が強制的にキャンセルされることがなく、出品者にとっての負担もなくなります。

このため、リアルタイム不正検知システムに以下のような特徴を定義し、開発を進めてきました。

  1. 複数のリアルタイムのdata streamingを不正検知用のデータソースとして利用する
  2. 検知の結果を保存し、過去の検知結果に基づいてルールの改善ができる
  3. 低レイテンシー

最初の一歩

何事も最初は難しいので、最初の設計は最もシンプルでした。メルカリの取引でクレジットカードを利用して決済する際に、チャージバック(クレジットカード会社がECサイトでの売上を取り消すこと)のリスクを判断するロジックを入れました。技術スタックもメルペイで最も利用されているgo, gRPC,GKEなどを選択しています。そして決済時の情報しか使っていないので、最初のリアルタイム不正検知システムは実際には単なるstatelessな serviceでした。

OLAP?

リアルタイム検知を導入後の効果は大きく、より多くの検知ロジック追加要望が社内より上がりました。それらの検知ロジックに共通した特徴点としては複数のデータソースからデータを分析し、不正リスクを判断することでした。

OLAP(Online analytical processing)を使うシーンだと思う方がたくさんいると思いますが、自分も最初はそう考えていました。しかしながら、メルペイの不正検知ルールの複雑さとデータ量からみると、単純なOLAP構成だと処理する時間が1s弱が必要で、低レイテンシーという目的が達成できなくなります。

ここで気づいたことがありました。リアルタイム不正検知と言っても、判断材料となるデータは不正行動が発生する前に取得することが多く、これらのデータを先に分析し、結果を保存しておけば分析用の時間はリアルタイム時にいらなくなります。

実際の例を説明します。例えば決済時の検知時に、実はお客さまがログインしてからデータがsyncされて、リスク判定も行い始めます。そしてリスト判定の結果をDBに保存します。決済時に決済のMicroserviceがrequestが来て、先に分かったリスク判定結果+決済時の情報を見ながら、このタイミングでこの決済が不正かどうかを判断し、結果を返します。

そのような設計をするために、OLAPにこだわらず、データベースもメルペイで利用されているCloud Spannerを採用しています。

ここでは、特にdataplatformチームから作られたcdc(change data capture) pipelineを活用しています。事後検知からリアルタイム検知まで社内の大量のデータを処理しているTnSチームとして、cdc pipelineができてからデータ処理が更に楽になりました。cdc pipelineについてはこちらの記事をご確認ください。

検知結果トラッキング

特徴として「検知の結果を保存し、過去の検知結果に基づいてルールの改善ができる」と定義しました。TnSでは検知結果をBigQueryに同期しており、分析基盤としてLookerを活用したダッシュボードを作成しています。このようなデータ分析基盤を活用することで、不正対策オペレーションチームも直感的・全体的に不正検知をトラッキングできるようになっています。

過去データ

また、新規のルールロジックを追加する際に、時々扱っていなかったデータを処理する必要があります。アプリケーション上でjobを実装することがよくありますが、我々はFlexTemplate を利用しています。Pipelineを作成し、sources, transforms, sinksを定義することによって、億単位の過去データをBigQueryなどからCloud Spannerまで同期できるようになります。

Machine Learning Systemとの連携

この部分を個人的には多くシェアをしたいのですが、リアルタイム不正検知システムとML連携部分にまだ解決できていない課題もあり、現在本番で動いているものだけ紹介します。

リスク判定結果を非同期で行うアーキテクチャを設計したため、モデルにより不正リスクの結果をCloud Spannerにデータ連携し、リアルタイムで利用されているAPIが幾つかあります。

その他に、リアルタイムで特徴量を生成し、モデリングから不正リスクを判定する仕組みもありますが、レイテンシーの問題が解決せず、現在はオペレーションの時しか使われていません。

ML連携は今後も更に重要となりますので、次回に何か新たなものをシェアできれば良いと思っています。

まとめ

メルペイのリアルタイム不正検知システムは現在、メルカリ内の取引と店舗の決済のみならず、チャージや「おくる・もらう」など殆どのシーンで不正判定を行っています。そして決済時は複数のロジックに基づく不正判定を行っていますが、平均レイテンシーは15ms弱を保っており、リアルタイム性を実現できています。

以上、ゼロからメルペイのリアルタイム不正検知システムを作る話でした。

  • X
  • Facebook
  • linkedin
  • このエントリーをはてなブックマークに追加