SparkSQL で時系列仮想データテーブルを作る関数

はじめに

タイトル通り、SparkSQL で時系列仮想データテーブルを作る関数です。以下のような方を想定。

  • 最近 Spark さわり始めた
  • 時系列データで Window 処理をバッチ的に行いたい
  • SparkSQL で普通にクエリが書けると聞いたけど、
    • MySQL でのいつものメソッドは使えなさそう
    • PostgreSQL の Generate Series が使えればいいのに

関数

こんな感じで書きました。開始日、終了日、秒単位のインターバル、テーブルの行名を引数にしています。

[crayon-5f6bcba70196d517246993/]

使用例

1秒ごと

[crayon-5f6bcba70197e246427136/]

image.png

1時間ごと

[crayon-5f6bcba70198a858367098/]

image.png

おわりに

とりあえずは動作しますが、、

  • この関数使えば一発じゃん
  • こんな非効率なことして…

という方、情報いただけると大変うれしいです。

参考リンク

Spark Programming Guide


Spark Dataframe を投げるとヒートマップを出力する関数

はじめに

Spark df でヒートマップを作るたびに何度も同じことを調べてるので、備忘録がてら関数にしておきます。

関数

Spark dfと、相関を調べるカラムを入れたリスト、2つを引数に取ります。

[crayon-5f6bcba702467317969557/]

使用例

iris で試してみます。

[crayon-5f6bcba702477615238611/]

image.png

さいごに

Pandas df にするときにクラスタが走っちゃってるので頻繁に行う場合には要注意。小規模データでさっとカラムの相関を見たいときに。

参考リンク

seabornの細かい見た目調整をあきらめない


Databricks Community Edition で Notebook を立ち上げる

はじめに

Databricks は、特に海外で破竹の勢いを見せるデータ分析基盤です。

  • データ分析のための統合プラットフォーム
  • 2000 以上のグローバル企業がビッグデータおよび機械学習パイプラインの設計に活用
  • 2020 Gartner Magic Quadrant で Leader に指名 (データサイエンス及び機械学習プラットフォーム分野)
  • Apache Spark、Delta Lake、MLflow の開発者が作っている

実ビジネスで利用するのであればアーキテクチャ構築や権限設計が必須ですが、オープンデータソースでまずは使用感を試したい方向けに無償プランが用意されています。有償版と無償版の違いは以下の通り (2020年2月時点)

1.jpg

本稿では無償版である Databricks Community Edition の登録から Notebook を立ち上げるまでの手順を示します。

アカウント作成

Try Databricks にアクセスして、GET STARTED をクリック
2020-02-25_13h31_13.png

全ての項目を入力し、 Sign Up をクリック
2020-02-25_13h35_01.png

しばらくするとこちらの画面に遷移します。
image.png

メアドに届いたメールのリンクに遷移し、パスワードを設定します(初回登録でも Reset Password になるようです)。
2020-02-25_13h39_31.png

これで完了。すぐにコンソール画面が表示されます。
image.png

クラスタの作成

Home 画面より、New Cluster をクリック
2020-02-25_13h44_13.png

Community Edition では Driver クラスタのみ。 Cluster Name は任意で設定します。Runtime Version については、既存アーキテクチャやスクリプトとの兼ね合いを検討する必要がないのであれば、デフォルト値で良いでしょう(2020年2月25日 時点では 6.2)。
インスタンスは us-west に立ち上がるようです。どれかを選択して Create Cluster をクリック。
2020-02-25_13h49_41.png

ちょっと待つとこちらのアイコンが緑になります。これで Cluster の準備完了です
2020-02-25_13h54_19.png

Notebook の作成

トップ画面から New Notebook をクリックし、名称を任意で入力します。アカウントを作成したばかりであれば、先ほど作成したクラスタが選択されているはずです。Create をクリック。
2020-02-25_13h56_17.png

すぐに Notebook の画面が出てきます。
image.png

さいごに

一定規模以上のデータを保持していて、その解析に Spark 使っているのであれば、現時点では Databricks 一択になるかと思います。普段 Jupyter Notebook で分析をしている方は触っておくだけでも損はないはず。

参考リンク

Databricks


MMLSpark を Databricks on EC2 のクラスタにインストールする方法

はじめに

MMLSpark を Databricks (on AWS EC2) のクラスタで使用できるようにする手順を示します。

