in spotify_confidence/analysis/bayesian/bayesian_models.py [0:0]
def _differences(self, difference_posterior, level_1, level_2, absolute):
# 95% credible interval for posterior
credible_interval = (
pd.Series(difference_posterior).quantile((1.0 - self._interval_size) / 2),
pd.Series(difference_posterior).quantile((1.0 - self._interval_size) / 2 + self._interval_size),
)
# Probability that posterior is greater
# than zero (count occurences in the MC sample)
p_gt_zero = (difference_posterior > 0).mean()
expected_loss_v2 = difference_posterior[difference_posterior < 0].sum() / len(difference_posterior)
if (difference_posterior > 0).sum() == 0:
expected_gain_v2 = 0
else:
expected_gain_v2 = difference_posterior[difference_posterior > 0].sum() / len(difference_posterior)
expected_loss_v1 = (difference_posterior[difference_posterior * -1.0 < 0] * -1.0).sum() / len(
difference_posterior
)
if (difference_posterior * -1.0 > 0).sum() == 0:
expected_gain_v1 = 0
else:
expected_gain_v1 = (difference_posterior[difference_posterior * -1.0 > 0] * -1.0).sum() / len(
difference_posterior
)
return pd.DataFrame(
OrderedDict(
[
("level_1", str(level_1)),
("level_2", str(level_2)),
("absolute_difference", absolute),
("difference", difference_posterior.mean()),
("ci_lower", [credible_interval[0]]),
("ci_upper", [credible_interval[1]]),
("P(level_2 > level_1)", p_gt_zero),
("level_1 potential loss", expected_loss_v1),
("level_1 potential gain", expected_gain_v1),
("level_2 potential loss", expected_loss_v2),
("level_2 potential gain", expected_gain_v2),
]
)
)