본문 바로가기

AI

[Causal Analysis] PC 알고리즘

1. 인과발견의 개념과 필요성 

인과발견이란 데이터에서 변수 간의 인과관계를 밝히는 과정으로, 이 관계를 그래프 형태로 표현합니다. 
인과발견이 중요한 이유는 특정 변수가 다른 변수에 미치는 영향을 정확하게 파악해야 목표 변수의 값을 효과적으로 제어할 수 있기 때문입니다. 예를 들어, 제조 공정에서 이상이 발생했을 때 원인이 되는 변수를 명확하게 특정해야 해당 변수를 모니터링하며 이상을 감지하고, 필요할 경우 해당 값을 조정하여 문제 발생을 방지할 수 있습니다. 
일반적으로 변수 간의 관계를 확인할 때 상관관계를 이용하지였지만, 단순한 상관성만 확인해서는 인과관계를 명확히 밝힐 수가 없습니다. 예를 들어, X가 Y의 상관성이 높게 나타났을 때는 3가지 경우가 있을 수 있습니다.

(1) X가 Y의 원인이다. 
(2) Y가 X의 원인이다.
(3) X와 Y가 공통된 제3의 변수에 의해 영향을 받고 있다. 

따라서 상관관계만으로는 인과성을 확인할 수 없어 인과발견 알고리즘을 활용해야 합니다.
이제 대표적인 인과발견 알고리즘 중 하나인 PC 알고리즘에 대해 설명하겠습니다. 
 

2. PC 알고리즘 

2-1. PC 알고리즘 개념

PC 알고리즘(PC Algorithm)은 조건부 독립성(Conditional Independence) 테스트를 기반으로 인과 그래프를 학습하는 제약 기반(Constraint-Based) 알고리즘입니다. "조건부 독립성"이라는 제약 조건으로 변수 간의 관계가 결정되기 때문에 제약 기반 알고리즘이라는 이름이 붙었습니다. 
특정 변수가 독립적인 것으로 나타나면, 두 변수 사이에 직접적인 관계가 없다고 판단하기 때문에 독립성 테스트로 변수 간 관계를 확인하여 구조를 그리게 되고, 조건부 독립성을 통해 가짜 상관관계를 일으키는 혼란 변수(confounder)도 식별할 수 있습니다.

변수 간 여러 관계에 따른 독립성/조건부 독립성 테스트 결과

위 그림과 같이 변수 간 관계에 따라 조건부 독립성 테스트 결과가 다르게 나타나기 때문에 PC 알고리즘의 핵심 아이디어는 조건부 독립성 테스트를 이용해 전체 변수들의 관계를 그래프로 그리는 것입니다.  

2-2. 필요 가정

PC 알고리즘에서 인과관계는 그래프의 화살표로 표현이 되는데, 이 관계를 인과관계라고 말하기 위해서는 3가지 가정이 필요합니다. 
가정 1.충실성(Faithfulness) 가정
충실성 가정이란, 데이터에서 관측된 독립성이 실제 인과구조에서 기인한 것이라고 가정하는 것입니다. 즉, '두 변수가 독립으로 나타나면 두 변수는 실제로 관계가 없다'라고 가정합니다. 이러한 가정을 하는 이유는 현실에서 종종 발생할 수 있는 (+) 영향과 (-) 영향이 동시에 적용되어서 독립으로 보일 수도 있는 '우연한 상쇄'의 가능성을 막기 위함입니다. 
구체적으로 아래 그림과 같이 A->B->D의 경로와 A->C->D의 경로로 A와 D는 연결되어 있습니다. 하지만 각각의 경로에서 (+1)의 효과와 (-1)의 효과가 발생하게 되면 둘의 효과가 상쇄되어 A와 D는 독립이라고 나타나게 됩니다. 충실성 가정은 이러한 우연한 상쇄를 방지합니다.

우연한 상쇄


가정 2.인과 마르코프(Causal Markov condition) 가정
각 변수는 부모 변수가 주어졌을 때 나머지 조상 변수들과는 독립적이라고 가정합니다. 즉, 특정노드는 직접적으로 영향을 주는 부모 노드에만 종속되고 나머지 조상 노드들과는 독립입니다. 예를 들어, 아래 그림을 보면 X3는 X2에만 직접적인 영향을 받고, X1으로부터는 간접적인 영향을 받고 있기 때문에 X1과 X3은 독립이라고 판단할 수 있습니다. 그렇기에 P(X3|X1, X2)가 P(X3|X2)로 변경하여 결합 확률 분포를 계산하면 됩니다. 

