В этом модуле вы узнаете, что такое статистический критерий, как его выбрать, и как он поможет выявить сходство и различие между выборками; как с помощью библиотеки Pandas конфигурировать выборки и накладывать условия. Внутри модуля — пошаговый алгоритм работы с инструментом.
Самое сложное уже позади. Осталось использовать нужные статистические критерии на практике.
К счастью, многое уже сделано за нас. Работая с данными в Python, вы в 99,9% случаях будете использовать библиотеку pandas и ее инструмент представления таблиц dataframe. Для начала импортируйте библиотеку и считайте данные из файла.
import pandas as pd
data = pd.read_csv('my_test_data.csv') #в скобках нужно указать путь к файлу
Вы можете просмотреть данные и убедиться, что все правильно считалось, с помощью функции head(n) — она покажет первые n строк таблицы.
data.head(10)
Вы можете обратиться к отдельной колонке таблицы с помощью квадратных скобок.
data['Название_колонки']
Вы также можете просмотреть данные, которые соответствуют определенному условию.
data[data['Группа_теста']=='B']
Необходимые критерии вы найдете в библиотеках scipy и statsmodels. Если вам понадобится критерий, которого там нет, скорее всего его уже кто-то реализовал и нужно всего лишь найти другую библиотеку. Например, есть хорошая реализация метода bootstrap.
Реализации разных критериев:
t-критерий Стьюдента, код на Python
import scipy.stats as stats
alpha = 0.05
t_statistic, p = stats.ttest_ind(data[data['Группа_теста']=='A'].metric,
data[data['Группа_теста']=='B'].metric,
equal_var = False)
print('Нулевая гипотеза о равенстве средних {}отклоняется на уровне значимости {}, поскольку p-value = {:f}'.format('не ' if p > alpha else '', 1-alpha, p))
Критерий хи-квадрат, код на Python
from scipy.stats import chi2_contingency
chi, p, dof, exp = chi2_contingency([data.groupby('Группа_теста').paid.sum(),
data.groupby('Группа_теста').user_id.count() - data.groupby('Группа_теста').paid.sum()])
#paid - колонка, в которой 1 стоит для заплативших пользователей и 0 для не заплативших
print('Разница между группами {}значимая на уровне значимости {}, поскольку p-value = {:f}'.format('не ' if p > alpha else '', 1-alpha, p))
Bootstrap, код на Python
!pip install bootstrapped
import bootstrapped.bootstrap as bs
import bootstrapped.stats_functions as bs_stats
import bootstrapped.compare_functions as bs_compare
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
boot = bs.bootstrap_ab(data[data['Группа_теста']=='A'].metrics.values,
data[data['Группа_теста']=='B'].metrics.values,
bs_stats.mean, bs_compare.difference,
num_threads = -1,
return_distribution = True)
plt.hist(boot, bins = 30)
plt.axvline(x = np.percentile(boot, 2.5), color='grey', linestyle='--', linewidth = 3)
plt.axvline(x = np.percentile(boot, 97.5), color='grey', linestyle='--', linewidth = 3)
plt.axvline(x = 0, color='blue', linestyle='--', linewidth = 3)
plt.show(
Еще раз зафиксируем порядок действий:
- Считываем данные из дата-сета, в котором хранятся наблюдения из нашего A/B-теста.
- Подключаем библиотеку с реализацией выбранного нами статистического критерия.
- Запускаем расчет и выводим результат проверки на экран.
- Результаты A/B-теста готовы, вы великолепны!