1 정의
두 개 이상의 변수가 같은 결과 변수를 가리키는 인과 다이어그램 구조 (Buisson, 2021, Ch.3).
A Y
╲ ╱
╲ ╱
C
C 가 collider — A 와 Y 의 화살표가 C 에서 “충돌” 한다.
“Collider” 는 입자 가속기 (Large Hadron Collider) 처럼 여러 입자 흐름이 한 점에서 만난다 는 의미.
CD 에서:
- 두 (이상) 의 화살표가 하나의 노드에서 만남 → 화살표들이 거기서 “충돌”
- 그 노드가 두 원인의 공통 결과 (effect)
| 구조 | 모양 | 비조건부 (no control) | 조건부 (control C/L) |
|---|---|---|---|
| Fork | A ← L → Y |
A, Y 에 가짜 상관 발생 | 가짜 상관 제거 |
| Collider | A → C ← Y |
A, Y 가 독립 (상관 없음) | 가짜 상관 생성 |
Collider 는 fork 의 거울 이미지. 행동이 정반대.
→ Fork 는 통제하면 좋고, Collider 는 통제하지 말아야 한다.
이 비대칭이 데이터 분석의 가장 큰 함정 중 하나다 — “모든 변수를 회귀에 넣자” 는 단순 직감이 collider 를 통해 새로운 편향을 만들 수 있음.
2 Collider 의 형식
2.1 C-Mart 아이스크림 맛 사례
C-Mart 매대가 바닐라와 초콜릿 두 맛만 판다고 하자.
TasteForVanilla TasteForChocolate
╲ ╱
╲ ╱
╲ ╱
QuantityOfIceCreamPurchased
- 바닐라 선호 (TFV) 가 강하면 아이스크림을 많이 산다.
- 초콜릿 선호 (TFC) 가 강하면 아이스크림을 많이 산다.
- 두 맛 선호는 서로 인과 관계 없음 (한 사람이 둘 다 좋아할 수도, 둘 중 하나만 좋아할 수도).
Quantity 가 collider — TFV 와 TFC 의 공통 결과.
각 화살표를 회귀로:
\[ \text{Quantity} = \beta_V \cdot \text{TFV} + \beta_C \cdot \text{TFC} + \varepsilon \]
비조건부 (Quantity 를 회귀에서 제외) 분석에서 TFV 와 TFC 의 상관 계수를 보면:
\[ \text{corr}(\text{TFV}, \text{TFC}) \approx 0 \]
(전체 인구에서 두 맛 선호는 독립으로 가정한 경우)
2.2 Collider 통제 시의 가짜 상관 — 시연
상황: 분석가가 “아이스크림을 많이 산 고객” 만 데이터로 추출 (Quantity ≥ 5 같은 조건).
이 부분 표본에서 TFV 와 TFC 의 상관을 보면:
\[ \text{corr}(\text{TFV}, \text{TFC} \mid \text{Quantity} \geq 5) < 0 \]
음의 상관이 발생.
해석: “고객이 아이스크림을 많이 사려면 두 맛 중 하나라도 강해야 한다” — 둘 다 약하면 표본에서 제외됨.
→ 표본에서 한 맛이 약하면 다른 맛이 반드시 강해야 함 (안 그러면 Quantity 5 미만으로 표본에서 빠짐) → 두 맛 사이 음의 상관 인공 생성.
영화 평론과 흥행 사례:
영화 평론 점수 ──→ 영화 인기 ←── 마케팅 예산
(collider)
- 좋은 영화 (평론 점수 ↑) → 인기 ↑
- 큰 마케팅 → 인기 ↑
- 평론 점수와 마케팅 예산 자체는 일반적으로 무관
분석가가 “인기 영화” (인기 = 1) 만 표본으로 분석하면:
“낮은 평론 점수의 영화가 마케팅 예산이 더 크다”
→ 인공 상관. 평론이 낮은데도 인기 있는 영화는 마케팅으로 끌어올렸을 가능성이 큼 → 평론 ↓ + 마케팅 ↑ 조합이 표본에 더 많이 들어옴.
따라서 “인기 영화 표본에서 평론과 마케팅이 음의 상관” 은 사실이지만 인과 관계 아님. 선택 편향 (Selection Bias).
의학 사례:
병1 ──→ 병원 입원 ←── 병2
(collider)
병원에 입원한 환자 표본에서 보면 병1 과 병2 가 음의 상관 — “병1 환자는 병2 가 적음” 처럼 보임.
실제로는 두 병의 인과 관계 없음 (또는 양의 상관). 병원 입원이라는 조건이 collider 를 통제해서 가짜 음의 상관을 만든 것.
→ Berkson 이 1946 년에 발견한 이 역설은 collider bias 의 원형.
2.3 Collider 의 학술적 함의
A → C ← Y 에서:
- A 의 효과를 추정할 때 C 를 통제하면 안 된다 — A → Y 의 직접 인과 효과를 가짜 상관이 오염시킴
- 회귀에 변수를 추가하는 단순 직감이 위험한 이유 — collider 일 가능성
분석가가 항상 자문해야 할 질문:
“이 변수가 분석 대상의 공통 결과 (collider) 인가, 공통 원인 (confounder/fork) 인가?”
답에 따라 회귀 포함 여부가 정반대.
3 세 구조의 동시 존재 — 한 CD 에 chain, fork, collider
SummerMonth ────→ IceCreamSales
│ ↑
│ │
↓ │
Temperature ──────────┘
│
└──→ IcedCoffeeSales
세 구조 모두 존재:
- Chain: SummerMonth → Temperature → IcedCoffeeSales (사슬)
- Fork: SummerMonth 가 Temperature 와 IceCreamSales 의 공통 원인 (포크)
- Collider: IceCreamSales 가 SummerMonth 와 Temperature 의 공통 결과 (충돌)
같은 노드가 다른 노드들과 다른 종류의 관계를 동시에 가질 수 있다.
- SummerMonth 는 IceCreamSales 의 직접 부모 (parent)
- 동시에 Temperature 를 거쳐 IceCreamSales 의 ancestor (간접 부모)
이 다중 역할은 분석을 복잡하게 만들지만 현실적인 인과 구조를 충실히 표현.
→ CD 가 복잡해 보이는 건 실제 인과 구조가 그만큼 복잡하기 때문. 단순화는 가능하지만 (chain collapsing 등) 복잡성을 부정하면 분석이 잘못됨.
4 Paths — 일반화된 경로
4.1 정의
두 변수 사이에 화살표를 따라 (방향 무관) 가는 경로. 단, 같은 변수를 두 번 거치지 않음.
SummerMonth ────→ IceCreamSales
│ ↑
↓ │
Temperature ──────────┘
│
└──→ IcedCoffeeSales
SummerMonth 와 IcedCoffeeSales 사이의 경로:
- Path 1 (chain): SummerMonth → Temperature → IcedCoffeeSales
- Path 2 (collider 통과): SummerMonth → IceCreamSales ← Temperature → IcedCoffeeSales
Path 의 정의가 “방향 무관” 인 이유는, 분석가가 경로 따라 변수를 통제할 때 의 효과가 방향에 무관하게 발생하기 때문.
- Chain (모두 같은 방향): 통제 → 경로 차단
- Fork (한 점에서 갈라짐): 통제 → 경로 차단
- Collider (한 점에서 만남): 통제 → 경로 개방 (역설)
→ 어느 방향이든 변수가 경로 위에 있으면 통제 효과가 있다. 따라서 경로의 정의에서 방향을 무시하고 일반화.
Backdoor Criterion (Pearl 의 인과 추론 이론) 의 핵심: “두 변수 사이 모든 비-인과 경로 (backdoor paths) 를 차단해야 인과 효과를 식별 가능.”
이 정의에서 “경로” 가 정확히 위 정의의 path. 방향 무관, 변수 중복 없음.
비즈니스 분석가가 “어떤 변수를 회귀에 포함할지” 결정할 때, 단순한 직감 (“이 변수는 confounder 같다”) 대신 backdoor path 를 모두 식별하고 차단하는 절차로 작업한다 (E-BUI5-2 에서 자세히).
4.2 Path 가 가르치는 분석 절차
CD 의 path 를 분석하면 다음이 보인다.
| 경로 종류 | 변수 통제 효과 |
|---|---|
| Chain 경로 (A → B → Y) | B 통제 → 차단 (간접 효과 제거) |
| Fork 경로 (A ← L → Y) | L 통제 → 차단 (가짜 상관 제거) |
| Collider 경로 (A → C ← Y) | C 통제 → 개방 (가짜 상관 생성) |
→ 변수의 역할 (mediator, confounder, collider) 에 따라 통제 효과가 정반대.
분석가가 회귀에 변수를 무작정 추가하면 (1) chain 의 mediator 통제 → over-adjustment, (2) collider 통제 → selection bias 등 새로운 편향. CD 와 path 분석 없이는 어떤 효과가 발생할지 모름.
5 Cycles — 순환 구조
5.1 정의
지금까지의 CD 는 DAG (Directed Acyclic Graph) — 화살표를 따라가다 같은 변수로 돌아오지 않음.
현실에서는 변수들이 서로 인과적으로 영향을 주고받는 경우가 많다 — 이를 cycle (순환) 이라 부름.
A ──→ B
↑ │
└────┘
또는 두 변수 간 상호 인과:
A ←──→ B (양방향 인과)
5.2 Cycle 의 두 흔한 원인
5.2.1 대체 효과 (Substitution Effect)
IcedCoffee ←──→ HotCoffee
상황: 어떤 손님은 아이스커피와 핫커피 중 하나를 선택. 이 주에 아이스커피를 많이 마셨으면, 핫커피를 적게 마실 수도 있고 (다양성 추구), 그 반대도 가능.
→ 두 변수는 서로 음의 인과 관계. 양방향.
경제학적 의미:
- 커피와 차의 가격 변동
- 우버와 택시
- Netflix 와 Disney+ 시청 시간
대체재가 있는 거의 모든 비즈니스에서 cycle 발생.
5.2.2 피드백 루프 (Feedback Loop)
NbCustomersWaiting ──→ AvgWaitingTime ──→ NbLinesOpen
↑ │
│ │
└───────────────────────────────────────┘
C-Mart 매장 시나리오:
- 손님이 많이 줄을 섬 (Customers ↑)
- 평균 대기 시간 증가 (WaitingTime ↑)
- 매니저가 새 계산대 오픈 (LinesOpen ↑)
- 새 계산대가 손님을 분산시켜 대기 시간 감소 (WaitingTime ↓)
- 손님이 빠르게 처리되며 줄도 감소 (Customers ↓)
- 다시 사이클…
이 cycle 은 자체 조절 (self-regulating) 시스템. 매니저의 반응이 시스템을 안정화.
다른 예:
- 광고 → 매출 → 마케팅 예산 (피드백)
- 사용자 활성도 → 콘텐츠 추천 → 사용자 활성도
- 가격 → 수요 → 가격 (시장 균형)
5.3 Cycle 처리 방법
5.3.1 시간 인덱싱 (Time-Indexing)
대기 줄 사례의 cycle 을 풀려면 시간 단위로 변수를 분리.
WaitingTime(t)
│
├─→ NbCustomersWaiting(t+15min)
│ │
├─→ NbLinesOpen(t+15min)
│ │
│ ↓
└─→ WaitingTime(t+15min)
각 변수가 시점 별로 독립 — cycle 이 사라짐.
회귀:
\[ \text{NbCustomers}(t+15) = \beta_1 \cdot \text{WaitingTime}(t) \]
\[ \text{NbLines}(t+15) = \beta_2 \cdot \text{WaitingTime}(t) \]
\[ \text{WaitingTime}(t+15) = \beta_3 \cdot \text{NbCustomers}(t+15) + \beta_4 \cdot \text{NbLines}(t+15) \]
Cycle 이 발생하는 이유: 변수 A 와 B 의 영향이 즉시 일어난다고 가정했을 때.
현실에서는 거의 항상 시간 지연이 있음. 매니저가 “줄이 길다” 를 인지하고 새 계산대 오픈하기까지 5~15분 걸림. 손님 대기 시간이 정착되기까지도 시간 걸림.
시간 단위를 쪼개면:
- t 시점의 A 는 t 시점의 B 에 영향 안 줌 (시간 차)
- t 시점의 A 는 t+5 시점의 B 에 영향 줌
- t+5 시점의 B 는 t+10 시점의 A 에 영향 줌
→ 모든 영향이 시간을 따라 한 방향으로만 흐름. DAG 가 됨.
이 분해는 진짜 비즈니스 시스템을 더 정확히 표현하기도 함 (즉시 효과 가정이 비현실적).
5.3.2 단순화 (Simplification)
Temperature → IcedCoffee → HotCoffee → IcedCoffee (cycle)
이 cycle 에서:
- Temperature → IcedCoffee 효과 (강함, \(\beta = 100\) 가정)
- IcedCoffee → HotCoffee 대체 효과 (중간, \(\beta = -0.3\) 가정)
- HotCoffee → IcedCoffee 역피드백 (약함, \(\beta = -0.05\) 가정)
분석가의 1차 근사: 가장 약한 화살표를 무시.
Temperature → IcedCoffee → HotCoffee
(HotCoffee → IcedCoffee 가지치기)
이 단순화된 CD 는 cycle 없음 → 정상 분석 가능.
오류 정도: 작음 (약한 피드백을 무시하므로).
→ 비즈니스 분석에서 1차 근사로 충분한 경우가 많음. 정밀 모형이 필요할 때만 cycle 을 시간 인덱싱·SEM 등으로 처리.
5.3.3 Structural Equation Modeling (SEM)
Cycle 을 정확히 처리하려면 SEM (Structural Equation Modeling) 같은 고급 기법이 필요.
- 변수들의 상호 영향을 동시 추정
- 안정 상태 (steady state) 를 가정하고 균형값 계산
- 시계열 데이터의 경우 VAR (Vector Autoregression) 등 사용
비즈니스 분석에서 이 정도까지 가는 경우는 많지 않음. 대부분 시간 인덱싱이나 단순화로 충분.
6 응용 — Collider 함정의 비즈니스 사례
6.1 사례 1: 채용 분석
고학력 ──→ 합격 ←── 좋은 인성
분석가: “합격자만 데이터로 추출 (현직 직원). 학력과 인성 점수 분석.”
발견: “고학력자가 인성 평가 점수 낮음.”
해석 함정: “공부 잘하는 사람은 인성이 부족하다.”
실제로는: 합격이라는 collider 통제로 인한 가짜 음의 상관. 합격하려면 (학력 OR 인성) 둘 중 하나가 좋아야 함 → 합격자 표본에서 둘이 음의 상관처럼 보임.
→ 합격하지 못한 지원자를 포함한 전체 지원자 집단에서 분석해야 진짜 학력-인성 관계를 봄.
6.2 사례 2: 마케팅 분석
가격 민감도 ──→ 광고 클릭 ←── 시간 여유
분석가: “광고 클릭한 사용자만 분석. 가격 민감도와 시간 여유 측정.”
발견: “광고 클릭자는 가격 민감도와 시간 여유가 음의 상관.”
해석 함정: “가격 민감한 사람일수록 시간 여유 없음.”
실제로는: 광고 클릭이 collider. 클릭하려면 (가격 민감 OR 시간 여유) 둘 중 하나가 충분해야 함.
→ 광고 클릭이 아닌 사용자도 포함해 전체 분석 필요.
6.3 사례 3: 의료 데이터
운동 ──→ 병원 방문 ←── 흡연
분석가: “병원에 정기 검진 오는 환자만 분석. 운동량과 흡연량 측정.”
발견: “운동량 많은 환자가 흡연량 더 많음.”
해석 함정: “운동이 흡연을 부추긴다.”
실제로는: 병원 방문이 collider. 정기 검진 오는 사람은 (운동으로 건강 의식 OR 흡연으로 건강 걱정) 둘 중 하나일 가능성.
→ 병원 방문 안 하는 사람 포함한 전체 인구 표본이 필요.
7 코드 예시 — Python 으로 Collider Bias 시뮬레이션
7.1 기본 시뮬레이션
import numpy as np
import pandas as pd
import statsmodels.api as sm
np.random.seed(42)
n = 5000
# 진짜 인과 구조: TFV 와 TFC 는 독립
tfv = np.random.normal(0, 1, n) # 바닐라 선호
tfc = np.random.normal(0, 1, n) # 초콜릿 선호
# Quantity 는 두 선호의 합 + noise
beta_V = 1.0
beta_C = 1.0
noise = np.random.normal(0, 1, n)
quantity = beta_V * tfv + beta_C * tfc + noise
df = pd.DataFrame({
"tfv": tfv,
"tfc": tfc,
"quantity": quantity,
})
# 비조건부 상관 (전체 인구)
corr_full = df[["tfv", "tfc"]].corr().iloc[0, 1]
print(f"=== 비조건부 ===")
print(f"전체 인구: corr(TFV, TFC) = {corr_full:.4f} (진짜값 0)")
# Collider 통제 — Quantity 상위 50% 만 추출
threshold = df["quantity"].median()
df_high = df[df["quantity"] > threshold]
corr_high = df_high[["tfv", "tfc"]].corr().iloc[0, 1]
df_low = df[df["quantity"] <= threshold]
corr_low = df_low[["tfv", "tfc"]].corr().iloc[0, 1]
print(f"\n=== Collider 통제 (Quantity 분할) ===")
print(f"많이 산 사람 (Q > median): corr = {corr_high:.4f} ← 음의 상관!")
print(f"적게 산 사람 (Q ≤ median): corr = {corr_low:.4f} ← 음의 상관!")예상 결과:
- 비조건부: corr ≈ 0 (진짜값)
- Collider 통제 (분할): corr ≈ -0.4 ~ -0.5 (가짜 음의 상관)
같은 데이터에서 분석 표본을 어떻게 잘랐느냐로 음의 상관이 나타남. 데이터 자체엔 그 상관이 없음.
이게 비즈니스 분석에서 가장 흔한 함정. “VIP 고객만 분석”, “활성 사용자만 분석” 같은 표본 추출이 collider 통제와 같은 효과.
→ 표본을 자를 때마다 “이 자르는 변수가 collider 인가” 자문해야.
7.2 회귀에 collider 추가 시뮬레이션
# Quantity 를 회귀에 추가하면?
np.random.seed(42)
n = 5000
tfv = np.random.normal(0, 1, n)
tfc = np.random.normal(0, 1, n)
quantity = tfv + tfc + np.random.normal(0, 0.5, n)
df = pd.DataFrame({
"tfv": tfv,
"tfc": tfc,
"quantity": quantity,
})
# 회귀 1: TFV ~ TFC (비조건부)
X1 = sm.add_constant(df["tfc"])
m1 = sm.OLS(df["tfv"], X1).fit()
print(f"=== 회귀 1: TFV ~ TFC (collider 무시) ===")
print(f" beta = {m1.params['tfc']:.4f} (진짜값 0)")
# 회귀 2: TFV ~ TFC + Quantity (collider 포함)
X2 = sm.add_constant(df[["tfc", "quantity"]])
m2 = sm.OLS(df["tfv"], X2).fit()
print(f"\n=== 회귀 2: TFV ~ TFC + Quantity (collider 통제) ===")
print(f" beta_TFC = {m2.params['tfc']:.4f} ← 음의 가짜 상관")
print(f" beta_Q = {m2.params['quantity']:.4f}")예상 결과:
- 회귀 1 (collider 무시): \(\beta_{TFC} \approx 0\) (정확)
- 회귀 2 (collider 추가): \(\beta_{TFC} \approx -0.5\) (가짜 음)
분석가가 단순히 “Quantity 도 통제하자” 며 회귀에 추가하면 TFV 와 TFC 사이 인공적인 음의 상관이 추정됨.
이 결과를 본 분석가의 잘못된 결론: “초콜릿 선호도가 강할수록 바닐라 선호도가 약함.”
→ 진짜는 “둘이 독립” 인데 collider 통제로 음의 상관이 만들어짐.
7.3 Cycle 의 시간 인덱싱 시뮬레이션
# 매장 대기 줄 cycle 시뮬레이션
np.random.seed(42)
T = 100 # 100 개 시간 step
# 초기값
n_customers = np.zeros(T)
wait_time = np.zeros(T)
n_lines = np.zeros(T)
n_customers[0] = 10
wait_time[0] = 5
n_lines[0] = 2
# 시간 따라 cycle 시뮬레이션
for t in range(1, T):
# 손님이 줄로 들어오기 (외부 input + 대기 시간 영향)
arrival = 5 + np.random.poisson(3)
n_customers[t] = max(0, n_customers[t-1] + arrival - n_lines[t-1] * 2)
# 매니저가 대기 시간 보고 라인 조정
if wait_time[t-1] > 6:
n_lines[t] = min(5, n_lines[t-1] + 1) # 라인 늘림
elif wait_time[t-1] < 3:
n_lines[t] = max(1, n_lines[t-1] - 1) # 라인 줄임
else:
n_lines[t] = n_lines[t-1]
# 새 대기 시간 계산
wait_time[t] = n_customers[t] / max(1, n_lines[t])
df_cycle = pd.DataFrame({
"t": range(T),
"n_customers": n_customers,
"wait_time": wait_time,
"n_lines": n_lines,
})
# t 시점 변수와 t+1 시점 변수 분리 (시간 인덱싱)
df_cycle["wait_time_lag"] = df_cycle["wait_time"].shift(1)
df_cycle["n_customers_lag"] = df_cycle["n_customers"].shift(1)
df_cycle = df_cycle.dropna()
# 회귀 1: 현재 손님 수 ~ 이전 대기 시간
X3 = sm.add_constant(df_cycle["wait_time_lag"])
m3 = sm.OLS(df_cycle["n_customers"], X3).fit()
print(f"=== Cycle 의 시간 인덱싱 회귀 ===")
print(f"NbCustomers(t) ~ WaitingTime(t-1)")
print(f" beta = {m3.params['wait_time_lag']:.3f}")원래 cycle:
NbCustomers ←──→ WaitingTime
이 직접 회귀는 reverse causality 로 인해 추정이 부정확.
시간 인덱싱 후:
NbCustomers(t-1) → WaitingTime(t-1) → NbCustomers(t) → ...
각 시점은 다른 시점에 영향을 주지만, 동시 시점 내에서는 cycle 이 없음. 회귀가 자연스럽게 처리.
→ 시계열 데이터가 있으면 cycle 처리는 어렵지 않다. 단지 lag 변수를 만들면 됨.
7.4 DAG 시각화 — 종합
import networkx as nx
import matplotlib.pyplot as plt
# 종합 CD: chain + fork + collider 모두 포함
G = nx.DiGraph()
G.add_edges_from([
("SummerMonth", "Temperature"), # chain 의 시작
("SummerMonth", "IceCreamSales"), # fork (또는 collider 일부)
("Temperature", "IcedCoffeeSales"), # chain 의 끝
("Temperature", "IceCreamSales"), # collider 일부
])
pos = {
"SummerMonth": (0, 1),
"Temperature": (1, 1),
"IcedCoffeeSales": (2, 1),
"IceCreamSales": (1, 0),
}
plt.figure(figsize=(10, 6))
nx.draw(G, pos,
with_labels=True,
node_color=["lightblue", "lightgreen", "yellow", "salmon"],
node_size=3000,
font_size=8,
arrows=True,
arrowsize=20,
edge_color="gray")
plt.title("Chain + Fork + Collider 모두 포함")
plt.tight_layout()
plt.savefig("cd_combined.png", dpi=80)
plt.show()
print("\n구조 분석:")
print(" Chain: SummerMonth → Temperature → IcedCoffeeSales")
print(" Fork: SummerMonth → {Temperature, IceCreamSales}")
print(" Collider: IceCreamSales ← {SummerMonth, Temperature}")CD 를 그린 후 분석가가 따라야 할 표준 절차:
- 각 노드의 역할 식별 — 분석 대상 (treatment, outcome) 결정
- 모든 path 열거 — treatment 와 outcome 사이 경로
- 각 path 의 종류 분류 — chain/fork/collider 식별
- 통제할 변수 결정:
- Confounder (fork 의 L) — 통제
- Mediator (chain 의 B) — 분석 목적에 따라 (총 효과면 통제 X, 직접 효과면 통제)
- Collider — 통제 안 함
- 회귀 적합 + 결과 해석
이 절차를 따르면 collider bias, confounder bias, over-adjustment 모두 회피.
8 관련 주제
8.1 Ch.3 의 형제 글
- E-BUI3-0 인과 다이어그램 도입 overview — Ch.3 전체 흐름
- E-BUI3-1 DAG 의 도구적 역할과 회귀 매핑 — CD 와 회귀의 동치성
- E-BUI3-2 체인과 포크 — Mediator 와 Confounder 의 두 기본 구조
8.2 후속 챕터 (Collider 와 Path 의 본격 활용)
- E-BUI4-0 DAG 0부터 짓기 — Buisson Ch.4: 비즈니스 문제에서 CD 구축 절차
- E-BUI5-0 Deconfounding overview — Buisson Ch.5: Backdoor Criterion (path 분석의 본격 활용)
8.3 Hernan 정통 cross-link
- Causal_Inference/06 DAG와 인과 다이어그램 — DAG 의 학술적 정의·d-separation·SWIG
- Causal_Inference/07 교란 — Backdoor criterion 의 형식적 처리
- Causal_Inference/08 선택 편향 — Collider bias 의 학술적 처리
8.4 Statistics 카테고리 cross-link
- Statistics/regression — 회귀의 변수 선택과 over-adjustment 함정
8.5 카테고리 진입점
- Experimentation 학습 로드맵 — 11 Phase × 7 교재 매핑