기술 이야기
home
Programming
home
👾

신호 처리를 이용한 반복 매크로 탐지

Upload date
2022/01/05
Tag
반복
매크로
탐지
솔루션
Editor
탐지솔루션실_남윤우
Editor is
데이터분석 기계학습 방법론을 활용한 이상탐지 알고리즘을 개발하고 있습니다
상태
2 more properties

Table of contents

들어가며

탐지솔루션실은 시계열 이상 신호 탐지, 불량 유저 검출 등 다양한 주제로 데이터 분석 및 솔루션 서비스를 개발하고 있습니다. 이번 글을 통해 반복 매크로를 탐지하기 위한 분석 내용을 공유드리고자 합니다.

반복 매크로

여러분은 RPG의 요소 중 가장 중요한 것은 무엇이라고 생각하세요? 저는 사냥이라고 생각합니다. 사냥은 RPG의 조작의 재미 외에도 캐릭터의 생계를 책임지는 재화 생산 역할을 하기도 합니다. 아래 그림1이 나타내듯 유저는 사냥 시스템을 통해 다양한 보상들을 획득할 수 있습니다.
이러한 보상이 곧 작업장 어뷰저의 타겟이 되는데요. 작업장 어뷰저들은 사냥을 하기 위해서 수동으로 컨트롤하기보다 인력을 최소화하는 자체 솔루션을 만들어서 비용을 최소화하고 이익을 극대화하려고 합니다. 대표적으로 자동 사냥 매크로를 들 수 있습니다.
자동 사냥 매크로는 어떻게 작동할까요? 보편적으로 녹화 매크로가 있습니다. 이 매크로는 프로그램을 이용하여 일정 시간 동안의 플레이를 녹화하고 장시간 동안 녹화된 플레이를 반복합니다.
그림 1 : 자동 사냥 매크로

문제 접근

매크로를 사용하는 유저가 특정 길이의 패턴을 반복하고 있다면 분석가는 그러한 정황을 데이터 분석을 통해 밝혀내야 합니다. 문제는 방대한 로그를 유의미한 데이터로 변환하는 전처리 단계와 반복을 판정하는 로직의 수립입니다.
매크로 사냥
t 시간 길이의 특정 패턴을 정의하고,
패턴을 반복함
그림 2 : 매크로 사냥 도식

데이터 준비

유저가 스킬을 사용한 시각을 기록한 로그를 가져옵니다. 그리고 시간 순서로 정렬된 스킬 사용 여부를 초 단위 시간 선상에서 마킹합니다. 마지막으로 커널 밀도 추정을 통해 데이터를 부드러운 곡선형태로 데이터를 평활화(equalization) 합니다.
그림 3 : 유저의 스킬 사용 시간 기록 로그
그림 4 : 커널 밀도 추정을 통한 데이터 평활화 작업
위와 같은 전처리 과정을 거친 데이터는 아래 그래프와 같은 형태가 됩니다. 첫 번째 도표는 1초 단위로 마킹한 데이터입니다. 0은 스킬 사용이 없는 시점, 1 이상은 스킬 사용이 n 번 있는 시점입니다. 그리고 두 번째 도표는 위 첫 번째 도표에 해당되는 데이터를 커널 밀도 추정을 통해 평활화한 것입니다. 전처리를 통해 스킬 사용 로그를 분석에 쓸만한 데이터로 변환 시켰습니다.
그림 5 : 데이터 전처리 후의 모습

데이터 분석

위에서 전처리된 데이터를 어떻게 분석할 수 있을까요? 분석 목표를 상기시켜보면, ‘반복적으로 스킬을 사용하는 유저를 탐지하자’였습니다. 위 데이터는 확연히 주기를 가지고 있는 것으로 보입니다. 마치 파동의 형태로 보이는데요. 파동은 삼각함수 sin과 cos의 여러 형태가 모여서 구조를 이룹니다. 위 데이터를 파동 즉, sin 과 cos의 조합으로 생각해도 좋을 것 같습니다. 이 조합을 분해해서 데이터를 분석한다면 더 명확한 인사이트를 얻을 수도 있을 것 같습니다. 이 분석을 푸리에 변환(Fourier transform)으로 시행해 봅시다.

1. 푸리에 변환 (Fourier Transform)

푸리에 변환의 핵심을 말씀드리면, 신호 데이터의 시간 의존적 정보주기 의존적 정보로 변환하는 것입니다. 사인 파동의 데이터를 sinθ 로 나타내는 것과 같은 이치입니다. 아래 슬라이드의 두 번째 도표는 첫 번째 도표를 주기 도메인으로 분해한 것입니다. 명확하게 26지점에서 한 값이 강하게 나오는데요. 이것의 의미는 26주기를 가지는 삼각함수의 계수가 가장 크다는 것입니다. 다시 해석해 보면 주기가 26인 데이터라는 것입니다.
푸리에 변환(Fourier Transform)의 특징
신호 데이터(주기함수)는 다양한 삼각함수(복소수)의 선형결합으로 이루어져 있다.
주기 n에 따른 푸리에 계수 c 는 주기 성분의 신호 데이터에 대한 기여도 라고 볼 수 있다.
신호 데이터의 구성을 파악할 수 있다.
그림 6 : 푸리에 변환

2. PSD (Power Spectral Density)

위와 같은 주기의 패턴은 PSD(Power Spectral Density)로 더 명확하게 나타낼 수 있습니다. 전력 스펙트럼 밀도(power spectral density)는 신호 데이터의 자기상관함수를 푸리에 변환한 것으로 표현할 수 있습니다 (Wiener–Khinchin theorem). 푸리에 변환보다 더 명확한 주기성을 파악할 수 있고 비주기 신호나 잡음이 섞인 데이터에서 더 이점이 있습니다. 반복 매크로가 생산하는 스킬 시퀀스는 게임의 환경이나 어뷰저가 임의로 삽입한 노이즈를 가지고 있으므로 PSD로 분석해 보도록 하겠습니다.
PSD(Power Spectral Density)의 특징
정상신호(stationary signal) x(t)x(t) 의 자기상관(autocorrelation)은 Rx(τ)R_x(\tau) = E[x(t)x(t+τ)]E[x(t)x(t+\tau)] 으로 정의할 수 있으며, Rx(τ) R_x(\tau) 의 푸리에 변환을 Power Spectral Density (PSD) Sx(f) S_x(f) 라고 한다.
Sx(f)=Rx(τ)e2πifτdτS_x(f) = \int\limits_{-\infty}^{\infty} R_x(\tau)e^{-2\pi i f\tau} \,d\tau
신호 데이터의 자기상관함수를 푸리에 변환
신호 데이터를 푸리에 변환 한 것보다 더 명확하게 주기성을 파악
비주기/ 잡음 신호 데이터에서 강건
그림 7 : PSD (Power Spectral Density)

척도 개발과 탐지로직 수립

PSD로 데이터를 변환한 뒤, 반복 여부를 판단하는 유저를 어떻게 구분할 수 있을까요? 먼저 일반 유저와 매크로 유저의 사냥 데이터를 비교해 보고 구분 가능한 척도를 정의해 보도록 합시다.
일반 유저와 어뷰저의 스킬 사용 플레이 패턴을 비교해 보면 일반 유저는 데이터가 다채롭습니다. 특별한 주기 패턴도 없어 보입니다. 왜일까요? 정상적인 플레이어는 주위 환경과 끊임없이 상호작용하며 전투를 하기 때문입니다. 반면 매크로는 주위에 적이 있건 없건 상관없이 예약된 스킬만 발동합니다. 단순하고 예측 가능합니다. 하지만 이러한 정성적인 특징은 아직까진 다소 모호해 보입니다.
그림 8 : 일반 유저의 스킬 사용 플레이 패턴
그림 9 : 어뷰저의 스킬 사용 플레이 패턴
하지만 PSD로 분석된 데이터에서는 조금 더 명확해집니다. 일반 유저의 PSD 데이터는 작은 푸리에 계수를 가진 여러 주기 성분으로 이루어져 있습니다. 즉, 신호를 이루는 성분이 복잡합니다. 반면 매크로의 데이터는 계수 값이 크고 명확합니다.
정상유저 PSD 분석 (펼쳐보기)
어뷰저 PSD 분석 (펼쳐보기)
그림 12 : fourier transformed autocorrelation
어뷰저는 x축 값이 6에서 가장 높은 y 값을 가지고 있습니다. autocorrelation의 데이터에서 6번 진동하는 신호가 가장 세다고 볼 수 있는데요(6Hz). autocorrelation 데이터가 650개로 이루어져 있다는 것을 보았을 때 첫 번째로 영향력 있는 주기는 108이라고 볼 수 있습니다 (650÷6). 아래 그림과 같은 봉우리와 같은 패턴이 만들어낸 값이라고 추측할 수 있습니다.
그림 13 : 어뷰저 탐지를 위한 데이터 분석 1
두 번째로 높은 y 값은 40이고 그에 대응하는 x는 3입니다. 약 216 주기로 계산되는데요 (650÷3). 아래 그림과 같은 패턴입니다.
그림 14 : 어뷰저 탐지를 위한 데이터 분석 2
따라서 어뷰저로 판단할 feature를 아래와 같이 구합니다.
1) 상위 PSD 값과 2) 그에 대응하는 주기
예로 든 데이터에서는 (134, 108), (40, 216) 이 추출되었습니다.

어뷰저 탐색

추출된 feature로 전체적인 유저의 분포를 확인합니다.
그림 15 : 유저 분포도
노란색으로 하이라이트 한 유저들이 의심됩니다. psd(x1) 값을 봐서 주기의 명확도도 높아 보이고, period(x2)는 약 120, 150 초 정도로 큰 주기를 가지고 있어 보입니다.
3개 유저를 샘플링해서 확인해 봤습니다. 명백히 일정 시간 동안 스킬을 사용한 후 휴동을 하는 주기 패턴이 있는 플레이를 하고 있습니다. 일반 유저가 이렇게 규칙적인 패턴을 갖기는 힘들어 보이므로 어뷰저로 추정할 수 있습니다.
그림 16 : 유저 샘플링 예시
. . .

나가며

신호 처리 방법론을 활용해서 사냥 매크로 어뷰징을 탐지하는 분석 과정을 살펴보았고, 아래와 같이 요약할 수 있습니다.
1. 스킬 사용 데이터를 신호 데이터로 전처리 한다.
2.
Power Spectral Density 분석을 통해 주기와 주기의 신호를 피처로 추출한다.
3.
전체 유저의 피처 분포에서 의심 유저를 빠르게 모니터링하고 시각화해서 어뷰저를 탐색한다.
마지막으로 인텔리전스랩스 탐지솔루션실에서는 이 밖에도 다양한 어뷰징/이상탐지 기법들을 연구하고 개발하고 있습니다. 이 글을 읽으면서 어뷰징/이상탐지 기법에 흥미가 생겼다면, 탐지솔루션실의 도전에 합류하시길 추천합니다.

Reference

Techblog Contents
Related Sites
 넥슨 게임 포탈
회사 소개
인텔리전스랩스 소개
인재 영입
인텔리전스랩스 블로그 운영 정책
 테크블로그 문의 devrel@nexon.co.kr