1데이터로 결정한다는 것
데이터는 그 자체로는 결정이 아니다. 데이터에서 결정으로 가는 길에는 정해진 순서가 있다. 이 과목 전체를 관통하는 틀은 다섯 단계다.
$$\text{질문} \;\rightarrow\; \text{데이터} \;\rightarrow\; \text{분석} \;\rightarrow\; \text{결정} \;\rightarrow\; \text{가치}$$각 단계가 1주차의 Cookie Cats 사례에서 무엇에 해당하는지 놓아 보면 다음과 같다.
| 단계 | Cookie Cats 사례 | 교재의 위치 |
|---|---|---|
| 질문 | 게이트를 레벨 30에 유지할까, 40으로 옮길까? | 3절 |
| 데이터 | 유저 90,189명의 무작위 배정 실험 기록 | 1·2절 |
| 분석 | 그룹별 잔존율 집계와 검정 | 5·6절 |
| 결정 | 어느 게이트를 채택할 것인가 | 6절 |
| 가치 | 그 결정이 매출로 얼마인가 | 7절 |
이 틀에서 분석은 수단이고 결정이 목적이다. 이 과목의 모든 주제는 "예측했다" 또는 "분석했다"로 끝나지 않고 비즈니스 의사결정 질문으로 끝난다. 1주차는 다섯 단계를 작게 한 바퀴 완주하고, 이후 주차는 단계마다 실무 문제로 깊이를 더한다.
2A/B 테스트와 무작위 배정
A/B 테스트의 핵심은 비교가 아니라 무작위 배정(randomization)이다. 유저를 동전 던지듯 나누면 두 그룹은 게이트 위치를 제외한 모든 면(나이·실력·과금 성향·국가)에서 통계적으로 비슷해진다. 그래야 나중에 관찰되는 잔존율 차이를 다른 요인이 아니라 게이트 위치 때문이라고 말할 수 있다. 만약 유저가 스스로 게이트 버전을 골랐다면, 두 그룹의 차이가 게이트 때문인지 유저 성향 때문인지 가를 수 없다.
무작위 배정이 잘 됐는지는 배정 이전에 정해지는 값(나이·국가·기기)으로 확인한다. 배정 이후에 정해지는 값(판수·잔존)은 처치의 영향을 받으므로 배정 확인에 쓸 수 없다. Cookie Cats 데이터에는 배정 이전 값이 없어, 교재에서는 두 그룹의 표본 수가 비슷하다는 것(2-7~2-11)까지만 확인한다.
3좋은 분석 질문의 조건
같은 데이터라도 어떤 질문을 던지느냐에 따라 결정으로 이어지기도, 그렇지 않기도 한다. 결정으로 이어지는 질문은 세 가지를 갖춘다.
| 조건 | 게이트 질문 | 걸러지는 질문 |
|---|---|---|
| 행동 가능한 대안 | 30 유지 / 40 이동 — 회사가 실행할 수 있다 | "유저는 왜 이탈하는가" — 무엇을 할지 정해지지 않는다 |
| 가치로의 환산 | 잔존율 → 유저 가치 → 매출 | "게임이 재미있는가" — 환산 경로가 없다 |
| 지표의 지정 | 7일 잔존율로 답한다 | 지표를 정하지 않으면 결론이 갈린다 |
세 번째 조건이 1주차에서 실제로 문제가 된다. 데이터에는 잔존율(retention_1·retention_7)과
참여도(sum_gamerounds)가 모두 있고, 어느 지표를 쓰느냐에 따라 유의성 판정이 갈린다(7일
잔존율은 유의하고 1일 잔존율은 유의하지 않다). "무엇으로 결정할 것인가"는 분석에 앞서 정해야 할
비즈니스 질문이며, 분석이 끝난 뒤 유리한 지표를 고르는 것은 분석이 아니다.
4가설과 두 종류의 오류
유저를 무작위로 나눴으므로, 두 그룹에 아무 차이가 없어도 표본이 달라지면 잔존율은 조금씩 달라진다. 그래서 관찰된 차이가 그 우연 변동의 범위 안인지 밖인지를 물어야 한다. 이 물음을 다루는 형식이 가설검정이다.
$p_{30}, p_{40}$은 각 게이트의 모집단 잔존율(우리가 모르는 참값)이고, 데이터에서 계산한 $\hat p_{30}, \hat p_{40}$은 그 추정치다. 검정이 다루는 것은 추정치가 아니라 모수다.
| $H_0$가 참 | $H_0$가 거짓 | |
|---|---|---|
| 기각 | 1종 오류 (확률 $\alpha$) | 옳은 판정 |
| 기각 못 함 | 옳은 판정 | 2종 오류 (확률 $\beta$) |
게이트 문제에서 1종 오류는 차이가 없는데 게이트를 옮기는 것이고, 2종 오류는 차이가 있는데 현행을 유지하는 것이다. 두 오류의 비용이 다르다는 점은 5주차(비용 기반 임계값)에서 다시 다룬다.
5검정통계량 — 2표본 비율 z-검정
잔존 여부는 0/1이므로 그룹의 잔존율 $\hat p$는 베르누이 시행의 평균이고, 그 분산은 다음과 같다.
$$\operatorname{Var}(\hat p) = \frac{p(1-p)}{n}$$두 그룹이 독립이므로 차이의 분산은 각 분산의 합이 된다.
$$\operatorname{Var}(\hat p_1 - \hat p_2) = \frac{p_1(1-p_1)}{n_1} + \frac{p_2(1-p_2)}{n_2}$$귀무가설 아래에서는 두 모수가 같으므로, 공통 비율을 두 그룹을 합쳐 추정한다(합동추정). Cookie Cats의 7일 잔존율에서는 다음과 같다.
$$\hat p = \frac{x_1 + x_2}{n_1 + n_2} = \frac{8{,}502 + 8{,}279}{44{,}700 + 45{,}489} = 0.18606$$이 합동추정을 분산에 넣으면 검정통계량이 나온다.
$$z = \frac{\hat p_1 - \hat p_2}{\sqrt{\hat p\,(1-\hat p)\left(\dfrac{1}{n_1} + \dfrac{1}{n_2}\right)}}$$표본이 크면 중심극한정리에 의해 $z$는 표준정규분포를 따른다. 이 데이터의 표본은 그룹당 4만 명대이므로 근사가 충분히 성립한다. 교재는 합동추정 대신 키·판수와 똑같은 절차 — 각 집단의 분산을 데이터에서 추정해 $\sqrt{s_1^2/n_1 + s_2^2/n_2}$로 표준오차를 만드는 방식 — 로 계산하는데, 이 데이터에서는 두 방법의 $z$가 소수 셋째 자리까지 같다(3.164). 잔존 True/False를 1/0으로 두면 그 표본분산이 곧 $\hat p(1-\hat p)$에 해당하기 때문이다.
6p-value
$p < \alpha$이면 귀무가설을 기각한다. p-value는 "귀무가설이 참일 확률"이 아니라 "귀무가설이 참이라고 가정했을 때 이런 데이터가 나올 확률"이다. 교재 4절에서 7일 잔존율은 $p = 0.0016$으로 기각되고, 1일 잔존율은 $p = 0.0744$로 기각되지 않는다.
7신뢰구간
검정은 "차이가 0인가 아닌가"에만 답한다. 결정에는 차이의 크기가 필요하므로 구간을 함께 쓴다. 구간 추정에서는 귀무가설을 가정하지 않으므로 합동추정 대신 각 그룹의 추정치를 쓴다.
$$(\hat p_1 - \hat p_2) \;\pm\; z_{1-\alpha/2}\sqrt{\frac{\hat p_1(1-\hat p_1)}{n_1} + \frac{\hat p_2(1-\hat p_2)}{n_2}}$$95% 구간이면 $z_{0.975} = 1.96$이다. 구간이 0을 포함하지 않는 것과 $p < \alpha$는 같은 판정이며, 구간은 거기에 더해 효과의 범위를 알려 준다. 교재 4절의 7일 잔존율 차이는 [+0.31, +1.33]%p다.
교재가 쓰는 statsmodels의 기본 설정은 점수(score) 기반 구간을 쓰는데, 이 데이터에서는
위 식의 결과와 소수 둘째 자리까지 같다.
8그룹이 셋 이상이면 — 분산분석
게이트 후보가 30·40·50으로 셋이라면 비교는 분산분석이 맡는다. 그룹 간 변동을 그룹 내 변동과 비교하는 것이 그 원리다.
$$F = \frac{SS_{\text{처리}} / (k-1)}{SS_{\text{오차}} / (n-k)}$$그룹이 둘일 때는 두 방법이 같은 판정을 낸다. 비율 자료에서 $z^2$은 같은 분할표의 카이제곱 통계량과 정확히 일치한다(이 데이터에서 $3.164^2 = 10.013$). 도구의 이름이 무엇이든 물음은 하나다. 그룹 간 차이가 우연 변동의 범위를 넘는가.
9검정이 답하지 않는 것
$z$의 분모는 $\sqrt{1/n_1 + 1/n_2}$에 비례하므로, 같은 크기의 차이라도 표본이 커지면 $z$는 커진다. 이 데이터에서 표본을 1/4로 줄이면 $z$는 절반(약 1.58)이 되어 유의하지 않다. 반대로 표본이 충분히 크면 실무적으로 무의미한 차이도 유의해진다.
따라서 유의성은 "차이가 있다"까지만 말하고 "그 차이가 얼마짜리인가"는 말하지 않는다. 그 물음에는 교재 5절이 답한다. 잔존율 차이(비율)에 신규 유저 100만 명을 곱해 추가 잔존 유저 수로 옮기고, 잔존 유저 한 명의 가치(회사만 아는 값)에 대한 민감도로 금액을 보이며, 점추정과 신뢰구간 양 끝을 함께 제시한다.
여러 구간을 동시에 비교할 때는 우연히 차이가 커 보이는 구간이 생긴다는 점도 검정이 스스로 막아 주지 않는다. 예를 들어 유저를 판수 구간 열 개로 나눠 구간마다 두 그룹을 비교하면 그중 하나쯤은 $p < 0.05$가 나오기 쉽다. 이것이 다중비교 문제이며, 결정 지표는 하나로 미리 정해 두는 이유의 하나다.
10산업공학에서 배운 것과의 연결
1주차의 도구는 그룹 비교 검정이다. 통계학과 실험계획법에서 배운 가설검정(귀무가설, p-value, 분산분석)이 그대로 쓰인다. 이 과목이 매주 하는 일이 이 형식이다. 전공에서 배운 도구를 실제 산업 데이터에 적용해 의사결정으로 완결한다.
| 주 | 배운 곳 | 이 과목의 결정 |
|---|---|---|
| 1 | 통계학·실험계획법 (가설검정) | A/B 실험으로 게임 기능을 확정한다 |
| 2 | 경영정보·물류관리 (관계형 데이터·분위수) | 배송 약속일을 며칠로 할지 정한다 |
| 3 | 신뢰성공학·설비보전 (고장률·예방정비) | 언제 교체할지 정비 정책을 정한다 |
| 4 | 품질관리 (관리도·공정능력) | 공정 운전 조건을 재설정한다 |
| 5 | 품질경영 (검사·오류비용) | 정비 대상 선별 기준을 정한다 |
| 6 | 통계학 (회귀분석), 실험계획법 (블록화) | 날씨에 따른 운영 인력 규모를 정한다 |
| 7 | 대기행렬이론 (Little·M/M/c) | 시간대별 상담원 수를 정한다 |
| 9 | OR (선형계획·쌍대) | 어느 창고를 닫을지 정한다 |
| 10·11 | 생산계획·재고관리론 (수요예측·안전재고) | 발주량과 재고 정책을 정한다 |
| 12 | 실험계획법 (무작위화·인과) | 캠페인 예산의 타겟을 정한다 |
11연습문제
교재를 열기 전에 손으로 답을 적어 본다. 계산이 필요한 문항은 5절과 7절의 식에 숫자를 넣으면 되고, 나머지는 한두 문장이면 된다. 수업 도입에서 몇 문항을 함께 확인한다.
- 합동추정과 z. 7일 잔존율의 성공 수는 gate_30이 8,502 / 44,700, gate_40이 8,279 / 45,489이다. 5절의 식으로 $\hat p$, 표준오차, $z$를 직접 계산해 3.164가 나오는지 확인하라. 소수 셋째 자리까지 맞추면 된다.
- 표본 크기. 두 그룹의 표본을 각각 1/4로 줄이고 잔존율은 그대로라고 하자. $z$는 얼마가 되고 유의수준 0.05에서 판정은 어떻게 바뀌는가. 반대로 표본을 4배로 늘리면 어떻게 되는가. 이 결과가 "유의하다"는 말의 뜻에 대해 무엇을 말해 주는가.
- 구간과 판정. 어떤 실험에서 차이의 95% 신뢰구간이 [−0.2, +1.1]%p로 나왔다. p-value는 0.05보다 큰가 작은가. 이 결과로 "효과가 없다"고 말할 수 있는가.
- 지표의 선택. 1주차 데이터에서 1일 잔존율은 $p = 0.074$, 7일 잔존율은 $p = 0.0016$이다. 만약 반대로 1일만 유의하고 7일은 유의하지 않았다면 게이트를 어디에 두겠는가. 지표를 분석 뒤에 고르면 무엇이 문제인가.
- 무작위 배정. 게이트 버전을 서버가 무작위로 배정하지 않고, 설치 시각이 짝수 분이면 30, 홀수 분이면 40으로 배정했다고 하자. 이것은 무작위 배정으로 볼 수 있는가. 볼 수 없다면 어떤 경우에 문제가 되는가.
- 1종·2종 오류의 비용. 게이트를 옮기는 데 개발·QA 비용 3천만 원이 들고, 잔존율 +0.8%p는 연 1.5억 원의 가치라고 하자. 1종 오류(차이가 없는데 옮김)와 2종 오류(차이가 있는데 유지)의 비용은 각각 얼마인가. 두 비용이 다르면 유의수준 0.05를 그대로 써도 되는가.
- 다중비교. 서로 다른 지표 20개로 같은 두 그룹을 각각 검정하면, 실제로는 아무 차이가 없어도 유의수준 0.05에서 적어도 하나가 유의하게 나올 확률은 대략 얼마인가($1-0.95^{20}$). 이것이 "결정 지표를 미리 하나로 정한다"는 원칙과 어떻게 이어지는가.
부록교재에서 쓰는 함수
5절과 7절의 식을 교재에서는 statsmodels의 두 함수로 계산한다. 인자 순서만 알면 된다.
from statsmodels.stats.proportion import proportions_ztest, confint_proportions_2indep # 5절의 z와 6절의 p-value. 성공 수(True의 개수)와 표본 수를 그룹 순서대로 준다. z, p = proportions_ztest([성공수_1, 성공수_2], [표본수_1, 표본수_2]) # 7절의 신뢰구간. compare="diff"는 두 비율의 차이에 대한 구간이다. lo, hi = confint_proportions_2indep(성공수_1, 표본수_1, 성공수_2, 표본수_2, compare="diff")
성공 수는 불리언 열을 그룹별로 .sum()한 값이고, 표본 수는 그룹별 value_counts()다.
교재 4절의 4-13(검정 함수)와 4-16(신뢰구간)가 이 순서대로 진행된다.