Update anomalous score.

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

        Therefore, the new anomalous score of reviewer :math:`p` is as

        .. math::

           {\\rm anomalous}(r) = \\frac{
             \\sum_{p \\in P} {\\rm credibility}(p)|
                {\\rm review}(r, p)-{\\rm summary}(p)|
           }{
             \\sum_{p \\in P} {\\rm credibility}(p)
           }

        where :math:`P` is a set of products reviewed by reviewer :math:`p`,
        review(:math:`r`, :math:`p`) is the rating reviewer :math:`r` posted
        to product :math:`p`, summary(:math:`p`) and credibility(:math:`p`) are
        summary 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 a weighted average of differences
        between current summary and reviews. The weights come from credibilities.

        Therefore, the new anomalous score of reviewer :math:`p` is as

        .. math::

           {\\rm anomalous}(r) = \\frac{
             \\sum_{p \\in P} {\\rm credibility}(p)|
                {\\rm review}(r, p)-{\\rm summary}(p)|
           }{
             \\sum_{p \\in P} {\\rm credibility}(p)
           }

        where :math:`P` is a set of products reviewed by reviewer :math:`p`,
        review(:math:`r`, :math:`p`) is the rating reviewer :math:`r` posted
        to product :math:`p`, summary(:math:`p`) and credibility(:math:`p`) are
        summary and credibility of product :math:`p`, respectively.

        Returns:
          absolute difference between old anomalous score and updated one.
        """
        products = self._graph.retrieve_products(self)
        diffs = [
            p.summary.difference(self._graph.retrieve_review(self, p))
            for p in products
        ]

        old = self.anomalous_score
        try:
            self.anomalous_score = np.average(
                diffs, weights=list(map(self._credibility, products)))
        except ZeroDivisionError:
            self.anomalous_score = np.average(diffs)

        return abs(self.anomalous_score - old)