[Data] A/B 테스트와 인과 추론(Causal Inference)

Hyunjun Kim·2025년 7월 9일

A/B 테스트와 인과 추론의 통합적 이해

A/B 테스트는 가장 대표적인 인과 추론 실험 방식이며, 그 이론적 토대는 통계적 가설 검정에 기반한다. 그러나 현실 데이터에서는 무작위 실험(Randomized Controlled Trial, RCT)을 설계하기 어려운 경우가 많아, 관측 데이터를 기반으로 인과 관계를 추론하는 기법들이 필수적으로 요구된다.

  • A/B 테스트는 다음과 같은 맥락에서 인과 추론과 연결된다
항목A/B 테스트인과 추론
목적두 버전의 성과 비교특정 처리(또는 개입)의 인과적 효과 추정
데이터 구조무작위 할당된 실험군 vs 대조군관측 데이터 또는 준실험(quasi-experiment)
추정 대상평균 처리 효과 (ATE)ATE, CATE, HTE 등 다양
도구실험 설계, 통계적 검정성향 점수, Causal Forest, Meta Learners 등


1. 실험 기반 인과 추론: A/B 테스트의 이론적 기반

1.1 실험 설계의 핵심 요소

  • 무작위 할당 (Random Assignment): 외생성을 확보해 내생성(혼란 변수 영향)을 제거함.

  • 컨트롤 vs 처리 그룹 설정: 비교 가능한 집단 간 차이만 두고 효과 측정 가능하게 함.

  • 통계적 검정

    • 정규성 가정 → t-test,
    • 이항 데이터 → proportion test, 피셔의 정확 검정
    • 분할표 → 카이제곱 검정

1.2 처리 효과 정의

용어설명
ATE (Average Treatment Effect)전체 대상에 대한 평균 처리 효과
CATE (Conditional ATE)특정 조건(성별, 연령 등)에 따라 달라지는 처리 효과
HTE (Heterogeneous Treatment Effect)개별 특성에 따라 반응이 달라지는 효과 (개별화 필요)


2. 인과 추론을 위한 주요 개념 정리

2.1 Heterogeneous Treatment Effects (HTE)

  • 사람마다 같은 처리에 다르게 반응함 → 개인화된 효과 추정 필요
  • CATE 추정을 통해 세분화된 정책 수립 가능

예) 감기약이 A에게는 효과 있지만, B에게는 무의미


2.2 Propensity Score (성향 점수)

  • 관측된 공변량에 기반하여, 각 개인이 처리받을 확률을 계산한 점수
  • 비실험 데이터에서도 처리 여부가 무작위인 것처럼 비교할 수 있도록 도와줌
  • Rosenbaum & Rubin (1983)의 이론 기반

예) 학생의 성향에 따라 조기 졸업할 확률을 예측하고, 유사한 성향의 다른 학생과 비교하여 효과 추정

  • 예시 코드
from sklearn.linear_model import LogisticRegression
# 예: propensity score 계산
ps_model = LogisticRegression()
ps_model.fit(X, treatment)
propensity_scores = ps_model.predict_proba(X)[:, 1]

Python의Propensity Score Matchingstatsmodelscausalml 라이브러리 활용 가능

causalml : 인과 추론(Causal Inference) 및 처치 효과 추정(Treatment Effect Estimation)을 위한 라이브러리.


2.3 Meta-learners(T-learner, S-learner, X-learner, R-learner)

머신러닝을 활용해 개별 처리 효과(CATE)를 예측하는 방법론들

이름방식특징
T-learner처리군, 통제군 각각 모델 학습유연하지만 표본 크기 적으면 불안정
S-learner단일 모델 + 처리 변수 포함간단하지만 상호작용 포착 어려움
X-learner잔차 기반 보정 방식불균형한 처리군 비율에 강함
R-learner반사실 기반 최적화 방식구조적으로 인과성 추정에 적합

비유:
두 반을 따로 수업 (T), 같은 반에서 함께 수업(S),
보충 수업(X), 시험 성적과 능력을 따로 평가(R)


2.4 Causal Forest

  • Athey & Imbens (2016)의 Generalized Random Forests 기반.
  • Random Forest의 구조를 기반으로, 분할 기준을 처리 효과에 최적화시킴
  • 각 leaf에서 개별 조건에 따른 CATE를 추정

예) 마케팅 대상자를 특성에 따라 나눠, 맞춤형 전략 수립

  • 예시코드
from econml.grf import CausalForest
model = CausalForest()
model.fit(Y, T, X)

python - econml, grf (R), causalml 라이브러리 사용 가능


