tak's data blog

[게임 데이터 분석] 회귀 모델 기반의 게임 재화 이상 증감 탐지 본문

프로젝트

[게임 데이터 분석] 회귀 모델 기반의 게임 재화 이상 증감 탐지

hyuntaek 2021. 8. 8. 19:38
반응형
SMALL

 

 

온라인 게임의 주요 이슈로는 이탈계정 방지, 가계정 문제, 어뷰징 등이 존재하는데요

 

이번 시간에는 어떤 한 유저의 재화가 비정상적으로 급격히 증가하거나 버그로 인해 쉽게 파악하기 힘든

 

게임 재화 이상 증감 탐지를 회귀 기반으로 해결해 나가는 주제로 포스팅을 진행하도록 하겠습니다!! 

 

출처 : https://www.youtube.com/watch?v=GgCulQFe8U4&t=1685s

 

 

1. 게임 재화 이상 탐지 왜 필요할까?

게임 재화 증감 모니터링

 

1) 게임 경제 관점에서 게임 내에 재화량을 모니터링하는 것이 중요함

(피파4를 예로 들면 생성 제한 선수를 상한가로 걸어두고 부계정으로 그 선수를 사면서 돈을 옮겨 선수의 가격을 비이상적으로 늘리는 행위로 이득을 보는 경우가 있습니다. 이러한 문제로 게임 머니 인플레이션이 발생합니다.)

게임 내 재화가 계속 늘어난다면? 게임 머니 인플레이션 발생 -> 화폐 가치 하락 / 신규 유저와 기존 유저간 빈부 격차

 

2) 유저들이 적절히 재화를 모으고 있는지, 또 적절히 소비하고 있는지를 체크하며 게임 환경 관리가 필요

 

3) 간혹 게임 내 버그나 어뷰징으로 인해 게임 재화가 급격히 증가하는 경우, 게임 서비스에 치명적인 영향을 줄 수 있음

 

4) 실제 게임 내 재화 복사 버그가 뒤늦게 발견되어, 서버 롤백까지 진행될 수 있음

 

-> 그러므로 초기에 감지하는 것이 매우 중요!

 

5) 주요 게임 내 지표를 모니터링 하면서 급격한 변동이 발생할 경우 문제를 탐사해 나가는 방식을 취함

(재화 증가 추이는 어떤지, 전일 혹은 전주 대비 변화율은 얼마나 되는지)

 

 

 

 

2. 일반적으로 이야기하는 이상 데이터란?

일반적인 이상 데이터-> 기존 데이터의 분포에서 크게 벗어나는 데이터를 일반적으로 이상 데이터(Outlier) 라고 함

 

출처: https://datascience.foundation/sciencewhitepaper/knowing-all-about-outliers-in-machine-learning

 

1) 기존 데이터 분포와 비교해 크게 벗어나는 데이터를 찾는 방법

-> 평균, 분산을 이용한 탐지

 

전체 데이터의 평균으로부터 얼마나 떨어져 있는가

보통 (평균 +- 2 혹은 3 * 표준편차)를 벗어나는 데이터를 이상치로 탐지

 

(IQR을 이용한 이상치 제거 방법)

q75 = 제 3사분위수

q25 = 제 1사분위수

 

제 3사분위수 지점의 값과 제 1사분위수 지점의 값의 차이를 IQR이라고 합니다.그리고 IQR에 1.5를 곱한값 + 제 3사분위수 = 최댓값 / IQR에 1.5를 곱한값 - 제 1사분위수 = 최솟값이 최솟값과 최댓값사이 밖에 있는 데이터를 이상치라고 생각하고 제거합니다.

 

 

2) 추세가 있는 데이터에서 이상 데이터를 찾는 방법

-> 이동 평균, 분산을 이용한 탐지

단순히 과거 데이터 분포만 본다면 시간이 갈수록 잘못 탐지하는 경우가 늘어남

