Amazon Web Services ブログ

Amazon Personalize を使ったオムニチャネルでのパーソナライゼーション

顧客とブランドとの接点となるタッチポイントが、デジタルとリアルライフとの入り組んだ関係に変化していくなか、顧客を引き付けるためのパーソナライズされた体験を販売チャネルをまたいで提供することは、気が遠くなる程の大仕事になっています。同時に、顧客からの期待度も増大し続けます。モバイル、ウェブ、E メール、SMS、問い合わせセンター、そして対面を通じた接触の間で、シームレスに体験が移行できない場合、現代の顧客は急速にブランドへの関心を低下させるのです。

Amazon Personalize では、機械学習 (ML) アルゴリズムを応用して、キャンペーンと呼ばれるパーソナライズされたレコメンデーションを生成します。これは、履歴からユーザーの好みを学習するとともに、ユーザーが関心を膨らませている対象にもリアルタイムで適応できるものです。このパワフルなツールは、真にパーソナライズされた顧客体験を生み出すための力になります。しかしながら、Amazon Personalize を別々のチャネル間に配置するためには、そこでの体験を機能させるのに必要なアーキテクチャやツールに関しての、熟慮されたアプローチが必要となります。

この記事では、3 つの一般的なチャネル、つまり、ウェブとモバイルのアプリケーション、メッセージ、そして対話を通じパーソナライズされたレコメンデーションを提供するサンプルのフルスタック E コマースアプリケーションに、Amazon Personalize を統合する方法をご紹介します。分離されたマイクロサービスアーキテクチャをいくつかの AWS Lambda 関数と組み合わせることで、Amazon Personalize のキャンペーンが利用できるようになり、また、各チャネル間で顧客の意図を追跡できるようになります。次の図に、今回のソリューションを示します。

 

ソリューションの概要

このソリューションは、GitHub レポジトリ、Retail Demo Store の一部として提供されます。このプロジェクトでは、ウエブ、モバイル、メッセージ、および対話の各オムニチャネルで、パーソナライゼーションの提供方法を紹介するフルスタックの E コマース用サンプルウェブアプリケーションを、お使いの AWS アカウントにデプロイします。このアプリケーションは、次に示すような複数のデバイスタイプに対応し、他の多くの業界向けのモデルとしても使用できるような、典型的な E コマース/小売りのユースケースとなっています。

次の図は、この記事で扱うアーキテクチャにおける各部の関係を示しています。この記事では、Amazon Personalize の単一デプロイから、3 つの異なるコミュニケーションチャネル全体に対し、パーソナライズしたレコメンデーションを供給する方を見ていきます。真のオムニチャネルでのユーザー体験にとって、曖昧ながらも多くの場合に重要であり、このユースケースにおいて共有された Amazon Personalize キャンペーンを使う理由ともなる要件とは、全チャネルを通じて同じ論理ユーザーを特定可能にするということです。そしてもちろん Amazon Personalize では、ユーザーが膨らませている関心にもリアルタイムで適応できるのが、最もパワフルな機能の 1 つとなっています。このことは、次に示すアーキテクチャにより、リアルタイムのレコメンデーションを複数のチャネルに拡張することで実現されます。

多くの企業が顧客とのつながりを保つために使う主要なチャネルは、モバイルとウェブのアプリケーションです。前出の図の中で 1、2、および 3 として描かれているこのチャネルでは、モバイルもしくはウェブアプリケーションが Amazon Personalize に対しクリックストリームイベントを送信することでリアルタイムのレコメンデーションを実現しています。同時に、パーソナライズされた製品レコメンデーションを、Amazon Elastic Container Service (Amazon ECS) がホスティングする RESTful マイクロサービスから取得しています。このマイクロサービスは Amazon Personalize を呼び出し現時点のユーザーに関する製品レコメンデーションを取得します。さらに、その製品のアイテム ID を、製品カタログのマイクロサービスが提供する詳しい製品情報に変換します。このレスポンスは、ユーザーインターフェース上で描写するのに適した形態となります。

