Cloud AI Platform を使用した不正行為検出モデルの説明

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 モデル] セクションに移動して [有効にする] をクリックします。

d0d38662851c6af3.png

ステップ 2: Compute Engine API を有効にする

まだ有効になっていない場合は、[Compute Engine] に移動して [有効にする] を選択します。これはノートブック インスタンスを作成するために必要です。

ステップ 3: AI Platform Notebooks インスタンスを作成する

Cloud コンソールの [AI Platform Notebooks] セクションに移動し、[新しいインスタンス] をクリックします。次に、[TensorFlow Enterprise 2.1] インスタンス タイプに [GPU なし] を選択します。

9e2b62be57fff946.png

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

fa67fe02f2a9ba73.png

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

4390b1614ae8eae4.png

ステップ 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 で読み取る

Google Cloud Storage で Kaggle データセットが利用できるようになりました。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()

プレビューに次のように表示されます。

8d3d9e022fce1e7f.png

ステップ 2: 不均衡なデータを考慮する

前述のように、現在、データセットには不正でないサンプルが 99.9% 含まれています。データをそのままトレーニングすると、データの 99.9% が不正ケースであるために、すべてのトランザクションが不正なトランザクションではないと推測することで、モデルが 99.9% の精度に達する可能性があります。

不均衡なデータに対処するアプローチはいくつかあります。ここでは、ダウンサンプリングという手法を使用します。ダウンサンプリングとは、トレーニングで大部分クラスのごく一部だけを使用することを意味します。この場合、「不正行為以外」というデータの 99.9% を占めるため、大半のクラスです。

データセットをダウンサンプリングするために、約 8,000 件のすべての不正サンプルと、約 31,000 件の不正行為ではないケースを無作為に抽出します。このようにして作成されたデータセットでは、不正行為のケースが 25% になります(以前の 0.1% から)。

まず、データを 2 つの DataFrame に分割します。1 つは不正行為用、もう 1 つは不正行為用ではありません(この Codelab の後半でモデルをデプロイするときに使用します)。

fraud = data[data['isFraud'] == 1]
not_fraud = data[data['isFraud'] == 0]

次に、不正行為ではないケースを無作為に抽出します。0.005% を使用するのは、不正行為と不正でない取引の割合が 25 対 75 になるからです。これで、データをまとめ、シャッフルできます。わかりやすくするために、トレーニングに使用しない列もいくつか削除します。

# 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: 不正検出のためのモバイルマネー金融シミュレーター」In: The 28thEuropean Modeling and Simulation Symposium-EMSS(キプロス、ラルナカ)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)

グラフは次のようになります(ただし、まったく同じではありません)。

f98a88e530bb341f.png

ステップ 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')

モデルのデータを渡してプロットを作成します。ここでは normalizeTrue に設定して、混同行列が正解と不正解の予測の数をパーセンテージで表示されるようにします。

classes = ['not fraud', 'fraud']
plot_confusion_matrix(cm, classes, normalize=True)

次のように表示されます(正確な数は異なります)。

b52ef4ccddce5d8c.png

この例では、モデルはテストセットから得た 1,594 件の不正取引の約 85% を正しく予測したことがわかります。このラボではモデルの品質に焦点を当てません。不正行為検出モデルを本番環境にデプロイする場合、不正行為クラスの精度が 85% を超える可能性があります。このラボでは、不均衡なデータセットでトレーニングされたモデルについて説明するツールを紹介します。

次に、Explainable AI SDK を使用して、予測を行ううえでモデルがどの特徴に依存しているかを理解します。

6. Explainable AI SDK の使用

Explainable AI SDK には、モデルの説明を取得するためのユーティリティ メソッドが用意されています。Tensorflow AI Platform Notebooks インスタンスにプリインストールされています。ラボの始めにノートブックにインポートしました。この 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% か」とお考えかもしれません。以上がベースラインのコンセプトです

