Python Байесовский T-критерий вероятности переключается в зависимости от порядка испытаний - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь создать калькулятор байесовского T-теста (используя для справки «Байесовские методы для хакеров») и хочу убедиться, что мои интерпретации верны.

Например, если у меня есть 10000 выборок для контрольной, контрольной и контрольной, преобразованной 500 и контрольной, преобразованной 700. Затем я ввожу вероятность увеличения на 50% и 35% и получаю 11,16% и 73,86% соответственно.

Если я затем переключу контроль и протестирую и попытаюсь найти вероятность -33% и -26%, я получу 1 минус то, что у меня было в первом примере. Это связано с хвостами распределения? Кто-нибудь возражал бы объяснить мне правильный способ интерпретации этого?

from scipy.stats import beta
import numpy as np
from matplotlib import pyplot as plt

visitors_to_B = int(input('Enter number of visitors to the Control: '))
conversions_from_B = int(input('Enter number of conversions from the Control: '))
visitors_to_A = int(input('Enter number of visitors to test A: '))
conversions_from_A = int(input('Enter number of conversions from test A: '))

alpha_prior = 1
beta_prior =1

posterior_A = beta(alpha_prior + conversions_from_A,
                   beta_prior + visitors_to_A - conversions_from_A)
posterior_B = beta(alpha_prior + conversions_from_B,
                   beta_prior + visitors_to_B - conversions_from_B)

samples = 20000
samples_posterior_A = posterior_A.rvs(samples)
samples_posterior_B = posterior_B.rvs(samples)

print('There is a',round((samples_posterior_A > samples_posterior_B).mean()*100,2), '% chance that test A converts better than the control')

def relative_increase(a,b):
    return (a-b)/b

posterior_rel_increase = relative_increase(samples_posterior_A,
                                           samples_posterior_B)

inc1 = float(input('(1 of 2) What relative percent increase from test A to the control do you want to test? '))/100
inc2 = float(input('(2 of 2) What relative percent increase from test A to the control do you want to test? '))/100
print('There is a ',round((posterior_rel_increase > inc1).mean()*100,2), '% chance that test A has a ', round(inc1*100,2),'% relative increase than the control')
print('There is a ',round((posterior_rel_increase > inc2).mean()*100,2), '% chance that test A has a ', round(inc2*100,2),'% relative increase than the control')

input('Press Enter to close')
...