特定の製品を見ているときに好きな製品をレコメンデーションする機械学習モデルを作成するには、Webサイトでユーザーが行った以前の購入を分析する必要があります。 このレッスンでは、Adobe Analytics経由でプラットフォームに流れる購入データを調べ、そのデータを機械学習モデルのトレーニングに役立つ機能データセットに変換します。
Adobe Experience PlatformにログインするURLは次のとおりです。https://experience.adobe.com/platform
Adobe Experience Platformでのエクスペリエンスデータモデル(XDM)は、データの標準化を支援し、組織全体でデータを効率的に使用できるようにします。
Adobe Experience Platformにログインします。
ログインした後、Adobe Experience Platformのホームページに移動します。
続行する前に、サンドボックスを選択する必要があります。 選択するサンドボックスの名前は--aepSandboxId--
です。 これを行うには、画面上の青い線の「Production Prod」というテキストをクリックします。
適切なサンドボックスを選択すると、画面の変更が表示され、専用のサンドボックスに移動します。
左のメニューで[データセット]をクリックします。
製品レコメンデーションの機械学習モデルを開発する際には、ユーザーが以前に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サイトのイベントデータセットと入力します。
データセットDemo System - Websiteのイベントデータセット(グローバルv1.1)を開きます。
「プレビューデータセット」ボタンをクリックすると、そのデータセットに送信されるデータと、データモデルがどのように表示されるかを確認できます。 FYI — データセット内のデータが異なって見える場合があります。 それは正常で期待通りです。
データセットのプレビューーウィンドウを閉じます。
このデータセットに定義されたスキーマを見てみましょう。
左のメニューで、スキーマを選択します。
スキーマの概要で、このラボで使用する3つのスキーマを検索してください。
スキーマ名 |
---|
デモシステム —Recommendationsモデル入力のイベントスキーマ(グローバルv1.1) |
デモシステム — XML予測のプロファイルスキーマ(グローバルv1.1) |
デモシステム — Webサイトのイベントスキーマ(グローバルv1.1) |
Demo System - Websiteのイベントスキーマ(グローバルv1.1)という名前のスキーマーをクリックして開きます。
ジュピター・ノートに行って、手を汚しましょう。
左のメニューで[ノートブック]をクリックします。
JupyterLabをクリックします。 次に、JupyterLabの読み込みが表示されます。 この処理には1 ~ 2分かかる場合があります。
Jupyter Notebooksを実行した後、次の手順に進むことができます。
Jupter Notebooksは、ノートブックの構築プロセスを開始し、クリックストリームデータをトレーニングに備えた使いやすいデータセットに変換するコードを追加できるように実行中です。
「Jupyter Notebooks」で、空のPython 3ノートブックを開き、ランチャーの「Blank」ボタンをクリックします。
空の空の新しいPython 3ノートブックが作成されます。 続行する前に、ノートブックにわかりやすい名前を付けてください。 無題.ipynbファイルを右クリックし、名前の変更をクリックします。
ノートブックの名前としてluma-recommendations-feature-transformation.ipynbと入力し、Enterを押します。 その後、次の手順を実行します。
次の作業:
ノートブックの最初のセルをクリックします。
下のコードをコピーして、ノートブックの最初のセルに貼り付けます。
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に次の文字を入力します。
再生ボタンをクリックして、このセルを実行します。
このセルの実行は、数秒~数分かかります。 次の結果が出るまで、このノートブックでは何もしないでください。
再生ボタンを押してセルを実行するたびに、操作が継続中かどうかを示すインジケーターが表示されます。
次に、再生ボタンを押してセルを実行したときのインジケーターを示します。
これは、セルが実行され、アクションが完了したときのインジケーターです。
インジケータが実行の終了を示すまで、演習を続行しないでください。 実行が完了するのを待たないと、次の手順で動作が停止し、多くのエラーが表示されます。 これは、ジャプター・ノートブックのすべてのセルの実行に適用されます。インジケーターの変更が表示され、次のようになるので、実行が完了するまで常に待ちます。
セル1の実行後は視覚的な結果が得られません。 再生ボタンをクリックした後、次の手順に進みます。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
from platform_sdk.dataset_reader import DatasetReader
dataset_reader = DatasetReader(client_context, inputDataset)
df = dataset_reader.limit(1000).read()
df.head()
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
結果は次のようになります(ただし同一ではありません。Adobe Experience Platformインスタンスで使用できるデータの量は多かれ少なかれです)。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
# 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"])]
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
# 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, "\|\|")
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
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)
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
このセルの実行には1 ~ 2分かかる場合があります。 次の結果が出るまで、このノートブックでは何もしないでください。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
この実行後は視覚的な結果はありません。 再生ボタンをクリックした後、次の手順に進みます。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
df2.head()
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
結果は次のようになります。
ノートブック内の次の空のセルをクリックします。
下のコードをコピーして、ノートブックの次の空のセルに貼り付けます。
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')
次に、このセルにこれを入力します。
再生ボタンをクリックして、このセルを実行します。
次に進む前に、インジケーターが次のように表示されるまで待ちます。
結果は次のようになります。
結果として、Adobe Experience Platformでは、Demo System - Demo Dataset forRecommendationsモデル入力(Global v1.1)に新しいデータのバッチが作成され、
ここ。
次の手順:8.2 — モデルオーサリングと操作