SQLでレコメンドしてみる

MySQL
レコメンド

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

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

では早速作り方を。

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

これはぶっちゃけ、

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

がわかればOKです。

ユーザID商品IDユーザの評価
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)」を入れてください

Nな人
とあるWebアプリケーション開発企業で働くしがないエンジニア見習い。
好き嫌いは激しいが、いろんなことが知りたい。
最近はPHPをメインに書いているが、初めて触った言語はActiveBasicで動くN88BASICという、超古典的言語。
BASICとperlをこよなく愛するP言語エンジニア。
よしなにお願いいたします。