対象者

  • Databricks on EC2(AWS) で分析環境を立ち上げている
    • init_script をいじったけどなんだかうまく行かない
    • pip でもうまくいかない
    • MMLSpark は Azure 以外のプラットフォームで使えないの?
  • 現在使用しているアルゴリズムをSparkによる分散処理に最適化できないか方法を探している

mmlspark とは?

正式名称は、Microsoft Machine Learning for Apache Spark

Microsoft Azure のマネージド機械学習サービスである Cogninive Services や、機械学習の現場でよく使われる LightGBM などを Spark で効率的に活用できるように最適化したパッケージが揃っているライブラリです。

画像処理ライブラリの雄である OpenCV のパッケージもあります。2020年5月現在では実装されている関数は限定的ですが、大量の画像に対してシンプルな前処理を並列かつ高速に行いたい場合には選択肢に入ってきそうです。
MMLSpark OpenCV Package

そしてこのパッケージ、Microsoft Azure 以外のプラットフォームでも使えます。

インストール方法

Databricks のワークスペースで、
ClustersからLibrariesに飛び、Install Newをクリック
スクリーンショット 2020-05-15 7.08.01.png

Library Source に Mavenを選択し、Repository に以下を入力、Installをクリック
com.microsoft.ml.spark:mmlspark_2.11:1.0.0-rc1
スクリーンショット 2020-05-15 7.10.58.png

しばらくするとこちらの画面に遷移します。
Status が InstalledになっていればOK。これで完了です。
スクリーンショット 2020-05-15 7.13.14.png

参考スクリプト

以下のような感じで、Collaborative Notebook 上でモジュールが使えるようになります。

[crayon-5f6bcba7028f5230629285/]

result
image.png

[crayon-5f6bcba702905094947265/]

result
image.png

[crayon-5f6bcba702912628740624/]

result
image.png

[crayon-5f6bcba70291e121629179/]

result
image.png

おわりに

モジュールのインストール方法にもいろいろあるんですね。
依存関係が出やすいので pip 乱発はやめたいところです(自戒)

参考資料

公式 MMLSpark 紹介サイト
公式 MMLSpark Github

LightGBM 上記スクリプトソース


DatabricksでMLflowを使う③ - モデルのライフサイクル管理 -

はじめに

機械学習モデルのライフサイクル管理を行うオープンソースであるMLflowをDatabricksのUI上で使用する方法について書いています。

DatabricksでMLflowを使う① - ノートブック上での実験トラッキング -
DatabricksでMLflowを使う② - 実験パラメータとメトリクスの可視化 -

こちらの記事の続きとなります。
Databricksのマネージド型MLflowではトレーニングしたモデルのステージングについてもUI上で行うことができます。今回はこちらについて書きます。

モデルの登録

前回の記事の各実験の比較画面です。こちらから一番左のモデルを本運用に移行しようとしているとします。run idから個別ページへ移動します。
image.png

個別ページへ移動して下のほうへスクロールします。アーティファクトの「model」を選択すると「Register Model」と表示されるのでクリックします。
image.png

モデルとモデル名を記載して、登録します。初めてモデルを作成する場合は「+ Create New Model」しか選択できませんが、登録済みのモデルがある場合にはそのモデルが選択できるようになります。その場合、既存モデルのバージョン違いのものとして登録されます。
image.png

登録が完了すると、モデルの個別ページに移動できるようになります。
画面右のモデル名とバージョンが記載されている部分か、左のサイドバーの「Models」から移動できます。
今回はサイドバーから移動します。
image.png

登録したモデルとバージョンが表示されます。ライフサイクルを管理するバージョンをクリックします。
image.png

ライフサイクル管理

個別ページの「Source Run」から該当のrun idの個別ページへ移動できます。
さっそくステージングを行いたいと思います。
image.png

Stageの部分をクリックするとプルダウンで変更後のステージ状態が選択できるようになっています。ステージには「Staging」「Production」「Archived」の3種類があります。
それぞれに対してRequestを求めてから変更するか、直接変更するかが選べます。
image.png

今回は「Request transition to → Staging」を選択します。
コメントを加えてokします。
image.png

「Pending Requests」の部分にリクエストが表示されます。このモデルにアクセスできるメンバーはApproveまたはRejectできるようになります。(リクエストした本人はCancelもできるようになっています。)ためしにApproveしてみます。
image.png

