29 lines
1.0 KiB
Python
29 lines
1.0 KiB
Python
from .explainer import Explainer
|
|
|
|
|
|
class EMFExplainer(Explainer):
|
|
def __init__(self, model, recommendations, data):
|
|
super(EMFExplainer, self).__init__(model, recommendations, data)
|
|
|
|
def explain_recommendation_to_user(self, user_id: int, item_id: int):
|
|
"""
|
|
Measuring the contribution of each item to the recommendation.
|
|
:param user_id:
|
|
:param item_id: recommendation
|
|
:return: returns a dataframe with the contribution to the recommendation of each previously interacted with item.
|
|
"""
|
|
|
|
ratings_on_item = self.dataset[self.dataset.itemId == item_id]
|
|
similar_users = self.model.sim_users[user_id]
|
|
similar_users_ratings_on_item = ratings_on_item[
|
|
ratings_on_item.userId.isin(similar_users)
|
|
]
|
|
|
|
explanation_df = similar_users_ratings_on_item.groupby(by="rating").count()
|
|
explanation = {}
|
|
|
|
for index, row in explanation_df.iterrows():
|
|
explanation[index] = row[0]
|
|
|
|
return explanation
|