【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-5fc1bc37ac21d925690615/]

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

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

[crayon-5fc1bc37ac226034678453/]

image.png

パイプライン修正

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

[crayon-5fc1bc37ac229275486436/]

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

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

[crayon-5fc1bc37ac22b375812345/]

image.png

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

[crayon-5fc1bc37ac22e529398618/]

image.png

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

評価・メトリクスの保存

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

精度指標

[crayon-5fc1bc37ac230887337353/]

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

混合行列

[crayon-5fc1bc37ac232579545322/]

image.png

メトリクス保存

[crayon-5fc1bc37ac235517287860/]

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

モデルの比較

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

[crayon-5fc1bc37ac237580469740/]

---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-5fc1bc37ad2df376514203/]

データセットの分割

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

[crayon-5fc1bc37ad2e9589674901/]

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

パイプライン構築

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

[crayon-5fc1bc37ad2ec629543143/]

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

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

[crayon-5fc1bc37ad2f0799603585/]

image.png

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

[crayon-5fc1bc37ad2f3455131849/]

image.png

モデリング時の評価指標

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

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

[crayon-5fc1bc37ad2f6983268429/]

精度指標算出

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

[crayon-5fc1bc37ad2f9318630771/]

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

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

混合行列可視化

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

[crayon-5fc1bc37ad2fc483500788/]

image.png

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

メトリクスの保存

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

[crayon-5fc1bc37ad300751246468/]

まとめ

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


【はじめての Databricks】金融取引データから異常検知 #3 Anomaly Detector

はじめに

Databricks の Notebook から Azure Anomaly Detector の API を叩いて結果を可視化するところまでを行います。

連絡目次

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

Anomaly Detector とは

Anomaly Detector はマネージド型AIサービスとして提供されている Azure Cognitive Services の一つです。

  • 時系列データセットから異常検出
  • 教師なし学習
  • 異常に対する感度を微調整可能
  • APIでアプリケーションへ組み込み可能
  • データ型や欠損値に対する制約がちょっと厳しい

予測結果の可視化一例
image.png
X軸が時間、Y軸が数値。青の実線が投入したデータ。
解析の結果異常ではないと判定されたエリアが水色、異常値と判定されたデータは赤でプロットされている。

本連載の主題である異常検知モデルには利用していませんが、時系列データの特徴をさっと把握したいときに使えるかも、入力/出力ともにシンプルなので Detabricks の可視化機能と相性いいかも、ということで試してみました。

テストデータ生成

Anomaly Detector に投入する Body データは以下を満たす必要があります。

  • UTC 形式のタイムスタンプ (カラム名 = timestamp)
  • 数値 (異常検出対象。カラム名 = value)

今回は前記事で周期性を明確に見られた区間を抜粋し、 Step が前者、トランザクション数が後者になるようにデータを成型、テストデータとしました。

[crayon-5fc1bc37ae10b487737950/]

テストデータを棒グラフにしてみます。数値の吹き出しがある箇所でトランザクションの少ないことはすぐ分かりますが、他にも特筆すべきポイントがあるかもしれません。

[crayon-5fc1bc37ae112009359380/]

result image.png

環境変数設定

まず Anomaly Detector のリソースを作成します。 (こちらの記事が参考になります)

エンドポイント URL と API Key を取得したら、クラスタの環境変数に追加しておきます。(Notebook に平打ちするのはセキュリティ上よろしくない)

2020-08-26_19h18_03.png
2020-08-26_19h19_51.png

関数定義

パラメータや実行関数を定義します。

[crayon-5fc1bc37ae116468268445/]

実行・結果可視化

API にデータを投げ、元のデータフレームと結合します。

[crayon-5fc1bc37ae11b496241061/]

isAnomaly (予測結果。1=異常、0=通常) に絞ってグラフ化します。吹き出しの出ている箇所は目視では気が付きませんでしたが、確かに別の日の同じ時間に比べるとトランザクション数が低いように思われます。

[crayon-5fc1bc37ae11d693084648/]

result image.png

plot option
image.png

まとめ

私たちはグラフにするとなんとなく分かったような気になってしまう傾向があります。Anonaly Detector は先入観なしに時系列データを見てみたい時に便利かもしれませんね。次回は実際に決定木を用いてモデルを構築します。お楽しみに!

