「ベクトル類似検索が消費者支出に与える影響」

Impact of Vector Similarity Search on Consumer Spending

大規模な言語モデル、ベクトル、およびベクトル検索についての話題がある中で、これらの人工知能技術の進歩が組織および最終的には顧客にどのような結果をもたらすかを理解することは重要です。

問題

今日、私たちはプロモーションチームと会議をしました。彼らは顧客広告、オファー、クーポンについてよりスマートな意思決定をするための私たちの助けを求めています。現在、プロモーションは主に地理的な市場に基づいています。したがって、ある都市の顧客に送られるプロモーションは、他の都市の顧客に提供されるプロモーションとは異なります。したがって、これらのキャンペーンは事前に計画する必要があります。

問題は、マーケティング部門が彼らに対して地理的な地域に関係なく顧客をターゲットにするより戦略的な方法を提供するように圧力をかけていることです。考えられるのは、特定の顧客は購入履歴に基づいて特定のオファーを利用する可能性が高いということです。もし、関連商品に対してリアルタイムに、例えばカートごとに10%の割引を提供する方法を見つけることができれば、追加の売上を生み出すことができるかもしれません。

まず、私は彼らのApache Cassandraクラスタ内の匿名化された注文データを調査することにしました。データには明らかなパターンがあり、一部の顧客が同じ商品(主に食料品)を予測可能な規則性で購入していることがわかります。このデータを活用する方法はあるかもしれません。

体験の向上

私たちに利点があるのは、私たちの顧客が複数のチャンネルを通じて私たちと関わる傾向にあることです。一部の人々はウェブサイトを使用し、一部の人々はモバイルアプリを使用し、いくつかの人々は私たちの約1,000の実店舗のいずれかに訪れます。さらに、そのうちの半数以上の顧客がモバイルアプリを同時に使用しています。

もう1つの興味深いポイントは、顧客IDだけでなく、家庭の住所ごとに商品の販売データを集計すると、より厳格な買い物パターンが見えてきます。いくつかの異なるソースからデータをまとめることで、このデータがどのようなものかをイメージすることができます。

例えば、夫婦が犬を飼っている場合、通常は一方の配偶者が犬の餌を買います。しかし、時々、もう一方の配偶者が買うこともあります。個々の顧客レベルでのこれらのイベントはあまりパターンを作りません。

しかし、家庭レベルで集計すると、そのようなパターンが現れます。実際、彼らは毎週「HealthyFresh – 鶏肉の生のドッグフード」の6ポンドのロールを1つ以上買っています。推奨される給仕サイズから判断すると、おそらく彼らは6匹の小型犬を飼っているか、おそらく大型犬を飼っているでしょう。

各顧客が頻繁に訪れる店舗も重要な要素となります。たとえば、顧客のマリーが出張中で、今まで行ったことのない私たちの店舗を訪れるかもしれません。もし、その店舗が彼女の頻繁に訪れる店舗のリストからかなりの距離がある場合、マリーはおそらく出張に関連する特定のアイテムを購入しようとしていると推測できます。この場合、彼女の通常の買い物習慣は適用されません(おそらく彼女はドッグフードを買わないでしょう)し、彼女に支出を促すプロモーションを提示する必要はありません。

しかし、マリーが頻繁に訪れる店舗の1つにいる場合、モバイルデバイスでプロモーションをトリガーすることは意味があります。顧客にスマートフォンでアイテムをスキャンするように促すと、物理的なショッピングカートにどの商品があるかがわかります。その後、カートに既にある商品に合わせて似たような商品を提示することができます。

類似商品を見つけるためのベクトルの計算

類似商品を見つけるためには、商品ごとに類似性ベクトルを計算する必要があります。これを行う方法はいくつかあります。最小限の実現可能製品を作るために、製品名に焦点を当てて自然言語処理(NLP)モデルを構築することにします。

このアプローチでは、製品名のすべての単語を取り出し、各ユニークな単語にエントリーを与えます。これが私たちの語彙です。現在の製品名がその単語を持っているかどうかを示す、各製品と一緒に作成して保存する類似性ベクトルは、以下の表1に示すように、0と1の配列になります。TensorFlowのようなプラットフォームを使用して、機械学習(ML)モデルを構築してトレーニングすることができます。

表1: ペット用品カテゴリの製品名に対する「bag of words」NLP語彙。各ベクトルがどのように組み立てられるかを示しています。

「bag of words」アプローチの問題の1つは、ベクトルが1よりも0の方が多くなることです。これはモデルのトレーニング時間と予測時間が長くなる原因になります。それを解決するために、各主要な製品カテゴリごとにユニークな語彙を作成します。ベクトルは異なるカテゴリ間では使用できませんが、クエリ時にカテゴリでフィルタリングすることができます。

それでは、特定のカテゴリごとにベクトル検索をサポートするために、Apache Cassandraクラスター内にテーブルを作成することができます。ボキャブラリには14個の単語が含まれているため、ベクトルのサイズも14にする必要があります:

ベクトル検索が適切に機能するために、テーブルにストレージに接続された二次インデックス(SASI)を作成する必要があります:

CREATE CUSTOM INDEX ON pet_supply_vectors(product_vector) USING 'StorageAttachedIndex';

その後、MLモデルの出力をCassandraにロードすることができます。データが存在する場合、次のステップはベクトル検索を実行する新しいサービスを追加することです。次のクエリを使用してベクトル検索を実行します:

このクエリは、現在の製品に格納されているベクトルを使用して近似最近傍(ANN)アルゴリズムを実行します。これにより、ベクトル検索による現在の製品と次に最も近い(最近傍)製品が両方返されます。これは、LIMIT 2節によるものです。

上記のクエリでは、顧客がオンラインでカートに追加するか、携帯電話でスキャンすることがあり、その場合は「HealthyFresh – Chicken raw dog food」製品のベクトルを使用しています。このイベントを処理し、次のメッセージを作成します:

  • customer_id:a3f5c9a3
  • device_id:e6f40454
  • product_id:pf1843
  • product_name:「HealthyFresh – Chicken raw dog food」
  • product_vector:[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

その後、このメッセージをApache Pulsarのトピックに送信します。トピックから消費し、上記のデータを使用してPromotionsマイクロサービスのgetPromotionProductエンドポイントを呼び出します。これにより、上記のクエリが実行され、両方の「HealthyFresh」フレーバーが返されます。既に持っている製品に100%一致するproduct_vectorのデータは無視し、「HealthyFresh – Beef」フレーバーのプロモーションをデバイス上でトリガーします:

結論と次のステップ

このロジックを数週間実行した後、Promotionsチームから連絡があり、方法が約25%の追加販売をトリガーしていると報告されました。これを「成功」と呼ぶのは誘惑されますが、改善できる余地は確かにあります。

最初に(ソフトウェア)製品を出すために、「単語の袋」のNLPアプローチを選びました。後に「Word2Vec」といった異なるNLPアルゴリズムについて良い評価を読んだことがあり、長期的にはより良いアプローチになるかもしれません。また、モデルは製品名を構成する単語のボキャブラリの構築にのみ関心がありました。サイズ、色、ブランドなど、他の製品詳細をモデルの入力に含めることで、より微調整できるかもしれません。

次の記事では、ベクトル検索を使用して、交通サービスチームが配達ルートの効率を改善する方法を紹介します。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more