8.1データの調査と変換

特定の製品を見ているときに好きな製品をレコメンデーションする機械学習モデルを作成するには、Webサイトでユーザーが行った以前の購入を分析する必要があります。 このレッスンでは、Adobe Analytics経由でプラットフォームに流れる購入データを調べ、そのデータを機械学習モデルのトレーニングに役立つ機能データセットに変換します。

Adobe Experience PlatformにログインするURLは次のとおりです。https://experience.adobe.com/platform

8.1.1データセットとXDMスキーマの調査

Adobe Experience Platformでのエクスペリエンスデータモデル(XDM)は、データの標準化を支援し、組織全体でデータを効率的に使用できるようにします。

Adobe Experience Platformにログインします。

ログインした後、Adobe Experience Platformのホームページに移動します。

データ取得

続行する前に、サンドボックス​を選択する必要があります。 選択するサンドボックスの名前は--aepSandboxId--です。 これを行うには、画面上の青い線の「Production Prod」というテキストをクリックします。

データ取得

適切なサンドボックスを選択すると、画面の変更が表示され、専用のサンドボックスに移動します。

データ取得

左のメニューで[データセット]をクリックします。

DSW

製品レコメンデーションの機械学習モデルを開発する際には、ユーザーが以前にLumaと共に購入した製品に興味を持っています。 機械学習モデルのトレーニングに必要なデータを効率化するために、以下の表(主なフィールド:userid - Luma Webサイトとのアクションを実行したユーザー、タイムスタンプ — インタラクションの時間、interactiontype - Purchase、itemid — ユーザーが操作を行った製品)。

このチュートリアルでは、3つのデータセットを使用します。

データセット名 データセットのスキーマ 説明
デモシステム — Webサイトのイベントデータセット(グローバルv1.1) デモシステム — Webサイトのイベントデータセット(グローバルv1.1)スキーマ Webサイトのクリックストリームデータ
デモシステム —Recommendationsモデル入力のイベントデータセット(グローバルv1.1) デモシステム —Recommendationsモデル入力のイベントスキーマ(グローバルv1.1) クリックストリームデータは、機能パイプラインを使用して機能/トレーニングデータセットに変換されます。 このデータは、製品のRecommendationsの機械学習モデルをトレーニングするために使用されます。 itemidとuseridは、そのユーザーが時刻のタイムスタンプで購入した製品に対応します
デモシステム — XML予測のプロファイルデータセット(グローバルv1.1) デモシステム — XML予測のプロファイルスキーマ(グローバルv1.1) スキーマスコアリング後に取得するデータセットです。 これには、各ユーザーのレコメンデーション商品のリストが含まれます

Demo System - Website (Global v1.1)のイベントデータセット​を見てみましょう。

「Datasets — 」ページで、検索ボックスに​Demo System - Webサイト​のイベントデータセットと入力します。

DSW

データセット​Demo System - Websiteのイベントデータセット(グローバルv1.1)​を開きます。

DSW

プレビューデータセット」ボタンをクリックすると、そのデータセットに送信されるデータと、データモデルがどのように表示されるかを確認できます。 FYI — データセット内のデータが異なって見える場合があります。 それは正常で期待通りです。

DSW

DSW

データセットのプレビューーウィンドウを閉じます。

このデータセットに定義されたスキーマを見てみましょう。

左のメニューで、スキーマ​を選択します。

DSW

スキーマの概要で、このラボで使用する3つのスキーマを検索してください。

スキーマ名
デモシステム —Recommendationsモデル入力のイベントスキーマ(グローバルv1.1)
デモシステム — XML予測のプロファイルスキーマ(グローバルv1.1)
デモシステム — Webサイトのイベントスキーマ(グローバルv1.1)

Demo System - Websiteのイベントスキーマ(グローバルv1.1)​という名前のスキーマーをクリックして開きます。

DSW

8.1.2ジュピター・ノートブックを開く

ジュピター・ノートに行って、手を汚しましょう。

左のメニューで[ノートブック]をクリックします。

DSW

JupyterLab​をクリックします。 次に、JupyterLabの読み込みが表示されます。 この処理には1 ~ 2分かかる場合があります。

DSW

Jupyter Notebooksを実行した後、次の手順に進むことができます。

DSW

8.1.3クリックストリームデータの変換

Jupter Notebooksは、ノートブックの構築プロセスを開始し、クリックストリームデータをトレーニングに備えた使いやすいデータセットに変換するコードを追加できるように実行中です。

DSW

「Jupyter Notebooks」で、空の​Python 3​ノートブックを開き、ランチャーの「Blank」ボタンをクリックします。

DSW

空の空の新しいPython 3ノートブックが作成されます。 続行する前に、ノートブックにわかりやすい名前を付けてください。 無題.ipynb​ファイルを右クリックし、名前の変更​をクリックします。

DSW

ノートブックの名前として​luma-recommendations-feature-transformation.ipynb​と入力し、Enter​を押します。 その後、次の手順を実行します。

DSW

次の作業:

  • このノートブックの入出力データセットを定義します
  • Read form Platform:入力データセットを読み込み、それを記述する
  • 空の値の除外
  • item_idを個々のレコードに分割する
  • モデルに必要なデータを格納する新しいデータフレームを作成します。
  • Write to Platform:そのデータフレームをAdobe Experience Platformのデータセットに出力する

このノートブックの入出力データセットを定義します

ノートブックの最初のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの最初のセルに貼り付けます。

import pandas as pd

