단기 Proxy Metric를 통한 장기 ROI 추정 - Microsoft

Long-Term Return-on-Investment at Microsoft via Short-Term Proxies

단기 Proxy Metric를 통한 장기 ROI 추정 - Microsoft

Double Machine Learning (DML)이란?

두번의 머신러닝을 통해 Treatment-Outcome 효과 추정하는 방법론

대략적인 DML 진행 방식

  1. T(Treatment), Y(outcome), X(covariates)가 있을 때 [T, X]와 [T, Y] 데이터셋 생성

  2. T~X, Y~T ML 모델 훈련

  3. ML 모델로 예측한 T_hat과 Y_hat을 각각 T와 Y에서 뺌 → T_tilda, Y_tilda

  4. Y_tilda ~ T_tilda로 X의 영향력을 제거한 회귀를 통해 효과 추정

잔차끼리 회귀하여 X의 영향력을 제거한 효과를 구하는 것은 프리슈-워-로벨 정리에 근거

케이스 스터디

문제상황1

  1. Y를 W로 예측하도록 모델을 만들어서 Y hat을 만듦

  2. T를 W로 예측하도록 모델을 만들어서 T hat을 만듦

  3. 각각을 잔차화시켜서 (Y-Yhat)을 (T-That)으로 회귀

  4. 이렇게 causal effect 추정

문제상황2

문제상황3

  • T_t는 Y_t, Y_t+1, T_t+1 세 가지에 연결되는데 T_t와 Y_t는 (시점이 두 개만 있다 했을 때) 교란 요소가 없기 때문에 빼면 T_t, Y_t+1, T_t+1 세 변수가 남게 됨

  • 이 때 DML을 하면 T_t의 영향력을 통제한 T_t+1 → Y_t+1이 나오게 되고(theta_t+1)

  • Y_t+1에서 theta_t+1 * T_t+1을 빼면 T_t의 t+1 시점 장기적 영향으로 인한 Y 값이 나오고, 이를 Y_t와 더하면 두 시점에 걸친 T_t를 통해 발생한 Y_adj를 구할 수 있음

시점을 좀 더 확대하여 2년 데이터를 6개월씩 4번 나눴을 때, 4번째 기간 수익부터 여러 시점의 투자 영향을 구하고 그만큼 빼줌

# on historical data construct adjusted outcomes
from econml.dynamic.dml import DynamicDML

panelYadj = panelY.copy()

est = DynamicDML(
    model_y=LassoCV(max_iter=2000), model_t=MultiTaskLassoCV(max_iter=2000), cv=2
)
for t in range(1, n_periods):  # for each target period 1...m
    # learn period effect for each period treatment on target period t
    est.fit(
        long(panelY[:, 1 : t + 1]),
        long(panelT[:, 1 : t + 1, :]),  # reshape data to long format
        X=None,
        W=long(panelX[:, 1 : t + 1, :]),
        groups=long(panelGroups[:, 1 : t + 1]),
    )
    # remove effect of observed treatments
    T1 = wide(panelT[:, 1 : t + 1, :])
    panelYadj[:, t] = panelY[:, t] - est.effect(
        T0=np.zeros_like(T1), T1=T1
    )  # reshape data to wide format

(코드상으로는 앞쪽 시점부터 하는 것 같아서 뭐가 맞는지 헷갈림)

최종형태

(추가) Double Machine Learning이란?

  • 작성자: 경윤영

본글은 DML이 무엇인지 아주 가볍게 이론을 소개합니다. 자세한 정보를 알고 싶으시다면 Double Machine Learning for causal inference를 찾아가시면 됩니다!

1. 소개

Double Machine Learning(DML)이란

  1. 머신러닝을 사용하여 인과효과를 추정하는 프레임워크이다.

  2. 신뢰구간 추정을 사용한다.

  3. “root n-consistency” 추정량에 따라 convergence와 data-efficiency를 갖고 있다.

그렇다면 DML의 개념은 어디서 나왔을까?

  1. 머신러닝을 통계적인 관점에서는 비모수적(nonparametric) 혹은 반모수적(semiparametric) 모형의 모음이라고 볼 수 있다.

  2. 또한 비모수적 및 반모수적 추정방법(한계, 효율성 등)에 대한 이론이 많이 들어가 있다.

