JupyterLab Notebooks を使用したモデルの作成

このチュートリアルでは、JupyterLab ノートブックのレシピビルダーテンプレートを使用してモデルを作成するために必要な手順について説明します。

導入された概念:

  • レシピ: レシピとは、モデル仕様を表すAdobeの用語で、トレーニング済みのモデルを作成して実行するために必要な、特定の機械学習、AI アルゴリズムまたはアルゴリズムのアンサンブル、処理ロジックおよび設定を表す最上位のコンテナです。
  • モデル:モデルは、履歴データと構成を使用してビジネスユースケースを解決するためにトレーニングされる機械学習レシピのインスタンスです。
  • トレーニング:トレーニングは、ラベル付きのデータからパターンやインサイトを学習するプロセスです。
  • スコアリング:スコアリングは、トレーニング済みモデルを使用してデータからインサイトを生成するプロセスです。

必要なアセットのダウンロード assets

このチュートリアルを進める前に、必要なスキーマとデータセットを作成する必要があります。 Luma 傾向モデルスキーマとデータセットの作成に関するチュートリアルにアクセスして、必要なアセットをダウンロードし、前提条件を設定します。

JupyterLab notebook 環境の基本を学ぶ

レシピをゼロから作成するには、Data Science Workspace 内で行います。 開始するには、Adobe Experience Platform に移動し、左側の ノートブック タブを選択します。 新しいノートブックを作成するには、JupyterLab Launcher ールバーからレシピビルダーテンプレートを選択します。

​ レシピビルダー ​ ノートブックを使用すると、ノートブック内でトレーニング実行とスコアリング実行を実行できます。 これにより、トレーニングデータとスコアリングデータで実験を実行する間に、train() メソッドと score() メソッドを柔軟に変更できます。トレーニングとスコアリングの出力に満足したら、レシピを作成し、さらにレシピを使用して機能をモデル化し、モデルとして公開できます。

NOTE
​ レシピビルダー ​ ノートブックはすべてのファイル形式での作業をサポートしていますが、現在、レシピを作成機能は Python のみをサポートしています。

ランチャーから ​ レシピビルダー ​ ノートブックを選択すると、ノートブックが新しいタブで開きます。