그래서 탐지하는 시점부터 과거 N번의 데이터로(windowing하는 방식) 평균과 분산을 구해 분포에서 크게 벗어나는 값 탐지

 

 

3) 주기성이 있는 데이터에서 이상 데이터를 찾는 방법

-> 시계열 분석 (STL)을 이용한 탐지

 

주기성을 갖는 데이터인 경우

전체 분포 혹은 과거 N 시점의 분포로 봐도 이상치가 정상 범위에 포함되어 제대로 탐지 못할 수 있음

 

시계열 분석 (STL) 방법

데이터를 계절성 (seasonal) -> 데이터가 가진 주기를 뽑아내는 것

장기적인 변동 패턴(trend) -> 패턴, 추세

나머지(residual component)로 분해

residual component의 평균, 표준편차 대비 크게 벗어나는 시점의 데이터 탐지

출처 : https://ichi.pro/ko/sigyeyeol-gyejeol-bunhae-179224657736925

 

 

 

 

3. 게임 재화에서 나타날 수 있는 이상 데이터는?

1) 시간에 따른 변동폭을 고려해야 하는 데이터

-> 새벽 시간대와 같이 사용자가 많지 않은 시간대에 어뷰징이 일어나는 경우

(새벽 시간대는 재화 증감이 적기 때문에 버그나 어뷰징으로 인해 잘못 증가되더라도 저녁 시간대의 증감량과 비슷할 수 있음

/ 시간대에 따른 주기성 고려가 필요)

 

 

2) 재화에 영향을 주는 추가적인 요인도 고려해야 하는 데이터

-> 고려해야 할 주기성: 24시간, 일주일, 월, 계절 등등

-> 위의 주기성 외에도 아래의 예시와 같이 이벤트(서버점검 등)들에 의한 영향도 고려해야 함

 

그러므로 재화 이상 데이터를 찾기 위해서는 '정상 상태'의 정의가 필요(기존 데이터 분포와 비교하였을 때),

재화 증감에 영향을 주는 요인들을 모두 고려해서(주기성, 이벤트),

'정상 상태'를 정의 (모델링) 해야 함(이렇게 정의된 정상 상태에서 크게 벗어난 경우를 이상으로 판단 가능)

 

 

 

 

4. 구체적인 탐지 방법

 

1) 재화 증감량을 예측하는 회귀 모델 생성

-> 회귀 모델 - 어떤 자료에 대해서 그 값에 영향을 주는 조건을 고려하여 구한 평균

ex) 에어컨 예약 대수가 한 단위 올랐을 때 판매대수는 얼마나 바뀔까?

 

회귀 식 : y = a + b x

a : intercept( x라는 요인을 통제했을 때의 평균적인 y값)b : 회귀계수(x라는 요인이 한 단위 오를 때 y에 영향을 미치는 값)

 

ex) y = 9.74 + 1.44x      (예약 대수가 한 단위 오를 때 판매 대수는 1.44 증가한다.)

 

게임 재화에 빗대어 얘기해 보자면 y값이 게임 재화 증가량 x값이 주기나, 이벤트 같은 변수값

그래서 x들에 대한 영향력 값을 구할 수 있고, 이러한 요인을 제거하였을 때 평균적인 재화증가량이 얼마나 나올 것인지에대한 intercept값을 뽑을 수 있다.

 

 

2) 우선은 데이터 탐색 부터

  1. 전체적인 재화 증감 추이는 어떤지
  2. 시간대별이나 요일별 변동은 없는지(주로 boxplot)
  3. 특정 이벤트에 따른 변화는 없는지(증가량이 확 튀거나 줄어드는 값)

-> 일주일이나 월 단위의 주기성은 없는지, 재화 증감에 영향을 줄 수 있는 다른 요인은 없는지 다양하게 살펴본 후, 이것들을 회귀 모델의 설명 변수로 사용함

 

-> ex) 서버 점검이 있는 때에는 증가량이 크게 하락하는 영향 (점검 시간 변수)

             시간대에 따른 주기성을 보임 (시간 변수)

             대규모 레이드가 진행될 때는 증가량이 별로 없음 (레이드 변수)