参考リンク

Anomaly Detector 公式トップページ
Anomaly Detector API の使用に関するベスト プラクティス
Cognitive Service: Anomaly Detector APIを試す
クイック スタート:Anomaly Detector REST API および Python を使用し、時系列データ内の異常を検出する


【はじめての Databricks】金融取引データから異常検知 #2 データ可視化

はじめに

機械学習モデルを作る際、まずは様々な切り口でデータを眺め、仮説を立てるプロセスが必要不可欠です。
本稿では Collaboravive Notebook の可視化機能を用いて、データの全体像を把握します。

連絡目次

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

データ概要

PaySim というアフリカ諸国で実行されたモバイル決済サービスのトランザクションログデータです。

カードや銀行口座を持っていない人たちがどんどん経済圏に流入しているような地域では、日常の決済手段に加えて、出稼ぎ労働者の送金手段として、生活インフラの一部として普及しているそうです。

Spark Dataframe と View について

Spark Dataframe と View (もしくはTable)で、利用できるコマンドが異なっています。
私の場合は PySpark を使い慣れていないので、モデリングを行う際に前者を、データ探索やアドホックな可視化をしたい場合に後者、といった使い分けをすることが多いです。

image.png

前準備

ここからは実際に Notebook 上でコードを実行しつつ、データの中身を見て行きます。まず直接SQLを書けるようにするために以下のコードを実行します。不正取引の実行者はもともと大量の預金がある口座を使っているとは考えにくい(足が着いたら口座凍結される)ので、口座残高の変化を算出するカラムを追加しています。

[crayon-5fc1bc37aedb9031429868/]

result image.png

それぞれのカラムの詳細は以下の通り。
今回の場合、isFraud が目的変数(最終的に予測したい値) になります。

カラム名 明細
step 現実世界でのタイムスパンの通し番号。1ステップ1時間で30日間分のデータ。計 744 ステップ。
type 取引タイプ。CASH-IN (入金), CASH-OUT(出金), DEBIT(デビット), PAYMENT(通常支払い), TRANSFER(送金)の5種類
amount 現地通貨での取引額
nameOrig 取引実行者の顧客ID
oldbalanceOrg 取引実行者の初期残高
newbalanceOrig 取引実行者の取引後残高
nameDest 取引先の顧客ID
oldbalanceDest 取引先の初期残高 (nameDest が M で始まる場合情報なし)
newbalanceDest 取引先の取引後残高 (nameDest が M で始まる場合情報なし)
orgDiff 取引実行者の口座残高の変化
destDiff 取引先の口座残高の変化
isFraud 正解ラベル。1が実際に不正取引であった取引、0が通常取引
isFlaggedFraud 予測結果。1が不正取引と予測された取引、0が通常取引と予測された取引

データ可視化

Notebook 上でクエリを実行した場合、デフォルトでは表形式で出力されます。
以下のようにドラッグアンドドロップで、クエリの実行結果をそのまま可視化できます。Excel のピボットグラフのような使用感です。わざわざ matplotlib 使わなくてもいいのでとても便利。

gif_4.gif

1. 不正取引の全体に占める割合

件数ベースで 約 0.13%、金額ベースで 約 1.1%。
かなり偏りがあるので、Train モデリングに使用するデータは注意する必要があります。

[crayon-5fc1bc37aedbf944100506/]

result0 image.png

2. 取引タイプ毎 トランザクション数 及び 金額総計

左2つの円グラフが通常取引の集計です。TRANSFER と CASH_OUT で取引金額の 3/4 位を占めています。PAYMENT は小口取引が多く、TRANSFER は大口取引が多いようです。この辺りは利用用途をイメージすると肌感とも合致します。
右2つが不正取引の集計結果です。トランザクション数と取引金額ともに CASH_OUT と TRANSFER が半々。

[crayon-5fc1bc37aedc2120180373/]

result1 image.png

plot option 1 image.png

取引タイプ毎 平均単価

0 が通常取引、1 が不正取引の平均単価です。CASH_OUT の相違が顕著です。
※ 統計量については Spark Dataframe での算出がスムーズです → こちら

