๐ ์ธ๊ณผ์ถ๋ก ๊ฐ์ธ ๊ณต๋ถ์ฉ ํฌ์คํธ ๊ธ์ ๋๋ค. ์ถ์ฒ๋ ์ฒจ๋ถํ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
โ All you need is regression
โฏ Review
• ์ธ๊ณผ์ถ๋ก ์์ ๊ฐ ๊ฐ์ธ์๊ฒ์ ์ป์ ์ ์๋ ๊ฒฐ๊ณผ ๊ฐ์ Y0 (์ฒ์น๋ฅผ ๋ฐ์ง ์์์ ๋ ์ป๋ ๊ฒฐ๊ณผ), Y1 (์ฒ์น๋ฅผ ๋ฐ์์ ๋ ๊ฒฐ๊ณผ) ์ด ์๋ค. ๊ทธ๋ฌ๋ T๊ฐ 0์ด๋ 1๋ก ์ ํด์ง๋ฉด ๋ค๋ฅธ ํ๋์ ๊ฒฐ๊ณผ๋ ์์ ์ ์ ์๊ฒ ๋๋ค. ๋๋ฌธ์ ๊ฐ์ธ์ ๋ํ ์ฒ์นํจ๊ณผ δi = Y1i - Y0i ๋ ์ ์ ์๋ค.
• ๊ทธ๋ฌ๋ ํ๊ท ์ ์ธ ์ธ๊ณผ ํจ๊ณผ ATE ๋ ์ถ์ ํ ์ ์๋ค : ATE = E[Y1 - Y0]
• ์ฌ๊ธฐ์ ์ผ์ ํ ์ฒ์นํจ๊ณผ k ๋ Y1i = Y0i + k ๋ฅผ ๋ง์กฑํ๋ค. k ๊ฐ ์์๋ผ๋ฉด ํ๊ท ์ ์ผ๋ก ์ฒ์น๊ฐ ์์ ํจ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋งํ๋ค.
• ํธํฅ bias ๋๋ฌธ์ ํ๊ท ์ ์ฐจ์ด E[Y|T=1] - E[Y|T=0] ์ E[Y1-Y0] ๋ ๋ค๋ฅด๋ค. ์ด๋ฌํ ํธํฅ์ ์ฒ์น์ง๋จ๊ณผ ๋น์ฒ์น ์ง๋จ์ด ์ฒ์น ์ฌ๋ถ ์ธ์ ๋ค๋ฅธ ์ธก๋ฉด์์ ๊ฐ๋ผ์ง ๋๋ ๋ฐ์ํ๋ค.
• ํธํฅ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ ์ง๋จ์์ ์ ์ฌ์ ๊ฒฐ๊ณผ Y0 ์ ์ฐจ์ด๊ฐ ์๋์ง๋ฅผ ๋ณด๋ ๊ฒ์ด๋ค.
• ์ธ๊ณผ์ถ๋ก ์์๋ ์ด ๋ชจ๋ ์์ ์ ํ ๋ฒ์ ํ ์ ์๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก Linear regression ์ด๋ค. ์ ํํ๊ท๋ ์กฐ๊ฑด๋ถ ๊ธฐ๋ํจ์ CEF ์ ๋ํ ์ต์์ ์ ํ ๊ทผ์ฌ์น์ด๋ค.
• ์์
โช ์ ๊ฒฝ์ฐ์ง ์๋ ๋ชจ๋ ๊ฒ๋ค (e.g. ์ํ ๋น์ผ ํ์์ ๊ธฐ๋ถ, ๊ณต๋ถ์๊ฐ ๋ฑ) ์ ui ํญ์ ํฌํจ์ํจ๋ค.
โช Online_i : ์ฒ์น๋ฅผ ๋ฐ๋์ง๋ฅผ ๋ํ๋ด๋ ๋๋ฏธ๋ณ์์ด๋ค
โช E[Y|T=0] = δ0 , E[Y|T=1] = δ0 + k โจ k ๋ ATE
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
import graphviz as gr
%matplotlib inline
data = pd.read_csv("data/online_classroom.csv").query("format_blended==0")
result = smf.ols('falsexam ~ format_ol', data=data).fit()
result.summary().tables[1]
• ATE ๋ฅผ ์ถ์ ํ ๋ฟ ์๋๋ผ ๋์์ ์ ๋ขฐ๊ตฌ๊ฐ๊ณผ p-value ๊น์ง ๊ตฌํ ์ ์๋ค.
• ATE = Online ์ ๋ชจ์ ์ถ์ ์น์ ์ ํธ์ ๋ํ ๊ฐ = 78 + (-4.9) = 73.1
โก Regression Theory
โฏ Linear prediction
• ํ๋์ ํ๊ท๋ณ์ T๊ฐ ์์ ๋ ๊ทธ์ ๋ํ ํ๋ผ๋ฏธํฐ
โฏ ํ๊ท๋ณ์๊ฐ ๋ ๊ฐ ์ด์์ธ ๊ฒฝ์ฐ
• ๋ค๋ฅธ ๋ณ์๋ค์ ๋ณด์กฐ์ ์ด๊ณ T์ ๊ด๋ จ๋ ํ๋ผ๋ฏธํฐ k ๋ฅผ ์ถ์ ํ๋๋ฐ ๊ด์ฌ์ด ์๋ค๊ณ ํด๋ณด์
• T~ : T์ ๋ํด ๋ค๋ฅธ covariates ๋ฅผ ํฌํจํ ํ๊ท์ X1i + ... + Xki ์ Residual ์์ฐจ ์ด๋ค.
• ๋ค๋ณ๋ ํ๊ท๋ถ์์ ๊ณ์๋ ๋ชจํ์ ๋ค๋ฅธ ๋ณ์์ ํจ๊ณผ๋ฅผ ๊ณ ๋ คํ ํ ๋์ผํ ํ๊ท ๋ถ์์ ์ด๋ณ๋ ๊ณ์์ ๊ฐ๋ค. ์ฆ, k ๋ ๋ค๋ฅธ ๋ชจ๋ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ธกํ ํ T์ ์ด๋ณ๋ ๊ณ์ (bivariate coefficient) ์ด๋ค.
โป bivariate coefficient : ๋ ๋ณ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ํ๊ท๊ณ์๋ก ๋ ๋ณ์ ์ฌ์ด์ ์๊ด๊ด๊ณ์ ๊ฐ๋์ ๋ฐฉํฅ์ฑ์ ์ค๋ช ํธ๋ค.
• ๋ค๋ฅธ ๋ณ์๋ค๋ก๋ถํฐ T๋ฅผ ์์ธกํ ์ ์๋ค๋ฉด T๋ ๋๋ค์ด ์๋๋ผ๋ ๋ป์ด๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ๋ณ์๋ค์ ํต์ ํ๋ฉด T๋ฅผ ๋๋ค์ ๊ฐ๊น๊ฒ ๋ง๋ค ์ ์๋ค. ์ ํํ๊ท๋ฅผ ์ด์ฉํด ๋ค๋ฅธ ๋ณ์๋ค๋ก๋ถํฐ T๋ฅผ ์์ธกํ๊ณ ๊ทธ ์์ฐจ T~ ๋ฅผ ์ทจํ๋ค. ์์ฐจ์ ์ ์์ ๋ฐ๋ผ T~ ๋ ๋ค๋ฅธ ๋ณ์ X๋ก๋ถํฐ ์์ธกํ ์ ์๋ค.
โข Regression for Non-Random Data
โฏ Observational data
• ๋ฌด์์ ์คํ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ๋ ์ด๋ ต๋ค. ๋ฐ๋ผ์ ๋๋คํ์ง ์์ ๋ฐ์ดํฐ, ๊ด์ธก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ค.
โฏ ์์ . ์ถ๊ฐ๊ต์ก๊ธฐ๊ฐ์ด ์๊ฐ๋น ์๊ธ์ ๋ฏธ์น๋ ์ํฅ ์ถ์
• ์กฐ์๋ณ์ธ T = ๊ต์ก ๋ฐ์ ๊ธฐ๊ฐ , ์ข ์๋ณ์ O = ์๊ฐ๋น ์๊ธ์ ๋ก๊ทธ๊ฐ
โช ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ผ๋ฏธํฐ ์ถ์ ์น๋ฅผ ๋ฐฑ๋ถ์จ๋ก ํด์ํ ์ ์๊ฒ ๋๋ค. ์ฆ, ๊ต์ก๊ธฐ๊ฐ์ด 1๋ ๋์ด๋ ๋, ์๊ธ์ด x% ๋์ด๋๋ค๊ณ ๋งํ ์ ์๋ค. (์ฐธ๊ณ )
wage = pd.read_csv("./data/wage.csv").dropna()
model_1 = smf.ols('np.log(hwage) ~ educ', data=wage.assign(hwage=wage["wage"]/wage["hours"])).fit()
model_1.summary().tables[1]
• ๋ชจํ์ ๋ฐ๋ฅด๋ฉด ๊ต์ก ๊ธฐ๊ฐ์ด 1๋ ์ถ๊ฐ๋ ๋๋ง๋ค ์๊ธ์ด ์ฝ 5.3% ์ฆ๊ฐํ๋ค๊ณ ์์ธกํ ์ ์๋ค. ๊ต์ก์ด ์๊ธ์ ์ํฅ์ ์ค๋ค๋ ๊ฐ์ ๊ณผ ์ผ์นํ๋ค.
• ๊ทธ๋ฌ๋ ์ด๋ฌํ ํด์์ ๋ฏฟ์๋ง ํ์ง ๋ชปํ๋ค. ํธํฅ์ด ์กด์ฌํ ์ง๋ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ณ์๋ค์ ํต์ ๋ณ์๋ก ํ์ฉํ ํ์์ฑ์ด ์๋ค. meduc, feduc ๊ณผ ๊ฐ์ ๋ถ๋ชจ์ ๊ต์ก๊ธฐ๊ฐ, IQ ์ ์, ๊ฒฝ๋ ฅ ์ฐ์ exper, ์ฌ์ง ๊ธฐ๊ฐ tenure ๋ฑ์ด ์๋ค.
• ๊ฐ๋ น ๋ชจํ์ IQ ๋ณ์๋ฅผ ํฌํจํ๋ค๋ฉด, k ๋ IQ ๋ฅผ ๊ณ ์ ์ํค๋ฉด์ ๊ต์ก๊ธฐ๊ฐ์ ์ถ๊ฐํ์ ๋์ ๋ฐํ๊ฐ์ด ๋๋ค.
• RCT ๋ฅผ ํด์ ์ฒ์น์ง๋จ๊ณผ ํต์ ์ง๋จ์ ๋์ผํ๊ฒ ๋ง๋ค ์๋ ์์ง๋ง, ํ๊ท๋ชจํ์ ๋ค๋ฅธ ์์๋ค์ ํฌํจํ๋ฉด ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
controls = ['IQ', 'exper', 'tenure', 'age', 'married', 'black',
'south', 'urban', 'sibs', 'brthord', 'meduc', 'feduc']
X = wage[controls].assign(intercep=1)
t = wage["educ"]
y = wage["lhwage"]
beta_aux = regress(t, X)
t_tilde = t - X.dot(beta_aux)
kappa = t_tilde.cov(y) / t_tilde.var()
kappa
• ์์ ์ถ์ ๊ฒฐ๊ณผ๋ 0.04๊ฐ ๋๋๋ฐ ์ด ๊ณ์ ๊ฐ์ ๋์ผํ IQ, ๊ฒฝ๋ ฅ, ์ฌ์ง ๊ธฐ๊ฐ, ๋์ด ๋ฑ์ ๊ฐ์ง ์ฌ๋๋ค์ ๊ฒฝ์ฐ ๊ต์ก ๊ธฐ๊ฐ์ด 1๋ ๋์ด๋ ๋๋ง๋ค ์๊ฐ๋น ์๊ธ์ด 4.11% ์์นํ๋ค๋ ๋ป์ด๋ค. ์ด์ ์ ์ถ์ ๊ฐ์ ๋นํ๋ฉด ๊ฐ์ด ๋ค์ ๊ฐ์ํ๋๋ฐ, ์ด๋ ๊ฒ ๋ค๋ฅธ ์์๋ค์ ํต์ ํ๊ณ ๋๋ฉด ์ถ์ ์ ์ํฅ๋ ฅ์ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ํ๊ฒ ๋๋ค.
โฃ Omitted variable or Confounding Bias
• ๋ชจํ์์ ๋ชจ๋ ๊ต๋ ๋ณ์๋ฅผ ๊ณ ๋ คํ ๊ฒฝ์ฐ OVB ๊ฐ ์๋ค๊ณ ๋งํ๋ค.
• ๊ต๋๋ณ์๋ ์ฒ์น์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ์ ๋ฐํ๋ ๋ณ์์ด๋ค.
• IQ-๊ต์ก-์๊ธ : Postivie bias ์์
• ๊ฒฝ์ฐฐ๋ ฅ-ํญ๋ ฅ์ฌ๊ฑด-๋ฒ์ฃ์จ : Nevative bias ์์
• ํ๊ท๋ถ์์ ๊ต๋๋ณ์ W๋ฅผ ๊ณ ์ ํ๊ณ T์ ํจ๊ณผ๋ฅผ ๋น๊ตํ์ฌ ๊ต๋๋ณ์์ ํจ๊ณผ๋ฅผ ๋ณด์ ํ๋ค. W๊ฐ ์ฌ์ ํ T์ Y๋ฅผ ์ ๋ฐํ๊ณ ์์ผ๋, ๊ทธ ๊ฐ์ด ๊ณ ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ T์ Y์ ๋ณํ์ ์ํฅ์ ์ค ์ ์์ ๋ฟ์ด๋ค.
'1๏ธโฃ AIโขDS > ๐ฅ Casual inference' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[The Brave and True] 7. Beyond Confounders (0) | 2023.06.29 |
---|---|
[The Brave and True] 6. Grouped and Dummy Regression (0) | 2023.06.28 |
์ธ๊ณผ์ถ๋ก ์ ๋ฐ์ดํฐ ๊ณผํ - ์ธ๊ณผ์ถ๋ก ์ ์ํ ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ (0) | 2023.06.26 |
[The Brave and True] 4. Graphical causal model (0) | 2023.06.26 |
[The Brave and True] 3. The-Most-Dangerous-Equation (0) | 2023.06.22 |
๋๊ธ