Amazon Web Services ブログ

買い物客のセンチメント: 店内での顧客経験の分析

小売業者は何年もの間、顧客の行動とデモグラフィックを分析するために店内ビデオを使用してきました。 一般に、異なるタスクには別個のシステムが使われます。 例えば、あるシステムは店内を歩く顧客の人数を数え、これらの顧客が店のどの部分で、およびどの製品の近くで立ち止まるかを調べます。 店のレイアウトを保持するシステムもあれば、取引を記録するシステムもあるかもしれません。 歴史的に見て、戦略に従って売り上げをさらに伸ばすことができる洞察を得るために、小売業者がこれらのデータソースを結合させるには、複雑なアルゴリズムとデータ構造が必要となります。また、それらの実現にも多額の投資が必要で、継続的なメンテナンスコストが発生します。

このブログ記事では、店内ビデオ分析のためのエンドツーエンドソリューションを構築するために、AWS のサービス (Amazon Rekognition、AWS Lambda、Amazon S3、AWS Glue、AWS Athena および AWS QuickSight) を使ってこのプロセスを簡素化する方法を説明します。ここでは、既存の損失防止用店内カメラを活用した静止画像の分析に焦点を当てて、小売店内経験のデータを生成します。

以下の図は、全体的なアーキテクチャと、関与する AWS のサービスを示すものです。

Amazon Rekognition などの AWS 上の Machine Learning サービスを使用して、それらを店舗からの動画ビデオまたは静止画像に適用することで、顧客の行動 (つまり、店舗のどの箇所を頻繁に訪れているか)、来店者のデモグラフィックセグメンテーション (つまり、性別またはおおよその年齢など) から洞察を引き出すと同時に、顧客センチメントのパターンも分析することが可能になります。この方法はすでにこの業界で一般化していますが、AWS が提案するソリューションは、これをより簡単、迅速、かつ正確にします。センチメント分析は、例えば、ブランドコンテンツとサイネージ、エンド陳列のディスプレイ、または宣伝キャンペーンに顧客がどのように反応するかに対する洞察を、以下の例に似たダッシュボードを使って提示しながら得るために使用できます。

全体的なソリューションは、収集、保存、処理、および分析という 4 つの主なステップに分解できます。  これらのコンポーネントを一つずつ説明していきましょう。

収集

この段階での目的は、カメラから顧客の店内経験の画像または動画ビデオを収集することです。   これは、既存の CCTV または IP カメラシステムなどの各種カメラ、カメラモジュールが接続された (設定済みの) Raspberry Pi、AWS DeepLens、またはその他同様のカメラを活用することで実行できます。   これらの静止画像または動画ビデオのファイルは、さらなる処理のために Amazon S3 バケットに保存されます。

この例では、モーションパッケージがインストールされた Raspberry Pi を使用しました。このパッケージは、処理する必要があるデータの量を制限する、興味深いイベントがあった時に画像を収集するために役立ちます。このパッケージはまた、動作を検知してローカルフォルダに静止画像を作成します。このフォルダは、入力 S3 バケットに簡単に同期化 (リアルタイムで、またはバッチ的に) できます。AWS コマンドラインをインストール (手順はこちらです) します。これは、動画フォルダを S3 バケットに同期して、同期化が正常に行われた後でそのファイルをローカルに削除する例のひとつです (送信先バケットを使用する特定のバケットに適応させる必要があります)。

aws s3 sync /var/lib/motion/ s3://retail_instore_demo_source/`hostname` && sudo find /var/lib/motion/ -type f -mmin +1 -delete

保存

AWS は、実質的に容量無制限のストレージ、高可用性、およびイベントトリガー機能を活用できるように、Amazon S3 オブジェクトストアの使用を提案します。  このバケットを作成したら、入力フォルダ内の新しいファイルごとにイベントを AWS Lambda にパブリッシュする Amazon S3 のイベント通知機能を有効化します。そうすると、呼び出された Lambda 関数がイベントデータ (つまり、処理されるパラメータとしての受信データ) を渡します。

処理

