コンソールを使用したクレジット カード トランザクションの不正行為検出のための BigQuery ML

1. はじめに

このラボでは、コンソールで BigQuery を使用して、表形式データによるモデルのトレーニングとサービングを行います。このサービスは、SQL ベースのモデルのサービングとトレーニングに追加されたお気に入りの機能です。BigQuery ML を使用すると、BigQuery で SQL クエリを使用して ML モデルを作成、実行できます。SQL のユーザーが使い慣れたツールを使用してモデルを構築し、データ移動の必要性を排除することで開発スピードを向上させ、より多くの人が ML を利用できるようにすることを目標としています。

学習内容

  • BigQuery で利用可能なデータを探索する
  • コンソールを使用して BigQuery で SQL を使用してモデルを作成する
  • 作成したモデルの結果を評価する
  • 作成したモデルを使用して、不正取引であるかどうかを予測

2. データについて

このデータセットには、2013 年 9 月にヨーロッパのカード所有者がクレジット カードによって行ったトランザクションが含まれています。このデータセットは、2 日以内に発生したトランザクションを示しています。284,807 件のトランザクションのうち 492 件の不正行為が確認されています。非常に不均衡があり、ポジティブなクラス(不正行為)が全取引の 0.172% を占めています。

これには、PCA 変換の結果である数値入力変数のみが含まれます。申し訳ございませんが、機密性保持の問題により、本来の機能と、データに関する詳しい背景情報をお伝えすることはできかねます。

  1. 特徴量 V1、V2、... V28 は、PCA で取得される主要コンポーネントであり、PCA で変換されていない唯一の特徴量は「Time」です。[金額]を選択します
  2. 特徴「時間」には、各トランザクションからデータセット内の最初のトランザクションまでの経過時間(秒)が含まれます。
  3. Feature の「Amount」はトランザクションの Amount です。この機能は、たとえば依存するコスト感覚学習に使用できます。
  4. 特徴量の「Class」はレスポンス変数です。不正行為の場合は値 1、それ以外の場合は 0 を取ります。

