๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
1๏ธโƒฃ AI•DS/๐ŸฅŽ Casual inference

[The Brave and True] 3. The-Most-Dangerous-Equation

by isdawell 2023. 6. 22.
728x90

 

 

๐Ÿ‘€ ์ธ๊ณผ์ถ”๋ก  ๊ฐœ์ธ ๊ณต๋ถ€์šฉ ํฌ์ŠคํŠธ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋Š” ์ฒจ๋ถ€ํ•œ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

 

 

 

 

โ‘   Intro 


 

•  ์˜ˆ์ œ. ๊ต์œก ๋ฐ์ดํ„ฐ : ENEM ์ ์ˆ˜(SAT์™€ ์œ ์‚ฌํ•œ ๋ธŒ๋ผ์งˆ ํ‘œ์ค€ ๊ณ ๋“ฑํ•™๊ต ์ ์ˆ˜)๋ฅผ 3๋…„ ๋™์•ˆ ๋‹ค๋ฅธ ํ•™๊ต๋“ค์—์„œ ์ˆ˜์ง‘ โ‡จ ํ•™์ƒ ๊ทœ๋ชจ๊ฐ€ ์ž‘์„ ๋•Œ ์ƒ์œ„ 1%์— ํ•ด๋‹นํ•˜๋Š” ํ•™๊ต๊ฐ€ ๋งŽ์•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜์œ„ 1% ํ•™๊ต๋ฅผ ์‚ดํŽด๋ณด์•˜์„ ๋•Œ๋„ ํ•™์ƒ์ˆ˜๊ฐ€ ๋งค์šฐ ์ ์—ˆ๋‹ค. ์ด๋Š” ํ•™์ƒ ์ˆ˜๊ฐ€ ์ ์€ ํ•™๊ต๋“ค์˜ ๊ฒฝ์šฐ, ๋ถ„์‚ฐ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ธก์ด ๋ถˆํ™•์‹คํ•ด์„œ ์šด์— ์˜ํ•ด ๋งค์šฐ ๋†’๊ฑฐ๋‚˜ ๋‚ฎ์€ ๋ถ„ํฌ๋ฅผ ๋ณด์ธ ๊ฒƒ์ด๋‹ค. 

 

•  ๋ถˆํ™•์‹ค์„ฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” ๋ถ„์‚ฐ์˜ ์ถ”์ •๋Ÿ‰์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ถˆํ™•์‹ค์„ฑ์€ ๊ด€์ธก๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํด ์ˆ˜๋ก ์ค„์–ด๋“ ๋‹ค. ATE ๋ฅผ ํฌํ•จํ•œ ์–ด๋– ํ•œ ์š”์•ฝ ํ†ต๊ณ„์— ๋Œ€ํ•ด์„œ๋„ ์ด๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ํ‘œ๋ณธ์ด ์ปค์งˆ์ˆ˜๋ก ๋ถ„์‚ฐ์€ ์ค„์–ด๋“ ๋‹ค. 

 

 

 

 

โ‘ก  Standard error of our estimates


 

•  ๋ณต์Šต. ATE, E[Y1-Y0] ์„ ์ฒ˜๋ฆฌ ๊ตฐ๊ณผ ๋Œ€์กฐ๊ตฐ์˜ ํ‰๊ท  ๊ฐ„ ์ฐจ์ด์ธ E[Y|T=1] - E[Y|T=0] ์œผ๋กœ ๋‹ค๋ฃจ์—ˆ๋‹ค. ์˜จ๋ผ์ธ ์ˆ˜์—… ์˜ˆ์ œ์—์„œ ์˜จ๋ผ์ธ ์ˆ˜์—…์˜ ATE ๋ฅผ ๋ฐํ˜€๋ƒˆ๊ณ , ๋Œ€๋ฉด์ˆ˜์—…์ผ ๋•Œ๋ณด๋‹ค 5์  ๋‚ฎ์€ ๋ถ€์ •์ ์ธ ํšจ๊ณผ๋ฅผ ํ™•์ธํ–ˆ๋‹ค. ์ด์ œ ์ด ๊ฐ’์ด ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜ํ•œ์ง€ ์‚ดํŽด๋ณด์•„์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ‘œ์ค€์˜ค์ฐจ๋ฅผ ์ถ”์ •ํ•œ๋‹ค. 

 

•  ํ‘œ์ค€์˜ค์ฐจ ์ถ”์ •์น˜

 

 

