Welcome to the blog

Posts

My thoughts and ideas

DID - 3. 유닛마다 서로 다른 시점에 처치를 받는다면? Staggered DID | Gin-Girin-Grim

DID - 3. 유닛마다 서로 다른 시점에 처치를 받는다면? Staggered DID

앞에서 살펴 본 고전적인 DID(Canonical DID)는 treatment가 모든 유닛에 동일한 시점에 적용되었다는 것을 가정한다. 만약 유닛마다 서로 다른 시점에 treatment를 받는다면 어떻게 해야 할까? 현실적으로 treatment 적용 시점이 다른 경우가 많기 때문에 최근 들어 다양한 분야에서 Staggered DID의 활용 빈도가 높아지고 있다. 이번 글에서는 Staggered DID에 대해 이해하고 대표 방법론을 알아보겠다.

Staggered DID
  • Treatment 할당 시점이 유닛마다 다른, 즉 staggered treatment adoption(= multiple treatment timings)이 발생하는 경우 Staggered DID를 고려해야 한다.
  • Staggered DID는 한 번 처치를 받은 유닛은 그 상태를 계속 유지한다는 것을 가정한다. 즉 처치가 원복되는 reversible treatment 상황은 고려하지 않는다.
  • 최근 들어 다양한 분야에서 staggered DID의 활용 빈도가 높은데 이는 현실적으로 treatment가 적용되는 시점이 다른 경우가 많고, parallel trend assumption을 만족하기 위해 반드시 배제되어야 할 contemporaneous trend 혹은 post-treatment confounder의 가능성을 더 낮출 수 있기 때문이다.
  • 그러나 기존에 많이 활용하던 TWFE DID Model로 Staggered treatment 상황을 분석하는 경우 DID estimator가 가중 평균되는 오류가 있음이 최근 연구를 통해 밝혀졌다. 따라서 staggered treatment 상황에서는 TWFE를 수행함에 많은 주의를 기울여야 한다.
  • Bad comparison problem
    그림 1. Bad comparison problem (source: 인과추론의 데이터과학)

    • 유닛은 세 개의 유형으로 나눌 수 있다.
      1. never-treated units : 한 번도 처치를 받지 않은 유닛
      2. not-yet-treated(later-treated) units : 아직 처치를 받지 않은 유닛
      3. already-treated(earler-treated) units : 이미 처치를 받은 유닛
    • 각 시점 t마다 treated unit i는 위의 3개 유형과 비교하게 되는데, 이 때 already-treated unit과 비교하는 경우 잘못된 비교를 수행하게 된다(bad comparison). 이미 처치를 받은 유닛을 counterfactual로 사용하게 되는 오류가 발생하는 것이다.
    • 최악의 경우 bad comparison은 모든 ATT가 양수임에도 불구하고 음의 효과가 있다는 결과를 얻게 만들 수도 있고, treatment variance가 클수록 이와 같은 weight은 더 커진다.
    • treatment의 효과가 treatment cohort(treatment 적용 시점이 같은 그룹) 간 동일하고, 그 효과가 시간에 따라 변하지 않는다면(heterogeneous treatment effect) TWFE 추정치도 문제가 없다. 그러나 그렇지 않은 경우(dynamic treatment effect)라면 편향된 결과를 얻게 된다.
    • (참고) Goodman-Bacon 2021; Imai and Kim 2021


Staggered DID 분석 모형
기본 모형

\(Y_{it}=\beta_0\,+\,\beta_1Treat_i\,+\,\beta_2Post_{it}\,+\,\beta_3\cancel{Treat_i*Post_{it}}\,+\,\epsilon_{it}\)

  • 수식에서 $Treat_i*Post_{it}$는 treatment group에 대해서만 정의되므로 $Post_{it}$와 동일하다. 그러나 매칭 등을 통해 control group에 대해서도 $Post_{it}$를 정의할 수 있다면 동일하지 않을 수 있다.
