calc_metrics
- rectools.metrics.scoring.calc_metrics(metrics: Dict[str, MetricAtK], reco: DataFrame, interactions: Optional[DataFrame] = None, prev_interactions: Optional[DataFrame] = None, catalog: Optional[Collection[Union[str, int]]] = None) Dict[str, float] [source]
Calculate metrics.
- Parameters
metrics (dict(str -> Metric)) – Dict of metric objects to calculate, where key is metric name and value is metric object.
reco (pd.DataFrame) – Recommendations table with columns Columns.User, Columns.Item, Columns.Rank.
interactions (pd.DataFrame, optional) – Interactions table with columns Columns.User, Columns.Item. Obligatory only for some types of metrics.
prev_interactions (pd.DataFrame) – Table with previous user-item interactions, with columns Columns.User, Columns.Item. Obligatory only for some types of metrics.
catalog (collection, optional) – Collection of unique item ids that could be used for recommendations. Obligatory only if ClassificationMetric or SerendipityMetric instances present in metrics.
- Returns
Dictionary where keys are the same with keys in metrics and values are metric calculation results.
- Return type
dict(str->float)
- Raises
ValueError – If obligatory argument for some metric not set.
Examples
>>> from rectools import Columns >>> from rectools.metrics import Accuracy, NDCG >>> reco = pd.DataFrame( ... { ... Columns.User: [1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4], ... Columns.Item: [7, 8, 1, 2, 1, 2, 3, 4, 1, 2, 3], ... Columns.Rank: [1, 2, 1, 2, 1, 2, 3, 4, 1, 2, 3], ... } ... ) >>> interactions = pd.DataFrame( ... { ... Columns.User: [1, 1, 2, 3, 3, 3, 4, 4, 4], ... Columns.Item: [1, 2, 1, 1, 3, 4, 1, 2, 3], ... Columns.Datetime: [1, 1, 1, 1, 1, 2, 2, 2, 2], ... } ... ) >>> split_dt = 2 >>> df_train = interactions.loc[interactions[Columns.Datetime] < split_dt] >>> df_test = interactions.loc[interactions[Columns.Datetime] >= split_dt] >>> metrics = { ... 'ndcg@1': NDCG(k=1), ... 'accuracy@1': Accuracy(k=1) ... } >>> calc_metrics( ... metrics, ... reco=reco, ... interactions=df_test, ... prev_interactions=df_train, ... catalog=df_train[Columns.Item].unique() ... ) {'accuracy@1': 0.3333333333333333, 'ndcg@1': 0.5}