上部にある新しいノートブックタブに、追加の 3 つのアクション(トレーニングスコアレシピを作成 を含むツールバーが読み込まれます。 これらのアイコンは、「レシピビルダー ​ ノートブックにのみ表示さ ​ ます。 ノートブックでレシピを作成した後、これらのアクションについて詳しくは トレーニングとスコアリングの節を参照してください。

​ レシピビルダー ​ ノートブックの概要

提供されたアセットフォルダーには、Luma の傾向モデル propensity_model.ipynb があります。 JupyterLab の「ノートブックをアップロード」オプションを使用して、提供されたモデルをアップロードしノートブックを開きます。

ノートブックのアップロード

このチュートリアルの残りの部分では、傾向モデルノートブックで事前定義された次のファイルについて説明します。

次のビデオチュートリアルでは、Luma 傾向モデル ノートブックについて説明します。

要件ファイル requirements-file

要件ファイルは、モデルで使用する追加のライブラリを宣言するために使用されます。 依存関係がある場合は、バージョン番号を指定できます。その他のライブラリを探すには、anaconda.org にアクセスしてください。 要件ファイルのフォーマット方法については、Conda を参照してください。 既に使用されている主なライブラリのリストは次のとおりです。

python=3.6.7
scikit-learn
pandas
numpy
data_access_sdk_python
NOTE
追加したライブラリまたは特定のバージョンは、上記のライブラリと互換性がない場合があります。 さらに、環境ファイルを手動で作成することを選択した場合、「name」フィールドを上書きすることはできません。

Luma 傾向モデルノートブックの場合、要件を更新する必要はありません。

設定ファイル configuration-files

設定ファイル(training.conf および scoring.conf)は、トレーニングとスコアリングに使用するデータセットを指定し、ハイパーパラメーターを追加するために使用されます。トレーニングとスコアリングには別々の設定があります。

モデルがトレーニングを実行するには、trainingDataSetIdACP_DSW_TRAINING_XDM_SCHEMAtenantId を指定する必要があります。 スコアリングの場合は、さらに scoringDataSetIdtenantIdscoringResultsDataSetId を指定する必要があります。

データセット ID とスキーマ ID を見つけるには、左側のナビゲーションバー(フォルダーアイコンの下 のノートブック内の「データ」タブ 「データ」タブ)に移動します。 3 つの異なるデータセット ID を指定する必要があります。 scoringResultsDataSetId は、モデルのスコアリング結果の保存に使用され、空のデータセットにする必要があります。 これらのデータセットは、以前 必須アセット手順で作成されたものです。

同じ情報は、「Adobe Experience Platform」の「スキーマ」タブと「データセット」タブにあります。

テストが完了すると、トレーニングとスコアリングの設定は次のスクリーンショットのようになります。

設定

デフォルトでは、データのトレーニングとスコアリングを行う際に、次の設定パラメーターが設定されます。

  • ML_FRAMEWORK_IMS_USER_CLIENT_ID
  • ML_FRAMEWORK_IMS_TOKEN
  • ML_FRAMEWORK_IMS_ML_TOKEN
  • ML_FRAMEWORK_IMS_TENANT_ID

トレーニングデータローダーについて training-data-loader

トレーニングデータローダーの目的は、機械学習モデルの作成に使用するデータをインスタンス化することです。通常、データローダーのトレーニングには、次の 2 つのタスクがあります。

  • Platform からデータを読み込み中
  • データの準備と特徴量エンジニアリング

以下の 2 つの節で、データの読み込みとデータの準備について説明します。

データの読み込み loading-data

この手順では、pandas データフレームを使用します。データは、Platform SDK (platform_sdk)を使用して Adobe Experience Platform のファイルから読み込むか、Pandas の read_csv() 関数または read_json() 関数を使用して外部ソースから読み込むことができます。

NOTE
レシピビルダーノートブックでは、データは platform_sdk データローダーを使用して読み込まれます。

Platform SDK platform-sdk

platform_sdk データローダーの使用に関する詳細なチュートリアルについては、『Platform SDK ガイド』を参照してください。このチュートリアルでは、認証の構築、データの基本読み取り、およびデータの基本的な書き込みに関する情報を提供します。

外部ソース external-sources

この節では、JSON または CSV ファイルを pandas オブジェクトにインポートする方法を示します。Pandas ライブラリの公式ドキュメントについては、次の URL を参照してください。

まず、CSV ファイルのインポート例を示します。data 引数は CSV ファイルへのパスです。この変数は、前の節configProperties からインポートされました。

df = pd.read_csv(data)

また、JSON ファイルからインポートすることもできます。data 引数は CSV ファイルへのパスです。この変数は、前の節configProperties からインポートされました。

df = pd.read_json(data)

これで、データはデータフレームオブジェクトに含まれ、次の節で分析および操作できます。

トレーニング データ ローダーファイル

この例では、Platform SDK を使用してデータが読み込まれます。 ライブラリは、次の行を含めることで、ページの上部にインポートできます。

from platform_sdk.dataset_reader import DatasetReader

その後、load() メソッドを使用して、設定(recipe.conf)ファイルで設定したトレーニングデータセットを trainingDataSetId から取得できます。

def load(config_properties):
    print("Training Data Load Start")

    #########################################
    # Load Data
    #########################################
    client_context = get_client_context(config_properties)
    dataset_reader = DatasetReader(client_context, dataset_id=config_properties['trainingDataSetId'])
NOTE
設定ファイルの節で説明したように、client_context = get_client_context(config_properties) を使用してExperience Platformからデータにアクセスする場合、次の設定パラメーターが設定されます。
  • ML_FRAMEWORK_IMS_USER_CLIENT_ID
  • ML_FRAMEWORK_IMS_TOKEN
  • ML_FRAMEWORK_IMS_ML_TOKEN
  • ML_FRAMEWORK_IMS_TENANT_ID

データが揃ったら、データの準備と特徴のエンジニアリングから始めます。

データの準備と特徴量エンジニアリング data-preparation-and-feature-engineering

データを読み込んだ後、データをクリーンアップしてデータを準備する必要があります。 この例では、モデルの目標は、顧客が製品を注文するかどうかを予測することです。 モデルは特定の製品を表示しないので、productListItems は不要なので、列は削除されます。 次に、1 つの列に 1 つの値または 2 つの値のみを含む追加の列が削除されます。 モデルをトレーニングする場合、目標の予測に役立つ有用なデータのみを保持することが重要です。

データ準備の例

不要なデータを削除したら、機能エンジニアリングを開始できます。 この例で使用するデモデータには、セッション情報は含まれていません。 通常は、特定の顧客の現在と過去のセッションに関するデータを取得します。 セッション情報がないため、この例では代わりに、ジャーニーの区切りで現在および過去のセッションを模倣します。

ジャーニーの区切り

区切りが完了すると、データにラベルが付けられ、ジャーニーが作成されます。

データにラベルを付ける

次に、特徴を作成し、過去と現在に分けます。 その後、不要な列はすべて削除され、Luma の顧客に対する過去のジャーニーと現在のジャーニーの両方が残ります。 これらのジャーニーには、顧客が商品を購入したかどうか、購入に至るまでのジャーニーなどの情報が含まれています。

最終現在のトレーニング

スコアリングデータローダー scoring-data-loader

スコアリング用のデータのロード手順は、トレーニング・データのロード手順と似ています。 コードをよく見ると、dataset_readerscoringDataSetId を除いてすべてが同じであることがわかります。 これは、トレーニングとスコアリングの両方に同じ Luma データソースが使用されるからです。

様々なデータ・ファイルをトレーニングとスコアリングに使用する場合、トレーニングとスコアリングのデータ・ローダーは個別になります。 これにより、必要に応じて、トレーニングデータをスコアリングデータにマッピングするなど、追加の前処理を実行できます。

パイプラインファイル pipeline-file

pipeline.py ファイルには、トレーニングとスコアリングのロジックが含まれています。

トレーニングの目的は、トレーニングデータセットの機能とラベルを使用してモデルを作成することです。 トレーニングモデルを選択した後、x と y のトレーニングデータセットをモデルに適合させる必要があります。この関数はトレーニング済みのモデルを返します。

NOTE
特徴とは、ラベルを予測するために機械学習モデルで使用される入力変数を指します。

def train

score() 関数には、スコアリングアルゴリズムを含め、モデルの成功度を示す測定値を返す必要があります。score() 関数は、スコアリングデータセットラベルとトレーニング済みモデルを使用して、予測された特徴のセットを生成します。次に、これらの予測値が、スコアリングデータセットの実際の特徴と比較されます。この例では、score() 関数は、トレーニング済みモデルを使用して、スコアリングデータセットのラベルを使用して特徴を予測します。予測された特徴が返されます。

def スコア

評価ファイル evaluator-file

evaluator.py ファイルには、トレーニング済みレシピを評価する方法と、トレーニングデータを分割する方法に関するロジックが含まれています。

データセットの分割 split-the-dataset

トレーニングのデータ準備段階では、トレーニングとテストに使用するデータセットを分割する必要があります。この val データは、トレーニング後にモデルを評価するために暗黙的に使用されます。 このプロセスはスコアリングとは別のものです。

この節では、ノートブックにデータを読み込んだ後、データセット内の関連のない列を削除してデータをクリーンアップする split() 関数について説明します。 ここからフィーチャーエンジニアリングを実行できます。これは、データ内の既存の未加工フィーチャーから追加の関連フィーチャーを作成するプロセスです。

Split 関数

トレーニング済みモデルの評価 evaluate-the-trained-model

evaluate() 関数は、モデルがトレーニングされた後に実行され、モデルの成功度を示す指標を返します。 evaluate() 関数は、テストデータセットラベルとトレーニング済みモデルを使用して、一連の機能を予測します。 これらの予測値は、テストデータセットの実際の特徴と比較されます。この例で使用される指標は、precisionrecallf1accuracy です。 この関数は、評価指標の配列を含む metric オブジェクトを返します。これらの指標は、トレーニング済みモデルのパフォーマンスを評価するために使用されます。

評価

print(metric) を追加すると、指標の結果を表示できます。

指標の結果

データセーバーファイル data-saver-file

datasaver.py ファイルには save() 関数が含まれており、スコアリングのテスト中に予測を保存するために使用されます。 save() 関数は、予測を受け取り、Experience Platform Catalog API を使用して、scoring.conf ファイルで指定した scoringResultsDataSetId にデータを書き込みます。 いいよ

データセーバー

トレーニングとスコアリング training-and-scoring

ノートブックの変更が完了し、レシピをトレーニングする場合は、バーの上部にある関連ボタンを選択して、セルでトレーニング実行を作成できます。 ボタンを選択すると、トレーニングスクリプトからのコマンドと出力のログがノートブック(evaluator.py のセルの下)に表示されます。 Conda は、最初にすべての依存関係をインストールし、その後トレーニングを開始します。

スコアリングを実行する前に、少なくとも 1 回はトレーニングを実行する必要があります。「スコアリングを実行」ボタンを選択すると、トレーニング中に生成されたトレーニング済みモデルにスコアが付けられます。 スコア付けスクリプトが datasaver.py の下に表示されます。

デバッグの目的で、非表示の出力を表示する場合は、出力セルの末尾に debug を追加し、再実行します。

トレーニングとスコア

レシピの作成 create-recipe

レシピの編集が完了し、トレーニング/スコアリング出力に満足したら、右上の レシピを作成 を選択して、ノートブックからレシピを作成できます。

レシピの作成」を選択すると、レシピ名を入力するよう求められます。 この名前は、Platform で作成された実際のレシピを表します。

OK」を選択すると、レシピの作成プロセスが開始されます。 これには時間がかかり、「レシピを作成」ボタンの代わりに進行状況バーが表示されます。 完了したら、「レシピを表示」ボタンを選択すると、「ML モデル ​​ の下の「レシピ ​​ 」タブに移動 ます。

CAUTION
  • ファイルのセルを削除しないでください
  • ファイルのセルの先頭の %%writefile 行を編集しないでください
  • 異なるノートブックに同時にレシピを作成しないでください

次の手順 next-steps

このチュートリアルを完了することで、​ レシピビルダー ​ ノートブックで機械学習モデルを作成する方法を学びました。 また、レシピ作成ワークフローにノートブックを使用する方法についても説明しました。

Data Science Workspace 内でリソースを操作する方法を引き続き学習するには、Data Science Workspace のレシピとモデル ドロップダウンを参照してください。

recommendation-more-help
cc79fe26-64da-411e-a6b9-5b650f53e4e9