コメントを加えてconfirmします。
image.png

Pending Requestsから消えて、Stageが「Staging」へ移行しています。
image.png

下にスクロールすると履歴が表示されます。
image.png

おわりに

今回はモデルのライフサイクル管理について書きました。
次回は本運用へ移行するモデルができたときのモデルの呼び出しについて書きたいと思います。


Databricks Named a Leader in Gartner Magic Quadrant for Data Science and Machine Learning Platforms 翻訳してみた

はじめに

今年の2月17日に Business Wire に掲載されました「Databricks Named a Leader in Gartner Magic Quadrant for Data Science and Machine Learning Platforms」の記事を翻訳してまとめたものを、紹介したいと思います。

本記事のリンクと、Gartner Magic Quadrant for Data Science and Machine Learning Platforms に関するリンクは下記参照でお願いします。

■リンク

記事概要

この度、Databricks は Gartner Magic Quadrant for Data Science and Machine Learning Platforms におけるリーダに指名されました。Databricks の Unified Data Analytics Platform は、組織がビジネス・インテリジェンスと機械学習の為に用意した自分たちの全ビッグデータ・従来のデータに対して、1つのプラットフォームからアクセスすることを可能とします。

共同創設者であり、Databricks の CEO である Ali Ghods 氏曰く、
「データサイエンスと機械学習はどの組織においても一番の課題でしょう。創業100年の伝統的な企業も、データドリブンなスタートアップ企業に対して優位性を保つために、ハイテク企業に変わろうとしています。私達は Gartner Magic Quadrant のリーダとして、この動きを今年のその他の認識に加えて、統合データ解析の重要拡大の成長を示す明らかなサインと見ております。」

Databricks はオープンソースコミュニティにおいて、目覚ましい貢献を果たしてきました。Apache Spark の開発の他にも、Delta Lake、MLflow、Koalas などの発展にも貢献したことで、Databricks は、オープンソースのコミュニティにおけるイノベータと評されるようになりました。

DatabricksはSeries F の資金調達を終えたことで勢いを維持し、自社の資金調達額は9億ドルにも昇りました。この資本金は世界規模でイノベーションの加速と拡大を目的としており、Databricks の価値を62億ドルと評しております。Nielsen、Hotels.com、Overstock、Bechtel、Shell、HP など、多くのグローバル企業がDatabricks を活用してデータサイエンスとデータエンジニアのチームの統合を実施しております。

Gartner のレポートでは、16のベンダーに対して Magic Quadrant for Data Science and Machine Learning Platforms のビジョンにおける実行力と完遂能力を評価しました。

■Gartner のビジョン完遂の軸となる8つの評価基準

  • 市場の理解
  • マーケティング戦略
  • 販売戦略
  • 商品の提供戦略
  • ビジネスモデル
  • 垂直/業界戦略
  • イノベーション
  • 地理的戦略

■Gartner のビジョン実行の軸となる7つの評価基準

  • 商品/サービス
  • 実行可能性
  • 販売実行/販売価格
  • 市場の対応/記録
  • 市場の実効性
  • 顧客経験
  • オペレーション

おわりに

Databricks Named a Leader in Gartner Magic Quadrant for Data Science and Machine Learning Platforms の翻訳については以上となります。
原文の記事の方も、ぜひ参照してみてください。


【Databricks 入門】クラスタの作成

本記事では Azure Databricks のワークスペースから UI でクラスタを作成する方法について書いていきます。

クラスタ設定

早速ですがワークスペースログイン後、左にある「 Clusters 」タブを選択しクラスタ作成画面へ移動しましょう。
2020-09-02_11h47_45.png

下図のような画面に遷移したら「 Create Cluster 」ボタンを押下します。
ちなみにここでは「 Interactive Clusters 」で稼働中のクラスタを一覧で確認することができます。
※今回は記事用のワークスペースなので何も稼働してません。
2020-09-02_11h54_34.png

詳細設定

