ヒット率(Hit Rate)

Eval

ヒット率(Hit Rate)

作成日: 最終更新: 読了時間: 1 分
まとめ
  • Hit Rate は上位候補に少なくとも 1 つ正解が含まれる割合を測る指標です。
  • ユーザーごとの候補リストから Hit Rate@k を算出し、網羅性を評価します。
  • Recall や Precision と併用する際の注意点や利用シーンを整理します。

1. 定義 #

クエリごとの正解集合を \(G_q\)、上位 k の候補集合を \(S_{q,k}\) とすると、 $$ \mathrm{HR@k} = \frac{1}{Q} \sum_{q=1}^Q \mathbf{1}{ G_q \cap S_{q,k} \ne \emptyset } $$ 少なくとも 1 件ヒットしていれば 1、なければ 0 として平均を取ります。


2. Python で計算 #

import numpy as np

def hit_rate_at_k(y_true: np.ndarray, y_score: np.ndarray, k: int) -> float:
    """上位 k 件内に少なくとも 1 件の正例があるかどうかを返す。

    Args:
        y_true: 正例を 1 とするラベル配列。
        y_score: モデルが出力したスコア配列。
        k: 上位何件を見るか。

    Returns:
        ヒットした場合は 1.0、該当なしの場合は 0.0。
    """
    idx = np.argsort(-y_score)[:k]
    return 1.0 if y_true[idx].sum() > 0 else 0.0

hits = [hit_rate_at_k(y_true[q], y_score[q], k=10) for q in range(len(queries))]

hr_at_10 = np.mean(hits)

print("Hit Rate@10:", round(hr_at_10, 3))

複数クエリ(ユーザー)がある場合は平均を取ります。実装は Recall@k と似ていますが、ヒットの有無だけに注目する点が異なります。


3. 利点 #

  • 直感的:ユーザーの何%にヒットしたかをそのまま説明できる。
  • Recall@k より寛容:複数正解があっても 1 件ヒットすればカバーしたと見なす。
  • 早期評価:最初の改善方向を探るためのラフな指標として使いやすい。

4. 実務での活用 #

  • 推薦システム:ユーザーがクリックしたアイテムを候補に含められた割合を把握。

  • E コマース:人気商品やパーソナライズされた商品が候補に入っているかを確認。

  • A/B テスト:オンライン試験に入る前に、オフラインで HR@k の改善を目安にモデルを絞り込む。


5. 他指標との併用 #

指標特徴一緒に見ると良い理由
Hit Rateユーザー単位のヒット有無簡潔だが網羅性は分からない
Recall@k正解数 / 正解総数正解が複数ある場合の網羅性を把握
Precision@k候補の純度ヒット率が高くてもノイズが多い可能性を確認
NDCG順位の質ヒットした正解が上位にあるかを確認

まとめ #

  • Hit Rate はユーザーごとに候補リスト内へ正解が入ったかを評価するシンプルな指標。

  • Recall@k や NDCG と組み合わせることで、網羅性や順位の質も把握できる。

  • 初期分析や KPI として扱いやすく、ビジネス側への説明にも向いている。