本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
詳細やノートブックをダウンロードするにはSolution Accelerator for Matrix Factorizationをチェックしてください。
レコメンダーはモダンなリテール体験では重要なパートとなっています。オンラインの購買者は利用可能な商品の膨大なポートフォリオをナビゲートするためにレコメンデーションエンジンを頼りにしています。マーケターは、バナー広告やメールマーケティングキャンペーンで表示されるアイテムの優先順位をつけるためにレコメンダーを活用します。そして、オムニチャネルシナリオにおいては、店舗内の購買者に対してパーソナライズされた商品を提案し、代替品を用いて注文を充当するスタッフをアシストするために、これまで以上にレコメンダーが使用されるようになっています。
適切に行うことで、レコメンデーションエンジンは、小売店舗で顧客からの期待が高まっているパーソナライズされた体験を生み出すことができます。これらの機能を適切に活用することで、特定のチャネルに対する顧客の好みを増加させるだけではなく、購買頻度、購買価格を引き上げることができ、小売業者のボトムラインを強化することができます。
しかし、すべての古いレコメンダーをシンプルにプラグインしたとしても、成功につながる可能性は高くなりません。そうではなく、異なるレコメンダーが異なる種類のレコメンデーションを提供し、そのいくつかが、顧客のジャーニーのある地点においては他よりも適切であるということを理解することが重要となります。このため、レコメンデーションを行うコンテキストを注意深く検討し、その特定のシナリオに対するレコメンデーション戦略とサポートするエンジンを仕立て上げることが重要となります。
ベストなレコメンダーはビジネス要件と技術的な実現可能性を結びつけます
クイックにレコメンデーションエンジンを検索してみると、膨大な量(そして、増加している)のアルゴリズムが提案されることになるでしょう。レコメンダーにおける新たな競合やホワイトペーパーのそれぞれによって、これらは開発者コミュニティの興味を惹こうとしているアルゴリズム的なアプローチに見えます。
新たなアルゴリズムは、多くの場合においてスケールする能力や困難なエッジケースへの対応、他の頻繁に利用されているアルゴリズムと比べて若干優れた評価指標のスコアを提供することによって、エキサイティングなものとなります。また、これらは従来のものよりも極度に複雑になる傾向があります。従来のレコメンダーやそれらを実装するために使用するライブラリに十分慣れ親しんでいない場合、開発者は特定のビジネス文脈に対する適切性を判断し、期待する結果を提供するためにこれらのソリューションの能力に影響を与える意思決定に到達することが非常に困難となります。
レコメンダーを使い始めた企業に対して我々は、特定のタッチポイントが類似アイテム、あるいは、ユーザー行動によって提案されるアイテムのレコメンデーションを呼び出すのかを特定することを提案しています。必要とされるものが前者であるならば、異なる次元における類似性を用いてアイテムを比較するコンテントベースのレコメンダーが必要となります。後者が必要な場合には、協調フィルターが適切な選択肢となります。
マトリクス因数分解はユーザーの嗜好を認識するための堅牢な手段です
協調フィルターは長い歴史を持っており、多くの様々なフレーバーで提供されています。もし、あなたの購買履歴に基づいた、あるいは、あなたのようなほかの人が購入したので、我々があなたが好きだろうと考える製品としてレコメンデーションが提示されたなら、協調フィルターに遭遇したことになります。これらのレコメンダーは、どの商品が特定の顧客にとって魅力的に見えるのかを理解するために、明示的なレーティングやエンゲージメントのパターンによって提示される暗黙的なレーティングを顧客の嗜好として活用します。これらの中で最も基本的でありながらもパワフルなものであるのが、マトリクス因数分解レコメンダーです。
マトリクス因数分解レコメンダーは、すべてのユーザーと商品の交差を考慮します。この交差を特定のユーザーが実際にエンゲージした商品と関連づけられた嗜好(レーティング)を持つマトリクスとして表現すると、通常は大規模かつほとんど値がない(疎な)構造になります(図1)。
図1. 特定の商品セットに対するユーザーの嗜好(得られたレーティング)が表現されたスパースなマトリクス
我々のゴールは、これらのレーティング間の関連性をキャプチャする比較的小規模な値(多くの場合、潜在要因 latent factor と呼ばれます)のセットを導き出すことのできる、利用可能なレーティングを検証することです。これを行うための背後にある数式は若干複雑ですが、ベースとなる考え方は大規模かつ疎なユーザー・商品マトリクスを、得られたレーティングを再構成できる2つの密でより小規模なマトリクスに分解(因数分解)することができるというものです(図2)。
図2. 初期のレーティングが含まれる大規模かつ疎なマトリクスから派生した因数分解マトリクス
より小さいサブマトリクスは、オリジナルのマトリクスのパターンをキャプチャするより良い、コンパクトな手段を提供します。また、これらには、まだエンゲージしていないユーザーの商品に対する嗜好の推論を可能とする副作用を持っています(図3)。繰り返しになりますが、数式は若干複雑ですが直感的にこのアイデアは、どの異なるユーザーが商品セットで嗜好がオーバーラップしているのかを示す度合いを、消費がオーバーラップしていない商品で嗜好を推定するために活用することができるというものです。
図3. ユーザー・商品レーティングの完全なセットを表現する推定マトリクス
Apache Spark™はマトリクス因数分解のスケーラブルな実装を提供します
マトリクスの因数分解は、Netflixプライズを追求する中で2000年代後半に人気となり、この比較的シンプルなところと堅牢性から今でも広く活用されています。Apache Sparkコミュニティ創立メンバーの何人かもNetfixプライズのコンペティションに関与していたので、マトリクス因数分解がSparkエコシステムに組み込まれるのは自然な流れでした。
Apache Sparkにおけるマトリクス因数分解の固有の実装は、Alternating Least Squares (ALS)アルゴリズムと呼ばれるものです。ALSでは、サブマトリクス(図2)の一方を固定し、マトリクスが定常的な状態に到達するか最大凍レーション回数に到達するまで、もう一方を前後させながら最適化することでマトリクスの因数分解をイテレーティブに実装しています。
ALSアルゴリズムはSparkのような分散処理プラットフォームの使用を必要としませんが、ユーザー・商品のサブマトリクスを関連するユーザーとアイテムのサブセット(ブロック)に整理することで、ブロック間の情報交換を回数を限定的にすることでメリットを得ることができます。これによって、Sparkクラスターにブロックを分散させることができ、アルゴリズムの処理をスケールアウトし、モデルの収束に要する時間を短縮することができます。ユーザー数×商品数となる現実世界のデータセットは簡単に数兆の組み合わせとなり、スケーラビリティが重要となることで、このタイプのレコメンダーにおいてALSのSpark実装が最適な選択肢となりまsう。
すぐに使い始められるようにデモを提供しています
Spark MLLibのAlternating Least Squares (ALS)アルゴリズムを用いたマトリクス因数分解レコメンダーをどのように開発するのかをデモンストレーションするために、Instacartデータセットを用いたソリューションアクセラレータを開発しました。Instacartデータセットは20万ユーザー、約5万の商品から構成されており、100億のユーザー・商品の組み合わせマトリクスを生成します。このマトリクスは現実世界のリテールシナリオで関連するマトリクスと比較して比較的小さいものではありますが、シンプルなALSアルゴリズムの実装(そして、その他のほとんどのマトリクス因数分解アルゴリズム)では止まってしまうほど十分に大きなものです。
このノートブックでは、ユーザーによって明示的にレーティングされていないアイテムのレーティングをどのように計算するのか、我々のレコメンダーソリューションの開発に対するアプローチの影響へのディープダイブにある程度の時間を費やしています。また、ALSが生成したレコメンデーションをユーザー体験にインテグレーションできるようにする一般的なデプロイメントのパターンを検証しています。是非、Solution Accelerator for Matrix Factorizationをご覧ください。