Перевірка гіпотез і z-значення

Тестування гіпотез у Python

James Chapman

Curriculum Manager, DataCamp

A/B-тестування

  • 2013 року Electronic Arts (EA) випустила SimCity 5
  • Вони хотіли збільшити передзамовлення гри
  • Використали A/B-тестування для перевірки різних рекламних сценаріїв
  • Для цього користувачів ділять на групи control і treatment

Будівля Electronic Arts

1 Джерело зображення: «Electronic Arts» by majaX1 CC BY-NC-SA 2.0
Тестування гіпотез у Python

A/B-тест ритейл-сторінки

Control:

Сторінка SimCity з банером «pre-order and get $20 off your next purchase»

Treatment:

Сторінка SimCity без банера

Тестування гіпотез у Python

Результати A/B-тесту

  • Група treatment (без реклами) здійснила на 43,4% більше покупок, ніж control (з рекламою)
  • Інтуїція «показ реклами збільшить продажі» виявилася хибною
  • Чи є результат статистично значущим, чи це випадковість?
  • Потрібні дані EA, щоб це визначити
  • Використаємо методи з «Sampling in Python» + цього курсу
Тестування гіпотез у Python

Опитування розробників Stack Overflow 2020

import pandas as pd
print(stack_overflow)
      respondent  age_1st_code  ...   age  hobbyist
0           36.0          30.0  ...  34.0       Yes
1           47.0          10.0  ...  53.0       Yes
2           69.0          12.0  ...  25.0       Yes
3          125.0          30.0  ...  41.0       Yes
4          147.0          15.0  ...  28.0        No
...          ...           ...  ...   ...       ...
2259     62867.0          13.0  ...  33.0       Yes
2260     62882.0          13.0  ...  28.0       Yes

[2261 rows x 8 columns]
Тестування гіпотез у Python

Формулюємо гіпотезу про середнє

Гіпотеза:

Середня річна винагорода в генеральній сукупності дата-сайентів становить $110,000

Точкова оцінка (вибіркова статистика):

mean_comp_samp = stack_overflow['converted_comp'].mean()
119574.71738168952
Тестування гіпотез у Python

Генеруємо бутстрап-розподіл

import numpy as np

# Крок 3. Повторіть кроки 1 і 2 багато разів, додаючи до списку so_boot_distn = [] for i in range(5000): so_boot_distn.append(
# Крок 2. Обчисліть точкову оцінку np.mean(
# Крок 1. Повторна вибірка stack_overflow.sample(frac=1, replace=True)['converted_comp']
)
)
1 Бутстрап-розподіли розглядаються в розділі 4 курсу Sampling in Python
Тестування гіпотез у Python

Візуалізація бутстрап-розподілу

import matplotlib.pyplot as plt
plt.hist(so_boot_distn, bins=50)
plt.show()

Гістограма бутстрап-розподілу — має дзвоноподібну форму, приблизний діапазон 110000–140000

Тестування гіпотез у Python

Стандартна похибка

std_error = np.std(so_boot_distn, ddof=1)
5607.997577378606
Тестування гіпотез у Python

z-значення

$\text{standardized value} = \dfrac{\text{value} - \text{mean}}{\text{standard deviation}}$

$z = \dfrac{\text{sample stat} - \text{hypoth. param. value}}{\text{standard error}}$

Тестування гіпотез у Python

$z = \dfrac{\text{sample stat} - \text{hypoth. param. value}}{\text{standard error}}$

stack_overflow['converted_comp'].mean()
119574.71738168952
mean_comp_hyp = 110000
std_error
5607.997577378606
z_score = (mean_comp_samp - mean_comp_hyp) / std_error
1.7073326529796957
Тестування гіпотез у Python

Перевірка гіпотези

  • 1,707 — це велике чи мале число?
  • Це і є мета курсу!
Тестування гіпотез у Python

Перевірка гіпотези

  • 1,707 — це велике чи мале число?
  • Це і є мета курсу!

 

Приклад застосування перевірки гіпотез:

 

Визначити, чи вибіркові статистики близькі до очікуваних (або «гіпотезованих») значень чи ні

Тестування гіпотез у Python

Стандартний нормальний (z) розподіл

Стандартний нормальний розподіл: нормальний розподіл з mean = 0 + standard deviation = 1

Густинна крива PDF для стандартного нормального розподілу

Тестування гіпотез у Python

Давайте потренуємось!

Тестування гіпотез у Python

Preparing Video For Download...