가정 3. 잠재적 혼란 변수(Latent Confounders) 가정
인과성을 밝히기 위해서는 두 변수에 동시에 영향을 미치는 혼란 변수를 올바르게 식별하는 것이 제일 중요합니다. 예를 들어, 아이스크림 판매량과 익사자 수의 상관관계가 높게 나타났다고 해서 아이스크림 판매량이 익사자 수에 영향을 끼쳤다고 말할 수 없는 이유는 더위라는 공통 변수 때문입니다. 이렇듯 인과성은 없지만 두 변수에 공통으로 영향을 미쳐 혼란을 주는 변수를 혼란변수(confounder)라고 하는데, , PC 알고리즘은 데이터에 존재하는 모든 혼란 변수가 관측 가능하다고 가정합니다.  

혼란변수로 인한 가짜 상관관계

2-3. 적용 데이터

PC 알고리즘은 일반적으로는 선형 가우시안(Linear Gaussian) 데이터를 가정하지만, 비선형 데이터도 커널 기반 조건부 독립성 테스트를 통해 인과 구조를 어느 정도 식별할 수 있습니다. 


3. PC 알고리즘 인과발견 프로세스 

PC 알고리즘이 그래프를 그리는 과정은 전체 변수를 모두 연결시킨 후, 두 변수 씩 pairwise 하게 독립성 테스트를 진행해 독립적인 변수들의 연결을 삭제하고, 조건부 독립성 테스트로 v 구조를 식별해 방향을 식별합니다. v 구조로 식별하지 못하는 방향은 방향전파 규칙에 의해 방향을 결정하게 됩니다. 
PC 알고리즘이 어떻게 그래프를 그려나가는지, v구조는 어떻게 인과관계를 식별하는지 예시를 들어서 자세히 설명하겠습니다. 

  1. 완전 연결된 무방향 그래프(Complete Undirected Graph) 생성
    • 모든 변수 간에 엣지를 연결하여 완전한 무방향 그래프를 만듭니다. (그림 1B)
  2. 무조건 독립(Unconditionally Independent)인 변수 쌍의 엣지 제거
    • 조건을 주지 않았을 때 X⊥Y가 성립하면, X−Y 엣지를 제거합니다.
    • 두 변수 사이에 엣지가 없다면 그들 간에 직접적인 인과 관계가 없다고 판단합니다. 
    • 예제에서는 X−Y 엣지가 제거되어 (그림 1C)가 생성됩니다.
  3. 한 개의 조건부 변수(One-Variable Conditioning) 고려
    • 변수 Z를 사용하여 X⊥Y∣Z가 성립하면 X−Y 엣지를 제거합니다
    • (그림 1D)처럼 특정 엣지가 제거될 수 있습니다.
  4. 두 개 이상의 변수(Subset of Variables)로 조건부 독립 검정 수행
    • A⊥B∣{C,D}와 같은 다변수 조건부 독립성 검정을 수행하여 엣지를 추가 제거합니다.
    • 더 이상 제거할 엣지가 없을 때까지 반복합니다.
  5. v-구조(V-Structure) 방향 결정 
    • 조건부 독립성만으로는 인과 관계의 방향을 알 수 없습니다. 방향을 식별하기 위해 X->Z <-Y와 같은 v-구조를 이용합니다.
    • 세 개의 변수가 연결된 X−Z−Y에서 X와 Y는 독립적이지만, Z를 조건으로 하면 독립이 깨지는 경우 방향을 X→Z←Y로 결정하게 됩니다.
    • v-구조를 식별하는 이유는 3개 변수가 이어진 인과 마르코프 클래스에서 유일하게 방향을 식별할 수 있는 조건부 독립성 조건이기 때문입니다.
      • 예를 들어, X-Z-Y 구조에서 X와 Y는 종속(X⊥/⊥Y)이고  Z를 조건부로 했을 때 X와 Y가 독립(X⊥Y|Z) 일 때 그릴 수 있는 그래프는 3가지입니다.
  • 이렇게 같은 조건부 독립 관계를 가진 DAG끼리 묶어놓은 그림이 마르코프 동등 클래스(Markov Equivalence Class, MEC)입니다.
  • 조건부 독립성 테스트 결과 나올 수 있는 관계가 여러 개이기 때문에 각 변수 간 방향을 확정하기 어렵습니다. 하지만, 방향을 유일하게 식별할 수 있는, 그래프가 오직 한 개 그려지는 조건부 독립성 테스트가 바로 v 구조로 되어 있는 충돌부(collider)입니다. 그렇기에 PC 알고리즘은 이 관계를 우선적으로 탐색하여 엣지에 방향을 부여하게 됩니다.

6. 전파적 방향 결정(Orientation Propagation)

  • 기존에 방향이 결정된 엣지를 활용하여 나머지 방향을 추가적으로 정합니다.
  • 예제에서 방향 전파 규칙에 따라 Y→Z−W가 Y→Z→W로 변환됩니다. 
  • 방향 전파가 불가능한 경우 A -B - C와 같이 undirected 상태로 남아 있게 됩니다. 이 경우, 두 변수 간의 인과 관계를 정확히 구분할 수 없으며, 두 방향 모두 가능하다는 의미를 지닙니다. 