ではクラスタを作成するための設定を行っていきます。

  • Cluster Name
    管理上のクラスタ名を記入します。
  • Cluster Mode
    「 standard 」と「 high concurrency 」から選択できます。
    シングルクラスタ実行は「 standard 」
    マルチクラスタ実行は「 high concurrency 」
    high concurrency は Scala が使えないなどの制限もあるので選択前にドキュメントを確認されるのをおすすめいたします。
  • Pool
    クラスタ・オートスケーリングの起動時間短縮が行なえます。
    ただし、アイドル状態のインスタンスを保持するための料金が別途必要となります。
  • Databricks Runtime Version
    今年(2020年)6月にリリースされたばかりの Spark 3.0 もバッチリ利用することができます!
    「 ML 」とついているものを選択すると下記のフレームワークが初期でインストールされたりとあるので用途に合わせて選択しましょう。

    • Apache Spark / Horovod Integration
    • XGBoost support
    • TensorFlow, PyTorch and Keras support
  • Enable autoscaling
    クラスタのサイズを自動で変更させたい場合はチェックを入れます。
    際限なくスケールする なんてことはなくきちんと上限を設定できますのでご安心を。
  • Terminate after [nn] minutes of inactivity
    個人的に Databricks の好きな機能の一つです。
    設定した時間内でノートブックの操作がない場合、自動的にクラスタを停止してくれます。
    うっかりを防いでくれるので、費用を抑えることができます。
    重い処理を実行していつ終わるのか…と監視する必要もないですね。
    再開する際は起動まで少し時間が必要ですが、ノートブック内の記述は残っているので途中から再開可能です。
  • Worker Type
    ノートブックが稼働する VM の選択をします。性能や費用に関わってくるので要件に応じて選択しましょう。
    Min Workers , Max Workers ではオートスケールの最小・最大ワーカー数を指定できます。
  • Driver Type
    コマンドの解釈やクエリの最適化、作業の分散等を担います。
    大量データを収集する場合はメモリを増やすといいでしょう。
    デフォルトでは Worker Type で選択した VM と同じになります。

2020-09-02_13h04_55.png

オプション設定

環境変数等追加の設定を行うことも可能です。

  • Spark Config
    Spark プロパティ設定を行うことが可能です。
    Spark configuration properties
  • Environment variables
    環境変数の設定を行います。
  • Tags
    リソース管理のタグ付けを行います。
    Azure Databricks では VM やディスクボリュームに適用されます。
  • Logging
    Driver や Worker のイベントログの吐き出し先とするパスを指定します。
  • Init scripts
    各クラスタノードの起動時に実行されるシェルスクリプトを設定できます。
    Databricks Runtime に含まれていないパッケージとライブラリをインストールするのに使用しましょう。

2020-09-02_18h59_40.png

クラスタ作成

設定が完了したら、画面上部の「 Create Cluster 」を押下しクラスタを作成します。

2020-09-02_19h46_37.png

作成中

ボタンを押下すると最初のクラスタ一覧画面に戻ります。
ステータスが Pending となっておりクラスタが作成中なのが確認できます。

2020-09-02_19h47_06.png

暫く待ち、ステータスが running となればクラスタ作成完了です。
(今回記事用で作成した F4s の VM ノード数2では5分足らずで作成完了しました。)

作成完了

2020-09-02_19h50_50.png

作成したクラスタの確認

クラスタ一覧からクラスタ名を選択するとそのクラスタの設定を確認することができます。
「 Edit 」を選択することでオートスケール設定や VM のサイズを変えることも可能です。
Cluster Mode だけは変更できないので注意してください。

2020-09-02_19h59_21.png

まとめ

Azure Databricks でのクラスタ作成方法をご紹介しました。
VM のサイズなど使ってみないとわからないこともあるかと思いますが、後から変更できるのでまずは作成して試してみてもらえればと思います。

参考サイト

Configure clusters — Databricks Documentation


Azureデータ分析入門 #5 【Databricks → Power BI Desktop】

はじめに

Databricks の Spark クラスタを、デスクトップ版の Power BI に接続する方法をご紹介します。

連載目次

Azureデータ分析入門 #1 【はじめに】
Azureデータ分析入門 #2 【ツール比較 Excel編】
Azureデータ分析入門 #3 【ツール比較 Azure Notebook編】
Azureデータ分析入門 #4 【ツール比較 Databricks編】
Azureデータ分析入門 #5 【Databricks → Power BI Desktop】 → 本記事はこちら
Azureデータ分析入門 #6 【CSVデータ → Power BI サービス】
Azureデータ分析入門 #7 【AutoML でタイタニック号の生存者予測】

Power BI

概要

データストレージを接続したり、エクセルファイルを読み込んで加工すると、こんなダッシュボードや、
What_800x450.png

