삼성SDS Brightics

[삼성SDS Brightics] 개인분석미션 3-5. 데이터 전처리 : 결측치 처리

해붕 2021. 9. 28. 17:10
반응형

안녕하세요~

Brightics 서포터즈 2기 정해웅입니다!!😀

저번 포스팅에서 원본 데이터를 활용하여 EDA를 진행했습니다.

기본 데이터만 활용해도 굉장히 많은 인사이트를 얻어낼 수 있었는데요.

제가 처음에 세웠던 가설인 "디지털 전환과 중소기업의 채용 트렌드 사이에는 상관성이 있다."를 뒷받침해주는

많은 결과들을 얻었습니다.

이제 본격적으로 데이터를 전처리하는 과정에 들어가려고 합니다.

데이터 전처리는 결측치 처리부터 시작해서 이상치 처리, 분석에 필요한 추가적인 column 생성 등

다양한 과정을 통틀어서 일컫는 과정입니다.

그 중 가장 먼저, 그리고 필수적으로 행해져야하는 결측치 처리에 관해 정리해보고자 합니다.

현재 연구단에서 결측치 처리 관련 논문을 작성 중이라서

다른 전처리 과정들 보다 결측치 처리와 이상치 탐지에 대해서는 조금 자세하게 작성할 수 있을 것 같아서 포함했습니다.

비록 제 분석 데이터에서 결측치 처리가 그다지 중요한 포인트는 아니고, 원본 데이터 자체가 결측치를 거의 포함하고 있기 때문에

기본 개념 + Brightics Studio에서의 결측치 처리

를 위주로 다뤄보겠습니다 ( ̄︶ ̄)↗ 


이번 포스팅 썸네일(?)을 만드려고 결측치 관련 사진을 찾던 중에

왠지 데이터에서 결측치가 발생하는 것이 OMR 카드 모양과 비슷하다는 생각이 들어서

구글에 OMR 그림 찾다가 너무 웃긴 짤이 있어서,,

출처 : http://www.enuri.com/knowcom/detail.jsp?kbno=1167059

 

OMR카드 레전드 - 에누리 쇼핑지식

7 댓글 공유 신고 목록 자유게시판 인기 게시글

www.enuri.com

저만 웃긴가요? ㅎ ㅎ ㅎㅎㅎㅎㅎㅎ

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ피식한거 다 알아~


1. 결측치 발생 확인

결측치를 처리하기 전에 해야할 일이 뭐가 있을까요?!?!

바로!!

결측치가 발생했나 안했나 확인하는 작업입니다.

결측치가 생기지 않았다면 처리할 필요가 없기 때문이죠 ㅎㅎ(너무 당연한가..?)

따라서 결측치 처리하기 전에 먼저 결측치가 발생했는지 여부를 확인하려고 합니다.

Brightics Studio에서 이를 정말 편하게 확인할 수 있는데요.

바로 들어가보겠습니다!


가장 원초(?)적인 방법은 바로 직접 찾는 것입니다..

데이터의 양이 엄청나게 많다면 조금 무리한 방법이지만

어쩌면 사람의 눈으로 찾기에 가장 정확한 방법이지 않을까요?

이는 Load 함수에서 Table로 시각화한 후 찾을 수 있습니다.

이처럼 제 분석 데이터에서는 rate에서 <null>로 표시된 결측치들을 확인할 수 있습니다.


이렇게 일일이 찾는게 최선의 방법일까요?

그렇다면 결측치가 어느 column에서 발생했고 또 그것의 갯수는 얼마인지 일일이 세야 할까요?

답은 당연히 아닙니다.

Brightics Studio의 <Profile Table> 함수를 이용한다면 이를 한 눈에 확인할 수 있습니다.

이렇게 Load 한 데이터를 Profile Table로 연결합니다.

코린이인 제가 Brighitcs에서 꽤나 좋아하는 함수 중 하나인데요.

함수를 실행시키고 나면

Overview로 데이터의 전반적인 분포를 확인할 수 있습니다.

하이라이트 친 부분처럼 데이터 전체의 Total Missing을 먼저 확인할 수 있습니다.

제 데이터에서는 0.9%의 결측치가 발생했네요.

Warnings에서 확인해보면

rate has 104/6.4% missing values

라는 문장을 볼 수 있습니다.

이는 데이터 중 rate 열에서 6.4%의 결측치가 발생했으니

이를 처리하라는 뜻인데요.

