Analytic 9

4종류의 게이머가 존재한다고? - 3. Clustering 및 분석 결과

지난 게시글 보기 https://songmin9813.tistory.com/70(2. PCA) 지난 게시글에서 PCA를 이용하여 35개의 변수를 약 70%의 분산으로 표현할 수 있는 14개의 변수로 압축한 것으로 게시글을 마무리했다. 이번에는 이를 이용하여 비지도 학습 중 Clustering 기법인 K-Means Clustering을 적용해 보고 어떠한 결과가 나왔는지 소개하는 시간을 가져본다. 비지도 학습이요...? 이 얘기를 함에 앞서 지도 학습과 비지도 학습에 대한 개념을 간단히 살펴보고 넘어가 보도록 하자. 이 둘과 다른 강화 학습도 존재하다만, 통상적으로 머신 러닝 기법이라 하면 이 둘을 지칭하는 것이라 해도 무방할 것이다. 결과적으로 이 둘의 가장 큰 차이는 정답(=레이블, 종속 변수 등등)이..

4종류의 게이머가 존재한다고? - 2. PCA

지난 게시글 보기 https://songmin9813.tistory.com/69(1. 인사이트 및 전처리) 표준화를 진행한 이유를 차원 압축에 PCA(Principal Components Analysis : 주성분 분석)을 진행할 것이라는 언급을 마지막으로 했던 것 같다. 처음에는 유저들에게 중요하다고 생각했던 지표를 정성적으로 찾으려 했으나, 이를 분산값을 이용한 최적 PC를 찾아주는 분석법이 있어 이를 적용해보고자 한다. PCA는 다음과 같은 이유로 사용하였다. 1. 유저 데이터는 존재하지만 어떠한 값이 클러스터링에 중요한 데이터인지 모르기 때문 2. 비지도 학습(클러스터링)을 진행할 예정이기 때문 3. 변수가 많지만 각각이 설명하는 정도를 알고 싶기 때문 PCA를 사용한다면 다음과 같은 단점이 존재..

4종류의 게이머가 존재한다고? - 1. 인사이트 및 전처리

배틀그라운드의 유저 플레이 데이터 수집 프로세스를 만들어낸 입장에서 이를 활용한 기계학습도 해보고 싶어 진행해 보는 프로젝트이다. 필자가 알고 있는 게이머와 관련된 지식을 데이터적으로 확인 및 검증해 보는 시간을 가져보는 것이 좋은 것 같아 간단한 클러스터링을 포함한 검증의 시간을 가져보기로 한다. 시작하기에 앞서 Richard Bartle에 의해 정의된 게이머의 4가지 유형은 아래의 그림과 같다. 상기 지표에서 의미하는 바를 간단하게 설명하고, 이를 배틀그라운드 게임에 대입시켜 생각해보자. 1. Killers 활동적이고 플레이어 간의 상호작용을 중시하는 게이머. 주도적으로 다른 플레이어와 분쟁을 하고, 싸움과 관련된 콘텐츠를 즐기는 플레이어가 이에 해당한다. 1:1 대전게임인 철권이 대표적인 예로 뽑힐..

[Python/Analytic] 배틀그라운드 유저 데이터 분석 코드 공유

본 게시글은 필자가 배그 데이터 시각화 프로젝트를 진행하며 작성한 데이터 가공 코드를 자동화버전으로 재가공하여 배포하는 배포용 코드이다. Python으로 작성되었으며, 필자의 가공이 들어간 'phase', 'ai' 정보를 제외한 모든 정보는 아래의 PUBG Open API 사이트에서 확인해 볼 수도 있다. https://developer.pubg.com/(PUBG Open API) 개인 전용 토큰 키 발행 필수 해당 코드를 어떠한 생각으로 짰는지 궁금하다면 이전의 시리즈들을 참고하면 좋을 것 같다. https://songmin9813.tistory.com/43(1. 프로세스 수립) https://songmin9813.tistory.com/44(2. 데이터 인사이트 및 추출) https://songmin9..

Analytic SQL 5. 이동 평균(Moving Average)과 유의 사항

