1. 概要
このラボでは、AI Platform Notebooks を使用して不正なトランザクションを識別するモデルを構築してトレーニングし、Explainable AI SDK を使用してモデルの予測を理解します。不正検出は、金融サービスに固有の異常検出の一種であり、ML モデルには本質的に不均衡なデータセットとモデルの結果を説明する必要があるという興味深い課題があります。
学習内容
次の方法を学習します。
- 不均衡なデータセットを処理する
- AI Platform Notebooks で tf.keras を使用して不正行為検出モデルを構築して評価する
- ノートブック内から Explainable AI SDK を使用して、モデルがトランザクションを不正行為として分類した理由を理解する
- 説明付きでモデルを AI Platform にデプロイし、デプロイされたモデルで予測と説明を取得する
このラボを Google Cloud で実行するための総費用は約 $1 です。
2. 不正行為の検出が必要な理由
アノマリ検出は、データ内の外れ値を特定するための一連のルールベースのステートメントを記述することが困難な場合が多いため、ML の候補として適しています。不正行為の検出は異常検出の一種であり、ML に関して次の 2 つの興味深い課題があります。
- 非常に不均衡なデータセット: 異常は異常であるため、多くはありません。ML はデータセットのバランスが取れている場合に最適に動作するため、外れ値がデータの 1% 未満の場合、処理が複雑になることがあります。
- 結果の説明が必要: 不正行為を検出する場合は、システムが不正行為としてフラグを設定した理由を知りたいでしょう。説明可能性ツールは、この点で役立ちます。
3. 環境をセットアップする
この Codelab を実行するには、課金が有効になっている Google Cloud Platform プロジェクトが必要です。プロジェクトを作成するには、こちらの手順を行ってください。
ステップ 1: Cloud AI Platform Models API を有効にする
Cloud コンソールの AI Platform の [モデル] セクションに移動し、まだ有効になっていない場合は [有効にする] をクリックします。

ステップ 2: Compute Engine API を有効にする
まだ有効になっていない場合は、[Compute Engine] に移動して [有効にする] を選択します。これはノートブック インスタンスを作成するために必要です。
ステップ 3: AI Platform Notebooks インスタンスを作成する
Cloud コンソールの AI Platform Notebooks セクションに移動し、[新しいインスタンス] をクリックします。次に、GPU を使用しない TensorFlow Enterprise 2.1 インスタンス タイプを選択します。

デフォルトのオプションを使用して、[作成] をクリックします。インスタンスが作成されたら、[JUPYTERLAB を開く] を選択します。

インスタンスを開いたら、ランチャーから Python 3 ノートブックを選択します。

ステップ 4: Python パッケージをインポートする
新しいセルを作成し、この Codelab で使用するライブラリをインポートします。
import itertools
import numpy as np
import pandas as pd
import tensorflow as tf
import json
import matplotlib as mpl
import matplotlib.pyplot as plt
import explainable_ai_sdk
from sklearn.utils import shuffle
from sklearn.metrics import confusion_matrix
from sklearn.preprocessing import StandardScaler
from tensorflow import keras
from explainable_ai_sdk.metadata.tf.v2 import SavedModelMetadataBuilder
4. データのダウンロードと処理
モデルのトレーニングには、Kaggle のこの合成データセットを使用します。元のデータセットには 630 万行が含まれており、そのうち 8, 000 行が不正な取引です。これはデータセット全体のわずか 0.1% です。
ステップ 1: Kaggle データセットをダウンロードして Pandas で読み取る
Kaggle データセットは Google Cloud Storage で使用できます。Jupyter ノートブックで次の gsutil コマンドを実行してダウンロードできます。
!gsutil cp gs://financial_fraud_detection/fraud_data_kaggle.csv .
次に、データセットを Pandas DataFrame として読み取り、プレビューします。
data = pd.read_csv('fraud_data_kaggle.csv')
data = data.drop(columns=['type'])
data.head()
プレビューには次のように表示されます。