[crayon-5fc1bc37aedc3884497471/]

result2 image.png

plot option 2 image.png

3. TRANSFER 及び CASH_OUT ヒストグラム

不正取引には 10 mil の付近にスパイクが見られます。取引金額の初期上限値と思われます。今回のデータには含まれませんが、モバイル決済の登録時情報やアクセスログなども踏まえて分析するとおもしろそうです。

[crayon-5fc1bc37aedc5059245358/]

result3 image.png

plot option 3 image.png

4. TRANSFER 取引金額 時系列推移

ここからは取引タイプ TRANSFER のみを抜粋してみてみます。日ごとの周期が見られ、120-420 のステップではこれがはっきりしています。STEP 345 付近でスパイクが見られます。例えば日本で言う5-10日のようなイベントによるものかもしれません。

[crayon-5fc1bc37aedc7243957085/]

result4image.png

plot option 4 image.png

5. TRANSFER トランザクション 時系列推移

トランザクション数のほうがはっきりと周期性を確認できます。月単位/年単位のログがあれば、システム負荷の予測を通して運用コストの最適化を検討できそうです。

[crayon-5fc1bc37aedc9721116231/]

result5 image.png

plot option 5 image.png

6. TRANSFER 口座残高の変化

取引実行者の口座残高変化額、取引相手の口座残高の変化額を、取引実行者と取引相手のペアごとに見てみます。まずは通常取引。

[crayon-5fc1bc37aedcb486692006/]

result6 image.png

plot option 6 image.png

次に不正取引です。destDiff もしくはnewbalanceDest や oldbalanceDest が特徴量として効いてくるモデルが生成されそうです。(本番でのモデル運用考えるとこれら数値の算出タイミングが気になるところです)

[crayon-5fc1bc37aedcd432614783/]

result7 image.png

plot option 7 image.png

まとめ

データ全体の傾向や特徴を簡単に見てきました。次回は時系列データからの異常検知に Azure Anomaly Detector を利用してみます。お楽しみに!

備考:連番テーブル作成

今回のデータでは必要ありませんが、SparkSQLでは以下のように連番テーブル(いわゆるダミーテーブル)を作成できます。

[crayon-5fc1bc37aedd3708865800/]

参考リンク

Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks
Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks 翻訳まとめ
Databricks Visualization


【はじめての Databricks】金融取引データから異常検知 #1 導入/環境構築

はじめに

データ分析プラットフォームである Databricks は、その特性上、主に処理速度やコストの面で他のサービスと比較されがちです。もちろんそれらの点において高く評価されているからこそ欧米でのデファクトスタンダードになっているわけですが、私自身は、サービスとしての完成度の高さが一番の強みだと感じています。例えば、

  • 知識の共有がしやすい
  • ユーザビリティを強く意識して作られている GUI
  • 他のサービス (データベースとかBIツール) との連携性がいい
  • モデルの利用や継続的な改善に至るまでの導線がスムーズ

といった点です。つまり、

  • 分析チームの生産性を上げやすく、
  • 学習コストが低い

サービスに仕上がっていると言えます。ただ、日本語の情報が少なかったり技術難易度が高いレクチャーが多かったりと、初心者にとってはまだまだハードルが高いのが現状です。本連載がそのハードルを下げるものになれば幸いです。

テーマ選定の背景

本連載は、Databricks 社が展開している以下のコンテンツをベースにしています。
モバイル決済のログデータから、各決済が正常取引か不正取引かを判定しよう、というものです。

Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks
※翻訳まとめ

このコンテンツを選んだ理由は以下の通りです。

  • テーマが異常検知
    • どの業界でも普遍的なテーマ
    • 手元のデータだったらどうかという想像がしやすい
    • 継続的な改善が不可欠で、Databricksの利点が生きる (異常の定義は時々刻々と変わる)
  • 決定木のアルゴリズムを使う
    • モデルの説明性・透明性が高く、既存のルールとの比較が容易
    • リモデルに要する工数が低い
    • ドメイン知識を反映しやすい
  • データを入手しやすい
    • Kaggle に登録すればすぐに使える

