Files
2026-05-22 10:02:10 +02:00

50 lines
1.5 KiB
Python

from tqdm.auto import tqdm
from abc import ABC, abstractmethod
from typing import Dict, Any
class Explainer(ABC):
def __init__(self, model, recommendations, data):
self.model = model
self.recommendations = recommendations
self.dataset = data.dataset
self.num_items = data.num_item
self.num_users = data.num_user
self.users = self.dataset.groupby(by="userId")
def explain_recommendations(self):
explanations = []
with tqdm(
total=self.recommendations.shape[0], desc="Computing explanations: "
) as pbar:
for _, row in self.recommendations.iterrows():
explanations.append(
self.explain_recommendation_to_user(
int(row.userId), int(row.itemId)
)
)
pbar.update()
self.recommendations["explanations"] = explanations
return self.recommendations
def get_user_items(self, user_id):
"""
Items Ids rated by a user.
:param user_id: the user
:return: list
"""
return self.users.get_group(user_id).itemId.values
@abstractmethod
def explain_recommendation_to_user(
self, user_id: int, item_id: int
) -> Dict[str, Any]:
"""
Generates an explanation for a single user-item recommendation.
This method must be implemented by any subclass.
"""
raise NotImplementedError