inputDataset="--aepWebsiteInteractionsDatasetId--" # Demo System - Event Dataset for Website (Global v1.1) Dataset
outputDataset="--aepRecommendationsInputDatasetId--" # Demo System - Event Dataset for Recommendations Model Input (Global v1.1)
tenant_id = "--aepTenantId--"
item_id = "web.webPageDetails.name"
interactionType = "eventType"
user_id = "--aepTenantId--.identification.core.ecid"
brand_name = "--aepTenantId--.demoEnvironment.brandName"
timestamp = "timestamp"
idcolumn = "_id"

client_context = PLATFORM_SDK_CLIENT_CONTEXT
重要

環境変数​aepWebsiteInteractionsDatasetId​と​aepRecommendationsInputDatasetId​は、Adobe Experience Platformインスタンスで作成されたデータセットのデータセットIDを参照します。

aepWebsiteInteractionsDatasetIdは、Webサイト(グローバルv1.1) のデータセットデモシステム —イベントデータセット(グローバルv1.1) のデータセットIDを参照します。aepRecommendationsInputDatasetIdは、データセット ​デモシステム —Recommendationsモデル入力用イベントデータセット(グローバルv1.1)) 。ノートブックの最初のセルにコードを貼り付けるときは、環境変数をデータセットIDで置き換えます。

次に、セル1に次の文字を入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

このセルの実行は、数秒~数分かかります。 次の結果が出るまで、このノートブックでは何もしないでください。

再生ボタンを押してセルを実行するたびに、操作が継続中かどうかを示すインジケーターが表示されます。

次に、再生ボタンを押してセルを実行したときのインジケーターを示します。

DSW

これは、セルが実行され、アクションが完了したときのインジケーターです。

DSW

インジケータが実行の終了を示すまで、演習を続行しないでください。 実行が完了するのを待たないと、次の手順で動作が停止し、多くのエラーが表示されます。 これは、ジャプター・ノートブックのすべてのセルの実行に適用されます。インジケーターの変更が表示され、次のようになるので、実行が完了するまで常に待ちます。

DSW

セル1の実行後は視覚的な結果が得られません。 再生ボタンをクリックした後、次の手順に進みます。

Read from Platform:入力データセットを読み込み、データの概要を表示する

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

from platform_sdk.dataset_reader import DatasetReader

dataset_reader = DatasetReader(client_context, inputDataset)
df = dataset_reader.limit(1000).read()
df.head()

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。

DSW

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

結果は次のようになります(ただし同一ではありません。Adobe Experience Platformインスタンスで使用できるデータの量は多かれ少なかれです)。

DSW

空の値を除外し、ブランドルーマのデータを選択

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

# drop nulls
df = df.dropna(subset=[user_id, item_id, interactionType, brand_name])

# only focus on one brand
df = df[df[brand_name].isin(["Luma", "Luma Retail"])]

# filter out product views
df = df[df[interactionType].isin(["commerce.productViews"])]

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。

項目を個々のレコードに分割する

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

# vectorized (no loops) solution for splitting in pandas
# source: https://stackoverflow.com/a/48120674
def split_df(dataframe, col_name, sep):
    orig_col_index = dataframe.columns.tolist().index(col_name)
    orig_index_name = dataframe.index.name
    orig_columns = dataframe.columns
    dataframe = dataframe.reset_index()
    index_col_name = (set(dataframe.columns) - set(orig_columns)).pop()
    df_split = pd.DataFrame(
        pd.DataFrame(dataframe[col_name].str.split(sep).tolist())
        .stack().reset_index(level=1, drop=1), columns=[col_name])
    df = dataframe.drop(col_name, axis=1)
    df = pd.merge(df, df_split, left_index=True, right_index=True, how='inner')
    df = df.set_index(index_col_name)
    df.index.name = orig_index_name

    return df

df2 = split_df(df, item_id, "\|\|")

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。

データをAdobe Experience Platformに保存する前に準備する

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

filtered_column_list = [idcolumn, item_id, user_id, interactionType, brand_name, timestamp]

df2 = df2[filtered_column_list]

df2.rename(columns={
    item_id: tenant_id + ".recommendationsInput" + ".productSku",
    user_id: tenant_id + ".recommendationsInput" + ".ecid",
    interactionType: tenant_id + ".recommendationsInput" + ".interactionType",
    brand_name: tenant_id + ".recommendationsInput" + ".brandName"
}, inplace=True)

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。

Write to Platform:そのデータフレームをAdobe Experience Platformのデータセットに出力する

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

df2.head()

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

結果は次のようになります。

DSW

ノートブック内の次の空のセルをクリックします。

DSW

下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。

df2['timestamp'] = pd.to_datetime(df2['timestamp']).apply(lambda x: x.isoformat())

from platform_sdk.models import Dataset
from platform_sdk.dataset_writer import DatasetWriter
dataset = Dataset(PLATFORM_SDK_CLIENT_CONTEXT).get_by_id(dataset_id=outputDataset)
dataset_writer = DatasetWriter(PLATFORM_SDK_CLIENT_CONTEXT, dataset)
write_tracker = dataset_writer.write(df2, file_format='json')

次に、このセルにこれを入力します。

DSW

再生ボタンをクリックして、このセルを実行します。

DSW

次に進む前に、インジケーターが次のように表示されるまで待ちます。

DSW

結果は次のようになります。

DSW

結果として、Adobe Experience Platformでは、Demo System - Demo Dataset forRecommendationsモデル入力(Global v1.1)​に新しいデータのバッチが作成され、
ここ

DSW

DSW

次の手順:8.2 — モデルオーサリングと操作

モジュール8に戻る

すべてのモジュールに戻る

このページ