SQLでレコメンドしてみる

SQLだけでレコメンドエンジンを作ってみる

レコメンド系になると、目が輝き出すNな人です。

では早速作り方を。

データベースのテーブルを用意

これはぶっちゃけ、

  • ユーザの固有情報
  • 商品のID
  • その商品の評価

がわかればOKです。

ユーザID(user_id)商品ID(product_id)ユーザの評価(taste)
111
121
130
210
221
231
311
321
330

※ユーザの評価は、1=好き0=嫌いと考えてください。

こんな感じのテーブルでOKです。

分析してみる

商品1を好きというユーザは1,3

商品2を好きというユーザは1,2,3

商品3を好きというユーザは2

よって、商品2→商品1→商品3の順に人気ですね?

これだけでは物足りません。

例えば商品1を購入したユーザは、他にどのような商品を購入しているのでしょうか?

言わずもがな、商品2が人気ですね?

ということは商品2をレコメンドすればいいわけです。(たまたま人気順位と一緒になっちゃった……また別サンプル考えます。)

この推薦方式をアイテムベース推薦と言います。

SQLを書き出してみる

select
    group_concat(user_id), product_id, taste
from
    taste
where
    user_id
    in (
        select user_id from taste where product_id = [商品ID] and taste = 1
    ) and taste = 1
    and product_id <> [商品ID]
group by product_id
order by count(user_id) desc
limit 10;

※SQL中の「[商品ID]」は、例えば「商品2を購入したユーザが他に購入している商品」を探すなら、「商品2のID(2)」を入れてください

[PR] おすすめの本
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。