<jupyter_start><jupyter_text>Анализ результатов AB тестирования  * проанализировать АБ  тест,  проведенный на реальных пользователях Яндекса* подтвердить или опровергнуть наличие изменений в пользовательском поведении между контрольной (control)  и тестовой (exp)  группами* определить характер этих изменений и практическую значимость вводимого изменения* понять, какая из пользовательских групп более всего проигрывает / выигрывает   от тестируемого изменения (локализовать изменение)  Задание 1 Основная метрика, на которой мы сосредоточимся в этой работе, — это количество пользовательских кликов на web-странице в зависимости от тестируемого изменения этой страницы. Посчитайте, насколько в группе exp больше пользовательских кликов по сравнению с группой control в процентах от числа кликов в контрольной группе.Полученный процент округлите  до третьего знака после точки.<jupyter_code>import pandas as pd
import numpy as np

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns

from scipy import stats
from statsmodels.sandbox.stats.multicomp import multipletests 
data = pd.read_csv('ab_browser_test.csv')
data.shape
data.head()
control = sum(data.loc[(data['slot'] == 'control')].n_clicks)
exp = sum(data.loc[(data['slot'] == 'exp')].n_clicks)*100 /control
exp-100<jupyter_output><empty_output><jupyter_text>Задание 2 Давайте попробуем посмотреть более внимательно на разницу между двумя группами (control и exp) относительно количества пользовательских кликов.Для этого постройте с помощью бутстрепа 95% доверительный интервал для средних значений и медиан количества кликов в каждой из двух групп.<jupyter_code>def get_bootstrap_samples(data, n_samples):
    indices = np.random.randint(0, len(data), (n_samples, len(data)))
    samples = data[indices]
    return samples
def stat_intervals(stat, alpha):
    boundaries = np.percentile(stat, [100 * alpha / 2., 100 * (1 - alpha / 2.)])
    return boundaries
data.loc[data.slot == 'exp'].n_clicks<jupyter_output><empty_output><jupyter_text>Задание 3 Поскольку данных достаточно много (порядка полумиллиона уникальных пользователей), отличие в несколько процентов может быть не только практически значимым, но и  значимым статистически. Последнее утверждение нуждается в дополнительной проверке. Посмотрите на выданные вам данные и выберите все верные варианты ответа относительно проверки гипотезы о равенстве среднего количества кликов в группах.<jupyter_code>plt.figure(figsize=(15,5))
plt.subplot(121)
plt.hist(data.loc[data.slot == 'exp'].n_clicks, bins=100, edgecolor='k')
plt.axvline(x=(data.loc[data.slot == 'exp'].n_clicks).mean(), ymin=0, ymax=175000, c='r')
plt.xlim(0, 175) 
plt.ylabel('Number of users')
plt.xlabel('Number of clicks')
plt.title('Experimental group')

plt.subplot(122)
plt.hist(data.loc[data.slot == 'control'].n_clicks, bins=100, edgecolor='k')
plt.axvline(x=(data.loc[data.slot == 'control'].n_clicks).mean(), ymin=0, ymax=175000, c='r')
plt.xlim(0, 175) 
plt.ylabel('Number of users')
plt.xlabel('Number of clicks')
plt.title('Control group')
plt.show()<jupyter_output><empty_output><jupyter_text>Задание 4 Одним из возможных аналогов t-критерия, которым можно воспрользоваться, является тест Манна-Уитни. На достаточно обширном классе распределений он является асимптотически более эффективным, чем t-критерий, и при этом не требует параметрических предположений о характере распределения.Разделите выборку на две части, соответствующие control  и exp группам. Преобразуйте данные к виду, чтобы каждому пользователю  соответствовало суммарное значение его кликов. С помощью критерия Манна-Уитни проверьте гипотезу о равенстве средних. Что можно сказать о получившемся значении достигаемого уровня значимости ?<jupyter_code>control = data.loc[(data['slot'] == 'control')][['userID', 'n_clicks']]
control.head()
exp = data.loc[(data['slot'] == 'exp')][['userID', 'n_clicks']]
exp.head()
stats.mannwhitneyu(exp, control, alternative='two-sided')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09786700125470514, 'fraction_numerical': 0.014805520702634882, 'mean_word_length': 6.606870229007634, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '20019', 'license': 'MIT', 'n_tokens_mistral': 1542, 'n_tokens_neox': 1744, 'n_words': 382, 'path': '4. Stats for Data Analysis/Final Tasks/AB-test/ab_ analysis_assignment.ipynb', 'repo_name': 'anafisa/ML_specialization', 'size': '3985'}