🗂

【個人開発 #1-3】レコメンドシステムを作ってみた vol.3 〜推薦アルゴリズム「協調フィルタリング」〜

2023/10/13に公開

作りたいシステム

忙しい人のためのギフト提案型AI「AiSAP!(エイサップ)」

忙しい社会人のために、AIが可能な限り素早く(ASAP: As Soon As Possible)、最適なギフトを提案してくれるWebサービス。

※本記事の目的は個人開発の流れの紹介なので、アルゴリズムや技術の説明について正確性を欠いている箇所があるかもしれません。ご了承ください。
(詳しい方はコメント等でご指摘いただけると幸いです)

推薦アルゴリズムとは

このシステムの肝となるのが「推薦アルゴリズム」です。
「推薦アルゴリズム」とは、大量のアイテムの中から、様々なデータに基づいて、ユーザにおすすめのアイテムを計算してくれるアルゴリズムのことです。
AmazonやYoutube、Netflixなど様々なサービスで使われているのでイメージしやすいかと思います。

推薦アルゴリズムの種類

推薦アルゴリズムには、大きく分けて、アイテムの特徴を元にレコメンドを行う内容ベースフィルタリングとユーザの過去の行動履歴を元にレコメンドを行う協調フィルタリングがあります。

また、協調フィルタリングには、予め予測モデルを作成しておくモデルベース法と予測の際にデータを元に計算するメモリベース法があります。

さらにメモリベース法には、ユーザ間の類似度に着目するユーザ間型メモリベース法とアイテム間の類似度に着目するアイテム間型メモリベース法があります。

ざっくり図示するとこんな感じ。
recommend

今回使用するアルゴリズム

今回使用するアルゴリズムは「アイテム間型メモリベース協調フィルタリング」で、先ほどの図でいうと一番下の分岐に位置します。
ユーザの行動履歴からアイテム同士の類似度を算出する手法です。

例えば、あるECサイトから下表のような各商品に対する各ユーザの評価データが得られたとします(評価は★1~5の範囲とする)。
item_base_filtering

このとき、ユーザAの商品3に対する評価は不明ですが、他のユーザの評価からどうやら商品3は商品1と似ているようだということがわかります。(実際には見た目ではなくコサイン類似度のような計算で求めます)
ユーザAの商品1に対する評価は★5と高評価なため、商品3も同様に買ってくれる可能性が高いと判断できます。

今回作るシステムでの動き

先ほど紹介したのは一般的な例ですが、これを今回作るシステムに置き換えると下表のようになります(評価はプラスになるほど高く、マイナスになるほど低い)。
item_base_filtering_aisao
「花束」は「20代の彼女の誕生日」用のギフトとしてはまだ選ばれたことがないとします。
しかし、他の受け取り手タイプの評価の傾向から、「花束」は「ネックレス」と似ていることが分かります。
「ネックレス」の「20代の彼女の誕生日」用のギフトとしての評価は9.0と高いので、「花束」も同様にクリック率が高くなると予想できます。

次回からはいよいよ実装に入っていきます!

参考文献

https://www.oreilly.co.jp/books/9784873119663/
https://yolo-kiyoshi.com/2020/06/22/post-1947/
https://bigdata-tools.com/reccomend-base/
https://qiita.com/haminiku/items/f5008a57a870e0188f63

Discussion