•  ์ถ”์ •์น˜์— ๋Œ€ํ•œ ํ‘œ์ค€์˜ค์ฐจ๋Š” ํ™•์‹ ์— ๋Œ€ํ•œ ์น˜์ˆ˜์ด๋‹ค. 

 

 

 

 

โ‘ข  Confidence Intervals 


 

•  ํ‘œ์ค€์˜ค์ฐจ๋ฅผ ํ†ตํ•ด ์ฐธ ํ‰๊ท ์ด 95% ์•ˆ์— ํฌํ•จ๋˜๋„๋ก ๊ตฌ๊ฐ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค โ‡จ ์‹ ๋ขฐ๊ตฌ๊ฐ„ 

•  ์‹ ๋ขฐ๊ตฌ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด CLT ์ค‘์‹ฌ๊ทนํ•œ ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•œ๋‹ค. CLT ๋Š” ํ‘œ๋ณธ์ด ์ถฉ๋ถ„ํžˆ ํด ๋•Œ, ํ‘œ๋ณธ์˜ ํ‰๊ท ์ด ์ •๊ทœ๋ถ„ํฌ๋ฅผ ๋”ฐ๋ฅธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

 

 

 

โ‘ฃ  Hypothesis testing 


 

•  ๋ถˆํ™•์‹ค์„ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๊ฐ€์„ค๊ฒ€์ •์ด๋‹ค โ‡จ H0 : ์ฐจ์ด๋ฅผ ๊ฒ€์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฐ’ 

 

 

 

 

 

โ‘ค  P-value


 

•  p๊ฐ’์€ ๊ท€๋ฌด๊ฐ€์„ค์ด ์˜ฌ๋ฐ”๋ฅด๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ๊ฒ€์ • ์ค‘์— ์‹ค์ œ ๊ด€์ฐฐ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ทน๋‹จ์ ์ธ ๊ฒ€์ •๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ํ™•๋ฅ . ๊ท€๋ฌด๊ฐ€์„ค์ด ์ฐธ์ด๋ผ๋Š” ๊ฐ€์ •ํ•˜์— p๊ฐ’์€ ๊ทธ๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ํ™•๋ฅ ์„ ์˜๋ฏธํ•œ๋‹ค โ‡จ P(data | H0) 

 

 

 

 

โ—ฏ ๋‹จ์ผ A/B ํ…Œ์ŠคํŠธ ๋น„๊ตํ•จ์ˆ˜ 

 

def AB_test(test: pd.Series, control: pd.Series, confidence=0.95, h0=0):
    mu1, mu2 = test.mean(), control.mean()
    se1, se2 = test.std() / np.sqrt(len(test)), control.std() / np.sqrt(len(control))
    
    diff = mu1 - mu2
    se_diff = np.sqrt(test.var()/len(test) + control.var()/len(control))
    
    z_stats = (diff-h0)/se_diff
    p_value = stats.norm.cdf(z_stats)
    
    def critial(se): return -se*stats.norm.ppf((1 - confidence)/2)
    
    print(f"Test {confidence*100}% CI: {mu1} +- {critial(se1)}")
    print(f"Control {confidence*100}% CI: {mu2} +- {critial(se2)}")
    print(f"Test-Control {confidence*100}% CI: {diff} +- {critial(se_diff)}")
    print(f"Z Statistic {z_stats}")
    print(f"P-Value {p_value}")
        
AB_test(online, face_to_face, h0=-1) # ์˜จ๋ผ์ธ๊ณผ ๋Œ€๋ฉด ์ˆ˜์—…์˜ ํšจ๊ณผ ์ฐจ์ด๊ฐ€ -1์ธ์ง€ ๊ธฐ๊ฐํ•  ์ˆ˜ ์žˆ์„๊นŒ

#  95% ์‹ ๋ขฐ๋„๋ฅผ ํ†ตํ•ด ์ฐจ์ด๊ฐ€ -1๋ณด๋‹ค ์œ ์˜ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ 99% ์‹ ๋ขฐ๋„๋กœ๋Š” ํ•  ์ˆ˜ ์—†๋‹ค.

 

 

 

โ†ช  ๋‘ ๊ทธ๋ฃน์„ ๋น„๊ตํ•˜์—ฌ ํ‰๊ท  ์ฒ˜์น˜ํšจ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ์ฃผ์œ„์˜ ์‹ ๋ขฐ๊ตฌ๊ฐ„๊นŒ์ง€ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” A/B ๊ฒ€์‚ฌ ๋„๊ตฌ 

 

 

728x90

๋Œ“๊ธ€