ユーザー セッションを含む 2 つのセットがあります。各セットは 2 つの列で構成されます:
- オンライン ショップで表示されたアイテムの
ID - オンライン ショップで購入されたアイテムの ID
1セットは列車用(最高の製品評価)に使用し、2セット目はテスト用に使用する必要があります。
購入したアイテムのすべての ID が異なります。
1. テスト セットで、閲覧 ID と購入 ID の頻度を計算します(1つ
の ID が閲覧アイテムで複数回発生する可能性があります)
。 2. 推奨の 2 つのアルゴリズムを実現
します。
- 閲覧 ID を購入ごとに並べ替えます (購入したアイテムで発生する頻度)
3. このアルゴリズムを使用して、AverageRecall@1、AveragePrecision@1、AverageRecall@5、AveragePrecision@5を計算する必要があります。
重要:
- ユーザーが何も購入しなかったセッション、品質評価のルール。
- アイテムがトレーニング セットに見つからない場合、そのアイテムの人気は 0
です。 - 別のアイテムを推奨する必要があります。また、その数は、ユーザーが閲覧したさまざまなアイテムの数を超えないようにする必要があります。
- レコメンデーションは、表示されたアイテムの数とリコール @ k / 精度 @ k の k の最小値よりも大きくなることはありません。
最初のタスク (頻度の計算) は、OrderedDict を使用して行います。2番目のタスクでは、関数を使用します:
def apk(viwed, bought, k=1):
if len(predicted)>k:
predicted = predicted[:k]
score = 0.0
num_hits = 0.0
for i,p in enumerate(bought):
if p in actual and p not in bought[:i]:
num_hits += 1.0
score += num_hits / (i+1.0)
if not viewed:
return 0.0
return score / min(len(viewed), k)
def mapk(actual, predicted, k=10):
return np.mean([apk(a,p,k) for a,p in zip(actual, predicted)])
しかし、3番目のタスク(kごとの平均リコールなど)の計算方法とOrderedDictの処理方法がわかりません。