packages = ["numpy", "scipy"]
def get_data():
import numpy as np
from scipy import stats as st
# Меняем тип данных
distribution = str(Element("distribution").element.value)
alternative = str(Element("alternative").element.value)
ratio = float(Element("ratio").element.value)
power = float(Element("power").element.value)
alpha = float(Element("alpha").element.value)
lift = float(Element("lift").element.value)
hist_value = float(Element("hist_value").element.value)
dispersion = float(Element("dispersion").element.value)
z_beta = st.norm.ppf(1 - power) # Считаем z_beta, она для всех одинаковая
mde = lift * hist_value # считаем MDE
# Считаем z_alpha, она меняется в зависимости от альтернативы
if alternative.lower() == 'двусторонняя':
z_alpha = st.norm.ppf(alpha / 2)
elif alternative.lower() == 'односторонняя':
z_alpha = st.norm.ppf(alpha)
#print(distribution,alternative,ratio,power,alpha,lift,p0,dispersion,hist_value)
# Считаем размер меньшей (тестовой) выборки, если распределение небинарное
if distribution.lower() == 'небинарное':
n_little = round(((ratio + 1) / ratio) * ((dispersion * (z_beta + z_alpha)**2) / mde**2))
interpretation = ' При таком размере выборок и дисперсии не больше заданной, в случае отклонения на MDE (lift * базовое значение метрики), вероятность отвергнуть гипотезу не меньше заданной мощности.'
# Считаем размер меньшей (тестовой) выборки, если распределение бинарное
elif distribution.lower() == 'бинарное':
n_little = round(((ratio + 1) / ratio) * ((hist_value * (1 - hist_value) * (z_beta + z_alpha)**2) / mde**2))
interpretation = ' При таком размере выборок, в случае отклонения на MDE (lift * p0), вероятность отвергнуть гипотезу не меньше заданной мощности.'
n_big = round(n_little * ratio) # Считаем размер большей выборки (контрольной)
total = n_little + n_big # Считаем общий размер
Element('control-group').write(n_big)
Element('test-group').write(n_little)
Element('total').write(total)
Element('interpretation').write(interpretation)