ステップ 2: 不均衡なデータを考慮する
前述のように、現時点ではデータセットに不正行為以外の例が 99.9% 含まれています。データをそのまま使用してモデルをトレーニングすると、データの 99.9% が不正でないケースであるため、すべてのトランザクションが不正でないと推測することで、モデルの精度が 99.9% に達する可能性があります。
不均衡なデータを処理する方法はいくつかあります。ここでは、ダウンサンプリングと呼ばれる手法を使用します。ダウンサンプリングとは、トレーニングでメジャー クラスのほんの一部の割合のみを使用することを意味します。この場合、「不正行為なし」はデータの 99.9% を占めているため、多数派クラスになります。
データセットをダウンサンプリングするには、約 8,000 件の不正行為の例と、約 31,000 件の不正行為以外のケースのランダム サンプルを取得します。これにより、結果のデータセットには 25% の不正使用ケースが含まれるようになります(以前は 0.1% でした)。
まず、データを 2 つの DataFrame(不正行為用と不正行為以外用)に分割します(これは、Codelab の後半でモデルをデプロイするときに使用します)。
fraud = data[data['isFraud'] == 1]
not_fraud = data[data['isFraud'] == 0]
次に、不正行為以外のケースのランダム サンプルを取得します。不正行為と不正行為以外の取引の比率が 25:75 になるように、0.005% を使用します。これにより、データを元に戻してシャッフルできます。わかりやすくするために、トレーニングで使用しない列もいくつか削除します。
# Take a random sample of non fraud rows
not_fraud_sample = not_fraud.sample(random_state=2, frac=.005)
# Put it back together and shuffle
df = pd.concat([not_fraud_sample,fraud])
df = shuffle(df, random_state=2)
# Remove a few columns (isFraud is the label column we'll use, not isFlaggedFraud)
df = df.drop(columns=['nameOrig', 'nameDest', 'isFlaggedFraud'])
# Preview the updated dataset
df.head()
これで、データセットのバランスが大幅に改善されました。ただし、モデルの精度が 75% 前後で収束している場合は、すべてのケースで「不正行為ではない」と推測している可能性が高くなります。
ステップ 3: データをトレーニング セットとテストセットに分割する
モデルを構築する前に行う最後の作業は、データの分割です。80/20 のトレーニング データとテストデータの分割を使用します。
train_test_split = int(len(df) * .8)
train_set = df[:train_test_split]
test_set = df[train_test_split:]
train_labels = train_set.pop('isFraud')
test_labels = test_set.pop('isFraud')
*E. A. Lopez-Rojas , A. Elmir、および S. Axelsson. 「PaySim: A financial mobile money simulator for fraud detection」(PaySim: 詐欺行為検出のための金融モバイル マネー シミュレータ)。In: The 28th European Modeling and Simulation Symposium-EMSS, Larnaca, Cyprus. 2016
5. tf.keras モデルを構築、トレーニング、評価する
ここでは、TensorFlow の tf.keras API を使用して構築します。このセクションのモデルコードは、TensorFlow ドキュメントのこちらのチュートリアルに基づいています。まずデータを正規化し、次に class_weight パラメータを使用して残りのデータ不均衡を考慮しながら、モデルを構築してトレーニングします。
ステップ 1: データを正規化する
数値データでモデルをトレーニングする場合は、特に各列の範囲が異なる場合に、データを正規化することが重要です。これにより、トレーニング中に損失が爆発するのを防ぐことができます。データは次のように正規化できます。
scaler = StandardScaler()
train_set = scaler.fit_transform(train_set) # Only normalize on the train set
test_set = scaler.transform(test_set)
# clip() ensures all values fall within the range [-5,5]
# useful if any outliers remain after normalizing
train_set = np.clip(train_set, -5, 5)
test_set = np.clip(test_set, -5, 5)
次に、正規化されたデータをプレビューします。
train_set
ステップ 2: クラスの重みを決定する
データをダウンサンプリングする際に、不正行為以外の取引のサブセットを保持して、それらの取引に関する情報を失わないようにしたため、データは完全にバランスが取れていません。データセットは依然として不均衡であり、不正な取引を正しく識別することが最も重要であるため、モデルでデータセット内の不正な例により大きな重みを付ける必要があります。
Keras の class_weight パラメータを使用すると、データセットでの出現頻度に基づいて、各クラスのサンプルに与える重みを正確に指定できます。
weight_for_non_fraud = 1.0 / df['isFraud'].value_counts()[0]
weight_for_fraud = 1.0 / df['isFraud'].value_counts()[1]
class_weight = {0: weight_for_non_fraud, 1: weight_for_fraud}
この変数は、次のステップでモデルをトレーニングするときに使用します。
ステップ 3: モデルのトレーニングと評価を行う
ここでは、Keras Sequential Model API を使用してモデルを構築します。この API を使用すると、モデルをレイヤのスタックとして定義できます。トレーニング中に追跡する指標がいくつかあります。これらの指標は、データセット内の各クラスでモデルがどのように機能しているかを把握するのに役立ちます。
METRICS = [
keras.metrics.TruePositives(name='tp'),
keras.metrics.FalsePositives(name='fp'),
keras.metrics.TrueNegatives(name='tn'),
keras.metrics.FalseNegatives(name='fn'),
keras.metrics.BinaryAccuracy(name='accuracy'),
keras.metrics.Precision(name='precision'),
keras.metrics.Recall(name='recall'),
keras.metrics.AUC(name='auc'),
]
def make_model(metrics = METRICS):
model = keras.Sequential([
keras.layers.Dense(
16, activation='relu',
input_shape=(train_set.shape[-1],)),
keras.layers.Dropout(0.5),
keras.layers.Dense(1, activation='sigmoid'),
])
model.compile(
optimizer=keras.optimizers.Adam(lr=1e-3),
loss=keras.losses.BinaryCrossentropy(),
metrics=metrics)
return model
次に、トレーニング中に使用するいくつかのグローバル変数と、早期停止パラメータを定義します。
EPOCHS = 100
BATCH_SIZE = 512
early_stopping = tf.keras.callbacks.EarlyStopping(
monitor='val_auc',
verbose=1,
patience=10,
mode='max',
restore_best_weights=True)
最後に、上記で定義した関数を呼び出してモデルを作成します。
model = make_model()
model.summary()
上記のパラメータを渡して、fit() メソッドでモデルをトレーニングできます。
results = model.fit(
train_set,
train_labels,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
callbacks = [early_stopping],
validation_data=(test_set, test_labels),
class_weight=class_weight)
トレーニングの実行には数分かかります。
ステップ 4: モデル指標を可視化する
トレーニング済みモデルができたので、トレーニング エポック全体でさまざまな指標をプロットして、モデルのパフォーマンスを確認しましょう。
mpl.rcParams['figure.figsize'] = (12, 10)
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
def plot_metrics(history):
metrics = ['loss', 'auc', 'precision', 'recall']
for n, metric in enumerate(metrics):
name = metric.replace("_"," ").capitalize()
plt.subplot(2,2,n+1)
plt.plot(history.epoch, history.history[metric], color=colors[0], label='Train')
plt.plot(history.epoch, history.history['val_'+metric],
color=colors[0], linestyle="--", label='Val')
plt.xlabel('Epoch')
plt.ylabel(name)
if metric == 'loss':
plt.ylim([0, plt.ylim()[1]])
elif metric == 'auc':
plt.ylim([0.8,1])
else:
plt.ylim([0,1])
plt.legend()
plot_metrics(results)
グラフは次のようになります(ただし、完全に同じにはなりません)。