こんなレポートが、
800x450_2x_Why_PBI.jpg

Excel のピボットグラフに近い操作感で作れて、
provide_800_450.gif

以下の手段で共有できるプラットフォームが整備されてて、

  • Web ブラウザ
  • Android
  • iOS

ビッグデータや AI サービスとの連携も抜群、というすごいやつです。

ピボットグラフと同じ用に作れると考えて触ると痛い目を見ますが、慣れればレポート作成や知識のシェアなどの効率化が跳ね上がりそうなツールです。

気になりますね? Windows PC 使いであれば、こちらから Power BI Desktop をダウンロードできます。

マックユーザーでも、Microsoft アカウントを持っていれば Power BI サービスが使えます。こちら から。ブラウザで動くので使用環境に左右されにくいのが嬉しい。

Power BI Desktop と Power BI サービス の違い

Power BI には、Power BI Desktop と Power BI サービス の二種があります。それぞれできることが異なるうえ、UI が違うので注意が必要。ざっくり切り分けると、

  • Power BI Desktop → 開発環境
  • Power BI サービス → レポート共有プラットフォーム

のイメージ。公式ドキュメントに分かりやすい図があったので引用します。

ちなみに Spark クラスタへの接続はデスクトップ版からしかできません (2019年9月現在)。

image.png

SQL に慣れている人であれば、データの整形や集計列の追加は Power BI に読み込ませる前にやってしまい、Power BI では可視化やUXのデザインを、というスタイルが楽かもしれません。

手順

以下の3ステップ。

  • アクセスポイントの確認
  • アクセストークンの発行
  • デスクトップ版 Power BI に Databricks を接続

アクセスポイントの確認

Clusters から使用しているクラスタをクリック
image.png

Advanced Option をクリック
image.png

JDBC/ODBC をクリック
image.png

JBDC URL を参照。以下のようにセミコロンで各データが区切られています。①と②を組み合わせて、
image.png

文字列 https①② を作成し、メモ帳などにコピーしておきます。これが Power BI から Databricks へのアクセスポイントになります。
image.png

もしクラスタが停止していたら、起動させておきましょう。
2019-08-27_14h47_48.png

アクセストークンの発行

右上のユーザーアイコンから、User Setting をクリック
2019-08-27_13h59_49.png

Generate New Token をクリック
2019-08-27_14h00_06.png

トークンの名称と有効期限を任意で入力し、Generate をクリック
2019-08-27_14h00_28.png

アクセストークンキーが発行されるので、これもメモ帳に保存しておき、Done をクリック。
※ここでコピーしたものを紛失するとトークンの使用ができなくなるので注意
2019-08-27_14h01_32.png

デスクトップ版 Power BI に Databricks を接続

  • アクセスポイントの確認
  • アクセストークンの発行とキーの確認

以上で Dataricks 側の準備が整いました。次は Power BI 側の設定を行います。

Power BI デスクトップ版をインストール、起動後、左上のデータの取得をクリック
2019-09-19_10h46_34.png

検索窓に Spark と入力、Spark を選択し、接続をクリック
2019-09-19_10h46_49.png

先ほど確認したアクセスポイントを入力、プロトコルは HTTP に、インポートは DirectQuery を選択し、OKをクリック
2019-09-19_10h47_12.png

ユーザー名に token と入力、パスワードに先ほど控えておいたアクセストークンキーを入力し、接続をクリック
2019-08-27_14h08_56.png

Databricks のテーブルが表示されるので、任意で選択、読み込みます。
2019-09-19_11h38_00.png

読み込みが完了するとこちらの画面に。取り込んだテーブルが右端に確認できます。これで接続は完了です。
2019-09-19_11h39_11.png

まとめ

接続してはみたものの、今回のデータに対して Power BI Desktop から Spark クラスタを動かし、アドホックな分析をするというのは、いささかオーバースペックなように思います。

そこで次回は Webブラウザ上で Power BI サービスを開き、そこへCSVファイルをアップロードし、ダッシュボードの作成までやってみようと思います。お楽しみに!


【はじめての Databricks】金融取引データから異常検知 #5 リモデル/モデル比較

はじめに

2つ目のモデルを作成、mlflow で1つ目モデルと比較するところまでを行います。

連絡目次

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

データセットの分割

1つ目のモデルでは学習に用いるデータセットに偏りがありました。今回はこの課題を解消できるように Train データセットをサンプリングします。

