1. はじめに
このラボでは、 BigQuery を使用して、コンソールで表形式データを使用してモデルのトレーニングとサービングを行います。このサービスは、SQL ベースのモデル サービングとトレーニングに最適な追加機能です。BigQuery ML を使用すると、SQL クエリを使用して BigQuery で ML モデルを作成して実行できます。SQL のユーザーが使い慣れたツールを使用してモデルを構築し、データ移動の必要性を排除することで開発スピードを向上させ、より多くの人が ML を利用できるようにすることを目標としています。
学習内容
- BigQuery で利用可能なデータを確認する
- コンソールを使用して BigQuery で SQL を使用してモデルを作成する
- 作成したモデルの結果を評価する
- 作成したモデルを使用して、取引が不正であるかどうかを予測する
2. データについて
このデータセットには、2013 年 9 月にヨーロッパのカード所有者がクレジット カードで行った取引が含まれています。このデータセットには 2 日間に発生した取引が表示されます。284,807 件の取引のうち、492 件が不正行為です。このデータセットは非常に不均衡で、陽性クラス(不正行為)はすべてのトランザクションの 0.172% を占めています。
これには、PCA 変換の結果である数値入力変数のみが含まれます。申し訳ございませんが、機密上の理由から、元の特徴やデータに関する背景情報を提供することはできません。
- 特徴 V1、V2、... V28 は PCA で取得された主成分です。PCA で変換されていない特徴は「Time」と「Amount」のみです。
- 特徴「Time」には、各トランザクションとデータセットの最初のトランザクションの間の経過時間(秒単位)が含まれます。
- 特徴「Amount」はトランザクションの金額です。この特徴は、例に依存する費用感応度学習に使用できます。
- 特徴「Class」はレスポンス変数であり、不正行為の場合は値 1、それ以外の場合は値 0 を取ります。
このデータセットは、ビッグデータ マイニングと不正行為検出に関する Worldline と ULB(Université Libre de Bruxelles)の ML グループ(http://mlg.ulb.ac.be)の共同研究中に収集され、分析されました。
関連トピックに関する現在および過去のプロジェクトの詳細については、https://www.researchgate.net/project/Fraud-detection-5 と DefeatFraud プロジェクトのページをご覧ください。
引用:
Andrea Dal Pozzolo、Olivier Caelen、Reid A. Johnson と Gianluca Bontempi によるものです。Calibrating Probability with Undersampling for Unbalanced Classification. In Symposium on Computational Intelligence and Data Mining (CIDM), IEEE, 2015
Dal Pozzolo, Andrea; Caelen, Olivier; Le Borgne, Yann-Ael; Waterschoot, Serge; Bontempi, Gianluca. Learned lessons in credit card fraud detection from a practitioner perspective(実務家の視点からクレジット カードの不正使用検出で得られた教訓)、Expert systems with applications、41、10、4915 ~ 4928、2014 年、Pergamon
Dal Pozzolo, Andrea; Boracchi, Giacomo; Caelen, Olivier; Alippi, Cesare; Bontempi, Gianluca. Credit card fraud detection: a realistic modeling and a novel learning strategy(クレジット カード不正使用の検出: 現実的なモデリングと新しい学習戦略)、IEEE transactions on neural networks and learning systems、29、8、3784 ~ 3797、2018 年、IEEE
Dal Pozzolo, Andrea Adaptive Machine learning for credit card fraud detection ULB MLG PhD thesis(G. Bontempi)
Carcillo, Fabrizio; Dal Pozzolo, Andrea; Le Borgne, Yann-Aël; Caelen, Olivier; Mazzer, Yannis; Bontempi, Gianluca. Scarff: a scalable framework for streaming credit card fraud detection with Spark(Scarff: Spark を使用したクレジットカード不正使用のストリーミング検出のためのスケーラブルなフレームワーク)、Information fusion、41、182 ~ 194、2018 年、Elsevier
Carcillo, Fabrizio; Le Borgne, Yann-Aël; Caelen, Olivier; Bontempi, Gianluca. Streaming active learning strategies for real-life credit card fraud detection: assessment and visualization(実際のクレジット カード不正使用検出のためのストリーミング アクティブ ラーニング戦略: 評価と可視化)、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(ビッグデータとディープ ラーニングの最近の進歩)、pp 78-88、2019 年
Fabrizio Carcillo、Yann-Aël Le Borgne、Olivier Caelen、Frederic Oblé、Gianluca Bontempi クレジット カードによる不正行為の検出における教師なし学習と教師あり学習の組み合わせ 、Information Sciences、2019 年
3. 環境を設定する
この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順を行ってください。
- 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: 実行する
上記の実行コマンドを押してクエリを実行します

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

関連する列と出力を確認します。
複数のクエリを実行して、データの分散方法を把握できます。たとえば、次のようなものがあります。
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: モデル作成用のデータセットを作成する
- [エクスプローラ] パネル(左側)で、現在作業中のプロジェクトを選択し、その横にあるその他アイコンをクリックします。

- 右上にある [Create Dataset] をクリックします。

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

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: 実行する
上記のステートメントを実行します。完了するまでに数分かかります。
実行完了後の重要な点

- エクスプローラ パネルに作成されたモデルが表示される
- [クエリ結果] パネルに、SQL ステートメントと同様に ML SQL の処理にかかった時間が表示されます。
- [クエリ結果] パネルには、モデルに移動するためのリンクも表示されます。
ステップ 3: 探索する
[モデルに移動] をクリックするか、[エクスプローラ] パネルから、作成したモデルを探索します。タブには、作成されたモデル、トレーニング、評価などに関する情報が表示されます。結果を確認します

これについては、次のセクションで詳しく説明します。
ロジスティック回帰の詳細については、こちらをご覧ください。
7. モデル評価指標を調べる
このステップでは、モデルのパフォーマンスを確認します。
モデルのトレーニング ジョブが完了したら、トレーニングしたモデルをクリックして、[評価] タブを確認します。ここには多くの評価指標がありますが、ここでは roc_auc に焦点を当てます。
SELECT * FROM ML.EVALUATE(MODEL advdata.ulb_fraud_detection)
結果は次のようになります。roc_auc は通常、不均衡なデータセットでより重要になります。

結果の詳細を確認する。ML.Evaluate のドキュメントはこちらをご覧ください。
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)
)
出力は次のようになります(数値は異なる場合があります)。

この例では、ラベルの確率に関連付けられた金額が表示されています。このクラス列は、実際の結果を示しています。
ML.PREDICT の詳細については、こちらをご覧ください
9. クリーンアップ
このラボで作成したリソースをクリーンアップする場合は、左側の [エクスプローラ] パネルからデータセットを開きます。

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

詳細を確認するため、データセット名をもう一度入力します。この例では advdata になります。
10. 完了
おつかれさまです。これで、最初のモデルを作成し、教師あり ML を使用して評価と予測を行うことができました。
これで、ロジスティック回帰モデルの作成に必要な主な手順を理解しました。
次のステップ
予測に関わるその他の方法