def test_regular_score_types_1(self): self.assertEqual(PercentScore(0).norm_score, 0) self.assertEqual(PercentScore(100).norm_score, 1) score = PercentScore(42) self.assertRaises(InvalidScoreError, PercentScore, 101) self.assertRaises(InvalidScoreError, PercentScore, -1) self.assertEqual(str(score), "42.0%") self.assertEqual(score.norm_score, 0.42) self.assertEqual(1, ZScore(0.0).norm_score) self.assertEqual(0, ZScore(1e12).norm_score) self.assertEqual(0, ZScore(-1e12).norm_score) ZScore(0.7) score = ZScore.compute({"mean": 3.0, "std": 1.0}, {"value": 2.0}) self.assertIsInstance(ZScore.compute({"mean": 3.0}, {"value": 2.0}), InsufficientDataScore) self.assertIsInstance( ZScore.compute({ "mean": 3.0, "std": -1.0 }, {"value": 2.0}), InsufficientDataScore, ) self.assertIsInstance( ZScore.compute({ "mean": np.nan, "std": np.nan }, {"value": np.nan}), InsufficientDataScore, ) self.assertEqual(score.score, -1.0) self.assertEqual(1, CohenDScore(0.0).norm_score) self.assertEqual(0, CohenDScore(1e12).norm_score) self.assertEqual(0, CohenDScore(-1e12).norm_score) CohenDScore(-0.3) score = CohenDScore.compute({ "mean": 3.0, "std": 1.0 }, { "mean": 2.0, "std": 1.0 }) self.assertAlmostEqual(-0.707, score.score, 3) self.assertEqual("D = -0.71", str(score)) score = CohenDScore.compute({ "mean": 3.0, "std": 10.0, "n": 10 }, { "mean": 2.5, "std": 10.0, "n": 10 }) self.assertAlmostEqual(-0.05, score.score, 2)
def test_regular_score_types_1(self): score = PercentScore(42) self.assertEqual(score.sort_key,0.42) ZScore(0.7) score = ZScore.compute({'mean':3.,'std':1.},{'value':2.}) self.assertEqual(score.score,-1.) CohenDScore(-0.3) score = CohenDScore.compute({'mean':3.,'std':1.},{'mean':2.,'std':1.}) self.assertTrue(-0.708 < score.score < -0.707)
def compute(cls, observation, prediction): """ Computes a z-score from an observation and a prediction. """ scores = [] table = [] # store intermediate results for obs, pred in zip(observation, prediction): assert obs.keys() == pred.keys() assert len(obs) == 1 scores.append( ZScore.compute(list(obs.values())[0], list(pred.values())[0]).score) key = list(obs.keys())[0] table.append((key, obs[key]["mean"], obs[key]["std"], pred[key]["value"], scores[-1])) sc = np.sqrt(np.mean(np.square(scores))) print("RMS(Z) " + str(sc)) score = cls(sc, related_data={'score_table': table}) return score