Data/인과추론

[실무로 통하는 인과추론] 3. 그래프 인과모델

Derek Grey 2024. 10. 27. 13:26
반응형

 

 

 

 

 

 

 

 

해당 내용은 실무로 통하는 인과추론을 참고, 정리하였음을 밝힙니다.

 

0. 그래프 인과모델

그래프 모델은 인과추론 문제를 구조화하여, 식별 가정을 명쾌하고 시각적으로 표현하는 방법입니다. 1장에서 했던 인과추론 방법 (데이터로 매개변수를 추정하지 않고) 그래프로 식별을 하는 법을 알 수 있습니다. 흔히 식별을 방해하는 편향의 원인 두 가지와 인과 그래프 구조를 바탕으로 인과추론을 할 수 있는 법을 배울 수 있습니다. 

 구조적 인과모델(Structual causal Model) = SCM 이라는 용어로 인과추론을 공부하는 사람들은 그래프 인과모델 용어를 사용합니다. 이는 인과방정식(causal equation)으로 구성됩니다.

 

 

1. 인과관계 시각화

 

교차 판매 이메일이 전환에 미치는 영향을 추정하는 데이터( 처치 T는 교차 판매 이메일, 결과 Y는 고객이 신규제품으로의 전환 여부)

 

이 사례에서 T가 무작위로 배정되었을시, 처치는 잠재적 결과와 독립이라고 볼 수 있으니 연과관계를 인과관계로 만듭니다. 그렇지만, 단지 데이터만 보고 독립성 가정이 성립한다고 판단하면 안됩니다. 반드시 무작위 처치가 적용되어야 한다는 것 이죠.

 

뿐만 아니라, 인과 그래프를 DAG(Dag Acyclic graph) 라고도 부릅니다.

 

import graphviz as gr

g_cross_sell = gr.Digraph()

g_cross_sell.edge("U", "conversion")
g_cross_sell.edge("U", "age")
g_cross_sell.edge("U", "gender")

g_cross_sell.edge("rnd", "cross_sell_email")
g_cross_sell.edge("cross_sell_email", "conversion")
g_cross_sell.edge("age", "conversion")
g_cross_sell.edge("gender", "conversion")

g_cross_sell

 

 

위와 같이 각각의 변수(노드)는 확률변수이고, 화살표 엣지를 통해 원인의 방향을 표시할 수 있습니다. 전환의 원인은 이메일, U가 나이, 전환, 성별등 변수의 원인임을 나타내고 있습니다. 

 

 

 

우리가 인지해야 할 사실은 위의 나이와 성별 등 변수는 그래프 안에 없을수도 있다는 점 입니다. 이는 우리가 세상에 있는 모든 변수를 다 관측할수가 없고, 두 변수사이의 직접적인 인과관계가 없다고 가정하는 것 입니다. 따라서, 결국 처치(Treatment) 와 Y(Conversion) 에 대한 원인이 없다고 가정하는 그래프라 생각할 수 있습니다. 

 

 

1-1. 사슬 구조 

인과관계 그래프에는 다양한 그래프 구조가 있습니다. 

그 중 첫째는 사슬(chain) 구조가 있습니다. T는 M의 원인이 되고, M은 Y의 원인이 되는 구조 입니다. 중간 노드(Intermediate Node)는 T와 Y의 관계를 매개하는 매개자(Mediator) 라고 합니다. 

 

 

 

 

위와 같은 사슬 구조에서, 인과관계는 > 문제해결력 > 승진 화살표 방향으로 흐르지만, 인과관계는 양 방향으로 흐릅니다. 치기 때문에 승진이 인과추론 지식과 연관되고 인과추론 지식도 승진과 연관되어 있습니다. 이렇게 두 변수가 연관되면 두 변수는 독립이 아니다(T/ㅗY) 라고 표현합니다.

 


여기서 매개자(Mediator)를 고정(=특정 변수의 값을 일정하게 유지하면서 다른 변수들 간의 관계를 관측, 조건부로 설정) 하는 방법으로 사슬구조를 해부합니다. M에 대한 조건부라고 표현한다고 하네요. 이 경우 종속성(dependence)가 차단(block) 됩니다. 그래서 M이 주어졌을 때(conditional) T와 Y는 독립입니다. TㅗY | M

 

 

 

 

위 그래프의 조건부가 무엇을 의미하는지 알기 위해선, 문제해결에 대한 조건부를 생각하면 쉽습니다. 문제 해결능력이 동일한 사람들을 살펴볼 시, 어떤 사람이 인과추론에 능숙하는지 아는 것만으로는 승진 가능성에 대해 알 수 없습니다.

 

일반적으로 사슬 그래프에서 M을 조건부로하면 T에서 Y로 흐르는 연관성이 위와 같이 차단됩니다(T/ㅗY)

