メルペイでの不正決済検知に機械学習を活用

Hmj_kd氏:よろしくお願いします。メルペイのMachine Learningエンジニアをしています、工藤Hmj、はまじと申します。

今日は、メルペイでの不正決済に機械学習を活用しているところなのでそのご紹介と、個人的にグラフ理論を活用した事例の2本立てでお送りします。

まず先に自己紹介をさせてください。

ちょっと今日はスッピンでお送りするんですけど。

(会場笑)

北海道の釧路市出身で、実は大学のときは物理学科に所属していて、「ブラックホールの幾何学」というちょっとマニアックなところを……もしご存知の方がいたらぜひお話したいんですけど、そういうことをずっとやっていてました。社会に出て数学を使いたいなと思っていて、機械学習が世の中でちょっとブームになってきたので、徐々にそちらのほうにキャリアをチェンジしてきました。

それで、2018年に株式会社メルペイで、最初はクレジットスコアという与信モデルのモデリングを担当していたんですけど、去年の10月からAMLという不正決済の仕組みを作っているチームにアサインされまして、今はそこで機械学習の立ち上げをやっています。

好きなラーメンは蒙古タンメンとかラーメン二郎とか、そういう辛いラーメンとかコッテリしたラーメンが大好きです。

今日話すことは、去年の10月にAMLシステムの機械学習のチームが立ち上がったので、そこで私たちがどういったことをしたかという事例のご紹介と、その中で特化したグラフ理論を活用した実験というのがあったので、そのご紹介をしたいと思います。

機械学習立ち上げのタイムライン

まずは10月からやったことなんですけど、今日は弊社のエンジニアの方がインフルエンザで来れないのですが、去年プロダクトマネージャーがnoteに良い内容を書いてくれたので、ぜひこちらをご覧ください。

どういうふうに立ち上げたか。機械学習の立ち上げをやったことがある方は難しさを知っていらっしゃると思うので、簡単に何があったかと、どういうタイムラインだったかをご紹介したいと思います。

10~12月の3ヶ月でやったんですけど、不正決済というアンチマネーロンダリングの知識がないので、まずPMの方とブレストで「どういった課題があるんですか?」ということをヒアリングしながら「これは機械学習でこういうことをしながら解決できるよね」ということをやりました。

そもそも機械学習に対して期待値が高いというのはどの会社でもあると思うので、そこは「これは機械学習じゃなくていいんじゃないですか?」「これは分析をしてルールに落とし込めればきっと解決できると思います」というコスパの良い提案をしながら、ざっくばらんにPMの方と定期的にブレストをしたのが10月の頃ですね。

そこで徐々にこういう不正決済が起きて「ここを先に止めなきゃいけないね」「ここを先に解決しよう」「ここは後でもいいかな」というロードマップを敷きながら、今溜まっているデータ、Splunkのシステムで動いているんですけど、それを僕らも理解しながら同時に進めるというのが10月です。

11月と12月は、実際にその中でこの課題を解決しようというのを決めて、それに対してデータ分析とモデリングをして「こういうモデルができたらこういう性能評価で、このくらいの閾値だったらリリースできるね」ということをPMの方と一緒に決めながら、連携して進めたという流れになります。

“疑わしい人”を事前に推定する

実際にどういったことをやったかと言うと、そんなに外れたことはしていません。不正決済の想像はできると思うんですけど、正常標本と異常標本と考えると、全体の90何パーセントが正常な取り引きで、その中でちょっとだけ疑わしい取引があって、実際に「これは不正な取り引きだね」というのは本当に数パーセントしかないインバランスなデータなので、それに対応した教師あり学習のモデルの枠組みで解決しましょうというのがまず1個大きいところです。

実際にどういった不正が起きているのかは具体的に言えませんが、教師データを少しずつ使って機械学習の学習でモデルを作ってというのが、まず普通のところだと思うんですけど、ここを土台にしています。

ただ、ここだけだと既にわかっているリスク、不正しかキャッチできません。不正というのは常に変化をしていって、手口がたくさん開発されていくので、そこにも柔軟に対応できるシステムやソリューションが求められました。教師あり学習をやりながら、そこは別にブレストをしながら考えました。

そこで今回グラフ理論の話が出てくるので、ご紹介したいと思います。

なぜ私がブラックホールの幾何学をやっていたことを言いたかったかというと、ここで幾何学が出てくるからです。

モチベーションはすごくシンプルで、メルカリやメルペイで疑わしいお客様が疑わしい取り引きをしたときに適切なタイミングで検知して、それの決済を止めるだったり、アカウントに対して何かヒアリングをするといったことをしたいというニーズがまずありました。

もし、疑わしい人たちをメルカリの取り引きデータから事前に推定できたら、そこだけ手厚く検知のリソースを充てることで、効率的にキャッチできるんじゃないかというのが1つの仮説としてありました。

実際にそれができるのかというところですが、アイディアとしてはすごいシンプルです。これはイメージの例なんですが、メルカリでお客様の取り引きがたくさんあったら膨大なグラフができると思うんですけど、それに対して予め僕らがこの辺の人たちがきっと怪しいという印を事前に付けておく。そこで実際に特定の取り引きが行われたときに、ビビビッとアラートが鳴ってそこで検知する。そうするとその人たちが一気にガバッと取るという、すごくシンプルな話なんですけど、そういうことをやりたいというのがアイディアです。

グラフ理論をメルペイの取引に応用