(도메인 지식가의 자문을 구할 수 있음)

 

3) 추가로 데이터의 추세를 반영하는 트렌드 변수를 사용

 

이전의 트렌드 값을 회귀 모델 변수로 사용

다음시간에 점검이 있고, 레이드 시간일 때의 값이 얼마나 될 것이다 라고 추정을 할 수 있음

 

 

4) 1차 이상 탐지

회귀 모델을 이용해 매시간별 재화 증감량을 예측

예측한 값과 예측 값에 대한 상(high)/하한선(low)을 구해, 실제 해당 시간의 증감량과 비교

(실제값(real)이 예측(predict) 상/ 하한선을 초과하는 경우를 이상 데이터로 탐지)

재화 증감량은 유저들의 행동에 따라 크게 영향을 받기 때문에, 이상값이 발생할 가능성이 높음

ex) 위의 그래프에서 빨간 세로 선은 한 유저가 그동안 모아두었던 아이템을 상점에 한 번에 판매

-> 특정 시간 동안 N번 이상 이상값이 발생하는 경우 알람을 주는 추가 Rule 적용

 

 

 

5) 2차 이상 탐지

1. 급변하지는 않지만 게임 재화가 지속적으로 증가하는 현상이 발생할 경우

2. 소수의 어뷰저가 지속적으로 버그를 악용하는 경우

(상/하한선을 벗어나지 않기 때문에 1차 이상 탐지에서는 탐지되지 않음)

3. 2차 이상 탐지는 잘못된 재화 증감량이 너무 작아 1차에서 발견되지 않은 값을 대상으로 함

4. 즉, 예측 상/하한선을 넘지 않을 정도로 미미한 버그나 어뷰징이 발생하는 경우를 대비하는 절차

 

해결법

-> 예측값과 실제값의 차이인 잔차를 이용

-> 정상 상태라면, 잔차는 0을 평균으로 하는 정규 분포 형태로 나타남

(정상 데이터 : 0을 기준으로 랜덤하게 분포)

 

5. 이상 현상 발생 시에는 잔차가 한 쪽으로 쏠린 분포를 나타냄

(잔차의 누적치를 모니터링하여 일정 규모 이상이 되는 경우 이상으로 탐지)

 

 

 

 

5. 이상 탐지 프로세스 적용

1. 이상 탐지 알람

-> 1차, 2차 과정에서 탐지가 되면 운영자에게 상세한 증감 내용을 메일로 알람

(최근 몇번의 이상치가 발생했는지, 실제로 나타난 증가량은 얼마였는지, 시간은 언제였는지, 모델로 예측한 값 등)

 

이 때의 이상 원인을 상세 분석(로그 데이터를 통해)

 

2. 모니터링 페이지 구축

-> 재화 증감에 대한 모니터링 페이지를 통한 확인도 가능

(증감 현황 파악)

 

 

 

6. 마무리

1. 게임 재화 이상 탐지 왜 필요할까? (관리해야 하는 이유, 이상탐지가 왜 중요한지)

2. 일반적으로 이야기하는 이상 데이터란?

3. 게임 재화에서 나타날 수 있는 이상 데이터는?

4. 구체적인 탐지 방법

5. 이상 탐지 프로세스 적용

 

 

 

 

이상으로 게임 재화 이상 탐지에 대한 정리 포스팅을 마치도록 하겠습니다. 실제로 회사 프로젝트를 진행하며 사람들이 과금을 하는 포인트나 주기성에 대해서 확인할 수 있었고, 특정 구간마다 줄어들거나 늘어나는 경향도 확인할 수 있었습니다. 그 때의 로그 데이터를 살펴본 후 추가로 어떠한 사건이 발생하였는지 확인해보는 과정을 가져보도록 하겠습니다. 오늘도 끝까지 읽어주셔서 감사합니다 :)

 

 

 

 

 

 

 

 

 

반응형
LIST