レコメンド機能とコサイン類似度:おすすめ商品を提案する計算の仕組みと課題
こんにちは。ゆうせいです。
インターネット上の買い物や動画の配信サービスを利用する際、画面に「あなたへのおすすめ」が表示される機能が存在します。今回は、システムが利用者の好みを把握し、適切な商品や動画を提案する裏側で機能している計算の手法について解説します。
ベクトルとコサイン類似度の基本
システムは、利用者がつけた評価や購入の履歴を数値の集まりとして記録します。複数の数値を並べて方向と大きさを持たせたデータをベクトルと呼びます。2つのベクトルがどれくらい似ているかを計算する数学の手法をコサイン類似度と呼びます。
高校の定期テストの点数を想像してください。国語が80点、数学が20点の生徒と、国語が90点、数学が30点の生徒は、文系科目が得意という点数の傾向が似ています。2人の点数を図表上の矢印として描いたとき、矢印の向いている角度が近いほど傾向が似ていると判定できます。コサイン類似度もテストの点数と同じように、利用者の評価履歴を数値化し、向きの近さを計算することで好みの似ている人物を探し出します。
類似度を利用した商品の提案
利用者が特定の映画に高い評価をつけた場合、システムは記録されたデータからコサイン類似度を用いて好みが似ている別の利用者を探します。好みが似ている別の利用者が高く評価しており、かつ対象の利用者がまだ見ていない映画を、システムはおすすめとして画面に表示します。
コサイン類似度のメリット
数値の向きを計算する手法には以下の長所があります。
- 全体的な評価の基準が厳しい利用者と甘い利用者の間でも、好みの傾向が同じであれば正確に類似度を計算することが可能です。
- 扱う商品のジャンルが異なる場合でも、評価の数値をベクトルとして表現できれば、同じ計算式を適用して類似の傾向を見つけることができます。
コサイン類似度のデメリット
類似度を計算する手法には、システムの運用上の課題も存在します。
- サービスの利用者数や商品の種類が増加するほど、比較する組み合わせが膨大になり、計算の処理速度が低下します。
- 誰も評価していない新しい商品が追加された場合、比較するための数値が存在しないため、おすすめとして利用者に提案することが困難になります。
類似度を計算する数式の構造
2人の利用者の好みを比較する際、計算式は分数を用いて表現されます。利用者Aの評価データをベクトルa、利用者Bの評価データをベクトルbとした場合、コサイン類似度を求める計算式は以下のようになります。
$$\cos \theta = \frac{\vec{a} \cdot \vec{b}}{\vert{}\vec{a}\vert{} \vert{}\vec{b}\vert{}}$$
分子ではベクトルaとベクトルbの内積を計算します。分母ではベクトルaの大きさとベクトルbの大きさの積を計算します。分子を分母で割ることにより、2つのデータがなす角度のコサインの値を算出します。算出された値が1に近いほど、2人の好みが似ていると判定されます。
まとめ
コサイン類似度を用いたレコメンド機能は、利用者の好みをベクトルとして計算し、適切な商品を提案します。一方で、データ量の増加に伴う処理の遅延や、新規商品の扱いに関する課題も抱えています。
データ分析や推薦システムについて理解を深めるためには、以下の順番で学習を進めることをお勧めします。
- 三角関数の基礎を学び、角度とコサインの関係を身につける
- 線形代数を学習し、ベクトルの内積と大きさの計算方法を理解する
- 機械学習の入門書を読み、協調フィルタリングの基本を習得する
- 簡単な評価データを用意し、利用者間の類似度を算出するプログラムを作成する
セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。
投稿者プロフィール




