ユーザー インタラクションに基づくレコメンデーション システム (協調フィルタリング) を組み込んだアプリケーションを設計しています。ホームページのユーザーには、操作する 6 つのアイテムのセットが表示されます。アイテム数は50~300アイテム。次のアクションが可能です。
- アイテムをクリックする (強い関心)
- アイテムを更新する (少し興味がある)
- 続きを読むダイアログを開きます (少し興味があります)
- 先に進むために何もしないでください (無関心)
このデータは収集され、保存されます。システムは、ユーザーに興味のあるアイテムを推奨する必要があります。このデータを評価システムに変えようと考えています。
オプション A) ユーザーがアイテムをクリックすると、これは暗黙のライフタイム レーティング 5 に変換されます。アイテムを更新すると 4 になります。したがって、私の user->item マトリックスは次のようになります。
item 1 | item 2 | item 3
john 5 4
jane 4
この例では、john は項目 1 をクリックして項目 3 を更新しました。評価は実際にしか上がりません。つまり、ユーザーが以前に項目を更新した場合、私は 4 を書き、項目が後でクリックされた場合にのみ 5 に更新します。
オプション B) ユーザーが上記のアクションのいずれかを実行するたびに、アイテムのスカラー値をインクリメントします。つまり、無限に大きくなる可能性があります。
item 1 | item 2 | item 3
john 55 1 30
jane 41 9
数値を 1 から 10 までの評価スケールに変換するのが難しくなったため、これは問題かもしれません。
オプション C) すべてのやり取りを個別にカウントする
item 1 click | item 1 refresh | item 1 read
john 3 1
jane 1 1
ここで問題となるのは、ある項目について「読む」ことは、おそらく 1 回だけであるということです。
どのようなオプションを選択するかに関係なく、私の考えは、コサイン類似度やピアソン相関などを使用して、類似したユーザーを最初に見つけることです。次に、そのリストから上位 10 人から 30 人のユーザーを選び、お気に入りのアイテムのトップリストを作成します。そのリストから、現在のユーザーが過去にほとんど触れていないアイテムをお勧めします。
これはうまくいくものですか?似たようなユーザーを見つけると、現在のユーザーにとって興味深い (新しい) アイテムを見つける機会がなくなるのではないかと心配しています。