2.5 Splitting Criteria in Causal Forests

  • 인과 효과의 이질성에 기반해 분할
  • 주요 기준
    • 효과 분산 최대화 (treatment effect variance)
    • 반응 변수 이질성 고려
    • Orthogonality (처리와 결과의 독립성 유지)

예) 수험생을 학력, 성별, 성향, 성적 등 기준으로 나누는 전략 수립


2.6 Doubly Robust Estimation (이중 로버스트 추정)

  • Outcome 모델과 Propensity Score 모델을 동시에 사용하여, 둘 중 하나만 정확하면 효과 추정이 편향되지 않음
  • Inverse Probability Weighting (IPW) + Outcome Regression

비유: 지도와 나침반 중 하나가 고장 나도 항해 가능

  • 예시코드
from causalml.inference.meta import BaseDRLearner
learner = BaseDRLearner()
learner.fit(X=X, treatment=t, y=y)

python - DoWhy, EconML, causalml 라이브러리 사용 가능


3.7 Model Misspecification

  • 실제 데이터 구조와 모델 가정이 다를 때 → 추정 편향 (추정이 왜곡됨)
  • 예: 상호작용이 있는 상황에서 선형 회귀 사용 → 처리 효과 왜곡


3. Penalized Regression(Ridge, Lasso)과 인과 추론의 연결

많은 특성이 존재하거나 다중공선성이 있는 상황에서는 모델이 과적합(overfitting)될 수 있다.
이러한 문제를 방지하기 위해 정규화(regularization) 기법이 사용되는데,
대표적으로 Ridge Regression, Lasso Regression, Elastic Net이 있다.
이들은 회귀 계수에 패널티(제약)를 부여하여 모델의 복잡도를 제어한다.

3.1 Ridge Regression (릿지 회귀)

릿지 회귀는 모델이 너무 많은 특성에 과적합되지 않도록 제어하기 위해 모든 회귀 계수에 작은 값을 부여한다. 즉, 큰 계수가 발생하지 않도록 모델의 복잡도를 제어하는 방식이다.
이 방식에서는 모든 변수가 모델에 포함되지만, 영향력이 큰 변수들의 계수가 줄어들 수 있다.

  • 수학적 제약: L2 정규화 (패널티 항 : λj=1pβj2\lambda \sum_{j=1}^{p} \beta_j^2)

  • 모든 변수 유지, 계수만 축소

릿지 회귀는 변수 간의 계수 크기를 정규화하여, 모든 변수의 기여도를 일정 수준 이하로 제한한다.

  • 모델의 분산은 줄이고, 편향은 약간 감수하는 방향으로 안정성을 확보한다

3.2 Lasso Regression (라쏘 회귀)

라쏘 회귀는 특성 중에서 중요한 것만 선택하고, 나머지 특성의 계수는 0으로 만들어서 완전히 제외하는 방법이다. 즉, 릿지 회귀와 달리 일부 변수를 아예 사용하지 않게 만들기도 함.

  • 수학적 제약: L1 정규화 (패널티 항 : λj=1pβj\lambda \sum_{j=1}^{p} |\beta_j|)

  • 일부 변수 제거, 해석력 증가

제약 조건(L1 Ball) 아래에서 가장 큰 기여를 하는 변수만 남기고 나머지는 제거함.

3.3 Elastic Net (엘라스틱 넷)

엘라스틱 넷은 Ridge와 Lasso를 결합한 방법으로, 두 방법의 장점을 모두 사용한다. 즉, 모델의 복잡도를 제어하면서도 중요한 특성만을 선택하려는 목적이다.

  • 수학적 제약: L1 + L2 혼합

  • 라쏘의 변수 선택 + 릿지의 안정성


3.4 Python 코드 예시

# 필요한 라이브러리 로드
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge, Lasso
from sklearn.metrics import mean_squared_error

# 가상의 데이터 생성
np.random.seed(42)
X = np.random.rand(100, 5)  # 100개의 샘플, 5개의 특성
y = 3*X[:, 0] + 2*X[:, 1] - X[:, 2] + np.random.randn(100) * 0.5  # 실제 출력값에 약간의 노이즈 추가

# 데이터 분할 (훈련 데이터와 테스트 데이터)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Ridge 회귀 모델 훈련
ridge = Ridge(alpha=1.0)  # alpha 값은 페널티의 강도를 조절
ridge.fit(X_train, y_train)

# Lasso 회귀 모델 훈련
lasso = Lasso(alpha=0.1)  # alpha 값은 페널티의 강도를 조절
lasso.fit(X_train, y_train)

# 예측 및 성능 평가 (테스트 데이터에서)
y_pred_ridge = ridge.predict(X_test)
y_pred_lasso = lasso.predict(X_test)

