2022.10.11

実サービスで不正ユーザ検知を行うには?

1. はじめに

みなさんこんにちは、グループ研究開発本部 AI研究開発室のK.Fです。今回のテーマは不正ユーザ検知です。
実サービスでは、一部の不正ユーザの不正行為がサービスに悪影響を与えるといったことが往々にしてあります。そのため、不正ユーザを機械学習で検知し、規制や制限をしたいというモチベーションが生まれます。
今回は、実サービスへの導入を意識した機械学習での不正検知モデルについて「不正検知モデルをどのように選ぶのか?」「不正検知における特徴量をどのように作るのか?」「実サービスでどのように使うのか?」を説明していきます。

解決したいこと

不正ユーザであるかの答えは知りようがない問いなので、出力結果を元に人間が多角的な視点で最終判断を下す必要があります。そのため、「不正っぽいユーザを機械学習を用いて抽出する」→「不正っぽいユーザの特徴を人間が確認する」→「不正ユーザの判断基準を人間が定める」→「不正ユーザを人間が制限や規制する」のようなステップになることが望ましいです。

結論

  1. 不正検知モデルの選択: 不正ユーザ検知問題において「外れ値検知・教師なし・説明性/解釈性」の観点からIsolation Forestを選択するのがよいです。
  2. 特徴量の設計: 仮説に基づいて「特徴量の大小・度数分布・判断根拠になること」を意識して特徴を作成します。
  3. 実運用システム:「人間の目による補完」を想定してHuman-in-the-loopシステムが望ましいです。

2. 不正検知アルゴリズムをどのように選ぶのか?

2.1 不正検知手法の分類

不正検知手法は、以下の表のように大きく分けて二種類存在します。

不正検知手法 外れ値検知 新規性検知
何を検知するのか? 普段は起こり得ないようなデータ点を検知する 新しい観測値で不正が起きているかを検知する
どのように使うのか? 時系列的に集計したデータを学習し外れ値を検知する 時系列データを学習し不正行為が行われたタイミングを検知する
使用例 不正ユーザ検知 不正行為検知
今回は、不正ユーザ検知を題材としているため、不正ユーザ検知におけるアルゴリズム選定の一例を示します。

2.2 不正ユーザ検知において考慮が必要な観点

まず、不正ユーザの検知においては「教師なし学習」と「説明性・解釈性」の2点について考慮が必要です。1つ目は、不正ユーザのラベル付を人の手でする必要があり大変かつ、正解ラベルデータを十分な量だけ集めるのは困難なため、「教師なし学習」に対応した不正検知モデルを選択する必要があります。2つ目は、人間が不正ユーザの判断基準を定めるために、不正っぽいと判断された根拠を明らかにする必要があります。そのため、「説明性・解釈性」の観点からモデルを選択する必要があります。以上の理由から、説明性・解釈性が高い教師なし外れ値検知手法の中からモデルを選択することになります。

2.3 主要な教師なし外れ値検知手法

主要な教師なし外れ値検知手法は
  1. Isolation Forest: 決定木ベース
  2. Local Outlier Factor: 距離と密度ベース
  3. Minimum Covariance Determinant: 確率ベース
  4. One Class SVM: カーネルベース
の4種類があります。結論から言うと、不正ユーザ検知とアルゴリズムの特性上相性がいいのは、Isolation ForestとLocal Outlier Factorの2つです。詳しいアルゴリズムについては、過去記事で解説されているので省略しますが、Minimum Covariance Determinantはデータが正規分布であることを仮定しているため、今回の問題では扱いづらく、One Class
SVMは外れ値によって学習が汚染されるので、外れ値検出には向いていないです。

2.4 モデルの説明性・解釈性

不正ユーザ検知には、アルゴリズムの特性上Isolation ForestとLocal Outlier
Factorが向いていることはわかりましたが、モデルの説明性・解釈性の観点ではいかがでしょうか。結論から言うと、Isolation Forestのほうが説明性・解釈性の観点で優れています。
まず、機械学習モデルを解釈・説明する技術として「Explainable AI (XAI):
説明可能なAI」という概念があります。機械学習は基本的に入力から出力がでてくる過程でどの特徴量が寄与しているかがブラックボックス化しがちですが、それをホワイトボックス化する技術です。モデルを説明する方法として、モデルにとって重要な特徴量を明示する「大局的な説明」と、モデルの出力結果に寄与した特徴量を明示する「局所的な説明」の2種類があります。代表的なアルゴリズムとして「SHAP」があります。

SHAP

