この記事の目次
chevron_right
SQLだけでレコメンドエンジンを作ってみる
chevron_right
データベースのテーブルを用意
chevron_right
分析してみる
chevron_right
SQLを書き出してみる
SQLだけでレコメンドエンジンを作ってみる
レコメンド系になると、目が輝き出すNな人です。
では早速作り方を。
データベースのテーブルを用意
これはぶっちゃけ、
- ユーザの固有情報
- 商品のID
- その商品の評価
がわかればOKです。
ユーザID(user_id) | 商品ID(product_id) | ユーザの評価(taste) |
---|---|---|
1 | 1 | 1 |
1 | 2 | 1 |
1 | 3 | 0 |
2 | 1 | 0 |
2 | 2 | 1 |
2 | 3 | 1 |
3 | 1 | 1 |
3 | 2 | 1 |
3 | 3 | 0 |
※ユーザの評価は、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な人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。