# 모델 성능 출력 (MSE)
print(f'Ridge 회귀 MSE: {mean_squared_error(y_test, y_pred_ridge):.4f}')
print(f'Lasso 회귀 MSE: {mean_squared_error(y_test, y_pred_lasso):.4f}')

# 계수 비교
print("Ridge 회귀 계수:", ridge.coef_)
print("Lasso 회귀 계수:", lasso.coef_)

# 결과 시각화
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.bar(range(len(ridge.coef_)), ridge.coef_)
plt.title("Ridge 회귀 계수")
plt.subplot(1, 2, 2)
plt.bar(range(len(lasso.coef_)), lasso.coef_)
plt.title("Lasso 회귀 계수")
plt.show()

3.4.1 코드 설명

  • Ridge: alpha=1.0은 페널티의 강도를 조절하는 값이다. 릿지 회귀에서는 큰 계수를 억제해서 모델의 과적합을 방지한다.

    • 릿지 회귀는 모든 특성의 영향력을 줄이지만, 제거하지는 않음.
  • Lasso: alpha=0.1은 라쏘 회귀에서 페널티의 강도를 나타낸다. 일부 계수는 0으로 만들어져, 중요하지 않은 특성은 제외됨.

    • 중요하지 않은 특성의 계수를 0으로 만들며, 변수 선택 기능을 수행한다
  • MSE (Mean Squared Error): 예측값과 실제값 간의 차이를 제곱하여 평균한 값. 값이 작을수록 모델의 성능이 좋다고 볼 수 있다.


3.5 요약 표

기법수학적 제약설명Python 예시
RidgeL2계수 크기를 모두 줄임Ridge(alpha=1.0)
LassoL1중요하지 않은 변수 제거Lasso(alpha=0.1)
Elastic NetL1 + L2변수 선택 + 계수 안정성ElasticNet(alpha=1.0, l1_ratio=0.5)

3.6 인과 추론과의 연결

  • Meta-learners (T-learner 등)를 사용할 때 Ridge나 Lasso를 회귀 모델에 적용하면 고차원 변수 공간에서 안정적인 처리 효과 추정이 가능하다.
  • 특히 CATE 추정 시, 변수 선택을 통해 해석 가능한 인과 모델을 구성할 수 있다.


4. 실험 설계 → 인과 추정 → 해석의 전 과정 요약

  1. [실험 설계]
    • 가설: 변형 B가 A보다 성과 높을 것이다
    • 처리 vs. 컨트롤 그룹 무작위 할당
  1. [실행 및 통계 분석]

    • 통계적 유의성 검정: t-test, proportion test, chi-square 등
    • 처리 효과 유의성 판단
  2. [인과 추정]

    • 비실험 데이터라면 → 성향 점수 보정 (PSM, IPW)
    • Meta-learner, Causal Forest로 CATE 추정
    • Doubly Robust 기법으로 편향 최소화
  3. [모델 구축]

    • 고차원 특성 → Ridge/Lasso 등 정규화 기반 추정 사용
    • 개별화된 예측 → 세그먼트별 전략 수립 가능
  4. [결론 적용]

    • 정책 적용: 세분화 마케팅 전략, 개인화된 추천
    • A/B/N 테스트 확장 → 다변량 실험 설계 가능


5. 실무에서 A/B 테스트와 인과 추론을 함께 사용하는 이유

측면설명
실험 기반 의사결정A/B 테스트는 빠르고 직관적인 실험 설계가 가능하며,
비교 가능한 환경에서 효과적으로 처리 효과를 평가할 수 있음
비실험 데이터 보완로그 기반의 관측 데이터에 대해 Propensity Score, Causal Forest, Meta-learners 등을 통해 인과 추정이 가능함
세그먼트 기반 전략 수립CATE 및 HTE 분석을 통해 성별, 연령, 행동 특성 등
다양한 기준으로 세분화된 맞춤형 전략 수립 가능
모델의 일반화 및 안정성 확보Ridge, Lasso 등 Penalized Regression을 활용해
고차원 데이터에서 과적합을 방지하고 모델 성능을 안정적으로 유지


A/B 테스트와 인과 추론을 함께 알아야 하는 이유

  • A/B 테스트는 실험 설계와 해석의 기본기를 길러줄 수 있다.
  • 인과 추론은 비실험 상황에서의 전략 수립 및 분석 정교화를 가능하게 한다
  • 두 방법을 통합하면, 실험 가능한 영역에서는 빠르고 정확하게, 실험이 어려운 영역에서는 정교한 추론을 통해 전략적 인사이트를 얻을 수 있다
profile
Data Analytics Engineer 가 되

0개의 댓글