あなたにオススメの〜的なサービスを実装する(数式編)

前回の解析では、Pythonを知らない人にとっては分かり難いプログラムだったと思うので、レコメンドサービスで使用するアソシエーション解析の数学的理論について書こうと思います。

この公式は、こちらのサイトの内容の前半部分を元に自分で作成した公式になりますので、確実性は保証できませんが、簡単なアソシエション解析を行う際には問題ないと思います。
第2回 「ある商品といっしょによく売れる商品は何か?」を見つけるには ~マーケット・バスケット分析の考え方:Mahoutで体感する機械学習の実践|gihyo.jp … 技術評論社


1. 顧客の商品購入データの行列Aから、商品の組み合わせ購入行列Bを作成する。


A=\left( \begin{array}{cccc}
a_{11} & a_{12} & \cdots & a_{1n}\\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{array} \right)


B=\left( \begin{array}{cccc}
b_{11} & b_{12} & \cdots & b_{1n}\\
b_{21} & b_{22} & \cdots & b_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
b_{m1} & b_{m2} & \cdots & b_{mn}
\end{array} \right)

として、以下の公式で計算する


b_{ij} = \sum_{k=0}^{m} a_{ki} \cap a_{kj}
ただし、 a_{ij} \in (0, 1)より、

b_{ij} = \sum_{k=0}^{m} a_{ki} \cap a_{kj} = \sum_{k=0}^{m} a_{ki} * a_{kj}


2. 組み合わせ購入比率行列の計算

 s_{j} = \sum_{i=0}^{n} b_{ij}とすると
求める組合せ購入比率行列Cは、

c_{ij} = \frac{b_{ij}}{s_{j}} (c_{ij} \in C    i, j \in 0..n)


これらの公式をプログラムにしたのが、前回ご紹介したPythonのプログラムになります。
もしRubyなどで実装したい方は、がんばってこちらの公式をプログラムに変換してみてください。