이렇게 세심한 배려까지,,, 너무 좋지 않나요?ㅎㅎㅎ

이처럼 데이터의 전반적인 overview와 더불어

column마다의 분석 결과도 보여줍니다.


 

이처럼 열 하나하나의 통계량을 알 수 있습니다.

예를 들어 code라는 column을 보면

Distinct count로 얼마나 많은 category를 가지고 있는지

그리고 오른쪽의 막대 그래프에서 카테고리별 빈도 수를 간략하게 보여줍니다.

rate 열에 대해 자세하게 살펴보겠습니다.

Missing rate = 6.4%

Missing number = 104

임을 확인할 수 있고

아래 Toggle details에서 Common Values를 누르면

Value 별 카운트 수까지 확인할 수 있어

해당 column의 전반적인 분포를 알 수 있는

아주 좋은 함수입니다.


이렇게 결측치가 발생했다는 것을 확인했다면

이후에는 어떤 식으로 전개해야 할까요?

그 전에 결측치의 정의와 종류부터 간단하게 정리하고자 합니다.

2. 결측치의 종류와 처리 방식

먼저, 결측치의 종류에는 뭐가 있을까요?

아주아주 유명하신 Little & Rubin이 발표한 1987년 논문에 의하면

결측치에는 3가지 타입이 존재합니다.

1. MCAR : Missing Completely At Random

2. MAR : Missing At Random

3. NMAR : Not Missing At Random

이렇게 세 가지로 분류했습니다.

이 세 가지 결측치 타입에 대해 구체적으로

표로 정리했습니다.

MCAR MAR NMAR
한국말로는? 완전 무작위 결측 무작위 결측 비무작위 결측
빈도
특징 데이터를 입력한 이가 실수했거나, 전상상의 에러 다른 특성 값에 따라 결측치 발생확률이 계산되고, 값 자체의 상관성은 없는 경우 결측치가 일어난 특성(X2)와 다른 특성(X1) 사이에 상관관계가 있는 경우
예시
(성별(X)를 사용해 체중(Y)를 예측하는 모델 구축)
단순히 체중을 응답하지 않은 경우 -> y의 누락이 다른 X,Y값들과 관련이 없음 특정 성별(X)의 경우 체중을 공개하는 것을 꺼림 -> Y의 누락이 성별과 관련 있음 체중이 무겁거나 가벼운 경우 자신의 체중을 공개하는 것을 꺼림 -> Y의 누락이 Y자체에 영향받음