DML을 왜 사용할까?

  1. 머신러닝은 modeling functions과 expectations에 대해 힘이 있다.

  2. 머신러닝은 전통적인 통계 기법(예시: OLS)보다 예측에 사용하기 좋다. 특히 데이터가 고차원일 때!

  3. 전통적인 통계 방법과 비교할 때 머신러닝은 m0(Z),g0(Z)m_0(Z), g_0(Z)에 대해서 강한 가정이 없어도 된다.

  4. 직교화(Orthogonality)를 통해서 정규화 편향을, cross-fitting을 통해서 과대적합 편향을 수정하는 것을 목표로 한다.

2. 세팅

1. DAG

Y=Dθ0+g0(Z)+U,E[UZ,D]=0Y = D\theta_0 + g_0(Z) + U, E[U|Z, D] = 0 식(1)

D=m0(Z)+V,E[VZ]=0D=m_0(Z)+V, E[V|Z]=0 식(2)

Y: 결과변수

D: 처리변수(이항변수)

θ0\theta_0: 추정하고자 하는 파라미터

Z: 공변량 벡터

U, V: 오차항

η0=(g0,m0)\eta_0=(g_0, m_0) : 장애모수(nuisance parameter)

식(1)은 θ0\theta_0 를 추정하기 위해 만든식이고, 식(2)는 공변량에 대한 treatment의 종속성을 추적하기 위함이다.

3. Naive estimator

그렇다면 머신런닝만을 사용하여 직접적으로 $\theta_0$을 추정하지 않는걸까? 추정에서 편향성이 나타나기 때문이다.

4. Neyman Orthogonality

위의 편향을 없애기 위해 우리는 neyman orthogonality를 사용한다. 직교성은 Frisch-Waugh-Lovell 정리가 기반이 된다. (Frisch-Waugh-Lovell에 대한 자세한 설명은 여기로)

예를 들어 Y=β0+β1D+β2Z+UY = \beta_0 + \beta_1D + \beta_2Z + U 에서 β1\beta_1를 추정하기 위해 두 가지 방법을 쓴다.

  1. OLS를 사용하여 D 및 Z에 대한 Y의 선형회귀

  2. ① Z에서 D를 회귀 ②Z에서 Y를 회귀, ③ β1\beta_1를 얻기 위해 ①의 잔차에 대해 ②의 잔차를 회귀한다.

편향을 없애기 위해 3단계에 걸쳐서 머신러닝을 진행한다.

  1. 머신러닝을 사용하여 Z를 기반으로 D를 예측한다.

  2. 머신러닝을 사용하여 Z를 기반으로 Y를 예측한다.

  3. θ0\theta_0를 얻기 위해 ①의 잔차에 대해 ②의 잔차를 회귀한다.

3단계를 걸친 머신러닝은 “직교화”되어 편향되지 않는 “root n-consistency” 를 산출한다.

5. Sample-splitting and Cross-fitting

과적합의 편향을 제거하기 위해서 sample splitting의 방법 중 하나인 cross-fitting을 진행한다.

  1. 데이터를 무작위 추출하여 두 개의 하위 집합으로 분할을 진행한다.

  2. 첫 번째 하위 집합에서 D와 Y에 대한 머신러닝 모델을 맞춘다(fit).

  3. 2단계에서 얻은 모델을 사용하여 두번째 부분 집합에서 θ0,1\theta_{0,1}을 추정한다.

  4. 두 번째 하위집합에 머신러닝 모델을 맞춘다(fit).

  5. 4단계에서 얻은 모델을 사용하여 두번째 부분 집합에서 θ0,2\theta_{0,2}을 추정한다.

  6. 최종적으로 추정량 θ0\theta_0θ0,1\theta_{0,1}θ0,2\theta_{0,2}의 평균한 값으로 한다.

cf) sample splitting 방법

  1. 데이터를 무작위 추출하여 두 개의 하위 집합으로 분할을 진행한다.

  2. 첫 번째 하위 집합에서 D와 Y에 대한 머신러닝 모델을 맞춘다(fit).

  3. 2단계에서 얻은 모델을 사용하여 두번째 부분 집합에서 θ0\theta_0을 추정한다.

Last updated