推薦システム

作成日:2008-01-15
最終更新日:

推薦システムのアルゴリズムを述べる。 以下は、神嶌敏弘氏による、下記の人工知能学会誌の解説をもとにしている。

神嶌敏弘:推薦システムのアルゴリズム(2), 人工知能学会誌, Vol.23, No.1, pp.89-103

嗜好の予測

上記解説によれば、「嗜好の予測とは、活動利用者の嗜好データや、 アイテムの特徴を用いて、 活動利用者の各アイテムへの関心や好みの度合いを予測することである。」

嗜好を予測するための方法は、大きくわけて二つある。 一つは、検索対象の内容を考慮して推薦する方法であり、 もう一つは趣味が似ている人に面白かったものを教えてもらう方法である。 前者は内容ベースフィルタリング、後者は協調フィルタリングと呼ばれる。

協調フィルタリング

メモリベース法

協調フィルタリングの手法には、 メモリベース法と、モデルベース法、 およびこれらのハイブリッド手法がある。 ここで紹介するのは、ハイブリッド法である。 以下、ハイブリッド法について、上記論文の例で紹介する。

↓はどんぶり専門店の評価表である。 4人の利用者は各行に対応し、 4種類のどんぶりは列に対応する。 評価は3段階である。3が好き、2がふつう、1が嫌いである。 *は未評価である。 さて、2:田中の1:親子丼の推定値はどうなるだろうか?

利用者\丼 1:親子丼 2:牛丼 3:海鮮丼 4:カツ丼
1:山田 13*3
2:田中 *13*
3:佐藤 2131
4:鈴木 132*

以下、推定値を求めるアルゴリズムである。

  1. 親子丼を評価済の利用者を探す。上の例では、1、3、4である。
  2. 上で探した利用者に対して、相関係数を求める
    1. 1:山田との間で共通して評価したどんぶりは、 牛丼1つのみである。この場合の相関係数は0。すなわち、 ρ2,1=0
    2. 3:佐藤との間で共通して評価したどんぶりは、 牛丼と海鮮丼2つである。 この場合の相関係数を求めるのであるが、 まず、それぞれの利用者が共通して評価したどんぶりの、 評価の平均値を求める。
      田中の平均評価値は、s'2 = Σk=2,3s2,k / 2 = (1 + 3) / 2 = 2
      佐藤の平均評価値は、s'3 = Σk=2,3s3,k / 2 = (1 + 3) / 2 = 2
    3. 相関係数は次の式となる。
      ρ2,3 = { Σk=2,3 (s2,k - s'2) (s3,k - s'3) } / {sqrt(Σk=2,3(s2,k - s'2)2) sqrt(Σk=2,3(s3,k - s'3)2)
      上の式に値を代入して、
      ρ2,3 = { (1-2)(1-2) + (3-2)(3-2) } / {sqrt((1-2)2+(3-2)2) sqrt((1-2)2+(3-2)2) } = 1
    4. 同様に2:田中と鈴木の相関を求めると、
      ρ2,4 = -1
      を得る。
  3. 推定評価値を計算する。
    1. まず、2:田中の全評価済アイテム上の平均評価値を求める。
      s2 = Σk=2,3s2,k / 2 = (1 + 3) / 2 = 2
    2. 最後に、これまで計算した値を予測式に代入する。
      ŝ2,1=s2 + Σi=1,3,4ρ2,i (si,1 - s'i) / Σi=1,3,42,i|
      これを代入して
      ŝ2,1=2 + {0(1-3)+1(2-2)+(-1)(1-5/2)} / (|0| + |1| + |-1|) = 2.75

以上から、2:田中の1:親子丼への推定評価値は2.75と計算できる。 この値は最大値3に近く、2:田中は1:親子丼が好きであると予測できる。

以上の考えかたに従い、JavaScript を組み、一度公開したが、 未完成だったため、公開を取り止めた。やはり、プログラミングは難しい。 完成したら公開する予定である。

まりんきょ学問所JavaScript 手習い > 推薦システム


MARUYAMA Satosi