仮説検定とzスコア

Pythonで学ぶ仮説検定

James Chapman

Curriculum Manager, DataCamp

A/Bテスト

  • 2013年、Electronic Arts(EA)はSimCity 5をリリース
  • ゲームの予約注文数を増やすことを目指した
  • 異なる広告シナリオをA/Bテストで検証
  • ユーザーをコントロール群とトリートメント群に分割

Electronic Artsのビル

1 画像クレジット: "Electronic Arts" by majaX1 CC BY-NC-SA 2.0
Pythonで学ぶ仮説検定

小売ウェブページのA/Bテスト

コントロール群:

「予約注文で次回購入が$20オフ」というバナーが表示されたSimCityのウェブページ

トリートメント群:

バナーなしのSimCityのウェブページ

Pythonで学ぶ仮説検定

A/Bテストの結果

  • トリートメント群(広告なし)の購入数はコントロール群(広告あり)より43.4%多かった
  • 「広告を表示すれば売上が増える」という直感は誤りだった
  • この結果は統計的に有意か、それとも偶然か?
  • 判断には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

# Step 3. Repeat steps 1 & 2 many times, appending to a list so_boot_distn = [] for i in range(5000): so_boot_distn.append(
# Step 2. Calculate point estimate np.mean(
# Step 1. Resample stack_overflow.sample(frac=1, replace=True)['converted_comp']
)
)
1 ブートストラップ分布は「Sampling in Python」第4章で解説されています
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{標準化値} = \dfrac{\text{値} - \text{平均}}{\text{標準偏差}}$

$z = \dfrac{\text{標本統計量} - \text{仮説パラメータ値}}{\text{標準誤差}}$

Pythonで学ぶ仮説検定

$z = \dfrac{\text{標本統計量} - \text{仮説パラメータ値}}{\text{標準誤差}}$

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)分布

標準正規分布平均 = 0標準偏差 = 1 の正規分布

標準正規分布のPDFの密度プロット

Pythonで学ぶ仮説検定

練習しましょう!

Pythonで学ぶ仮説検定

Preparing Video For Download...