Amazon Web Services ブログ
AWS サービスを活用して代替商品を提案するためのガイダンス
完璧な世界であれば、小売業者は決して在庫切れを起こすことはありませんが、予期せぬ需要により最善の状況にならない場合もあります。食料品店は平均して営業時間の 8.2% は在庫切れの状態になっており、さらにプロモーション品では 15% にもなるため、70 億ドルから 120 億ドルの売上機会損失の危機にさらされています。次善の策は、おそらく顧客のニーズを満たす同様の商品を提供することです。注文をピッキングする従業員に自動でおすすめの代替商品を提案することで、顧客体験を向上させ、売上減少を防ぐことができます。
2020 年、米国のオンライン食料品売上は 54% 増加し、その注文の半分以上において注文した商品の内少なくとも 1 つが在庫切れになっていました。その商品は売れずにスキップされて売上減少につながることもあれば、注文をピッキングする従業員が代替品を推測することもありますが、その代替品が顧客のニーズを全く満たしていないこともあります。いずれにせよ、顧客体験は悪影響を受け、企業ブランドは傷つきます。
より良いアプローチは、異なるブランド、色、フレーバー、サイズなどの類似の商品を推奨することです。これがインテリジェントに行われれば、良好な顧客体験が保たれ、問題は回避されます。大量の商品に代替ルールを作成することは非効率的で効果的ではありません。その代わりに、Amazon Web Services (AWS) はおすすめの代替商品を提案するソリューションを構築しガイダンスとして公開しています。
Amazon OpenSearch Service を使うと、在庫切れ商品からおすすめの代替商品を提案できます。商品名と説明は、テキスト埋め込みアルゴリズムを使用して数値ベクトルに変換され、OpenSearch Service の K 最近傍 (k-NN) インデックスに挿入されます。代替商品を要求する際、候補商品は OpenSearch Service の事前フィルタリングを使用して絞り込まれ、探していた商品からの数値表現の近さに基づいてランク付けされます。
実現方法
テキスト埋め込み (embedding) とはテキスト文字列の数値表現です(つまり、互いに距離が近いものは意味が似ていると言えます)。さまざまな埋め込みアルゴリズムが利用できますが、ここでは Hugging Face で利用できる all-MiniLM-L6-v2 テキスト変換器を使用することにしました。これはこのタスクで高いパフォーマンスを発揮するためです。このテキスト変換器を活用することで商品タイトルと説明を数値ベクトル空間に置くことができ、類似した商品同士は空間の中で近くに配置されます。
例えば、「オーガニックピーナッツバター」というタイトルの探している商品があり、代替候補商品として「ピーナッツ」、「バター」、「ベーシックピーナッツバター」、「チーズ」があるとします。それらの商品タイトルを埋め込み、k-NN インデックスに挿入します。検索した商品に対する近傍(距離順にランク付け)を求めると、次のようなランキングが返ってきます。
- ベーシックピーナッツバター
- ピーナッツ
- バター
- チーズ
これは、「ベーシックピーナッツバター」が「オーガニックピーナッツバター」の埋め込みに近いベクトルとして埋め込まれ、「チーズ」の埋め込みが最も遠いためです。
ソリューションの概要
以下のようなアーキテクチャを考えてみましょう:
図 1 – AWS 上での代替商品の提案のためのガイダンス
ワークフローには次のステージが含まれています:
- 商品カタログが S3 バケットにアップロードされます
- S3 バケットから読み込みんだ商品情報を Amazon DynamoDB に挿入する AWS Lambda 関数がトリガーされます
- DynamoDB に挿入された商品は Lambda 関数にストリーミングされ、そこで商品のテキストフィールドを数値ベクトルとして埋め込みます
- ユーザーは Amazon API Gateway エンドポイントに検索したい商品の ID を指定して照会します
- Lambda は、指定された条件を満たす最も類似した商品を OpenSearch Service クラスターから絞り込みます
前提条件
このソリューションを実装するには、次の前提条件を満たしていることを確認してください:
- AWS アカウント
- Node.js パッケージマネージャー (NPM)
- AWS Command Line Interface
- AWS Cloud Development Kit (AWS CDK)
アプリケーションのデプロイ
- 開発環境にプロジェクトをクローンする
https://github.com/aws-solutions-library-samples/guidance-for-product-substitutions-on-aws - NPM の依存ライブラリをインストールする
cd substitutions
npm ci
- 必要な修飾子をつけて AWS CDK でアカウントをブートストラップする
npm run cdk bootstrap — --toolkit-stack-name CDKToolkit-Substitutions —qualifier subs
- デプロイする
npm run cdk deploy
デプロイすると、AWS CDK によりコマンドラインに API エンドポイントと利用可能なメソッドが出力されます。これらは、AWS コンソールの対応する AWS CloudFormation スタックの出力セクションでも確認できます。
アプリケーションの使い方
データのフォーマット
アプリケーションは、データを JSON Lines 形式で受け取ります。カタログの各商品情報は、ファイルの行ごとに記載されている必要があります。
各商品には、少なくとも次のフィールドが必須です:
- id (string) – 一意の商品識別子
- title (string) – 商品名(通常はブランド名と商品タイプを含む) 例: 「MyBrand 超有機アーモンドミルク」
さらに、商品には次の予約フィールドを使用できます:
- description(string) – 商品の説明 例: 「街で最高のアーモンドミルク…アーモンドと水のみで作られています。二度と他のアーモンドミルクを飲むことはないでしょう!」
- brand(string) – データセット内で綴りを統一した商品ブランド名 例: 「MyBrand」
- price(float) – 商品の価格 例: 3.50
- categories(string[]) – 商品の階層的な分類(最上位カテゴリを先頭に、最下位カテゴリを末尾に) 例: [‘飲料’, ‘ヴィーガンミルク’, ‘アーモンドミルク’]
- diet_type(string[]) – 商品が準拠する特定の食事のリスト 例: [‘ヴィーガン’, ‘グルテンフリー’, ‘コーシャー’]
- allergens(string[]) – 商品に含まれるアレルゲンのリスト 例: [‘ナッツ’]
データのアップロード
データが準備できたら、下記の名前の S3 バケットに、1 つまたは複数のファイルとしてアップロードする必要があります。
<ACCOUNT_ID>-<REGION>-substitutions-input-bucket
これにより、商品が DynamoDB テーブルに挿入され、Lambda 関数が商品のテキストプロパティを埋め込み、OpenSearch Service k-NN インデックスにベクトルを挿入するストリームが起動されます。
インデックス作成プロセスには時間がかかる場合があります。インデックス作成の進捗状況を確認するには、/status
API メソッドを呼び出します。これにより、現在テーブルにある商品数と、OpenSearch Service で現在インデックス化されている商品数が返されます。この 2 つの値が等しくなった時点で、インデックス作成は完了です。
代替商品のリクエスト
データがOpenSearch Serviceクラスタにインデックス化されると、代替商品のリクエストを開始できます。/substitutions API には、少なくとも URL クエリパラメータとして商品 ID を指定する必要があります。例: /substitutions?id=<PRODUCT_ID>
。結果は、名称と説明に基づいてランク付けされた類似商品のリストになります。
代替商品の結果は、k-NN 検索に事前フィルタを適用することでさらに絞り込むことができます。このソリューションは、カテゴリの一致、価格係数、ダイエットタイプの一致、ブランドの一致、新しいアレルゲンなしなどのフィルタを提供します。
代替可能な商品の順序つきリストが返されます。ピッカーに対しては、上位 3 つを提供し選択させることをお勧めします。さらに、推奨の有効性を時間の経過とともに追跡することも併せてお勧めします。小売業者は、このソリューションによって自動的に導出される代替商品と、過去の実績がある代替商品とを組み合わせて最終的な商品を決定していることがわかっています。
まとめ
小売店、特に食料品店では在庫切れの状況にしばしば遭遇するため、おすすめの代替商品を自動で提案することでより迅速なピッキングと顧客満足度の向上につながります。
リファレンスアーキテクチャを見て、ソースコードをダウンロードするには、Product Substitutions Guidance をご覧ください。ビジネスの加速化のお手伝いができるかどうか、AWS の担当者にお問い合わせください。
著者について
Alexandros Jordan Maragakis
Alexandros Jordan Maragakis は、イギリスに拠点を置く AWS のソリューションアーキテクトです。この 3 年以上にわたり、さまざまな業界のクラウドベースのソリューションに注力してきましたが、機械学習とフロントエンド開発に情熱を注いでいます。余暇には音楽を楽しみ、プロ並みの腕前でギターを弾きます。
翻訳はソリューションアーキテクトの飯野が担当しました。原文は こちら です。