0Pricing
Learn AI with Python · レッスン

協調フィルタリング:ユーザーベースとアイテムベース

ユーザー間の類似度、アイテム間の類似度、近傍法、評価値に対するコサイン類似度について学習します。

「協調フィルタリング:ユーザーベースとアイテムベース」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

協調フィルタリングとは

協調フィルタリング(CF)は、多数のユーザーの行動から学習してアイテムを推薦します。基本的な考え方は、過去に好みが一致した人々は、将来も好みが一致する傾向があるというものです。アイテムの説明は必要なく、インタラクション履歴だけで動作します。

ユーザー・アイテム行列

CFはユーザー・アイテム行列から始まります。行がユーザー、列がアイテムを表し、各セルには評価が入ります(未評価の場合は空欄です)。各ユーザーが評価するアイテムは少ないため、この行列は通常非常にスパースです。

import pandas as pd

matrix = ratings.pivot_table(
    index="user_id", columns="item_id", values="rating"
)

CFの2つの方式

  • ユーザーベース: 自分と似たユーザーを見つけ、そのユーザーが好んだものを推薦します。
  • アイテムベース: 自分が好んだアイテムと似たアイテムを見つけ、それらを推薦します。

どちらも、行(ユーザー)または列(アイテム)の間の類似度を利用します。

コサイン類似度

コサイン類似度は、評価ベクトルの大きさを無視して、2つのベクトルのなす角度を測定します。値が1に近いほど好みが非常に似ており、0に近いほど関連性がありません。

from sklearn.metrics.pairwise import cosine_similarity

filled = matrix.fillna(0)
user_sim = cosine_similarity(filled)  # user x user

ユーザーベースの予測

あるアイテムに対する自分の評価を予測するには、似たユーザーがそのアイテムに付けた評価の加重平均を計算し、類似度で重み付けします。類似度が高い近傍ユーザーほど、予測への影響が大きくなります。

予測式

予測評価値は、対象アイテムを評価した近傍ユーザーについて、類似度と近傍ユーザーの評価値の積を合計し、それを類似度の合計で割った値です。各ユーザーの平均値を先に引く平均中心化を行うと、普段から高く、または低く評価するユーザーの傾向を補正できます。

import numpy as np

def predict(sims, ratings_for_item):
    mask = ~np.isnan(ratings_for_item)
    if sims[mask].sum() == 0:
        return np.nan
    return np.dot(sims[mask], ratings_for_item[mask]) / sims[mask].sum()

近傍ユーザーの選択(k)

すべてのユーザーを使う代わりに、類似度が最も高い上位k人の近傍ユーザーだけを残します。これにより、似ていないユーザーによるノイズを減らし、予測を高速化できます。kは調整可能なハイパーパラメーターです。

アイテムベースの類似度

アイテムベースCFでは、ユーザーの行ではなくアイテムの列同士の類似度を計算します。ユーザーがすでに好んだアイテムと最も似ているアイテムを推薦します。

item_sim = cosine_similarity(filled.T)  # item x item

アイテムベースがより安定する理由

アイテム同士の関係はゆっくり変化します。たとえば、2つの映画の類似度はおおむね一定です。一方、ユーザーの好みやユーザーベースはより速く変化します。そのため、アイテムベースの類似度は事前計算して再利用でき、より安定して拡張性の高い推薦が可能になります。Amazonが有名なほどアイテムベース方式を重視したのはこのためです。

コールドスタート問題

CFは、まだ評価がない新しいユーザーやアイテムの扱いを苦手とします。比較対象が存在しないためです。一般的な対策として、新規ユーザーにいくつか評価してもらう方法や、コンテンツベースの手法(後で扱います)に切り替える方法があります。

推薦の生成

ユーザーがまだ評価していないすべてのアイテムにスコアを付け、降順に並べ替えて、上位N件を推薦として返します。

scores = {item: predict_for(user, item)
          for item in unrated_items(user)}
top_n = sorted(scores, key=scores.get, reverse=True)[:10]

確認テスト

協調フィルタリングの知識を確認しましょう。

まとめ

ユーザー・アイテム行列上にCFを構築し、コサイン類似度を計算して、近傍ユーザーの類似度による加重平均として評価値を予測しました。また、アイテムベースCFがユーザーベースCFより安定している理由も学びました。次は、SVDによる行列分解です。

よくある質問

「協調フィルタリング:ユーザーベースとアイテムベース」レッスンは無料ですか?

はい。「協調フィルタリング:ユーザーベースとアイテムベース」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「協調フィルタリング:ユーザーベースとアイテムベース」で何を学びますか?

ユーザー間の類似度、アイテム間の類似度、近傍法、評価値に対するコサイン類似度について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「協調フィルタリング:ユーザーベースとアイテムベース」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 協調フィルタリング:ユーザーベースとアイテムベース
  2. SVDによる行列分解
  3. コンテンツベースフィルタリング
  4. ハイブリッドシステムと評価指標
← Learn AI with Pythonに戻る