ゼファーネットのロゴ

Lenskitを使用してレコメンデーションシステムを構築し、PythonでnDCGを使用して評価する方法

日付:


概要

レコメンデーションシステムは、あらゆる優れたビジネスの中核にあります。 これは、新しい顧客を引き付け、既存の顧客の選択を理解し、彼らが好むかもしれないアイテムを推奨することによって、既存の顧客を維持するのに役立つ非常に重要なツールです。 優れたレコメンデーションシステムは、ユーザーの全体的なエクスペリエンスを大幅に向上させ、ビジネスの成長に役立ちます。 そこには複数のレコメンダーシステムがあり、Netflix、Spotify、Googleのような多くの大企業がまだそれを構築し、最高になるように強化しています。 この記事では、Lenskitがレコメンダーシステムの構築にどのように役立つか、およびnDCGメトリックを使用して最適なレコメンダーアルゴリズムを見つけるためにさまざまなレコメンダーアルゴリズムを評価する方法を説明します。

LensKitの紹介

LensKitは、実際には、レコメンデーションシステムを作成およびテストするための多くのツールを備えたPythonライブラリです。 これは、LensKitのJava版に基づいており、Python言語に移植されています。 このライブラリを使用すると、さまざまなレコメンダーアルゴリズムを実行、トレーニング、および評価できます。 LensKitライブラリの助けを借りて、推奨領域のより良い研究を効果的に支援し、プロセスで最適なアルゴリズムを見つけることができます。

スコアリングメカニズムが組み込まれており、各推奨事項にスコアを割り当てて、それらがどれほど正確であるかを調べたり、上位5つの推奨事項を調べたりすることができます。LensKitには、新しいアルゴリズムの実装と設計に使用できるツールも多数あります。推奨事項について。

次の図は、モデルのワークフローとツールキットのさまざまな部分を説明しています。 ツールのアイテムレコメンダーシステムを使用した後、私たちは最善のレコメンデーションを提供することができます。 独自の評価スケールを選択し、それに応じてすべてのデータセットに評価を与えることができます。 この評価は、データセットをテストとトレーニングに分割した後に比較され、それに応じてスコアがアルゴリズムに割り当てられます。

pipと次のコード行を使用して、ライブラリを環境にインストールできます。

ライブラリのインストール

!pipインストールLensKit!pipインストールサプライズ

注:データセットのロードにはサプライズライブラリを使用します。

レコメンダーシステムの構築

nDCGスコアリングにはLenskitのツールキットを使用します。 nDCGの完全な形式は、ランキングの品質を測定できる尺度である「正規化された割引累積ゲイン」です。 このメトリックは、レコメンデーションシステムを評価するために開発されたものであり、PythonDataFrameと互換性があります。 以下に示す3つの列を使用します。

  • Item
  • ユーザー
  • 評価

scikit-surpriseライブラリからデータセットをロードしてから、データ探索を続行します

データセットの読み込み

コー​​ド :

import Surpish import pandas as pd data = Surpish.Dataset.load_builtin('ml-100k')ddir = Surpish.get_dataset_dir()r_cols = ['user'、'item'、'rating'、'timestamp']ratings=pd。 read_csv(f'{ddir} /ml-100k/ml-100k/u.data'、sep ='t'、names = r_cols、encoding ='latin-1')ratings.head()

ユーザー、アイテム、評価、タイムスタンプの列があることがわかります。

アルゴリズムのインポートとインスタンス化

コー​​ド :

レンズキットからインポートML100Kレンズキットからインポートバッチ、topn、util、topnレンズキットからインポートクロスフォールドをレンズキットからxfとしてインポート= als.BiasedMF(20)

必要なメソッドをインポートし、XNUMXつのアルゴリズムを初期化します。

  1. KNN
  2. バイアス行列因数分解

次に、推奨関数を作成し、LensKitツールを使用して、作成時に評価してメモリスペースを節約することもできます。 適切な見積もりを取得するために、最初に推奨事項を生成し、次にそれを評価して他のアルゴリズムと比較します。

次のコードは、モジュール形式で推奨事項を生成するのに役立ち、複数のアルゴリズムで再利用できます。 入力パラメーターとしてalgorithm_name、Algorithm、train、testデータを取ります。

機能コード:

def eval(aname、algo、train、test):fittable = util.clone(algo)fittable = Recommendationer.adapt(fittable)fittable.fit(train)users = test.user.unique()recs = batch.recommend(fittable 、users、100)recs ['Algorithm'] = aname return recs

推奨事項の適合

この関数を使用して、一貫したスコアリングメカニズムのために同じデータセットを使用してアルゴリズムをループする単純なforループによって推奨を生成できます。

コー​​ド :

all_recs = [] test_data = [] for train、test in xf.partition_users(ratings [['user'、'item'、'rating']]、5、xf.SampleFrac(0.2)):test_data.append(test) all_recs.append(eval('ItemItem'、algo_ii、train、test))all_recs.append(eval('ALS'、algo_als、train、test))

出力:

注:データセットが大きいためにコードの実行時に発生する実行時の問題に関する警告は無視してかまいません。

推奨事項の評価

次に、結果に移って比較しますが、最初に、それらをXNUMXつのDataFrameにマージします。

コー​​ド :

all_recs = pd.concat(all_recs、ignore_index = True)all_recs.head()

出力:

それらの出力をデータセットに追加できることがわかります。各アイテムの特定のスコアと、それらの値を推奨するために使用されるアルゴリズムがあります。 より良い結果を得るために、すべてのテストデータをXNUMXつの単一のデータフレームに連結することができます。

コー​​ド :

test_data = pd.concat(test_data、ignore_index = True)test_data.head()

出力:

次に、RecListAnalysisと呼ばれる料金を使用して推奨事項を分析します。これにより、すべての推奨事項とテストを適宜一覧表示できます。 これを使用して、nDCG値を評価します。

コー​​ド :

rla = topn.RecListAnalysis()rla.add_metric(topn.ndcg)results = rla.compute(all_recs、test_data)results.head()

出力:

XNUMXつのアルゴリズムによって評価された適切なDataFrame形式でnDCG値を取得し、どちらのアルゴリズムが全体として最高のnDCG値を提供したかを評価します。

コー​​ド :

results.groupby('Algorithm')。ndcg.mean()

出力:

次に、出力を視覚化して結果を見つけます。

コー​​ド :

results.groupby('Algorithm')。ndcg.mean()。plot.bar()

出力:

XNUMXつのアルゴリズムを分析した後、ALSまたは代替最小二乗アルゴリズムのnDCG値が大きいことがわかります。

結論

したがって、この記事では、XNUMXつのアルゴリズムについて説明し、より優れた推奨アルゴリズムを見つけましたが、これを複数のアルゴリズムと複数のデータセットにスケーリングして、全体として最適なアルゴリズム、またはXNUMXつを超えることができる少なくともXNUMXつのアルゴリズムを見つけることができます。 より多くの調査を行い、これに関する将来の記事/コードで私にタグを付けてください。この作業を継続することを熱望しています。

コードリンク:

https://colab.research.google.com/drive/1nVfcvEuNDbRNzM2jztctX8eTolPz3JZt?usp=sharing

Lenskitドキュメントリンク: https://lkpy.readthedocs.io/en/stable/

この記事が気に入ったら、他の記事もお気軽にチェックしてください こちら.

アーナブモンダル (LinkedIn)

[メール保護]

シニアSDE:Python開発者| フリーランスのテクニカルライター

スポット画像

最新のインテリジェンス

スポット画像