公式ドキュメントでは、既存の異常検知ロジックをコードで記載、その結果を正解ラベルに用いて機械学習モデルを構築しています。実ビジネスでは最初にこのようなプロセスを踏むのが定石のようですが、今回利用するデータには通常/異常の判定情報が付与されています(詳細は連載#2で触れます)。そこでリモデルまでの流れの見通しをよくするために、本連載ではこれを正解ラベルとしています。

また、データ探索の一部に Azure Anomaly Detector (時系列データから異常を見つけるマネージドAIサービス) を利用してみたり、作成したモデル2種それぞれの使い方を考えてみたりと、ちょっとアレンジを加えています。

連絡目次

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

Azure Databricks とは

過去書いた記事のリンクです。

前置きが長くなりました。
では環境構築していきます。

ワークスペースの作成

以下の URL から Azure ポータルへログイン
https://azure.microsoft.com/ja-jp/
image.png

左上のをクリックし、検索窓に Databricks と入力し、候補に出てきた Azure Databricks をクリック
image.png

作成をクリック
image.png

以下のようにワークスペースを設定、作成をクリック
(ワークスペースの展開に2-3分を要します)
image.png

しばらくするとワークスペース展開完了の通知が届くので、リソースに移動をクリック
image.png

こちらの画面に遷移すればワークスペースの作成完了
2020-08-21_13h49_44.png

クラスタの作成

Cluster タブを選択し、Create Cluster をクリック
2020-06-26_12h08_24.png

任意でクラスタ名を設定し、Creater Cluster をクリック
有償版であれば詳細を設定できます。今回はオートターミネーションを 60分 に設定。

2020-06-28_11h18_52.png

しばらく待つと Status が Running に。これで完了。
2020-06-28_11h25_22.png

データのアップロード

以下サイトからデータをダウンロードします。※ Kaggle のユーザーアカウントが必要
Kaggle - Synthetic Financial Datasets For Fraud Detection
image.png

Data タブを選択し、Add Data をクリック
2020-06-26_12h01_49.png

Upload File → browse と進み、ダウンロードしたファイルを選択
2020-06-26_12h03_15.png

アップロードが完了するとこちらの画面に。デフォルトでは File Store にデータが格納されます。
Create Table with UI をクリック
2020-06-26_12h05_47.png

先ほど作成したクラスターを選択し、Preview Table をクリック
2020-06-26_12h53_28.png

デフォルトではアップロードしたファイル名がそのままテーブル名になっているので、これを sim_fin_fraud_detectionに変更します。
オプションは、First row is header (最初の行をカラム名として読み取り)と Infer Schema (各カラムのデータ型自動類推)にチェックを入れ、Create Table をクリック
2020-06-26_12h56_47.png

mlflow experiment 設定

機械学習のライフサイクル管理にとても便利な mlflow ですが、今回はモデルの比較という用途に絞って最低限の設定を行います。

Workspace → ユーザー名 → プルダウンで Createと進み、MLflow Experiment をクリック
2020-06-26_13h40_47.png

名称を任意で指定、Create をクリックします。Artifact Loacation は特別に指定しなくてOK
2020-06-26_13h41_41.png

以下の画面に遷移します。Experiment ID は Notebook の中で使うのでメモしておきます。
2020-06-26_13h42_29.png

Collaborative Notebook 作成

実際にコードを記載して分析ロジックをくみ上げたり、その中にメモを残したりする Collaborative Notebook を作成します。使い勝手は Jupyter Notebook にかなり近いです。

トップ画面から、Create a Blank Notebook をクリック
2020-06-28_12h17_08.png

任意で名称を変更、作成したクラスタを選択して、Create をクリック
2020-06-28_12h20_01.png

以下の画面になればOKです。
2020-06-28_12h21_05.png

使用方法

灰色のエリア(セル)にコードを書き、shift + enter を押すことで、セルが実行されます。
image.png

%md の後に文章を入力、セルを実行することで、markdown 形式で Notebook 上にメモを残すことができます。
image.png

セル中央部の下もしくは上にマウスカーソルを当て、+ をクリックすると新しいセルを追加できます。
image.png

セル左上のプルダウンより、対象のセルから上、もしくはセルより下のセルを実行できます。
image.png

セル上部の消しゴムアイコンから clear result を選択することで、実行結果をクリアできます。
image.png

クラスタが停止した場合は、クラスタアイコンから、Start Cluster をクリックします。
image.png

mlflow 初期設定

クラスタに mlflow をインストールするために、 Notebook 上に以下のコマンドを実行します。

[crayon-5fc1bc37af9d7208155045/]

= の後に、先ほど作成した mlflow experiment の id を入力、同じく実行します。

[crayon-5fc1bc37af9dd419433700/]

結果
MLflow Version: 1.9.1

以上の2つのセルを実行しておくことで、この Notebook 上で行うモデリング処理が mlflow に記録されるようになります。

備考:Notebook のインポート

Databricks の公式事例ページや Github には、そのまま活用できる Collaborative Notebook がアップロードされています。以下の方法でインポート可能です。

Workspace から User を選択し、以下のプルダウンから Import をクリックします。
2020-06-26_13h58_59.png

URL を選択し、インポートしたい Notebook の URL を張り付け、Import をクリックします
2020-06-26_14h00_20.png

まとめ

次回はインポートしたデータの中身を見ていきます。お楽しみに!

参考リンク

Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks
Detecting Financial Fraud at Scale with Decision Trees and MLflow on Databricks 翻訳まとめ
Azure Databricks: 1. リソースの作成
Azure Databricks で、他の Notebook を呼び出す、基礎: Hello World レベル
pysparkでデータハンドリングする時によく使うやつメモ


DatabricksでMLflowを使う② - 実験パラメータとメトリクスの可視化 -

はじめに

前回のこちらの記事ではDatabricks上でMLflowを使って機械学習モデルのトレーニングを行った履歴をノートブック上に統合するための方法について書きました。

DatabricksでMLflowを使う① - ノートブック上での実験トラッキング -

Databricksのマネージド型MLflowではUI上でトレーニングモデルのパラメータやメトリクスの比較、モデルのステージングなどを行うことができます。

この記事では実験ごとのパラメータやメトリクスを可視化して比較する部分について書いています。

実験ごとのUI画面

前回記事でノートブック上で実験ごとのメトリクスなどを確認した画面から、図中赤枠の部分をクリックします。
図2.png

実験ごとの情報がまとめられた画面に移ります。メトリクスやパラメータ、統合されているノートブックなどが表示されます。
図3.png

下のほうにスクロールすると、アーティファクトファイルとしてモデルや環境設定のデータ、実験結果のスクリーンショットなどが保存されています。
図4.png

ノートブックにMLflowを統合した場合は実験idが自動で割り振られて、実行結果ごとにrun_idが割り振られて管理されます。アーティファクトファイルはDBFS内のディレクトリに保存されます。

各実験の比較

ノートブックから「Runs」の右にある下図の赤枠部分をクリックします。
図5.png

各実験の一覧が表示されます。
image.png

比較したい実験を選択して「Compare」します。
image.png

パラメータやメトリクスが比較できます。それぞれのrun idをクリックすると前述の実験の個別ページに移動します。
image.png

下にスクロールするとパラメータやメトリクスを可視化して比較することができます。
image.png

おわりに

今回はDatabricksのUI上で実験パラメータやメトリクスを可視化して比較しました。
次回はトレーニングしたモデルを本運用に移行するためのステージングについて書きたいと思います。


DatabricksでMLflowを使う① - ノートブック上での実験トラッキング -

はじめに

本記事では、機械学習モデルのライフサイクル管理を行うオープンソースプラットフォームであるMLflowをDatabricksの環境下でトラッキングする方法について書きます。(Python3を想定しています)

Databricksのマネージド型MLflow

オープンソースであるMLflowではあらゆるMLライブラリや言語、デプロイメントツールで動作するように設計されていますが、実験のトラッキング用のサーバーを自前で用意する必要があります。

Databricksの環境下では、MLflowはマネージド型のサービスとして使うことができるのでトラッキング用のサーバーを別途用意する必要がありません。また、実験のトラッキング情報をノートブックに統合して管理することもできます。

今回は実験の情報をノートブックに統合してトラッキングする方法について書きます。

MLflowの使い方

Databricks上で使っているクラスターがRuntime MLの場合は最初から入っていますが、それ以外の場合はMLflowをインストールする必要があります。

[crayon-5fc1bc37b0598295726694/]

上記コマンドでインストールできます。そしてインポートします。

[crayon-5fc1bc37b059c460105599/]

MLflowではトラッキング開始のモジュールを呼び出してトラッキングを開始し、実験のパラメータやログを記録するモジュールで記録し、トラッキング終了のモジュールで一つの実験トラッキングが終了するという形になります。

終了し忘れ防止のためにもwithを使うのがいいと思います。
実装部分のコードのイメージとしては以下のようになります。

[crayon-5fc1bc37b059e268952711/]

パラメータ以外にもモデルの記録や実験中に出力した画像などもトラッキング先に保存することができます。
モデルの記録には、該当するライブラリのインストールが別途必要になります。
例)scikit-learnのモデル → mlflow.sklearn

