山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

レコメンデーション

こないだから機械学習の本を読んでいて

その中でレコメンデーションロジックが

紹介されていました。

ロジックを要約すると以下のようになります。

・ユーザー×商品の行列(マトリクス)を作る

・買ったことがあれば1、なければ0

・商品の列を抽出

・2つの商品の相関係数を計算(類似度)

・相関係数は1~-1なので、距離に変換

・全部の商品でこれをやると商品同士の距離が出る

・あるユーザーがある商品を買う確率

・その商品と類似度が近い商品上位一定数を出す

・その商品を買った=1 買ってない=0の平均を出す

・この平均が買う確率

・全商品で確率を計算

・確率が高い商品をレコメンド

相関係数はRの関数でポンと出します。

相関係数は完全に一致する場合1になり、正反対の

場合-1になります。

距離は全く同じなら0、正反対だと無限大です。

本だと以下のように変換していました。

distances <- -log((similarities / 2) + 0.5)


もう8年くらい前になるでしょうか、

この手のことに強い学生起業家君がいて

一緒にレコメンデーションロジックを

ああでもないこうでもないと議論していました。

そのときとほぼ同じロジックです。

こういう分野では昔から定石なのでしょう。


このロジックは、今まで買ったものに

似ているものを推薦するロジックです。

でも食べ物の場合それがいいとは言えません。

同じようなものばかり食べると飽きます。

1回だけ買ったものの場合、それが気に入った

とは限りません。

宣伝文句に惹かれて買ってみたけど食べて

みてがっかりということはよくあります。


食品ではどういうロジックがよいのでしょうね。