[crayon-5f6bcba703020949321636/]

Total count: 5090311
Fraud cases count: 6610
Proportion of fraud cases: 0.0012985454130405784
Balanced training dataset count: 13252

中身を見てみます。通常取引/不正取引でおおよそ半々になっていますね。

[crayon-5f6bcba703030906482180/]

image.png

パイプライン修正

バランスが取れたデータセットをモデル学習に利用できるので、今回の評価指標は evaluatorAUC を用います。前記事で作成したパイプラインをそのまま利用します。

[crayon-5f6bcba70303e066337270/]

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

モデルを構築し、樹形図を見てみます。

[crayon-5f6bcba70304b156190194/]

image.png

続いて特徴量の重要度を出力します。

[crayon-5f6bcba703057275331317/]

image.png

orgDiff (取引実行者の口座残高差分) が重要と判断しているようです。樹形図・利用している特徴量ともに、前回作成したモデルとは全く違いますね。

評価・メトリクスの保存

前回と同様、評価のために必要な情報を導出していきます。

精度指標

[crayon-5f6bcba703063836312709/]

PR train: 0.99069584320536
AUC train: 0.9948781444445811
PR test: 0.09312146366332584
AUC test: 0.9929393129548542

混合行列

[crayon-5f6bcba70306e177452536/]

image.png

メトリクス保存

[crayon-5f6bcba70307b071444078/]

これで一通りの処理が完了しました。

モデルの比較

前回のモデルと今回のモデルを比較していきます。
数種の評価指標であれば以下のように Notebook で出力・比較可能ですが、この方法では複数のモデルを比較しづらいです。

[crayon-5f6bcba703088606245211/]

---model #1---
PR train: 0.847168047612724
AUC train: 0.8648916320839469
PR test: 0.8432895226140703
AUC test: 0.8633701428270321

---model #2---
PR train: 0.99069584320536
AUC train: 0.9948781444445811
PR test: 0.09312146366332584
AUC test: 0.9929393129548542

mlflow で比較

mlflow を用いると比較が容易です。workspace > users と進み、フラスコのアイコンをクリック。

2020-08-28_14h23_32.png

こちらの画面に遷移します。モデルを選択し、Compare をクリック。

image.png

X軸とY軸にそれぞれ PR Test と AUC Test を設定、散布図で比較します。
2020-08-28_14h46_37.png

各モデルの ID をクリックすると、モデルそのものや、パイプラインの実行パラメータ、保存しておいた図などにアクセス可能。試行錯誤していると情報が散逸しがちなのでとても便利です。

2020-08-28_15h09_07.png

今回のモデルは「疑わしきはすべて罰する」ようなロジックです。実際に不正検知をはじくフローに組み込むのであれば初回モデルが、当初の要件に沿うためには今回のモデルが合うかもしれません。(いずれも改良必須ですが)

まとめ

5回にわたって金融取引データを可視化、考察、モデル構築、リモデル、比較するところまでをご紹介しました。

本番環境では Azure Datafactory などのデータ関連サービス群を組み入れ、よりシンプルかつ柔軟性の高いアーキテクチャを設計すべきですが、アドホックに機械学習プロジェクトを始めたいという方は、まず Databricks を動かしながらデータ分析の流れを掴んでみてはいかがでしょうか?

参考リンク

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


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

はじめに

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

連絡目次

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

要件

実務チームからは、

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

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

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

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

アルゴリズム概要

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

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

評価指標導出関数の定義

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

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

[crayon-5f6bcba7039b7024450977/]

データセットの分割

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

[crayon-5f6bcba7039ca752426882/]

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

パイプライン構築

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

[crayon-5f6bcba7039d7984797368/]

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

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

[crayon-5f6bcba7039e5814191488/]

image.png

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

[crayon-5f6bcba7039f2630458504/]

image.png

モデリング時の評価指標

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

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

[crayon-5f6bcba7039ff255465575/]

精度指標算出

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

[crayon-5f6bcba703a0b735103301/]

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

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

混合行列可視化

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

[crayon-5f6bcba703a17328485996/]

image.png

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

メトリクスの保存

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

[crayon-5f6bcba703a24792009119/]

まとめ

今回は初回モデルを構築、評価指標の算出まで行いました。次回は学習させるデータセットのばらつきを考慮したモデルを作成、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