1 정의
Mediator 가 0/1 binary 변수 (Buisson, 2021, Ch.12). 예:
- \(X\) → “재예약 (Y/N)” → \(Y\)
- \(X\) → “이메일 클릭 (Y/N)” → \(Y\)
- \(X\) → “약 복용 (Y/N)” → \(Y\)
수치형 mediator 와의 차이:
수치형 mediator:
X → M (numeric, e.g., visit time) → Y
Linear regression for X → M
이항 mediator:
X → M (binary, e.g., clicked) → Y
Logistic regression for X → M
Logistic 의 비선형성 → mediation 추정 더 복잡.
수치 mediator (visit duration):
- \(X = 1\) → \(M\) 이 평균 12.6 분 ↑
- 모든 customer 에 동일 효과 (linear)
- Indirect effect = \(\beta_{XM} \cdot \beta_{MY}\)
이항 mediator (clicked):
- \(X = 1\) → \(M\) 의 확률이 logistic shift
- 효과의 크기가 baseline 확률에 따라 다름 (nonlinear)
- 평균 효과 추정에 reference point 필요
→ 이항 mediator 가 추가 복잡성. 그러나 같은 mediation framework.
2 Logistic Regression for X → M
2.1 Sigmoid 함수
수치 mediator:
\[ M = \alpha_0 + \alpha_X \cdot X + \epsilon \]
이항 mediator (logistic):
\[ P(M = 1) = \sigma(\alpha_0 + \alpha_X \cdot X) \]
여기서 \(\sigma(z) = 1 / (1 + e^{-z})\) (sigmoid).
특징:
- \(P(M = 1) \in [0, 1]\) (확률)
- Z (linear predictor) 의 비선형 변환
P(M=1)
1.0 | ╱─────
| ╱
0.5 | ╱
| ╱
0.0 |─────────────────── z
-5 0 +5
특징:
- z = 0 일 때 P = 0.5
- z = +∞ 일 때 P = 1
- z = -∞ 일 때 P = 0
- 가운데 (0 근처) 에서 가파름
- 양 끝에서 saturate
이 모양이 logistic 의 핵심.
2.2 \(\alpha_X\) 의 비선형 효과
같은 \(\alpha_X = 0.5\) 의 의미:
| Baseline P(M=1) | \(\alpha_X = 0.5\) 의 효과 |
|---|---|
| 0.5 | +0.12 (50% → 62%) |
| 0.9 | +0.04 (90% → 94%) |
| 0.1 | +0.06 (10% → 16%) |
같은 logistic coefficient 가 다른 absolute 효과.
→ 이항 mediator 의 effect 가 baseline 에 의존.
비유: 운동의 효과.
- Sedentary 에서 운동 시작: 큰 효과 (체중 -5 kg)
- Athlete 가 추가 운동: 작은 효과 (-1 kg)
같은 “운동 시작” 이 다른 효과. 시작점에 의존.
이항 mediator 도 같음:
- Baseline 0.5 (가운데) 에서 큰 absolute shift
- Baseline 0.9 (saturate) 에서 작은 shift
→ 평균 효과 보고 시 reference point 명시.
3 Mediated Effect 의 계산
3.1 수식
이항 M 의 mediation:
\[ P(M = 1 \mid X) = \sigma(\alpha_0 + \alpha_X \cdot X) \]
\[ Y = \beta_0 + \beta_X \cdot X + \beta_M \cdot M \]
\(M\) 을 그 기댓값으로 substitute:
\[ Y = \beta_0 + \beta_X \cdot X + \beta_M \cdot P(M = 1 \mid X) \]
\[ = \beta_0 + \beta_X \cdot X + \beta_M \cdot \sigma(\alpha_0 + \alpha_X X) \]
이게 X 의 Y 에 대한 marginal effect 의 비선형 함수.
수치 mediator:
\[ \frac{\partial Y}{\partial X} = \beta_X + \alpha_X \beta_M \quad \text{(constant)} \]
이항 mediator:
\[ \frac{\partial Y}{\partial X} = \beta_X + \alpha_X \beta_M \cdot \sigma'(z) \quad \text{(varies with X)} \]
여기서 \(\sigma'(z)\) 는 sigmoid 미분 (X 에 따라 다름).
→ 효과가 X 의 값에 의존.
4 Reference Point 방법
4.1 평균 X 사용
만약 X 의 분포가 skewed:
- 평균이 outlier 의 영향
- Reference point 가 representative 안 됨
- Indirect effect 부정확
해결:
- Median 사용
- 또는 다른 robust statistic
- 또는 per-row 평균 (다음 절)
5 Per-Row 평균 방법
5.1 각 customer 별 효과
각 row 의 individual indirect effect 계산 후 평균:
def per_row_indirect(df, alpha_0, alpha_X, beta_M):
"""각 row 의 indirect effect."""
df["z"] = alpha_0 + alpha_X * df["X"]
df["sigma_prime"] = np.exp(-df["z"]) / (1 + np.exp(-df["z"])) ** 2
df["indirect"] = alpha_X * beta_M * df["sigma_prime"]
return df["indirect"].mean()
avg_indirect = per_row_indirect(df, alpha_0, alpha_X, beta_M)장점:
- Heterogeneity 반영
- 분포의 진짜 평균
- Outlier 영향 낮음
단점:
- 계산 더 복잡
- 보고할 single value 에 모든 정보 압축
비유: 학교 학생들의 키 향상.
- 평균 키 학생: 1년에 +5 cm
- 작은 학생: 1년에 +8 cm (catch-up)
- 큰 학생: 1년에 +2 cm (saturate)
평균 효과:
- Reference point (평균 키 학생): +5 cm
- Per-row 평균: 분포 가중 평균 ~ +5 cm (그러나 작은 학생의 큰 효과 반영)
비즈니스 분석:
- 단순 보고 → reference point
- 정확한 평균 효과 → per-row
- Heterogeneous 효과 보고 → per-row + segmentation
6 두 방법의 비교
6.1 C-Mart Binary 사례 — Refund 신청
PA → Refund 신청 (Y/N) → Net Revenue.
- \(X\): PlayArea (binary)
- \(M\): 환불 신청 여부 (binary)
- \(Y\): Net Revenue ($)
가설:
- PA → 만족도 ↑ → 환불 ↓
- 환불 ↓ → Net Revenue ↑
회귀:
# Stage 1: X → M (logistic)
m_xm = smf.logit("refund ~ play_area", data=df).fit()
alpha_X = m_xm.params["play_area"] # -0.5
# Stage 2: Y ~ X + M
m_my = smf.ols("net_revenue ~ play_area + refund", data=df).fit()
beta_X = m_my.params["play_area"] # 5
beta_M = m_my.params["refund"] # -50
# Reference point
x_mean = df["play_area"].mean()
z_mean = m_xm.params["Intercept"] + alpha_X * x_mean
sigma_prime = np.exp(-z_mean) / (1 + np.exp(-z_mean)) ** 2
indirect_ref = alpha_X * beta_M * sigma_prime
print(f"Reference point indirect: {indirect_ref:.2f}")
# Per-row 평균
df["z"] = m_xm.params["Intercept"] + alpha_X * df["play_area"]
df["sigma_prime"] = np.exp(-df["z"]) / (1 + np.exp(-df["z"])) ** 2
df["indirect"] = alpha_X * beta_M * df["sigma_prime"]
indirect_avg = df["indirect"].mean()
print(f"Per-row average indirect: {indirect_avg:.2f}")가상 결과:
- Reference point indirect: +6.25 (\(-0.5 \times -50 \times 0.25\))
- Per-row indirect: +5.80
차이 약 7%. 분포의 skewness 따라 다름.
비즈니스 분석가의 결정:
- 단순 보고 → Reference point
- 정밀 분석 → Per-row
Buisson 의 권장: per-row (정확).
7 Bootstrap CI
7.1 Logistic 의 robust 추정
import numpy as np
import statsmodels.formula.api as smf
def bootstrap_binary_mediation(df, B=1000):
"""이항 mediator 의 indirect effect Bootstrap."""
indirects = []
for _ in range(B):
s = df.sample(len(df), replace=True)
# Logistic X → M
m_xm = smf.logit("refund ~ play_area", data=s).fit(disp=False)
# OLS Y ~ X + M
m_my = smf.ols("net_revenue ~ play_area + refund", data=s).fit()
alpha_X = m_xm.params["play_area"]
beta_M = m_my.params["refund"]
alpha_0 = m_xm.params["Intercept"]
# Per-row indirect
z = alpha_0 + alpha_X * s["play_area"]
sigma_prime = np.exp(-z) / (1 + np.exp(-z)) ** 2
indirect = (alpha_X * beta_M * sigma_prime).mean()
indirects.append(indirect)
return np.percentile(indirects, [5, 95])
ci = bootstrap_binary_mediation(df)
print(f"Indirect Effect 90% CI: {ci}")가상 결과: [+5.2, +6.5].
→ Indirect effect 의 robust 검증.
8 비즈니스 응용
8.1 마케팅 — 이메일 → Click → Purchase
8.2 시나리오
이메일 (X) → 클릭 (M, binary) → 구매 (Y, $).
분석:
- Stage 1: Logit(Click ~ Email) → \(\alpha_X\)
- Stage 2: OLS(Purchase ~ Email + Click) → \(\beta_X, \beta_M\)
- Indirect: per-row 평균
비즈니스 결정:
- 클릭률 (M) 의 marginal 효과 측정
- 클릭 한 customer 의 구매 효과 (β_M)
- 이메일의 indirect path 정량화
8.3 헬스케어 — 처방 → 복용 → 회복
8.4 시나리오
약 처방 (X) → 복용 여부 (M, binary) → 증상 회복 (Y).
분석:
- Stage 1: Logit(약 복용 ~ 처방) → 처방의 compliance 효과
- Stage 2: OLS(회복 ~ 처방 + 복용) → 복용의 회복 효과
- Indirect: 처방 → 복용 → 회복
CACE 와 유사 구조.
9 종합 — 이항 Mediator 의 default
9.1 분석가의 default
1. Mediator 가 binary 식별
2. Stage 1: Logistic regression (M ~ X)
3. Stage 2: Linear regression (Y ~ X + M)
4. Indirect 계산:
a. Per-row 권장 (정확)
b. 또는 Reference point (단순)
5. Bootstrap CI
6. PM 계산 + 보고
이 워크플로가 표준.