Exemplo n.º 1
0
Arquivo: reo.py Projeto: kiminh/elliot
    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))
Exemplo n.º 2
0
    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))
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
    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))