개발/데이터 분석

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

잠수돌침대 2023. 2. 14. 18:00

지난 게시글 보기

https://songmin9813.tistory.com/69(1. 인사이트 및 전처리)


표준화를 진행한 이유를 차원 압축에 PCA(Principal Components Analysis : 주성분 분석)을 진행할 것이라는 언급을 마지막으로 했던 것 같다. 처음에는 유저들에게 중요하다고 생각했던 지표를 정성적으로 찾으려 했으나, 이를 분산값을 이용한 최적 PC를 찾아주는 분석법이 있어 이를 적용해보고자 한다.

 

PCA는 다음과 같은 이유로 사용하였다.

1. 유저 데이터는 존재하지만 어떠한 값이 클러스터링에 중요한 데이터인지 모르기 때문
2. 비지도 학습(클러스터링)을 진행할 예정이기 때문
3. 변수가 많지만 각각이 설명하는 정도를 알고 싶기 때문

 

PCA를 사용한다면 다음과 같은 단점이 존재할 것이다.

Raw Data가 각 변수들을 설명할 수 있는 새로운 축을 기준으로 할 것이기 때문에 원본 데이터와 다르다. 즉, 데이터의 변환이 일어난다.

 

그렇다면 PCA란 무엇일까?

우선 필자가 공부를 하며 느낀 PCA의 특징을 한 문장으로 설명하면 다음과 같다.

 

변수가 많이 존재할 때(=차원이 많을 때) 각 변수들의 분산을 가장 잘 설명할 수 있는 1개 이상의 축을 찾아 그 축을 기준으로 데이터의 변형을 가하여 변수를 압축(=차원을 압축)하는 방식.

 

관련된 지식으로 고유벡터, 고윳값 등의 선형대수학 지식을 요하나, 아래의 영상을 통해서 최대한 친절하고 야물딱진 설명을 들을 수 있다. PCA에 관심이 있다면 한 번 들어보도록 하자. Double BAM

 

https://www.youtube.com/watch?v=FgakZw6K1QQ 

StatQuest's PCA, Step by Step

35개의 변수, 즉 이론상 35차원에 해당하는 변수 중에서 설명력이 가장 높은 PC를 찾아보도록 한다. 궁극적인 1차 목표는 총분산의 설명이 70~80% 사이를 이루는 것. 이를 위해 n_components를 최대인 35로 두고 확인을 해보도록 하자.

 

실전으로 가보자고

 

이론 자체는 복잡해보일 수 있으나, 이를 코드로 적용하는 데에는 sklearn에서 적절한 라이브러리를 제공해주고 있기에 부담 없이 적합을 시행할 수 있었다.

 

pca=PCA(n_components=35)
principal_components=pca.fit_transform(df_standardized)
principal_df=pd.DataFrame(principal_components)
# pca 진행

sum=0
plot,bar=[],[]
for value in pca.explained_variance_ratio_:
    sum+=value
    plot.append(sum)
    bar.append(value)
plt.plot(plot)
plt.bar(np.arange(len(pca.explained_variance_ratio_)),bar)
plt.show()
print(plot)
#시각화

 

해당 코드를 실행해보면 아래와 같은 표와 누적값이 나오는 것을 확인할 수 있다.

 

저걸 scree plot이라고 부르는 것 같다.

 

누적된 값들을 봤을 때, 분산을 70%로 설명하면서 많은 변수를 차지하지 않는 범위라 생각되는 14를 다시 n으로 잡고 적합을 시켜보도록 한다.

 

진짜 딱 마지노선이네

 

각 변수에 대한 설명력이 갈수록 대동소이 했다는 점. 그리고 PCA를 활용하면서 데이터를 35개의 변수에서 14개의 변수로 줄였다는 점에서 큰 의의를 둔다.

 

다음 게시글에서는 해당 데이터프레임을 이용하여 클러스터링을 진행해 보고, 이를 위해 사용한 알고리즘인 K-Means Clsutering을 알아보도록 한다. 그리고 적정 K값으로 4를 넣은 값과(정성적 판단), Elbow Method를 통해 알아낸 K값을 비교해 보며 각 클러스터는 어떤 특징을 가지고 있는지 알아보는 시간을 가져보도록 한다.

 

그리고 해당 작업을 수행하면서 문득 '게이머 입장에서 플랫폼을 선택하는 데에도 게임과 상관관계가 있을 것이다.'라는 전제로 분석을 진행했지만, 곰곰이 생각해보면 '플랫폼 별로 플레이 환경이 다르기 때문에 이를 독립적으로 생각해야 한다.'라는 생각도 문득 들었다.

 

첫 프로젝트는 모든 플랫폼을 합친 52만 개의 데이터 중 플랫폼도 변수로 넣었지만, 첫 클러스터링 이후 플랫폼을 따로 독립시켜 PCA-Clustering을 진행한 결과도 소개하고 프로젝트를 마무리해 보면 좋을 것 같다.