実装

実際に実装してノートブック上でトラッキングしてみます。

サンプルデータセットと使用モデル

scikit-learnの糖尿病データセットを使います。
カラムの説明などはこちらにあります。
https://scikit-learn.org/stable/datasets/index.html#diabetes-dataset

今回のモデル作成にはElasticNet線形回帰モデルを使います。
調整パラメータとしてalphal1_ratioがあります。

ElasticNetについてはこちらの説明がわかりやすかったです。
https://aizine.ai/ridge-lasso-elasticnet/

セットアップ

各種ライブラリのインポートとサンプルデータセットの読み込み、データフレームの作成を行います。

[crayon-5fc1bc37b059f783863602/]

結果処理部分の実装

ElasticNetで回帰モデルを作ったときの説明変数の各係数をプロットして、それを画像としてドライバノードに保存する処理を定義しています。

[crayon-5fc1bc37b05a1915774936/]

実験処理部分の実装

alphal1_ratioを指定してモデルのトレーニングを行います。上で定義したplot_enet_descent_pathを呼び出してトラッキング先にログや画像を保存します。

[crayon-5fc1bc37b05a2469738553/]

実験

調整パラメータを与えて実験を行います。

[crayon-5fc1bc37b05a5622999489/]

出力結果は次のようになりました。
スクリーンショット 2020-08-25 17.00.47.png

