Skip to content

Instantly share code, notes, and snippets.

@gr33ndata
Last active February 19, 2018 14:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gr33ndata/f0723ab672d5d14ecdc5158edfe6aca0 to your computer and use it in GitHub Desktop.
Save gr33ndata/f0723ab672d5d14ecdc5158edfe6aca0 to your computer and use it in GitHub Desktop.
# Bayesian Analysis for A/B Experiment with binart goals
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
import pandas as pd
def bayesian_analysis(events_a, events_b, successes_a, successes_b,
prior_alpha=1.0, prior_beta=1.0, N=100000):
fails_a = events_a - successes_a
fails_b = events_b - successes_b
a_samples = beta(prior_alpha+successes_a, prior_beta+fails_a, N)
b_samples = beta(prior_alpha+successes_b, prior_beta+fails_b, N)
a_samples = pd.Series(a_samples)
b_samples = pd.Series(b_samples)
samples_diff = b_samples - a_samples
samples_diff_median = samples_diff.median()
fig, axs = plt.subplots(1, 2, figsize=(16,6))
pd.DataFrame(
{
'Posterior A': a_samples,
'Posterior B': b_samples,
}
).plot(
kind='hist',
bins=100,
alpha=0.5,
ax=axs[0]
)
samples_diff.plot(
kind='hist',
title='Diff B-A',
bins=100,
color='Gray',
ax=axs[1]
)
diff_vline_min, diff_vline_max = axs[1].get_ylim()
axs[1].plot(
(samples_diff_median, samples_diff_median),
(diff_vline_min, diff_vline_max),
'Black',
alpha=0.5,
)
axs[1].plot(
(0, 0),
(diff_vline_min, diff_vline_max),
'Red',
alpha=0.5,
)
print(
'Credibility of B > A: {}%'.format(
(
100 * ((b_samples - a_samples) > 0).mean()
).round(2)
)
)
print(
'Credibility of A > B: {}%'.format(
(
100 * ((a_samples - b_samples) > 0).mean()
).round(2)
)
)
print(
'Differnece (B-A) Median {}%'.format(
round(100 * samples_diff_median, 2)
)
)
fig.show()
return (a_samples, b_samples)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment