def process(self): """ Evaluation function :return: the overall value of Ranking-based Equal Opportunity (REO) """ for u, u_r in self._recommendations.items(): if len(self._relevance.get_user_rel(u)): self.__user_pop_reo(u_r, set(self._train[u].keys()), self._cutoff, set(self._relevance.get_user_rel(u))) PR = self._num / self._den self._metric_objs_list = [] for i_category in range(self._item_n_clusters): self._metric_objs_list.append( ProxyMetric( name= f"REO-ProbToBeRanked_items:{self._item_clustering_name}-{i_category}", val=PR[i_category], needs_full_recommendations=False)) # Overall REO self._metric_objs_list.append( ProxyMetric(name=f"REO_items:{self._item_clustering_name}", val=np.std(PR) / np.mean(PR), needs_full_recommendations=False))
def process(self): """ Evaluation function :return: the overall value of Bias Disparity - Bias Source """ for u, u_train in self._train.items(): self.__item_bias_disparity_bs(u, u_train) clustering_count = Counter(self._item_clustering.values()) PC = np.array([ clustering_count.get(c, 0) / len(self._item_clustering) if self._item_clustering else 1 for c in range(self._item_n_clusters) ]) self._BS = ((self._category_sum.T / self._total_sum).T) / PC self._metric_objs_list = [] for u_group in range(self._user_n_clusters): for i_category in range(self._item_n_clusters): self._metric_objs_list.append( ProxyMetric( name= f"BiasDisparityBS_users:{self._user_clustering_name}-{u_group}_items:{self._item_clustering_name}-{i_category}", val=self._BS[u_group, i_category], needs_full_recommendations=False))
def process(self): """ Evaluation function :return: the overall value of Ranking-based Statistical Parity (RSP) """ for u, u_r in self._recommendations.items(): self.__user_pop_rsp(u_r, set(self._train[u].keys()), self._cutoff) PR = self._num / self._den self._metric_objs_list = [] for i_category in range(self._item_n_clusters): self._metric_objs_list.append( ProxyMetric( name= f"RSP-ProbToBeRanked_items:{self._item_clustering_name}-{i_category}", val=PR[i_category], needs_full_recommendations=False)) # Overall RSP self._metric_objs_list.append( ProxyMetric(name=f"RSP_items:{self._item_clustering_name}", val=np.std(PR) / np.mean(PR), needs_full_recommendations=False))
def process(self): """ Evaluation function :return: the overall value of Bias Disparity """ BR = BiasDisparityBR(self._recommendations, self._config, self._params, self._evaluation_objects, self._additional_data).get_BR() BS = BiasDisparityBS(self._recommendations, self._config, self._params, self._evaluation_objects, self._additional_data).get_BS() BD = (BR - BS) / BS self._metric_objs_list = [] for u_group in range(self._user_n_clusters): for i_category in range(self._item_n_clusters): self._metric_objs_list.append( ProxyMetric( name= f"BiasDisparityBD_users:{self._user_clustering_name}-{u_group}_items:{self._item_clustering_name}-{i_category}", val=BD[u_group, i_category], needs_full_recommendations=False))