各企業に良く利用され、図の中では 4、5、6 として描かれているもう 1 つのチャネルは、E メール、SMS、およびダイレクトメッセージなどの、アウトバウンドメッセージです。メッセージに対しては、Retail Demo Store が Amazon Pinpoint を使うことでターゲットユーザーをその行動や個性に基づきセグメント化し、そのユーザー向けの動的なメッセージキャンペーンを構築します。またここでは、Amazon Pinpoint での ML モデル統合を利用し、Amazon Personalize からパーソナライズされたレコメンデーションを取得しています。これにより、各ユーザーの現時点の興味に基づきパーソナライズされたレコメンデーションを含む、ターゲットメッセージを送出できるようになります。

対話チャネルとしては、アプリケーションだけでなく、Alexa、Facebook Messenger、Slack、Twilio といった外部の音声ツールに組み込まれた、チャットおよび音声でのインターフェースが含まれます。今回の記事では、図の中で 7 および 8 として示す通りに、ウェブアプリケーション上のチャットボットでのインターフェースを取り扱っていますが、これは、他の対話型ツール用にも簡単に拡張できます。

概要

この記事では、Retail Demo Store プロジェクトを AWS アカウントにデプロイした上で、オムニチャネルでのユーザー体験をパーソナライズするために必要なコードと設定方法までをハイライトしていきます。

この記事で実行していく手順を次に示します。

  • 定義済みの AWS CloudFormation テンプレートを使いながら、Retail Demo Store プロジェクトを、ご自身の AWS アカウントにデプロイします (25~30 分)
  • Amazon Personalize キャンペーンを構築し、3 つのチャネル全体にパーソナライズされたレコメンデーションを供給します (2 時間)
  • Retail Demo Store のウェブアプリケーション上で、このパーソナライズされたユーザー体験を確認します
  • Amazon Pinpoint からのアウトバウンドメッセージを通じての、パーソナライズされた製品レコメンデーションを有効にします (1 時間)
  • Amazon Lex による対話型インターフェースを通じての、パーソナライズされた製品レコメンデーションを有効にします (30 分)
  • リソースをクリーンアップします

前提条件

今回のガイドを実行するには、以下の前提条件が必要です。

  • AWS アカウント
  • プロジェクトをデプロイするために必要な権限がある、AWS アカウント内のユーザー

ステップ 1: AWS アカウントへの Retail Demo Store のデプロイ

次に示す表から、ご自身のリージョンと対応している Launch Stack ボタンをクリックします。このリージョン表は、今回のプロジェクトをデプロイ可能な全リージョンを表してはいません。現状でデプロイ用に設定されたリージョンだけが表示されています。

リージョン 起動
米国東部 (バージニア北部)
米国西部 (オレゴン)
欧州 (アイルランド)

テンプレートのデフォルトパラメータ値をすべて受け入れ起動します。このプロジェクトのリソースのデプロイには、25~30 分程かかります。

ステップ 2: Amazon Personalize キャンペーンの構築

パーソナライズされた製品レコメンデーションを利用する前に、まず ML モデルのトレーニングが必要です。同時に、レコメンデーション取得に必要なインターフェースエンドポイントを Amazon Personalize にプロビジョニングします。ステップ 1 でデプロイ済みの CloudFormation テンプレートには、Amazon SageMaker ノートブックインスタンスが含まれており、ステップバイステップの詳細な手順が記載された Jupyter ノートブックが提供されています。

  1. ステップ 1 で CloudFormation テンプレートをデプロイした AWS アカウントにサインインします。
  2. Amazon SageMaker コンソールで、[ノートブックインスタンス] をクリックします。

RetailDemoStore ノートブックが見つからない場合は、プロジェクトをデプロイした場所と別のリージョンになっていないかを確認します。

  1. ノートブックインスタンスにアクセスするために、[Jupyter を開く] もしくは [JupyterLab を開く] をクリックします。
  2. Jupyter ウェブインターフェースがノートブックインスタンスにロードされたら、workshop/1-Personalization/1.1-Personalize.ipynb ノートブックをクリックします。

各ノートブックはディレクトリ構造で整理されているので、このノートブックのサブディレクトリを見るには、workshop フォルダーを開く必要があります。

  1. 1.1-Personalize ノートブックが開いたら、各セルの内容を読みながらワークショップをステップごとに実行していきます。
  2. Jupyter ツールバーにある [Run] をクリックすることで、各セルのコードを順に実行できます。