다른 집계 함수와 데이터 처리 관련 개념을 따로 빼놓기는 했다. 이는 window절의 심화 과정보다는 응용에 가까운 개념이라 판단되어 새로운 장으로 설명해보도록 한다. 이동 평균(Moving Average)이란? 평균을 구하는 범위 구간을 이동시키면서 구하는 평균값을 의미함. 지금껏 자주 사용되는 누적합과 더불어 누적 평균도 존재는 하다만, 누적평균보다는 이동 평균이 더 보편적으로 쓰이는 편. 여기서의 범위 구간 = 이미 배웠던 window의 정의와 연결시켜 생각한다면 쉽게 이해할 수 있을 것 같다. 이를 구하는 이유는 뭘까? 주식과 같은 항목처럼 단기간 변동성이 심한 항목들에 대해서 이동 평균을 접목시키면 효과적인 시각화가 가능하다. 전반적인 추세를 확인하기 어려운 항목에 대해 효과적인 집계/시각화가 ..

Analytic SQL 4. Window 절 심화

window 절이 다른 절과 다르게 알아야 하는 것이 조금 있기 때문에 추가적인 장을 만들어 공부해보도록 한다. Analytic SQL의 기본 구문을 다시 한번 상기하고 시작해보도록 하자. (인자) over( -- partition 절 -- sorting 절 -- window 절 ) 상기 코드에서 window 절에 해당하는 구문을 더 자세히 뜯어보면 다음과 같다고 할 수 있다. --window 절의 사용 {rows | range} {between {unbounded preceding | current row | value_expr {preceding | following} } and {{unbounded preceding | current row | value_expr {preceding | follow..

Analytic SQL 3. 집계(Aggregate) SQL

일반적인 순위 함수 사용방법과 더불어 집계 함수를 사용하는 방법에 대해서도 소개하는 시간을 가진다. 집계 함수란? 전부터 계속 말하고 있지만, 특정 컬럼의 재가공과 아주 밀접한 관련이 있는 집계 함수. 그 종류에는 sum(), max(), min(), avg(), count() 등이 있으며, 해당 집계 함수를 window를 이용하여 행 레벨로 자유자재로 집계할 수 있는 기능을 Analytic SQL에서는 제공하고 있다. 아래의 쿼리 예시는 개요에서도 보여준 바가 있는 Analytic SQL의 사용 방법을 보여준다. (인자) over( -- partition 절 -- sorting 절 -- window 절 ) 여기에서 over 구문의 마지막으로 나오는 window의 첫 번째 사용 방법으로 집계 함수를 설명..

Analytic SQL 2. 순위(Rank) 함수

Analytic 함수에서 순위로 작동되는 함수에 대해서 알아보자. 일반적인 함수와 더불어 어떠한 방식으로 사용되는지도 아래의 표를 통해 간단히 살펴본다. 설명 종류 일반적인 순위 rank, dense_rank, row_number 0~1 사이의 정규화 순위 cume_dist(누적 분포), percent_dist 분위 ntile 등 제공하는 여러 함수가 있지만 가장 보편적으로 사용되는 일반적인 순위(rank, dense_rank, row_number)에 대해서 먼저 살펴보도록 하자. 세 가지의 일반적인 순위 함수의 로직은 기본적으로 동일하게 작동하나 공동 순위를 정함에 있어서 다른 차이를 보인다는 특징이 있음 rank 우리가 생각하는 일반적인 등수를 반환. 이때, 공동 순위가 존재할 경우 다음 순위는 공동..

Analytic SQL 1. 개요

그래서 이게 뭔데? SQL을 이용한 분석. 예전부터 존재는 했으나(OLAP 등) Analytic SQL이 나오면서 데이터 분석을 더욱 용이하게 함 RDBMS(Realtional DataBase Management System, 관계형 데이터베이스 시스템)에서 Analytic SQL을 제공한 이후 다시 데이터 분석의 중심에 설 수 있는 계기가 되었음 기존 집계 함수 : Group by를 사용할 때 원본 데이터 집합의 레벨을 변경하여 적용한다. 💡 Group by만을 이용해서 데이터 분석을 하기에는 너무 귀찮고 어렵고 레벨 변경에 한계가 있어! Analytic SQL : 원본 데이터 집합의 레벨을 그대로 유지하면서 적용한다는 차이를 가짐. 💡 Window function(=Analytic Function)을..