삼성SDS Brightics

[삼성SDS Brightics] 개인분석미션 3-6. 데이터 전처리 : 범주형 변수 처리(One Hot Encoder VS Label Encoder 숨막히는 혈투)

해붕 2021. 10. 5. 23:39
반응형

안녕하세요~~~!

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

저번 시간에 데이터 전처리 중 가장 기본이라고 할 수 있는

결측치 처리에 대해 진행했습니다.

결측치 처리를 통해 빈 데이터를 잘 메꿨다면 그 다음 스텝은 뭐가 될까요?

이상치 탐지, 범주형 변수 처리, 연속형 변수 처리, 분포에 맞는 column 생성 등 다양한 전처리 기법이 생각나는데요.

저는 그 중에서도 결측치 처리에 이어 데이터 분석의 필수 과정이라고 할 수 있는

"범주형 변수 처리" 에 대한 포스팅을 이어가려고 합니다.

분석 프로젝트에 있어 기본이 될 수 있는 과정들을 천천히 따라가는 것도

추후에 제 블로그를 보며 분석을 진행할 사람들에게 의의가 있을 것 같아서 진행해보려고 합니다.


1. 범주형 변수 파악

먼저, 범주형 변수란 무엇인지 개념부터 알 필요가 있어서 정리해보았습니다.

데이터의 type에 대해 크게 본다면 범주형이랑 수치형으로 나눌 수 있는데요.

이에 관한 정의부터 예시까지 알기 쉽게 정리했습니다.

  범주형 수치형
정의 몇 개의 범주로 나누어진 자료를 의미 이산형과 연속형으로 이루어진 자료를 의미
세부 Type 명목형, 순서형 이산형, 연속형
세부 Type 정의 명목형 : 성별, 혈액형 등 단순히 분류된 자료
순서형 : 순서를 가지는 자료, 간격 자체에 의미 X
이산형 : 이산적인 값을 데이터로 가짐
연속형 : 연속적인 값을 데이터로 가짐
세부 Type 예시 명목형 예시 : 성별, 혈액형
순서형 예시 : 학년, 만족도
이산형 : 버스에 타고 있는 사람 수
연속형 : 온도, 무게, 시간

위 표에서 볼 수 있듯이

범주형은 명목형과 순서형과 같은 Type을 통틀어 범주형이라고 일컫는데요.

성별과 혈액형처럼 서로 다른 이름으로 분류된 자료와

학년이나 만족도처럼 단순 순서를 가리는 자료 등을 범주형 데이터로 칭합니다.

반대로 버스에 타고 있는 사람 수처럼 이산적인 값을 데이터로 가질 때와

키나 몸무게처럼 연속된 데이터를 가지는 것을 통틀어 수치형 데이터로 칭합니다.

이제 범주형과 수치형이 조금 구분이 가시나요?

출처 : https://blog.naver.com/tjgml1343/221978045653

https://horae.tistory.com/entry/%EB%B2%94%EC%A3%BC%ED%98%95%EC%88%98%EC%B9%98%ED%98%95%EC%9D%B4%EC%83%81%ED%98%95%EC%97%B0%EC%86%8D%ED%98%95%EB%AA%85%EB%AA%A9%ED%98%95%EC%88%9C%EC%84%9C%ED%98%95-%EC%A0%95%EB%A6%AC

 

범주형,수치형,이상형,연속형,명목형,순서형 정리

출처: KQTI 오늘은 기본적인 데이터의 종류에 대해서 알아보도록 하겠습니다. 데이터의 종류를 알아보는 것은 데이터 수집시 어떤 유형으로 수집하는 것이 좋은지를 설정하는 것부터 분석이나

horae.tistory.com

 


이제 범주형 변수와 수치형 변수를 구분할 수 있게 되었습니다.

그렇다면 제 개인 프로젝트에는 어떠한 변수들이 존재할까요?

industry, code, industry_detailed, code_detailed 등 처리해야할 변수가 보입니다.

쉽게 설명하자면 프로그래머 입장에서는 그 중에서도 한국인 입장에서는 이 데이터에 대해 문제가 없어보입니다.

한국말로 써있으니 해석하기도 좋고 한 눈에 파악하기도 좋기 때문이죠.

그러나 해외 프로그래머가 본다면 과연 저 단어들을 이해할 수 있을까요?

더 나아가 PC 입장에서 저 단어들의 의미를 파악할 수 있을까요?

따라서 진행되어야 하는 것이 바로 "범주형 변수 처리"입니다.

