본문 바로가기

데이터

파이썬 실습 - 고객 데이터 분석을 통한 세그먼트 도출

반응형

고객 데이터 분석을 통한 세그먼트 도출

 

 

 

 


고객고유번호, 성별, 나이, 연소득, 지불 점수 데이터를 이용해 고객 세그먼트를 도출하고 각 세그먼트별 특성에 맞는 마케팅 전략을 고민해본다.

 

먼저 데이터의 행과 열의 개수를 확인한다.

총 200개의 행, 5개의 열이 있음을 확인할 수 있다.

 

 

 

 

 

그 다음, info()를 찍어 컬럼별 데이터타입은 어떤지, null값은 있는지 확인한다.

Gender컬럼을 제외하곤 모두 수치형이며 null값은 존재하지 않는다.

 

 

 

 

 

기술통계를 찍어, 수치형 컬럼들의 대략적인 수적 분포를 확인한다.

 

 

 

 

 

다음 컬럼들의 상관관계를 살펴보기 위해 corr()를 heatmap으로 살펴본다.

크게 상관관계가 눈에 띄지는 않는다. (CustomerID의 경우 고유번호이기 때문에 제외)

 

 

 

 

 

다음 pairplot을 찍어 컬럼 간 분포를 확인한다.

몇몇 그래프에서 다섯 개로 세그먼트가 나눠지는 걸 확인할 수 있다.

그러나 이 데이터가 샘플데이터여서 그런 것이지, 실제로 정확하게 나뉘기는 쉽지 않다는 걸 인지하고 가야 할 것 같다.

 

 

 

 

 

 

 

다음 나이와 연소득에 대해 남녀 간 차이가 있는지 확인하기 위해 lmplot을 찍어본다.

그러나 유의미한 차이를 찾기는 어려운 것 같다.

 

 

 

 

 

 

다음 연소득과 지불점수에 대해 남녀 간 차이가 있는지 확인해본다.

역시 차이가 없음을 확인할 수 있다.

 

 

 

 

 

 

박스플롯을 찍어서 나이에 따른 분포를 확인한다.

남자(Male)가 조금 더 연령대 분포가 넓은 걸 확인할 수 있다.

 

 

 

 

 

 

다음 K-means를 이용해 클러스터링을 해줄 것이다.

먼저, Age와 spending score 두 가지 변수를 사용해 클러스터링을 해주겠다.

먼저 kmeans를 import 해준다. 

그 다음, Age컬럼과 Spending Score컬럼의 값들을 X1에 넣어준다.

inertia라는 빈 리스트를 만들어 준 후, for문을 만들어 KMeans에 다양한 파라미터 값들을 넣어 줍니다.

그리고 이것을 X1에 fit해줍니다. 마지막으로, 앞서 만들었던 inertia라는 빈 리스트에 이 값을 추가합니다.

 

 

 

 

 

 

 

inertia를 찍어보면 아래와 같이 출력되는 걸 확인할 수 있다.

n을 1부터 10까지 넣었을 때 값이다.

inertia는 각 중심점(centroid)에서 군집 내 데이터 간의 거리를 합산한 것으로, 군집의 응집도를 나타낸다. 이 값이 작을 수록 응집도가 높은 군집화다. 즉, 값이 작을 수록 좋은 것이다.

 

 

 

 

 

 

다음 직접 시각화를 하여 적당한 클러스터 개수를 판별해보겠다.

아래와 같이 그래프로 나타났을 때 급격히 변화하는 지점인 클러스터 개수 4일때, 가장 적합한 것으로 보인다.

 

 

 

 

 

 

n에 4를 넣어서 다시 KMeans를 찍어보겠다.

이번엔 직접 군집화를 한 것을 시각화해서 보겠다.

 

 

 

 

 

 

아래와 같이 네 개의 클러스터로 나뉘는 걸 확인할 수 있다.

빨간 점은 centroid(중심점)이다.

 

이 그래프에 의하면 군집 4개를 

  • 저연령-고소비 군

  • 저연령-중소비 군

  • 고연령-중소비 군

  • 저소비 군

으로 나눌 수 있다. 

 

 

 

 

 

다음, 연소득 데이터와 소비지수 데이터에 대해 군집화를 진행해보겠다.