ステップ 5: 混同行列を印刷する
混同行列は、テスト データセットに対するモデルのパフォーマンスを可視化するのに適しています。各クラスについて、モデルが正しく予測したテスト サンプルの割合と、誤って予測したテスト サンプルの割合が表示されます。Scikit Learn には、混同行列の作成とプロットを行うユーティリティがいくつか用意されています。ここでは、それらを使用します。
ノートブックの冒頭で confusion_matrix ユーティリティをインポートしました。これを使用するには、まずモデルの予測のリストを作成します。ここでは、モデルから返された値を丸めて、このリストがグラウンド トゥルース ラベルのリストと一致するようにします。
predicted = model.predict(test_set)
y_pred = []
for i in predicted.tolist():
y_pred.append(int(round(i[0])))
これで、このデータをグラウンド トゥルース ラベルとともに confusion_matrix メソッドに渡す準備ができました。
cm = confusion_matrix(test_labels.values, y_pred)
print(cm)
これにより、テストセットに対するモデルの正しい予測と誤った予測の絶対数がわかります。左上の数値は、テストセットのサンプルの中で、モデルが不正行為ではないと正しく予測したサンプルの数を示しています。右下の数値は、不正行為として正しく予測された数を示しています(この数値が最も重要です)。各クラスのサンプルの大部分が正しく予測されていることがわかります。
これを視覚化しやすくするために、Scikit Learn のドキュメントの plot_confusion_matrix 関数を適用しました。ここで関数を定義します。
def plot_confusion_matrix(cm, classes,
normalize=False,
title='Confusion matrix',
cmap=plt.cm.Blues):
"""
This function prints and plots the confusion matrix.
Normalization can be applied by setting `normalize=True`.
"""
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
if normalize:
cm = np.round(cm.astype('float') / cm.sum(axis=1)[:, np.newaxis], 3)
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
モデルのデータを渡してプロットを作成します。ここでは、混同行列に正しい予測と正しくない予測の数を割合で表示するために、normalize を True に設定しています。
classes = ['not fraud', 'fraud']
plot_confusion_matrix(cm, classes, normalize=True)
次のような結果が表示されます(数値は異なります)。

