[Causal Inference] Synthetic Control - 던전앤 파이터 직업 리뉴얼에 따른 캐릭터 생성효과 분석

Sion Park·2022년 10월 3일
1

1. Introduction

던전앤파이터에서는 2022년 20주차 직업 밸런스 패치, 개선 패치 등과 함께 (5월 18일)에 소환사, 쿠노이치, 스트리트파이터(여) 총 세 직업군에 대해 직업 리뉴얼 패치를 알렸으며 21주차 (5월 25일)에 업데이트가 완료되어 인게임에 반영되었습니다.

여기서 궁금한 것은 이러한 직업 리뉴얼 패치가 신규 캐릭터 생성에 실제로 효과가 존재하였는지 알아보고자 합니다. 하지만 아래의 그림과 같이 일반적인 빈도비교를 통해서 이를 측정하기 쉽지 않습니다.

  • 리뉴얼 직업의 생성 빈도

    • 리뉴얼 직업의 생성 빈도의 경우 처음 소식이 알려졌던 20주차부터 크게 상승하는 패턴을 보입니다.
  • 리뉴얼되지 않은 직업의 생성 빈도

    • 리뉴얼되지 않은 직업의 경우에도 20주차 부터 상승하는 모습을 보여주며 도적-로그의 경우 큰 상승이 없지만, 프리스트(남)-크루세이더 직업의 경우 쿠노이치 직업군과 비교가 어려울 정도로 큰 상승이 있었습니다.

    • 이는 같은 시기에 직업 리뉴얼뿐만아니라 밸런스패치, 편의성 패치의 효과 등 측정하기 어려운 Confounder의 효과가 있기 때문으로 보여집니다.

즉, 일반적인 빈도분석을 통해서는 해당패치에서 직업 리뉴얼 패치가 해당 직업군의 신규생성수에 양의 효과가 있었음을 알아보기 어렵습니다. 그렇기 때문에, 여러 대조군이 존재하는 경우 treatment의 효과를 알아볼 수 있는 Synthetic Control방법을 적용하여 이를 알아보도록 하겠습니다.

2. Data

분석을 위해 날짜별로 직업별 신규 캐릭터 생성 수가 데이터가 필요하였습니다.

던전앤 파이터는 API를 통해 게임 내의 정보를 어느정도 가져올 수 있는 환경이 구축되어 있지만 이를 직접얻을 수는 없었으나, 캐릭터명과 서버명을 으로 캐릭터의 생성날짜를 얻을 수 있습니다.

이러한 환경에서 데이터 셋을 구축하기 위해 아래와 같은 프로세스로 데이터를 수집하였습니다.

  1. 던담(dundam.xyz)으로 부터 직업별 캐릭터명, 서버명 수집 (Selenium을 이용한 동적 크롤링을 이용).

  2. 네오플 API를 통해 수집된 캐릭터명, 서버명을 이용하여 캐릭터 생성일을 수집.

  3. 수집된 데이터에서 부터 직업별, 생성주차 별 캐릭터 생성빈도수로 전처리 (2022년 12주차 ~ 22주차).

    • 패치노트가 업로드되는 수요일을 기준으로 주차를 분류.
    • 일 단위의 경우 너무 빈도가 적어 주차별로 처리하여 분석.

\rightarrow 15개의 직업군 (스트리트파이터(여) 포함)의 경우 생성일을 얻을 수 없어 분석에서 제외.

  • 분석 데이터 형태

3. Synthetic Control

3.1. preliminary

분석하기에 앞서 분석에 적용되는 방법인 Synthetic Control에 대해 간략하게 설명해보겠습니다.이 방법은 관측할수 없는 Counterfactual을 만들어 비교하는 것입니다. 즉, treatment 가 가해지지 않은 실험군을 만들어 내는 것입니다. (ref 1.)

  1. treatment 가 일어나기 전 (위그림에서 X1)에서 함께 측정된 여러 대조군 (리뉴얼 되지 않은 직업군)을 이용해 실험군 (리뉴얼 직업)을 나타낼 수 있는 가중치 벡터 WW 를 얻습니다.
    이때 linear regression을 사용하지만

    YX1W=(t=1T(Ytj=1JwjXtj)2)1/2subject to j=1Jwj1||Y - X_1W|| = \left( \sum_{t = 1}^{T}\left(Y_{t} - \sum_{j = 1}^J w_jX_{tj}\right)^2\right)^{1/2} \text{subject to } \sum_{j = 1}^J w_j \leq 1

    를 이용하여 외삽(extrapolation) 이 아닌 내삽 (interpolation)이 되도록 weight값을 제한하여 줍니다. 이러한 방법의 효과는 오버피팅을 방지하여 treatment 이후 효과 예측의 정확도를 향상시킬 수 있습니다. (거의 모든 예측문제에서 extrapolation은 지양하여야 하는 부분입니다.)

  2. 가중치 벡터 WW를 이용해 treament 이후 대조군을 이용해 treatment가 가해지지 않은 실험군의 값을 예측합니다. (실제로 관측된 값은 treatment 가 가해진 실험군의 값입니다.)

이러한 방법을 통해 측정하기 어려운 Confounder 의 효과를 반영하여 treatment가 가해지지 않은 실험군의 값을 예측합니다. 이후 실제값과 비교하여 그 효과를 측정할 수 있습니다.