モデルのベースラインは基本的に、比較対象になります。モデル内の各特徴のベースライン値を選択すると、ベースライン予測が、特徴がベースラインに設定されたときにモデルが予測する値になります。

ベースラインの選択は、解決する予測タスクによって異なります。数値特徴の場合、データセット内の各特徴の中央値をベースラインとして使用するのが一般的です。しかし、不正行為の検出においては、これは希望どおりの動作ではありません。私たちが最も重視しているのは、モデルが取引を不正とラベル付けする場合のケースの説明です。つまり、比較対象となるベースライン ケースは不正でないトランザクションです。

このことを説明するために、データセット内の不正でないトランザクションの中央値をベースラインとして使用します。上記で抽出した 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()

これを実行すると、次のようなビジュアリゼーションが作成されます。

67211d9396197146.png

この例では、トランザクションが行われる前のアカウントの初期残高が不正行為の最大の指標であり、モデルの予測がベースラインから 0.5 を超えて高くなっていました。トランザクションの金額、移行先アカウントの最終的な残高、およびステップが、次に大きなインジケーターでした。データセットにおける「ステップ」は、は時間の単位を表します(1 ステップは 1 時間です)。アトリビューション値は負の値にすることもできます。

「近似誤差」は、説明がどの程度信頼できるかを判断するのに役立ちます。一般に、誤差が 5% を超えると、特徴アトリビューションに頼ることができない可能性があります。適切な説明の精度は、使用したトレーニング データとモデル次第であることを忘れないでください。トレーニング データやモデルを改善したり、別のモデル ベースラインを試行したりすると、近似誤差を減らすことができます。

説明方法で使用するステップ数を増やすことで、このエラーを減らすこともできます。SDK でこれを変更するには、説明構成に path_count パラメータを追加します(指定しない場合のデフォルトは 10 です)。

local_model = explainable_ai_sdk.load_model_from_local_path(
    model_dir, 
    explainable_ai_sdk.SampledShapleyConfig(path_count=20)
)

このモデルで Explainable AI を使用してできることは、他にもたくさんあります。たとえば、次のようなアイデアが挙げられます。

  • モデルに多くのサンプルを送信し、アトリビューション値を平均して、特定の特徴が全体的により重要かどうかを確認します。これを使用してモデルを改善し、重要でない特徴を削除することができます
  • Google のモデルが不正行為と報告するが不正行為ではない取引である偽陽性を発見し、そのアトリビューション値を調べる
  • 別のベースラインを使用して、アトリビューション値にどのように影響するかを確認する

お疲れさまでした

ここでは、不均衡なデータを考慮し、不正なトランザクションを検出するように TensorFlow モデルをトレーニングし、Explainable AI SDK を使用してモデルが個々の予測を行うために最も依存している特徴を確認する方法を学びました。中止することもできます。ノートブックで SDK を使用すると、モデルをデプロイする前に説明にアクセスできるようになるため、モデル開発プロセスを簡素化できます。満足のいくモデルを構築したら、デプロイして大規模な予測を行いたいと考えることがよくあります。該当する場合は、次のステップに進みます(省略可)。完了したら、クリーンアップのステップに進みます。

7. 省略可: モデルを AI Platform Prediction にデプロイする

このステップでは、モデルを AI Platform Prediction にデプロイする方法を学習します。

ステップ 1: 保存したモデル ディレクトリを Cloud Storage バケットにコピーします。

前に実行した SDK の手順では、モデルを AI Platform にデプロイするために必要なものがすべて揃いました。デプロイの準備として、SavedModel アセットと説明メタデータを、Explainable AI サービスが読み取れる Cloud Storage バケットに配置する必要があります。

そのために、いくつかの環境変数を定義します。以下の値に、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 で、ノートブックを選択して [停止] を選択します。

879147427150b6c7.png

このラボで作成したすべてのリソースを削除する場合は、ノートブック インスタンスを停止するのではなく削除します。

Cloud コンソールのナビゲーション メニューで [ストレージ] に移動し、モデルアセットを保存するために作成した両方のバケットを削除します。