このモデルは、テストセットの 1,594 件の不正な取引のうち約 85% を正しく予測しています。このラボではモデルの品質に重点を置いていません。本番環境に不正行為検出モデルをデプロイする場合は、不正行為クラスの精度が 85% を超えることが望ましいでしょう。このラボの目的は、不均衡なデータセットでトレーニングされたモデルの説明に関するツールを紹介することです。
次に、Explainable AI SDK を使用して、モデルがこれらの予測を行うためにどの特徴量に依存しているかを理解します。
6. Explainable AI SDK の使用
Explainable AI SDK には、モデルの説明を取得するためのユーティリティ メソッドが用意されています。Tensorflow AI Platform Notebook インスタンスにプリインストールされています。ラボの冒頭でノートブックにインポートしたことに注意してください。SDK を使用すると、ノートブック インスタンス内のモデルから特徴の帰属を取得できます。つまり、モデルを使用するためにクラウドにデプロイする必要はありません。
このセクションでは、トレーニングしたモデルを Tensorflow SavedModel としてエクスポートし、保存したモデルアセットを SDK で指定して説明を取得します。
ステップ 1: トレーニング済みモデルをエクスポートする
まず、モデルをノートブック インスタンスのディレクトリに保存します。
model_dir = 'fraud_model'
tf.saved_model.save(model, model_dir)
ノートブックの左側のサイドバーでフォルダ ビューを更新すると、fraud_model/ という新しいディレクトリが作成されていることがわかります。
ステップ 2: SDK を使用して説明のメタデータを取得する
次に、Explainable AI SDK をそのディレクトリに指定します。これにより、モデルの説明を取得するために必要なメタデータが生成されます。get_metadata() メソッドは、入力名など、SDK がモデルから推測したメタデータを表示します。
model_builder = SavedModelMetadataBuilder(model_dir)
metadata = model_builder.get_metadata()
print(metadata)
説明可能性は、「モデルがこれを不正と判断したのはなぜか?」という質問に答えるのに役立ちます。
ステップ 3: モデルのベースラインを指定する
表形式のデータの場合、Explainable AI サービスは各特徴のアトリビューション値を返すことで機能します。これらの値は、特定の特徴が予測にどの程度影響したかを示します。特定の取引の金額により、モデルの不正行為の予測確率が 0.2% 増加したとします。「0.2% とは何に対する割合なのか?」と思われるかもしれません。ここで、ベースラインのコンセプトについて説明します。
モデルのベースラインは、基本的に比較対象となるものです。モデル内の各特徴のベースライン値を選択します。ベースライン予測は、特徴がベースラインに設定されている場合にモデルが予測する値になります。
ベースラインの選択は、解決する予測タスクによって異なります。数値特徴の場合、データセット内の各特徴の中央値をベースラインとして使用するのが一般的です。ただし、不正行為の検出の場合、これは望ましい結果ではありません。Google が最も重視しているのは、モデルがトランザクションを不正行為としてラベル付けするケースを説明することです。つまり、比較対象となるベースライン ケースは不正行為ではない取引です。
これを考慮して、データセット内の不正行為以外の取引の中央値をベースラインとして使用します。中央値を取得するには、上記で抽出した not_fraud_sample DataFrame を使用し、モデルの想定される入力と一致するようにスケーリングします。
not_fraud_sample = not_fraud_sample.drop(columns=['nameOrig', 'nameDest', 'isFlaggedFraud', 'isFraud'])
baseline = scaler.transform(not_fraud_sample.values)
baseline = np.clip(baseline, -5, 5)
baseline_values = np.median(baseline, axis=0)
ベースラインを指定する必要はありません。指定しない場合、SDK はモデルが想定する各入力値のベースラインとして 0 を使用します。不正検出のユースケースでは、ベースラインを指定するのが妥当です。以下でベースラインを指定します。
input_name = list(metadata['inputs'])[0]
model_builder.set_numeric_metadata(input_name, input_baselines=[baseline_values.tolist()], index_feature_mapping=df.columns.tolist()[:6])
model_builder.save_metadata(model_dir)
上記の save_metadata() メソッドを実行すると、モデルのディレクトリに explanation_metadata.json というファイルが作成されました。ノートブックで fraud_model/ ディレクトリに移動し、ファイルが作成されたことを確認します。これには、SDK が特徴の帰属を生成するために使用するメタデータが含まれます。
ステップ 4: モデルの説明を取得する
これで、個々の例で特徴の帰属を取得する準備が整いました。これを行うには、まず SDK を使用してモデルのローカル参照を作成します。
local_model = explainable_ai_sdk.load_model_from_local_path(
model_dir,
explainable_ai_sdk.SampledShapleyConfig()
)
次に、不正行為として分類されるべき取引の例から、モデルの予測と説明を取得します。
fraud_example = [0.722,0.139,-0.114,-0.258,-0.271,-0.305]
response = local_model.explain([{input_name: fraud_example}])
response[0].visualize_attributions()
実行すると、次のような可視化が作成されます。

