混同される推奨システムのパフォーマンス指標🥱

5733 ワード

Hit rate at k


≪合計ユーザー|Total Users|ldap≫の予測に成功したユーザー数
Hit@ℓ=1m∑u∈U1(ranku,gu<=ℓ)\text{Hit}@\ell =\frac{1}{m}\sum_{u\in\mathcal{U}}\textbf{1}(rank_{u, g_u} <=\ell)Hit@ℓ=m1​∑u∈U​1(ranku,gu​​<=ℓ)

mmm:ユーザ総数
lll:カットオフ条件
uuu:特定のユーザー
rank,gurank{u,g u}ranku,gu:地上実物(gug ugu)のユーザuuuuのrank
  • ユーザー1人につき1つのアイテムを購入した後、
  • を削除します.
  • モデル学習後予測
  • の予測結果を組み合わせた後、上のl個の中に落ちたものがあれば+1となり、それを全プレイヤー数に分ける.
  • AUC(D2L Ver.)


    AUC=1m∑u∈U1∣I\Su∣∑j∈I\Su1(ranku,guI\mathcal{I}I : item set
    SuS_uSu​ : candidate items of user uuu
    ranku,gurank_{u, g_u}ranku,gu​​ : ranking of the ground truth item gug_ugu​of user uuu(ideal ranking is 1)
    def hit_and_auc(rankedlist, test_matrix, k):
        hits_k = [(idx, val) for idx, val in enumerate(rankedlist[:k])
                  if val in set(test_matrix)]
        hits_all = [(idx, val) for idx, val in enumerate(rankedlist)
                    if val in set(test_matrix)]
        max = len(rankedlist) - 1
        auc = 1.0 * (max - hits_all[0][0]) / max if len(hits_all) > 0 else 0
        return len(hits_k), auc
    各プレイヤーhit,aucの関数
    rankedlist:1人のプレイヤーのテストデータの推奨結果をソートする
    test matrix:test set itemリスト
    auc=(1人のプレイヤーの購入アイテム総数-ヒットアイテムの最高順位)/(1人のプレイヤーの購入アイテム総数)
    上の式とコードがどのように組み合わせられているのかまだ分かりません.
    似たような脈絡で疑問のあるコメントに対する回答は以下の通りである.
    Moreover, in the hit_and_auc function we try to find whether the item the net “recommend” is in the top-k list or what’s the rank of that “recommendation” in the hits_al list(which is sorted by the score given by the net),which is corresponding to the way we calculate the AUC ( find out how many false recommendations rank before the ground truth )
    GTのrankよりも高いランクでどれだけ間違ったものを推薦するかを把握する上で、脈々と受け継がれているようです.
    上のAUC計算法はこの教材でAUCと名付けられています.厳密な意味で広く使われているAUCとは性格が違うようです.

    元のAUC定義によるrecsys AUC



    1人のプレイヤーにtop-20個のアイテムを推薦し、train set 80%、test set 20%を設定した後
    80%のデータで学習後、20%のテストセットを購入するかどうかを予測します.
    実際に購入した場合は、TPをお勧めします
    実際に購入していなければ、お勧めもなく、TN
    実際に購入しましたが、お勧めがなければFN
    実際に購入していないのですが、オススメならFP
    これによりFPR、TPRが得られる.これで、top-NでNを変更してグラフを描画すると、ROC-Curveが得られます.
    リファレンス
    1
    2