クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

適合率と再現率で検索を評価

このレッスンのあとで: 検索の結果から、適合率と再現率を計算し、その検索の良し悪しを言うことができる。

55分のレッスンコマンド1件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

良い検索かどうかは、数で言える

適合率と再現率は、検索の結果が良いかどうかを、数で表す2つの物差しです。適合率は「出てきたもののうち、当たりの割合」、再現率は「当たりのうち、見つかった割合」です。

検索が速くても、関係のない文書ばかり出れば役に立ちません。2つの数を見れば、どこが悪いか分かります。

このレッスンのゴール

メモ

検索の結果から、適合率と再現率を計算し、その検索の良し悪しを言うことができる。

キーワード

ことばいみれい
適合検索した人にとって、関係がある文書であること
適合率見つけた文書のうち、適合した文書の割合2 ÷ 4
再現率適合する全部のうち、見つけられた文書の割合2 ÷ 3
上位k件の適合率上から k 件だけを見たときの適合率
F値適合率と再現率を、1つにまとめた数

学生が入力するセルは、このプレビューでは空白です。

「関係がある」と決めるのは人

まず、人が、検索語に対して、関係がある文書に印をつけておきます。この「関係がある」ことを、適合と言います。

検索の結果と、この印を見比べて、数にします。お知らせ8枚で「電車の遅れ」を探し、3、4、7が適合だとします。

例: 検索の結果と、人がつけた印

順位見つけた文書適合か
13適合
25外れ
34適合
41外れ

学生が入力するセルは、このプレビューでは空白です。

適合率は正確さ、再現率は取りこぼしの少なさ

適合率は、見つけた文書のうち、適合した割合です。表では 2 ÷ 4 で 0.5 です。

再現率は、適合する全部のうち、見つけられた割合です。適合は全部で3枚あり、2枚を見つけたので、2 ÷ 3 で 0.667 です。

適合率と再現率を計算

コマンド
docker exec jupyter python3 -c "print(2 / 4, round(2 / 3, 3))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

当たりを数えて割る

コード: python
retrieved = [2, 6, 1]
relevant = [1, 2, 5, 9]
hits = 0
for number in retrieved:
    if number in relevant:
        hits = hits + 1
print("当たり:", hits)
print("適合率:", round(hits / len(retrieved), 3))
print("再現率:", round(hits / len(relevant), 3))
# retrieved に 5 と 9 を足して、2つの値がどう動くか見てください。

2つの数は、片方を上げるともう片方が下がる

8枚すべてを返せば、適合を取りこぼさないので、再現率は 1 です。でも、適合率は低くなります。

逆に、いちばん自信のある1枚だけを返せば、適合率は高くなります。でも、再現率は低くなります。そこで、2つをまとめたF値(2 × 適合率 × 再現率 ÷ (適合率 + 再現率))も使います。

例: 返し方による2つの数

返し方適合率再現率
8枚すべて3 ÷ 8 = 0.3753 ÷ 3 = 1.0
文書3の1枚だけ1 ÷ 1 = 1.01 ÷ 3 = 0.333
上の表の4枚2 ÷ 4 = 0.52 ÷ 3 = 0.667

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

適合率が高ければ、良い検索だと考えがちです。1枚しか返さなければ、適合率は 1 にできます。適合を取りこぼしていないか、再現率も必ず見てください。

さらに挑戦: 順位を考える

同じ2枚の当たりでも、1位と2位に並ぶ場合と、9位と10位に並ぶ場合があります。上位k件の適合率は、この違いを数にします。

precision_at_k を、k = 1、3、5 で呼び、変化を表にしてください。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。