16.8 생존분석과 인과추론 기초

실습 · 연습문제 2개

성향점수 가중으로 처치 효과 추정하기 ipw-effect

관찰 데이터에서 처치 T∈{0,1}T \in \{0, 1\}(예: 첨가제 사용)의 평균 효과 E[Y∣do(T=1)]−E[Y∣do(T=0)]E[Y \mid do(T=1)] - E[Y \mid do(T=0)]를 추정한다. 교란 변수 ZZ가 처치와 결과에 함께 영향을 주므로 단순 비교는 편향된다. ZZ가 backdoor 경로를 모두 막는다고 가정하면, 성향점수 e(Z)=P(T=1∣Z)e(Z) = P(T = 1 \mid Z)로 가중해 이 편향을 없앨 수 있다. 세 함수를 완성한다.

  1. naive_difference(y, t): 처치군 평균 − 대조군 평균.
  2. propensity(Z, t, iters=25): 절편을 포함한 로지스틱 회귀 e=σ(w0+w⊤z)e = \sigma(w_0 + \mathbf{w}^\top\mathbf{z})를 Newton 방법으로 적합해 샘플마다의 eie_i, shape (N,)을 반환한다. Z는 shape (N, p)다. Newton 갱신은 w←w+(X⊤WX)−1X⊤(t−e),W=diag⁡(ei(1−ei))\mathbf{w} \leftarrow \mathbf{w} + (\mathbf{X}^\top\mathbf{W}\mathbf{X})^{-1}\mathbf{X}^\top(\mathbf{t} - \mathbf{e}), \qquad \mathbf{W} = \operatorname{diag}(e_i(1 - e_i)) 이고 X\mathbf{X}는 Z 앞에 1의 열을 붙인 행렬, 초기값은 w=0\mathbf{w} = \mathbf{0}이다.
  3. ipw_effect(y, t, e): 정규화한 역확률 가중(IPW) 추정량 τ^=∑itiyi/ei∑iti/ei−∑i(1−ti)yi/(1−ei)∑i(1−ti)/(1−ei).\hat{\tau} = \frac{\sum_i t_i y_i / e_i}{\sum_i t_i / e_i} - \frac{\sum_i (1 - t_i) y_i / (1 - e_i)}{\sum_i (1 - t_i) / (1 - e_i)}.

테스트는 손으로 계산할 수 있는 예, 로지스틱 회귀의 기울기 조건(X⊤(t−e)=0\mathbf{X}^\top(\mathbf{t} - \mathbf{e}) = \mathbf{0}), 그리고 교란이 있는 시뮬레이션에서 단순 비교는 크게 빗나가고 IPW는 참 효과에 가까운지를 확인한다.

Kaplan–Meier 생존곡선 구현하기 kaplan-meier

셀 NN개의 관측 시간 tit_i와 고장 여부 δi\delta_i(1 = 고장 관측, 0 = 중도절단)가 주어진다. Kaplan–Meier 추정량은 고장이 관측된 서로 다른 시각 t(1)<t(2)<⋯t_{(1)} < t_{(2)} < \cdots마다

S^(t)=∏j: t(j)≤t(1−djnj)\hat{S}(t) = \prod_{j:\, t_{(j)} \le t} \left(1 - \frac{d_j}{n_j}\right)

로 생존함수를 추정한다. djd_j는 시각 t(j)t_{(j)}에 고장 난 수, njn_j는 그 시각 직전까지 고장도 중도절단도 되지 않은 수(위험 집합의 크기, ti≥t(j)t_i \ge t_{(j)}인 ii의 수)다. 두 함수를 완성한다.

  1. kaplan_meier(time, event): (t_j, S_j)를 반환한다. t_j는 고장이 관측된 서로 다른 시각의 오름차순 배열, S_j는 각 시각 직후의 S^\hat{S}다. 둘 다 shape (J,).
    • 같은 시각에 고장과 중도절단이 함께 있으면, 중도절단된 셀은 그 시각의 위험 집합에 포함한다(관례: 중도절단은 고장 직후에 일어난 것으로 본다).
  2. km_median(t_j, S_j): S^(t)≤0.5\hat{S}(t) \le 0.5가 처음 되는 시각을 반환한다. 끝까지 0.5 아래로 내려가지 않으면 np.inf를 반환한다(관측 기간 안에서 중앙값을 추정할 수 없다는 뜻).

테스트는 손으로 계산한 예, 중도절단이 없으면 경험 생존함수와 같아지는지, 같은 시각의 동점 처리, 그리고 중도절단이 많은 시뮬레이션에서 참 생존함수에 가까운지를 확인한다.