4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

簡易的なレコメンド機能の実装

Last updated at Posted at 2021-04-27

タイトル:「あなたへのオススメ」機能の実装

レコメンド機能の実装:強調フィルタリング機能

主要なWebサービスでよく見かけるレコメンド機能("あなたへのオススメ"みたいな)について実装したので記事にいたします。
簡易的なやり方ですのでそこまで難易度は高くないです!

レコメンド機能とは?

レコメンド機能とはAmazonやメルカリなどの主要サービスでよくみる「あなたへのおすすめ!」みたいなやつです。
例えを今回私が作成したサービスであるAbility(アプリの情報共有サービス)を例に説明します。

image.png

各ユーザがレビューしたアプリ

名前 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さんがログインしたときにオススメのアプリを出すことを考えます。
検討方針としては下記の順番です。

  1. Aさんのレビューしたアプリに相関が近い人を探す。後で詳しく書きますがここではCさん
  2. CさんがレビューしていてAさんがレビューしていないアプリをオススメに出す

詳しく記載していきます。

1.Aさんのレビューしたアプリに相関が近い人を探す。

ここではJaccard(ジャッカード)指数を用いて相関を出します。
Jaccard(ジャッカード)指数とは類似度の計算で使うものです。

数式は下記です。
image.png

わかりやすく図で表すと下記になります。
image.png

参考リンク: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さんがレビューしていないアプリをオススメに出す

図で言うと下記の部分。
image.png

ここではNotionになるので、Aさんのオススメに表示する。

コードは別途記載していきます!!
下記、今回作成したサービス。
https://ability-applications.com/home

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?