[python ํต๊ณ] ๋จ์ผ ๋ชจ์ง๋จ ํ๊ท ๊ฐ์ค ๊ฒ์ (๋จ์ธก) - z-test Python ์ฝ๋๋ก ๊ตฌํํ๊ธฐ
๋ชจ์ง๋จ์ด ์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ํ๋ค๋ฉด, ๋จ์ผ ๋ชจ์ง๋จ ํ๊ท ๊ฐ์ค ๊ฒ์ ์ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ ์ 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)