受信画像を処理するために、AWS Lambda を使って画像を読み取り、Amazon Rekognition API を使って各画像について Rekognition が提供した関連情報 (目と口の座標を含む顔のランドマーク、性別、年齢、ヒゲの有無、サングラスなど) のすべてを収集した後、結果として得た情報を Amazon Kinesis Data Firehose に置きます。Kinesis Data Firehose は、そのデータを Amazon S3 バケットにパブリッシュします。Amazon Kinesis Data Firehose は、暗号化、フォルダ構造 (年/月/日/時間)、オプションのデータ変換、および圧縮を自動で処理するため、データ管理が簡素化されます。

得られたデータセットは、Rekognition からのアウトプットを含む JSON ファイルの一式で、これらの画像上にとらえられた顧客を表します。S3 からの効果的なクエリのために、ファイルは列指向形式にすることをお勧めします。Amazon Firehose のデータ変換機能を使用するオプション、AWS Lambda または AWS Glue を使ってJSON を変換するオプションもあります。JSON ファイルの小規模データセットのクエリは問題にはなりませんが、何千ものファイルでテーブルが大きくなるにつれて、最適な方法ではなくなります。このデモでは、簡潔にしておくために JSON 形式を使用します。

分析

結果として得た情報はすべて、この後新しい Amazon S3 バケットに保存されます。   プロセスステップにある通り、情報は JSON 形式で保存されるため、Amazon Athena でクエリを実行することが可能になります。  従って、S3 にあるデータに基づいてデータスキーマを自動的に推論するために AWS Glue クローラを使用し、データをクエリするために Amazon Athena 用の共有 AWS Glue カタログを使用することができます。  Amazon Athena は、インフラストラクチャをスピンアップする必要なく、標準の ANSI SQL コマンドを使って S3 内でデータを直接クエリすることを可能にするサービスです。  これによって、あらゆるデータ可視化/ダッシュボードツール (つまり、Tableu、Superset、または Amazon QuickSight) を Athena に接続して、データを可視化することができるようになります。  この例では、Amazon QuickSight を使ってこのデータのダッシュボードを作成する方法を説明します。

このソリューションを自分で構築する

このソリューションのコンポーネントを説明したところで、それらをひとつにまとめてみましょう。

今回は、アーキテクチャ図にある必要なコンポーネントのすべて (Amazon QuickSight および IP カメラ/Raspberry Pi のデバイスを除く) をデプロイする CloudFormation テンプレートを用意しました。  次のセクションでは、ソリューションの重要な部分について説明し、ダッシュボードを手動で作成しながら Amazon QuickSight を使って分析されたデータのすべてを解明できる方法を紹介していきます。

注意: Cloud Formation テンプレートは eu-west-1 (アイルランド) リージョンのみでテストされたため、他のリージョンでは機能しない場合があります。 スタックによってデプロイされたリソースの一部では、使用を終了しない限り、料金が発生します。

CloudFormation テンプレートのデプロイメントを開始するには、これらのステップを実行します。

  1. Launch Stack ボタンを選択します。これによって、テンプレートのある AWS アカウントで、eu-west-1 リージョンの AWS CloudFormation サービスが自動的に開始されます。必要に応じて、サインインするプロンプトが表示されます。

    インプット
    リージョン eu-west-1
    CFN テンプレート https://s3-eu-west-1.amazonaws.com/retail-instore-analysis/retail-instore-demo-cloudformation.json
  2. 以下の設定で [次へ] を選択して、作業を進めます。
  3. CloudFormation スタックの名前と、必要なパラメータを指定します。テンプレート上のデフォルトのバケット名はすでに使用されている可能性があるため、バケット名を固有の名前に変更してから [次へ] をクリックしてください。
    A B
    1 パラメータ 説明
    2 SourceBucketName 処理のために画像ファイルがアップロードされるバケットの固有の名前
    3 ProcessedBucketName 処理されたファイルが保存されるバケットの固有の名前
    4 ArchivedBucketName 処理後に画像ファイルがアーカイブされるバケットの固有の名前

  4. 確認ページで、スタックを開始した結果として、CloudFormation がカスタム名のついた AWS Identity and Access Management (IAM) リソースを作成することを承認します。
  5. テンプレートはサーバーレストランスフォームを使用するため、カスタム名は必須です。[変更セットの作成] を選択して、トランスフォームが追加するリソースをチェックしてから、[実行] を選択します。
  6. CloudFormation スタックが開始されたら、ステータスが CREATE_IN_PROGRESS から CREATE_COMPLETE に変更されるまで待ちます。必要なリソースのすべてをプロビジョニングするため、これには通常 7~9 分ほどかかります。
  7. スタックの開始が終了したら、このブログ記事全体を通じて使用するリソース一式が表示されます。

