Data Science/Statistics

[python ํ†ต๊ณ„] ๋‹จ์ผ ๋ชจ์ง‘๋‹จ ํ‰๊ท  ๊ฐ€์„ค ๊ฒ€์ • (๋‹จ์ธก) - z-test Python ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ

์„ผํ„ฐ๋”” 2023. 6. 1. 12:59

๋ชจ์ง‘๋‹จ์ด ์ •๊ทœ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด, ๋‹จ์ผ ๋ชจ์ง‘๋‹จ ํ‰๊ท  ๊ฐ€์„ค ๊ฒ€์ •์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒ€์ •์€ z-test / t-test ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณดํ†ต ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ (์•ฝ N>30) z-test๋ฅผ ํ™œ์šฉํ•˜๊ณ , ์•„๋‹ ๊ฒฝ์šฐ t-test๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์š”.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” z-test ๋ฅผ Python์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

(์ „์ฒด ์ฝ”๋“œ๋Š” ๊ธ€์˜ ๋งˆ์ง€๋ง‰์„ ์ฐธ๊ณ ํ•˜์„ธ์š”~)


 

z-test ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๊ฐ€์„ค ์ˆ˜๋ฆฝ  ๋ฐ ์œ ์˜ ์ˆ˜์ค€ alpha ์„ค์ •

๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์ด 68๋ณด๋‹ค ํฐ์ง€ ํ™•์ธํ•˜๊ณ ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. 

๊ทธ๋Ÿด ๊ฒฝ์šฐ ๊ท€๋ฌด๊ฐ€์„ค๊ณผ ๋Œ€๋ฆฝ๊ฐ€์„ค์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

## ๊ฐ€์„ค ์ˆ˜๋ฆฝ
# ๊ท€๋ฌด๊ฐ€์„ค : ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์€ 68์ด๋‹ค. 
# ๋Œ€๋ฆฝ๊ฐ€์„ค : ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์€ 68๋ณด๋‹ค ํฌ๋‹ค. 
mu_h0 = 68
alpha = 0.05

์œ ์˜ ์ˆ˜์ค€์€ 0.05๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. 


2. ๋ชจ์ง‘๋‹จ์—์„œ ํ‘œ๋ณธ์„ ์ถ”์ถœํ•˜์—ฌ, ํ†ต๊ณ„๋Ÿ‰ z ๊ฐ’ ์‚ฐ์ถœ

 - ์ž„์˜๋กœ ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ์…‹์„ ์ƒ์„ฑํ–ˆ์œผ๋‚˜, ์‹ค์ œ๋กœ๋Š” ๊ฒ€์ •์„ ์ง„ํ–‰ํ•  ํ…Œ์ŠคํŠธ์…‹์„ ํ™œ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

   (์ž„์˜์˜ ๋ฐ์ดํ„ฐ์…‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์‹ค์ œ๋กœ ๋ชจํ‰๊ท ๊ณผ ๋ชจ๋ถ„์‚ฐ์€ ๋ชจ๋ฅด๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค.)

 -  ํ‘œ๋ณธ ํ‰๊ท ๊ณผ ํ‘œ๋ณธ ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ ์ด์šฉํ•ด, z-value ๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค. 

## ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ 
# ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
x = np.random.normal(68.5, 1, 100)

# ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ
mu = np.mean(x)
sigma = np.std(x, ddof=1)
n = len(x)

# z-value ๊ณ„์‚ฐ
z = (mu-mu_h0)/(sigma/math.sqrt(n))

3. ๊ท€๋ฌด๊ฐ€์„ค์ด ์ฐธ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ์˜ ๋ถ„ํฌ์—์„œ P-value ๊ณ„์‚ฐ 

(์ž‘์€ ๊ฒฝ์šฐ๋ฅผ ๊ฒ€์ •ํ•˜๊ณ ์‹ถ๋‹ค๋ฉด, cdf ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.)

# p-value ๊ณ„์‚ฐ
p = 1- stats.norm.cdf(z, 0, 1)


4. ๊ท€๋ฌด๊ฐ€์„ค ์ฑ„ํƒ ์—ฌ๋ถ€ ๊ฒฐ์ •

p-value๊ฐ€ ์œ ์˜์ˆ˜์ค€๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, ๊ท€๋ฌด๊ฐ€์„ค์„ ๊ธฐ๊ฐํ•˜๊ณ  ๋Œ€๋ฆฝ๊ฐ€์„ค์„ ์ฑ„ํƒํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ, ๊ท€๋ฌด๊ฐ€์„ค์„ ๊ธฐ๊ฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.  


[์ „์ฒด ์ฝ”๋“œ]

import numpy as np 
import math 
import scipy.stats as stats

## ๊ฐ€์„ค ์ˆ˜๋ฆฝ
# ๊ท€๋ฌด๊ฐ€์„ค : ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์€ 68์ด๋‹ค. 
# ๋Œ€๋ฆฝ๊ฐ€์„ค : ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์€ 68๋ณด๋‹ค ํฌ๋‹ค. 
mu_h0 = 68
alpha = 0.05

## ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ 
# ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
x = np.random.normal(68.5, 1, 100)

# ํ†ต๊ณ„๋Ÿ‰ ๊ณ„์‚ฐ
mu = np.mean(x)
sigma = np.std(x, ddof=1)
n = len(x)

# z-value ๊ณ„์‚ฐ
z = (mu-mu_h0)/(sigma/math.sqrt(n))

# p-value ๊ณ„์‚ฐ
p = 1- stats.norm.cdf(z, 0, 1)