チェックポイント
Create a dataset
/ 25
Load Data to BigQuery Tables
/ 25
Explore and Investigate the Data with BigQuery
/ 10
Prepare Your Data
/ 10
Train an Unsupervised Model to Detect Anomalies
/ 10
Train a Supervised Machine Learning Model
/ 10
Predict Fraudulent Transactions on Test Data
/ 10
Google Cloud での ML を使用した金融取引の不正行為検出
GSP774
概要
このラボでは、金融取引データにおける不正行為分析について学びます。BigQuery ML を活用して、特徴量エンジニアリングや ML の手法を応用し、不正行為を検出します。
ここでは、一般公開されている金融取引データを使用します。データには次の列が含まれます。
- トランザクションのタイプ
- 送金額
- 送金元と送金先のアカウント ID
- 送金前後の残高
- トランザクションの相対時間(30 日間における開始時点からの時間数)
-
isfraud
フラグ
ターゲット列である isfraud には、不正なトランザクションのラベルが含まれています。こうしたラベルを使用して、不正行為検出のための教師ありモデルのトレーニングや、教師なしモデルを適用した異常の検出を行います。
The data for this lab is from the Kaggle site. If you do not have a Kaggle account, it's free to create one.
学習内容:
- BigQuery にデータを読み込んで確認する。
- BigQuery で新しい特徴を作成する。
- 教師なしモデルを構築して異常を検出する。
- (ロジスティック回帰およびブーストツリーを伴う)教師ありモデルを構築して不正行為を検出する。
- モデルを評価、比較して、チャンピオンを選定する。
- 選択したモデルを使用して、テストデータで不正行為の可能性を予測する。
このラボでは、特徴量エンジニアリング、モデルの開発、評価、予測に BigQuery インターフェースを使用します。
Participants that prefer Notebooks as the model development interface may choose to build models in AI Platform Notebooks instead of BigQuery ML. Then at the end of the lab, you can also complete the optional section. You can import open source libraries and create custom models or you can call BigQuery ML models within Notebooks using BigQuery magic commands.
If you want to train models in an automated way without any coding, you can use Google Cloud AutoML which builds models using state-of-the-art algorithms. The training process for AutoML would take almost 2 hours, that's why it is recommended to initiate it at the beginning of the lab, as soon as the data is prepared, so that you can see the results at the end. Check for the "Attention" phrase at the end of the data preparation step.
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. ラボに必要なデータファイルをダウンロードする
- 次のコマンドを実行して、プロジェクトにデータファイルをダウンロードします。
- プロンプトが表示されたら、[承認] をクリックします。
- ZIP ファイルをアップロードしたら、
unzip
コマンドを実行します。
1 つのファイルが展開されます。
- このファイルを後から簡単に参照できるように、ファイル名で環境変数を作成します。
- 次のコマンドを実行してラボのプロジェクト ID を確認し、プロジェクト ID をコピーします。
- プロジェクト ID 向けの環境変数を作成し、<project_id> をコピーしたプロジェクト ID に置き換えます。
- 次のコマンドを実行して、Cloud Shell 内に
finance
という BigQuery データセットを作成し、このラボ用のテーブルとモデルを保存します。
上記のコマンドが正常に実行されると、次の結果が出力されます。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 2. Cloud Storage にデータセットをコピーする
- 次のコマンドを実行し、名前を一意のプロジェクト ID とした Cloud Storage バケットを作成します。
- 新しく作成したバケットに CSV ファイルをコピーします。
タスク 3. データを BigQuery テーブルに読み込む
BigQuery にデータを読み込むには、BigQuery ユーザー インターフェース、または、Cloud Shell のコマンド ターミナルを使用します。次のいずれかのオプションを選択し、データを読み込みます。
オプション 1: コマンドライン
- 次のコマンドを実行して、テーブル
finance.fraud_data
にデータを読み込みます。
オプション --autodetect
が、テーブルのスキーマ(変数の名前やタイプなど)を自動的に読み込みます。
オプション 2: BigQuery ユーザー インターフェース
Cloud コンソールにて BigQuery を開くことで、Cloud Storage バケットからデータを読み込むことができます。
- [エクスプローラ] セクションで、プロジェクト ID の横にある [ノードを開く] をクリックします。
- finance データセットの横にある [アクションを表示] をクリックし、[テーブルを作成] をクリックします。
-
[テーブルを作成] のポップアップ ウィンドウで、
Source
を Google Cloud Storage に設定し、Cloud Storage バケット内の生の CSV ファイルを選択します。 -
テーブル名に fraud_data と入力し、[スキーマ] で [自動検出] オプションを選択すると、未加工ファイルの 1 行目から自動的に変数名が読み込まれます。
-
[テーブルを作成] をクリックします。
読み込みプロセスには 1~2 分かかる場合があります。
- 完了したら、BigQuery の [エクスプローラ] パネルビューで、finance データセットをクリックして fraud_data テーブルを見つけ、メタデータの確認とテーブルデータのプレビューを行います。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 4. BigQuery でデータを確認し、調査する
まだ Cloud コンソールで BigQuery を開いていない場合は、今すぐ開いてください。
- ナビゲーション メニュー > [BigQuery] をクリックします。
次に、データを確認してより理解を深め、ML モデルで使用できるように準備を整えます。
-
クエリエディタに以下のクエリを追加し、[実行] をクリックして、データを確認します。
-
[クエリを新規作成] をクリックして、次のクエリを開始します。こうすることで、完了したときに簡単に結果を比較できるようになります。
- 各トランザクション タイプにおける不正なトランザクション数はどのくらいですか?
1 = 「はい」として、isFraud
列を確認します。
- 以下のコマンドを実行して、トランザクション タイプが TRANSFER と CASH_OUT である不正行為の割合を確認します(
isFraud
の数量が表示されます)。
- 以下のコマンドを実行して、トランザクション最高額のトップ 10 を確認します。
ここまでの振り返り:
- トランザクションの中に、気になる残高のものはありましたか?取引元口座の残高がゼロのとき、どのようにトランザクションを行いますか?送金後も送金先口座の最新の残高がゼロのままであるのはなぜですか?次のステップでは、このようなケースにフラグを立て、新しい特徴として追加します。
- データが不均衡だと思いますか?不正なトランザクションの割合は 1% よりもはるかに少ないでしょうか?総観測数を
isfraud
数で割ると、不正なトランザクションの割合が判明します。
次のセクションでは、こうした疑問への対処方法と、ML モデルでの使用に対応したデータの改善について説明します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 5. データを準備する
新しい特徴を追加し、不要なトランザクション タイプをフィルタして、アンダーサンプリングの適用によりターゲット変数、isFraud
の割合を増加させることで、モデリングのデータを改善することが可能です。
分析フェーズでの結果に基づくと、分析が必要なトランザクション タイプは "TRANSFER"
と "CASH_OUT"
のみなので、残りはフィルタします。また、既存の数値から新しい変数を計算することもできます。
データセットには、不正行為として極めて不均衡なターゲットが含まれています(元データの不正率は 0.0013%)。不正行為では稀な事象が発生することも珍しくありません。ML アルゴリズムにとって不正行為のパターンをより明確にし、結果を簡単に解釈できるようにするため、データを階層化し、不正行為フラグの割合を増加させます。
- 次のステップでは、新しいクエリを作成して以下のコードを追加し、データへの新しい特徴の追加、不要なトランザクション タイプのフィルタ、アンダーサンプリングによる非不正トランザクションのサブセットの選択を行います。
-
[実行] をクリックしてクエリを実行します。
-
ランダムサンプルを 20% として、TEST のデータテーブルを作成します。
- [実行] をクリックしてクエリを実行します。
このデータは分けて保存され、トレーニングには含まれません。最終段階でモデルのスコアリングを行う際に使用します。
BigQuery ML と AutoML では、トレーニングデータと検証データの両方でエラー率をテストして、過学習を防ぐために、ML アルゴリズムを使用する際に、モデルのデータを TRAIN と VALIDATE に自動的にパーティショニングします。
- 次のコマンドを実行してサンプルデータを作成します。
モデリングのために作成したサンプルデータには、約 228,000 行のバンキング トランザクションが含まれています。
特に AutoML や AI Platform のようなさまざまな環境でモデルを比較して、整合性を持たせたいときなどには、手動でデータセットを TRAIN、VALIDATE、TEST にパーティショニングすることも可能です。
ここまでの振り返り:
- データ内にラベル付けされていない不正行為のイベントがある場合に、どのように対処しますか?ラベル付けされていないトランザクションがある場合は、教師なしモデリング手法を使用することで、K 平均法クラスタリングのようなデータの異常を分析することが可能です。次のセクションでは、この手法に挑戦します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 6. 教師なしモデリングをトレーニングして異常を検出する
教師なしの手法は、異常なパターンを持つデータを確認する目的として、不正行為の検出ではよく使用されます。また、不正行為のラベルがない場合や、イベントレートが非常に低く、発生件数の低さから教師ありモデルを構築できない場合にも役に立ちます。
このセクションでは、K 平均法クラスタリングのアルゴリズムを使用してトランザクションのセグメントを作成し、各セグメントを分析して、異常のあるセグメントを検出します。
- 新しいクエリを作成し、BigQuery で CREATE or REPLACE MODEL で始まる次のコードを実行して、model_type を
kmeans
に設定します。
これにより、fraud_data_model
から選択した変数を使用した 5 つのクラスタを持つ model_unsupervised
という K 平均法モデルが作成されます。
モデルのトレーニングが完了すると、Finance > Models に表示されます。
- model_unsupervised をクリックして、[評価] タブをクリックします。
K 平均法アルゴリズムが、centroid_id という出力変数を作成します。各トランザクションに、centroid_id が割り当てられます。類似のトランザクションが、アルゴリズムによって同じクラスタに割り当てられます。
Davies-Bouldin インデックスは、クラスタがどれほど均質であるかを示す指標です。値が低いほどクラスタ間の距離が離れており、望ましい結果であるということです。
数値特徴量は、[評価] タブでセントロイド(クラスタ)ごとに棒グラフで表示されています。棒グラフの横の数字は、各クラスタ内の変数の平均値を示しています。ベスト プラクティスとして、クラスタリングの距離計算で大きい数字や外れ値の影響を避けるために、入力変数を標準化するか、バケットにグループ化することをおすすめします。わかりやすくするために、この演習ではオリジナルの変数を使用します。
入力として使用されるカテゴリ変数は、別に表示されます。以下の各セグメントで、TRANSFER と CASH_OUT のトランザクションの分布を確認することができます。
ご自身のモデルではグラフの画面表示が異なる場合がありますが、より小さなセグメントに注目して、分布の解釈に取り組んでください。
ターゲット変数の isFraud
は、この教師なしモデルでは使用されていません。この演習では、プロファイリングのために変数を保存し、各クラスタ内での不正行為の分布の確認に使用することが推奨されています。
-
このモデルを使用してテストデータ (
fraud_data_test
) をスコアリングし、各centroid_id
の不正なイベント数を確認します。クラスタリングのアルゴリズムが、観測結果により同種のグループを作成します。このクエリでは、ML.PREDICT
がモデルを呼び出し、test data 内の各トランザクションのcentroid_id
を生成します。 -
新しいクエリで次のコードを実行します。
ここまでの振り返り:
- 最も興味深いと感じたクラスタはどれですか?おそらくエラー量の多い小規模なクラスタでしょう。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 7. 教師あり ML モデルをトレーニングする
これで、BigQuery ML を使用した教師ありモデルの構築を開始する準備が整ったので、不正なトランザクションが含まれている可能性を予測していきます。まず、シンプルなモデルから始めます。BigQuery ML を使用して、分類のために 2 項ロジスティック回帰モデルを作成します。このモデルは、トランザクションが不正であるか否かを予測しようと試みます。
すべての非数値列の変数(カテゴリ変数)に対し、BigQuery ML は自動的にワンホット エンコーディング変換を行います。この変換により、変数内の固有の値ごとに個別の特徴が生成されます。この演習では、BigQuery ML は自動的に TYPE の変数に対してワンホット エンコーディングを行います。
- BigQuery で以下の SQL ステートメントを実行し、最初の教師ありモデルを作成します。
準備が整うと、Finance > Models に model_supervised_initial
テーブルが追加で表示されます。
モデルが作成されると、BigQuery コンソール UI からモデルのメタデータ、トレーニング、評価の統計情報を取得することができます。
- 左のサイドパネルの model_supervised_initial をクリックし、[詳細]、[トレーニング]、[評価]、[スキーマ] タブをクリックして、より詳細な情報を確認します。
[評価] タブでは、分類モデルに特化したさまざまなパフォーマンス指標を確認することができます。
ML では、モデルのパフォーマンスに対する理解が主要なトピックとなっています。分類のためにロジスティック回帰モデルを実行している場合は、以下の主なコンセプトが理解の助けになります。
- 適合率: 適合率は、選択した正事例でモデルが正しかった場合の割合を表します。
- 再現率: この指標は、考えられるすべての実際の正のラベルのうち、どの程度をモデルが正しく識別したかを表します。
- 精度: 精度とは、正しい予測の全体的な割合です。
- f1 スコア: モデルの精度を表す尺度です。f1 スコアは適合率と再現率の調和平均を表します。0 から 1 の範囲で、数値が高いほど良いとされています。
- ROC、AUC: ROC 曲線の下の面積です。さまざまなしきい値を考慮することで、バイナリ分類器の識別能力に関する情報を得ることができます。0 から 1 の範囲で、数値が高いほど良いとされています。中程度のモデルであれば、ROC 値は 0.7 以上が期待されます。
こちらの Wikipedia ページのグラフが、適合率と再現率のコンセプトをうまく説明しています。
この回帰モデルの ROC 値は、非常に高くなっています。異なる確率のしきい値で結果をテストすることで、精度への理解を深めることができます。
それでは、モデル内で最も影響がある特徴について確認していきます。
- 次のクエリを実行して、特徴の重要度を確認していきます。
変数のスケーリングへの影響を除去するために、重みは標準化オプションを使用して標準化されています。より重い方が重要度が高くなっています。ターゲットとの相関または逆相関関係に基づいて、重みの記号が方向を示します。
ここまでの振り返り:
- 変数の中でも、どの 2 つが最も重要だと思いますか?
oldbalanceOrig
とtype
が、最も重要な変数です。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
タスク 8. モデルを改善する
それでは、楽しい演習に移ります。新しいモデルを 1 つ作成し、2 つのモデルをトレーニングして、精度を高めていきます。
- 次のコマンドを実行して、新しい勾配ブーストモデルを作成します。
次に、作成した 2 つのモデルを比較して、より良い方を選びます。
タスク 9. 教師あり ML モデルを評価する
新しい変数を追加して、既存のロジスティック回帰モデルを改善します。
モデルを作成したら、ML.EVALUATE
関数を使用して、分類器のパフォーマンスを評価します。ML.EVALUATE
関数は、結果または予測された値を実際のデータと照らし合わせて評価します。
- 次のクエリを実行して、2 つのモデルの結果を 1 つのテーブルに追加し、新しいデータのスコアリングのためにチャンピオン モデルを選択します。
ここまでの振り返り:
- 最高のパフォーマンスを見せたのはどのモデルですか? まずは、回帰モデルを実行しました。それから、変数を追加し、回帰(教師ありモデル)を使用して新しいモデルのトレーニングを行いました。最後に、ブーストされたツリーを 2 つ目の教師ありモデルとして使用しました。パフォーマンス表を比較すると、ブーストされたツリーモデルの方がパフォーマンスが優れています。新たに追加の特徴を足すことで、モデルの精度が向上しました。
タスク 10. テストデータで不正なトランザクションを予測する
ML の最後のステップとして、新しいデータセットの結果をチャンピオン モデルを使用して予測していきます。
BQML 内の ML アルゴリズムが、predicted_<target_name\>_probs
というネストされた変数を作成します。この変数には、モデルによる判断に対する確率スコアが含まれます。モデルによる判断は、「不正」または「正当」のいずれかとなります。
- BigQuery で次のクエリを実行し、このラボの初めに作成したテストデータに対する不正なトランザクションの予測を確認します。以下の WHERE 文で、確率スコアが最も高いトランザクションが判明します。
ここまでの振り返り:
- 予測を行ったトランザクションにおける不正行為の割合はどの程度ですか?3% 未満です。
- テストデータ全体と比べ、予測を行った一連の行では、どの程度イベントレートが増加していますか?95% 以上です。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
お疲れさまでした
次のステップ
- ML については、Google Developers の集中講座で詳細をご確認ください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 10 月 12 日
ラボの最終テスト日: 2023 年 10 月 12 日
Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。