1. Local DID Approach
  • valid comparison만 분리하여 local하게 ATT를 개별적으로 추정하고, 이를 결합하여 overall ATT를 추정하거나 event-study model처럼 dynamic treatment effect를 추정하는 방법론
  • Callaway and Sant’Anna (2021)
    Callaway and Sant'Anna
    • 유닛별 최초 처치일을 기준으로 코호트(treatment cohort)을 나눈다. 예) time 1에 처치를 받은 유닛은 cohort 1, time 2에 처치를 받은 유닛은 cohort 2 등. 그룹별로 인과효과를 추정하기 때문에 고전적인 DID처럼 모든 유닛에 효과가 동일하다고 가정하거나, 공변량에 따라 효과가 선형으로만 달라진다는 가정이 더 이상 필요하지 않다. 즉, treatment heterogeneity로 인한 오류를 줄일 수 있다.
    • 각 코호트에 대하여 연도별로 DID를 수행하되 never-treated 또는 not-yet-treated 까지만 포함하여 cohort x time별로 ATT를 추정한다.
    • Treatment(t) 이후 시점의 ATT 추정 시에는 처치시점의 t-1을 baseline으로 하되(여기서는 2009년), pre-treatment 시점에는 추정시점 t-1을 baseline으로 사용한다(2005년에 대한 pre-treatment ATT는 2004년을 baseline으로 사용)
  • Sun and Abraham (2021)
    Sun and Abraham
    • Sun and Abraham 방법론은 기존 TWFE event-study 모델에 코호트를 추가하고, auxiliary regression을 이용하여 그룹 별 여러 시점의 처치 효과를 가중 평균으로 표현하는 방식을 취한다. 이 방법은 그룹별 비중을 가중치로 추정하는 방식으로 직관적으로 각 그룹이 전체 평균 인과효과에 기여하는 정도를 해석할 수 있게 만든다.
    • 여기서 auxiliary regression이란 코호트 x event-time interaction term을 먼저 추정하고, 이 계수를 코호트 비중을 사용해 재가중함을 의미한다.
    • Callaway and Sant’Anna 방법론과 다른 점은 TWFE event-study를 적절하게 수정하는데 초점을 맞추고, never-treated 또는 last-treated(가장 마지막에 처치를 받는 유닛)만 사용하며, baseline을 pre-treatment 기간에도 수행시점 t-1으로 설정하는 경향이 있다는 점이다.
  • Imai et al.(2023)
    Imai et al.
    • treatment unit에 대해서 동일한 treatment history를 공유하는 unit과 매칭하여 valid control group 구성한다.
  • 분석 예시
    Sun and Abraham
    • Overall ATT는 개별 $ATT_t$ 와 $ATT_{t+1...n}$의 평균으로 산출한다.
    • $ATT_{t-1}$은 왜 구했을까? → DID의 기본 가정인 parallel trend assumption을 충족하려면 $ATT_{t-1}$가 0에 가까워야 한다(해당 예시는 pre-treatment parallel trend assumption을 위배하므로 DID 분석에 적절하지는 않다)
2. Imputation methods
  • never-treated group을 이용하여 counterfactual outcome을 예측하고 이를 기반으로 observed outcome과 비교하여 ATT를 추정하는 방법론
  • 대표 방법론
    • Borusyak et al.(2021)
    • Liu et al.(2022)



CUPED - 더 빠르게 실험 결과를 얻는 방법 | Gin-Girin-Grim

CUPED - 더 빠르게 실험 결과를 얻는 방법

실험을 하다보면 지표의 신뢰구간이 넓어 0을 포함할 때가 있다. 두 집단 간의 차이는 0과 꽤 떨어져 있는데 넓은 신뢰구간이 0을 포함하면 지표를 해석하는 것이 상당히 난감해진다. 지표의 분산을 줄이려면 어떻게 해야 할까? 가장 간단한 방법은 표본 크기를 늘리는 것이다. 전체 트래픽의 일부를 사용한 실험이라면 트래픽 비중을 최대 50%까지 높일 수 있다. 실험 기간을 연장하여 표본 크기를 늘리는 방법도 있다. 다만 실험 기간을 늘리는 것은 유저의 장기적인 행태에도 영향을 받을 수 있어 분산이 줄어들지 않을 가능성도 있다.

2013년 MS는 분산을 줄이기 위한 또다른 방법을 제안했는데 이것이 CUPED, Controlled experiment Using Pre-Experiment Data 이다. CUPED의 컨셉은 표준적인 delta 보다 분산이 더 작고, 더 효율적인 ATE 추정량을 사용하는 것이다.

먼저 통제변수 기법을 이해하고, CUPED가 통제변수 기법의 제약점을 어떻게 해소했는지 살펴본 후 실제 데이터에 적용하는 방식을 정리해보겠다. 이 글은 레퍼런스를 기반으로 세부 설명을 덧붙여 작성했고, CUPED의 근간이 되는 논문도 함께 읽어보는 것을 추천한다.

Control Variate
CUPED
CUPED 적용해보기
  1. Cov(Y,X)와 X의 평균, 분산을 연산하고, 이를 활용하여 최적의 $\theta$를 구한다.
  2. 각 사용자 별로 실험 이전 기간의 X 데이터를 계산한다.
  3. 전체 집단(population)의 통계값을 유저 레벨 데이터에 붙힌다.
  4. 유저별 변형된 지표를 생성한다. $Y_{cv}=Y-\theta X+\theta\mathrm{E}(X)$
  5. 변형된 지표로 기존의 통계 분석을 수행한다.
Reference
DID - 2. DID의 일반화 - TWFE 모델 (2) | Gin-Girin-Grim

DID - 2. DID의 일반화 - TWFE 모델 (2)

지난 글에서는 TWFE 모델의 기본 개념과 unit fixed effects와 time fixed effects가 교란 요인을 어떻게 통제하는지 살펴봤다. 이번 글에서는 Fixed effects 모델을 추정하는 방식 중 LSDV와 Within Estimator의 원리를 이해하고 이를 TWFE로 확장해본다. 또한 샘플 데이터를 활용해 각 방식으로 인과효과를 추정하는 과정을 코드와 함께 구체적으로 살펴보자.

