%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%	tani_resume.syt 使用例
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%#! platex resume.tex
\documentclass[a4paper]{jarticle}

\usepackage{tani_resume_last}

\alignbeforeskip -5mm
\alignafterskip -5mm
\eqnarraybeforeskip -5mm
\eqnarrayafterskip -5mm

\jptitle{協調フィルタリングを用いた\\映画評価予測プログラムの試作\\-ジャンル嗜好による協調フィルタリング-\\}
\etitle{Trial program for movie rating prediction using Collaborative Filtering\\-Collaborative Filtering by genre taste-\\}
\jpauthor{吉野　友美}
\eauthor{Yoshino Tomomi}
\course{谷　研究室}
\year{20}
\abstract{%
協調フィルタリングを用いて、ジャンル分けされた映画のタイトルによるレコメンドシステムを試作する。}

% 最終更新時刻の挿入
%\compheading

\begin{document}

% タイトルを表示させる
\maketitle

\begin{multicols}{2}

\section{はじめに}
オンラインショッピング等では、ユーザーの購買意欲を向上させるためにお薦め商品の提案がなされている。そしてユーザへその提案をするためにレコメンドシステムが使われている。今回は協調フィルタリングを用いて、映画評価予測プログラムの試作を行った。\\
　今回はジャンル分けされたデータを使って、ユーザがどのジャンルを好むかという嗜好を予想して、それを元に評価することに挑戦する。\\
　２章では協調フィルタリングの定義をして、３章ではアルゴリズムの方針を提示し、４章で実験をして、５章ではその結果、６章で今後の課題を示していく。\\

\section{協調フィルタリング}
協調フィルタリング（Collaborative Filtering, CF）は、多くのユーザの嗜好情報を蓄積し、あるユーザと嗜好の類似した他のユーザの情報を用いて自動的に推論を行う方法論である。趣味の似た人からの意見を参考にするという口コミの原理に例えられることが多い。\\
　例えば、ユーザAがアイテムXを好むとすると、アイテムXを好む別のユーザBが好むアイテムYを探し出し、ユーザAもアイテムYを好むのではないか、という推論をコンピュータによって自動的に行う。実装にはユーザ同士の類似度を、同じアイテムにつけた評価の相関係数などによって表して類推に利用することが多い。

\subsection{ユーザーベース}
ユーザーベースとは、推薦対象のユーザーと他のユーザー間の類似度を求め、推薦対象のユーザーの未評価値を他のユーザーとの類似度とそのユーザーの評価値を用いて予測するものである。
\subsection{アイテムベース}
アイテムベースとは、各アイテム間の類似度を求め、推薦対象のユーザーの未評価値を他のアイテムとの類似度とそのアイテムの評価値を用いて予測するものである。\\

\section{方針}
\subsection{基本的な手順}
まず基本的な手順を提示して、これに基づいてさらに改造を試みる。\\
　始めに各ユーザーのジャンル毎の平均を求め、そのジャンルが好むか好まないか判断する。また映画のタイトルの属するジャンルからそのタイトルが好むか好まないか予想し、そのタイトルを好むであろう人の評価の集合の平均とそのタイトルを好まないであろう人の評価の集合の平均を求める。最後に未評価のタイトルに対しても同様に、そのタイトルが属するジャンルから好むか好まないか予想し、そのタイトルを好むであろうならば好む人の集合の評価の平均を割り当て、好まないであろうならば好まない人の集合の評価の平均を割り当てていく。\\

以下より手順の詳細を記述する。\\
(1)各ユーザーが既に評価した映画のタイトルの評価をそのタイトルが属するジャンルに足していく。尚、属するジャンルが複数ある場合はそれぞれのジャンルに足していく。そして、各々のジャンルの評価の和から平均を求める。\\
(2)ジャンルの平均が3.5以上ならばそのジャンルを好み、3.5未満ならばそのジャンルは好まないと判断する。\\
(3)(2)で作成されたジャンルの好みのデータを元に、映画のタイトルが属するジャンルが好むかどうかによって、そのタイトルを好むか好まないか判断する。\\
(4)映画のタイトルが好むか好まないか判断した上で、好む人の評価の集合と好まない人の評価の集合に分けて、平均を求める。\\
(5)未評価のタイトルに対して、そのタイトルが属するジャンルを好むか好まないかによって、そのタイトルを好むか好まないか予想して、好むならばそのタイトルを好む人の評価の平均を、好まないならばそのタイトルを好まない人の評価の平均を割り当てる。\\

\subsection{さらに改造した点}
基本手順に則り、少々改造を試みる。\\
(i)上記で出力された結果と各ユーザーのジャンル毎の平均の平均を取る。\\
(ii)好むと好まないの他に普通という基準を設ける。\\
１＜＝好まない＜３\\３＜＝普通＜４\\４＜＝好む＜＝５\\

\section{実験}
\subsection{実験環境}
\begin{tabular}{|c|c|} \hline
CPU & Athlon64 3200+ \\ \hline
メモリ & 1024MB\\ \hline
OS & CentOS 5.2\\ \hline
\end{tabular}
　\\

\subsection{データセット}
アルゴリズムの性能評価にMovieLensのデータセットを利用する。\\
MovieLens のデータセットはユーザー数:943、映画数:1682、評価数:10万で構成されていて、
各ユーザーは評価数が20以上であることが保証されている。
今回はこのファイルの中から各ユーザー毎に10個ずつ評価をランダムに抜き出し、予測対象データと元データに分ける。\\
ここで、コールドスタート問題を避けるため、各ユーザーの最低評価数10は保証することとする。\\
そのファイルを10組作り出した。
そしてその10組のファイルを用いて実験を行い、精度を求め、その平均を比較する。

\subsection{方法}
精度を比較するための指標としてMAEを用いる。

\[ MAE = \frac{1}{N} \sum_{i=1}^{N} | 予測値 - 実際の値 | \]

ここで、Nは予測対象データの総数である(=9430)。
MAEの値が0に近づけば近づくほど誤差が少ない、つまり精度が良いということになる。\\

\section{結果・考察}

\subsection{結果}

\begin{tabular}{|c|c|c|} \hline
方法 & 精度 \\ \hline
基本手順 & 0.861948 \\ \hline
改造１ & 0.860496 \\ \hline
改造２ & 1.200622 \\ \hline
\end{tabular}
　\\

\subsection{考察}
基本手順ではそれなりの結果が得られたと思う。改造１では精度が上がったが、改造２では下がっていた。改造１で行った基本手順での結果にさらにジャンル平均との平均を取ったもので精度が上がったのは、ユーザーのジャンル平均も考慮に入れることで、個人個人の特徴が反映されたからだと思われる。逆に改造２で行った好む好まないの他に普通という基準を設けたもので精度が落ちたのは、タイプを分けすぎたことにより比べるユーザーの数が減り、平均にばらつきが見られたことが原因だと思われる。\\

\section{今後の課題}

今後、以下の課題が考えられる。\\
・Netflixのデータを扱うために、データベースの構築\\
・実行速度向上のために、マシンスペックの改善\\

\section{参考文献等}
\begin{description}
\item[[1]] MovieLens Data Sets　http://www.grouplens.org/node/73
\item[[2]] Netflix prize http://www.netflixprize.com/
\end{description}

\end{multicols}

\end{document}



