ATE 대비 CATE는 특정 하위그룹의 인과추론에 집중한다.

ATE 대비 CATE는 특정 하위그룹의 인과추론에 집중한다.
Photo by Ian Schneider / Unsplash

Average Treatment Effect (ATE)

  • $ATE=E[Y(1)]−E[Y(0)]$
  • 전체 인구에서 처치의 평균 효과를 측정하는 지표입니다.
  • ATE는 처치를 받은 경우와 받지 않은 경우의 결과 차이를 평균적으로 나타냅니다.
  • 장점
    1. 단순하고 직관적: 전체 인구에 대한 처치의 평균 효과를 쉽게 이해할 수 있습니다.
    2. 정책 결정에 유용: 전체 인구에 대한 정책 효과를 평가하는 데 유용합니다.
  1. 단점
    1. 세부 정보 부족: 특정 하위 그룹에 대한 정보를 제공하지 못합니다.
    2. 내생성 문제: 처치와 결과 간의 상관관계를 정확히 측정하기 어려울 수 있습니다.

Conditional Average Treatment Effect (CATE)

  • 특정 하위 그룹에서 처치의 평균 효과를 측정하는 지표입니다.
  • CATE는 주어진 조건에서 처치를 받은 경우와 받지 않은 경우의 결과 차이를 평균적으로 나타냅니다.
  • $CATE(X)=E[Y(1)∣X]−E[Y(0)∣X]$
    • 여기서 $X$는 조건 또는 특성을 나타냅니다.
  • 장점
    1. 세부 정보 제공: 특정 하위 그룹에 대한 처치 효과를 분석할 수 있습니다.
    2. 개별화된 정책 결정: 특정 그룹에 맞춘 정책 결정을 지원합니다.
  • 단점
    1. 복잡성 증가: 조건에 따른 처치 효과를 측정하기 위해 더 많은 데이터와 복잡한 모델이 필요합니다.
    2. 해석 어려움: 여러 조건에 따른 효과를 해석하는 것이 어려울 수 있습니다.

Alternatives

  • Instrumental Variables (IV): 도구 변수를 사용하여 내생성을 해결하는 방법입니다.
  • Propensity Score Matching (PSM): 유사한 특성을 가진 처치 그룹과 통제 그룹을 매칭하여 처치 효과를 추정합니다.

Sample Code

import numpy as np  
import pandas as pd  
from sklearn.linear_model import LinearRegression  
from sklearn.model_selection import KFold  
import matplotlib.pyplot as plt  
  
# 데이터 생성  
np.random.seed(42)  
n = 1000  
X = np.random.normal(size=(n, 5))  
T = np.random.binomial(1, 0.5, size=n)  
Y = 2 * T + X[:, 0] + np.random.normal(size=n)  
  
# 교차 검증을 통한 ATE 추정  
kf = KFold(n_splits=5)  
ATEs = []  
  
for train_index, test_index in kf.split(X):  
    X_train, X_test = X[train_index], X[test_index]  
    T_train, T_test = T[train_index], T[test_index]  
    Y_train, Y_test = Y[train_index], Y[test_index]  
      
    model = LinearRegression().fit(T_train.reshape(-1, 1), Y_train)  
    ATEs.append(model.coef_[0])  
  
ATE = np.mean(ATEs)  
print(f"Cross-validated ATE: {ATE}")  
  
# 교차 검증을 통한 CATE 추정  
def cate_cv(X, T, Y, kf):  
    CATEs = []  
      
    for train_index, test_index in kf.split(X):  
        X_train, X_test = X[train_index], X[test_index]  
        T_train, T_test = T[train_index], T[test_index]  
        Y_train, Y_test = Y[train_index], Y[test_index]  
          
        model_treated = LinearRegression().fit(X_train[T_train == 1], Y_train[T_train == 1])  
        model_control = LinearRegression().fit(X_train[T_train == 0], Y_train[T_train == 0])  
          
        CATEs.append(model_treated.predict(X_test) - model_control.predict(X_test))  
      
    return np.concatenate(CATEs)  
  
CATE_values = cate_cv(X, T, Y, kf)  
print(f"Cross-validated CATE (first 10 values): {CATE_values[:10]}")  
  
# 시각화  
plt.figure(figsize=(12, 6))  
  
# ATE 시각화  
plt.subplot(1, 2, 1)  
plt.hist(ATEs, bins=10, edgecolor='black')  
plt.title('ATE Distribution')  
plt.xlabel('ATE')  
plt.ylabel('Frequency')  
  
# CATE 시각화  
plt.subplot(1, 2, 2)  
plt.hist(CATE_values, bins=30, edgecolor='black')  
plt.title('CATE Distribution')  
plt.xlabel('CATE')  
plt.ylabel('Frequency')  
  
plt.tight_layout()  
plt.show()

Read more

DataFrame은 Pandera로, 모델은 Pydantic으로 데이터를 검증한다.

DataFrame은 Pandera로, 모델은 Pydantic으로 데이터를 검증한다.

Pandera: 데이터프레임 검증에 최적화된 도구 주요 장점 * Pandas와 통합: Pandas 데이터프레임에 대해 스키마 기반 검증을 수행합니다. * 유연한 검증 조건: 열 데이터 타입, 값 범위, Null 여부 등 다양한 검증 조건을 정의할 수 있습니다. * 명확한 오류 메시지: 스키마 불일치에 대한 명확한 오류 메시지를 제공합니다. 단점 * 대용량 데이터 검증에서는 속도가 느릴 수

Tobit Regression은 Censored Data에 적합한 Regression이다.

Tobit Regression은 Censored Data에 적합한 Regression이다.

Tobit Regression * Tobit 회귀(Tobit Regression)는 종속 변수가 특정 값에서 절단(Censored)된 상황에서 데이터를 분석하기 위해 사용되는 통계 기법입니다. * James Tobin이 처음 제안한 이 모델은 경제학과 사회과학 분야에서 자주 사용되며, 일반 선형 회귀로는 설명할 수 없는 상황에서 효과적으로 적용할 수 있습니다. Tobit Regression 수식 1. 관측된 종속 변수