Skip to content

Commit be3953a

Browse files
authored
Diversity Metrics in Benchmark (#23)
1 parent b5b175d commit be3953a

4 files changed

Lines changed: 32 additions & 4 deletions

File tree

‎CHANGELOG.txt‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ Major:
1010
- Updated requirements to use mabwiser>=2.7 to benefit from enhancements,
1111
including vectorized predict for Linear policies and tracking of arm status.
1212
- Fixed tests due to changes in random seeding for Linear policies.
13+
Minor:
14+
- Added Diversity metrics to available MAB evaluation metrics.
1315

1416
-------------------------------------------------------------------------------
1517
August, 16, 2022 1.0.3

‎mab2rec/_version.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
__author__ = "FMR LLC"
66
__email__ = "opensource@fmr.com"
7-
__version__ = "1.0.3"
7+
__version__ = "1.1.0"
88
__copyright__ = "Copyright (C), FMR LLC"

‎mab2rec/pipeline.py‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import numpy as np
1111
import pandas as pd
12-
from jurity.recommenders import CombinedMetrics, BinaryRecoMetrics, RankingRecoMetrics
12+
from jurity.recommenders import CombinedMetrics, BinaryRecoMetrics, RankingRecoMetrics, DiversityRecoMetrics
1313
from sklearn.model_selection import GroupKFold
1414
from mabwiser.utils import check_true, Arm
1515

@@ -620,8 +620,11 @@ def _validate_bench(recommenders, metrics, train_data, test_data, cv):
620620
RankingRecoMetrics.Precision,
621621
RankingRecoMetrics.Recall,
622622
RankingRecoMetrics.NDCG,
623-
RankingRecoMetrics.MAP)),
624-
TypeError("Evaluation metric values must be BinaryRecoMetrics or RankingRecoMetrics instances."))
623+
RankingRecoMetrics.MAP,
624+
DiversityRecoMetrics.InterListDiversity,
625+
DiversityRecoMetrics.IntraListDiversity)),
626+
TypeError("Evaluation metric values must be BinaryRecoMetrics, RankingRecoMetrics, "
627+
"or DiversityRecoMetrics instances."))
625628

626629
# Train/test data
627630
check_true(train_data is not None, ValueError("Train data cannot be none."))

‎tests/test_pipeline.py‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import pandas as pd
1212
from mabwiser.linear import _Linear
13+
from jurity.recommenders import DiversityRecoMetrics
1314

1415
from mab2rec import BanditRecommender, LearningPolicy, NeighborhoodPolicy
1516
from mab2rec.pipeline import train, score, benchmark
@@ -390,3 +391,25 @@ def test_benchmark_cv(self):
390391

391392
for rec in recommenders.values():
392393
self.assertTrue(rec.mab is None)
394+
395+
def test_benchmark_diversity_metrics(self):
396+
recommenders = deepcopy(self.recommenders)
397+
metrics = []
398+
metric_params = {'click_column': Constants.score,
399+
'user_id_column': Constants.user_id,
400+
'item_id_column': Constants.item_id}
401+
for k in [3, 5]:
402+
metrics.append(DiversityRecoMetrics.InterListDiversity(**metric_params, k=k,
403+
user_sample_size=100))
404+
metrics.append(DiversityRecoMetrics.IntraListDiversity(**metric_params, k=k,
405+
user_sample_size=100,
406+
item_features=item_features_df))
407+
408+
recommendations, rec_metrics = benchmark(recommenders, metrics, train_data, test_data,
409+
user_features=user_features_df)
410+
self.assertEqual(recommendations.keys(), self.recommenders.keys())
411+
self.assertEqual(rec_metrics.keys(), self.recommenders.keys())
412+
self.assertAlmostEqual(rec_metrics["Random"]["Inter-List Diversity@3"], 0.9856228956228957)
413+
self.assertAlmostEqual(rec_metrics["Random"]["Inter-List Diversity@5"], 0.9749818181818182)
414+
self.assertAlmostEqual(rec_metrics["Random"]["Intra-List Diversity@3"], 0.7602157694547105)
415+
self.assertAlmostEqual(rec_metrics["Random"]["Intra-List Diversity@5"], 0.7547351779782561)

0 commit comments

Comments
 (0)