「それぞれの特徴量が予測値にどれだけ影響を与えているか」を、各特徴量が予測値を平均よりどのくらい上昇または、下降させたかによって測ります。例えば、下図のように、特徴量Aと特徴量Bは予測結果にプラスに寄与し、特徴量Cは予測結果にマイナスに寄与することで、最終予測値が出力されていることがわかります。
img_shap
さらに詳しいSHAPのアルゴリズムの解説は過去記事をご参照ください。
また、SHAPでは、決定木系のアルゴリズムの条件分岐など木構造を効率的に解析してモデルを解釈できるクラスが実装されており、Local Outlier Factor (回帰値の大小でモデルの良し悪しを測るカーネルを利用するクラスを用いる必要がある)よりもIsolation Forestのほうが相性が良いです。

3. 不正検知における特徴量はどのように作るのか?

特徴量作成で最も大切なポイントは、「不正ユーザと通常ユーザを区別できそうな仮説を立て、その仮説に基づいて特徴量を作成すること」です。例えば、ゲームをクリアすると換金可能なポイントがもらえるサービスなどでBotを利用した不正にポイントを不正に獲得するユーザの場合、「不正ユーザは何時間も連続してプレイし続けるだろう」という仮説が立てられ、それに対して「連続プレイ時間」のような特徴量を作成することができます。
さらに、具体的に仮説から特徴量を作成する際のポイントが3点あります。

3.1 ポイント①: 特徴量の大小

1つ目が、「不正ユーザと通常ユーザを特徴量の値の大小で区別できようにすること」が大切です。例えば、上の例で「連続プレイ時間」を特徴量とする場合、当然、通常ユーザは特徴量の値が低くなり、不正ユーザは特徴量の値が高くなります。そうすることで、〇〇時間も連続でプレイしているのは不正だろうとアルゴリズム的にしきい値を決めやすくなります。

3.2 ポイント②: 特徴量の度数分布

2つ目が、「不正ユーザと通常ユーザを分離できる特徴量の度数分布にすること」です。例えば、上の例で「連続プレイ時間」を特徴量とする場合、当然、不正ユーザほど絶対数がすくなくなるので、横軸に連続プレイ時間をとってユーザの度数分布を考えると、値が高い(不正ユーザ)ほど度数が少なくなりそうです。また、度数分布が通常ユーザと不正ユーザではっきりと別れていない場合は、データの前処理を行うことで度数分布を変更させる手もあります。例えば、対数変換するや上位◯%をサンプルするなどです。

3.3 ポイント③: その特徴量を根拠に判断できる

3つ目が、「その特徴量を根拠にして不正ユーザだろうと判断できること」です。判断根拠にできる特徴量のみを学習に利用するようにします。その他、判断根拠にすることは難しいが解釈を与える特徴量を補助情報として、人間に提示することで判断の助けにします。

4. 実サービスでどのように使うのか?

4.1 偽陽性の取り扱い

不正検知アルゴリズムの出力値を、不正度のスコアが高いものから順番に確認することを考えると、サービスへの悪影響が小さい偽陰性よりも、偽陽性に正常なユーザを間違って不正と判断してしまう偽陽性のほうが問題になります。そのため、冒頭でも説明した通り、不正検知モデルの予測に寄与している特徴量から人間が「不正ユーザである」と最終判断を下す必要があります。そこで、機械学習モデルと人間が互いに補完しながら動作するシステム「Human-in-the-loop」システムが必要不可欠になります。

4.2 Human-in-the-loop

「Human-in-the-loop」システムのシステムアーキテクチャは以下のように考えられます。
img_human-in-the-loop

4.3 システム実装に向けての課題

システム実装に向けての課題は以下のものが考えられます。
  1. 導入までの障壁: 必ずしも、不正ユーザを判断し規制や制限を決定する人間がエンジニアとは限らないので、非エンジニアが扱えるような運用ツールを作成する必要があります。
  2. 運用コスト:どうしても人手によるユーザのラベリングが必要なので、人件費が運用コストになります。ラベリングの結果がたまっていけば、教師なしでなく教師あり学習として問題を定義することが可能になり、不正ユーザと疑わしいユーザの抽出精度の向上が見込めるかもしれません。

5. まとめ

  1. 不正検知モデルの選択: 不正ユーザ検知問題において「外れ値検知・教師なし・説明性/解釈性」の観点からIsolation Forestを選択するのがよいです。
  2. 特徴量の設計: 仮説に基づいて「特徴量の大小・度数分布・判断根拠になること」を意識して特徴を作成します。
  3. 実運用システム:「人間の目による補完」を想定してHuman-in-the-loopシステムが望ましいです。

最後に

グループ研究開発本部 AI研究開発室では、データサイエンティスト/機械学習エンジニアを募集しています。ビッグデータの解析業務などAI研究開発室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ募集要項一覧からご応募をお願いします。 一緒に勉強しながら楽しく働きたい方のご応募をお待ちしております。

  • Twitter
  • Facebook
  • はてなブックマークに追加

グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。

 
  • AI研究開発室
  • 大阪研究開発グループ

関連記事