(출처: https://junklee.tistory.com/4)

통상적으로 결측치는 MCAR, MAR, NMAR 이렇게 세 가지의 Type으로 분류됩니다.


그렇다면 이러한 결측치를 처리하는 방식에는 어떠한 것들이 있을까요?

크게 Deletion과 Imputation 총 두 가지의 방식을 가장 보편적으로 사용합니다.

1. Deletion : 결측치 제거

2. Imputation : 결측치 대치

Deletion은 말그대로 결측치를 제거하는 방식을 말합니다.

이 과정은 보통 다량의 데이터를 보유하고 있을 때 사용되며, 결측률이 5% 미만일 때 삭제 가능하다고 알려져있습니다.

Imputation은 결측치를 추정값(estimation)으로 대치하는 방식을 말합니다.

추정 방식에 기반하여 여러 가지 방식(mean subsitution, LOCF, regression 등)이 존재합니다.


출처 : https://www.kaggle.com/parulpandey/a-guide-to-handling-missing-values-in-python

 

A Guide to Handling Missing values in Python

Explore and run machine learning code with Kaggle Notebooks | Using data from Air Quality Data in India (2015 - 2020)

www.kaggle.com

Kaggle에 이에 대해 보기 쉽게 정리한 그림이 있길래 가져왔습니다.

보시다시피 Deletion과 Imputation 내부에도 다양한 방식들이 존재합니다.


3. Brightics Studio 결측치 처리

이렇게 결측치가 있다는 것을 먼저 확인했고

결측치에 대한 Type과 분석 방법을 알게 되었다면

드디어!!

Brightics Studio로 결측치를 처리하는 과정이 남았습니다.


Brightics Studio에서 결측치를 처리하는 함수는 크게 3가지로 나뉩니다.

Replace Missing Number, Replace Missing String, Delete Missing Data 이렇게 3가지의 방식이 있는데요.

앞의 두 가지 방법은 Impuation,

마지막 방법은 Deletion 입니다.


(1) Replace Missing Number

먼저, Replace Missing Number은 말 그대로 숫자를 대치하는 것을 의미합니다.

Input Columns에서 대치하고 싶은 열을 고른 후

Fill Value에서 대치 방법을 택합니다.

To -> 원하는 값으로 대치

Mean -> 평균값

Median -> 중앙값

Min -> 최소값

Max-> 최대값

제 데이터에서는 Rate에서 결측치가 발생했습니다.

이는 이전 포스팅에서 2021년 데이터를 추가하면서

제가 Rate를 채워넣지 않았기에 발생한 것인데요.

Rate 변수를 나중에 분석에 사용하지 않을 것 같아서 이를 채우지 않았었습니다.

따라서 어느 값으로 대치하던 상관이 없기 때문에

To -> 0 으로 대치해보겠습니다.

보시다시피 null -> 0으로 대치된 것을 볼 수 있습니다.

그렇다면 mean으로도 대치해볼까요?

mean인 12.05로 통일되어 대치되는 것을 볼 수 있습니다.


(2) Replace Missing String

다음, Replace Missing String에서는 비어있는 문자열을 대치하는 방식입니다.

이 함수에서는 industry_detailed와 같은 문자열로 구성된 column을 대치하는 함수입니다.

Fill Holes with에서 어떠한 문자열을 집어 넣을 것인지 정하고

Consider Empty Stiring as Null 에서 비어있는 문자열을 Null로 가정할지 고르는 부분입니다.


문자열 결측치 과정에서 저희 멘토님께서 "꿀팁"을 제공해주셨는데요.

바로 Empty Cell을 처리하는 방법입니다.

즉, 문자열 중 "", " ", space와 같이 입력된 경우, 이를 어떻게 제거해야 하는 것인가인데요.

데이터 분석을 하다보면 이러한 상황이 분명히 발생할 때가 올 것이고

이를 위해 방법을 터득해놓는다면 추후에 도움이 많이 될 것 같습니다.

저희 멘토님께서는 3가지 방법을 추천해주셨습니다.

1. Filter 함수 사용 : 조건에 ' '로 하고 등식을 !=로 두기

2. Query 함수 사용 : Where Length(Trim(A))>0 으로 두면 Space 셀 제거 가능(이 방법이 가장 통용되는 방법이라고 합니다)

3. Replace String Variable : Empty 셀을 Target으로 두고 임의의 값(ex)홍길동)으로 변경 후 , Filter로 제거하기

이렇게 3가지 방법을 알려주셨습니다.

3가지 방법 다 어렵지 않게 사용할 수 있기 때문에!!

미리 알아두신다면 나중에 언젠간 쓰이겠죠?!

(멘토님 항상 좋은 분석 정보 알려주셔서 감사합니다 꾸벅 (_ _))


(3) Delete Missing Data

마지막으로 Delete Missing Data 함수입니다.

말 그대로 결측치가 발생한 열 또는 행을 삭제하는 함수인데요.

위에서 볼 수 있듯이 Delete Row를 선택하고 함수를 실행하면

null이 포함된 row들이 삭제된 것을 볼 수 있습니다.


이렇게 해서

결측치의 발생 여부부터 시작하여 결측치의 type, 분석 기법, 마지막으로 Brightics 내 결측치 처리까지

자세하게 다뤄보았습니다.

결측치라는 것이 데이터에 있어서는 치명적인 결과를 낳을 수 있고

또, 아주 빈번하게 생성되는 데이터이기에 전처리 과정에서 필수적으로 확인해야 합니다.

Brightics Studio를 활용한다면

이러한 결측치를 확인하는 것도 굉장히 간단하고

또 처리하는 프로세스도 잘 확립되어 있기 때문에

전처리하기 아주 용이한 플랫폼이라고 생각합니다.

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


* Brightics 서포터즈 활동의 일환으로 작성된 포스팅입니다.

#삼성SDS #브라이틱스 #브라이틱스서포터즈 #AI #분석플랫폼 #분석프로그램 #데이터분석 #빅데이터 #인공지능 #SamsungSDS #초보자분석 #분석초보 #코딩 #코딩초보 #통계 #데이터사이언스 #Python #R #SQL #Scala #분석툴 #BrighticsAI #BrighticsStudio #브라이틱스스튜디오 #Brightics #대외활동 #대학생 #대학생대외활동 #삼성SDSBrightics #모델링