[ํต๊ณํ ๊ธฐ์ด]_3์ฃผ์ฐจ
์ถ์ฒ : [์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ] ์ ์์ฑ๊ฒ์
[์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ] ์ ์์ฑ๊ฒ์
[์์ ๋ชฉํ]
๊ฐ๊ฐ์ ์ ์์ฑ ๊ฒ์ ๋ฐฉ๋ฒ๋ค์ ์ดํดํ๊ณ ํน์ง์ ํ์ ํ๋ค.
์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์ ์ ๊ด๊ณ์ ๋ํด ์ค๋ช ํ ์ ์๋ค.
์ 1์ข ์ค๋ฅ์ 2์ข ์ค๋ฅ์ ๋ํด ์ดํดํ๊ณ ๊ตฌ๋ถํ ์ ์๋ค.
3.1 A/B ๊ฒ์
โ๏ธ ๋ ๊ทธ๋ฃน (A, B)๊ณผ ๋น๊ตํ๋๊ฒ ํฌ์ธํธ!
1) A/B ๊ฒ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ ๊ทธ๋ฆผ์ผ๋ก ํ์ธํ๊ธฐ!
โ๏ธ A/B ๊ฒ์
- A/B ๊ฒ์ ์ ๋ ๋ฒ์ (A์ B) ์ค ์ด๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ธ์ง ํ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ๋ฒ.
- ๋ง์ผํ , ์น์ฌ์ดํธ ๋์์ธ ๋ฑ์์ ๋ง์ด ์ฌ์ฉ๋จ.
- ์ฌ์ฉ์๋ค์ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋๊ณ , ๊ฐ ๊ทธ๋ฃน์ ๋ค๋ฅธ ๋ฒ์ ์ ์ ๊ณตํ ํ, ๋ฐ์์ ๋น๊ต.
- ์ผ๋ฐ์ ์ผ๋ก ์ ํ์จ, ํด๋ฆญ๋ฅ , ๊ตฌ๋งค์, ๋ฐฉ๋ฌธ ๊ธฐ๊ฐ, ๋ฐฉ๋ฌธํ ํ์ด์ง ์, ํน์ ํ์ด์ง ๋ฐฉ๋ฌธ ์ฌ๋ถ, ๋งค์ถ ๋ฑ์ ์งํ๋ฅผ ๋น๊ต.
โ๏ธ ๋ชฉ์
- ๋ ๊ทธ๋ฃน ๊ฐ์ ๋ณํ๊ฐ ์ฐ์ฐ์ด ์๋๋ผ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ์ง๋ฅผ ํ์ธ.
2) 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-๊ฒ์ (Independent Samples t-test)์ ์ํํ์ฌ ๋ ๊ฐ์ ๋ ๋ฆฝ๋ ์ง๋จ ๊ฐ ํ๊ท ์ ์ฐจ์ด๊ฐ ์ ์๋ฏธํ์ง ํ๊ฐํฉ๋๋ค.
- ์ด ํจ์๋ ๋ ์ง๋จ์ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์
๋ ฅ์ผ๋ก ๋ฐ์์ t-ํต๊ณ๋๊ณผ p-๊ฐ์ ๋ฐํํฉ๋๋ค.
- t-ํต๊ณ๋ (statistic)
- t-๊ฒ์ ํต๊ณ๋์ ๋๋ค. ๋ ์ง๋จ ๊ฐ ํ๊ท ์ฐจ์ด์ ํฌ๊ธฐ์ ๋ฐฉํฅ์ ๋ํ๋ ๋๋ค.
- p-๊ฐ (pvalue)
- p-๊ฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ฐธ์ผ ๋, ํ์ฌ ๋ฐ์ดํฐ๋ณด๋ค ๊ทน๋จ์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ํ๋ฅ ์ ๋๋ค.
- ์ด ๊ฐ์ด ์ ์์์ค(α) ๋ณด๋ค ์์ผ๋ฉด ๊ท๋ฌด ๊ฐ์ค์ ๊ธฐ๊ฐํ๊ณ ์ด ๊ฐ์ด ์ ์์์ค(α) ๋ณด๋ค ํฌ๋ฉด ๊ท๋ฌด ๊ฐ์ค์ ๊ธฐ๊ฐํ์ง ์์ต๋๋ค.
- t-ํต๊ณ๋ (statistic)
โ๏ธ ์ค์ ์์ !!!(๊ด์ฌ์์ผ๋ฉด ๊ผญ ์ฝ์ด๋ณด๊ธฐ)
- ๋๋ผ์ดํธ๋ฃธ A/B ํ ์คํธ ์ฌ๋ก
- ๋น๊ทผ๋ง์ผ A/B ํ ์คํธ ์ฌ๋ก
๊ฑฐ๋ ํ๊ธฐ ์คํ์ ํตํด ๋ฐ๋ปํ ๊ฑฐ๋ ๊ฒฝํ ๋ง๋ค๊ธฐ
๊ฑฐ๋ ํ๊ธฐ ์คํ์ ํตํด ๋น๊ทผ๋ง์ผ์ด ์ด๋ป๊ฒ ๋ฐ๋ปํ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ฑ์ฅ์์ผ ๋๊ฐ๋์ง ์๊ฐํด ๋๋ฆด๊ฒ์!
medium.com
โญ3.2 ๊ฐ์ค๊ฒ์
โ๏ธ ๋ฐ์ดํฐ๊ฐ ํน์ ๊ฐ์ค์ ์ง์งํ๋์ง ๊ฒ์ ํ๋๊ฒ ํฌ์ธํธ!
โ๏ธ ๊ทธ๋ฆผ์ผ๋ก ํ์ธํ๊ธฐ!
โ๏ธ ๊ฐ์ค๊ฒ์
- ํ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํตํด ๋ชจ์ง๋จ์ ๊ฐ์ค์ ๊ฒ์ฆํ๋ ๊ณผ์
- ์ฆ, ๋ฐ์ดํฐ๊ฐ ํน์ ๊ฐ์ค์ ์ง์งํ๋์ง ํ๊ฐํ๋ ๊ณผ์
- ๊ท๋ฌด๊ฐ์ค(H0)๊ณผ ๋๋ฆฝ๊ฐ์ค(H1)์ ์ค์ ํ๊ณ , ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ ์ง๋ฅผ ๊ฒฐ์
- ๋ฐ์ดํฐ ๋ถ์์ ๋๊ฐ์ง ์ ๋ต์ ์ทจํ ์ ์์
- ํ์ฆ์ ์๋ฃ๋ถ์
- ๋ฏธ๋ฆฌ ๊ฐ์ค๋ค์ ๋จผ์ ์ธ์ด ๋ค์ ๊ฐ์ค์ ๊ฒ์ฆํด ๋๊ฐ๋ ๋ถ์
- โญํ์์ ์๋ฃ๋ถ์(EDA)
- ๊ฐ์ค์ ๋จผ์ ์ ํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ํ์ํด๋ณด๋ฉด์ ๊ฐ์ค ํ๋ณด๋ค์ ์ฐพ๊ณ ๋ฐ์ดํฐ์ ํน์ง์ ์ฐพ๋ ๊ฒ
- ํ์ฆ์ ์๋ฃ๋ถ์
โ๏ธ ๋จ๊ณ
- ๊ท๋ฌด๊ฐ์ค(H0)๊ณผ ๋๋ฆฝ๊ฐ์ค(H1) ์ค์ (ex. ์ ์ฝ๊ฐ๋ฐ์ด๋ผ๊ณ ํ์ ๋, ๊ท๋ฌด๊ฐ์ค์ ํจ๊ณผ๊ฐ ์๋ค, ๋๋ฆฝ๊ฐ์ค์ ํจ๊ณผ๊ฐ ์๋ค. ๋ฐ๋ผ์ ํ์ฌ ์ ์ฅ์์ ๋๋ฆฝ๊ฐ์ค์ด ๋ง๊ธธ ๋ฐ๋ผ๊ฒ ์ง)
- ์ ์์์ค(α) ๊ฒฐ์ (p๊ฐ์ด 0.05๋ณด๋ค ์์์ผ ๋๋ฆฝ๊ฐ์ค์ ์ฑํํ ์ ์์ต๋๋ค.)
- ๊ฒ์ ํต๊ณ๋ ๊ณ์ฐ
- p-๊ฐ๊ณผ ์ ์์์ค ๋น๊ต
- ๊ฒฐ๋ก ๋์ถ
2) ํต๊ณ์ ์ ์์ฑ๊ณผ p๊ฐ
โ๏ธ ํต๊ณ์ ์ ์์ฑ
- ํต๊ณ์ ์ ์์ฑ์ ๊ฒฐ๊ณผ๊ฐ ์ฐ์ฐํ ๋ฐ์ํ ๊ฒ์ด ์๋๋ผ ์ด๋ค ํจ๊ณผ๊ฐ ์ค์ ๋ก ์กด์ฌํจ์ ๋ํ๋ด๋ ์งํ
- p๊ฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ฐธ์ผ ๊ฒฝ์ฐ ๊ด์ฐฐ๋ ํต๊ณ์น๊ฐ ๋์ฌ ํ๋ฅ ์ ์๋ฏธ
- ์ผ๋ฐ์ ์ผ๋ก p๊ฐ์ด 0.05 ๋ฏธ๋ง์ด๋ฉด ๊ฒฐ๊ณผ๋ฅผ ํต๊ณ์ ์ผ๋ก ์ ์ํ๋ค๊ณ ํ๋จ
โ๏ธ p-๊ฐ
- ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ผ ๋, ๊ด์ฐฐ๋ ๊ฒฐ๊ณผ ์ด์์ผ๋ก ๊ทน๋จ์ ์ธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ํ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก p-๊ฐ์ด ์ ์์์ค(α)๋ณด๋ค ์์ผ๋ฉด ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐ
- ์ ์์์ค์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ๊ฐ์ด 0.05
โ๏ธ p-๊ฐ์ ํตํ ์ ์์ฑ ํ์ธ
- p-๊ฐ์ด 0.03์ด๋ผ๋ฉด, 3%์ ํ๋ฅ ๋ก ์ฐ์ฐํ ์ด๋ฌํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์
- ์ผ๋ฐ์ ์ผ๋ก 0.05 ์ดํ๋ผ๋ฉด ์ ์์ฑ์ด ์๋ค๊ณ ๋ด
3) ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์ ์ ๊ด๊ณ
โ๏ธ ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์
- ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์ ์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ๊ฐ๋
- ๋ ๋ค ๋ฐ์ดํฐ์ ๋ชจ์(ex. ํ๊ท )์ ๋ํ ์ ๋ณด๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ ๊ฒ์ด์ง๋ง ์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฆ
- ์ ๋ขฐ๊ตฌ๊ฐ
- ํน์ ๋ชจ์๊ฐ ํฌํจ๋ ๋ฒ์๋ฅผ ์ ๊ณต
โ์ฌ๊ธฐ์ ์ ๊น! ์ ๋ขฐ๊ตฌ๊ฐ์ด ๋ฌด์์ผ๊น์~?
์ ๋ขฐ๊ตฌ๊ฐ (Confidence Interval)
- ์ ๋ขฐ๊ตฌ๊ฐ์ ๋ชจ์ง๋จ์ ํ๊ท ์ด ํน์ ๋ฒ์ ๋ด์ ์์ ๊ฒ์ด๋ผ๋ ํ๋ฅ ์ ๋ํ๋ ๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก 95% ์ ๋ขฐ๊ตฌ๊ฐ์ด ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ๋ชจ์ง๋จ ํ๊ท ์ด 95% ํ๋ฅ ๋ก ์ด ๊ตฌ๊ฐ ๋ด์ ์์์ ์๋ฏธํฉ๋๋ค.
- ๋ง์ฝ ์ด๋ค ์ค๋ฌธ์กฐ์ฌ์์ ํ๊ท ๋ง์กฑ๋๊ฐ 75์ ์ด๊ณ , ์ ๋ขฐ๊ตฌ๊ฐ์ด 70์ ์์ 80์ ์ด๋ผ๋ฉด, ์ฐ๋ฆฌ๋ 95% ํ๋ฅ ๋ก ์ค์ ํ๊ท ๋ง์กฑ๋๊ฐ ์ด ๋ฒ์ ๋ด์ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
- ๊ฐ์ค๊ฒ์
- ๋ชจ์๊ฐ ํน์ ๊ฐ๊ณผ ๊ฐ์์ง ๋ค๋ฅธ์ง ํ ์คํธ
- โ๏ธ ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ ๊ฐ์ค๊ฒ์
4) ๊ฐ์ค๊ฒ์ ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋์ด์ง๊น?
โ๏ธ ๊ฐ์ค์ ์ค์ ํ์ฌ ๊ฒ์ฆ
- ์๋ก์ด ์ฝ๋ฌผ์ด ๊ธฐ์กด ์ฝ๋ฌผ๋ณด๋ค ํจ๊ณผ๊ฐ ์๋์ง ๊ฒ์
- ์ด ๋ ์๋ก์ด ์ฝ๋ฌผ์ ๊ธฐ์กด ์ฝ๋ฌผ๊ณผ ํฐ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ด ๊ท๋ฌด๊ฐ์ค!
- ๋๋ฆฝ๊ฐ์ค์ ์๋ก์ด ์ฝ๋ฌผ์ด ๊ธฐ์กด ์ฝ๋ฌผ๊ณผ ๋๋นํด ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ!
โ๏ธโญ ํ์ด์ฌ ์ค์ตโญ
# ๊ธฐ์กด ์ฝ๋ฌผ(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("๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ์ง ์์ต๋๋ค. ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.")
p-value๋ t-๊ฒ์ (t-test)์ ํตํด ๊ณ์ฐ๋๋ฉฐ, ๋ ์ง๋จ ๊ฐ์ ํ๊ท ์ฐจ์ด๊ฐ ์ฐ์ฐํ ๋ฐ์ํ์ ๊ฐ๋ฅ์ฑ์ ํ๋ฅ ๋ก ๋ํ๋ ๋๋ค.
์ด๋ฅผ ํตํด ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ๊ฑฐ๋ ๊ธฐ๊ฐํ์ง ์๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
1. p-value ๊ณ์ฐ ๊ณผ์ ์์ฝ
t-๊ฒ์ ์ ๋ค์ ๋จ๊ณ๋ก ์งํ๋ฉ๋๋ค:
- ๊ท๋ฌด๊ฐ์ค (Null Hypothesis, ) :
๊ธฐ์กด ์ฝ๋ฌผ(A)์ ์๋ก์ด ์ฝ๋ฌผ(B)์ ํจ๊ณผ ์ฐจ์ด๊ฐ ์๋ค. (μA) - ๋๋ฆฝ๊ฐ์ค (Alternative Hypothesis, H1H):
์๋ก์ด ์ฝ๋ฌผ(B)์ ํจ๊ณผ๊ฐ ๊ธฐ์กด ์ฝ๋ฌผ(A)์ ๋ค๋ฅด๋ค. (μA≠)
(์์ธก ๊ฒ์ ์ด๋ผ๋ฉด ํจ๊ณผ๊ฐ ๋ค๋ฆ, ๋จ์ธก ๊ฒ์ ์ด๋ผ๋ฉด ํจ๊ณผ๊ฐ ๋ ํผ) - t-๊ฐ ๊ณ์ฐ (t-statistic):
t-๊ฐ์ ๋ ์ง๋จ์ ํ๊ท ์ฐจ์ด๋ฅผ ํ์ค ์ค์ฐจ๋ก ๋๋ ๊ฐ์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค. - p-value ๊ณ์ฐ:
t-๊ฐ๊ณผ ์์ ๋()๋ฅผ ์ฌ์ฉํ์ฌ t-๋ถํฌ์ ๋์ ํ๋ฅ ๋ถํฌ์์ -๊ฐ์ ๊ณ์ฐํฉ๋๋ค. -๊ฐ์ ๋ ํ๊ท ์ฐจ์ด๊ฐ ์ฐ์ฐํ ๋ฐ์ํ ํ๋ฅ ์ ๋ํ๋ ๋๋ค.
3.3 t๊ฒ์
โ๏ธ ๊ฐ์ค๊ฒ์ ์ ๋ํ์ ์ธ ๊ฒ์
1) t๊ฒ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ t๊ฒ์
- t๊ฒ์ ์ ๋ ์ง๋จ ๊ฐ์ ํ๊ท ์ฐจ์ด๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ์ง ํ์ธํ๋ ๊ฒ์ ๋ฐฉ๋ฒ
- ๋ ๋ฆฝํ๋ณธ t๊ฒ์ ๊ณผ ๋์ํ๋ณธ t๊ฒ์ ์ผ๋ก ๋๋จ
โ๏ธ ๋ ๋ฆฝํ๋ณธ t๊ฒ์
- ๋ ๋ ๋ฆฝ๋ ๊ทธ๋ฃน์ ํ๊ท ์ ๋น๊ต
โ๏ธ ๋์ํ๋ณธ t๊ฒ์
- ๋์ผํ ๊ทธ๋ฃน์ ์ฌ์ /์ฌํ ํ๊ท ์ ๋น๊ต
2) ๊ฐ์ค๊ฒ์ ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ ์ฉ๋์ด์ง๊น?
โ๏ธ 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}")
3.4 ๋ค์ค๊ฒ์
โ๏ธ ์ฌ๋ฌ ๊ฐ์ค์ ๋์์ ๊ฒ์ ! ํ์ง๋ง ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์!
1) ๋ค์ค๊ฒ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ ๋ค์ค๊ฒ์
- ์ฌ๋ฌ ๊ฐ์ค์ ๋์์ ๊ฒ์ ํ ๋ ๋ฐ์ํ๋ ๋ฌธ์
- ๊ฐ ๊ฒ์ ๋ง๋ค ์ ์์์ค์ ์กฐ์ ํ์ง ์์ผ๋ฉด 1์ข ์ค๋ฅ(๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ) ๋ฐ์ ํ๋ฅ ์ด ์ฆ๊ฐ
- 1์ข ์ค๋ฅ๊ฐ ๋ฌด์์ธ์ง๋ ์ ๋ค์ค๊ฒ์ ์ ๋ฐ์ํ๋ฅ ์ด ์ฆ๊ฐํ๋์ง๋ ๋ฐ์์ ๋ค์ ์ค๋ช ! ์ง๊ธ์, ์ด๋ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๋ ์ ๋๋ก ์ดํด!
โ๏ธ ๋ณด์ ๋ฐฉ๋ฒ
- ๋ณธํ๋ก๋ ๋ณด์ , ํํค ๋ณด์ , ๋๋ท ๋ณด์ , ์๋ฆฌ์์ค ๋ณด์ ๋ฑ์ด ์์
- ๊ฐ์ฅ ๋ํ์ ์ด๊ณ ๊ธฐ๋ณธ์ ์ธ๊ฒ ๋ณธํ๋ก๋ ๋ณด์
2) ๋ค์ค๊ฒ์ ๊ณผ ๋ณด์ ์ ์ด๋ป๊ฒ ์ ์ฉ๋์ด์ง๊น?
โ๏ธ ์ฌ๋ฌ ์ฝ๋ฌผ์ ํจ๊ณผ๋ฅผ ๋์์ ๊ฒ์
- ์ด ๋ ๋ณธํ๋ก๋ ๋ณด์ ์ ์ฌ์ฉํด๋ณผ ์ ์์
โ๏ธ ํ์ด์ฌ ์ค์ต
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})")
3.5 ์นด์ด์ ๊ณฑ๊ฒ์
โ๏ธ ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ถ์์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ด ํฌ์ธํธ!
1) ์นด์ด์ ๊ณฑ๊ฒ์ ์ด๋ ๋ฌด์์ธ๊ฐ?
โ๏ธ ์นด์ด์ ๊ณฑ๊ฒ์
- ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ํ๋ณธ ๋ถํฌ๊ฐ ๋ชจ์ง๋จ ๋ถํฌ์ ์ผ์นํ๋์ง ๊ฒ์ (์ ํฉ๋ ๊ฒ์ )ํ๊ฑฐ๋
- ๋ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๊ฒ์ (๋ ๋ฆฝ์ฑ ๊ฒ์ )
โ๏ธ ์ ํฉ๋ ๊ฒ์
- ๊ด์ฐฐ๋ ๋ถํฌ์ ๊ธฐ๋๋ ๋ถํฌ๊ฐ ์ผ์นํ๋์ง ๊ฒ์
- p๊ฐ์ด ๋์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค์ ์ ๋ง์. ์ฆ, ๊ด์ฐฐ๋ ๋ฐ์ดํฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ์ ํฉ
- p๊ฐ์ด ๋ฎ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค์ ์ ๋ง์ง ์์. ์ฆ, ๊ด์ฐฐ๋ ๋ฐ์ดํฐ์ ๊ท๋ฌด ๊ฐ์ค์ด ๋ถ์ ํฉ
โ๏ธ ๋ ๋ฆฝ์ฑ ๊ฒ์
- ๋ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๊ฒ์
- p๊ฐ์ด ๋์ผ๋ฉด ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ฐ๊ด์ฑ์ด ์์ → ๋ ๋ฆฝ์ฑ์ด ์์
- p๊ฐ์ด ๋ฎ์ผ๋ฉด ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๊ฐ ์ฐ๊ด์ฑ์ด ์์ → ๋ ๋ฆฝ์ฑ์ด ์์
2) ์นด์ด์ ๊ณฑ๊ฒ์ ์ ์ด๋ป๊ฒ ์ ์ฉ๋์ด์ง๊น?
โ๏ธ ๋ฒ์ฃผํ ๋ฐ์ดํฐ์ ๋ถํฌ ํ์ธ ๋ฐ ๋ ๋ฆฝ์ฑ ํ์ธ์ ์ํด ์ฌ์ฉ
- ์ฃผ์ฌ์์ ๊ฐ ๋ฉด์ด ๋์ผํ ํ๋ฅ ๋ก ๋์ค๋์ง ๊ฒ์ (์ ํฉ๋ ๊ฒ์ )
- ์ฑ๋ณ๊ณผ ์ง์ ๋ง์กฑ๋ ๊ฐ์ ๋ ๋ฆฝ์ฑ ๊ฒ์ (๋ ๋ฆฝ์ฑ ๊ฒ์ )
โ๏ธ ํ์ด์ฌ ์ค์ต
# ์ ํฉ๋ ๊ฒ์
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-๊ฐ์ ๋๋ค. ์ด๋ ๊ด์ฐฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค ํ์์ ๋ฐ์ํ ํ๋ฅ ์ ๋๋ค.
โ stats.chi2_contingency ํจ์๊ฐ ๋ญ๊ฐ์?
- scipy.stats.chi2_contingency ํจ์๋ ์นด์ด์ ๊ณฑ ๊ฒ์ ์ ์ํํ์ฌ ๋ ๊ฐ ์ด์์ ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๊ฒ์ ํฉ๋๋ค. ์ด ํจ์๋ ๊ด์ธก ๋น๋๋ฅผ ๋ด๊ณ ์๋ ๊ต์ฐจํ(contingency table)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์นด์ด์ ๊ณฑ ํต๊ณ๋, p-๊ฐ, ์์ ๋, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ ๋น๋(expected frequencies)๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ฐํ ๊ฐ
- chi2 : ์นด์ด์ ๊ณฑ ํต๊ณ๋์ ๋๋ค.
- p : p-๊ฐ์ ๋๋ค. ์ด๋ ๊ด์ธก๋ ๋ฐ์ดํฐ๊ฐ ๊ท๋ฌด ๊ฐ์ค ํ์์ ๋ฐ์ํ ํ๋ฅ ์ ๋๋ค.
- dof : ์์ ๋์ ๋๋ค. ์ด๋ (ํ์ ์ - 1) * (์ด์ ์ - 1)๋ก ๊ณ์ฐ๋ฉ๋๋ค.
- expected : ๊ธฐ๋ ๋น๋์ ๋๋ค. ์ด๋ ํ ํฉ๊ณ์ ์ด ํฉ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐ๋ ์ด๋ก ์ ๋น๋์ ๋๋ค.
3.6 ์ 1์ข ์ค๋ฅ์ ์ 2์ข ์ค๋ฅ
โ๏ธ ๋๊ฐ์ง์ ์ค๋ฅ๋ฅผ ๊ตฌ๋ถํ๋ ๊ฒ์ด ํฌ์ธํธ!
1) ์ 1์ข ์ค๋ฅ์ ์ 2์ข ์ค๋ฅ๋ ๋ฌด์์ผ๊น?
โ๏ธ ๊ทธ๋ฆผ์ผ๋ก ํ์ธํ๊ธฐ!
โ๏ธ ์ 1์ข ์ค๋ฅ
- ๊ท๋ฌด๊ฐ์ค์ด ์ฐธ์ธ๋ฐ ๊ธฐ๊ฐํ๋ ์ค๋ฅ
- ์๋ชป๋ ๊ธ์ ์ ์๋ฏธ (์๋ฌด๋ฐ ์ํฅ์ด ์๋๋ฐ ์ํฅ์ด ์๋ค๊ณ ํ๋ ๊ฒ)
- ํ ๋จ์ด๋ก ์์์ฑ!
- α๋ฅผ ๊ฒฝ๊ณ๋ก ๊ท๋ฌด๊ฐ์ค์ ๊ธฐ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ 1์ข ์ค๋ฅ๊ฐ α๋งํผ ๋ฐ์
- ๋ฐ๋ผ์ ์ ์์์ค(α)์ ์ ํจ์ผ๋ก์จ ์ 1์ข ์ค๋ฅ ์ ์ด ๊ฐ๋ฅ
- ๋ง์ฝ, ์ ์์์ค์ด 0.05๋ผ๋ฉด 100๋ฒ ์ค 5๋ฒ ์ ๋ ์ผ์ด๋ ์ ์๋ ์ 1์ข ์ค๋ฅ๋ ๊ฐ์ํ๊ฒ ๋ค๋ ๊ฒ
โ๋ค์ค ๊ฒ์ ์ ์ 1์ข ์ค๋ฅ๊ฐ ์ฆ๊ฐํ๋ ์ด์ ?
โ๏ธ ์ 2์ข ์ค๋ฅ
- ๊ท๋ฌด๊ฐ์ค์ด ๊ฑฐ์ง์ธ๋ฐ ๊ธฐ๊ฐํ์ง ์๋ ์ค๋ฅ.
- ์๋ชป๋ ๋ถ์ ์ ์๋ฏธ (์ํฅ์ด ์๋๋ฐ ์ํฅ์ด ์๋ค๊ณ ํ๋ ๊ฒ)
- ํ ๋จ์ด๋ก ์์์ฑ!
- ์ 2์ข ์ค๋ฅ๊ฐ ์ผ์ด๋ ํ๋ฅ ์ β๋ก ์ ์.
- ์ 2์ข ์ค๋ฅ๊ฐ ์ผ์ด๋์ง ์์ ํ๋ฅ ์ ๊ฒ์ ๋ ฅ(1-β)์ผ๋ก ์ ์.
- ํ์ง๋ง ์ด๋ฅผ ์ง์ ํต์ ํ ์๋ ์์.
- ๊ทธ๋๋ง ํต์ ๋ฅผ ํด๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก๋…
- ํ๋ณธํฌ๊ธฐ n์ด ์ปค์ง ์๋ก β๊ฐ ์์์ง.
- α์ β๋ ์์ถฉ๊ด๊ณ์ ์์ด์ ๋๋ฌด ๋ฎ์ α๋ฅผ ๊ฐ์ง๊ฒ ๋๋ฉด β๋ ๋์ฑ ๋์์ง
โ๏ธ ์์
- ์๋ก์ด ์ฝ๋ฌผ์ด ํจ๊ณผ๊ฐ ์๋๋ฐ ์๋ค๊ณ ๊ฒฐ๋ก ๋ด๋ฆฌ๋ ๊ฒ(์ 1์ข ์ค๋ฅ).
- ํจ๊ณผ๊ฐ ์๋๋ฐ ์๋ค๊ณ ๊ฒฐ๋ก ๋ด๋ฆฌ๋ ๊ฒ(์ 2์ข ์ค๋ฅ).