위와 같은 형태로 군집화를 진행해준다.

 

 

 

 

 

그리고 그래프를 그려본다.

 

 

 

 

급격히 변화하는 지점이 5이므로, n_cluster에 5를 넣어준다.

그리고 시각화해준다.

 

 

먼저 왼쪽 위(저소득 고지출)의 타겟전략과 오른쪽 위(고소득 고지출)의 타겟전략을 다르게 짤 수 있을 것이다. 예를 들어

저소득 고지출 계층은 할인쿠폰을 주다든지, 금액혜택을 주는 전략을 짤 수 있을 것이고, 고소득 고지출 계층은 소득이 높기 때문에 금액혜택보다는 VIP를 위한 별도의 공간을 마련하는 전략이나 이들을 위한 쇼핑공간을 제공하는 전략을 짤 수 있을 것이다.

 

 

 

 

 

다음 실루엣스코어를 이용해 적당한 k를 선택해주겠다.

kmeans는 분석하는 사람이 k에 대해 사전정의해주어야 하므로 인위적이라는 의견이 있다. 따라서 k에 대한 명확한 기준이 필요하기 때문에 실루엣스코어를 사용해준다. 실루엣스코어는 샘플들이 각 클러스터 내부 거리의 평균과 인접 클러스터와의 거리의 평균을 계산해서 사용한다.

가장 좋은 값은 1이고 최악의 값은 -1이다. 

0 근처의 값은 클러스터가 오버랩되었다는 걸 의미한다.

또 음수 값은 샘플이 잘못된 클러스터에 배정되었다는 걸 의미한다. 즉 다른 클러스터에 더 적합하다는 의미이다. 

아래와 같이 실루엣스코어를 사용한다.

 

 

 

 

 

클러스터의 개수에 따라 에버리지실루엣크어가 출력되었음을 확인할 수 있다.

n=6일 때 1에 제일 가까우므로 가장 적합하다고 할 수 있다.

그래프 분포도 가장 좋다.

 

 

 

 

 

n=6을 넣어 위 코드를 다시 실행한다.

 

 

 

 

 

 

그리고 위에서 정의했던 cluster_labels의 shape을 찍어본다.

또 직접 labes를 찍어본다.

k의 개수를 6으로 설정했기 때문에 0~5 사이의 숫자가 나온다.

 

 

 

 

 

 

기존 데이터셋에 각 고객이 속한 클러스터 값을 넣어준다.

 

 

 

 

 

groupby를 이용해 cluster별로 Age의 평균을 구한다.

 

 

 

 

 

다음 boxplot을 찍어본다.

 

 

 

 

 

 

다음 연소득, 지불점수, 나이별로 violinplot을 찍어본다.

 

 

 

 

 

 

3개의 그래프를 한 화면에 배치한다.

 

 

 

 

 

 

 

그러나 위처럼 변수가 두 개이면 뽑을 수 있는 정보가 한정적이다.

따라서 변수 세 개를 토대로 시각화하고 싶다면 3차원으로 시각화를 할 수 있다.

 

 

 

 

위 그래프들을 토대로 각 클래스터별 특성을 정리하였다.

 

 

 

먼저 VIP고객을 분류하면 군집1과 군집4가 되겠다.

소비점수가 높기 때문이다.

 

- 군집1

그 중에서도 1의 연간소득이 높다. 잘 유도해서 지출을 늘리게 할 수 있을 것이다.

1의 연령대는 비교적 젊은 편으로, 젊은 층들을 위한 마케팅전략을 수립해야 할 것으로 보인다.

세대로 따지자면 밀레니얼세대 정도가 될 것이다.

 

 

- 군집4

연간 소득은 낮지만 우리mall에서의 소비점수가 높다.

즉 충성도가 높은 고객층으로, 할인행사와 같은 가격적인 혜택을 주는 것이 좋을 것이다.

 

 

잠재 VIP 고객은 군집2다.

이들은 우리 mall에서의 소비점수는 낮으나 연간소득이 높으므로 더 구매할 여력이 충분하다.

그러나 연령이 전 연령대에 걸쳐 있으므로 타게팅하기는 쉽지 않아 보인다. 

다른 변수를 더 확보해 방문과 구매를 유도해야 할 것이다.

반응형