【簡単解説】協調フィルタリングの計算方法
こんにちは!
株式会社キスモのPythonエンジニアの久保です。
後半の今回は前半の協調フィルタリングの概要に続き、具体的な計算方法の例をお伝えします。
計算の流れ
協調フィルタリングの計算の流れは大きく3つに分けられます。
* 評点行列の作成
* 類似度行列の作成
* 推薦スコアを計算
具体例
評点行列の作成
まずは、評点の作成です。ユーザーがアイテムにつけたポイントを下の図のように行列にまとめます。
ユーザー1-8のアイテムA-Kに対する評点を表しています。「0」は、アイテムに評価をつけていないことを意味します。これらの「0」のついたアイテムに対し、ユーザーへの推薦度を計算していきます。
類似度行列の計算
続いては、推薦するユーザーと嗜好の類似したユーザーとの度合い(類似度)を計算します。
類似度の計算方法ですが、ここでは基礎的は2つの計算方法を紹介します。
* ユーグリット距離
* ピアソン相関係数
これらの類似度を全ての組み合わせパターンで計算し、評点行列のように行列にして表現します。ちなみにこちらはピアソンの相関係数を使ったユーザーベースの協調フィルタリングで用いる、ユーザー類似度の行列です。
ユーグリット距離
ユーグリット距離の定義は以下の引用の通りです。
引用:https://wikimedia.org/api/rest_v1/media/math/render/svg/ffb93a5ebb9746add918b02af3da0098b6e23a07
例として、上の評点の行列のユーザー1とユーザー3の類似度を計算します。計算対象は両ユーザーが評点をつけたアイテムへの評点です。
※0点は評点をつけていないことを意味するので、ここでは無視します。
√{(1-4)2 + (3-1)2 + (5-1)2} = 5.39
ピアソン相関係数
ピアソン相関係数の定義は以下の引用の通りです。
引用:https://wikimedia.org/api/rest_v1/media/math/render/svg/940c0a6429b8cdecb1ebe8b1fdcfbab547a557a9
まずは、ユーザー1とユーザー3のピアソン相関です。計算対象はユーグリット距離と同様、両ユーザーが評点をつけたアイテムへの評点です。
x(ユーザー1)の平均が3、y(ユーザー3)の平均が2なので、分子は(1-3)(4-2)+(3-3)(1-2)+(5-3)(1-2)=-6、分母は{(1-3)2 + (3-3)2 + (5-3)2}{(4-2)2 + (1-2)2 + (1-2)2}の平方根なので√48になります。−6を√48で割ることで−0.866という類似度が導かれます。
これらの計算を、ユーザーベースの協調フィルタリングであればユーザーの全ての組み合わせで、アイテムベースの協調フィルタリングであれば全てのアイテム同士で類似度の計算を行い、行列を作ります。
推薦スコアを計算
これらの類似度行列と、評点行列を元に推薦のスコアを求めていきます。
これは先ほどお見せした評点の行列と、右にあるのはユーザー1に対する類似度を示したものです。 ここからは例としてユーザー1に対するレコメンドを考えたいと思います。ユーザー1が評点をつけていないA、B、C、G、H、I、Kについてのレコメンドスコアを求めていきます。
表はユーザー1との類似度と、ユーザー[2−8]のアイテム[A-K]に対する点数を掛け合わせたものです。例えばB3は、ユーザー3のBに対する1点、ユーザー1とユーザー3の類似度が−0.866なので、1×(-0.866)で-0.866となっています。
次に、それぞれの数の和を求めます。さらに、アイテムA-Kが何ユーザーに評点をつけられているかをカウントします(評点数)。
最後に、その和をカウント数割った数(図の中の「和」÷「評点数」)を求めそれがスコアになります。つまり、ユーザー1にはアイテムAとアイテムIが最もおすすめできるものとなります。
このような計算手順を踏むことで協調フィルタリングのスコアを求めることができます。
以上が協調フィルタリングの具体的な計算方法です。 前回の概要編と今回の計算方法編の2部を通し、協調フィルタリングの基本的な考え方をご理解いただければ幸いです。
余談ですが。
前回と今回でご説明した協調フィルタリングは、かねてからメッセナゴヤと共同開発していたAIマッチングシステムでも活用しております。詳しくはこちらをご覧ください。
また、AIマッチングシステムについてmarvinでも取り上げていただきましたので、ご興味がおありの方はぜひこちらもご覧ください。