게임 플레이어는 좋은 아이템을 획득하면 게임을 더 열심히 하게 될까?
by DANBI
들어가며
최근에 많은 IT기업들이 연봉을 큰 폭으로 인상했다는 기사를 종종 보곤 합니다. 사실 보상이 직원의 생산성에 어떤 영향을 미치는가에 대해선 의견이 분분합니다. 얼핏 생각해 보면 보상이 크면 직원은 그만큼 회사에 대한 로열티와 만족도가 올라가서 더 열심히 일할 것 같은데, 또 한편으로 생각해 보면 열심히 일해야 한다는 목적을 충족했기 때문에 동기 부여가 안되어 오히려 덜 열심히 일할수도 있을 것 같습니다.
예를 들어 메이저리그에서는 선수들이 FA 자격이 주어지기 직전에 성적이 좋다가 FA 이후 높은 연봉을 받고 이적한 뒤에 성적이 하락하는 경우가 많습니다. 그래서 이것만 보면 높은 보상은 오히려 부정적인 효과를 주는 것 같습니다. 물론 이렇게 단정하는 것은 위험합니다. 왜냐하면, 대개 FA 자격이 주어지는 선수들은 어느 정도 나이가 많기 때문에 선수로서의 전성기를 지난 경우가 많기 때문이죠. 따라서 단순히 나타난 현상만 갖고 어떻다 단정하는 것은 위험합니다.
아마 가장 정확하게 확인하려면 다른 조건은 모두 동일한 어떤 두 사람에게 차별 보상을 했을 때 그 이후에 이 둘의 생산성이 어떻게 변하는지를 관찰하는 건데 실제 이런 실험을 할수는 없겠죠 ^^; 대신 사회과학자들은 여러 사례를 수집한 후 데이터 분석을 통해 보상과 생산성에 대한 인과 분석을 합니다. 하지만 좋은 데이터를 수집하기도 힘들뿐더러 각 사례에서 다양한 조건과 상황을 모두 고려한 정확한 분석을 하기는 쉽지 않습니다.
그런데 문득 게임에서는 어떤 큰 보상이 주어졌을 때 플레이어의 게임 활동이 어떻게 변할까? 라는 궁금증이 생겼습니다 (물론 일을 열심히 하는 것과 게임을 열심히 하는 것은 다르지만요). 그리고 마침 저희 회사 게임에 이와 비슷한 상황을 관찰할 수 있는 경우가 있어서 분석을 진행해 보았습니다.
분석 내용에 앞서 배경 설명을 간략히 드리면 분석 대상 게임에서 모든 캐릭터는 생성부터 직업을 갖게 됩니다. 그리고 각 직업마다 등급(일반, 고급, 희귀, 영웅, 전설, 신화)이 있고 특정 등급으로 전직하기 위해서는 특별한 아이템이 필요합니다. 해당 아이템을 사용하여 높은 등급으로 전직하면 전반적인 캐릭터의 능력치가 올라가는데 영웅 등급부터 대폭 향상되기 때문에 영웅 등급 이후가 매우 중요합니다. 하지만 영웅 등급 전직을 위한 아이템을 얻기 매우 어려워 대부분 유저들이 게임을 시작하고 첫 목표를 영웅 전직(주로 “영변”이라 부릅니다)으로 잡습니다.
[그림1] 첫 영변을 얻었을 때의 기분이란!
보상을 획득하는데 우연성이 중요한 점과 획득하였을 때 큰 이점이 존재한다는 점 그리고 많은 플레이어들이 이 영웅 전직을 게임을 열심히 하려는 주요 목표로 삼는다는 점으로 보았을 때, 게임 내 “영변”을 획득하는 것은 현실 세계에서 근로자들에게 큰 보상이 주어지는 상황과 비슷하다고 생각했습니다. 그래서 “유저가 최초로 영웅/전설 등급 전직을 획득하면 그 이후 플레이를 더 열심히 할까?”, “유저가 플레이를 열심히 하게되는 이유가 최초로 영웅/전설 등급을 획득해서일까?” 라는 인과 효과에 대해 궁금증이 생겼고 분석을 진행하게 되었습니다.
(이하 문장의 간결성을 위해 “최초로 영웅/전설 등급 전직 획득”을 “영웅/전설 획득” 이라고 칭하겠습니다)
분석 방식
분석 방법은 다음과 같습니다. 기존에 영웅/전설 획득을 한 적이 없는 유저들을 일주일간 관측하여 그 기간 동안 최초로 획득한 집단 (실험군) 과 그렇지 못한 집단 (대조군) 을 분류합니다. 이 후 두 집단의 플레이 시간 및 결제 금액 등의 게임 활동량과 관련된 값들이 이전에 비해 얼마나 달라졌는지 그 변화값을 측정한 후 두 집단의 차이가 통계적으로 유의한지 확인합니다. 이렇게 하면 영웅/전설 획득을 하지 않았을 때 대비 획득하였을 때의 플레이 변화를 볼 수 있기 때문에 영웅/전설 획득이 플레이 변화에 미치는 영향을 확인할 수 있을 것입니다.
그러면 영웅/전설 획득이 플레이 변화에 원인이 되는지 알 수 있겠네요? 아니요, 그렇게 단순하지 않습니다..
이제 분석의 최종 목적인 “영웅/전설 획득이 플레이 변화에 원인이 되는가?”를 생각해봅시다. 위에서 확인한 두 집단 간 플레이 변화 차이를 영웅/전설 획득이 플레이 변화에 미치는 인과 효과라고 할 수 있을까요? 그렇지 않을 가능성이 매우 높습니다. 왜냐하면 인과 효과를 주장하기 위해서는 두 집단(실험군, 대조군) 사이에 “영웅/전설 획득”을 제외하고 다른 성질이 동일해야하는데 그렇지 않은 확률이 높기 때문입니다. 플레이 변화에 영향을 줄 수 있는 다른 것들을 동일하게 유지하고 영웅/전설 획득만 바꾸었을 때 플레이 변화 차이가 발생하는지 측정해야 하는 것이죠.
- 예를 들어, 어떤 변수 A가 플레이 변화에 영향을 미치는 원인이고 두 집단(실험군, 대조군) 간 A가 매우 다른 상태라고 해봅시다.
- 만약 “두 집단의 플레이 변화 차이가 존재한다”라는 결론이 나왔을 때, 이것이 영웅/전설 획득에 때문에 일어난 결과라고 할 수 있을까요?
- 아닙니다. 이것은 변수 A에 의해 발생한 결과일 수 있습니다.
이렇듯 현실에서 어떤 기준으로 두 집단을 나누는 경우, 해당 기준을 제외하고 다른 특성들이 두 집단 간에 동일하지 않은 경우가 많습니다. 이것을 고려하지 못한 채 단순히 두 집단의 플레이 변화를 비교한다면 영웅/전설 획득이 플레이 변화에 원인이 아니었음에도 우리는 원인이다라고 잘못된 인과 효과를 주장할 수도 있습니다.
때문에 본 분석에서 실험군, 대조군 간에 성질을 동일하게 맞춰주는 “인과 추론”이라는 절차가 매우 중요하였고 그 과정을 먼저 소개드리려고 합니다.
인과 추론이 뭐에요?
인과 추론은 우리가 확인하기 원하는 인과 효과를 측정하기 위한 과정으로 인과 효과를 제외한 다른 영향을 동일하게 맞추기 위해 어떤 요인을 건드려야 하는지(통제) 찾는 것으로 이해하시면 좋을 것 같습니다. 그렇다면 외부 영향에는 어떤 것이 존재할까요?
confounder(교란 변수)
confounder는 원인 변수와 결과 변수에 동시에 영향을 주면서, 원인 변수와 결과 변수 사이에 상관 관계를 만드는 변수를 말합니다.
[그림2-1] 원인 변수와 결과 변수에 동시에 영향을 주는 교란 변수
[그림2-2] 교란 변수 때문에 애초에 두 그룹의 공정한 비교가 불가능합니다(교란 변수의 개념적 이해)
- 애초에 게임에 대해 애착이 높은 유저는 영웅/전설 획득 가능성이 높을 수 있으며, 플레이 변화가 증가할 가능성(게임을 열심히 함)도 높을 수 있습니다.
- 게임에 대한 애착이 영웅/전설 획득과 플레이 변화에 동시에 영향을 주기 때문에, 실제로 영웅/전설 획득과 플레이 변화 간에 인과 관계가 없더라도 “상관 관계”가 생기게 됩니다.
- 즉, 실제로는 영웅/전설 획득으로 인해 플레이 변화 차이가 발생한 것이 아님에도 불구하고, 영웅/전설 획득이 플레이 변화를 야기하는 원인이다라는 잘못된 판단을 하게 될 수 있습니다.
이처럼 교란 변수는 인과 관계 추정에 혼란을 야기하는 요소입니다. 교란 변수의 영향을 제거하지 못한 채 단순히 실험군, 대조군의 “플레이 변화” 차이를 통해 인과 효과를 추정하려 한다면 잘못된 결과를 얻을 수 있습니다.
그렇다면 교란 변수에 의한 “상관 관계”를 제거하고 우리가 원하는 인과 효과를 추정하려면 어떻게 해야할까요? 바로 교란 변수를 통제한 후 두 집단의 “플레이 변화”를 비교하면 됩니다. 여기서 교란 변수를 통제한다는 것은 교란 변수의 값이 같은 샘플끼리 묶어서 비교한다는 것과 같습니다.(이렇게 하면 공정한 비교가 가능해지겠죠!) 실제 분석 시에는 추정 모델에 교란 변수를 통제 변수로 추가하는 방법을 사용합니다.
교란 변수를 통제해야 하는 이유는 Appendix에 수식으로 설명되어 있으니 참고하시면 좋을 것 같습니다.
collider
그렇다면 교란 변수로 판단되는 가능한 많은 변수를 통제하여 인과 관계를 추정하면 될까요? 여기서 조심해야할 것이 있습니다. 원인 변수와 결과 변수의 영향을 동시에 받는 변수는 통제 대상에서 제외하여야 합니다.(이런 변수를 collider라고 부릅니다)
[그림3-1] 원인 변수와 결과 변수에 동시에 영향을 받는 collider
원인 변수와 결과 변수의 영향이 합쳐져 만들어진 결과인 collider를 통제하는 것은 원인 변수와 결과 변수를 특정 관계로 고립시키는 것입니다. 이것을 조금 더 분석적인 관점에서 설명하면 collider를 통제하면 원인 변수, 결과 변수 사이에 관계가 생기면서 이 관계를 만족하는 샘플들만 남게 된다는 의미입니다. 전체 샘플을 분석에 사용하지 못하고 원인 변수, 결과 변수 간 관계가 있는 샘플들만 사용되기 때문에 결과에 편향을 유발합니다. 이를 collider bias라고 부릅니다.
다시 말해, collider를 통제하여 인과 관계를 추정하면 원인 변수와 결과 변수 간에 종속관계가 있는 샘플만으로 영향을 추정하는 것이므로 실제 인과 관계가 아닌 상관 관계를 추정하게 됩니다. 그리고 우리는 그 상관 관계를 인과 관계로 오해할 수 있기 때문에 collider는 통제하지 말아야 합니다.
[그림3-2] collider를 통제하면 일부 샘플만 분석에 사용됩니다(collider bias의 개념적 이해)
collider를 통제하지 말아야 하는 이유는 Appendix에 수식으로 설명되어 있으니 참고하시면 좋을 것 같습니다.
정리하면, 우리가 보고자 하는 원인 변수(영웅/전설 획득)가 결과 변수(플레이 변화)에 미치는 인과 효과를 추정하기 위해서는 다양한 외부 변수와의 관계를 고려한 후 실제로 통제가 필요한 변수만을 선별하는 과정이 필요합니다.
- 통제 변수가 될 수 있는 변수 후보를 생각하고 정리해봅니다.
- 원인 변수, 결과 변수, 통제 변수 후보 간 인과 관계를 인과 다이어그램으로 표시합니다.
- 인과 효과 추정을 위해 인과 다이어그램에서 외부 영향을 제거할 수 있는 변수를 통제 변수로 선정합니다
- 선정한 통제 변수들을 통제하여 인과 효과를 추정합니다.(본 분석에서는 회귀식에 독립 변수로 추가하여 통제하였습니다)
분석 설계
위에서 정리한 내용을 바탕으로 다음과 같이 인과 분석을 설계하였습니다.
- 변수 정의
- 분석 기간 선정
- 대상 선정
- 세부 그룹
- 인과 다이어그램을 통한 통제 변수 구성
1. 변수 정의
1-1. 원인 변수 및 결과 변수
원인 변수는 “최초 영웅/전설 획득 여부”로 정의하여 획득 유저는 실험군, 획득하지 못한 유저는 대조군을 분류하였습니다. 샘플 수 확보를 위해 측정 기간은 7일로 설정하였습니다.
결과 변수(플레이 변화)는 유저가 게임을 열심히 하는지를 반영할 수 있도록 1) 유저가 게임에 투입하는 시간 및 자본, 2) 유저가 즐기는 컨텐츠의 변화 두 가지 관점으로 살펴보았습니다. 유저가 게임에 투입하는 시간 및 자본이 증가하는 경우, 투입하는 시간의 변화가 적더라도 상위 컨텐츠를 이용하게 되는 경우 둘 다 게임을 열심히 하게 되는 것 이라고 정의하였습니다.
- 원인 변수
- 최초 영웅/전설 획득 여부 (획득 : 1, 미획득 : 0)
- 결과 변수(플레이 변화)
- 전후 30일 간 접속 일수 변화(이후 30일 간 접속 일수 - 이전 30일 간 접속 일수)
- 전후 30일 간 결제 금액 변화(이후 30일 간 결제 금액 - 이전 30일 간 결제 금액)
- 1/2/3/4주 후 유저 그룹 지표 상향 여부(1주 전 유저 그룹 지표 대비 n주 후 유저 그룹 지표의 상향 여부)
- 상향 시 1
- 아닌 경우 0
정의한 원인 변수, 결과 변수를 바탕으로 본 분석에서 확인하고자 하는 인과효과를 구체적으로 정의하면 다음과 같습니다.
- 최초 영웅/전설 등급 획득이 접속 일수 변화에 원인이 되는가? 그렇다면 어떠한 영향을 주는가?
- 최초 영웅/전설 등급 획득이 결제 금액 변화에 원인이 되는가? 그렇다면 어떠한 영향을 주는가?
- 최초 영웅/전설 등급 획득이 유저 등급 지표 상향에 원인이 되는가? 그렇다면 어떠한 영향을 주는가?
1-2. 통제 변수 후보
통제 변수 후보로는 영웅/전설 획득, 플레이 변화에 영향을 미칠 것으로 예상되는 변수를 탐색하였습니다.
MMORPG 특성을 고려하였을 때, 유저가 게임을 하며 겪는 전체 과정을 성장 → 정체 → 매몰 비용 으로 나눌 수 있었고 각 단계별로 영웅/전설 획득과 플레이 변화에 영향을 미칠 것으로 예상되는 변수를 탐색하였습니다. 변수 집계 기간은 14일로 하였고(원인 변수 측정 기간 14일 전 ~ 원인 변수 측정 기간 1일 전) 총 9개의 변수를 통제 변수가 될 수 있는 후보로 선정하였습니다.
- 성장 : 유저가 성장하는 재미를 느낄수록 향후 플레이가 증가할 것이다. (no.1 ~ 5)
- 정체 : 유저가 성장하지 못하고 정체해 있을수록 향후 플레이가 감소할 것이다. (no.6)
- 매몰 비용 : 게임에 대한 투자가 많을수록 향후 플레이 감소가 적을 것이다. (no.7 ~ 9)
no | 변수명 | 영향을 받을 것으로 예상되는 결과 변수 |
---|---|---|
1 | 희귀 등급 수 | 접속 일수, 결제금액 |
2 | 컬렉션 완성 횟수 | 접속 일수 |
3 | 스킬 습득 횟수 | 접속 일수 |
4 | 인챈트 성공 횟수 | 접속 일수 |
5 | 등급 합성 성공 횟수 | 결제 금액 |
6 | 사망 횟수 | 접속 일수, 결제 금액 |
7 | 계정 생성 후 경과일 | 접속 일수 |
8 | 레벨 | 접속 일수 |
9 | 총 결제액 | 접속 일수, 결제금액 |
2. 분석 기간 선정
인과 효과가 일부 기간에만 일시적으로 나타나는지 또는 여러 기간에 걸쳐 동일하게 나타나는지 재현성을 확인하기 위해 주요 업데이트 시점을 기준으로 총 5개의 분석 기간을 선정하였습니다.
주요 업데이트 시점을 기준으로 한 이유는 해당 시점 이후 게임 내 영웅/전설 등급의 가치가 변할 것이고 이에 따라 영웅/전설 획득이 플레이 변화에 미치는 인과 효과도 변할 것이라고 판단하였기 때문입니다. 크게 대규모 업데이트, 소규모 업데이트 두 종류로 나뉘었는데 이에 따라서도 인과 효과가 다르게 나타나는지 확인할 수 있을 것이라 판단하였습니다.
- 대규모 업데이트 : 2개의 분석 기간
- 소규모 업데이트 : 3개의 분석 기간
3. 대상 선정
[그림4] 변수 집계 기간 선정을 위한 실험군, 대조군 d시점 매칭
분석 대상은 측정 기간 전에 영웅/전설 획득을 한 적이 없는 유저 중 측정 기간 동안 게임에 접속하여 획득 시도를 한 유저로 선정하였습니다. 여기서 측정 기간 동안 게임에 접속한 유저라는 조건으로 둔 이유는 역인과 관계로 인한 편향(접속 → 영웅/전설 획득)을 방지하기 위해서입니다. 이러한 조건 없이 대상을 선택하면 대조군에 측정 기간 동안 게임에 접속하지 않아 영웅/전설 획득을 하지 못한 유저가 포함되고, 실험군은 전부 측정 기간에 접속했던 유저들이기 때문에 공정한 비교가 어려울 것입니다.
이렇게 대상 유저를 선정한 후, 분석을 위해 영웅/전설 획득 여부에 따라 실험군(획득 유저), 대조군(미획득 유저) 두 집단으로 나누었습니다. 마지막으로 변수 집계 기간을 설정하기 위해 측정 기간 7일 간 일자별로 유저를 매칭하였습니다
- 실험군(d시점) : 측정 기간 7일 간 영웅/전설 획득 유저 중 최초 획득을 d시점에 한 유저
- 대조군(d시점) : 측정 기간 7일 간 영웅/전설 미획득 유저 중 최초 획득 시도를 d시점에 한 유저
4. 세부 그룹
영웅/전설 획득이 플레이 변화에 미치는 인과 효과가 특정 그룹에 따라 다르게 나타날 수가 있기 때문에 그룹별로 나누어 인과 효과를 추정하는 것이 맞다고 판단하였습니다.
가령, 유저가 PVP나 전투를 즐기는지에 따라 영웅/전설 획득이 플레이에 변화에 미치는 영향이 다를 수 있습니다. PVP나 전투를 즐기는 유저는 영웅/전설 획득이 매우 중요하여 향후 플레이 증가에 큰 영향을 미칠 수 있고, 사냥 위주 플레이를 즐기는 유저에게는 큰 영향이 없을 수 있습니다.
그런데 PVP 및 전투 특성에 따라 그룹을 나누지 않고 전체 집단에 대해 인과효과를 추정하게 되면, 두 그룹에서 각각 발생하는 인과 효과가 상쇄되어 인과 효과가 존재하지 않는다는 결과가 나올 수도 있습니다. 따라서, 인과 효과가 다르게 나타날 것으로 생각되는 특성을 기준으로 그룹을 나누어 각각 인과 효과를 추정하였습니다.
본 분석에서는 전반적인 플레이 성향을 나타내는 “유저 그룹 지표”에 따라 인과 효과가 다르게 나타날 것으로 판단하여 해당 기준으로 그룹을 나누었습니다.
- 그룹1 : 그룹2 대비 사용 시간과 게임 컨텐츠 참여도가 높은 유저(d시점 전 주 기준)
- 그룹2 : 사용 시간이 적고 게임 컨텐츠 참여도가 적은 유저(d시점 전 주 기준)
그리고, 결제 금액 변화에 대한 인과 효과 추정 시에는 “기존에 결제를 하였는지”에 따라 인과 효과가 다르게 나타날 것으로 판단하여 추가로 유저를 나누어 분석을 진행하였습니다.
- 과금 유저 : 결제 이력이 있는 유저(계정 생성 ~ d-1시점)
- 무과금 유저 : 결제 이력이 없는 유저(계정 생성 ~ d-1시점)
각 결과 변수에 대한 영웅/전설 획득의 인과 효과 추정 시 세부 그룹을 정리하면 다음과 같습니다.
인과 효과 추정 | 세부 그룹 |
---|---|
접속 일수 변화 | 유저 그룹 지표 → 총 2개의 그룹 |
결제 금액 변화 | 유저 그룹 지표 & 기존 결제 여부 → 총 4개의 그룹 |
유저 그룹 지표 상향 여부 | 유저 그룹 지표 → 총 2개의 그룹 |
5. 인과 다이어그램을 통한 통제 변수 구성
인과 효과 추정을 위해서는 통제 변수의 후보(외부 변수)가 원인 변수, 결과 변수와 어떤 관계를 맺고 있는지(confounder, collider) 확인하고 실제로 통제가 필요한 변수를 선별해야 합니다. 그래서 변수 간 전체적인 관계를 파악하는 과정이 필요한데 이 때 인과 다이어그램을 사용합니다.
인과 다이어그램 요소
인과 다이어그램은 노드(Node), 엣지(Edge) 두 가지 요소로 구성됩니다. 노드는 변수를 의미하고 엣지는 노드 간 인과 관계를 의미합니다. 엣지는 화살표로 표현되며 엣지가 출발하는 노드가 원인, 도착하는 노드가 결과입니다.
인과 다이어그램 표현 방법
예를 들어 “노드2의 원인은 노드1이다”라는 인과 관계를 표현하고자 한다면 노드1 → 노드2로 화살표(엣지)로 연결해주면 됩니다. 그리고 인과 관계가 없다고 판단되는 경우 엣지로 연결하지 않으면 됩니다. 이것을 모든 노드 쌍에 대해 표시해주면 인과 다이어그램이 완성됩니다.
여기서 주의할 점은 인과 다이어그램 내에서 cycle이 존재하지 않아야 합니다.
- 예를 들어 노드1 → 노드2, 노드2 → 노드3, 노드3 → 노드1 인 관계가 존재하는 경우 노드1 → 노드2 → 노드3 → 노드1… 로 cycle이 생기게 됩니다.
본 분석에서는 A → B인 경우 B의 집계 시점을 A보다 더 나중으로 설정하여 cycle을 방지하였습니다.
인과 다이어그램을 이용한 최종 통제 변수 선정 절차
아래의 인과 다이어그램에서는 인과 효과는 C1을 의미하는데 C1을 제외한 원인 변수에서 결과 변수로 이어지는 모든 엣지의 영향을 차단할 수 있는 변수를 선정하는 절차를 의미합니다. 이를 위해 아래와 같이 4가지 단계를 거쳤습니다.
- step1) 원인 변수, 결과 변수에 직접적인 영향을 주지 않는 인과 관계 무시를 위한 노드 통제
- step2) 원인 변수 외에 결과 변수에 영향을 주는 노드 통제
- step3) 원인 변수, 결과 변수에 동시에 영향을 받는 노드(collider)
- step4) 최종 통제 변수 선정
- step1과 step2에서 선정된 전체 통제 변수들 중 step3에 포함되는 변수는 제외
5-1. 접속 일수 변화 인과 다이어그램
[그림5] 접속 일수 변화에 대한 인과 다이어그램
step1)
- 영웅/전설 획득, 접속 일수 변화 노드에 연결되지 않는 엣지를 의미합니다 (C3, C4, C5, C6, C12, C13)
- 해당 엣지가 향하는 노드를 통제함으로써 해당 인과 관계를 무시할 수 있습니다. (희귀 등급 수, 컬렉션 완성 횟수, 스킬 습득 횟수, 인챈트 성공 횟수, 레벨, 총 결제액 노드 통제)
step2)
- 접속 일수 변화 노드에 직접적으로 인과 영향을 미치는 영웅/전설 획득을 제외한 노드입니다 (C7, C8, C9, C10, C11, C14)
- 해당 노드들은 인과 효과(C1) 이외에 접속 일수 변화에 영향을 미치는 변수이므로 통제가 필요합니다 (컬렉션 완성 횟수, 스킬 습득 횟수, 인챈트 성공 횟수, 레벨, 총 결제액, 사망 횟수 노드 통제)
step3)
- 영웅/전설 획득, 접속 일수 변화 노드로부터 동시에 영향을 받는 노드를 의미합니다(없음)
- 해당 변수는 위에서 설명한 collider이므로, 통제 변수에서 제외하여야 합니다.
step4)
- step1, step2에서 선정된 통제 변수들 중 step3에 포함되는 변수를 제외합니다. (희귀 등급 수, 컬렉션 완성 횟수, 스킬 습득 횟수, 인챈트 성공 횟수, 레벨, 총 결제액, 사망 횟수)
이제 인과 효과 추정을 위해 선정된 통제 변수를 포함하여 모델을 구성합니다. 본 분석에서는 원인 변수와 통제 변수를 독립 변수로 하고 결과 변수를 종속 변수로 하는 선형 회귀 모델을 사용하였습니다. 이렇게 모델을 설계하면 통제 변수를 통제한 상태에서 원인 변수가 결과 변수에 미치는 인과 효과를 추정할 수 있습니다.
- 접속 일수 변화 ~ 영웅/전설 획득 여부 + 희귀 등급 수 + 컬렉션 완성 횟수 + 스킬 습득 횟수 + 인챈트 성공 횟수 + 레벨 + 총 결제액 + 사망 횟수
5-2. 결제 금액 변화 인과 다이어그램
[그림6] 결제 금액 변화에 대한 인과 다이어그램
위의 방식과 마찬가지로 최종 통제 변수를 선정하여 모델을 설계하면 아래와 같습니다.
- 결제 금액 변화 ~ 영웅/전설 획득 여부 + 희귀 등급 수 + 등급 합성 성공횟수 + 총 결제액 + 사망 횟수
5-3. 유저 그룹 지표 상향 인과 다이어그램
유저 그룹 지표 상향 여부는 접속 일수 변화, 결제 금액 변화와 다르게 변수의 값이 binary type(0 또는 1)이므로, 종속 변수가 binary type일 때 사용하는 로지스틱 회귀 모델을 사용하였습니다.
그리고 유저 그룹 지표 상향 여부는 접속 일수, 결제 금액 등 전반적인 게임 플레이 활동량에 따라 산출되는 변수이기 때문에 위에서 접속 일수, 결제 금액 변화에서 선정한 통제 변수의 합집합을 통제 변수로 사용하였습니다.
- 유저 그룹 상향 여부 ~ 영웅/전설 획득 여부 + 희귀 등급 수 + 등급 합성 성공횟수 + 컬렉션 완성 횟수 + 스킬 습득 횟수 + 인챈트 성공 횟수 + 레벨 + 총 결제액 + 사망 횟수
분석 결과
5개의 기간에 대해 모두 분석을 진행한 결과 인과 효과의 크기는 조금씩 다르지만 공통적으로 “최초 영웅/전설 획득은 유저의 플레이 증가에 유의한 영향을 미친다”라는 결과가 나왔습니다. 그래서 아래에는 업데이트 종류별로 대표 결과를 하나씩 첨부하였습니다.
결과 해석 방법
아래의 그래프가 나타내는 것은 영웅/전설을 획득하지 못한 그룹(대조군)에 비해 획득한 그룹(실험군)의 플레이 변화가 1)평균적으로 얼마나 큰지 or 작은지와 2) 신뢰구간을 나타냅니다. 해석 방법은 다음과 같습니다.
- 인과 효과 존재 여부
- 신뢰 구간에 0인 값이 포함되지 않는다면 “인과 효과가 있다(원인이 된다)”라고 해석합니다.
- 반대로 포함된다면 “인과 효과가 없다”라고 해석합니다.
- (인과 효과가 존재하는 경우) 인과 효과 방향 및 크기 확인
- 신뢰 구간이 0인 값 우측에 있으면 “영웅/전설 획득은 플레이 변화의 증가에 영향을 준다” 라고 해석합니다.
- 반대로 좌측에 있으면 “영웅/전설 획득은 플레이 변화의 감소에 영향을 준다”라고 해석합니다.
5-1. 접속 일수 변화에 미치는 인과 효과 추정
대규모 업데이트 이후 | 소규모 업데이트 이후 |
---|---|
모든 유저 그룹에서 최초 영웅/전설 획득은 30일 간 플레이 증가에 유의한 영향을 미치는 것으로 나타납니다.
여기서 유저 그룹 간 영향의 크기 차이가 존재하는데, 대규모 업데이트 이후(왼쪽 그래프) 그룹1에서는 인과 효과가 약 1.7일인 반면 게임 참여도가 낮은 그룹2에서는 5.1일로 더 큰 효과가 나타나는 것을 알 수 있습니다. 이를 보았을 때 기존에 접속을 자주 하지 않던 유저에게 최초 영웅/전설 획득은 더 자주 접속하게 하는 요인이 된다는 것을 알 수 있습니다.
그리고, 소규모 업데이트 이후보다 대규모 업데이트 이후에서 영향이 크게 나타난 것을 알 수 있습니다.
→ 영웅/전설 획득은 유저의 접속을 독려하는 효과가 있으며, 특히 게임 참여도가 낮은 그룹에 효과가 크다
참고를 위한 단순 비교(인과 효과가 아닌 상관 관계)
참고로 외부 영향을 통제하지 않은 단순 비교의 결과는 아래와 같습니다. 여기서 단순 비교란 통제 변수 없이 영웅/전설 획득으로 분류한 집단(실험군, 대조군) 간 접속 일수 변화의 평균 값을 비교한 “상관 관계”를 의미합니다. 측정 시 그룹1, 그룹2 전체 유저 대상으로 측정하였는데 그 이유는 전 주의 유저 그룹인 그룹1, 그룹2를 나누어 접속 일수 변화를 비교하는 방식 또한 외부 영향을 통제하는 것 중 하나이기 때문입니다.
셀 안의 숫자는 대조군에 비해 실험군의 접속 일수 변화의 평균이 얼마나 높은지 나타낸 것이며, 우측 괄호 안의 숫자는 대조군의 접속 일수 변화의 평균 값을 의미합니다. (괄호 안의 값이 양수인 경우 대조군의 평균 접속 일수가 이전 30일 대비 증가함, 반대의 경우 대조군의 평균 접속 일수가 감소함)
모두 실험군이 대조군에 비해 통계적으로 접속 일수 변화의 평균 차이가 유의하다는 결과가 나왔습니다.
대규모 업데이트 이후 | 소규모 업데이트 이후 |
---|---|
2.01일 높음 (-1.37일) | 2.30일 높음 (-0.01일) |
5-2. 결제 금액 변화에 미치는 인과 효과 추정
대규모 업데이트 이후 | 소규모 업데이트 이후 |
---|---|
(x축의 범위는 과금 그룹이 무과금 그룹에 비해 5배 넓습니다)
결제 금액 변화에 대해서는 과대 추정을 방지하기 위해 전후 결제 금액이 증가한 유저(이후 30일 간 결제 금액 > 이전 30일 간 결제금액) 대상으로 이상치인 유저를 제외한 후 분석을 진행하였습니다.
모든 유저 그룹에서 최초 영웅/전설 획득은 30일 간 결제 금액 증가에 유의한 영향을 미치는 것으로 나타납니다. 여기서 주목할 점은 무과금과 과금 그룹에 미치는 인과 효과의 크기 차이입니다. 대규모 업데이트 이후(왼쪽 그래프) 그룹1(무과금)에 비해 그룹1(과금)의 인과 효과는 약 3,980%(39.8배)가, 그룹2(무과금)에 비해 그룹2(과금)의 인과 효과는 3,830%(38.3배)인 것으로 보아 과금 그룹에서 더 큰 영향을 미치는 것을 알 수 있습니다.
→ 영웅/전설 획득은 유저의 결제 증가에 영향을 미치며, 과금 그룹에서 효과가 더 크게 나타난다
5-3. 유저 그룹 상향 여부에 미치는 인과 효과 추정
대규모 업데이트 이후 | 소규모 업데이트 이후 |
---|---|
사용한 로지스틱 회귀 모델에서 회귀 계수는 로그 오즈비(영웅/전설 미획득 대비 획득 시 유저 그룹 지표가 상향될 확률이 몇 배나 더 큰지)를 나타냅니다. 본 분석에서는 결과 해석에 편의를 위해 유저 그룹 지표가 상향될 확률 자체에 대해 인과 효과를 해석하였습니다.(유저 그룹 지표 상향 확률에 대해 영웅/전설 획득 여부가 미치는 영향의 미분값을 이용해 marginal effect 를 구하였습니다.) 즉, 그래프가 의미하는 것은 유저 그룹 상향에 확률에 대한 최초 영웅/전설 획득의 인과 효과를 의미합니다.
모든 유저 그룹에서 최초 영웅/전설 획득은 유저 그룹 상향 확률 증가에 유의한 영향을 미치는 것으로 나타납니다. 여기서 유저 그룹 간 영향 크기 차이가 존재하는데 대규모 업데이트 이후(왼쪽 그래프) 그룹1에서는 인과효과가 1.3%p인 반면 게임 참여도가 낮은 그룹2에서는 10.5%p로 더 큰 효과가 나타나는 것을 알 수 있습니다.
유저 그룹 상향은 전반적인 게임 참여도 및 활동량 증가를 의미하므로, 아래와 같이 해석할 수 있습니다.
→ 영웅/전설 획득은 유저의 전반적인 게임 플레이 증가에 영향을 미치며, 특히 게임 참여도가 저조한 그룹에 효과가 크게 나타난다
세 결과를 종합하면, 다음과 같습니다.
- 최초 영웅/전설 획득은 30일 간 전반적인 게임 플레이 증가(접속 일수, 결제 금액, 게임 참여도)에 유의한 영향을 미친다.
- 소규모 업데이트보다 대규모 업데이트 이후 효과의 크기가 더 크게 나타난다.
- 게임 참여도가 저조하였던 그룹과 기존에 결제를 한 그룹에게 효과가 더 크게 나타난다.
마치며
지금까지 게임 내 컨텐츠가 유저의 플레이 변화에 원인이 되는지 인과 분석에 대해 소개 드렸습니다. 최초 영웅/전설 획득 자체가 유저의 단기간(30일) 플레이 증대에 긍정적인 영향을 주었고, 기존의 유저 성향 및 게임 참여도에 따라 영향이 다르게 나타난 것을 알 수 있었습니다.
본 포스팅에서는 주로 분석 기법 및 결과에 대한 내용을 다루었지만 실제로 분석을 진행하며 가장 중요하다고 느낀 것은 도메인 지식입니다. 본 분석에서 핵심이라고 할 수 있는 인과 다이어그램 자체가 도메인에 대한 이해를 바탕으로 설계되어야 하기 때문이죠. 예를 들어 도메인 지식이 없이 실제로 collider인 변수를 confounder로 착각하여 분석한다면 실제 인과 효과가 아닌 편향된 결과를 얻었을 것입니다.
즉, 분석 기법이 아무리 훌륭하여도 도메인 지식이 없다면 설계 단계부터 잘못되어 있을 가능성이 높고 결국 잘못된 결과를 얻게 됩니다. 그만큼 설계 부분에 많은 고민과 시간을 투자해야 하는 것이 중요하다는 것을 느낄 수 있었습니다.
추가로 본 분석을 진행하며 영웅/전설을 획득하였더라도 유저가 만족하지 않는 경우 플레이 변화가 다르게 나타나지 않을까? 라는 궁금증이 생겼습니다. 최초 획득한 영웅/전설 등급의 직업이 기존에 사용하던 직업과 다른 경우 장비 및 스탯을 다시 맞춰야 하는 경우가 발생하기 때문에 획득한 영웅/전설 등급의 만족도에 대한 분석도 가치가 있다고 판단하였습니다. 그래서 2탄으로는 “최초 획득한 영웅/전설 등급에 대한 만족도는 플레이 변화에 영향을 미칠까?”라는 주제로 찾아 뵙겠습니다.
다소 장황하게 설명하였는데 긴 글 읽어주셔서 감사합니다 :)
Appendix.
인과효과 추정 시 고려사항
아래 그림들의 출처는 (YOUTUBE) Brady Neal - Causal Inference입니다.
- T : 원인변수
- Y : 결과변수
- X : 외생 변수
- T → Y : Causal Association (분석가가 알고 싶어하는 T와 Y 사이의 인과효과)
- T ← X → Y : Non-Causal Association (인과효과 이외에 T와 Y를 연결하는 path)
- path : edge의 방향에 상관 없이 두 노드 간 연결될 수 있는 경로
T가 Y에 미치는 인과효과 추정을 위해서는 non-causal association을 block해야 합니다
- block : 통제를 통해 non-causal association 상에서 T와 Y의 관계를 독립으로 만들어 주는 것
- 노드 간의 관계(화살표 방향)에 따라 통제하는 방법이 다름
인과 그래프에서 association의 종류
x1과 x3의 association이 형성되는 세 가지 경우
-
Chain
-
Fork
- \(x_2\)는 \(x_1\)과 \(x_3\)에 영향을 줌 : \(x_2\)는 \(x_1\)과 \(x_3\)의 Confounder
-
Immorality
- \(x_2\)는 \(x_1\)과 \(x_3\)의 영향을 받음 : \(x_2\)는 \(x_1\)과 \(x_3\)의 collider
non-causal association의 영향을 제거(block)
위의 Chain, Fork, Immorality의 각 관계에서 non-causal association의 영향을 제거하기 위해 통제할 변수를 선정
(위의 예시에서 \(x_1\)를 원인변수, \(x_3\)를 결과변수로 간주함)
확인 절차
1) bayesian network factorization을 통해 확률을 계산
-
chain rule of probability에 local markov assumption을 적용한 개념
- chain rule of probability
- \[p(x_1, x_2, ..., x_n) = \prod_i {p(x_i | x_{i-1}, x_{i-2}, ..., x_1)}\]
- local markov assumption
- DAG에서 노드 X(\(x_i\))는 부모노드(\(pa_i\))에게만 영향을 받음
- 자식 노드에게는 영향을 받지 않음
- bayesian network factorization
- \[p(x_1, x_2, ..., x_n) = \prod_i {p(x_i | pa_i)}\]
- chain rule of probability
2) 변수 통제(조건부 확률) 시 원인 변수와 결과 변수의 독립성 확인
독립성 만족을 위한 통제 변수 확인 결과
-
Chain에 의한 non-causal association
-
bayesian network factorization
- \[p(x_1,x_2,x_3) = p(x_1) * p(x_2 | x_1) * p(x_3|x_2)\]
-
x2 통제 시 x1과 x3의 독립성 확인
- \[p({x_1, x_3} | x_2) = {p(x_1, x_2, x_3) \over p(x_2)} = \frac{p(x_1) * p(x_2 | x_1) * p(x_3 | x_2)}{p(x_2)}\]
- \[\frac{p(x_1) * p(x_2 | x_1) * p(x_3 | x_2)}{p(x_2)} = \frac{p(x_2, x_1) * p(x_3|x_2)}{p(x_2)} = \frac{p(x_2, x_1)}{p(x_2)} * p(x_3|x_2) = p(x_1 | x_2) * p(x_3 | x_2)\]
-
\[\newcommand{\indep}{\perp \!\!\! \perp}
x_1 \indep x_3 | x_2\]
(x2를 통제하는 경우, x1과 x3가 독립이 됨)
- 즉, chain의 경우 중간에 위치한 노드를 통제하면 해당 non-causal association(x1 → x3)가 block 됨
-
-
Fork에 의한 non-causal association
- bayesian network factorization
- \[p(x_1,x_2,x_3) = p(x_2) * p(x_1 | x_2) * p(x_3|x_2)\]
- x2 통제 시 x1과 x3의 독립성 확인
- \[p(x_1, x_3 | x_2) = \frac{p(x_1, x_2, x_3)}{p(x_2)} = \frac{p(x_2) * p(x_1 | x_2) * p(x_3|x_2)}{p(x_2)}\]
- \[\frac{p(x_2) * p(x_1 | x_2) * p(x_3|x_2)}{p(x_2)} = \frac{p(x_1, x_2) * p(x_3|x_2)}{p(x_2)} = \frac{p(x_1, x_2)}{p(x_2)} * p(x_3|x_2) = p(x_1 | x_2) * p(x_3 | x_2)\]
-
\[\newcommand{\indep}{\perp \!\!\! \perp}
x_1 \indep x_3 | x_2\]
(x2를 통제하는 경우, x1과 x3가 독립이 됨)
- 즉, fork의 경우 confounder를 통제하면 해당 non-causal association(x1 → x3)가 block 됨
- bayesian network factorization
-
Immorality에 의한 non-causal association
- bayesian network factorization
- \[p(x_1,x_2,x_3) = p(x_1) * p(x_3) * p(x_2|x_1, x_3)\]
- x2 통제 시 x1과 x3의 독립성 확인
- \[p(x_1, x_3 | x_2) = \frac{p(x_1, x_2, x_3)}{p(x_2)} = \frac{p(x_1) * p(x_3) * p(x_2 | x_1, x_3)}{p(x_2)}\]
- \(\newcommand{\indep}{\perp \!\!\! \perp} x_1 \ \not\indep x_3 | x_2\) (x2를 통제하는 경우, x1과 x2는 독립이 아님)
- x2를 통제하지 않고 x1, x3의 독립성 확인
-
\[p(x_1,x_3) = \sum_{x_2} {p(x_1, x_3, x_2)} = \sum_{x_2} {p(x_1) * p(x_3) * p(x_2 | x_1, x_3)}\]
(marginalizing)
-
이것을 풀어쓰면
- \[\sum_{x_2} {p(x_1) * p(x_3) * p(x_2|x_1, x_3)} =p(x_1) * p(x_3) * \sum_{x_2} { p(x_2|x_1, x_3) } = p(x_1) * p(x_3) * 1 = p(x_1) * p(x_3)\]
-
즉, \(p(x_1, x_3) = p(x_1) * p(x_3)\)
-
\[\newcommand{\indep}{\perp \!\!\! \perp}
x_1 \indep x_3\]
(x2를 통제하지 않는 경우, x1과 x3가 독립이 됨)
- 즉, immorality의 경우 colllider를 통제하지 않을 때 이를 제외한 두 노드는 독립임
- collider를 통제하면 해당 non-causal association이 발생(collider bias)
- 따라서, immorality에 의한 원인 변수와 결과 변수의 association을 제거하기 위해서는 collider를 통제하지 않고 그대로 두어야 함
-
\[p(x_1,x_3) = \sum_{x_2} {p(x_1, x_3, x_2)} = \sum_{x_2} {p(x_1) * p(x_3) * p(x_2 | x_1, x_3)}\]
- bayesian network factorization