グラフと出てきたのでグラフについて解説するんですけど、まずここですね。丸い円とそれを結ぶ線で抽象化したものをグラフで表したものがグラフ理論と言われているものです。

KPIとかのグラフではなくて、こういう数学のグラフ理論と言われているもののグラフになります。言い方は本によって違うと思うんですけど、丸い円はここではノードと言っています。線はエッジと言います。

これは抽象的な関係なので、例えば人を丸でノードにして、この人とその人は知り合いみたいな関係がエッジになる。他にも例えばノードを電柱にしてそこに電線が張っていたらということも表現できます。

グラフはけっこう抽象的なものなので、何をどういうふうに応用するかは使い手のアイディア次第でいろいろ膨らんでいくというのがおもしろいところで、今回はこれをメルカリ、メルペイの取り引きに応用したという感じです。

例えば具体的に、丸をメルカリのお客様の1アカウントとして見ると、ノードと見ることができます。もう1個、例えば実際にお客様がメルペイの加盟店さんで決済をする場合、丸を加盟店として見ることもできます。そうすると、例えばお客様が支払うという行為をエッジとして見ることもできるし、あとはメルカリには招待機能があるので、この人がこの方を招待したというのもエッジとして見ることができます。

あとは取り引きですね。この方が売り手で、この方が買い手で取り引きをしたという関係をエッジとして見ることもできるので、何をノードにして何をエッジにするかは、僕ら分析者のアイディア次第で膨らんでくるんですけど、例えばこういうものが考えられますということです。

グラフの形状に着目

こういうものを使ってグラフを作って、今回はとくにグラフの形状に着目しました。なぜ着目したかと言うと、そこには背景があって、詳細は言えないんですけど、ある不正取り引きがあって、そこでたまたま私がグラフを使って分析したところ、おもしろい形が見えてきたので、これはグラフ理論で何か使えるんじゃないかというのが1個目ですね。

あとは、昔グラフでいくつか分析したことがあるんですけど、グラフが膨大で分析するのは大変だなと思ったときに「もしかしたらグラフの形はトポロジー的には位相不変量で有限個で分類できるんじゃなかったっけ?」というのを思い出しました。

現実には証明して何個になるというのはやってないんですけど、有限個になるなというのを発見して、そこで実際にメルカリの取り引きをグラフにして、それを何個かの有限個にして分析したという解釈ですね。そこに形状に着目した理由があります。

よく登場する形というのはこういうものがあります。

例えばこれは本によって言い方は違うかもしれないんですけど、閉路という閉じているグラフとか、1個抜けていて道、パスとか。あとは二部関係とか、この赤と緑はつながっていないんですけど、こちら側では2つに分けられるグラフとか。あとは全部のノードがつながっている全員が知り合い関係のグラフ、1つのノードから各ノードに派生している星とかがあります。

グラフ理論は、こういう特殊なグラフにはいろいろ名前がついているんですけど、こういうものにメルカリのグラフを分類していくというのをやっています。

招待関係をグラフで表す

例えば、先ほど招待関係というのが1つあったと思うんですけど、左側は1人のお客様がたくさんの方に「メルカリを使ってください」と招待したグラフです。

片方はちょっと見づらいので矢印を書いたんですけど、これは右上から徐々に1人ずつ招待のリレーをしていって、真ん中で分岐して左と右に分かれてまた出ていく。つまり、招待して次の方がどんどん数珠状に招待していくという感じです。

これを見たときに、左側はわりと普通というか、1人の人がインフルエンサーというのが表現できているんですけど、右は特殊だなと思ったんです。異様な感じを受けて、不思議だなとずっと見ていて。これはもしかしたら形によっては何か起きている状況が違うんじゃないかというのをこのときに感じました。

これはちょっと違うんですけど、例えばこういうふうに分類した体ですね。

最初に、まずグラフにクラスターケースがあるかないかで分けました。ちょっと複雑なので一旦左に寄せておいて、次が1ペアだけのグラフとか木構造になっているグラフとか、道になっている、あるいはサイクルになっているとかを分けて、これでグラフを有限個に分けるというのを最初にやってみました。

そうすると、これは例なんですけど、右側がさっき言った星グラフというものに分類されるんですけど、左側はほぼ星ですね。微妙にここでつながっているのでスターではないんですけど、ほぼ星と言えるところです。

これをやると左側の、これは部分階層なんですけど、全体の中にこういう成分があって全体から見るとこういう形状は数パーセントしか発生しないんですけど、この中で疑わしい取り引きや疑わしいアカウントが存在する確率が右側のと比べると比較できないくらい高いというのが実験から見えてきました。

そういうのも他の普通のコンプリート系に比べると飛躍的に高くなるというのがわかって、グラフの形状に着目して検知エンジンのリソースを高い確率で検知できそうというのがわかってきたところです。

最後にまとめです。すごくおもしろい発見なんですけど、大きく課題が2つあって、1つはまだ捉えきれてないつながりもあるので、「この人とこの人はつながりだろう」とエッジを予測するのを機械学習でやっているところです。

もう1つは、変化する手口を実際に検知してもそれが何が起きているかわからないというのが意外に難しいんです。「今ここでこの人たちに何か起きてます」と言っても、ビジネスで考えたときに、「これ何が起きているんですか?」というのを実際にデータから見るのが難しくて、実際に事象が発生してから「こういう手口だったのか」とあとからわかるので、意外に変化する手口を検知しても、どう応用していくかがけっこう難しいかなというところです。

時間になりましたので、ご清聴ありがとうございました。

(会場拍手)