Estimation
Fixed Effects Model

$ Y_{it}=\beta_i+\beta_1X_{it}+\epsilon_{it} $

Two-Way Fixed Effects model (TWFE)
\[Y_{it}=\beta_i+\beta_t+\beta_1X_{it}+\epsilon_{it}\]
샘플 데이터로 살펴보기

샘플 데이터로 2가지 추정 방식을 수행하고 그 결과를 비교해보자. 데이터는 이전 글에서 사용했던 샘플을 일부 가공하였다.

customer_id day push_notification purchase_amt dummy1 dummy2 dummy3 dummy4 time1 time2 time3
1202510140501000100
1202510151701000010
1202510161701000001
2202510140100100100
2202510151300100010
2202510161500100001
3202510140300010100
3202510150200010010
3202510160100010001
4202510140600001100
4202510150400001010
4202510160600001001


LSDV
import pandas as pd
import statsmodels.api as sm
import numpy as np

df = pd.read_csv('fixed_effects_exercise.csv')

# linear regression
col_x = ['push_notification', 'dummy1', 'dummy2', 'dummy3', 'time1', 'time2', 'time3']
col_y = 'purchase_amt'

X = df[col_x].to_numpy()
y = df[col_y].to_numpy()

X_const = sm.add_constant(X)
df_fit = sm.OLS(y, X_const).fit()

print(df_fit.summary())
LSDV 출력 결과
그림 1. LSDV 출력 결과


Within Estimator
import linearmodels as lm
import pandas as pd

df = pd.read_csv('fixed_effects_exercise.csv')
df = df.set_index(['customer_id', 'day'])

mod = lm.PanelOLS.from_formula('''purchase_amt ~ push_notification + EntityEffects + TimeEffects''', df)
twfe = mod.fit()
print(twfe)
Within Estimator 출력 결과
그림 2. Within Estimator 출력 결과



DID - 2. DID의 일반화 - TWFE 모델 (1) | Gin-Girin-Grim

DID - 2. DID의 일반화 - TWFE 모델 (1)

TWFE, Two-Way Fixed Effects model은 DID를 일반화한 형태이다. 고전적인 2x2 DID는 2개의 그룹(treatment/control)과 2개의 시점(처치 전후)을 비교하는 반면, TWFE는 여러 unit과 여러 시점을 동시에 다룰 수 있어 보다 복잡한 상황에 적용할 수 있다. 먼저 패널 데이터와 fixed effects가 무엇인지 살펴보고, TWFE가 어떻게 인과효과를 추정하는지 알아보자.

패널 데이터
Fixed Effects
TWFE의 원리 이해하기
인과추론의 데이터과학
source: 출처 영상 링크


  1. unit fixed effects를 고려하지 않고 treatment effect를 추정하는 경우
    • 전체 데이터 중 treatment 그룹의 purchase amount 평균과 control 그룹의 평균값을 비교한다.
    • treatment 그룹 평균(70+70+30+50 / 4) - control 그룹 평균(50+10+30+20+10 / 5) = 55 - 24 = 31
  2. unit fixed effects를 고려하고 treatment effect를 추정하는 경우
    • 각 unit 내에서 treatment 이전의 평균과 이후의 평균을 비교하여 효과를 추정한다.
      • customer 1 : (70+70 / 2) - 50 = 20
      • customer 2 : (30+50 / 2) - 10 = 30
      • (20+30 / 2) = 25
    • control group은 비교군이 없기 때문에 효과 추정에 전혀 활용되지 않는다. 즉 customer 3를 제외해도 추정치는 동일하다.
    • 이 때 treatment가 on → off → on을 반복하는 경우(reversible treatment), (treatment 적용 시점의 효과) - (treatment 미적용 시점의 효과)를 비교하여 각 unit의 효과를 추정하게 된다.
  3. time fixed effects까지 함께 고려하여 treatment effect를 추정하는 경우
    • treatment 그룹 내에서 한 unit의 treatment 전후 차이를 비교한 후 control 그룹 내 한 unit과의 시점별 차이를 평균낸다.
      • post-period 값에서 pre-period 값을 빼준 후 control 그룹과 동일한 시점별로 비교한다.
      • customer 1 : day2, 3의 평균값((20-(-20)+20-(-10)) / 2) - day1(0-0) = 35
      • customer 2 : day2, 3의 평균값((40-(-20)+20-(-10)) / 2) - day1(0-0) = 45
      • (45+35) / 2 = 40
    • control group이 여러 개 있다면 각 control group의 unit과 모두 비교한 수치의 평균값으로 효과를 추정한다. - 즉, TWFE는 unit 내에서 treatment 미적용 기간 대비 적용 기간의 차이를 연산하고, 시점별 control 그룹과의 차이를 한 번 더 연산하여 해당 값의 평균으로 ATE(전체 평균 효과)를 추정한다.