Recommendations AI データの取り込み
Google Cloud Japan Team
※この投稿は米国時間 2021 年 9 月 18 日に、Google Cloud blog に投稿されたものの抄訳です。
以前の投稿で、Recommendations AI の高レベルな構造を紹介し、このプロダクトが一般にどのように使用されているかを示しました。この投稿では、Recommendations AI を使い始める最初の手順として、データの取り込みについて詳しく解説します。ここでは、データを Recommendations AI に取り込み、モデルをトレーニングして推奨を得る手順に関する、すべての疑問に回答します。
Recommendations AI は、商品カタログとユーザー イベントを使用して機械学習モデルを作成し、個別化された商品のおすすめを顧客に提示します。Recommendations AI は本質的に、おすすめ(商品カタログ)で利用可能なアイテムのリストと、それらの商品に対するユーザーの操作(イベント)を使用します。ユーザーは各種のモデル(データ用に特に設計されたアルゴリズム)を作成して、ビジネスの目標(コンバージョン率、クリック率、収益)に応じた予測を生成できます。
Recommendations AI は、現在では Retail API の一部で、Retail Search などいくつかの Google Retail AI 製品と同じ商品カタログとイベントデータを使用します。
カタログデータ
Recommendations AI を使い始めるには、まず完全な商品カタログをはじめとするデータをアップロードする必要があります。Retail API カタログは、商品エントリで構成されます。商品に何を含めることができるかについては、完全な小売商品スキーマを参照してください。このスキーマは、すべての小売商品検出商品の間で共有されるため、アップロードしたカタログは Recommendations AI でも Retail Search でも使用できます。スキーマでは多くのフィールドを使用可能ですが、最初は商品ごとに少しのデータだけで試してみましょう。最小限の必須項目は ID、タイトル、カテゴリです。商品説明と価格に加えて、カスタム属性も提出することをおすすめします。
カタログレベル
商品をアップロードする前に、使用する商品レベルの決定が必要になることもあります。デフォルトでは、すべての商品が「プライマリ」ですが、カタログにバリエーションが存在するなら、デフォルトの取り込み動作の変更が必要になることもあります。カタログに複数のレベル(バリエーション)がある場合、プライマリ(グループ)レベルとバリエーション(SKU)レベルのどちらでおすすめを返すか、そしてプライマリ ID とバリエーション ID のどちらを使用してイベントを送信するかを決定する必要があります。Google Merchant Center を使用している場合、カタログを直接、簡単にインポートできます(以下を参照)。Merchant Center では、item_group_id を使用して商品アイテムのグループ化が行われます。バリエーションがあり、Merchant Center からカタログを取り込まない場合、最初のカタログをインポートする前に primaryProductId が正しく設定されていることを確認し、必要に応じて ingestionProductType を設定すれば十分です。
1. カタログのインポート
Retail API にカタログデータをインポートするにはいくつかの方法があります。
a. Merchant Center の同期
多くの小売業者は Google Merchant Center を使用し、商品フィードの形で商品カタログをアップロードします。その後で、これらの商品を各種の Google 広告や、Google ショッピングとGoogle で購入などの他のサービスで使用できます。しかし、Merchant Center にはそれ以外にも、商品をエクスポートし、BigQuery などの他のサービスで使用する機能もあります。
Merchant Center の商品スキーマは小売商品のスキーマとほぼ同じなので、Merchant Center を使用して Retail API 商品カタログへのフィードを行う場合に最低限の要件が満たされています。
Merchant Center からカタログをインポートするには、Retail 管理者コンソールで Merchant Center の同期をセットアップするのが最も簡単な方法です。
[データ] タブに移動して、画面の上端にある [インポート] を選択します。次に、データの [ソース] として [Merchant Center の同期] を選択します。Merchant Center のアカウント番号を追加し、同期先のブランチを選択します。
この方法は簡単ですが、いくつかの制限があります。たとえば、Merchant Center カタログが完成していない場合、おすすめのカタログに直接商品を追加できません。Merchant Center フィードに追加する必要があり、その後でおすすめカタログと同期されます。しかし、おすすめ用に別のフィードを保守するよりは、この方が簡単な可能性があります。この方法では Merchant Center フィードに商品を簡単に追加でき、広告やショッピングに使用しない場合は広告のリンク先から外しておくことができます。
Merchant Center データを使用するときのもう 1 つの制限は、Recommendations AI で必要なすべての属性が存在しない可能性があることです。サイズ、ブランド、色は多くの場合 Merchant Center に提出されますが、他のデータをおすすめモデルのデータとして使用することが望まれる場合もあります。
また、同期はアイテムの存在しないカタログ ブランチに対してのみ有効にできます。このため、カタログにアイテムがすでに存在するなら、先にすべて削除する必要があります。
b. BigQuery による Merchant Center のインポート
別の方法は、もう少し柔軟な使用が可能です。Merchant Center カタログを、BigQuery の Data Transfer Service で BigQuery にインポートします。その後で、データを BigQuery から Retail API カタログに直接一括インポートできます。この方法でも、Merchant Center スキーマにより多少の制限がありますが、他のソースからカタログに商品を追加できます(MC の同期では、同期の外でブランチを更新できません)。
通常は、a)で示した Merchant Center の直接同期が最も簡単な選択肢ですが、BigQuery DTS ジョブがすでに存在する、またはアイテムがいつインポートされるかを正確にコントロールすることが望ましい場合、この方法が適切なことがあります。また、BigQuery ビューを柔軟に使用できるため、必要なら Merchant Center データのサブセットにインポートを制限できます。たとえば、重複項目を避けるため単一の言語やバリエーションに制限できます。同様に、必要ならユニオンや複数のテーブルを使用して、各種のソースからインポートすることもできます。
c. Google Cloud Storage のインポート
カタログがデータベースに存在する、または複数のソースから商品の詳細を pull する必要がある場合、GCS からのインポートが最も簡単な選択肢のことがあります。このオプションに必要なのは、Retail AI JSON 商品スキーマで、行ごとに 1 つの商品を記載したテキスト ファイル(一般に NDJSON 形式と呼ばれます)を作成することだけです。スキーマには多くのフィールドが存在しますが、通常は基本的なフィールドだけから開始できます。そこで、2 つのアイテムを GCS ファイルからインポートするごく基本的なサンプルは次のようになります。
d. BigQuery のインポート
Merchant Center スキーマで BQ から商品をインポートできるのと同様に、Retail 商品スキーマを使用して BigQuery テーブルを作成することもできます。BigQuery の商品スキーマ定義については、こちらを参照してください。Merchant Center の BigQuery スキーマは、データを Merchant Center から転送するかどうかにかかわらず使用できますが、Retail 用の完全なスキーマではありません。たとえば、カスタム属性は含まれていません。Retail スキーマを使用すると、可能なすべてのフィールドをインポートできます。
BigQuery からのインポートは、商品カタログがすでに BigQuery にある場合に便利です。また、Retail スキーマと一致するビューを作成し、ビューからインポートを行い、必要に応じて既存のテーブルからデータを pull することもできます。
Merchant Center、Cloud Storage、BigQuery のインポートでは、インポート自体は管理コンソールの UI、またはimport API 呼び出しからトリガーできます。API を使用するとき、dataSchema 属性でスキーマを、product または product_merchant_center のどちらかに指定する必要があります。
e. API のインポートと商品の管理
API を使用して、カタログ アイテムを直接インポートしたり変更したりできます。商品にリアルタイムで変更を加える、または既存のカタログ管理システムに統合するときなどに便利な機能です。
インライン インポート メソッドは GCS のインポートとほぼ同じです。Retail スキーマ形式で商品のリストを構築し、products.import メソッド API を使用して商品を提出します。GCS の場合と同様に、既存の商品は上書きされ、新しい商品が作成されます。現在のところ、インポート メソッドは呼び出しごとに最大 100 までの商品をインポートできます。
また、get、create、patch、delete の各メソッドを使用して、API により商品を個別に管理することもできます。
すべての API 呼び出しは、HTTP/REST または gRPC を使用して行えますが、お使いの言語の Retail クライアント ライブラリを使用するのが最も簡単です。現在のドキュメントには curl と REST API を使用した多くの例が記載されていますが、本番運用には一般にクライアント ライブラリが選ばれます。
2. ライブユーザー イベント
カタログがインポートされたら、ユーザー イベントを Retail API に送信しはじめる必要があります。おすすめは最近の行動に基づいてリアルタイムでカスタマイズされるため、ユーザー イベントは発生と同時にリアルタイムで送信するようにします。一般に、最初はライブのリアルタイム イベントを送信し、その後でモデルのトレーニングを行う前に、オプションとして過去のイベントをバックフィルします。
現在、Recommendations AI モデルで使用されるイベントのタイプは 4 つです。
すべてのモデルですべてのイベントが必要なわけではありませんが、可能な限りすべてのイベントを送信することをおすすめします。
各イベントの「最低限必須の」フィールドに注意してください。商品スキーマと同様に、ユーザー イベント スキーマにも多くのフィールドがありますが、必須のフィールドはわずかです。一般的なイベントは次のようになります。
おすすめにライブイベントを送信する方法は 3 つあります。
a. Google タグ マネージャー
Google タグ マネージャーをすでに使用しており、拡張 e コマース付きの Google アナリティクスと統合しているなら、Retail API にリアルタイム イベントを読み込むには、通常はこれが一番簡単な方法です。
Google タグ マネージャーには Cloud Retail タグが用意されており、拡張 e コマース データレイヤーを使用するよう簡単に構成できますが、Cloud Retail データレイヤーを書き込んで、GTM の独自変数で必要なフィールドに書き込むこともできます。Cloud Retail タグをセットアップする詳細な手順については、こちらを参照してください。アナリティクス 360 と通常の Google アナリティクスのどちらを使用するかによってセットアップは多少異なりますが、基本的には Retail API キーとプロジェクト番号を指定してから、visitorId、userId、および拡張 e コマースで提供されない他のフィールドをオーバーライドする、いくつかの変数をセットアップすれば十分です。
Cloud Retail タグでは拡張 e コマース付き Google アナリティクスは必要ありませんが、データレイヤーに必須フィールドを書き込んだり、必須データ フィールドの GTM 変数や既存のデータレイヤー変数を取得できる必要があります。GTM での一般的な Cloud Retail タグの構成は次のようになります。
b. JavaScript Pixel
Google タグ マネージャーを現在使用していないなら、簡単な代替手段として、サイトの該当ページに Google の JavaScript Pixel を追加する方法があります。これは一般にホームページ、商品の詳細ページ、カートページです。
この構成には通常、JavaScript コードを正しいデータとともにページ テンプレートに追加する必要があります。また、環境によってはサーバー側でいくつかのコードを変更する必要があります。
c. API の書き込みメソッド
GTM やトラッキング ピクセルでユーザーのブラウザから Retail API に直接イベントを送信する代わりに、userEvents.write API メソッドを使用してサーバーサイドでイベントを送信することもできます。これは通常、サービス プロバイダが既存のイベント処理インフラストラクチャを自社プラットフォームに持つことを希望する場合に行われます。
3. 過去のイベント
AI モデルは、大量のデータで最良に動作する傾向があります。レコメンデーション モデルのトレーニングには最小イベント数の要件を満たしている必要がありますが、通常は可能であれば 1 年間分の過去のデータを提出することが推奨されます。これは、季節性が強い小売企業にとっては特に有用です。トラフィックの多いサイトでは、モデルのトレーニングを開始するため十分なライブイベントが数日間で収集できることがありますが、その場合でもさらに多くの過去のデータを提出するのが良い考えです。数週間または数か月のイベントのストリーミングを待たなくても、高品質の結果が得られます。
カタログデータと同様に、過去のイベントデータをインポートする方法もいくつか存在します。
a. アナリティクス 360 のインポート
アナリティクス 360 を拡張 e コマース トラッキングとともに使用している場合、簡単に過去のデータを BigQuery にエクスポートしてから、Retail API に直接インポートできます。
通常の Google アナリティクスにはエクスポート機能がありませんが、アナリティクス 360 にはあります。このエクスポート機能を使用すると、過去のイベントを簡単に、アナリティクス 360 から Retail API にインポートできます。
b. Google Cloud Storage のインポート
データベースまたはログに過去のイベントが存在する場合、NDJSON 形式でファイルに書き出し、それらのファイルを Cloud Storage からインポートすることもできます。多数のイベントをインポートするとき、JSON をテキスト ファイルに書き込むだけで、Google Cloud Storage から直接インポートできるので、通常はこれが最も簡単な方法です。
カタログのインポートの場合と同様に、各ファイルの行は正しい JSON 形式(この場合は JSON イベント形式)である必要があります。
インポートは API で行うか、Cloud Console UI でファイルの GCS バケットパスを入力します。
c. BigQuery のインポート
BigQuery から直接、Retail イベント スキーマまたはアナリティクス 360 イベント スキーマにイベントを読み込むことができます。この方法は、イベントがすでに BigQuery に存在するか、ストレージに GCS ではなく BigQuery を使用する場合に便利です。
各イベントタイプには多少の相違があるため、イベントタイプごとに別のテーブルを作成するのが最も簡単です。
GCS のインポートの場合と同様に、BigQuery のインポートも API を使用するか、Cloud Console UI で BigQuery テーブル名を入力して行えます。
d. API インポートと書き込み
API によるリアルタイム イベントの取り込みに使用される userEvents.write メソッドは、過去のイベントを書き込むためにも使用できます。しかし、大量のイベントを一括でインポートするには、userEvents.import メソッドの方が API 呼び出しが少なくなるため適しています。import メソッドは処理のレイテンシが長くなる可能性があるため、リアルタイムのイベント取り込みに使用すべきではありません。
過去のデータのインポートが必要なのは 1 回だけで、BigQuery や Cloud Storage のイベントは通常はインポート後に削除できることに注意してください。Retail API は、同じイベントを誤ってインポートした場合、完全に重複したイベントの片方を消去します。
4. カタログとイベントのデータ品質
上述のすべての方法は、リクエスト内の商品やイベントに問題がある場合にエラーを返します。インラインと書き込みの方法のエラーは、API の応答で直ちに返されます。BigQuery、Merchant Center、Cloud Storage のインポートでは、GCS バケットにエラーログを書き込むことができ、管理コンソール UI で多少の詳細を参照できます。Retail 管理コンソール UI の Data セクションを見ると、カタログデータについて多くの場所で詳細を参照できます。
メインの [カタログ] タブには、カタログの総合的なステータスが表示されます。データ品質の [ビュー] リンクをクリックすると、主要なカタログのフィールドに関するいくつかの詳細な指標が表示されます。
ページの上端にある [インポート アクティビティ] または [Merchant Center] リンクをクリックすると、過去のインポートのステータスを表示でき、必要なら Merchant Center のリンクも変更できます。
一般的なエラー
最も重要な指標は [Unjoined Rate] です。[unjoined] イベントは、カタログに存在しない商品アイテム ID を受信したときに発生します。これは多くの原因で引き起こされます。カタログが古い、イベント取り込みの実装にエラーがある、イベントがバリエーション ID のもので、カタログにはプライマリ ID しか存在しないなどです。イベント指標を参照するには、[データ] > [イベント] タブをクリックします。
このタブには、時間とともに各種のエラーが表示されます。エラーをクリックすると、クラウド ロギングが表示され、完全なエラー応答を参照して、特定のエラーが発生した理由を正確に判定できます。
モデルのトレーニング
カタログとイベントがインポートされると、最初のモデルをトレーニングできます。ここに示されているように、[データ] > [カタログとデータ] > [イベント] タブをチェックします。カタログのアイテム数が、在庫の正しいアイテム数を示しており、取り込まれたイベントの総数、結合済みイベントの日数が十分なら、モデルのトレーニングの準備が整っています。
詳しくは、次回の投稿で説明しましょう。
- テクニカル ソリューション コンサルタント Eric Larson