この例では、トランザクションが発生する前の口座の初期残高が不正行為を特定する最大の要因であり、モデルの予測をベースラインから 0.5 以上押し上げています。取引の金額、宛先アカウントの残高、ステップも、次に大きな指標でした。データセットでは、「ステップ」は時間の単位を表します(1 ステップは 1 時間です)。アトリビューション値は負の値になることもあります。
ビジュアリゼーションの上に表示される「近似誤差」は、説明の信頼度を示します。一般的に、誤差が 5% を超える場合は、機能アトリビューションを信頼できない可能性があります。説明の精度は、使用したトレーニング データとモデルによって決まります。トレーニング データやモデルを改善したり、別のモデルのベースラインを試したりすることで、近似誤差を減らすことができます。
説明メソッドで使用するステップ数を増やすことで、このエラーを減らすこともできます。この値は、説明構成に path_count パラメータを追加することで SDK で変更できます(指定しない場合のデフォルトは 10 です)。
local_model = explainable_ai_sdk.load_model_from_local_path(
model_dir,
explainable_ai_sdk.SampledShapleyConfig(path_count=20)
)
このモデルでは、Explainable AI を使用して他にもさまざまなことができます。たとえば、次のようなアイデアが挙げられます。
- モデルに多くの例を送信し、アトリビューション値を平均して、特定の機能が全体的に重要かどうかを確認します。これを使用してモデルを改善し、重要でない特徴を削除できる可能性があります。
- モデルが不正行為としてフラグを設定したものの、不正行為ではないトランザクションの誤検出を見つけ、そのアトリビューション値を調べる
- 別のベースラインを使用して、アトリビューション値にどのような影響があるかを確認する
お疲れさまでした
不均衡なデータを考慮する方法、不正な取引を検出する TensorFlow モデルをトレーニングする方法、Explainable AI SDK を使用して、モデルが個々の予測を行うために最も依存している特徴を確認する方法について説明しました。ご希望でしたら、ここで手順を終了します。ノートブック内で SDK を使用すると、モデルをデプロイする前に説明にアクセスできるため、モデル開発プロセスを簡素化できます。満足のいくモデルを構築したら、大規模な予測を取得するためにデプロイすることをおすすめします。上記に該当する場合は、次のオプションの手順に進んでください。完了したら、クリーンアップの手順に進みます。
7. 省略可: AI Platform Prediction にモデルをデプロイする
このステップでは、モデルを AI Platform Prediction にデプロイする方法を学習します。
ステップ 1: 保存済みモデル ディレクトリを Cloud Storage バケットにコピーします。
前に実行した SDK の手順で、モデルを AI Platform にデプロイするために必要なものがすべて揃いました。デプロイの準備として、Explainable AI サービスが読み取ることができる Cloud Storage バケットに SavedModel アセットと説明メタデータを配置する必要があります。
そのため、環境変数をいくつか定義します。次の値に、Google Cloud プロジェクトの名前と、作成するバケットの名前(グローバルに一意である必要があります)を入力します。
# Update these to your own GCP project and model
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
これで、エクスポートされた TensorFlow モデルアセットを保存するストレージ バケットを作成する準備が整いました。モデルをデプロイするときに、AI Platform でこのバケットを指定します。
ノートブック内から次の gsutil コマンドを実行して、バケットを作成します。
!gsutil mb -l 'us-central1' $MODEL_BUCKET
次に、ローカル モデル ディレクトリをそのバケットにコピーします。
!gsutil -m cp -r ./$model_dir/* $MODEL_BUCKET/explanations
ステップ 2: モデルをデプロイする
次に、デプロイ コマンドで使用する変数を定義します。
MODEL = 'fraud_detection'
VERSION = 'v1'
model_path = MODEL_BUCKET + '/explanations'
次の gcloud コマンドを使用してモデルを作成できます。
!gcloud ai-platform models create $MODEL --region=us-central1
これで、gcloud を使用してこのモデルの最初のバージョンをデプロイする準備が整いました。バージョンのデプロイには 5 ~ 10 分ほどかかります。
!gcloud beta ai-platform versions create $VERSION \
--model $MODEL \
--origin $model_path \
--runtime-version 2.1 \
--framework TENSORFLOW \
--python-version 3.7 \
--machine-type n1-standard-4 \
--explanation-method 'sampled-shapley' \
--num-paths 10 \
--region=us-central1
origin フラグで、保存したモデルとメタデータ ファイルの Cloud Storage のロケーションを渡します。Explainable AI には現在、表形式モデルで使用できる 2 つの説明方法があります。ここでは、サンプリングされた Shapley を使用しています。num-paths パラメータは、各入力特徴に対してサンプリングされるパスの数を示します。一般に、モデルが複雑になるほど、妥当な収束に達するために必要な近似ステップが増えます。
モデルが正しくデプロイされたことを確認するには、次の gcloud コマンドを実行します。
!gcloud ai-platform versions describe $VERSION --model $MODEL --region=us-central1
状態は READY である必要があります。
ステップ 3: デプロイしたモデルの予測と説明を取得する
説明可能性の観点から、モデルが不正行為を予測したケースの説明が最も重要です。モデルに 5 つのテスト例を送信します。これらはすべて不正な取引です。
Google Cloud CLI を使用して予測を取得します。次のコードを実行して、テストセットから不正行為の例のインデックスを取得します。
fraud_indices = []
for i,val in enumerate(test_labels):
if val == 1:
fraud_indices.append(i)
次に、モデルが想定する形式で 5 つの例を保存し、ファイルに書き込みます。
num_test_examples = 5
instances = []
for i in range(num_test_examples):
ex = test_set[fraud_indices[i]]
instances.append({input_name: ex.tolist()})
with open('prediction.json', 'a') as outputfile:
json.dump({"instances": instances}, outputfile)
gcloud を使用して、これらの 5 つの例をモデルに送信できます。
!gcloud beta ai-platform explain \
--model=$MODEL \
--version=$VERSION \
--region='us-central1' \
--json-request=prediction.json
レスポンス JSON には、これらの例の各特徴のアトリビューション値が表示されます。各例の example_score キーには、モデルの予測が含まれています。この例では、特定のトランザクションが不正である可能性の割合です。
8. クリーンアップ
このノートブックを引き続き使用する場合は、未使用時にオフにすることをおすすめします。Cloud コンソールの Notebooks UI で、ノートブックを選択して [停止] を選択します。

このラボで作成したすべてのリソースを削除する場合は、ノートブック インスタンスを停止するのではなく、削除します。
Cloud コンソールのナビゲーション メニューで [ストレージ] に移動し、モデルアセットの保存用に作成した両方のバケットを削除します。