카테고리 없음

[삼성 SDS Brightics #2] 브라이틱스로 마케팅 효과 UP! (K-Means 군집분석 실습)

song2001 2021. 6. 15. 01:55

안녕하세요~

지난주 금요일에 방영한 펜트하우스 다들 보셨나요?!

저는 보다가 깜짝 놀랐습니다

천서진과 은별이 재회신에 갑자기 빙수 ppl이라니?-.-

제가 이 드라마 얘기를 꺼낸 이유는 바로~~~

마케팅을 위한 데이터 분석 실습을 준비했기 때문이죠.

 

마케팅에서 많이 사용되는 타깃 고객군 설정에는

세분화와 군집화라는 방법이 있습니다.

세분화는 수동으로 고객을 그룹 짓는 비통계적인 작업인 반면,

군집화는 데이터 분석을 통해 누구를 타깃 고객으로 삼을 것인지 발견하는 작업입니다.

오늘은 군집화(clustering)를 위한 데이터 분석을 어떻게 하는지

브라이틱스 스튜디오로 알아보겠습니다.

 

오늘 실습의 전체적인 그림

(마케팅 군집화 참고한 블로그: https://m.blog.naver.com/bestinall/221231626438)

 

이번 실습을 위해, 아직 브라이틱스 스튜디오 설치 안 하신 분들은

아래 블로그를 확인해 주세요!!

https://blog.naver.com/hasong0131/222387019316

설치하신 분들은 바로 아래 링크를 클릭해 주세요

http://127.0.0.1:3000/

 

Step 1) 브라이틱스에 CSV 데이터 업로드하기

먼저 오늘 사용할 파일을 다운로드해 주세요!

28_py_market_saledata_clustering.csv
0.08MB

이 파일은 과거 한 달간의 상품 판매 데이터이고

상품별 판매 시간이 담겨있습니다.

마케터들은 이 데이터를 활용해

같은 시간대와 비슷한 판매량을 보이는 상품들을 그룹 짓고

그룹별 맞춤형 광고를 진행하여

더 좋은 마케팅 효과를 얻을 수 있습니다.

 

저는 'K-means 군집분석'이라는 이름으로 'New Model'을 만들어 주었습니다.

템플레잇은 'Default'로 하고 OK 버튼을 눌러줍니다.

 

그다음은, 우측에 있는 Palette에서 'Load'함수를 불러옵니다.

Path -> Add -> Local 순으로 가서

아까 다운로드한 파일을 클릭해 주세요.

 

파일을 불러왔다면 좌측 하단에 있는 'Run'버튼을 클릭해 주세요.

Step 2) 데이터 전처리하기

이제는 데이터 전처리를 할 건데요,

K-means 함수를 이용하기 위해 데이터를 좀 더 나은 형태로 바꿔줄 거예요.

'Pivot' 함수를 사용해서, 각 상품 코드를 시간대 별 판매량으로 나타내보겠습니다.

Pivot 함수는 spreadsheet 스타일의 pivot table로 나타낼 수 있어요.

 

'Rows'에는 product_code

'Columns'과 'Values'에는 hour로 'select'해주세요.

 

조금 더 밑으로 스크롤 하면 aggregate function 이 보이는데,

이건 count인 'CNT'로 셀렉 해주세요.

 

이렇게 하면, 데이터가 깔끔하게 정리되었네요.

Column에는 상품 시간대인 9시부터 22시가 있고

Row에는 각 상품코드의 판매량이 보입니다!

(11,2,1,13 이런 게 다 판매량이에요).

그다음은 전처리 단계는

빠진 데이터가 있는지 확인하는 작업입니다.

'Statistic Summary' 함수를 활용하여

null 값이 있는지 확인해보겠습니다.

Input Columnns는 다 'Select'하고

Target Statistic 은 'null count'로 설정하고

'Run 해주세요'.

오른쪽 테이블에 보이다시피 거의 모든 시간대에 null 값이 있네요 ㅎㅎ

이 null 값은 해당 제품의 판매량에 대한 데이터가 없다는 뜻이라

0으로 대체할게요.

이 작업을 하기 위해선,

'Replace Missing Number' 함수를 클릭해 주세요.

 

 

Input Columns에는 'Select All'을 해주시고

Fill Value는 To,

FIll Holes With는 0으로 해주세요.

이렇게 하면, 시간대별 모든 Null 값은 0으로 대체해 줍니다.

그다음은 전처리의 마지막 단계인 Normalization입니다.

 

Normalization 은 데이터를 표준화하기 위한 작업입니다.

Input Columns는 'Select All' 그리고

Normalization Type는 'MinMaxScaler'를 사용하겠습니다.

그리고 suffix는 _2로 해주세요.

이 MinMaxScaler는 최솟값이 0 최댓값이 1이 되도록 스케일링해 줍니다.

예를 들어 판매량이 5였다고 생각하면 이게 많이 팔린 건지 모를 수 있으니

0에서 1사이 값을 정하면

'0.3일 경우 좀 적게 팔렸구나' 라고 판단할 수 있게 도와줍니다.

 

Step 3) 모델링: K-means (Silhouette)

분석의 마지막 단계인 모델링입니다!

앞서 비슷한 것끼리 그룹으로 묶기 위해선 군집화를 사용한다 했는데,

오늘은 군집화 중에서 K-Means (Silhouette) 함수를 쓸게요.

이를 통해 최적의 K 값을 찾고

데이터들이 얼마나 잘 클러스터링 되었는지 평가합니다.

더 자세한 브라이틱스의 K-Means 활용법은 여기를 참고해 주세요

http://127.0.0.1:3000/api/va/v2/help/function/brightics.function.clustering$kmeans_silhouette_train_predict?type=data&context=python

 

Input Columns는 'Select All'해주시고

Number of Clusters Set는 2부터 9까지 해주세요.

'Run'한 뒤, 우측에 있는 'model'을 클릭하면 위와 같은 화면이 나옵니다.

K=2부터 K=9중, best 일 땐 K= 7일 때라고 나타나네요.

 

또, 그래프들을 보면 각 K 값마다 Silhouette coefficient values 가 나오는데,

K=7이 가장 1에 가깝습니다.

즉, K=7일 때 올바른 클러스터에 분류된 것이죠.

하지만!

K=7값과 K=6값이 차이가 거의 없기 때문에

우리는 K=6값을 쓰기로 하고,

K-Means (Silhouette) 한 번 더 실행해 주세요.

이번에 Number of Clusters Set 은 6으로 설정해 줄게요!

마지막으로, Pivot 함수를 사용하여

군집 별 몇 개의 제품이 있는지 product code count로 알 수 있습니다.

 

Rows는 prediction, Values는 product_code,

Aggregate Function은 CNT로 해주세요.

이로써, 상품을 총 6가지 군집으로 분류하였습니다.

담당 마케터는 각 군집 별 팔리는 시간대의 특징을 찾아서

최적화된 광고방법을 찾을 수 있겠습니다.

 

오늘 실습 어떠셨나요?!

사용된 함수들의 개념만 잘 이해하면

원하는 분석은 쉽게 할 수 있을 것 같아요!

브라이틱스의 더 많은 Clustering 함수 보고 싶다면

아래 영상도 확인해 주세요!

https://www.youtube.com/watch?v=zkZ-K8s_0YI&list=PLc50BLDT6Bv6qFp4YEB3YpNtRLjFeU8WK&index=7

오늘 블로그는 여기까지!

다음에 또 만나요

안뇽

 

[본 포스팅은 Brightics 서포터즈로서 직접 체험하고 작성한 리뷰입니다.]