๐๐๐ก๐๐๐๐๐
์ ์์ฑ๊ฒ์ ๋ณธ๋ฌธ
[ ๋ชฉ์ฐจ ]
A/B ๊ฒ์
: ๋ ๋ฒ์ (A์ B) ์ค ์ด๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ธ์ง ํ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ๋ฒ
- ๋ง์ผํ , ์น์ฌ์ดํธ ๋์์ธ ๋ฑ์์ ๋ง์ด ์ฌ์ฉ๋จ
- ์ฌ์ฉ์๋ค์ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋๊ณ , ๊ฐ ๊ทธ๋ฃน์ ๋ค๋ฅธ ๋ฒ์ ์ ์ ๊ณตํ ํ, ๋ฐ์ ๋น๊ต
- ์ผ๋ฐ์ ์ผ๋ก ์ ํ์จ, ๊ตฌ๋งค์, ๋ฐฉ๋ฌธ ๊ธฐ๊ฐ, ๋ฐฉ๋ฌธํ ํ์ด์ง ์, ํน์ ํ์ด์ง ๋ฐฉ๋ฌธ ์ฌ๋ถ, ๋งค์ถ๋ฑ์ ์งํ ๋น๊ต
๋ชฉ์
- ๋ ๊ทธ๋ฃน ๊ฐ์ ๋ณํ๊ฐ ์ฐ์ฐ์ด ์๋๋ผ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ์ง๋ฅผ ํ์ธ
- A/B ๊ฒ์ ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง
- ์จ๋ผ์ธ ์ผํ๋ชฐ์์ ๋ ๊ฐ์ง ๋์์ธ(A์ B)์ ๋ํ ๋๋ฉ ํ์ด์ง๋ฅผ ํ ์คํธํ์ฌ ์ด๋ค ๋์์ธ์ด ๋ ๋์ ๊ตฌ๋งค ์ ํ์จ์ ๊ฐ์ ธ์ค๋์ง ํ๊ฐ
import numpy as np
import scipy.stats as stats
# ๊ฐ์ ๋ ์ ํ์จ ๋ฐ์ดํฐ
group_a = np.random.binomial(1, 0.30, 100) # 30% ์ ํ์จ
group_b = np.random.binomial(1, 0.45, 100) # 45% ์ ํ์จ
# t-test๋ฅผ ์ด์ฉํ ๋น๊ต
t_stat, p_val = stats.ttest_ind(group_a, group_b)
print(f"T-Statistic: {t_stat}, P-value: {p_val}")
- โ stats.ttest_ind
: scipy.stats.ttest_ind ํจ์๋ ๋ ๋ฆฝํ๋ณธ t-๊ฒ์ ์ ์ํํ์ฌ ๋ ๊ฐ์ ๋ ๋ฆฝ๋ ์ง๋จ ๊ฐ ํ๊ท ์ ์ฐจ์ด๊ฐ ์ ์๋ฏธํ์ง ํ๊ฐํจ - ์ด ํจ์๋ ๋ ์ง๋จ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์
๋ ฅ์ผ๋ก ๋ฐ์์ t-ํต๊ณ๋๊ณผ p-๊ฐ์ ๋ฐํ
- t-ํต๊ณ๋ (statistic)
t-๊ฒ์ ํต๊ณ๋์ผ๋ก ๋ ์ง๋จ ๊ฐ ์ฐจ์ด์ ํฌ๊ธฐ๊ณผ ๋ฐฉํฅ์ ๋ํ๋ - p-๊ฐ (pvalue)
p-๊ฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ฐธ์ผ๋, ํ๋ ๋ฐ์ดํฐ๋ณด๋ค ๊ทน๋จ์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ํ๋ฅ
์ด ๊ฐ์ด ์ ์์์ค(α) ๋ณด๋ค ์์ผ๋ฉด ์ง๋ฌด ๊ฐ์ค์ ๊ธฐ๊ฐํ๊ณ ์ด ๊ฐ์ด ์ ์์์ค(α) ๋ณด๋ค ํฌ๋ฉด ๊ท๋ฌด ๊ฐ์ค์ ๊ธฐ๊ฐํ์ง ์์
ex) https://medium.com/delightroom/%EC%95%8C%EB%9D%BC%EB%AF%B8%EC%9D%98-a-b-%ED%85%8C%EC%8A%A4%ED%8C%85-%EC%9D%BC%EC%A7%80-1-eb811fe72a17
https://medium.com/daangn/%EA%B1%B0%EB%9E%98-%ED%9B%84%EA%B8%B0-%EC%8B%A4%ED%97%98%EC%9D%84-%ED%86%B5%ED%95%B4-%EB%94%B0%EB%9C%BB%ED%95%9C-%EA%B1%B0%EB%9E%98-%EA%B2%BD%ED%97%98-%EB%A7%8C%EB%93%A4%EA%B8%B0-3d7ac18d8e3
- t-ํต๊ณ๋ (statistic)
๊ฑฐ๋ ํ๊ธฐ ์คํ์ ํตํด ๋ฐ๋ปํ ๊ฑฐ๋ ๊ฒฝํ ๋ง๋ค๊ธฐ
๊ฑฐ๋ ํ๊ธฐ ์คํ์ ํตํด ๋น๊ทผ๋ง์ผ์ด ์ด๋ป๊ฒ ๋ฐ๋ปํ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ฑ์ฅ์์ผ ๋๊ฐ๋์ง ์๊ฐํด ๋๋ฆด๊ฒ์!
medium.com
์๋ผ๋ฏธ์ A/B ํ ์คํ ์ผ์ง #1
A/B ํ ์คํ ์ ํ๋ฉด์ ๋ค๋ฅธ ํ๋ค์ ์ด๋ค ๊ฐ์ค์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๋๋์ง ๊ถ๊ธํ ์ ์ด ๋ง์๋๋ฐ, ์ด๋ฒ ๊ธฐํ์ ์๋ผ๋ฏธ์์ ์งํํ๋ A/B ํ ์คํ ์ค ๋ช๋ช ๊ฒฝํ๋ค์ ๊ณต์ ํด๋ณด๋ ค๊ณ ํ๋ค.
medium.com
๊ฐ์ค๊ฒ์
https://prepnuggets.com/glossary/two-tailed-hypothesis-test/
https://www.kdnuggets.com/hypothesis-testing-and-ab-testing
Two-tailed hypothesis test - PrepNuggets
A test in which the null hypothesis is rejected in favour of the alternative hypothesis if the evidence indicates that the population parameter is either smaller or larger than a hypothesised value. Compare: One-tailed hypothesis test
prepnuggets.com
: ํ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ชจ์ง๋จ์ ๊ฐ์ค์ ๊ฒ์ฆํ๋ ๊ณผ์
- ์ฆ, ๋ฐ์ดํฐ๊ฐ ํน์ ๊ฐ์ค์ ์ง์งํ๋์ง ํ๊ฐํ๋ ๊ณผ์
- ๊ท๋ฌด๊ฐ์ค(H0)๊ณผ ๋๋ฆฝ๊ฐ์ค(H1)์ ์ค์ ํ๊ณ , ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ ์ง๋ฅผ ๊ฒฐ์
- ๋ฐ์ดํฐ ๋ถ์์ ๋๊ฐ์ง ์ ๋ต์ ์ทจํ ์ ์์
- ํ์ฆ์ ์๋ฃ๋ถ์
- ๋ฏธ๋ฆฌ ๊ฐ์ค๋ค์ ๋จผ์ ์ธ์ด ๋ค์ ๊ฐ์ค์ ๊ฒ์ฆํด ๋๊ฐ๋ ๋ถ์
- ํ์์ ์๋ฃ๋ถ์ (EDA)
- ๊ฐ์ค์ ๋จผ์ ์ ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ํ์ํด๋ณด๋ฉด์ ๊ฐ์ค ํ๋ณด๋ค์ ์ฐพ๊ณ ๋ฐ์ดํฐ์ ํน์ง์ ์ฐพ๋ ๊ฒ
โ ๋จ๊ณ
- ๊ท๋ฌด๊ฐ์ค๊ณผ ๋๋ฆฝ๊ฐ์ค ์ค์
- ์ ์์์ค(α) ๊ฒฐ์
- ๊ฒ์ ํต๊ณ๋ ๊ณ์ฐ
- p-๊ฐ๊ณผ ์ ์์์ค ๋น๊ต
- ๊ฒฐ๋ก ๋์ถ
- โก๏ธ ํต๊ณ์ ์ ์์ฑ
- ํต๊ณ์ ์ ์์ฑ์ ๊ฒฐ๊ณผ๊ฐ ์ฐ์ฐํ ๋ฐ์ํ ๊ฒ์ด ์๋๋ผ ์ด๋ค ํจ๊ณผ๊ฐ ์ค์ ๋ก ์กด์ฌํจ์ ๋ํ๋ด๋ ์งํ
- p๊ฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ฐธ์ผ ๊ฒฝ์ฐ ๊ด์ฐฐ๋ ํต๊ณ์น๊ฐ ๋์ฌ ํ๋ฅ ์ ์๋ฏธ
- ์ผ๋ฐ์ ์ผ๋ก p๊ฐ์ด 0.05 ๋ฏธ๋ง์ด๋ฉด ๊ฒฐ๊ณผ๋ฅผ ํต๊ณ์ ์ผ๋ก ์ ์ํ๋ค๊ณ ํ๋จ
โก๏ธ p-๊ฐ - ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ผ ๋, ๊ด์ฐฐ๋ ๊ฒฐ๊ณผ ์ด์์ผ๋ก ๊ทน๋จ์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ํ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก p-๊ฐ์ด ์ ์์์ค(α)๋ณด๋ค ์์ผ๋ฉด ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐ
- ์ ์์์ค์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ๊ฐ์ด 0.05
โก๏ธ p-๊ฐ์ ํตํ ์ ์์ฑ ํ์ธ - p-๊ฐ์ด 0.03์ด๋ผ๋ฉด, 3%์ ํ๋ฅ ๋ก ์ฐ์ฐํ ์ด๋ฌํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์
- ์ผ๋ฐ์ ์ผ๋ก 0.05 ์ดํ๋ผ๋ฉด ์ ์์ฑ์ด ์๋ค๊ณ ๋ด
- ๊ฐ์ค์ ๋จผ์ ์ ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ํ์ํด๋ณด๋ฉด์ ๊ฐ์ค ํ๋ณด๋ค์ ์ฐพ๊ณ ๋ฐ์ดํฐ์ ํน์ง์ ์ฐพ๋ ๊ฒ
- ํ์ฆ์ ์๋ฃ๋ถ์
์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์
- ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์ ์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ๊ฐ๋
- ๋ ๋ค ๋ฐ์ดํฐ์ ๋ชจ์(ex.ํ๊ท )์ ๋ํ ์ ๋ณด๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ ๊ฒ์ด์ง๋ง ์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฆ
- ์ ๋ขฐ๊ตฌ๊ฐ
- ํน์ ๋ชจ์๊ฐ ํฌํจ๋ ๋ฒ์๋ฅผ ์ ๊ณต
→ ์ ๋ขฐ๊ตฌ๊ฐ์ด๋ ?
๋ชจ์ง๋จ์ ํ๊ท ์ด ํน์ ๋ฒ์ ๋ด์ ์์ ๊ฒ์ด๋ผ๋ ํ๋ฅ
์ผ๋ฐ์ ์ผ๋ก 95% ์ ๋ขฐ๊ตฌ๊ฐ์ด ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ๋ชจ์ง๋จ ํ๊ท ์ด 95% ํ๋ฅ ๋ก ์ด ๊ตฌ๊ฐ ๋ด์ ์์์ ์๋ฏธ
๋ง์ฝ ์ด๋ค ์ค๋ฌธ์กฐ์ฌ์์ ํ๊ท ๋ง์กฑ๋๊ฐ 75์ ์ด๊ณ , ์ ๋ขฐ๊ตฌ๊ฐ์ด 70 ~ 80์ด๋ผ๋ฉด,
์ฐ๋ฆฌ๋ 95% ํ๋ฅ ๋ก ์ค์ ํ๊ท ๋ง์กฑ๋๊ฐ ์ด ๋ฒ์ ๋ด์ ์๋ค๊ณ ๋งํ ์ ์์
- ํน์ ๋ชจ์๊ฐ ํฌํจ๋ ๋ฒ์๋ฅผ ์ ๊ณต
- ๊ฐ์ค๊ฒ์
- ๋ชจ์๊ฐ ํน์ ๊ฐ๊ณผ ๊ฐ์์ง ๋ค๋ฅธ์ง ํ
์คํธ
ex) ์๋ก์ด ์ฝ๋ฌผ์ด ๊ธฐ์กด ์ฝ๋ฌผ๋ณด๋ค ํจ๊ณผ๊ฐ ์๋์ง ๊ฒ์
โ ์ด ๋ ์๋ก์ด ์ฝ๋ฌผ์ ๊ธฐ์กด ์ฝ๋ฌผ๊ณผ ํฐ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ด ๊ท๋ฌด๊ฐ์ค
โ ๋๋ฆฝ๊ฐ์ค์ ์๋ก์ด ์ฝ๋ฌผ์ด ๊ธฐ์กด ์ฝ๋ฌผ๊ณผ ๋๋นํด ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ
= ๊ท๋ฌด๊ฐ์ค์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋๋ฆฝ๊ฐ์ค์ ์ฐ๊ตฌ์๊ฐ ์ ์ฆํ๊ณ ์ ํ๋ ์ฃผ์ฅ
# ๊ธฐ์กด ์ฝ๋ฌผ(A)์ ์๋ก์ด ์ฝ๋ฌผ(B) ํจ๊ณผ ๋ฐ์ดํฐ ์์ฑ A = np.random.normal(50, 10, 100) B = np.random.normal(55, 10, 100) # ํ๊ท ํจ๊ณผ ๊ณ์ฐ mean_A = np.mean(A) mean_B = np.mean(B) # t-๊ฒ์ ์ํ t_stat, p_value = stats.ttest_ind(A, B) print(f"A ํ๊ท ํจ๊ณผ: {mean_A}") print(f"B ํ๊ท ํจ๊ณผ: {mean_B}") print(f"t-๊ฒ์ ํต๊ณ๋: {t_stat}") print(f"p-๊ฐ: {p_value}") # t-๊ฒ์ ์ p-๊ฐ ํ์ธ (์ ์์์์ ๊ณ์ฐ๋ p-๊ฐ ์ฌ์ฉ) print(f"p-๊ฐ: {p_value}") if p_value < 0.05: print("๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํฉ๋๋ค. ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.") else: print("๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ์ง ์์ต๋๋ค. ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.")
- ๋ชจ์๊ฐ ํน์ ๊ฐ๊ณผ ๊ฐ์์ง ๋ค๋ฅธ์ง ํ
์คํธ
t๊ฒ์
๊ฐ์ค๊ฒ์ ์ ๋ํ์ ์ธ ๊ฒ์
t๊ฒ์
: ๋ ์ง๋จ ๊ฐ์ ํ๊ท ์ฐจ์ด๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ์ง ํ์ธํ๋ ๊ฒ์ ๋ฐฉ๋ฒ
- ๋ ๋ฆฝํ๋ณธ t๊ฒ์ ๊ณผ ๋์ํ๋ณธ t๊ฒ์ ์ผ๋ก ๋๋จ
๋ ๋ฆฝํ๋ณธ t๊ฒ์
: ๋ ๋ ๋ฆฝ๋ ๊ทธ๋ฃน์ ํ๊ท ์ ๋น๊ต
๋์ํ๋ณธ t๊ฒ์
- ๋์ผํ ๊ทธ๋ฃน์ ์ฌ์ /์ฌํ ํ๊ท ์ ๋น๊ต
- ๊ฐ์ค๊ฒ์ ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง
- p-๊ฐ์ ํตํ ์ ์์ฑ ํ์ธ
- ๋ ํด๋์ค์ ์ํ ์ฑ์ ๋น๊ต(๋ ๋ฆฝํ๋ณธ t๊ฒ์ )
- ๋ค์ด์ดํธ ์ ํ ์ฒด์ค ๋น๊ต(๋์ํ๋ณธ t๊ฒ์ )
# ํ์ ์ ์ ๋ฐ์ดํฐ scores_method1 = np.random.normal(70, 10, 30) scores_method2 = np.random.normal(75, 10, 30) # ๋ ๋ฆฝํ๋ณธ t๊ฒ์ t_stat, p_val = stats.ttest_ind(scores_method1, scores_method2) print(f"T-Statistic: {t_stat}, P-value: {p_val}") ```
- p-๊ฐ์ ํตํ ์ ์์ฑ ํ์ธ
๋ค์ค๊ฒ์
์ฌ๋ฌ ๊ฐ์ค์ ๋์์ ๊ฒ์ ๐ซ ํ์ง๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์
๋ค์ค๊ฒ์
: ์ฌ๋ฌ ๊ฐ์ค์ ๋์์ ๊ฒ์ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
- ๊ฐ ๊ฒ์ ๋ง๋ค ์ ์์์ค์ ์กฐ์ ํ์ง ์์ผ๋ฉด 1์ข ์ค๋ฅ(๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ)๋ฐ์ ํ๋ฅ ์ด ์ฆ๊ฐ
๋ณด์ ๋ฐฉ๋ฒ
- ๋ณธํ๋ก๋ ๋ณด์ , ํํค ๋ณด์ , ๋๋ท ๋ณด์ , ์๋ฆฌ์์ค ๋ณด์ ๋ฑ์ด ์์
- ๊ฐ์ฅ ๋ํ์ ์ด๊ณ ๊ธฐ๋ณธ์ ์ธ๊ฒ ๋ณธํ๋ก๋ ๋ณด์
- ๋ค์ค๊ฒ์ ๊ณผ ๋ณด์ ์ ์ด๋ป๊ฒ ์ ์ฉํ๋์ง
- ์ด ๋ ๋ณธํ๋ก๋ ๋ณด์ ์ ์ฌ์ฉํด๋ณผ ์ ์์
import numpy as np import scipy.stats as stats # ์ธ ๊ทธ๋ฃน์ ๋ฐ์ดํฐ ์์ฑ np.random.seed(42) group_A = np.random.normal(10, 2, 30) group_B = np.random.normal(12, 2, 30) group_C = np.random.normal(11, 2, 30) # ์ธ ๊ทธ๋ฃน ๊ฐ ํ๊ท ์ฐจ์ด์ ๋ํ t๊ฒ์ ์ํ p_values = [] p_values.append(stats.ttest_ind(group_A, group_B).pvalue) p_values.append(stats.ttest_ind(group_A, group_C).pvalue) p_values.append(stats.ttest_ind(group_B, group_C).pvalue) # ๋ณธํ๋ก๋ ๋ณด์ ์ ์ฉ alpha = 0.05 adjusted_alpha = alpha / len(p_values) # ๊ฒฐ๊ณผ ์ถ๋ ฅ print(f"๋ณธํ๋ก๋ ๋ณด์ ๋ ์ ์ ์์ค: {adjusted_alpha:.4f}") for i, p in enumerate(p_values): if p < adjusted_alpha: print(f"๊ฒ์ {i+1}: ์ ์๋ฏธํ ์ฐจ์ด ๋ฐ๊ฒฌ (p = {p:.4f})") else: print(f"๊ฒ์ {i+1}: ์ ์๋ฏธํ ์ฐจ์ด ์์ (p = {p:.4f})")
์นด์ด์ ๊ณฑ๊ฒ์
๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ถ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด ํฌ์ธํธ
์นด์ด์ ๊ณฑ๊ฒ์
- ํ์ ๊ฒ์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๊ณ ์๋ ๋ถํฌ
- ์นด์ด์ ๊ณฑ ๋ถํฌ๋ "ํ์ค์ ๊ท๋ถํฌ ํ๋ฅ ๋ณ์์ ์ ๊ณฑํฉ"์ผ๋ก ์ ์
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ํ๋ณธ ๋ถํฌ๊ฐ ๋ชจ์ง๋จ ๋ถํฌ์ ์ผ์นํ๋์ง ๊ฒ์ (์ ํฉ๋ ๊ฒ์ )ํ๊ฑฐ๋
- ๋ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๊ฒ์ (๋ ๋ฆฝ์ฑ ๊ฒ์ )
์ ํฉ๋ ๊ฒ์
- ๊ด์ฐฐ๋ ๋ถํฌ์ ๊ธฐ๋๋ ๋ถํฌ๊ฐ ์ผ์นํ๋์ง ๊ฒ์
- p๊ฐ์ด ๋์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค์ ์ ๋ง์ ์ฆ, ๊ด์ฐฐ๋ ๋ฐ์ดํฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ ํฉ
- p๊ฐ์ด ๋ฎ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค์ ์ ๋ง์ด ์์ ์ฆ, ๊ด์ฐฐ๋ ๋ฐ์ดํฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ๋ถ์ ํฉ
๋ ๋ฆฝ์ฑ ๊ฒ์
- ๋ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๊ฒ์
- p๊ฐ์ด ๋์ผ๋ฉด ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ฐ๊ด์ฑ์ด โ → ๋ ๋ฆฝ์ฑ โญ
- p๊ฐ์ด ๋ฎ์ผ๋ฉด ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ฐ๊ด์ฑ์ด โญ → ๋
๋ฆฝ์ฑ โ
- ์นด์ด์ ๊ณฑ๊ฒ์ ์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ถํฌ ํ์ธ ๋ฐ ๋
๋ฆฝ์ฑ ํ์ธ์ ์ํด ์ฌ์ฉ
- ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์ด ๋์ผํ ํ๋ฅ ๋ก ๋์ค๋์ง ๊ฒ์ (์ ํฉ๋ ๊ฒ์ )
- ์ฑ๋ณ๊ณผ ์ง์ ๋ง์กฑ๋ ๊ฐ์ ๋ ๋ฆฝ์ฑ ๊ฒ์ (๋ ๋ฆฝ์ฑ ๊ฒ์ )
# ์ ํฉ๋ ๊ฒ์ observed = [20, 30, 25, 25] expected = [25, 25, 25, 25] chi2_stat, p_value = stats.chisquare(observed, f_exp=expected) print(f"์ ํฉ๋ ๊ฒ์ ์นด์ด์ ๊ณฑ ํต๊ณ๋: {chi2_stat}, p-๊ฐ: {p_value}") # ๋ ๋ฆฝ์ฑ ๊ฒ์ observed = np.array([[10, 10, 20], [20, 20, 40]]) chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed) print(f"๋ ๋ฆฝ์ฑ ๊ฒ์ ์นด์ด์ ๊ณฑ ํต๊ณ๋: {chi2_stat}, p-๊ฐ: {p_value}") # ์ฑ๋ณ๊ณผ ํก์ฐ ์ฌ๋ถ ๋ ๋ฆฝ์ฑ ๊ฒ์ observed = np.array([[30, 10], [20, 40]]) chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed) print(f"๋ ๋ฆฝ์ฑ ๊ฒ์ ์นด์ด์ ๊ณฑ ํต๊ณ๋: {chi2_stat}, p-๊ฐ: {p_value}")
- stats.chisquare ํจ์ โ
- scipy.stats.chisquare ํจ์๋ ์นด์ด์ ๊ณฑ ์ ํฉ๋ ๊ฒ์ ์ ์ํํ์ฌ ๊ด์ฐฐ๋ ๋น๋ ๋ถํฌ๊ฐ ๊ธฐ๋๋ ๋น๋ ๋ถํฌ์ ์ผ์นํ๋์ง ํ๊ฐํจ
์ด ๊ฒ์ ์ ์ฃผ๋ก ๋จ์ผ ํ๋ณธ์ ๋ํด ๊ด์ฐฐ๋ ๋น๋๊ฐ ํน์ ์ด๋ก ์ ๋ถํฌ(์: ๊ท ๋ฑ ๋ถํฌ)์ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฐ ์ฌ์ฉ - ๋ฐํ ๊ฐ
- chi2: ์นด์ด์ ๊ณฑ ํต๊ณ๋์ ๋๋ค.
- p: p-๊ฐ์ ๋๋ค. ์ด๋ ๊ด์ฐฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค ํ์์ ๋ฐ์ํ ํ๋ฅ ์ ๋๋ค.
- scipy.stats.chisquare ํจ์๋ ์นด์ด์ ๊ณฑ ์ ํฉ๋ ๊ฒ์ ์ ์ํํ์ฌ ๊ด์ฐฐ๋ ๋น๋ ๋ถํฌ๊ฐ ๊ธฐ๋๋ ๋น๋ ๋ถํฌ์ ์ผ์นํ๋์ง ํ๊ฐํจ
- stats.chi2_contingency ํจ์ โ
- scipy.stats.chi2_contingency ํจ์๋ ์นด์ด์ ๊ณฑ ๊ฒ์ ์ ์ํํ์ฌ ๋ ๊ฐ ์ด์์ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋
๋ฆฝ์ฑ์ ๊ฒ์ ํจ
์ด ํจ์๋ ๊ด์ธก ๋น๋๋ฅผ ๋ด๊ณ ์๋ ๊ต์ฐจํ(contingency table)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์นด์ด์ ๊ณฑ ํต๊ณ๋, p-๊ฐ, ์์ ๋, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ ๋น๋(expected frequencies)๋ฅผ ๋ฐํ - ๋ฐํ ๊ฐ
- chi2 : ์นด์ด์ ๊ณฑ ํต๊ณ๋์ ๋๋ค.
- p : p-๊ฐ์ ๋๋ค. ์ด๋ ๊ด์ธก๋ ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค ํ์์ ๋ฐ์ํ ํ๋ฅ
- dof : ์์ ๋์ ๋๋ค. ์ด๋ (ํ์ ์ - 1) * (์ด์ ์ - 1)๋ก ๊ณ์ฐ
- expected : ๊ธฐ๋ ๋น๋
์ด๋ ํ ํฉ๊ณ์ ์ด ํฉ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ๋ ์ด๋ก ์ ๋น๋
- scipy.stats.chi2_contingency ํจ์๋ ์นด์ด์ ๊ณฑ ๊ฒ์ ์ ์ํํ์ฌ ๋ ๊ฐ ์ด์์ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋
๋ฆฝ์ฑ์ ๊ฒ์ ํจ
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ถํฌ ํ์ธ ๋ฐ ๋
๋ฆฝ์ฑ ํ์ธ์ ์ํด ์ฌ์ฉ
- ์นด์ด์ ๊ณฑ๊ฒ์ ์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง
์ 1์ข ์ค๋ฅ์ ์ 2์ข ์ค๋ฅ
๋๊ฐ์ง์ ์ค๋ฅ๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ด ํฌ์ธํธ
์ 1์ข ์ค๋ฅ
- ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ
- ์๋ชป๋ ๊ธ์ ์ ์๋ฏธ (์๋ฌด๋ฐ ์ํฅ์ด ์๋๋ฐ ์ํฅ์ด ์๋ค๊ณ ํ๋ ๊ฒ)
- ํ ๋จ์ด๋ก ์์์ฑ
- α๋ฅผ ๊ฒฝ๊ณ๋ก ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ 1์ข ์ค๋ฅ๊ฐ α๋งํผ ๋ฐ์
- ๋ฐ๋ผ์ ์ ์์์ค(α)์ ์ ํจ์ผ๋ก์จ ์ 1์ข ์ค๋ฅ ์ ์ด ๊ฐ๋ฅ
- ๋ง์ฝ, ์ ์์์ค์ด 0.05๋ผ๋ฉด 100๋ฒ ์ค 5๋ฒ์ ๋ ์ผ์ด๋ ์ ์๋ ์ 1์ข
์ค๋ฅ๋ ๊ฐ์ํ๊ฒ ๋ค๋ ๊ฒ
- ๋ค์ค ๊ฒ์ ์ ์ 1์ข
์ค๋ฅ๊ฐ ์ฆ๊ฐํ๋ ์ด์ โ
- ํ๋์ ๊ฒ์ ์์ ์ 1์ข ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ ํ๋ฅ ์ 1 - α
- m๊ฐ์ ๋ ๋ฆฝ๋ ๊ฒ์ ์์ ์ 1์ข ์ค๋ฅ๊ฐ ์ ํ ๋ฐ์ํ์ง ์์ ํ๋ฅ ์
- ๋ฐ๋ผ์, m๊ฐ์ ๊ฒ์ ์์ ํ๋ ์ด์์ ์ 1์ข ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ (์ฆ, ์ ์ฒด ์ 1์ข ์ค๋ฅ์จ)์
- ์ด ๊ฐ์ m์ด ์ปค์ง์๋ก ๋น ๋ฅด๊ฒ ์ฆ๊ฐํจ
ex) α=0.05, m=10์ธ ๊ฒฝ์ฐ - ์ฆ, 10๊ฐ์ ๊ฐ์ค์ ๋์์ ๊ฒ์ ํ ๋ ํ๋ ์ด์์ ๊ฐ์ค์์ ์ 1์ข ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ์ฝ 40.1% ์ด๋ฏ๋ก ๊ฐ๋ณ๊ฒ์ฆ์์ ๋ฐ์ํ๋ ์ค๋ฅ์จ(5%)๋ณด๋ค ๋์
- ๋ค์ค ๊ฒ์ ์ ์ 1์ข
์ค๋ฅ๊ฐ ์ฆ๊ฐํ๋ ์ด์ โ
์ 2์ข ์ค๋ฅ
- ๊ท๋ฌด๊ฐ์ค์ด ๊ฑฐ์ง์ธ๋ฐ ๊ธฐ๊ฐํ์ง ์๋ ์ค๋ฅ
- ์๋ชป๋ ๋ถ์ ์ ์๋ฏธ ( ์ํฅ์ด ์๋๋ฐ ์ํฅ์ด ์๋ค๊ณ ํ๋ ๊ฒ )
- ํ ๋จ์ด๋ก ์์์ฑ
- ์ 2์ข ์ค๋ฅ๊ฐ ์ผ์ด๋ ํ๋ฅ ์ β๋ก ์ ์
- ์ 2์ข ์ค๋ฅ๊ฐ ์ผ์ด๋์ง ์์ ํ๋ฅ ์ ๊ฒ์ ๋ ฅ(1-β)์ผ๋ก ์ ์
- ํ์ง๋ง ์ด๋ฅผ ์ง์ ํต์ ํ ์๋ ์์
- ๊ทธ๋๋ง ํต์ ๋ฅผ ํด๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก๋…
- ํ๋ณธํฌ๊ธฐ n์ด ์ปค์ง ์๋ก β๊ฐ ์์์ง
- α์ β๋ ์์ถฉ๊ด๊ณ์ ์์ด์ ๋๋ฌด ๋ฎ์ α๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด β๋ ๋์ฑ ๋์์ง
์์
์๋ก์ด ๊ณ ํ์์ฝ์ ๊ฐ๋ฐํ๋ ์ ์ฝ์ฌ๊ฐ ์์ต๋๋ค ์์ฝ์ฒ๋ ๊ตญ๋ฏผ์ ๊ฑด๊ฐ์ ๊ณ ๋ คํ์ฌ ์น์ธ์ ํด์ผํฉ๋๋ค ๊ณ ํ์์ ๊ฐ๋ฐํ ์ ์ฝ์ฌ๋ ์์ ๋ค์ ๊ฐ๋ฐํ ์ฝ์ด ์์ฒญ๋ ํจ๊ณผ๊ฐ ์๋ค๋ผ๊ณ ์ฃผ์ฅํ์ง๋ง ๊ธ์? ์ด ๊ณผ์ ์์ ์ผ์ด๋ ์ ์๋ ํต๊ณ์ ์ค๋ฅ์ ๋ํด์ ์์๋ด ์๋ค
- ์์ฝ์ฒ๋ ์๊ฒฉํ ํ๊ฐ ๊ณผ์ ์ด ํ์ํ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ฐ์ค์ ์คใ
์ด
- ๊ท๋ฌด๊ฐ์ค (H_0) : ๊ณ ํ์ ์ฝ์ด ํจ๊ณผ๊ฐ ์ ์
- ๋๋ฆฝ๊ฐ์ค (H_1) : ๊ณ ํ์ ์ฝ์ด ํจ๊ณผ๊ฐ ์์ (์ ์ฝ์ฌ๊ฐ ์ฃผ์ฅํ๋ ๊ฐ์ค)
- ๋งค์ฐ๋งค์ฐ ์๊ฒฉํ ๊ธฐ์ค์ผ๋ก ์ฝ์ ํ๊ฐ๋ธ๋ค๋ฉด ๊ตญ๋ฏผ๋ค์ด ์ํ ๋๋น ์ป๋ ํธ์ต์ด ์ ์
- ๋ฐ๋ฉด ๋๋ํ ๊ธฐ์ค์ผ๋ก ์ฝ์ ํ๊ฐ๋ธ๋ค๋ฉด ๊ตญ๋ฏผ์ ์ํด๊ฐ ๊ฑฑ์
- case 1)
- ๊ท๋ฌด๊ฐ์ค์ด ์ฌ์ค์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋๋ฆฝ๊ฐ์ค์ ์ ํํ๋ ๊ฒฝ์ฐ
- ์ด ๊ฒฝ์ฐ ๊ณ ํ์ ์ฝ์ด ํจ๊ณผ๊ฐ ์๋๋ฐ ๋ง์น ์๋ ๊ฒ์ฒ๋ผ ํ๋จ๋๋ฏ๋ก ์ด๋ ๊ตญ๋ฏผ์ ์ํด๊ฐ ์ฐ๋ ค๋๋ ์ํฉ์ ๋๋ค ์ด๋ฅผ 1์ข ์ค๋ฅ(type 1 error)๋ผ๊ณ ํจ
- case 2)
- ์ค์ ๋ก ๊ณ ํ์ ์ฝ์ด ํจ๊ณผ๊ฐ ์์๋๋ฐ ์๋ค๋ ์ ์ฝ์ฌ ์ ์ฅ์์๋ ์ต์ธ .. ์ด๋ฅผ 2์ข ์ค๋ฅ(type 2 error)
- ์ค์ ๋ก case 1์ด ๋ ํฐ ์ํ์ด๋ผ๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ ์์์ค์ผ๋ก ์ ์ํ๊ณ ๊ด๋ฆฌํ๊ฒ ๋จ
- case 1)
์ฐ์ต๋ฌธ์
(๋ ๋์์ด ๋ง์ด ๋๊ธฐ๋๋ฌธ์)
- ๊ฐ์ค๊ฒ์ ์์ ์ฌ์ฉ๋๋ ์ฃผ์ ๊ฐ๋
์ค ํ๋์ธ p-value์ ์๋ฏธ๋ฅผ ์ค๋ช
ํ์ธ์.
p-value๋ ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ผ ๋, ๊ด์ฐฐ๋ ๋ฐ์ดํฐ ๋๋ ๋ ๊ทน๋จ์ ์ธ ๋ฐ์ดํฐ๊ฐ ๋ํ๋ ํ๋ฅ ์ด๋ค.
2.๊ฐ์ค๊ฒ์ ์์ ๊ท๋ฌด๊ฐ์ค(null hypothesis)๊ณผ ๋๋ฆฝ๊ฐ์ค(alternative hypothesis)์ ์ฐจ์ด์ ๋ํ ์ค๋ช
์ผ๋ก ์ณ์ ๊ฒ์ ๊ณ ๋ฅด์ธ์.
๊ท๋ฌด๊ฐ์ค์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ฉฐ, ๋๋ฆฝ๊ฐ์ค์ ์ฐ๊ตฌ์๊ฐ ์
์ฆํ๊ณ ์ ํ๋ ์ฃผ์ฅ์ด๋ค.
- ๋ ๊ทธ๋ฃน์ ํ๊ท ์ด ์๋ก ๋ค๋ฅธ์ง ๋น๊ตํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ t๊ฒ์ ์ ์ข
๋ฅ๋ ๋ฌด์์ธ๊ฐ์?
๋ ๋ฆฝ ํ๋ณธ t๊ฒ์
4.๋ค์ค๊ฒ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ ๋ฌด์์ธ๊ฐ์?
์ฌ๋ฌ ๋ฒ์ ๊ฒ์ ์ ์ํํ ๋, ์ ์ฒด ์คํ์์ ์ 1์ข
์ค๋ฅ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ์ฆ๊ฐํ๋ค.
- ์นด์ด์ ๊ณฑ๊ฒ์ ์ ์ฃผ๋ก ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ๋ ์ฌ์ฉ๋๋์?
๋ฒ์ฃผํ ๋ฐ์ดํฐ - ์ 1์ข
์ค๋ฅ(Type I error)์ ์ 2์ข
์ค๋ฅ(Type II error)์ ์ฐจ์ด์ ๋ํ ์ค๋ช
์ผ๋ก ์ณ์ ๊ฒ์ ๊ณ ๋ฅด์ธ์.
์ 1์ข ์ค๋ฅ๋ ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ์ด๊ณ , ์ 2์ข ์ค๋ฅ๋ ๋๋ฆฝ๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ์ด๋ค.
'ํต๊ณํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ค๊ฒ์ ์ ์ฃผ์์ (0) | 2025.01.13 |
---|---|
์๊ด๊ด๊ณ (1) | 2025.01.13 |
ํต๊ณํ ๊ธฐ์ด 2 (1) | 2025.01.10 |
ํต๊ณํ ๊ธฐ์ด (2) | 2025.01.10 |