機能性をテストする

AWS CloudFormation テンプレートが必要なリソースを作成したら、処理を行うために事前にキャプチャされたサンプル画像を使用してみましょう。処理された画像データのスキーマを自動検出するには、AWS Glue クローラを使用します。

  1. S3 バケット https://s3-eu-west-1.amazonaws.com/retail-instore-analysis/Amazon_Fresh_Pickup_Images.zip から事前にキャプチャされた画像をダウンロードします。
  2. ソースバケット (retail-instore-demo-source) を開き、複数の人が写ったひとつ、または複数の画像をアップロードします。この例では、ステップ 1 でダウンロードした画像をいくつか使用します。他の画像は、異なる時間間隔のグラフを取得するために、後ほど 1 時間ごとにアップロードできます。
  3. Lambda がトリガーされ、Amazon Rekognition を使用して分析された画像と結果が、Athena および QuickSight でのさらなる処理のために S3 の処理済みバケット (retail-instore-demo-processed) に置かれます。処理中のファイルは、処理された画像が処理済みバケットにドロップされるのを観察する、または Lambda のモニタリングコンソールで AWS Lambda の実行をモニタリングすることによって監視できます。
  4. Athena を使ってクエリを実行するには、最初にテーブルを作成する必要があります。ここでは、データのスキーマを自動検出して、AWS Glue データカタログに適切なテーブル定義を作成する AWS Glue クローラを活用します。詳細については、AWS Glue とクローラのドキュメントに説明されています。

クローラは 1 時間ごとに課金されるため、CloudFormation テンプレートからスタックを開始することによって、ひとつのクローラだけが作成され、「オンデマンドで実行」されるように設定しました。このため、事前構築された分類子を使用してデータカタログを構築するための新しいデータソースがあるときは、クローラを手動で実行する必要があります。これを実行するには、AWS Glue に移動して、[クローラ] でこのクローラ (retail-instore-demo-glue-s3-crawler) を実行します。

クローラが S3 バケットに接続し、優先順位付けされた分類子のリストを経てデータのスキーマを判断してから、AWS Glue データカタログにメタデータテーブルを作成します。これは、Athena を使用して S3 内の処理済みコンテンツをクエリするために使用され、その上に QuickSight ダッシュボードを構築します。

注意: 異なるタイムラインのグラフ投影を表示できるように、異なる時間に画像をアップロードして、ステップ 2~4 を繰り返すようにしてください。

QuickSight ダッシュボードを構築する

