タイトル:「あなたへのオススメ」機能の実装
レコメンド機能の実装:強調フィルタリング機能
主要なWebサービスでよく見かけるレコメンド機能("あなたへのオススメ"みたいな)について実装したので記事にいたします。
簡易的なやり方ですのでそこまで難易度は高くないです!
レコメンド機能とは?
レコメンド機能とはAmazonやメルカリなどの主要サービスでよくみる「あなたへのおすすめ!」みたいなやつです。
例えを今回私が作成したサービスであるAbility(アプリの情報共有サービス)を例に説明します。
各ユーザがレビューしたアプリ
名前 | Trello | Asana | Notion |
---|---|---|---|
Aさん | 1 | 1 | - |
Bさん | - | 1 | 1 |
Cさん | 1 | 1 | 1 |
Dさん | - | - | 1 |
Aさんは"Trello"、"Asana"、のレビューをした
Bさんは"Asana"、"Notion"のレビューをした
Cさんは"Trello"、"Asana"、"Notion"のレビューをした
Dさんは"Notion"のレビューをした
ここでAさんがログインしたときにオススメのアプリを出すことを考えます。
検討方針としては下記の順番です。
- Aさんのレビューしたアプリに相関が近い人を探す。後で詳しく書きますがここではCさん
- CさんがレビューしていてAさんがレビューしていないアプリをオススメに出す
詳しく記載していきます。
1.Aさんのレビューしたアプリに相関が近い人を探す。
ここではJaccard(ジャッカード)指数を用いて相関を出します。
Jaccard(ジャッカード)指数とは類似度の計算で使うものです。
参考リンク:https://mieruca-ai.com/ai/jaccard_dice_simpson/
AさんとBさんのレビューしたアプリをそれぞれ集合とするとJaccard(ジャッカード)指数は以下になります。
例えばAさん、Bさんのジャッカード指数計算すると
|A∩B| = 1
|A∪B| = 3
1 / 3 = 0.33....
となる。
同様にCさんとDさんも計算すると下記の図のとおりになる。
名前 | Trello | Asana | Notion | Jaccard指数 |
---|---|---|---|---|
Aさん | 1 | 1 | - | ☓ |
Bさん | - | 1 | 1 | 0.333.... |
Cさん | 1 | 1 | 1 | 0.666.... |
Dさん | - | - | 1 | 0 |
よってAさんと相関が高いのはCさんとなる。
2.CさんがレビューしていてAさんがレビューしていないアプリをオススメに出す
ここではNotionになるので、Aさんのオススメに表示する。
コードは別途記載していきます!!
下記、今回作成したサービス。
https://ability-applications.com/home