Hypothesetoetsen en z-scores

Hypothesetoetsen in Python

James Chapman

Curriculum Manager, DataCamp

A/B-testen

  • In 2013 bracht Electronic Arts (EA) SimCity 5 uit
  • Ze wilden het aantal pre-orders verhogen
  • Ze gebruikten A/B-testen om advertenties te vergelijken
  • Daarbij splits je gebruikers in controle- en behandelingsgroep

Gebouw van Electronic Arts

1 Beeldcredits: "Electronic Arts" door majaX1 CC BY-NC-SA 2.0
Hypothesetoetsen in Python

A/B-test op retailwebpagina

Controle:

SimCity-webpagina met banner "pre-order en krijg $20 korting op je volgende aankoop"

Behandeling:

SimCity-webpagina zonder banner

Hypothesetoetsen in Python

A/B-testresultaten

  • De behandelingsgroep (geen advertentie) deed 43,4% meer aankopen dan de controlegroep (met advertentie)
  • De intuïtie dat “een advertentie tonen de verkoop verhoogt” was onjuist
  • Was dit resultaat statistisch significant of toeval?
  • Daarvoor hebben we EA’s data nodig
  • Gebruik technieken uit Sampling in Python + deze cursus
Hypothesetoetsen in Python

Stack Overflow Developer Survey 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]
Hypothesetoetsen in Python

Hypothese over het gemiddelde

Een hypothese:

Het gemiddelde jaarsalaris van alle data scientists is $110.000

De puntschatting (steekproefstatistiek):

mean_comp_samp = stack_overflow['converted_comp'].mean()
119574.71738168952
Hypothesetoetsen in Python

Een bootstrapverdeling genereren

import numpy as np

# Stap 3. Herhaal stap 1 & 2 vaak en voeg toe aan een lijst so_boot_distn = [] for i in range(5000): so_boot_distn.append(
# Stap 2. Bereken puntschatting np.mean(
# Stap 1. Resample stack_overflow.sample(frac=1, replace=True)['converted_comp']
)
)
1 Bootstrapverdelingen worden behandeld in hoofdstuk 4 van Sampling in Python
Hypothesetoetsen in Python

De bootstrapverdeling visualiseren

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

Histogram van de bootstrapverdeling - klokvormig, ongeveer tussen 110000 en 140000

Hypothesetoetsen in Python

Standaardfout

std_error = np.std(so_boot_distn, ddof=1)
5607.997577378606
Hypothesetoetsen in Python

z-scores

$\text{gestandaardiseerde waarde} = \dfrac{\text{waarde} - \text{gemiddelde}}{\text{standaardafwijking}}$

$z = \dfrac{\text{steekproefstatistiek} - \text{gehyp. param.-waarde}}{\text{standaardfout}}$

Hypothesetoetsen in Python

$z = \dfrac{\text{steekproefstatistiek} - \text{gehyp. param.-waarde}}{\text{standaardfout}}$

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
Hypothesetoetsen in Python

De hypothese toetsen

  • Is 1,707 hoog of laag?
  • Dat is het doel van deze cursus!
Hypothesetoetsen in Python

De hypothese toetsen

  • Is 1,707 hoog of laag?
  • Dat is het doel van deze cursus!

 

Use case van hypothesetoetsen:

 

Bepalen of steekproefstatistieken dicht bij of ver van verwachte (of “gehypothetiseerde”) waarden liggen

Hypothesetoetsen in Python

Standaardnormale (z) verdeling

Standaardnormale verdeling: normale verdeling met gemiddelde = 0 en standaardafwijking = 1

Dichtheidsplot van de PDF voor de standaardnormale verdeling

Hypothesetoetsen in Python

Laten we oefenen!

Hypothesetoetsen in Python

Preparing Video For Download...