K-means(군집화) 및 PCA(주성분 분석) 이용한 모델 정의와 시각
평균에 대한 맹점을 꼬집는데, 가장 큰 일례로 인구의 소득분포이다. 최상위의 소득 집단이 전체 비중에서 크게 차지하지 않더라도 그 소득원이 중하위의 소득원보다 압도적이기 때문에 조사된 사람의 소득을 합해서 전체 사람 수로 나눈 산술평균값을 가운뎃 값으로 고려하기에는 너무 상위 값으로 치우쳐 있다. 즉 분포도에서 꼬리가 앞쪽으로 치우치거나 혹은 뒤쪽으로 치우치면 평균값(mean)은 프로야구 구단주가 언론에서 주장하는 평균 프로야구 선수 연봉(거의 2억 원대)처럼 오인받기 딱 좋은 값이다. 모든 프로야구 선수의 평균 연봉을 산술 평균한 값이 아니라, 선수들의 연봉을 일렬로 나열했을 때 한가운데의 값을 기준으로 산출(중앙값)하면 약 3,500만 원 정도에 불과하다. 억대 연봉자들의 연봉이 전체 프로야구 선수들의 몸값으로 나타내듯이 집계한 산술평균이 마치 프로야구 선수들이 전부 그렇게 받는 것처럼 일반인들은 오해하기 딱 좋다.
데이터 분석에 있어서 확률과 통계에 앞서 가장 중요한 수치 파악 능력은 평균에 대한 정확한 이해다. 평균으로 이용하는 대푯값의 종류에는 산술평균값(mean), 중앙값(median), 최빈수(mode) 등이 있다. 이중 중앙값은 앞서 사례로 든 순위에 따른 집계에서의 평균값으로 사용하기 적당하며, 최빈수는 선호하는 메뉴를 조사할 때 가장 많은 빈도수가 나타낸 순을 기준으로 가운데 있는 값을 평균으로 사용하기 적당하다. 그래서 일반적으로 모집단의 모든 값을 합해서 전체 개체수로 나누어버린 산술평균은 데이터 분석에 왜곡을 일으키기 쉽다.
피트니스 센터의 고객 데이터를 예제로 삼아, 이 데이터셋을 군집화(이름을 부여하지 않고, 비슷한 것끼리 끼리끼리 여러 그룹으로 모음, Clustering)이라는 기법을 사용하면 회원을 그룹화할 수 있고, 각 그룹의 행동 패턴을 이용 빈도 등(경향)에 따른 파악으로 예측할 수 있다. 고객별로 이용 경향이 다르기 때문에 이런 경향을 분석해서 고객별 이용 횟수 같은 것도 예측할 수 있지 않을까라는 생각이 들고, 이런 분석이 가능할까(시모야마 테루마사, 2020)?
비슷한 이용률을 보이는 특성을 기반으로 몇 개의 회원 그룹이 존재하는가?
클러스터링에 이용하는 변수는 고객의 한 달 이용 이력 데이터인 mean(산술평균값), median(중앙값), max(최댓값), min(최솟값), membership_period(회원기간)다. 이러한 변수를 추출한 뒤에 변수 간의 거리(편차)를 기반으로 그룹화를 진행하는 K-mean라는 군집화를 이용한다.
또, 위의 네 개의 변수는 데이터의 편차가 크게 다른데, 전자는 월 이용 횟수이기 때문에 1~8 사이의 값이지만, 후자는 최댓값이 47이다. 이 경우, membership_period에 의해 결과가 좌지우지되기 때문에 표준화를 해야 한다.
회원 2가 회원기간이 상대적으로 짧음(7.07..)에도 불구하고, 이용률이 높은 회원이라는 것이 눈에 가장 먼저 띈다. 거기에 반해 회원 1은 회원기간도 짧고 이용률도 가장 낮다. 그룹 3과 그룹 0은 그룹 1, 그룹 2보다 회원 기간이 길다. 그룹 3과 그룹 0을 비교하면 그룹 3쪽이 회원 기간은 길지만, 이용률이 약간 낮다. 그룹의 특징을 알면 그룹별로 다른 홍보전략(캠페인)으로 회원 유치를 구상할 수 있다.
어쨌든 이 클러스터링 결과를 가시화해 보겠다. 먼저 5개의 변수를 3개의 변수(3차원)로 축소 및 표현(주성분 분석, Principal Component Analysis) 하면 아래와 같이 분산이 섬세하게 흩어진 결과를 볼 수 있다.
위의 주피터 노트 상에서 위쪽 코드에서는 2차원으로 주성분 분석을 진행했는데, 1행에서는 주성분 분석(PCA) 패키지를 임포트 했고 3행에서는 모델을 2차원 축소해서 생성하고 4행과 5행에서는 주성분 분석을 실행했다. 2차원으로 축소한(5개의 변수를 2개의 변수로 표현한) 데이터를 pca_df라는 변수에 저장하고 클러스터링 결과도 저장한다.
아래쪽 코드에서는 matplotlib라는 그래프 만드는 라이브러리를 이용해서 가시화를 진행했다. 3행의 for문에서는 그룹마다 여러 가지 색깔로 바꿔서 그렸다(시모야마 테루마사, 2020).
PCA(Principal Component Analysis)는 특징 공간에서 주성분이 되는 ‘축’을 찾아 이 축을 기준으로 데이터를 변환해 특징의 개수를 줄여주는(차원 축소) 알고리즘이다. 이렇게 차원 축소할 경우 특징의 개수는 줄이면서, 이와 동시에 특징이 담고 있던 정보의 양을 최대화할 수 있다. 또한, 주성분을 중심으로 전환한 각 특징은 서로 간의 상관성이 제거되는 효과도 있다(서준석, 2019). tmp [0]은 데이터에서 한 개를 축으로 했을 때 그 분산이 가장 커지는 축을 나타내는 첫 번째 주성분, tmp [1]은 두 번째로 커지는 축을 두 번째 주성분으로 놓이도록 데이터를 변환한다. 여기서 분산이 가장 커지는 축이라는 것은 쉽게 말해서 오류를 최소화할 수 있는 기준선이라고 생각하면 된다(서준석, 2019).
다음은 클러스터링 결과를 바탕으로 탈퇴 회원의 경향을 파악해본다. 군집화로 4개의 그룹으로 분할했는데, 지속 회원과 탈퇴회원을 집계해본다. 아래의 결과를 보면, 그룹 2와 그룹 3은 지속 회원이 많고 그룹 1은 탈퇴회원만 있으며 그룹 0은 골고루 포함돼 있다. 이 결과를 해석해 보면, 그룹 2는 회원 기간이 짧지만 초기에 의욕적이어서 전체적으로 이용률이 높으며, 그룹 3은 회원 기간이 길고 이용률이 그룹 2보다 낮지만 지속 회원이 많은 것을 생각하면 이용이 안정적(장기 고객)이라고 생각할 수 있다(시모야마 테루마사, 2020).
그러면, 정기적/비정기적 이용 여부를 살펴보자. [47]처럼 정기적으로 스포츠 센터를 이용하는지 여부를 플래그로 작성해 본다. 결과를 보면 지속 회원이 많은 그룹 0, 그룹 3에는 정기적으로 이용하는 회원이 많다는 것을 알 수 있다. 이렇게 군집화(Clustering)를 통한 그룹화를 실시함으로써 고객의 특징을 파악할 수 있다. 또 분석의 목적에 따라 다양한 방식의 분석을 진행하는 것도 좋다(시모야마 테루마사, 2020).
이제부터는 이용 횟수 예측 모델(Machine Learning)을 구축한다.
지금까지의 분석에서도 회원의 이용 방법(행동, behaviour)이 중요하다는 것을 알 수 있었고, 다음 섹션에서 회원(네트워크 트래픽)의 과거 행동 데이터로부터 탈퇴 가능 횟수 예측(이상행위 분석)에 도전해보겠다.
참조.
1) 김진호. (n.d.). 빅데이터가 만드는 제4차 산업혁명 (pp. 1-318). n.p.: 북카라반.
2) 시모야마 테루마사 외 2. (n.d.). 파이썬 데이터 분석 실무 테크닉 100 (pp. 4-78). n.p.: 위키북스.
3) 서준석. (n.d.). 인공지능 보안을 배우다 (pp. 149-152). n.p.: 비제이 퍼블릭