7. 최종 그래프 구성

  • 위 과정을 거쳐 완전한 방향성이 있는 DAG(Directed Acyclic Graph)를 생성하게 됩니다.
  • 단, 일부 엣지는 방향이 확정되지 않을 수도 있으며, 이 경우 해당 그래프는 CPDAG(Completed Partially Directed Acyclic Graph) 형태로 나타납니다.

4. Python 구현

PC 알고리즘을 지원하는 대표적인 라이브러리는 causal-learn, gcastle, pgmpy 등이 있습니다. 그중 causal-learn을 이용해 PC 알고리즘을 구현해 보도록 하겠습니다. 

# causal-learn 라이브러리 설치
pip install causal-learn
import numpy as np
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
from causal_learn.search.ConstraintBased.PC import pc
from causal_learn.utils.GraphUtils import GraphDrawer

# 1️⃣ 가상의 데이터 생성 (3개의 변수: X, Y, Z)
np.random.seed(42)
n_samples = 1000
X = np.random.normal(size=n_samples)
Z = 2 * X + np.random.normal(size=n_samples)  # X -> Z
Y = 3 * Z + np.random.normal(size=n_samples)  # Z -> Y

data = np.column_stack([X, Y, Z])
var_names = ['X', 'Y', 'Z']  # 변수 이름

# 2️⃣ PC 알고리즘 실행
cg = pc(data, alpha=0.05, verbose=True)

# 3️⃣ 그래프 시각화
G = nx.DiGraph()
for i, j in cg.G.graph.edges:
    G.add_edge(var_names[i], var_names[j])

plt.figure(figsize=(4, 3))
nx.draw(G, with_labels=True, node_color='lightblue', edge_color='gray', node_size=2000, font_size=12)
plt.show()

각 파라미터 설명

  • data: 분석할 데이터셋 
  • alpha: 독립성 테스트의 유의 수준 (p-value 임계값, 일반적으로 0.05 사용)
  • indep_test: 사용할 독립성 테스트 함수 (예: fisherz, chi_square 등 데이터 타입에 따라 맞춰 사용)
  • stable: True로 설정하면 PC-Stable 알고리즘을 사용하여 결과의 일관성을 높임
  • uc_rule: v-구조를 형성할 때 사용할 규칙 (예: 0, 1, 2)
    • 0(기본값) : uc_sepset 규칙을 사용하여 충돌체 방향 지정
    • 1 : maxP 규칙을 사용 (추가적인 독립성 검정 수행 후 결정)
    • 2 : definiteMaxP 규칙 사용 (충돌체와 비충돌체를 확실하게 구분)
  • uc_priority: v-구조 형성 시 우선순위를 결정하는 방법
    • -1(기본값) : uc_rule 설정을 그대로 따름, 우선순위 조정 없음.
    • 0(덮어쓰기) : 기존 충돌체가 있어도 새로운 충돌체로 덮어씀
    • 1(양방향 허용) : 충돌체 방향을 애매하게 남겨둠
    • 2(기존 충돌체 우선) : 기존 충돌체를 우선 유지 
    • 3(강한 충돌체 우선) : 더 신뢰할 수 있는 충돌체를 우선, p-value가 낮은 충돌체 먼저 설정 
    • 4(확실한 충돌체 우선) : 가장 확실한 충돌체를 선택
  • mvpc: 결측치가 있는 데이터를 처리하는 방법 지정
  • correction_name: 다중 검정 보정 방법 지정 (예: MV_Crtn_Fisher_Z)
  • background_knowledge: 사전 지식을 반영하여 특정 관계를 고정할 수 있도록 함
  • verbose: True로 설정하면 실행 과정의 상세 정보를 출력함
  • show_progress: True로 설정하면 진행 상황을 표시함


5. 장점 및 단점

PC알고리즘의 장단점은 다음과 같습니다. 

5-1. 장점

  • 독립성 테스트 방법을 지정하여 다양한 데이터 타입(이산형, 연속형, 비선형 데이터 등)에 적용 가능
  • 특정한 함수적 관계를 가정하지 않아 일반적인 데이터에 적용 가능

5-2. 단점

  • 잠재적 교란 변수가 없다고 가정하기 때문에 현실에서 숨겨진 교란 변수가 있을 경우 인과 관계를 명확히 식별하지 못할 수 있음.
  • 방향성을 완전히 결정하지 못해 확정하지 못한 방향성이 남아 CPDAG 형태로 표현될 수 있음. 
  • 충실성 가정이 강하며, 신뢰할 수 있는 결과를 얻기 위해 큰 샘플 크기가 필요. 

 


참고자료
Glymour, C., Zhang, K., & Spirtes, P. (2019). Review of Causal Discovery Methods Based on Graphical Models. Frontiers in Genetics, 10, 524. https://doi.org/10.3389/fgene.2019.00524