Update anomalous score.

        New anomalous score is the summation of weighted differences
        between current summary and reviews. The weights come from credibilities.

        Therefore, the new anomalous score is defined as

        .. math::

            {\\rm anomalous}(r)
            = \\sum_{p \\in P} \\mbox{review}(p) \\times \\mbox{credibility}(p) - 0.5

        where :math:`P` is a set of products reviewed by this reviewer,
        review(:math:`p`) and credibility(:math:`p`) are
        review and credibility of product :math:`p`, respectively.

        Returns:
          absolute difference between old anomalous score and updated one.

def update_anomalous_score(self):
        """Update anomalous score.

        New anomalous score is the summation of weighted differences
        between current summary and reviews. The weights come from credibilities.

        Therefore, the new anomalous score is defined as

        .. math::

            {\\rm anomalous}(r)
            = \\sum_{p \\in P} \\mbox{review}(p) \\times \\mbox{credibility}(p) - 0.5

        where :math:`P` is a set of products reviewed by this reviewer,
        review(:math:`p`) and credibility(:math:`p`) are
        review and credibility of product :math:`p`, respectively.

        Returns:
          absolute difference between old anomalous score and updated one.
        """
        old = self.anomalous_score

        products = self._graph.retrieve_products(self)
        self.anomalous_score = sum(
            p.summary.difference(
                self._graph.retrieve_review(self, p)) * self._credibility(p) - 0.5
            for p in products
        )

        return abs(self.anomalous_score - old)