このノートブックの完了には、約 2 時間かかります。

ステップ 3: ストアフロントでのパーソナライゼーションの確認

ステップ 2 において、3 つの Amazon Personalize キャンペーンが作成済みです。各キャンペーンは、Amazon Personalize がサポートする主要なユースケースでのレコメンデーションを提供します。このステップでは、各ユースケースでのパーソナライズされた顧客体験を確認していきます。

  1. Retail Demo Store ウェブアプリケーションにアクセスするため、ステップ 1 でデプロイした CloudFormation スタックの WebURL 出力パラメータを見つけます。

これは、ウェブアプリケーションを提供するための、Amazon CloudFront ディストリビューションに対するパブリック URL です。この URL を見つけるには、AWS CloudFormation コンソールから、ステップ 1 でデプロイしたCloudFormation スタック RetailDemoStore を選択してから、ルートテンプレートの [出力] タブを開きます。WebURL 出力パラメータの値を選択し、ブラウザー上でウェブアプリケーションを開きます。

  1. [Sign In]、[Create account] の順にクリックし、Retail Demo Store ウェブアプリケーションにユーザーアカウントを作成します。

ご自身のアカウントを確認できるように、有効な携帯電話番号を入力します。サインアップフォームを送信すると、6 桁の確認コードを記載した SMS が送られてきます。

  1. このコードを使いアカウント確認を行った上で、ご自身のユーザー名とパスワードでサインインします。

ユーザーパーソナライゼーション

この記事で最初に扱う Amazon Personalize のユースケースはユーザーパーソナライゼーションです。現在のユーザーにパーソナライズされたレコメンデーションを、ホームページやランディングページで提供します。Retail Demo Store ウェブアプリケーションでは、ホームページ上で、このユースケースの動作を確認できます。次のスクリーンショットを見ると、Retail Demo Store ホームページに Inspired by your shopping trends と表示されています。ここには、ステップ 2 の HRNN-Metadata レシピを使い作成された Amazon Personalize キャンペーンからの、9 個の製品レコメンデーションが提示されています。

この段階では、操作履歴のない新規ユーザーとしてサインインしているため、キャンペーンは他のユーザーの操作に基づいた初期レコメンデーションを提供しています。個別製品の詳細を表示していくと、Amazon Personalize がリアルタイムでその傾向を学習し、レコメンデーションを対応させます。これは、AWS Amplify の JavaScript ライブラリを使って、Amazon Personalize Event Tracker に対しクリックイベントを送信することで実現しています。たとえば、次に示すコードでは、(匿名もしくはサインイン済みの) ユーザー が、ウェブアプリケーション上の製品を閲覧する度に、ProductViewed イベントを Amazon Personalize に送信します。

AmplifyAnalytics.record({
    eventType: 'ProductViewed',
    userId: userId ? userId : null,
    properties: {
         itemId: product.id
    }
}, 'AmazonPersonalize');

関連アイテムのレコメンデーション

次のユースケースは、関連アイテムのレコメンデーションです。これには、詳細を表示中のアイテムに似た他の製品も、同時に推奨するページなどが該当します。この機能の実装は、Retail Demo Store ウェブアプリケーションの製品詳細ビューで確認することができます。製品詳細ページは、その製品に対応した [Details] をクリックして表示します。このユースケースを機能させている Amazon Personalize キャンペーンは、ステップ 2 において SIMS レシピを使い作成されています。次のスクリーンショットに、製品詳細ページに表示された関連推奨製品を示します。

この例では、Amazon Personalize キャンペーンを作成するために利用された操作履歴データセットには、フットウェアとアウトドアカテゴリの製品に対する好みが表れています。したがって、この関連アイテムレコメンデーションキャンペーンでは関連推奨アイテムとして、それら 2 つのカテゴリーから正確にレコメンデーション (アウトドアカテゴリーではフィッシング用のルア、フットウェアカテゴリでは靴) を生成しています。関連アイテムのレコメンデーションに使われる一般的なコンテンツフィルタリングテクニックでは、こういったタイプの関連を検出することはあまりありません。