\rightarrow 해당 분석에서는 위 방법에 SVD와 Regularized Regression을 이용한 방법인 Robust Synthetic Control 방법을 이용하였으며 자세한 설명은 레퍼런스를 참고하시기 바랍니다. (ref 2.)

3.2. Analysis

아래 그림은 소환사와 쿠노이치 직업의 실제 신규 캐릭터 생성과 Synthetic Control을 통해 예측된 Treatment가 주어지지 않은 신규 캐릭서 생성량입니다. 실제로 20주차에 직업 리뉴얼 정보가 알려졌기때문에 20주차에 Treatment가 가해졌다고 가정하고 분석을 실행하였습니다.

  • 20주차 부터 22주차 의 Synthetic control 결과와 실제 생성량을 비교하여보면 직업 리뉴얼을 통해 소환사의 경우 244개, 쿠노이치의 경우 54개의 신규 캐릭터가 생성되었다고 추정할 수 있습니다.

  • 그래프를 보면 Synthetic Control이 적용된 예측량에도 비약적인 캐릭터 생성량의 상승이 있는데 이는 편의성 패치, 밸런스 패치 등의 효과가 반영된 것으로 보입니다. 각 직업들의 신규캐릭터 생성을 식으로 나타내보면 다음과 같습니다.

    Yth(T)=Cth+RthT+ϵY_{th}(T) = C_{th} + R_{th}\cdot T + \epsilon
    • YthY_{th}: tt시점의 직업 hh 의 신규 생성량
    • CthC_{th}: Treatment와 무관한 tt시점의 직업 hh 직업 생성량 효과 (Confounder 의 효과를 포함)
    • RthR_{th}: tt시점의 직업 hh 의 신규 생성량에 대한 Treatment의 효과
    • T      T\;\;\;: 리뉴얼 여부 (1 or 0)

    즉, 리뉴얼 직업의 실제 생성량은 Yth(1)Y_{th}(1) 이며 Synthetic control 결과는 Yth(0)Y_{th}(0)의 추정치입니다.

그럼 이 효과는 정말로 유효한 것일까요? 이를 검정해볼 수 없을까요? 이와 같은 과정을 리뉴얼되지 않은 직업군에 적용하여 이를 비교해볼 수 있습니다.

아래의 그림은 각 직업별로 인과효과의 추정Yth(1)Y^th(0)Y_{th}(1) - \hat{Y}_{th}(0)를 나타낸 것인데요. 리뉴얼되지 않은 직업군들도 리뉴얼되었다고 가정하고 같은 프로세스를 적용하여봅니다.

빨간색으로 표시된 직업이 각각 리뉴얼된 직업이며 회색으로 표현된 부분은 그렇지 않은 직업군들의 placebo효과의 추정입니다.

  • 20 주차 이전 (Treatment 이전)에서 큰 MSE값 을 보여준 직업은 Synthetic 효과를 잘 추정하지 못하기 때문에 분석에서 제외되었습니다.

그 결과, 20주차에서 22주차 모두 리뉴얼직업이 가장 높은 수치를 보여주었고 실제 직업 리뉴얼이 신규캐릭터 생성에 효과가 있음을 알 수 있습니다.

위 결과를 통해 다음과 같은 식으로 empirical 한 p-value 값을 추정해 보겠습니다.

Pvalue=1NI(R20:22,h>R20:22,h)P-value =\frac{1}{N}\sum I(R_{20:22, h'} >R_{20:22, h})

여기서 hh' 은 리뉴얼 직업이며 R20:22,h=t=2022RthR_{20:22, h} = \sum_{t= 20}^{22}R_{th}입니다.

  • 두 직업 모두 p-value 는 0.029로 다른 대조군들보다 더 큰 효과가 추정되었습니다.

Hypothesis Test

유의 수준 α\alpha 하에서 아래와 같은 검정을 해보았을 때,

H0:직업 리뉴얼 신규 캐릭터 생성 효과=0v.s.H1:직업 리뉴얼 신규 캐릭터 생성 효과>0H_0 : \text{직업 리뉴얼 신규 캐릭터 생성 효과} = 0 \quad v.s. \quad H_1: \text{직업 리뉴얼 신규 캐릭터 생성 효과} > 0
  • 두 개의 p-value를 얻을 수 있는 다중 검정이기 때문에 bonferroni correction을 이용하면 두 p-value 값이 모두 α/2\alpha/2 보다 낮은 경우 해당 귀무가설을 기각하게 됩니다.

  • 일반적으로 많이 이용되는 α\alpha 값인 0.05 에서는 아주 근소한 차이로 H0H_0 가설을 기각하기 어렵지만, p-value의 가장 낮은 값이 1/35( \approx 0.029) 이기 때문에 유의미한 결과로 볼 수 있습니다.

  • 이러한 분석 환경을 바탕으로 유의 수준 α\alpha 을 0.1로 조정한다면, 유의 수준 0.1 하에서 직업 리뉴얼에 따른 양의 신규 캐릭터 생성 효과가 있음을 알 수 있습니다.

4. Reference

  1. https://matheusfacure.github.io/python-causality-handbook/15-Synthetic-Control.html

  2. https://www.jmlr.org/papers/volume19/17-777/17-777.pdf

5. Code

해당 분석에 사용된 모든코드는 제 깃헙에 공유되어 있습니다.

https://github.com/rockgoat95/Synthetic-Control-Example

profile
Statistician, Data Analyst

0개의 댓글