데이터사이언스 기록기📚

[삼성 SDS Brightics 서포터즈] #04_개인 프로젝트(1) 고객 성격분석_데이터 전처리 본문

대외활동/삼성SDS Brightics 서포터즈

[삼성 SDS Brightics 서포터즈] #04_개인 프로젝트(1) 고객 성격분석_데이터 전처리

syunze 2022. 7. 5. 21:20

안녕하세요!

 

저번 포스팅에 이어서,

고객 성격 분석 데이터를 통해 데이터 분석을 진행해보겠습니다!

 

지난 포스팅이 궁금하신 분들은 아래 주소를 클릭해주세요!

2022.06.28 - [대외활동/삼성SDS Brightics 서포터즈] - [삼성 SDS Brightics 서포터즈] #03_개인 프로젝트(1) 고객 성격 분석_데이터 구성, 데이터 로드, 통계량 확인

 

[삼성 SDS Brightics 서포터즈] #03_개인 프로젝트(1) 고객 성격 분석_데이터 구성, 데이터 로드, 통계

안녕하세요~! 이번 포스팅은 개인 분석 프로젝트로, 평소에 분석해보고 싶은 데이터를 이용하여 분석을 진행해보았습니다. 목차는 다음과 같습니다. 그럼 지금부터 Brightics Studio를 활용한 프로

subinze.tistory.com

지난 포스팅은 데이터 로드, 통계량 확인이었다면

이번 포스팅은 데이터 분석의 꽃인 '데이터 전처리'를 진행해보겠습니다!

 

목차는 다음과 같습니다.

 


1. 필요없는 칼럼 제외

필요없는 칼럼 제외

Select Column 함수를 이용하여 필요 없는 칼럼은 제외해주었습니다.

저는 "ID","Z_CostContact", "Z_Revenue “Z_Revenue 칼럼을 제외하였습니다.


2. 새 칼럼 생성

새로운 칼럼 생성

 

생성 확인

제공되는 데이터를 살펴보니 비슷한 유형의 칼럼이 있어

Add Function Columns를 이용하여 다중 칼럼을 생성하였습니다!

하나의 칼럼만 생성하고 싶을 때는  Add Function Column함수를 이용하여 생성할 수 있습니다.

 

Spending = MntWines + MntFruits + MntMeatProducts + MntFishProducts + MntSweetProducts + MntGoldProds

Purchases =  NumDealsPurchases + NumWebPurchases + NumCatalogPurchases + NumStorePurchases

Accpected_Campaign = AcceptedCmp1 + AcceptedCmp2 + AcceptedCmp3 + AcceptedCmp4 + AcceptedCmp5

Age = 2022 - Year_Birth + 1

Chlidren_Count = Kidhome + Teenhome

 

상단 5개의 변수를 새로 생성하였습니다!


3. 이상값 처리

이상치는 값 확인 후 2가지 방법으로 진행하여 이상치를 처리하려 합니다!

먼저 이상치 값을 확인해볼까요?

 

1) 이상치 확인

Income과 Mnt 값들

Income과 MntWines, MntFruits, MntMeatProducts, MntFishProducts, MntSweetProducts, MntGoldProds의

이상치를 확인해보았을때

 

이상치가 많은 것을 확인할 수 있었습니다.

Purchases와 Num칼럼들

Purchases와 NumDealsPurchases, NumWebPurchases, NumCatalogPurchases, NumStorePurchases의

이상치를 확인해보았을 때

 

위의 칼럼들보다 이상치가 적은 것을 확인할 수 있었습니다.

 

2) 이상치 삭제

이상치 삭제

이상치 값을 바꾸거나 삭제하기 위해Outlier Detection 함수를 이용하였습니다!

 

이상치가 적었던 Purchases와 NumDealsPurchases, NumWebPurchases, NumCatalogPurchases, NumStorePurchases는

이상치 감지(Outlier Detection) Tukey 방법을 이용하여

결괏값을 삭제하였습니다.

 

