【はじめての Databricks】金融取引データから異常検知 #4 初期モデル構築

はじめに

本連載の主題である機械学習モデルを構築します。

連絡目次

  1. 導入/環境設定
  2. Collaborative Notebook でデータ可視化
  3. Anomaly Detector をデータ探索ツールとして使ってみる
  4. 1つ目のモデル構築 (データの偏り 未考慮) → 本稿
  5. 2つ目のモデル構築 (データの偏り 考慮)

要件

実務チームからは、

  • 予測結果をドメイン知識のあるメンバーに渡すことで、モバイル決済のサービス展開やユーザー登録規制方針を練る材料としたい

という要請があるものとします。この要件には、できるだけ判定ミスが起こりにくいように注意しつつ不正検知の取りこぼしが極力ないようなロジック、つまり、

  • Presision (正しく不正取引と判定された件数 / 実不正取引件数合計) をできるだけ高くしつつも、
  • Recall (正しく不正取引と判定された件数 / 不正取引と判定された件数合計) を優先しする、

を満たすモデルが運用しやすそうです。

アルゴリズム概要

今回利用するのはディシジョンツリー (分類木) です。他の機械学習アルゴリズムに比べて元々利用されているルールベースのロジックとの比較が容易なので、機械学習プロジェクトの出発点として利用される事が多いです。条件分岐見ればモデルが何をやっているか分かりやすいので納得ですね。

  • 分類および回帰の機械学習タスクで一般的な方法
  • 分類木を複数組み合わせたアルゴリズムがよく使われる
  • モデル自体の説明性が高い (分類ロジックの可視化が容易)

評価指標導出関数の定義

混合行列の表示と特徴量の重みを算出する関数を作成します。このあたりの処理は機械学習の運用・改善プロセスを回す上で頻繁に使用・トラッキングするのでまとめておくと便利です。

一つの Notebook に収まりきらない、見通しが悪くなりそう、ということであれば別の Notebook にまとめておいて呼び出すということも可能です。
Azure Databricks で、他の Notebook を呼び出す、基礎: Hello World レベル

データセットの分割

連載#2 では通常取引/不正取引でデータセットに偏りがあることを確認しました。初回モデルはこれを考慮しないデータセットを用いて構築します。

Total rows: 6362620, Training rows: 5090311, Test rows: 1272309

パイプライン構築

先ほど作成した関数もその一例ですが、機械学習モデルを改善していく際、複数のステップを繰り返し行うことになります。都度コードを書くのは面倒なので、処理フローのテンプレート(=パイプライン)を作成します。

モデルの作成と分類木の可視化

過学習を防ぐための代表的な手法に交差検証 (CrossValudation) がありますが、これを行わない場合でモデルを作成、樹形図を出力します。

image.png

樹形図はやはり分かりやすいですね。次に各特徴量がそれぞれどのくらい分類ロジックに寄与しているかを算出します。口座残高差分と支払いタイプが効いていることが分かります。

image.png

モデリング時の評価指標

機械学習モデルの評価指標には要件の章で触れた Recall や Precision など基本的なもののほかに、様々なものがあります。今回は areaUnderPR と areaUnderROC をモデリング時の評価指標として用います。

偏ったデータセットで学習する場合には evaluatorPR を指標としてモデル構築すると良いので、初回モデルではこれを利用します。また、様々なパラメータを変えてチューニングするのは手間がかかるので自動的にいろいろな組み合わせを試してくれる PramGridBuilder というライブラリを用います。

精度指標算出

作成したモデルの評価指標を確認します。

PR train: 0.847168047612724
AUC train: 0.8648916320839469
PR test: 0.8432895226140703
AUC test: 0.8633701428270321

Train および Test データ、それぞれの指標値を見る限り過学習は発生してなさそうですね。

混合行列可視化

定義しておいた関数にモデリングの結果を渡して、混合行列を可視化します。

image.png

TN (本当は不正取引なのに通常取引と判断されてしまったもの。図右上) が 438件。TP (不正取引だと正しく予測されたもの。図左上) の件数と並べてみると、不正取引の対策のための参考情報としては少々心もとないような気がします。

メトリクスの保存

mlflow にメトリクスとして保存しておきます。作図した混合行列もそのまま保存できます。

まとめ

今回は初回モデルを構築、評価指標の算出まで行いました。次回は学習させるデータセットのばらつきを考慮したモデルを作成、mlflow で初回モデルとの比較を行います。お楽しみに!

参考リンク

datarbicks Resources (公式参考記事集)
Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks
mlflow – track machine learning training runs
Synthetic Financial Datasets For Fraud Detection
Binary Classifier Evaluation made easy with HandySpark
notebook