대외활동/Brightics 서포터즈

[Brightics | 실습] kaggle(캐글) 로 Housing Price 예측하기 (2) 전처리 편

케이와이엠 2021. 8. 3. 18:34

 

이젠 팀 프로젝트 두 번째 시간, 전처리 편입니다 !

팀원들과 각자 변수들을 꼼꼼히 살펴본 후

회의를 거쳐 전처리 방법을 하나로 통일시키는 방식으로 진행하였어요

0. 데이터 설명 + 불러오기

먼저, 사용할 데이터는 kaggle의 competition 대회 데이터 중 House Price 데이터에요 !

2021.08.03 - [삼성 Brightics] - [Brightics | 실습] 브라이틱스로 kaggle(캐글) 참여하기 (1) 기획 편

 

[Brightics | 실습] 브라이틱스로 kaggle(캐글) 참여하기 (1) 기획 편

브라이틱스와 함께 [Brightics | BASIC] , [Brightics | 실습] 을 중심으로 함께 공부해온지 벌써 8주, 2달이 흘렀는데요 각종 예제와 실습으로 실력을 조금 쌓았으니, 데이터 분석에 관심이 있는 사람이라

uumini.tistory.com

더 자세한 설명은 위 포스팅 확인하기 !

새 마음 새 뜻으로 프로젝트와 모델을 만들어줍니다.

 

이때, 캐글에서 데이터셋을 확인해보면 train data와 test data가 구분되어있습니다. 

두 개 모두 따로 Load 해주세요  두 개 다 사용해야하니까요

이때

All column names should start with alphabet characters. You can use alphabet, number, and '_' only. 라는 오류가 뜨는데요,

브라이틱스에서 칼럼 명은 알파벳으로 시작해야만 해요. 그리고 칼럼 명에는 알파벳, 숫자, _ 기호 만 사용 가능하답니다.

1. 요약 통계량 확인 [Statistic Summary]

 본격적으로 분석에 들어가기 앞서 ! 한 가지 짚고 넘어가야합니다.

train.csv / test.csv 를 따로 로드를 했는데요,

우리는 train data를 바탕으로 sale price를 예측하는 모델을 훈련시킨 다음

해당 모델링 기법을 test data에 적용시켜야 하기 때문에 test data는 그대로 !! 아무런 터치 없이 !! 가만히 두기로 해요 :)

따라서 train.csv 을 중점적으로 다루어보겠습니다 

1-1) statistic summary : continuous variavble

먼저 요약통계량을 확인해볼게요.

파이썬으로는 df.shape() , df.info() , df.describe / value_counts() 등을 사용하곤 하죠.

하지만 브라이틱스로는 이 함수만으로 모든 걸 확인할 수 있다는 점 !

여기서 가장 눈 여겨 봐야 할 건 아무래도 null_count 이지 싶어요.

LotFrontage, MasVnrArea, GarageYrBlit 에 빈 값이 존재하네요.

1-2) string summary : discrete variavble

브라이틱스는 continuous 변수와 discrete 변수에 대한 통제를 따로 해주고 있어요.

따라서 요약 통계를 위해선 두 번의 과정이 필요하답니다.

음 null 값이 없다고 나오는데요,

하지만 mode(최빈값) 에서 NA 값을 가진 feature들을 확인해주었어요.

그 결과 Alley, Fence, FireplaceQu, MiscFeature, PoolQC 에서 "NA" 가 많았는데요,

그 중

Alley, Fence, MiscFeature, PoolQC 의 NA 비중이 1000개가 넘어가더라구요

 

따라서 이 4개와 이들과 연관되어 있는 MiscVal, PoolArea까지 총 6개 열은 아예 drop 해주면 좋을 듯해요.

위의 결과를 python으로도 함께 알아보았는데요 !

4개의 변수들이 NA 값이 1000개가 넘어가는 것을 동일하게 확인할 수 있었습니다.

2. 전처리

[1단계] - select column

위의 요약통계량을 통해 확인한 결과, NA 비중이 높은

Alley, Fence, MiscFeature, Miscval, PoolQC, Poolarea 를 train data에서 없애주었습니다.

[2단계] - replace missing number

그 다음 continuous variable 중 소수의 null 값은 mean / median으로 바꿔주기로 해요.

연도에 해당하는 변수는 median , 그리고 그 외에는 mean으로 대체해주었어요.

LotFrontage (mean 값으로 replace) / MasVnrArea (mean 값으로 replace) / GarageYrBlt(median 값으로 replace)

[3단계] replace string variable

1단계에서 NA 비중이 높은 건 삭제해주었는데요, 그 외에도 NA 값은 구석구석 존재하고 있답니다 

이렇게나 말이죠 !

그래서 나머지 discrete variable 중 비어있는 NA 란에 Missing 이라는 문자열로 대체합니다 !

[4단계] - outlier 제거

저번 포스팅에서도 말했듯이, 이상치를 찾는 방법에는

1) 통계적 접근 2) 머신러닝을 통한 기계적 접근이 있는데요 우리의 Brightics 는 두 가지 방법 모두 제공하고 있습니다 :)

바로 Outlier Detection(Tukey/Carling)와 Outlier Detection(Local Outlier Factor) 함수입니다.

대략적으로 설명해드리자면,

Outlier Detection(Tukey/Carling) 은 사분위수와 중위수와 같은 통계 계산 방식을 이용합니다.

가장 일반적인 방법으로 박스 플롯에서도 이러한 방법을 채택하고 있어요.

반대로 Local Outlier Factor(LOF)는 밀도를 활용하여 이상치를 찾아냅니다.

예를 들어 산점도를 찍었을 때 주변보다 밀도가 상대적으로 낮은 점들을 제거하는 것이죠 !

음 원래는 이상치 값을 제거하는 것 또한 전처리에 포함되지만, 변수들의 분포와 EDA 전에 하기엔 섣부르다고 판단되어

이상치는 다음 시간에 제거해보도록 할게요 !


전-전처리

그렇게 완성된 전 - 전처리 모습이에요 !!

추후에는 분포 현황과 선형 정도를 그래프로 그려보는 eda 시간을 가져볼까 해요.

그리고 추가적으로 변수를 삭제하고 변수를 묶고 필요한 변수들만을 선택하는 feature engineering 과정을 해 볼 예정입니다.


*해당 게시글은 Brightics 서포터즈 활동의 일환으로 작성된 포스팅 입니다.

게시글 관련 문의 및 소통을 원하신다면 아래 댓글로 남겨주세요

브라이틱스 사용 중 문의사항은

brightics@samsung.com으로 연락주세요 :)