画像を出力してみます。
スクリーンショット 2020-08-25 17.00.56.png

いくつかパラメータを変えて実験してみます。(合計4パターンほどやってみました)

実験が終わったら右上のあたりに[Runs]と書かれた部分を押します。
スクリーンショット 2020-08-25 17.08.27.png

設定したパラメータの値と出力されたメトリクスが実験ごとに記録されているのが確認できます。
スクリーンショット 2020-08-25 17.10.19.png

おわりに

今回はノートブック上でのモデルのトレーニングの結果をノートブックに統合するしてトラッキングする方法について書きました。
DatabricksではUI上でこちらの実験データを比較することができるようになっています。
続編として、UI上のモデル管理について書きたいと思います。


Spark + AI Summit 2020ダイジェスト Redash編

はじめに

本記事では Databricks Japan 株式会社主催「Spark + AI Summit 2020ダイジェスト」で紹介されたRedash についてご紹介いたします。

Redash とは

image.png

SQLでの分析結果を可視化し共有するオープンソース BI ツールです。SQLでクエリを作成することで、データソースからデータ取得可能です。
データサイエンティストやSQLアナリストのデータ活用を促進しています。
以下のような本番環境で利用されています。
image.png

DatabricksにRedashが加わる!

米国時間6月24日に Databricks社 が Redashの買収を発表しました。
これにより以下の項目でデータ活用の促進が期待されています。

■パワフルなSQLエディタ

  • スキーマを選択して利用
  • 再利用可能なクエリを作成
  • スケジュール実行やアラートの設定

■可視化と共有

  • 多様な可視化パターンと目的別のダッシュボード作成
  • ドラッグ&ドロップによる可視化グラフのサイズ変更
  • ダッシュボードのチーム間での共有によるナレッジシェア

■多種多様なデータソースに対してクエリ可能(SQL,NoSQL,big data,API)

まとめ

今後DatabricksにRedashが統合される予定です。今後のDatabricksの動向に期待です。