はじめに
レコメンドシステムで「この人に次は何を勧めるか」を決める方法には、代表的な考え方としてコンテンツベースフィルタリングと協調フィルタリングがあります。名前は似ていますが、両者の大きな違いは、推薦の根拠にするデータです。
コンテンツベースは、ユーザーが好んだアイテムの属性と候補アイテムの属性を比べます。協調フィルタリングは、複数ユーザーの閲覧・購入・評価などの行動パターンを手掛かりにします。この記事では同じ小さなデータを使い、2つの方式で推薦結果がどう変わるかを比べます。読了後には、両方式の違いと基本的な使い分けを説明できることを目指します。
コンテンツベースと協調フィルタリングの違い
| 観点 | コンテンツベースフィルタリング | 協調フィルタリング |
|---|---|---|
| 主に使うデータ | アイテムの属性とユーザーの過去の好み | ユーザーとアイテムの行動・評価データ |
| 推薦の考え方 | 好きだったものと属性が似た候補を探す | 行動が似たユーザーや、一緒に好まれるアイテムを手掛かりにする |
| 他ユーザーのデータ | 必須ではない | 基本的に利用する |
| 新しいアイテム | 属性が分かれば候補にしやすい | 行動データが少ないと扱いにくい |
| 新しいユーザー | 好みを示す情報がないと難しい | 行動履歴がないと難しい |
| 得意なこと | 既に分かっている好みに近い候補を出す | 属性だけでは見つけにくい候補を発見する |
どちらも「ユーザーに合いそうなアイテムを選ぶ」という目的は同じです。ただし、コンテンツベースはアイテムの中身を表す特徴を見ており、協調フィルタリングは多くのユーザーとアイテムの関係を見ています。この違いが、推薦できる候補や弱点の違いにつながります。
同じデータで推薦結果を比べる
4つのオンライン講座があるとします。ここでは実際の推薦システムを簡略化し、違いが見えやすい小さな例だけを使います。
| 講座 | 主な属性 |
|---|---|
| A:Python入門 | Python、初級 |
| B:SQL入門 | SQL、データベース |
| C:Pythonデータ分析 | Python、データ分析 |
| D:統計入門 | 統計、データ分析 |
ユーザー甲が「A:Python入門」を気に入ったとします。
コンテンツベースではアイテムの属性を比べる
コンテンツベースでは、ユーザー甲が好んだAの属性と、まだ見ていないB・C・Dの属性を比べます。Aには「Python」という属性があるため、同じPython属性を持つCは推薦候補になりやすくなります。
この方法では、他のユーザーがCを見たかどうかは必須ではありません。Cが公開されたばかりでも、「Python」「データ分析」といった属性が登録されていれば、Aとの近さを計算する材料を持てます。一方で、属性の付け方が粗いと、似ているはずのアイテムを正しく見つけられません。
協調フィルタリングでは行動の重なりを見る
次に、他のユーザーの行動が次のようだったとします。ここでは「視聴」を、その講座への関心を示す簡略な行動データとして扱います。
| ユーザー | A:Python入門 | B:SQL入門 | C:Pythonデータ分析 | D:統計入門 |
|---|---|---|---|---|
| 乙 | 視聴 | 視聴 | – | – |
| 丙 | 視聴 | 視聴 | – | 視聴 |
| 丁 | – | – | 視聴 | 視聴 |
乙と丙はAを見たあとにBも見ています。この行動パターンを手掛かりにすると、Aを気に入ったユーザー甲にもBを推薦する考え方が成立します。BはAと同じPython属性を持っていませんが、「Aを見た人がBも見ている」という行動の重なりが推薦根拠になります。
協調フィルタリングには、似たユーザーを手掛かりにするユーザーベースと、同じユーザー群に選ばれるアイテム同士を手掛かりにするアイテムベースなどがあります。上の例は、アイテムベースの考え方を簡略化したものです。
このように、同じユーザー甲に対しても、コンテンツベースではC、協調フィルタリングではBが上位候補になる可能性があります。重要なのは、どちらが常に正しいかではなく、何を根拠に候補を選んだかです。
使い分けは「属性情報」と「行動データ」で考える
アイテムのジャンル、タグ、説明文などの属性情報が十分にあり、他ユーザーの行動がまだ少ない場合は、コンテンツベースを使いやすくなります。推薦理由も「過去に見たPython講座と属性が近い」のように説明しやすい点があります。
一方、閲覧・購入・評価などの行動が大量に蓄積している場合は、協調フィルタリングを使うことで、属性だけでは結び付きにくい候補を見つけられます。たとえばPython講座とSQL講座に共通タグがなくても、同じユーザー群が両方を選ぶ傾向が強ければ、その関係を推薦へ利用できます。
アイテム属性をどう表現するかは、機械学習で使う特徴量の設計とも関係します。属性の作り方を詳しく確認したい場合は、特徴量エンジニアリングとは?データ変換の手法と活用ポイントを参照してください。
コールドスタートでは困る対象が少し違う
推薦に必要な情報がまだない状態は、コールドスタートと呼ばれます。2方式とも新規ユーザーには弱点がありますが、新規アイテムへの対応は異なります。
| 状況 | コンテンツベース | 基本的な協調フィルタリング |
|---|---|---|
| 新規ユーザー | 好みや閲覧履歴がなければユーザープロファイルを作りにくい | 他ユーザーとの近さを判断する行動履歴がなく難しい |
| 新規アイテム | 属性が登録されていれば既存アイテムとの類似度を使える | 誰も反応していないため行動上の関係を作りにくい |
そのため、新規ユーザーには最初に興味分野を選んでもらう、新規アイテムには属性情報を利用するなど、別の情報で初期状態を補うことがあります。
実務では2方式を組み合わせることもある
実際のレコメンドシステムでは、コンテンツベースか協調フィルタリングのどちらか一方だけで完結するとは限りません。複数の方法で候補を集め、後段で順位を調整する構成もあります。
ただし、最初に理解すべき違いは変わりません。コンテンツベースは「そのアイテムが何であるか」、協調フィルタリングは「誰が何を選んだか」を主な手掛かりにします。この区別ができれば、ハイブリッド型を考えるときも、各方式がどのデータを補っているのか整理しやすくなります。
まとめ
コンテンツベースフィルタリングと協調フィルタリングの違いは、推薦の根拠にするデータです。コンテンツベースはアイテム属性とユーザーの既知の好みを比べ、協調フィルタリングは複数ユーザーの行動や評価の関係を利用します。
同じ「A:Python入門」を好むユーザーでも、属性を見るコンテンツベースでは「C:Pythonデータ分析」、行動の重なりを見る協調フィルタリングでは「B:SQL入門」が候補になることがあります。属性情報が充実しているか、十分な行動データがあるか、新規ユーザー・新規アイテムへどう対応したいかを確認すると、2方式の使い分けを考えやすくなります。