하지만, M이 주어진(conditonal) 한 경우는 (TㅗY|M) 이와 같다고 수식적으로 표현합니다.

 

1-2. 분기 구조 

 

분기(folk) 구조는 공통 원인(common cause)가 존재합니다. 같은 변수가 그래프 아른쪽 다른 두 변수의 원인이 됩니다. 분기 구조에서 연관성은 화살표 반대 방향으로 흐릅니다.

 

g = gr.Digraph()


g.edge("X", "Y")
g.edge("X", "T")
g.node("X", "X")

g.edge("statistics", "causal inference")
g.edge("statistics", "machine learning")

g

 

 

 

통계학 덕분에 인과추론과 머신러닝에 대해 알게 되어도, 인과추론을 알아도 머신러닝에 도움이 되지 않고 그 반대도 마찬가지 이므로 두 변수 사이에 화살표가 없는 것이죠. 누군가의 통계 지식 수준을 모르더라도 인과추론을 잘 알면, 머신러닝도 능숙할 가능성이 높습니다. 인과추론을 잘 하기 위해선? 통계를 잘 해야 하죠. 그렇다면 머신러닝도 잘 할 가능성이 높

 

분기 끝에 있는 변수들은 서로의 원인이 아니더라도 같은 원인으로 발생하므로 함께 움직입니다. 인과추론에서는 처치와 결과 사이에 공통 원인이 있을 때, 그 공통 원인을 교란 요인(confounder) 라고 부릅니다.

 

위와 같은 분기 구조에서는 공통 원인을 공유하는 두 변수는 종속이지만, 공통 원인이 주어지면 독립입니다. 일반적으로 조건이 없는 경우 다음과 같이 수식으로 표현한다고 합니다. (T/ㅗY) 하지만, X가 주어지면 (TㅗY |X) 으로 표현한다고 합니다.

 

1-3. 충돌부 구조

 

충돌부 구조(Collider) 는 두 노드가 하나의 자식(child)을 공유하지만, 그들 사이에 직접적인 관계가 없는 경우입니다. 두 변수가 공통의 효과를 공유하는 것 입니다. 공통 효과는 두 개의 화살표가 충돌하므로 충돌부라 한다고 합니다.

 

 

충돌부 구조에서 두 부모(parent) 는 독립입니다. 승진은 통계와 아부를 통해 승진을 하게 됩니다. 만약, 어떤 사람이 승진을 했다면 통계가가 좋거나 아부가 좋거나 둘 중 하나입니다. 만약 통계를 못한다면? 아부를 잘해서 승진이 되었겠죠. 확률변수가 노드이기 때문에 이렇게 설명이 됩니다. 한 가지 원인이 이미 효과를 설명하므로, 다른 원인의 가능성이 낮아지기 때문입니다. 종종 다른 요인에 의해 설명되는 현상이라고도 합니다.

 

충돌부에 조건부를 두면 연관 경로가 열리며 부모 노드의 변수들은 종속이 됩니다. 조건부로 두지 않으면 경로가 닫힌 상태로 유지 됩니다.(TㅗY), X가 주어지면 (T/ㅗY) 와 같다고 합니다.

 

중요점은 충돌부에 대한 조건부 대신(직접 or NOT) 충돌부의 효과에 조건부를 두어 동일한 종속 경로(dependence path)를 열 수 있다는 점 입니다. 

 

 

해당 충돌부의 원인을 조건부로 해도, 충돌부 원인들은 종속이 됩니다. 승진 정보를 모르지만, 높은 연봉(X2) 정보를 안다면 통계지식과 아부는 종속적인 관계가 됩니다. 

 

1-4. 연관성 흐름 차트

 

import networkx as nx

model = nx.DiGraph([
    ("C", "A"),
    ("C", "B"),
    ("D", "A"),
    ("B", "E"),
    ("F", "E"),
    ("A", "G"),
])

 

 

위 그래프는 우리가 위에서 배운 사슬, 분기, 충돌에 대한 노드간의 연관성을 담고 있습니다. 그리고, 여기서 우리는 d_sepearated(D-분리는 그래프에서 두 변수간의 독립성을 표현하는 또 다른 용어). 로 독립성을 판단 할 수 있습니다. 

 

print("Are D and C dependent?")
print(not(nx.d_separated(model, {"D"}, {"C"}, {})))

print("Are D and C dependent given A?")
print(not(nx.d_separated(model, {"D"}, {"C"}, {"A"})))

print("Are D and C dependent given G?")
print(not(nx.d_separated(model, {"D"}, {"C"}, {"G"})))

 

1. D와 C는 종속인지?

2. E가 주어진 경우, G와 F는 종속일지? 

 