パーソナライズされたランク付け

最後のユースケースは、パーソナライズされたランク付けです。これは、現時点のユーザーのための厳選アイテムリストを再構成することなどがあたります。この機能は、検索エンジンと組み合わせることで、ユーザーに表示する前の検索結果を再構成するためにも使えます。

Retail Demo Store ウェブアプリケーションのカテゴリービュー上には、ステップ 2 でトレーニングした Personalized-Ranking キャンペーンが実装されています。次のスクリーンショットは、ホームビューの上部に表示された、各製品カテゴリーへのリンク一覧を示しています。これらのリンクを 1 つ選択することで、そのカテゴリー内の製品が表示されます。各製品は、現時点のユーザーに対応したランク付けが行われ、ここに一覧表示されています。

ステップ 4: Amazon Pinpoint のパーソナライズされた製品レコメンデーションの有効化

ここまでの手順で、Amazon Personalize を使い、ウェブアプリケーション上のパーソナライズされた顧客体験を構築する方法が、おわかりいただけたと思います。多くの企業でのパーソナライズは、このレベルに留まります。これにはいくつかの理由が存在します。たとえば、マーケティングとメッセージングなど異なるチャネル同士で使用しているパーソナライゼーション用ソリューションを統合できないというこや、単一ユーザーに関してチャネルをまたぐプロファイルが不足しているために、効果的なレコメンデーションが作れないことなどが挙げられるでしょう。

このステップでは、ステップ 3 でユーザーレコメンデーションを機能させた Amazon Personalize キャンペーンを使い、パーソナライズされたレコメンデーションを含むアウトバウンドのメッセージを、Amazon Pinpoint によりユーザーに送信する方法を説明します。すでにトレーニング済みの HRNN-Metadata キャンペーンを再利用するのに加え、Retail Demo Store の Products マイクロサービスも引き続き使用しながら、それらをまとめあげるための Lambda 関数を作成します。ここでのステップはすべて、もう 1 つの Jupyter ノートブックに従い進めていきます。また、次に示す Python のサンプルコードからは、Amazon Pinpoint と HRNN-Metadata キャンペーン、そして Lambda 関数をリンクするための ML レコメンダーの設定方法を知ることができます。

import boto3

pinpoint = boto3.client('pinpoint')

pinpoint.create_recommender_configuration(
    CreateRecommenderConfiguration={
        'Attributes': {
            'Recommendations.Name': 'Product Name',
            'Recommendations.URL': 'Product Detail URL',
            'Recommendations.Category': 'Product Category',
            'Recommendations.Description': 'Product Description',
            'Recommendations.Price': 'Product Price',
            'Recommendations.ImageURL': 'Product Image URL'
        },
        'Description': 'Retail Demo Store Personalize recommender for Pinpoint',
        'Name': 'retaildemostore-recommender',
        'RecommendationProviderIdType': 'PINPOINT_USER_ID',
        'RecommendationProviderRoleArn': pinpoint_personalize_role_arn,
        'RecommendationProviderUri': personalize_campaign_arn,
        'RecommendationTransformerUri': lambda_function_arn,
        'RecommendationsPerMessage': 4
    }
)

Attributes マップでは Lambda 関数が返す属性を定義しています。これは、Amazon Pinpoint のメッセージテンプレートで使用することができます。PINPOINT_USER_IDRecommendationProviderIdType 値は、Amazon Personalize キャンペーンの中で、Amazon Pinpoint のエンドポイントをユーザー ID とリンクする方法を指定します。最後に、RecommendationProviderUriRecommendationTransformerUri により、Amazon Pinpoint が、Amazon Personalize キャンペーンと Lambda 関数にそれぞれ接続されます。

このステップに関する詳細な解説は、お使いの AWS アカウントにデプロイ済みの Amazon SageMaker ノートブックインスタンス内にある、もう 1 つの Jupyter ノートブックから得ることができます。必要であれば、ステップ 1 で CloudFormation テンプレートをデプロイした AWS アカウントにサインインします。

  1. Amazon SageMaker コンソールで、[ノートブックインスタンス] をクリックします。

