๐ ์ธ๊ณผ์ถ๋ก ๊ฐ์ธ ๊ณต๋ถ์ฉ ํฌ์คํธ ๊ธ์ ๋๋ค. ์ถ์ฒ๋ ์ฒจ๋ถํ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
โ 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 (1) | 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 |
๋๊ธ