Row가 2,216개에서 2,110으로 줄어든 것을 확인할 수 있습니다!

이상치 제거 전과 후

왼쪽 사진은 이상치 제거 전 사진, 오른쪽 사진은 이상치 제거 후 사진입니다!

Boxplot을 통해 확실하게 대부분의 이상값이 삭제된 것을 확인할 수 있습니다!

 

3) 이상치 값 변경

이상치 변경 전, 후

이상치 값 변경할 칼럼

Tukey 방법을 이용하고 Result는 Add Prediction을 사용하였습니다.

 

왼쪽 사진이 이상치 변경 전, 오른쪽 사진은 이상치 변경 후입니다.

확실히 줄어든 것을 눈으로 확인할 수 있지 않나요?!

 


4. 날짜 칼럼 값 변경

1) String 데이터 확인

 

Column 선택

날짜 Column 값을 바꿔주기 전,

String Summary를 통해 String 데이터의 분포를 알아보겠습니다!

 

먼저 String 값을 모두 선택해줍니다.

결과를 확인해보면

Dt_Customer는 659개의 다른 값, Education은 5개의 다른 값, Marital_Status는 8개의 다른 값으로 구성되어 있습니다.

 

해당 결과를 보고

Dt_Customer(일/월/년)의 구성을 Year(년도)로 바꾸고

Education과 Marital_Status는 칼럼 수가 적어 One hot Encoding을 진행해야겠다고 생각했습니다!

 

2) 날짜 칼럼 값 변경

Add Function Column을 이용하여 Dt_Customer(년, 월, 일 정보)에서 Year(년 정보)만 추출해보겠습니다.

문자열의 일부를 추출해주는 substr을 이용하여 year 정보를 추출하였습니다.

 

위 사진을 통해 Year 칼럼이 잘 생성된 것을 확인할 수 있었습니다!

값 변경 이후 Dt_Customer의 칼럼을 삭제하기 위해

Select Column 함수를 사용하였습니다. 


5. 인코딩

모델은 문자를 인식하지 못하므로 

문자 칼럼이 들어가면 오류가 뜨게 됩니다.

 

모델이 잘 인식하기 위해

문자 칼럼은 숫자로 바꾸어주어야 하는데요,

문자 → 숫자로 바꾸는 작업인코딩입니다!

 

인코딩은 Label Encoder와 One Hot Encoding이 있는데

저는 그중 직관적으로 구분할 수 있는 One Hot Encoding을 사용하였습니다.

One Hot Encoder 사용

One Hot Encoding은 다음과 같이 문자 → 숫자로 바꾸는데, 

해당 카테고리가 있으면 1, 없으면 0인 형태로 구성이 되며
칼럼 카테고리 개수만큼 생성이 됩니다.

 

하나의 예시로,

Marital_Status 카테고리에 Together가 있는데

Together이 있는 행이면 1, 없으면 0으로 표시됩니다.

 

 

인코딩이 완료된 칼럼은 Select Column을 이용하여 삭제해 줍니다.

 


6. 정규화

숫자형 칼럼들은 다양한 범주를 가지고 있는데요

이를 하나의 기준으로 통일하는 것이 정규화입니다!

 

Brightics Studio에서는 정규화Normalization 함수로 사용하고 있습니다!

 

정규화는 다양한 Type을 제공하는데요

저는 이 중에서 이상값의 영향을 받지 않는 RobustScaler를 사용하였습니다.

 

정규화시킨 칼럼들을 앞서 같은 방법으로

삭제해준 후 전처리 과정이 끝났습니다!


드!디!어!

모델을 돌릴 수 있는 기초 단계이자 가장 중요한 단계가 마무리 되었습니다.

 

다음 포스팅에서는 고객 분류와 이에 따른 최종 분석을 포스팅하겠습니다.

 

긴 글 읽어주셔서 감사합니다!

 

* 본 포스팅은 삼성 SDS Brigthics 서포터즈 3기 활동의 일환으로 작성하였습니다 *

728x90
Comments