RetailDemoStore ノートブックが見つからない場合は、プロジェクトをデプロイした場所と別のリージョンになっていないかを確認します。

  1. ノートブックインスタンスにアクセスするために、[Jupyter を開く] もしくは [JupyterLab を開く] をクリックします。
  2. Jupyter ウェブインターフェースがノートブックインスタンスにロードされたら、workshop/4-Messaging/4.1-Pinpoint.ipynb ノートブックをクリックします。
  3. 先と同様に、このノートブックでの手順を実行していきます。

このノートブックの完了には、約 1 時間かかります。

ステップ 5: Amazon Lex でのパーソナライズされた製品レコメンデーションの有効化

この記事で扱う最後のチャネルは、Amazon Lex を使い実装する対話インターフェースです。ハンズフリーやもっと相互的なインターフェースによるカスタマーサポートを受けたり、ブッキング予約や製品およびサービスの注文といったセルフサービス型のターゲットエンゲージメントを利用しながら、そのブランドとのエンゲージを強めようとしている顧客にとっては、チャットボットや音声アプリケーションは代替手段としてますます一般化しています。

設計時において、既知であり静的な意図、発言、スロットおよび応答などが得られるなら、Amazon Lex でのボット機能は Amazon Lex コンソールから構築することができます。しかし、動的な反応やより複雑な意図をボットで実現しようとすると、そのボットをビジネスロジックやアプリケーションアーキテクチャ上の他の部分と結びつける必要が生じます。

このステップでは、3 つの意図を実現するためのボットを作成します。基本的な 2 つの意図では、ユーザーに対し歓迎を表し、Retail Demo Store の返品規約に関する情報を提供します。3 つめの意図を通じ、推奨製品についての顧客からの質問に答えます。この意図では、GitHub レポジトリにある次の Lambda 関数 を使い、現時点のユーザーについてのレコメンデーションを取得します。これには、Retail Demo Store の Recommendations マイクロサービスと HRNN-Metadata キャンペーンを利用しています。Amazon Lex は、レスポンスカードの形でレコメンデーションを返します。ユーザー側のウェブインターフェースは、このレスポンスカードをチャットボットのウイジェットにあるヘルプビューに表示し、ユーザーが製品を見て購入できるようにします。次のスクリーンショットにその様子を示します。

このステップに関する詳細な説明は、Jupyter ノートブック workshop/5-Conversational/5.1-LexChatbot.ipynb でご覧になれます。このノートブックを開き、先と同様に手順を実行していきます。

ノートブックの完了には約 30 分かかります。

ステップ 6: クリーンアップ

将来の課金を防ぐために、デプロイ中に使用した CloudFormation スタックを削除することで、Retail Demo Store プロジェクトがここで作成した各リソースを削除します。この記事の出典ならびに Retail Demo Store プロジェクト全体の詳細については、GitHub レポジトリでご確認ください。

まとめ

構築した各アプリケーションや、顧客とエンゲージするために使う各コミュニケーションチャネル間でのパーソナライズされたユーザー体験の提供には、まだまだ改良の余地が残されています。Amazon Personalize では、顧客の意図をリアルタイムに学習し正確でスケーラブルな、パーソナライズされたレコメンデーションを構築およびデプロイするための、アルゴリズムとインフラストラクチャが利用できます。とは言え、これらのレコメンド機能からシームレスな顧客体験を生み出させようとすると、デプロイされるアプリケーションのアーキテクチャに、特定のプランや設計が必要になってきます。この記事では、ウェブアプリケーション、メッセージ、対話の 3 つの一般的なチャネル間でのオムニチャネルパーソナライゼーションを実装する手法をご紹介しました。Amazon Personalize を使い、個別ユーザーに合わせたレコメンデーションにより顧客体験をパーソナライズする機能を、ご自身のアプリケーションでも試してみてください。


著者について

James Jory は、AWS の応用 AI ソリューションアーキテクトです。彼は、パーソナライゼーションやレコメンデーションのシステム、そして、E コマース、マーケティングテクノロジー、顧客データ分析の背景にある技術に、特別な関心を寄せています。余暇には、キャンプやレースシミュレーションを楽しんでいます。