Nな人のWebしるべ
arrow_backBACK

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)」を入れてください

POSTED AT 2018-10-28 07:41:31
 
名前:Nな人
職種:多分エンジニア
好きなもの:P言語(perl, python, php)


Web系のエンジニアをやっているNな人という人物。
業務ではPHPをメインで扱っており、Silex、CakePHP3を主に利用しています。
あとは趣味でLaravelを触っていたり、インフラをオンプレでちょこちょこやってたりするおっさんです。