【簡単解説】機械学習でも用いられる協調フィルタリングとは

こんにちは!
株式会社キスモのPythonエンジニアの久保です。

今回と次回の全2回で、推薦システムの中で基本的なアルゴリズムである、協調フィルタリングについてお話しします。前半の今回は、協調フィルタリングの概要を、次週更新予定の後半では実際の協調フィルタリングの計算方法についてお伝えします。

概要

協調フィルタリングとは、「自分と嗜好が類似しているユーザーとの差分を推薦する」推薦アルゴリズムです。

例えば、キス男くんが、果物の中でりんご🍎、みかん🍊、いちご🍓、ぶどう🍇が好きだったとします。一方、キス子さんはりんご🍎、みかん🍊、いちご🍓が好きだったとします。

キス男くんの好み:「りんご🍎」「みかん🍊」「いちご🍓」「ぶどう🍇」  
キス子さんの好み:「りんご🍎」「みかん🍊」「いちご🍓」

キス男くんとキス子さんは2人とも🍎と🍊と🍓が好きなので、好き嫌いが類似していると言えます。そこでキス子さんに他の果物を推薦する際に、嗜好が似ているユーザーであるキス男くんとの差分の「ぶどう🍇」も好きだろうという仮説が立てられます。これをもとにキス子さんに推薦すれば良いわけです。

これが協調フィルタリングの基本的な考え方です。

協調フィルタリングの立ち位置

推薦システムの側面から

推薦システムのアルゴリズムは大きく以下の2つに分けることができます。
* 内容ベース
* 協調フィルタリング

内容ベースとは、「好きなアイテムと同じカテゴリのアイテム」を推薦するものです。例えば「北野武」監督の「コメディー」映画に高評価をつけたら、同じ「北野武」監督の「コメディー」映画を見つけ出し、ユーザーに推薦します。
推薦の基準がアイテム側に存在するのが内容ベースのアルゴリズムです。

これに対し、アイテムを選んだユーザー側に推薦の判断要素が存在するのが協調フィルタリングです。内容ベースとは違いアイテムの特徴を全く考慮しないことが大きな特徴です。

機械学習の側面から

協調フィルタリングはデータを貯めるほど精度が高くなることから、機械学習の1つとして認識されています。教師データがあるわけではないので、ジャンルとしては教師なし学習アルゴリズムです。

協調フィルタリングの特徴として、データが存在しない状態では推薦の精度が全く期待できないことが問題として挙げられます。この問題は「コールドスタート問題」と呼ばれています。

協調フィルタリングの大枠

協調フィルタリングも以下の2つのジャンルに大別できます。
* ユーザーベース
* アイテムベース

ユーザーベースの協調フィルタリングは、ユーザー同士の嗜好の類似度を計算し、それをもとに行う協調フィルタリングです。概要で説明した協調フィルタリングも、ユーザー(キス男くんとキス子さん)の嗜好の類似度を計算し行われた推薦なので、ユーザーベースの協調フィルタリングです。

簡単に図にすると下の図のようになります。

f:id:mishimanatsuki:20181022124156p:plain ユーザー1とユーザー2はそれぞれ「晴れ」と「月」と「曇り」が好きなので、両者は嗜好の類似度が高いといえます。ユーザー1にアイテムを推薦する場合、類似するユーザーであるユーザー2との差分の「雷」をユーザー1に推薦します。このようにユーザー同士の類似度を基にアイテムを推薦するのがユーザーベースの協調フィルタリングです。

これに対し、アイテム同士で好まれ方の類似度を計算し、それによって行われる推薦がアイテムベースの協調フィルタリングです。

簡単に図にすると下の図のようになります。

f:id:mishimanatsuki:20181022124210p:plain 「晴れ」と「月」はユーザー1、2、3に好きと言われているとします。「晴れ」を好きなユーザーの多くは「月」も好きと言っていることから、「晴れ」と「月」は好まれ方の類似度が高いと言えます。このとき、ユーザー4にアイテムを推薦する場合、ユーザー4は「晴れ」を好きと言っていることから、類似度の高い「月」を推薦することができます。

このようにアイテム同士がどれほど同じユーザーに好きとされているかを計算し、その類似度をもとに推薦するのがアイテムベースの協調フィルタリングです。

以上が前半の、協調フィルタリングの概要説明です。
後半では、実際の計算方法についてお伝えします!

 

もっとキスモのことを知りたい方は
こちらをご覧ください!

www.kysmo.tech