이는 범주형으로 작성된 데이터를 일련의 숫자로 표현하여

텍스트 형태의 데이터를 분석 가능한 형태로 변환하여 줍니다.

그렇다면 Brightics에서 범주형 변수 처리에는

어떠한 함수들이 있을까요?

바로 확인해보겠습니다!


2. Brightics Studio 내 범주형 변수 처리

Brightics Studio 내에서 범주형 변수를 처리하는 방법에는 어떠한 것이 있을까요?

바로

Label Encoder와 One Hot Encoder가 있습니다.

둘의 차이를 쉽게 생각하면

Label Encoder은 변수가 다양하더라도 일련의 숫자로 표현하여 하나의 Column 내에서 처리하는 반면

One Hot Encoder은 변수가 다양하면 그 변수에 대한 Column을 일일이 생성한다는 차이가 있습니다.

즉, 예를 들어 동작구, 관악구, 강남구 이렇게 세 가지의 범주형 변수를 처리한다고 하면

Label Encoder은 동작구(0), 관악구(1), 강남구(2)로 분류하는 반면

One Hot Encoder은 위치_1(동작구), 위치_2(관악구), 위치_3(강남구)로 분류하여 이에 해당한다면 1, 해당하지 않는다면 0으로 Column을 채웁니다.

그렇다면 어떠한 상황일 때 Label Encoder을 사용하고, 어떤 상황일 떄 One Hot Encoder을 사용해야하는 것일까요?

이에 대한 명확한 해답을 저희 멘토님께서 제시해주셨습니다.

이렇게 알고리즘을 무엇을 사용할 것인지에 따라

One Hot Encoder/Label Encoder 중 어떠한 기법을 사용할 지 선택하게 됩니다.

데이터 전처리 과정에서 추후에 어떠한 모델을 선택할 지에 대해

어느 정도의 구상을 마친 후에 범주형 변수를 처리해야

2번 작업해야하는 수고를 덜 수 있겠죠?!

직접 Brightics에서 이 기법들을 적용해보면서

어떻게 변수가 변화되어 나타나는지 직접 확인하겠습니다.


먼저 Label Encoder를 실행한 화면부터 보여드리겠습니다.

 

industry, code, industry_detailed, code_detailed 이렇게 4가지 범주형 변수를 Label Encoder로 실행한 결과

각 column에 맞는 index 열이 생기고, 그에 맞는 일련의 숫자로 변수가 생긴 것을 확인할 수 있습니다.

구체적으로 설명해드리자면

이렇게 industry 중 경영/사무에 대한 변수를 처리하자, industry_index로 2로 생성된 것을 볼 수 있고

IT/인터넷에 대한 변수 처리 시, 0이 생성된 것을 볼 수 있습니다.

그렇다면 One Hot Encoder를 수행 시 어떻게 나타날까요?


 

Label Encoder와 동일하게 industry, code, industry_detailed, code_detailed 4가지 변수에 대해 One Hot Encoder을 수행했습니다.

자세하게 본다면 위의 Label Encoder와 다르게 각각의 변수에 대한 Column이 industry_0, 1.... 이 생긴 것을 볼 수 있습니다.

위에서 IT/인터넷 industry가 Label 0을 차지한 것 처럼

One Hot Encoder에서도 industry_0에서 IT/인터넷 계열의 산업이 1의 값을 차지하고 있는 것을 볼 수 있습니다.

위의 두 가지 예시에서 볼 수 있듯이 두 기법의 차이는 명확합니다.

멘토님께서 알려주신 이 기법들의 차이점 중 가장 극명한 것은 바로 "차원의 저주"에 있습니다.

아무래도 One Hot Encoder를 수행하면, 각 변수에 대한 Column이 무분별하게 생성되기 때문에

이에 대한 차원의 저주를 무시할 수 없습니다.


이렇게 해서 데이터 전처리의 2번째 단계인

"범주형 변수 처리"에 대해 알아보았습니다.

쉽게 생각하면

데이터 분석에서 쉽게 분석하기 위해서는 범주형 변수를 처리해야 하고

Brightics 내에서는 One Hot Encoder와 Label Encoder로 처리할 수 있는데,

둘의 차이는 한 Column내에서 연속된 숫자로 표현하냐, Column을 여러 개 생성하냐로 구분지을 수 있다

로 짧게 요약할 수 있을 것 같습니다.

Brightics를 활용한 데이터 분석 시 제 포스팅이 조금이라도 도움이 된다면

더할나위없이 기쁠 것 같습니다 :)


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

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