1

クリックデータを使用して精度と再現率のグラフを作成しようとしています。2 つのデータ ソースがあります。

  1. 最初のデータ ソースには、特定の query_id に基づいて、すべてのユーザーがクリックした item_ids があります。
  2. 2 番目のデータ ソースには、指定された query_id に関連するすべての item_id があります。

私はPythonを使用し、次のように2つのデータソースでこれらを辞書に入れました:

>>> print clicked_data
{101: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 103: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]}

>>> print all_relevant_data
{101: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], 103: [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]}

私は scikit-learn の Web サイト ( http://scikit-learn.org/stable/auto_examples/plot_precision_recall.html ) の記事を読んでいて、式に従おうとしましたが、偽陽性と偽陰性を実際に設定するのに本当に混乱しました。

scikit-learn の方程式に従います: 上記の例によると、アイテムの事前定義101

P = T_positive/ (T_positive + F_positive)

>>> float(len(clicked_data[101]))/float(len(all_relevant_data[101]))
0.5555555555555556

しかし、リコールを理解しようとすると、クリックデータの偽陰性項目を取得するのに問題があります。理論的には、偽陰性は誤ってマークされていることを意味します。私が持っているのは、特定の ID のユーザーがクリックしたデータと、その ID に関連するすべてのアイテムだけです。

R = T_positive / (T_positive + F_negative)

グラフを作成できるように、精度と再現率を正しく計算するにはどうすればよいですか。

これが結果を評価するための良い指標ではない場合、別のメモとして、上記のデータしかないという事実を考慮して、良い指標は何でしょうか?

4

2 に答える 2

3

データセットに基づいて、precision@k、recall@k を計算できます。ただし、ドキュメントを計算するにはドキュメントのランキングが必要です。

データセット

よく知られているデータセットはAOL Search Query Logsで、これを使用して検索ベースのシステム (必要なのはデータセットと検索関数のみ) を構築して、精度、再現率、平均精度、平均精度を計算できます。上記の用語について簡単に説明します。

文書ランキング・検索機能

Okapi BM25 (BM は Best Matching の略) は、検索エンジンが特定の検索クエリとの関連性に従って一致するドキュメントをランク付けするために使用するランキング関数です。これは、確率的検索フレームワークに基づいています。BM25 は、ドキュメント内のクエリ用語間の相互関係 (たとえば、それらの相対的な近さ) に関係なく、各ドキュメントに現れるクエリ用語に基づいて一連のドキュメントをランク付けするバッグオブワード検索機能です。詳細については、ウィキペディアのページを参照してください。

精度と再現率

「関連性があるとして取得したすべての文書のうち、実際に関連性があるのはどれくらいか」という精度測定。

Precision = No. of relevant documents retrieved / No. of total documents retrieved

「実際に関連するすべてのドキュメントのうち、関連するものとして検索したドキュメントはいくつありますか?」を思い出してください。

Recall = No. of relevant documents retrieved / No. of total relevant documents

クエリ "q" が、クエリ "q" に対して 100 件の関連ドキュメントを持つ情報検索システム (検索エンジンなど) に送信された場合、システムは 600 件のドキュメントのコレクションから 68 件のドキュメントを検索するとします。検索された 68 文書のうち、40 文書が関連していました。したがって、この場合は次のようになります。

Precision = 40 / 68 = 58.8%Recall = 40 / 100 = 40%

F-Score / F-measure は、適合率と再現率の加重調和平均です。従来の F メジャーまたはバランスの取れた F スコアは次のとおりです。

F-Score = 2 * Precision * Recall / Precision + Recall

平均精度

このように考えることができます。何かを入力するGoogleと、10 件の結果が表示されます。それらのすべてが関連していれば、おそらく最善です。そのうちの 5 つなど、一部のみが関連する場合は、関連するものが最初に表示される方がはるかに優れています。最初の 5 つが無関係で、良いものが 6 番目から始まったらまずいですね。AP スコアはこれを反映しています。

以下に例を示します。

ここに画像の説明を入力

2 つのランキングの AvgPrec:

ランキング#1:(1.0 + 0.67 + 0.75 + 0.8 + 0.83 + 0.6) / 6 = 0.78

ランキング#2:(0.5 + 0.4 + 0.5 + 0.57 + 0.56 + 0.6) / 6 = 0.52

平均精度 (MAP)

MAP は、複数のクエリ/ランキングにわたる平均精度の平均です。説明のために例を挙げます。

ここに画像の説明を入力

2 つのクエリの平均精度:

クエリ 1 の場合、AvgPrec: (1.0+0.67+0.5+0.44+0.5) / 5 = 0.62

クエリ 2 の場合、AvgPrec: (0.5+0.4+0.43) / 3 = 0.44

したがって、MAP =(0.62 + 0.44) / 2 = 0.53

precision@k検索システムのrecall@kパフォーマンス指標として を使用することがあります。このようなテスト用の検索システムを構築する必要があります。プログラムを Java で作成する場合は、Apache Luceneを使用してインデックスを作成することを検討してください。

于 2016-11-27T22:41:10.140 に答える
0

クリックした (TP) と関連データ (TP + FN) だけで、 Recall を計算する手段がありますが、 Precision は計算できません。FP 値を示すデータセットがありません。

于 2015-01-28T10:00:52.070 に答える