위 같은 질문, 그리고 관측된 집합(A)에 추가하면 두 변수간의 독립성을 알 수 있습니다. 예를 들어, D와 G는 연관성은 연쇄적으로 흐르므로 D와 G는 독립적이지 않습니다. 그러나, 매개자 A를 조건으로 두면 연관성 경로는 차단됩니다.

print("Are A and B dependent?")
print(not(nx.d_separated(model, {"A"}, {"B"}, {})))

print("Are A and B dependent given C?")
print(not(nx.d_separated(model, {"A"}, {"B"}, {"C"})))

 

 

A,B,C 는 분기 구조이고 C는 공통 원인입니다. 분기를 통해 연관성이 흐름을 알기 때문에 A와 B는 독립이 아닙니다. 그러나, 공통원인을 조건으로 둔다면 연관성 경로는 차단됩니다.

 

print("Are G and F dependent?")
print(not(nx.d_separated(model, {"G"}, {"F"}, {})))

print("Are G and F dependent given E?")
print(not(nx.d_separated(model, {"G"}, {"F"}, {"E"})))

 

G와 F의 구조 또한 알 수 있습니다. E를 조건부로 두면 연관성이 충돌부로 흐르고 경로가 열리며 G와 F가 연결됩니다. 이렇게 독립성을 확인할 수 있습니다. 

 

 

 

분기 구조 그래프를 통해 배운 걸 활용해보겠습니다. 컨설팅과 기업 미래 실적 사이에 두 가지 흐름이 연관되어 있고, 연관관계가 인과간계가 아닌 이유를 확인할 수 있습니다. 이전 6개월 수익(X)는 Consultancy(T) 과 Profi_next(Y) 에 각 원인이 되기 때문이죠. 두 가지 흐름이 관측됩니다.

 직접적인 인과경로와 공통 원인때문에 교란 받는 비인과 경로(non-casual path)가 존재합니다. 이 비인과 경로를 

back dootpath(뒷문 경로) 로 표현합니다. 컨설팅과 회사 실적간의 관측된 연과관계를 인과관계만으로 설명할 수 없는 것 입니다. 이전 6개월 수익이과 컨설팅 모두 6개월 후의 미래 실적에 영향을 미치기 때문이죠.

 

2. 식별 재해석

무작위 배정이 없을시 실험군과 대조군을 서로 비교할 수 없기 때문에, 인관계를 찾기 어려운 이유를 알아봤는데요. 위에서도 고가의 컨설턴트를 고용하는 회사는 대체로 고용하지 않는 회사보다 일반적으로 과거 실적이 더 좋을 수 있습니다. (비용이 들어가기 때문이겠죠)? 그리고 이는 우리가 배운 편향(Bias)가 적용 됩니다.

 

중요한 것은, 이 편향을 없애서 ATT(Treatment 적용 그룹) 간의 차이를 파악하는 것이죠. 식별은 그래프 모델에서의 독립성과 관계가 있습니다. 그래프를 활용해서 처치와 결과간의 인과관계를 분리하는 과정이죠. 기본적으로 식별 단계에서 바람직하지 않은 모든 연관성을 차단합니다. 

 

 

이전 6개월간의 수익이 컨설팅과 이후 6개월간의 수익에 모두 영향을 미치기 때문에 편향이 발생합니다. 이러한 비인과적 연결 흐름을 또한 뒷문 경로(backdoor path) 라고 합니다. T와 Y 사이의 인과관계를 식별하려면 두 경로를 차단해 인과 경로(causal graph)를 하나만 남겨야 합니다. 이전 6개월간의 수익이 공통 원인이기 때문에, 이 과거 실적을 조건으로 하여 해당 경로를 닫는 것(편향제거) 입니다.

 

위와 같이 공통 원인을 조건부로(차단하여) 비인과 연관성(noncausal association) 흐름을 차단한 것 인데요.

 

결과적으로 과거 실적이 비슷한 회사들의 그룹을 살펴보고 해당 그룹내에서 컨설턴트 여부에 따른 회사의 미래 실적을 비교하면, 그 차이는 전적으로 컨설턴트 때문에 발생했다고 볼 수 있습니다.

 

 

과거 실적이 비슷한 실험군과 대조군을 가지고 컨설팅 여부를 비교하여, 두번째 원인(편향을 제거) 하는 것이 그 첫단계입니다. (Y_0, Y_1) ㅗ T | X 으로 표현할 수 있습니다.

 

그리고, 조건부 독립성 가정(CIA) 이란 용어가 나오는데요. 이는 공변량 X 수준이 동일한 대상(회사)을 비교하면 잠재적 결과는 평균적으로 같음을 말하는 것 입니다. 즉, 공변량 X 값이 동일한 대상을 보면 처치가 마치 무작위로 배정된 것 처럼 보이는 것을 말합니다. 또한, 독립성 가정은(무시가능성, 외생성, 교환가능성) 등 다양한 이름으로 불린다고 합니다.

 