このデータセットは、Worldline と ULB(Université Libre de Bruxelles)の Machine Learning Group(http://mlg.ulb.ac.be)によるビッグデータ マイニングと不正行為の検出に関する研究共同で収集され、分析されました。

関連トピックに関する現在および過去のプロジェクトの詳細については、https://www.researchgate.net/project/Fraud-detection-5DefeatFraud プロジェクトのページで確認できます。

引用:

Andrea Dal Pozzolo、Olivier Caelen、Reid A.Johnson、Gianluca Bontempi など。不均衡な分類のためにアンダーサンプリングによって確率を調整する。In Symposium on Computational Intelligence and Data Mining(CIDM)、IEEE、2015

Dal Pozzolo、AndreaCaelen、OlivierLe Borgne、Yann-AelWaterschoot、SergeBontempi、Gianluca。LearnedLesson in an credit card 委員会(クレジット カード不正使用の検出から実務担当者の視点から)、Expert Systems with apps、41,10,4915-4928,2014、Pergamon

Dal Pozzolo、AndreaBoracchi、GiacomoCaelen、OlivierAlippi、CesareBontempi、Gianluca。クレジット カード不正使用の検出: 現実的なモデリングと新しい学習戦略、IEEE トランザクション(ニューラル ネットワークおよび学習システムにおけるトランザクション)29,8,3784 ~ 3797,2018,IEEE

Dal Pozzolo 氏、Andrea 氏、Adaptive Machine learning for credit card investigation の ULB MLG PhD 論文(G.Bontempi)

Carcillo、FabrizioDal Pozzolo、AndreaLe Borgne、Yann-AëlCaelen、OlivierMazzer、YannisBontempi、Gianluca。Scarff: a スケーラブル フレームワークで、Spark によるクレジット カード不正検出のストリーミング、Information fusion、41、182-194、2018 年、Elsevier

Carcillo、FabrizioLe Borgne、Yann-AëlCaelen、OlivierBontempi、Gianluca。Streaming Active Learning strategy for real-life credit card abuse detection:assess and visibility: International Journal of Data Science and Analytics、5,4,285 ~ 300,2018、Springer International Publishing

Bertrand Lebichot、Yann-Aël Le Borgne、Liyun He、Frederic Oblé、Gianluca Bontempi Deep-Learning Domain Adaptation Techniques for Credit Cards Fraud Detection、INNSBDDL 2019: Recent Advances in Big Data and Deep Learning、8 pp 2018

Fabrizio Carcillo、Yann-Aël Le Borgne、Olivier Caelen、Frederic Oblé、Gianluca Bontempi Combining Unsigned and Supervised Learning in Credit Card Fraud Detection Information Sciences、2019 年

3. 環境を設定する

この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順に沿って操作してください。

  1. BigQuery API を有効にする

まだ有効になっていない場合は、[BigQuery] に移動して [有効にする] を選択します。モデルの作成に必要になります。

4. データを確認する

ステップ 1: BigQuery に移動する

https://cloud.google.com/console で BigQuery を探します。

ステップ 2: クエリを使用してデータを探索する

エディタに以下の SQL クエリを入力して、一般公開データセットのデータを確認します。

SELECT * FROM `bigquery-public-data.ml_datasets.ulb_fraud_detection` LIMIT 5

ステップ 3: 実行する

上の [Run] コマンドを使用してクエリを実行します

c670e136ecd58236.png

結果

[クエリ結果] パネルに次のように表示されます。データは異なる場合があります

be082fb135879158.png

関連する列と出力を確認します。

複数のクエリを実行して、データの分散状況を把握できます。たとえば

SELECT count(*) FROM `bigquery-public-data.ml_datasets.ulb_fraud_detection` 
where Class=0;
SELECT count(*) FROM `bigquery-public-data.ml_datasets.ulb_fraud_detection` 
where Class=1;

5. 出力データセットを作成する

ステップ 1: モデル作成用のデータセットを作成する

  1. [エクスプローラ] パネルで、左側で現在取り組んでいるプロジェクトを選択し、隣の 3 つの点をクリックします。

7618699754e066bd.png

  1. 右上の [データセットを作成] をクリックします。

17851cc9db05dc1.png

  1. データセット名、保持、ロケーションなどの詳細を入力します。使用する設定

b8b6731408f61d57.png

6. ロジスティック回帰モデルの作成

ステップ 1: ステートメントを作成する

[クエリ] ウィンドウで、モデル作成のための以下のクエリを入力します。この説明で主なオプションを理解してください。こちらの リンクで説明されています。

INPUT_LABEL_COLS は予測ラベルを示します。

AUTO_CLASS_WEIGHTS は不均衡なデータセットに使用されます

MODEL_TYPE は、使用するアルゴリズムを示します。この場合はロジスティック回帰です。

DATA_SPLIT_Method はトレーニング データとテスト用データの分割を示します

CREATE OR REPLACE MODEL advdata.ulb_fraud_detection 
TRANSFORM(
    * EXCEPT(Amount),
    SAFE.LOG(Amount) AS log_amount
)
OPTIONS(
    INPUT_LABEL_COLS=['class'],
    AUTO_CLASS_WEIGHTS = TRUE,
    DATA_SPLIT_METHOD='seq',
    DATA_SPLIT_COL='Time',
    MODEL_TYPE='logistic_reg'
) AS

SELECT 
 *
FROM `bigquery-public-data.ml_datasets.ulb_fraud_detection`

ステップ 2: 実行する

上記のステートメントを実行します。完了するまでに数分かかります

実行完了後の重要な注意事項

3385a54d3907443e.png

  1. [エクスプローラ] パネルにモデルが作成され
  2. [クエリ結果] パネルには、他の SQL ステートメントと同様に、ML SQL の処理にかかった時間が表示されます。
  3. [クエリ結果] パネルには、探索するための [モデルに移動] リンクもあります。

ステップ 3: 探索

[Go to Model] をクリックするか [エクスプローラ] パネルで、作成されたモデルを調べます。このタブには、作成したモデル、トレーニング、評価などに関する情報が表示されます。結果を確認する

b350f1b94835f2d1.png

これについては、次のセクションで詳しく説明します。

ロジスティック回帰について詳しくは、こちらをご覧ください。

7. モデル評価指標の探索

このステップでは、モデルのパフォーマンスを確認します。

モデルのトレーニング ジョブが完了したら、トレーニングしたモデルをクリックし、[評価] タブを確認します。ここでは多数の評価指標があります。ここでは 1 つに注目します :roc_auc

 SELECT * FROM ML.EVALUATE(MODEL advdata.ulb_fraud_detection)

結果は次のようになります。一般的に、データセットが不均衡な場合は roc_auc の重要度が高くなる

c3c80286082dc336.png

結果の詳細を把握するためML.evaluate のドキュメントはこちらをご覧ください。

適合率と再現率

ROC 曲線と AUC

8. 特定の時間のクラスを予測する

[クエリを新規作成] をクリックし、以下の SQL を実行します。ここに特定された時刻に不正な金額が入力されています。予測が機能するかどうかを評価し

SELECT Amount, predicted_class_probs, Class
FROM ML.PREDICT( MODEL advdata.ulb_fraud_detection,
 (SELECT * FROM `bigquery-public-data.ml_datasets.ulb_fraud_detection` WHERE Time = 85285.0)
)

出力は次のようになります(数値は異なる場合があります)

676fc8accdab2f6c.png

この例では、ラベルの関連する確率とともに金額を表示しています。この例のクラス列は、実際の結果を示しています。

ML.PREDICT についてさらに詳しく学びますこちらを参照

9. クリーンアップ

このラボで作成したリソースをクリーンアップする場合は、左側の [エクスプローラ] パネルからデータセットを開きます。

e7d18fadd2b781be.png

右上にある [データセットを削除] をクリックします。

b47bc819869bed6c.png

データセット名をもう一度入力して詳細を確認します。この例では advdata です。

10.完了

これで、教師あり ML を使用して最初のモデルを作成し、評価と予測を行うことができました。

ロジスティック回帰モデルを作成するために必要な主な手順について学習しました。

次のステップ

予測に関連するその他の方法も

リファレンス ドキュメント