まず、データセットで QuickSight を設定します。

  1. QuickSight コンソール (https://eu-west-1.quicksight.aws.amazon.com/sn/start) にログインします。
  2. QuickSight に初めてアクセスする場合は、次の手順に従ってください。そうでない場合は、ステップ 3 に進みます。
    1. QuickSight の [無料でサインアップする] をクリックします
    2. [Standard] エディションを選択します
    3. QuickSight のアカウント名を入力します
    4. 有効な E メールを入力します
    5. [EU (Ireland)] リージョンを選択します
    6. [Amazon Athena] の横にあるチェックボックスにチェックを入れます
    7. [Amazon S3] の横にあるチェックボックスにチェックを入れます
    8. [Customer hoose s3 buckets] をクリックして、retail_instore_demo_processed バケットを選択します
  3. 右上から [Manage data] を選択します。
  4. [New Data Set] を選択します。
  5. [Athena Data Source] から、データセットを「retail-instore-analysis-blog」として作成します。
  6. 「retail-instore-demo-db」データベースを選択して、「retail_instore_demo_processed」テーブルを選択してから、[Select] をクリックします。
  7. デフォルトの [Import to SPICE for quicker analytics] にしたまま、[Visualize] をクリックします。
  8. SPICE (QuickSight によって使用されるインメモリストレージコンポーネント) にインポートされた行の合計数と共に [Import complete] が表示されます。これで、ダッシュボードの構築を簡単に開始できるようになりました。ダッシュボードの作成方法をステップごとに説明します。
  9. まず、時間軸のあるグラフを作成できるように、カスタムデータフィールドを追加します。[Add]、[Add calculated field] とクリックします。
  10. [Calculated field name] に「DateCalculated」などの名前を入力します。
  11. [Function list] から [epochDate] 、[Fields list] から [retailtimestamp] を選択して、[Create] を選択します。

  12. これで、計算フィールドが作成されます。
  13. 必要に応じてビジュアルウィンドウのサイズを変更してから、[Visual types] で「垂直積み上げ棒グラフ」を選択します。
  14. [Fields list] から、[DateCalculated] を [Field wells] にある [X axis] に、[emotion] を [Value] に、[emotion] を [Group/Color] にドラッグ & ドロップします。画像からキャプチャされた感情に基づいて、グラフにデータが入力されます。
  15. [Fields list] の [X axis] にある [DateCacluated] のドロップダウン矢印をクリックして、[Aggregate: Day] にスクロールし、[Hour] を選択します。
  16. このグラフは、異なるタイムスタンプにおける人の感情を表示します。例えば、このダッシュボードは、通路 23 での新製品に対する反応を追跡しながら、この通路でキャプチャされた感情を表示するためのダッシュボードにすることができます。  別の例として、このダッシュボードは、店内の特定のエンド陳列の前にいる顧客の人数をより良く計上し、特定することを可能にします。
  17. ビジュアルをもういくつか追加しましょう。[Add]、[Add visual] とクリックします。
  18. [Visual types] から「円グラフ」を選択し、[Fields list] から [emotion] をドラッグして、[Field wells] の [Group/Color] にドロップします。
  19. 以下のように、有意義な表題を追加したり、フィールドリストで他のビジュアルタイプを追加したりすることによって、ダッシュボードをさらに充実させることができます。
  • 新しいビジュアルを追加するには、「垂直棒グラフ」を選択して、[Field wells] で [X axis] を [DateCalculated (DAY)] に、[Value」 を [emotion (count)] に設定します。

結果

上記の QuickSight ダッシュボードは、店内における画像キャプチャイベントの分析を示しています。 例えば、全体的な顧客センチメントを確認することができます。これらのメトリックスから、顧客の年齢範囲、および毎日何人が来店したかを把握できます。分析が終わったら、分析をダッシュボードとしてパブリッシュすることによって、これらの洞察をチームや組織と簡単に共有できます。

Amazon Rekognition を使用することによって、顧客をより良くセグメント化することが可能です。 店内の特定のエリアに対する顧客経験のフィードバックを得ることもできます。

シャットダウンする

実験が終わったら、これらのステップに従ってすべてのリソースを削除できます。

  1. CloudFormation テンプレートが作成したすべての S3 バケット内のコンテンツを削除します。
  2. CloudFormation スタックを削除します。

結論と次のステップ

この記事では、AWS を使って顧客の店内の行動に対する洞察を得ることがいかにシンプルかを説明しました。既存の CCTV システム、またはどのようなカメラを使っても、このソリューションを素早く構築して、ニーズに適応させることができます。

以下は、このソリューションを活用できる追加のコンセプトの一部です。

  • 店内ビデオストリーム分析: Kinesis Videostreams を使用することによって、既存のビデオをストリームすることができ、顧客の進路をキャプチャする (およびヒートマップを使用する)、そして顧客が店内のどこで時間を過ごしたかなどの追加のユースケースが可能になります。
  • 顔認識を活用した顧客ロイヤルティプログラムとエンゲージメントプログラム: もうひとつの非常に興味深い可能性は、ロイヤルティプログラム、インセンティブプログラム、またはその他顧客特典の一環としてオプトインし、自分のプロファイル写真を共有した顧客を認識する機能です。自主的に提供されたデータを使用することによって、小売店舗でこれらの顧客を認識し、より高度な、パーソナライズされた顧客経験を提供できます。

ご質問またはご提案については、以下でコメントを残してください。

その他の参考資料


著者について

Bastien Leblanc は、AWS のソリューションアーキテクトです。データと分析のワークロードに重点を置きながら、小売業のお客様が AWS のプラットフォームを導入する援助をしています。お客様と協力して、小売問題を解決し、イノベーションを推し進めることができるように助けることが好きです。

 

 

 

 

Imran Dawood は、AWS のソリューションアーキテクトです。小売業のお客様と協力し、AWS クラウドで成功を収めるためのアーキテクチャガイダンスを使って、お客様が AWS 上にソリューションを構築する援助をしています。そのかたわらで、Imran は卓球と家族との時間を楽しんでいます。