일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 예제
- Python
- Instrumental Variable
- 잔차의 성질
- backdoor adjustment
- 네이버 뉴스
- 사영
- 교란변수
- simple linear regression
- 인과 추론
- OVB
- 머신러닝
- 교란 변수
- LU분해
- 누락편의
- confounder
- 인과추론
- least square estimation
- 크롤링
- Sharp RD
- HTML
- 최소제곱법
- 통계
- residuals
- rct
- 선형대수
- 단순선형회귀
- causal inference
- 회귀불연속설계
- Omitted Variable Bias
- Today
- Total
Always awake,
인과 추론을 어렵게 하는 요소(Collider) 본문
앞의 포스팅을 읽고 오시는 것이 좋습니다 :)
앞선 포스팅에서 원인 변수와 결과 변수와의 관계(Association)은 두 가지로 나눌 수 있다고 하였습니다.
- Causal Association : 분석가가 알고 싶어하는 원인 변수가 결과 변수에 미치는 인과 효과
- Non-Causal Association : 외부 영향을 의미
그리고 두 사건을 단순히 비교하여 얻은 상관 관계는 위의 두 가지 Association이 합쳐진 것이므로 실제 인과 효과 추정을 위해서는 Non-Causal Association을 제거해야 한다고 소개드렸습니다. 그리고 대표적으로 Non-Causal Association을 만드는 "교란 변수(Confounder)"에 대한 개념과 이 영향을 제거하기 위한 방법을 설명드렸습니다.
- 교란 변수에 의한 Non-Causal Association을 제거하기 위해서는 교란 변수를 통제한 상태에서 원인 변수와 결과 변수를 비교해야 함
- 변수를 통제하기 위해서는 회귀식에 독립항으로 추가하면 됨
본 포스팅에서는 원인 변수와 결과 변수 간 인과 관계 추정을 어렵게 만드는 Collider에 대해 설명드리겠습니다.
Collider란?
collider는 원인 변수와 결과 변수의 영향을 동시에 받는 변수를 의미합니다. 두 변수의 영향이 하나로 모인다는 의미에서 Collider라는 용어를 사용하는 것 같습니다. collider 가 존재하면 $X$ → $C$← $Y$ path로 원인 변수($X$)와 결과 변수($Y$) 간에 Non-Causal Association이 생기게 됩니다. 그렇다면 이를 어떻게 제거할 수 있을까요?
결론을 말씀드리면 Collider에 의한 Non-Causal Association을 제거하기 위해서는 Collider를 통제하지 말아야 합니다. 원인 변수와 결과 변수의 영향을 동시에 받은 결과이기 때문에 이를 통제하는 경우 원인 변수와 결과 변수 간 특정 종속 관계가 생기게 됩니다. collider에 대한 관계를 만족하는 샘플만 남게 되는 것이죠. 이는 원인 변수와 결과 변수의 인과 관계를 확인하기 위해 사용해야 할 전체 샘플을 사용하지 못하게 만들어 편향을 발생시킵니다. 이를 collider bias라고 합니다.
그렇다면 확률 계산을 통해 collider를 통제한 경우와 통제하지 않은 경우 각각 원인 변수와 결과 변수가 독립이 되는지 확인해보겠습니다.
우선 위의 그림처럼 Collider가 존재하는 상황에서 확률을 계산하면 다음과 같습니다.
bayesian network factorization
- $p(X,Y,C) = p(C|X,Y)p(Y|X)(X)$
- 여기서 $X$는 $Y$에 직접적인 영향을 미치지 않으므로 $p(Y|X)=p(Y)$가 됩니다.
- $p(X,Y,C)=p(C|X,Y)p(Y)(X)$
1) Collider를 통제하는 경우(collider C에 대한 조건부 확률)
- bayesian network factorization에 의해 도출된 식을 대입
- $p(X,Y|C) = \large{\frac{p(C|X,Y)p(Y)(X)}{p(C)}}$
- 즉, collider $C$를 통제한 상황에서는 $X$,$Y$가 독립이 되지 않습니다.(Non-Causal Association의 영향이 존재하게 됩니다.)
2) Collider를 통제하지 않는 경우(marginalizing을 통해 계산)
- bayesian network factorization에 의해 도출된 식을 대입
- $p(X,Y) = \sum_{C}{p(C|X,Y)P(Y)(X)} = p(Y)(X) \sum_{C}{p(C|X,Y)} = p(Y)(X) * 1 = p(Y)(X)$
- 즉, collider $C$를 통제하지 않으면 $X$,$Y$는 독립입니다.(Non-Causal Association의 영향이 사라집니다)
Collider 영향 제거 예제(1)
예제를 통해 확인해보겠습니다. 아래와 같이 원인 변수가 결과 변수에 미치는 인과 관계는 -2이고 원인 변수는 collider에 5만큼, 결과 변수는 collider에 15만큼 인과 영향을 미치고 있습니다. 회귀식을 이용하여 원인 변수($X$)가 결과 변수($Y$)에 미치는 -2의 영향을 추론하기 위해서 Collider를 통제한 경우와 통제하지 않은 경우의 결과를 확인해봅니다.
그래프에 맞게 데이터를 생성합니다.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.formula.api as sm
np.random.seed(777) # 동일한 결과를 위해 시드 설정
num = 500 # 데이터 수
X = np.random.normal(size = num)
# Y는 X에 영향을 받습니다.
Y = -2.0 * X + np.random.normal(size = num)
# C(Collider)는 X와 Y의 영향을 받습니다.
C = 40.0 * X + 5.0 * Y + np.random.normal(size = num)
data = pd.DataFrame({'X' : X, 'C' : C, 'Y' : Y})
Collider를 통제하여 $X$가 $Y$에 미치는 인과 관계 추정
Collider를 통제하기 위해서는 회귀식에 독립항으로 Collider를 추가하면 됩니다. 그 결과 $X$가 $Y$에 미치는 영향은 실제 인과 관계인 -2가 아니라 다른 값이 나오는 것을 알 수 있습니다. 위의 조건부 확률에서 도출한 것처럼 Collider를 통제하는 경우 특정 종속 관계가 생겨 Collider에 의한 Non-Causal Association이 제거되지 않는 것입니다.
# C를 통제하여 X가 Y에 미치는 인과 관계 추정
sm.ols('Y ~ X + C', data).fit().summary()
Collider를 통제하지 않고 $X$가 $Y$에 미치는 인과 관계 추정
이번에는 Collider를 통제하지 않고 인과 관계를 추정한 결과입니다. $X$의 회귀 계수는 -1.9960으로 $X$가 $Y$에 미치는 실제 인과 효과인 -2에 근접해 있는 것을 알 수 있습니다.
# C를 통제하지 않고 X가 Y에 미치는 인과 관계 추정
sm.ols('Y ~ X', data).fit().summary()
Collider 영향 제거 예제(2)
더 극적인 예를 들어보겠습니다. 위와 동일하게 원인 변수($X$)와 결과 변수($Y$)가 Collider($C$)에 미치는 영향은 각각 5, 15로 동일하고 원인 변수와 결과 변수 간 인과 관계가 없는 경우로 재구성해봅니다.
여기서 우리가 인과 관계를 추정하였을 때 유의하지 않다고 나오면 제대로 추정한 것입니다.
데이터 생성
np.random.seed(777) # 동일한 결과를 위해 시드 설정
num = 500 # 데이터 수
X = np.random.normal(size = num)
# 이번에는 X가 Y에 인과 영향을 미치지 않습니다.
Y = np.random.normal(size = num)
# C(Collider)는 X와 Y의 영향을 받습니다.
C = 40.0 * X + 5.0 * Y + np.random.normal(size = num)
data = pd.DataFrame({'X' : X, 'C' : C, 'Y' : Y})
Collider를 통제하여 $X$가 $Y$에 미치는 인과 관계 추정
실제로 $X$와 $Y$ 사이에 아무런 인과 관계가 존재하지 않지만, Collider($C$)를 통제하여 추정하자 -7.6492라는 영향이 있는 것으로 나타났습니다. 심지어 p-value는 0.000으로 영향이 매우 유의하다고 나옵니다. 이는 $X$ 와 $Y$ 사이에 아무런 영향이 없음에도 불구하고 Collider를 잘못 통제하여 발생한 Collider bias로 인한 결과입니다.
# C를 통제하여 X가 Y에 미치는 인과 관계 추정
sm.ols('Y ~ X + C', data).fit().summary()
Collider를 통제하지 않고 $X$가 $Y$에 미치는 인과 관계 추정
Collider를 통제하지 않자 비로소 $X$가 $Y$에 미치는 인과 관계가 올바르게 나왔습니다. 실제로 아무런 인과 관계가 없기 때문에 $X$의 회귀 계수의 p-value가 0.933으로 매우 높게 나왔고 이는 영향이 유의하지 않음(영향이 없음)을 의미합니다.
# C를 통제하지 않고 X가 Y에 미치는 인과 관계 추정
sm.ols('Y ~ X', data).fit().summary()
마치며
이로써 인과 효과 추정을 방해하는 요소인 Collider에 대해 살펴보았고, 올바른 인과 효과 추정을 위해서는 Collider를 통제하면 안된다는 것을 수식과 예제를 통해 확인해보았습니다.
▼ 글이 도움이 되셨다면 아래 클릭 한번 부탁드립니다 :) ▼
'인과추론(Causal Inference)' 카테고리의 다른 글
[인과 추론 발표] 2021 Summer Session On Causal Inference (0) | 2021.07.16 |
---|---|
backdoor adjustment (0) | 2021.07.12 |
인과 추론을 어렵게 하는 요소(교란 변수) (2) | 2021.05.21 |
인과 추론이 어려운 이유 (0) | 2021.05.18 |
인과 관계를 잘 알아야 하는 이유 (2) | 2021.05.11 |