1 정의
Mediation 측정의 3 회귀 (Buisson, 2021, Ch.12):
1. Total Effect: Y ~ X
2. X → M: M ~ X
3. M → Y (X 통제): Y ~ X + M
각 단계가 다른 정보:
- 단계 1: 전체 효과 \(\beta_{\text{total}}\)
- 단계 2: \(X\) 의 \(M\) 에 대한 효과 \(\beta_{XM}\)
- 단계 3: \(M\) 의 \(Y\) 에 대한 효과 \(\beta_{MY}\) + \(X\) 의 직접 효과 \(\beta_{\text{direct}}\)
도출:
- Indirect: \(\beta_{\text{indirect}} = \beta_{XM} \cdot \beta_{MY}\)
- 검증: \(\beta_{\text{total}} = \beta_{\text{indirect}} + \beta_{\text{direct}}\)
비유: 도미노 효과.
- 첫 도미노 (X) 의 힘
- 도미노 1 → 2 의 전달 (X → M)
- 도미노 2 → 3 의 전달 (M → Y)
3 회귀가 이 chain 의 각 단계 분리 측정.
- 단계 1 (단순 회귀): 첫 → 마지막 (전체 효과)
- 단계 2 (X → M): 첫 → 둘째
- 단계 3 (Y ~ X + M): 둘째 → 마지막 (X 무관 path 분리)
→ Mediation 의 직접 측정 도구.
2 Total Effect — 단계 1
2.1 단순 회귀
Total effect 가 반영:
- 모든 mediation paths 의 합산
- 직접 path
- 미관측 path
분석가의 첫 보고:
“PA 의 평균 효과 +$27.62 (총 효과). 이 효과의 메커니즘을 다음 단계에서 분석.”
이 단순 추정이 baseline. 다음 단계에서 분해.
3 X → M — 단계 2
3.1 Mediator 의 회귀
이 단계의 결과:
- “PA 가 customer 를 12.56 분 더 머무르게 함”
- 단독으로도 의미 있음 (visit time 자체가 매출과 연관)
- Mediation 의 첫 화살표 강도
분석가의 자문:
- 12.56 분이 비즈니스적으로 큰 효과인가? Yes (전체 평균의 50%)
- 다른 정책으로 같은 효과 가능? (lounge area, snack) → 비교 분석
→ 단계 2 가 mediation 의 첫 quantification.
4 M → Y (X 통제) — 단계 3
4.1 X 와 M 모두 포함 회귀
m_my = smf.ols("grocery_purchases ~ play_area + visit_duration", data=df).fit()
print(m_my.summary().tables[1])가상 결과:
Estimate
(Intercept) -2.92
play_area 0.16
visit_duration 2.19
해석:
- \(\beta_{MY} = 2.19\) — Visit duration 1 분 추가당 grocery $2.19 추가
- \(\beta_{\text{direct}} = 0.16\) — PA 의 직접 효과 (visit duration 통제 후)
4.2 직관 — 두 계수의 의미
회귀의 두 계수:
- Visit duration: M 의 Y 에 대한 효과 (mediation chain 의 둘째 화살표)
- Play area: X 의 직접 효과 (mediation 외 path)
해석:
- “Visit time 1 분 추가 → grocery $2.19 추가” (universal)
- “PA 가 visit time 외에도 grocery 에 직접 $0.16 영향” (direct)
- Direct 효과 매우 작음 → mediation 거의 완전
→ 단계 3 이 chain 의 둘째 화살표 + direct path 동시 추정.
4.3 X 를 회귀에 포함하는 이유
분석가의 자연스러운 직감: “Mediator 의 효과 측정인데 X 빠도 되지 않나?”
이유:
- Partial mediation 시 PA 가 GP 의 직접 원인 (confounder)
- Visit duration 의 effect 추정에 PA 통제 필요
- PA 빠뜨리면 confounding bias
올바른 회귀:
m_my = smf.ols("grocery_purchases ~ play_area + visit_duration", data=df).fit()
# beta_my = 2.19 (정확)→ 분석가의 default: X 와 M 모두 포함.
4.4 직관 — Confounding 의 시각
CD:
PA → GP (direct)
PA → VD → GP (indirect)
VD 의 GP 효과를 추정할 때:
- PA 가 VD 와 GP 모두에 영향 (direct path)
- VD 만 회귀에 → PA 의 direct path 가 VD 의 효과로 흡수
- Confounding bias
해결: PA 통제.
이 통제가 단계 3 의 핵심.
5 Indirect Effect — Product of Coefficients
5.1 도출
\[ \beta_{\text{indirect}} = \beta_{XM} \cdot \beta_{MY} \]
C-Mart 사례:
\[ \beta_{\text{indirect}} = 12.56 \times 2.19 = 27.51 \]
해석:
- Mediation chain 통한 효과 = 27.51
- \(\beta_{\text{total}}\) = 27.62 와 거의 같음
5.2 직관 — Product 의 직관
비유: 변환 chain.
- X = 1 → M 이 12.56 단위 증가 (단계 2)
- M 이 12.56 단위 증가 → Y 가 12.56 × 2.19 = 27.51 증가
- 따라서 X = 1 → Y 가 27.51 증가 (mediation 통해)
수학적 derivation:
- \(\frac{\partial M}{\partial X} = \beta_{XM}\)
- \(\frac{\partial Y}{\partial M} = \beta_{MY}\)
- Chain rule: \(\frac{\partial Y}{\partial X} = \frac{\partial M}{\partial X} \cdot \frac{\partial Y}{\partial M} = \beta_{XM} \cdot \beta_{MY}\)
→ Calculus 의 chain rule 의 통계 응용.
5.3 Total = Indirect + Direct 검증
이론:
\[ \beta_{\text{total}} = \beta_{\text{indirect}} + \beta_{\text{direct}} \]
C-Mart 사례:
- Total: 27.62
- Indirect: 27.51
- Direct: 0.16
- Sum (indirect + direct): 27.67
차이: 0.05 (sampling noise).
→ Total ≈ Indirect + Direct 검증. Mediation 분해 정확.
5.4 직관 — 검증의 의미
만약 검증 실패 (큰 차이):
- Multicollinearity 가능성
- CD 의 가정 위반 (다른 mediator 또는 confounder 미포함)
- 모형 misspecification
분석가의 default:
- 매번 sum 검증
- 차이 작으면 분석 진행
- 차이 크면 CD 재검토
6 Percentage Mediated
6.1 비율 계산
6.2 PM 수식
\[ \text{PM} = \frac{\beta_{\text{indirect}}}{\beta_{\text{total}}} \]
C-Mart 사례:
\[ \text{PM} = \frac{27.51}{27.62} = 99.6\% \]
해석:
- Total effect 의 99.6% 가 mediation 통해
- 0.4% 만 direct path
- → Near full mediation
6.3 직관 — PM 의 비즈니스 의사결정
PM 별 비즈니스 함의:
| PM | 의미 | 의사결정 |
|---|---|---|
| > 90% | Near full mediation | M 이 핵심 lever, 다른 정책 (M 영향) 도 효과 |
| 30~70% | Partial mediation | M 외 다른 path 존재, 추가 분석 |
| < 30% | Weak mediation | 다른 mediator 검색 또는 mediation 거부 |
C-Mart 의 PM 99.6%:
- VD 가 거의 모든 효과의 driver
- VD 늘리는 다른 정책 (lounge, snack 등) 도 같은 효과
- PA 비싸면 다른 cheap 정책으로 대체 가능
이 통찰이 비즈니스 strategy 결정.
6.4 Bootstrap CI
PM 은 두 추정의 ratio → 분포 비선형 → Bootstrap.
import numpy as np
def bootstrap_pm(df, B=1000):
pms = []
for _ in range(B):
s = df.sample(len(df), replace=True)
m_t = smf.ols("grocery_purchases ~ play_area", data=s).fit()
m_xm = smf.ols("visit_duration ~ play_area", data=s).fit()
m_my = smf.ols("grocery_purchases ~ play_area + visit_duration", data=s).fit()
b_t = m_t.params["play_area"]
b_xm = m_xm.params["play_area"]
b_my = m_my.params["visit_duration"]
b_ind = b_xm * b_my
pms.append(b_ind / b_t)
return np.percentile(pms, [5, 95])
ci = bootstrap_pm(df)
print(f"Percentage Mediated 90% CI: {ci}")가상 결과: [0.9933, 0.9975].
→ PM 의 robust 추정.
7 Direct Effect — 분리
7.1 Direct 의 정의
Direct Effect = β_X (단계 3 회귀의 X 계수)
= X 의 효과 - mediator 통한 효과
= X 가 M 외 다른 path 로 Y 에 영향
C-Mart: \(\beta_{\text{direct}} = 0.16\) (매우 작음).
해석:
- VD 통제 후 PA 의 추가 효과
- 0.16/$ → 거의 무시
- “PA 의 모든 효과가 VD 통해”
7.2 직관 — Direct 의 의미
만약 Direct 가 큼 (예: 10):
- PA 가 VD 외 다른 메커니즘으로 GP 영향
- 다른 mediator 가 있을 가능성 (예: 매장 분위기)
- 또는 직접 영향 (PA 자체가 매장 다양성 증가)
만약 Direct 가 작음 (0.16):
- PA 의 효과가 단일 mediator (VD) 통해
- Single mediator 모형 적합
- 단순한 비즈니스 메커니즘
분석가의 default:
- Direct 큼 → 추가 mediator 검색
- Direct 작음 → 단순 mediation 결론
8 Multicollinearity 함정
8.1 Full Mediation 의 multicollinearity
8.2 경고 신호
Full mediation 에서 X 와 M 이 매우 상관 → 회귀에 둘 다 포함 시:
- 두 계수가 큰 SE
- 반대 부호 계수 (cancel 처럼)
- p-value 매우 큼
- 또는 software 가 error 반환
가상 사례:
Estimate Std.Error
play_area 5.2 8.7 (큰 SE)
visit_duration 2.0 0.5
PA 와 VD 가 99% 상관 → multicollinearity.
“Mediator 계수가 haywire 면 X 를 회귀에서 빼라.”
해결:
# Multicollinearity 시
m_my_no_X = smf.ols("grocery_purchases ~ visit_duration", data=df).fit()
beta_my = m_my_no_X.params["visit_duration"] # 정확이 경우:
- Full mediation 가정
- Direct effect = 0
- \(\beta_{\text{indirect}} = \beta_{XM} \cdot \beta_{MY} \approx \beta_{\text{total}}\)
분석가의 자기 검증:
Sum (indirect + direct) ≈ total
indirect + 0 ≈ total
12.56 × 2.0 + 0 = 25.12 vs total 27.62
차이 크면 → CD 의 다른 가정 위반 (confounder 등).
8.3 진단 절차
8.4 직관 — Step-by-step 진단
분석가의 default:
1. 단계 3 회귀 (X + M 포함)
- 두 계수 정상 → 진행
- haywire (큰 SE, 반대 부호) → multicollinearity 의심
2. Multicollinearity 점검
- VIF (Variance Inflation Factor) 계산
- Cor(X, M) 점검
3. 해결
- VIF > 10 → X 빼고 M 만 회귀
- Cor > 0.95 → 같은 처방
4. 결과 해석
- Full mediation 가정 명시
- Bootstrap CI 로 robust 검증
9 Multiple Mediator
9.1 두 mediator 의 회귀
9.2 CD
PlayArea ──→ VisitDuration ──→ GroceryPurchases
↘ ↗
Number of customers
두 mediator: VisitDuration, NumCustomers.
회귀:
각 mediator 의 계수가 그 path 의 효과.
만약 mediator 간 화살표:
PlayArea → VD → GP
↘ ↗
NC
(NC → VD)
NC 가 VD 에 영향:
- VD 의 효과 측정 시 NC 가 confounder
- 두 mediator 의 effect 분리 어려움
해결: Backdoor criterion (E-BUI5-2).
→ 복잡한 mediation 은 CD 의 path 분석 필수.
10 회귀 선택의 기로
10.1 “Mediator 통제 vs 미통제” 결정
| 분석 질문 | 회귀 |
|---|---|
| “PA 의 총 효과?” (정책 결정) | \(Y \sim X\) (no mediator) |
| “PA 의 직접 효과 (VD 무관)?” | \(Y \sim X + M\) |
| “VD 의 GP 효과 (PA 무관)?” | \(Y \sim X + M\) (focus on M coef) |
| “Mediation 분석?” | 3 회귀 모두 |
분석가의 default:
- 비즈니스 의사결정 → Total effect (X 만)
- 메커니즘 분석 → 3 회귀 mediation
- 다른 mediator 비교 → 복잡한 multi-mediator
10.2 직관 — 잘못된 회귀의 위험
흔한 함정:
- “여러 변수 다 넣어 통제하면 안전” — 잘못
- Mediator 통제 시 over-adjustment (total effect 못 봄)
- Confounder 통제 안 시 confounding bias
- 적절한 변수 선택이 핵심
분석가의 도구:
- CD 그리기 → 변수 역할 식별
- DCC 또는 BC (E-BUI5) → 통제 변수 결정
- Mediation 분석 → 별도 회귀
→ “Kitchen sink” 회귀 위험.
11 Self-Regulating Mechanism
11.1 직관 — 음의 mediation
특수 case: Mediator 가 cause/effect 사이 cancel.
Price 인하 → Sales ↑
↘ ↗
Competitor 가격 인하 (mediator)
↓
Sales (다시 ↓)
C-Mart 의 가격 인하:
- 직접 효과: 매출 ↑
- Mediator (경쟁사 반응): 매출 ↓ (가격 경쟁)
- Total effect ≈ 0
수학적으로:
- Direct effect: +$1M
- Indirect effect: -$0.9M (cancel)
- Total: +$0.1M (작음)
비즈니스 함의:
- “가격 인하 정책 효과 미미”
- 그러나 메커니즘 분석으로 진짜 효과 (+$1M direct) 확인
- 다른 전략 (광고, 차별화) 으로 indirect cancel 회피 가능
11.2 직관 — Mediation 의 비즈니스 통찰
이 사례의 가치:
- 단순 회귀: “효과 없음” 결론
- Mediation 분석: “Direct 큼, Indirect cancel”
- 의사결정: “경쟁사 반응 회피하는 전략 필요”
→ Mediation 이 단순 평균 효과가 안 보여주는 메커니즘 노출.
Buisson 의 강조:
“Mediation cannot save a mediocre average effect, but it can reveal hidden self-regulation.”
12 코드 예시 — 종합 Mediation
12.1 시뮬레이션
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
# 가상 C-Mart 데이터
np.random.seed(42)
n = 5000
df = pd.DataFrame({
"play_area": np.random.binomial(1, 0.5, n),
})
# True coefficients
true_xm = 12.56
true_my = 2.19
true_direct = 0.16
df["visit_duration"] = (
23.80 + true_xm * df["play_area"] + np.random.normal(0, 5, n)
)
df["grocery_purchases"] = (
-2.92
+ true_direct * df["play_area"]
+ true_my * df["visit_duration"]
+ np.random.normal(0, 8, n)
)
# 3 회귀
m_total = smf.ols("grocery_purchases ~ play_area", data=df).fit()
m_xm = smf.ols("visit_duration ~ play_area", data=df).fit()
m_my = smf.ols("grocery_purchases ~ play_area + visit_duration", data=df).fit()
beta_total = m_total.params["play_area"]
beta_xm = m_xm.params["play_area"]
beta_my = m_my.params["visit_duration"]
beta_direct = m_my.params["play_area"]
beta_indirect = beta_xm * beta_my
pm = beta_indirect / beta_total
print("=== Mediation 결과 ===")
print(f"Total Effect: {beta_total:.2f}")
print(f"X → M: {beta_xm:.2f}")
print(f"M → Y: {beta_my:.2f}")
print(f"Indirect Effect (X → M → Y): {beta_indirect:.2f}")
print(f"Direct Effect: {beta_direct:.2f}")
print(f"Indirect + Direct: {beta_indirect + beta_direct:.2f}")
print(f"Percentage Mediated: {pm:.1%}")12.2 직관 — 결과의 검증
예상 결과:
Total: 27.65 (true 27.66)
X → M: 12.55 (true 12.56)
M → Y: 2.19 (true 2.19)
Indirect: 27.49
Direct: 0.16
Sum: 27.65 (matches Total)
PM: 99.4%
진짜 값과 가까움 → 추정 정확.
비즈니스 보고:
“PA 의 효과 99.4% 가 visit duration 통해. 다른 시간 늘리는 정책도 같은 효과 가능.”
12.3 시각화
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 6))
# Bar chart: Total / Indirect / Direct
effects = [beta_total, beta_indirect, beta_direct]
labels = ["Total", "Indirect (mediated)", "Direct"]
colors = ["#2E86AB", "#A23B72", "#F18F01"]
bars = ax.bar(labels, effects, color=colors)
# 각 bar 위에 값 표시
for bar, value in zip(bars, effects):
ax.text(
bar.get_x() + bar.get_width() / 2,
bar.get_height() + 0.5,
f"${value:.2f}",
ha="center", fontsize=12,
)
ax.set_ylabel("Effect on Grocery Purchases")
ax.set_title("Mediation Decomposition (PA → VD → GP)")
ax.set_ylim(0, max(effects) * 1.1)
plt.tight_layout()
plt.savefig("mediation_decomposition.png", dpi=80)
plt.show()12.4 직관 — 시각화의 communication
이 plot 이 비즈니스 파트너에게:
- 큰 Total effect ($27.65)
- 거의 모든 effect 가 Indirect ($27.49)
- Direct 무시할 정도 ($0.16)
명확한 visualization → 비즈니스 의사결정 도구.
분석가의 권장:
- 단순 보고에 mediation decomposition plot 첨부
- 메커니즘 명확히 communicate
13 종합 — 분석가의 결정 트리
13.1 Mediation 분석의 default
1. CD 그리기 + mediator 후보 식별
2. 3 회귀 실행
- Total: Y ~ X
- X → M: M ~ X
- M → Y: Y ~ X + M
3. 검증:
- Indirect (β_xm × β_my) 계산
- Sum (indirect + direct) ≈ total?
- Multicollinearity 점검 (VIF)
4. 해석:
- Full mediation: PM > 90%
- Partial mediation: 30~90%
- Weak: < 30%
5. Bootstrap CI:
- Indirect, Direct, PM 의 robust 검증
6. 비즈니스 보고:
- 메커니즘 명시
- 비즈니스 의사결정 권장
- 시각화 (Total/Indirect/Direct bar chart)
7. 후속 분석:
- Multicollinearity 시 X 제외
- Multiple mediator 검색
- Self-regulation 가능성
이 워크플로가 mediation 의 표준.
14 관련 주제
14.1 Ch.12 의 형제 글
- E-BUI12-0 Mediation·IV overview — Ch.12 전체 흐름
- E-BUI12-2 매개 비율과 이항 매개 — 이항 mediator
- E-BUI12-3 매개 × 조절 결합 — 결합 분석
- E-BUI12-4 도구변수와 2SLS — IV 자세히
14.2 이전 챕터
- E-BUI3-2 체인과 포크 구조 — Mediator 정의
- E-BUI5-2 백도어 기준과 M-패턴 — 변수 선택
14.3 카테고리 진입점
- Experimentation 학습 로드맵 — 11 Phase × 7 교재 매핑