처치가 X 그룹내에서 마치 무작위로 배정된 것처럼 보인다면, X로 정의된 각 그룹내에서 실험군과 대조군을 비교하고 각 그룹의 크기를 가중치로 사용해서 해당 결과의 평균을 구하는 (보정공식 = 조건부 원칙)으로 조건부 독립성 가정도 관측할 수 있다고 합니다.

 그래프에서 비인과 경로를 통한 연관성 흐름을 X에 조건부로 두어 차단하면 ATE와 같은 인과

 

추정량을 식별할 수 있습니다. 교란원인을 보정하며 뒷문 경로를 차단하는 뒷문 보정이라고도 불린다고 하네요.

 

 

보정을 할 때, 양수성 가정(positivity) 가정도 중요합니다. Treatment 와 Outcome 사이의 차이를 X에 따라 평균을 내므로, X의 모든 그룹에 실험군과 대조군의 실험 대상이 반드시 존재해야 합니다. 그렇지 않으면 그룹간의 차이를 정의할 수 없기때문이죠. 이는 공통 지지, 중첩과 같은 이름으로도 불립니다.

 

3. 교란편향

 

편향의 첫번째 원인은 주로 교란입니다. 이는 대개 비인과적으로 연관성이 흐르는 열린 뒷문 경로가 있을 때, 발생합니다. 이는 일반적으로 처치와 결과가 공통 원인을 공유하기 때문입니다. 교란 편향(Confounding Bias) 을 보정하려면 처치와 결과의 공통 원인을 보정 해야 합니다.

 그러나, 공통 원인을 항상 보정 할 수는 없습니다. 원인을 알아도 측정할 수 없는 정성적 지표가 대변할 수 있기 때문이죠.

 

 

 

위와 같이, 관리자에게 새로운 교육 프로그램을 시켰을 때(T) -> 관리자의 참여도를 높인다(Y) 의 인과추론을 알고 싶다고 가정해 보겠습니다.

 

 

그러나, 위와 같이 처치와 결과 사이의 관계에 교란이 존재합니다. 따라서,  교란 편향 때문에 처치가 결과에 미치는 인과 효과를 식별할 수 없기 때문이죠. 그러나 교란 요인인 관리자 자질에 대한 대리변수로 사용할 수 있는 다른 측정 변수들이 있습니다. 이 변수들은 뒷문 경로에는 없지만, 통제시 편향을 줄이는데 도움이 됩니다. 이러한 변수를 종종 대리 교란 요인이라고 부른다고 하네요. 관리자의 자질을 측정하긴 힘들지만, 근속기간이나 교육 수준과 같은 원인과 팀의 이직률이나 성과와 같은 영향을 측정할 수 있습니다. 이러한 대리 변수를 통제하는 것만으로도 편향을 완전히 제거하기 힘들지만 편향을 줄이는데는 확실히 도움이 됩니다.

 

그리고, 교란편향을 피하는데는 랜덤(무작위 처치) 로 해결할 수 있습니다.

 

그리고, 선택편향 보정도 필요합니다. 선택편향은 실험군과 대조군 사이의 결과 차이에 자발적인 혹은 고객의 의지치에 따른 결과 차이가 존재함을 의미합니다. 

 

4. 요약

해당 장에서는 인과추론 식별 부분에 중점을 두고 있습니다. 그래프 모델을 활용하여 변수간의 흐름을 관측하는데 초점을 두고 있습니다. 식별이 그래프에서 비인과 흐름으로 부터 인과적 흐름을 분리하는 것을 배웠습니다.

 그리고, 무작위 실험을 하는 경우 그래프에 개입하거나 일부 변수에 조건부를 두어 비인과 연관성 경로를 차단할 수 있었습니다. networkX와 같은 베이지안 네트워크 라이브러리로 노드간의 연관성을 확인할 수 있습니다. 

 교란 편향 확인을 위해 그래프에서 인과 경로를 제거한 후, 처치 노드와 결과 노드가 여전히 연결되는지 확인할 수 있습니다. 그리고 연결된다면 닫아야 하는 뒷문 경로가 있다는 것을 의미합니다.

 교란편향을 바로 잡기 위해서는 직접 또는 대리 변수를 활용해 공통 원인을 보정해야 합니다. 혹은 무작위 실험으로 교란 편향을 제거할 수 있습니다. 그리고, 선택편향은 실험으로도 해결되지 않으므로 위험하고 직관적이지 않고 인과 관계를 밝히기 어려울 수 있다고 말합니다.

 

 

 

 

반응형