In [1]:
# set the environment path to find reco
import sys
sys.path.append("../")
In [2]:
import numpy as np
import pandas as pd
In [3]:
df_true = pd.DataFrame(
        {
            "USER": [1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
            "ITEM": [1, 2, 3, 1, 4, 5, 6, 7, 2, 5, 6, 8, 9, 10, 11, 12, 13, 14],
            "RATING": [5, 4, 3, 5, 5, 3, 3, 1, 5, 5, 5, 4, 4, 3, 3, 3, 2, 1],
        }
    )

df_pred = pd.DataFrame(
    {
        "USER": [1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
        "ITEM": [3, 10, 12, 10, 3, 5, 11, 13, 4, 10, 7, 13, 1, 3, 5, 2, 11, 14],
        "RATING_PRED": [14, 13, 12, 14, 13, 12, 11, 10, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5]
    }
)
In [21]:
df_pred[df_pred.USER==3].head(1)
Out[21]:
USER ITEM RATING_PRED
8 3 4 14
In [22]:
df_true[df_true.USER==3]
Out[22]:
USER ITEM RATING
8 3 2 5
9 3 5 5
10 3 6 5
11 3 8 4
12 3 9 4
13 3 10 3
14 3 11 3
15 3 12 3
16 3 13 2
17 3 14 1
In [27]:
from reco.evaluate import precision_at_k, recall_at_k, ndcg_at_k
In [25]:
precision_at_k(df_true, df_pred, k=5)
Out[25]:
0.26666666666666666
In [26]:
recall_at_k(df_true, df_pred, k=1)
Out[26]:
0.1111111111111111
In [28]:
ndcg_at_k(df_true, df_pred, 5)
Out[28]:
0.3329711477455995
In [ ]: