「Amazon SageMaker Data Wranglerを使用して、Amazon Personalizeのデータを準備する」
「Amazon SageMaker Data Wranglerを活用して、Amazon Personalizeのデータを整理する方法」
レコメンドエンジンは、それを準備するために使用されるデータの質によってのみ優れたものとなります。生データをモデルに適した形式に変換することは、エンドユーザーにとってよりパーソナライズされた推薦を得るための鍵です。
この記事では、Minnesota大学のGroupLens研究で準備されたMovieLensデータセットを、Amazon PersonalizeとAmazon SageMaker Data Wranglerを使用して取り込む方法について説明します。 [1]
ソリューションの概要
Amazon Personalizeは、過去のユーザーの行動からユーザーの好みを学習し、その学習済みの好みを迅速に変更する能力が主な価値提供です。ユーザーの理解を開発するためには、Amazon Personalizeは過去のユーザーの行動データでトレーニングする必要があります。具体的には、Amazon Personalizeが学習する主なデータタイプは、userID
、itemID
、timestamp
の3つの重要な列を含む、ユーザーとアイテムの間の特定の時間におけるポジティブな相互作用を表すタブラーデータセットです。モデルがこれらの行動トレンドを学習できるようにするために、ユーザーは独自の顧客の相互作用を含むデータをアップロードする必要があります。Amazon Personalize内部のアルゴリズムは、Amazonの機械学習領域での経験に基づいて選択されていますが、パーソナライズされたモデルはどのようなデータもプリロードされず、顧客ごとにモデルをトレーニングします。
この解説で探求するMovieLensデータセットはこの形式ではありませんので、Amazon Personalizeに適した形式にするために、機械学習用の専用のデータ集約・準備ツールであるSageMaker Data Wranglerを使用します。SageMaker Data Wranglerには、300以上の事前設定されたデータ変換や、Pandasなどのデータ処理ライブラリを使用してカスタムコードを持ち込んでカスタム変換を作成する機能があります。
前提条件
まず、Amazon SageMaker Studioドメインがセットアップされている必要があります。セットアップ方法の詳細については、Amazon SageMakerドメインへのオンボード(クイックセットアップ)を参照してください。
また、Amazon PersonalizeおよびAmazon SageMakerサービスロールに対して必要な機能へのアクセス権限を設定するために、正しいアクセス許可を設定する必要があります。これには、AWS Identity and Access Management(IAM)を使用します。
この解説で使用するために、新しいAmazon Personalizeデータセットグループを作成するか、既存のものを使用する必要があります。
最後に、MovieLensデータセットをダウンロードして解凍し、Amazon Simple Storage Service(Amazon S3)バケットに配置する必要があります。
Amazon PersonalizeからSageMaker Data Wranglerを起動する
Amazon PersonalizeとのSageMaker Data Wranglerの統合を開始するには、次の手順を完了してください。
- Amazon Personalizeコンソールで、データセットグループの概要ページに移動します。
- データセットのタイプに応じて、相互作用データのインポート、ユーザーデータのインポート、またはアイテムデータのインポートを選択します(この記事では相互作用データのインポートを選択します)。
- 「インポート方法」から、「データラングラーを使用してデータをインポート」を選択します。
- 「次へ」を選択します。
- 事前準備の一環として、作成したSageMakerドメイン、ユーザープロファイル、IAMサービスロールを指定します。
- 「次へ」を選択します。
- SageMakerデータラングラーのインスタンスを起動するための手順に従って続けます。
環境の初期セットアップには最大で5分かかる場合があります。
生のデータをSageMakerデータラングラーにインポートする
SageMakerデータラングラーを使用してデータを準備しインポートする場合、データフローを使用します。データフローは、機械学習モデルを作成するためにデータに対して行われる一連の変換と分析を定義します。フローにステップを追加するたびに、SageMakerデータラングラーはデータに対して操作を実行します。たとえば、別のデータセットと結合したり、一部の行や列を削除したりします。
まず、生のデータをインポートしましょう。
- データフローページで、「データをインポート」を選択します。
SageMakerデータラングラーでは、50以上のサポートされたデータソースからデータをインポートすることができます。
- 「データソース」で、「Amazon S3」を選択します。
- アップロードしたデータセットをS3バケットから選択します。
SageMakerデータラングラーは自動的にデータのプレビューを表示します。
- デフォルトの設定を保持し、「インポート」を選択します。
データがインポートされると、SageMakerデータラングラーはデータセットを自動的に検証し、サンプリングに基づいてすべての列のデータ型を検出します。
- 次のステップに進む前に、「データ型」ページの上部で「データフロー」を選択してメインのデータフローを表示します。
SageMakerデータラングラーの主な利点の1つは、データの小さなサブセット上で変換のプレビューを実行し、変換を全データセットに適用する前に同じ変換をAmazon S3の複数のパーティションファイルに対して実行できることです。また、パラメーターを使用することもできます。
データの変換
SageMakerデータラングラーでデータを変換するには、データフローに変換ステップを追加します。SageMakerデータラングラーには、Amazon Personalizeのマップカラムを含む300以上の変換があります。一般的なSageMakerデータラングラーの変換を使用して、外れ値や型の問題、欠損値を修正したり、データの前処理手順を適用したりすることができます。
Amazon Personalizeを使用するためには、インタラクションデータセットに提供されたデータは、データセットスキーマと一致している必要があります。映画推薦エンジン向けの提案されたインタラクションデータセットスキーマには、以下が含まれます:
user_id
(文字列)item_id
(文字列)event_type
(文字列)timestamp
(Unixエポック時刻形式)
Amazon Personalizeのデータセットとスキーマについて詳しくは、データセットとスキーマを参照してください。
前のセクションの最後のステップで表示されるratings.csvファイルには、1〜5で評価された映画が含まれています。それに基づいて映画推薦エンジンを構築したいとします。そのためには、以下の手順を完了する必要があります:
- 列のデータ型を変更します。
- ClickとWatchの2つのイベントタイプを作成します。
- 評価が2以上のすべての映画をClick、評価が4以上の映画をClickおよびWatchの両方として割り当てます。
ratings
列を削除します。- 列をAmazon Personalizeのインタラクションデータセットスキーマにマップします。
- タイムスタンプがUnixエポック時刻であることを確認します。
注意:ステップ3は個別のパーソナライゼーションモデルの作成に必要ありません。Amazon Personalizeのストリームライン化されたビデオオンデマンドドメインのリコメンダー(Top Picks for Youなど)を使用する場合、ClickとWatchは必須のイベントタイプです。ただし、これらを持っていない場合は、イベントタイプフィールド(または独自のイベントタイプ、例えば生のユーザー評価)を含めず、User Personalizationなどのカスタムレシピを使用することができます。どの種類の推薦エンジンを使用するにせよ、データセットには必ずポジティブなユーザー意図の表現のみが含まれるようにする必要があります。したがって、選択するアプローチに関係なく、すべての1つ星評価(および2つ星評価も可能性がある)を削除する必要があります。
これで、SageMakerデータラングラーを使用して前述の手順を実行しましょう。
- データフローページで、最初の変換であるデータの型を選択します。
- 各列の型を更新します。
- 変更を反映するためにプレビューを選択し、更新を選択します。
- データフローにステップを追加するには、変換を実行したいステップの隣にあるプラス記号を選択し、変換の追加を選択します。
- 映画の評価をクリックしてイベントをフィルタリングするために、フィルタデータステップを追加して評価が2以上の映画をフィルタリングします。
- 新しいカラム
eventType
を追加するために、別のカスタム変換ステップを追加し、Clickを割り当てられた値として選択します。 - プレビューを選択して、変換結果を再確認し、追加を選択します。
- この場合、PySparkコードを使用して、
eventType
という名前のカラムを追加し、すべての2つ星から5つ星の映画に一様にClick
という値を割り当てます。
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Click"))
- Watchイベントの場合、評価4以上の映画について前の手順を繰り返し、Watchという値を割り当てるためにData typesステップに手順を追加します。これらのステップに対する私たちのPySparkコードは以下の通りです。
from pyspark.sql.functions import litdf = df.withColumn("eventType", lit("Watch"))
ここまでのデータフローは次のスクリーンショットのようになります。
データセットの連結
ウォッチおよびクリックイベント用に2つのデータセットがあるため、これらを1つのインタラクションデータセットに連結する方法を見ていきましょう。
- Data flowページ上で、ウォッチイベントの作成の横のプラスサインを選択し、連結を選択します。
- 他の最終ステップ(クリックイベントの作成)を選択し、これにより両方のセットが自動的にマップ(収束)して連結プレビューが表示されます。
- 構成を選択して連結されたデータセットのプレビューを表示します。
- ステップに名前を追加します。
- 追加を選択してステップを追加します。
データフローは現在、次のスクリーンショットのようになっています。
- 次に、元の評価カラムを削除するために、カラムの管理ステップを追加しましょう。
Amazon Personalizeには、ユーザー、アイテム、タイムスタンプのデフォルトの列名があります。これらのデフォルトの列名はuser_id
、item_id
、およびtimestamp
です。
- Amazon PersonalizeステップにTransformを追加して、既存の列ヘッダーをデフォルトのヘッダーに置き換えましょう。
- 私たちの場合、
event_type
フィールドも使用するので、それもマッピングしましょう。
このステップで、データ変換の作業は完了し、インタラクションのデータセットが次のステップの準備ができました。
次に、タイムスタンプを検証しましょう。
- これはカスタムトランスフォームステップを追加することによって行うことができます。このポストでは、Python(ユーザー定義関数)を選択します。
- 入力列としてタイムスタンプを選択し、出力として
readable_timestamp
という新しい列を作成しましょう。 - 変換のためのモードとしてPythonを選択し、Python関数のために以下のコードを挿入しましょう:
def custom_func(value: int) → str: return datetime.utcfromtimestamp(value).strftime('%Y-%m-%d %H:%M:%S')
- 変更内容を確認するためにプレビューを選択しましょう。
この場合、2000年代の日付が表示されます。MovieLensは1996年からデータの収集を開始しているため、これは予想通りです。もしも追加を選択しなければ、この変換はデータフローに追加されません。
- これは単なるサニティチェックだったため、左上のデータフローを選択してデータフローに戻ることができます。
最後に、データセットについてのサマリーレポートを作成するために分析ステップを追加しましょう。このステップでは、Amazon Personalizeに適したデータセットかどうかを評価する分析が行われます。
- データフローの最終ステップの横にあるプラス記号を選択して分析を追加しましょう。
- Analysis typeとしてData Quality And Insights Report for Amazon Personalizeを選択しましょう。
- Dataset typeとしてInteractionsを選択しましょう。
- Createを選択しましょう。
MovieLensデータセットは非常にクリーンなので、分析には問題はありません。問題が特定された場合は、データセットを繰り返し操作し、問題を解決できるまで分析を再実行できます。
デフォルトでは、分析は50,000行のサンプルで実行されます。
データセットをAmazon Personalizeにインポートする
この時点で、生データは変換され、変換されたインタラクションデータセットをAmazon Personalizeにインポートする準備が整いました。SageMaker Data Wranglerは、データをS3バケット内の場所にエクスポートする機能を提供します。以下のいずれかの方法を使用して場所を指定できます:
- Destination node – SageMaker Data Wranglerがデータを処理後に格納する場所
- Export to – 変換結果のデータをAmazon S3にエクスポートする
- Export data – 小規模なデータセットの場合、変換したデータを迅速にエクスポートできます
Destination nodeメソッドを使用すると、データをエクスポートするために、宛先ノードとSageMaker Data Wranglerジョブを作成します。SageMaker Data Wranglerジョブの作成は、SageMaker Processingジョブの開始によってフローをエクスポートします。作成後、エクスポートする宛先ノードを選択できます。
- エクスポートしたい変換を表すノードの横のプラス記号を選択します。
- Export toを選択し、Amazon S3 (via Jupyter Notebook)を選択します。
また、SageMaker Data Wrangler内のJupyterノートブックを介してデータをAmazon Personalizeにエクスポートすることも選択できます。
- データセット名に名前を入力します。これは宛先として提供されるS3バケット内のフォルダ名として使用されます。
- ファイルタイプ、フィールドデリミタ、および圧縮方法を指定できます。
- オプションで、パーティションの数とパーティション化する列を指定できます。
- 宛先を追加を選択します。
データフローは以下のスクリーンショットのようになります。
- データフローを処理し、データを前の手順で構成した宛先(S3バケット)に格納するジョブを作成します。
- ジョブ名を入力し、ジョブの構成を選択します。
SageMaker Data Wranglerには、インスタンスタイプ、インスタンス数、ジョブ構成を設定する機能があり、ジョブを処理するためのスケジュールを作成することもできます。インスタンス数の選択方法のガイドについては、Data Wranglerフローの作成と使用を参照してください。
ジョブの状態を監視するには、SageMakerコンソールのダッシュボードページに移動します。 処理セクションには、完了したジョブと作成されたジョブの数が表示されます。詳細な情報は、完了したジョブについての詳細を確認することができます。
ジョブが完了すると、指定された宛先に変換されたデータの新しいファイルが作成されます。
- Amazon Personalizeコンソールに戻り、別のデータセットをインポートするためのデータセットグループに移動します。
- インタラクションデータのインポートを選択します。
- Amazon S3から直接Amazon Personalizeデータセットにデータをインポートを選択し、変換されたデータセットをAmazon S3から直接インポートします。次に次へを選択します。
- スキーマを定義します。この記事では、
user_id
(文字列)、item_id
(文字列)、event_type
(文字列)、timestamp
(long)のフィールドから構成されるデータセットが存在する場合です。
この時点で、ビデオオンデマンドドメインリコメンダーまたはカスタムソリューションを作成することができます。そのためには、準備とデータのインポートの手順に従ってください。
結論
この記事では、SageMaker Data Wranglerを使用してAmazon Personalizeのサンプルデータセットを準備する方法について説明しました。SageMaker Data Wranglerには300以上の変換があります。これらの変換とカスタムユーザー変換の追加能力により、最終ユーザーにハイパーカスタマイズされたコンテンツを提供するためのデータセット作成プロセスを効率化できます。
この記事では、インタラクションデータセットの準備方法についてのみ説明しましたが、SageMaker Data Wranglerを使用してユーザーデータセットやアイテムデータセットの準備も行うことができます。Amazon Personalizeで使用できるデータのタイプについての詳細は、データセットとスキーマを参照してください。
Amazon PersonalizeまたはSageMaker Data Wranglerに初めて取り組む場合は、それぞれAmazon Personalizeのはじめ方やSageMaker Data Wranglerのはじめ方を参照してください。この記事に関する質問がある場合は、コメント欄に追加してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles