관리 메뉴

TEAM EDA

[Machine Learning Advanced] 2강. 머신러닝 강의 - 데이터 전처리 (1) 데이터의 종류 및 변수 본문

EDA Study/Machine Learning Advanced

[Machine Learning Advanced] 2강. 머신러닝 강의 - 데이터 전처리 (1) 데이터의 종류 및 변수

김현우 2023. 10. 1. 09:01

이전 강의인 [Machine Learning Advanced] 1강. 머신러닝 강의 - 강의 개요에서는 머신러닝의 전체 프로세스를 살펴보면서 어떤 과정을 통해서 머신러닝을 적용하는지, 프로세스의 어떤 부분들을 강의에서 다루게 될지에 대해 살펴봤습니다. 이번 강의에서는 데이터의 전처리에 대해 살펴보겠습니다. 2강의 경우는 총 4개의 글로 구성되었으며 (데이터의 정의와 구성요소 / 결측치의 처리 / 이상치의 처리 / 범주형 변수의 처리) EDA 과정에 대해서는 따로 배우지는 않을 예정입니다. 만일 EDA에 관심이 있으신 분은 저의 예전 글을 참고하시기 바랍니다. 

 

머신러닝 프로세스

Tabular 데이터는 무엇일까요? 

Tabular 데이터 예시

데이터(Data)는 정보를 나타내는 숫자, 문자 또는 기호의 집합입니다. 데이터는 현실 세계에서 수집되거나 생성되며, 그 자체로는 의미가 없을 수 있지만 분석, 이해 및 활용을 위해 처리되고 구조화됩니다. 데이터는 다양한 형식과 유형을 가질 수 있으며, 예를 들면 텍스트, 숫자, 이미지, 오디오, 비디오 등이 있습니다.

 

그 중 강의에서 다룰 Tabular 데이터는 표의 형식을 가진 행(Row)과 열(Column)으로 표현 가능한 데이터이며 보라색의(시가, 종가, 종목)을 열(Column), 파란색의 부분을 행(Row)으로 나타냅니다. 이것은 표나 스프레드시트와 유사한 형태를 가지며, 각 행은 데이터 레코드(개체 또는 사건)를 나타내고, 각 열은 다른 속성(특성 또는 변수)을 나타냅니다. Tabular 데이터는 일반적으로 정형 데이터 형식으로 알려져 있으며, 데이터베이스, CSV(Comma-Separated Values) 파일, 스프레드시트, 엑셀 파일, SQL 테이블 등에서 찾을 수 있습니다.

 

Row = 레코드, 데이터 포인트, 인스턴스, 관측치, 사례 등 

Column = 열, 속성, 필드, 피처, 변수 등 

 

참고로, Row, Column은 다양한 이름으로도 불리는데 이번 강의에서는 Row는 자주 사용되는 용어인 로우 혹은 인스턴스로 Column은 컬럼, 변수, 피처 등으로 부르도록 하겠습니다. 보통 이런 데이터와 반대되는 데이터로 비정형 데이터라는 용어도 있습니다. 이는, 이미지, 동영상, 문자 등과 같이 정형적인 형태가 아닌 데이터들을 모두 지칭한다고 보면 될 것 같습니다. 

 

이러한 Tabular 데이터 셋의 변수는 속성에 따라서 다양한 형태로 나뉠 수 있습니다.

 

출처 : https://medium.com/@anicomanesh/categorical-encoding-methods-an-overview-ce90eec3cf86

 

 

간단히 말해, 수치형 변수(Numeric Variable (Quantitative))는 숫자로 이루어진 값들을 가지며, 범주형 변수(Categorical Variable (Qualitative))는 카테고리나 범주로 이루어진 값을 가집니다. 이들을 구분하는 방법은 아래와 같습니다.

 

1. 연속형 변수와 이산형 변수 구분 방법: 연속형 변수와 이산형 변수는 값을 어떤 방식으로 측정하고 표현하느냐에 따라 구분됩니다. 

 

연속형 변수 (Continuous Variables): 연속형 변수는 무한한 범위 내에서 어떠한 값을 가질 수 있습니다. 이 변수의 값 사이에는 끊임없이 다양한 값들이 존재하며, 정확한 측정이 필요합니다. 예를 들어, 시간, 길이, 무게 등이 연속형 변수의 예입니다. 연속형 변수의 값은 소수점까지 나타날 수 있습니다. 

 

이산형 변수 (Discrete Variables): 이산형 변수는 정수값이나 특정한 값들 중에서만 값을 가질 수 있습니다. 이 변수의 값 사이에는 간격이 존재하며 불연속적인 값들로 이루어져 있습니다. 예를 들어, 가족 구성원 수, 주문량, 동전 던지기에서 나오는 앞면/뒷면 등이 이산형 변수의 예입니다. 

 

2. 명목형 변수와 순위형 변수 구분 방법: 명목형 변수와 순위형 변수는 변수가 나타내는 정보의 성격과 순서 여부에 따라 구분됩니다. 

 

명목형 변수 (Nominal Variables): 명목형 변수는 카테고리를 표현하는 변수로, 서로 다른 그룹을 나타냅니다. 이러한 변수는 순서나 크기를 나타내지 않으며, 각 카테고리 간에는 동등한 관계가 없습니다. 예를 들어, 성별, 혈액형, 지역 등이 명목형 변수의 예입니다. 순위형 변수 (Ordinal Variables): 순위형 변수는 카테고리 간의 상대적인 순서나 등급을 나타내는 변수입니다. 간격이나 비율은 정확하게 나타내지 않지만, 어떤 값이 더 크거나 작은지를 나타냅니다. 예를 들어, 만족도 조사에서 "매우 만족", "만족", "보통", "불만족", "매우 불만족"과 같은 순위 형태의 응답이 순위형 변수의 예입니다.

 

다른 예시를 통해서 한번, 각 속성이 어떻게 분류되는지 살펴보겠습니다.

 

예시를 봤을때, 먼저 숫자로 표현되는지 아닌지가 눈에 들어올 것입니다. 성별이나, 소득분위의 경우는 원칙적으로 숫자로 표시할 수 없는 값 (Categorical Variable)이고 키나 자식 수의 경우는 숫자(Numeric Variable)로 표시할 수 있습니다. 이때, 소득분위의 경우 "분위"를 제외하고 10, 8, .., 5으로 숫자만 봐도 사실 해석하는데 무리가 없습니다. 소득 분위 10 > 9 > 8 ... > 1 인 것 처럼 순서 (순위)의 개념이 존재하고 이를 Ordinal Data라고 부릅니다. 반면, 성별의 경우는 바로 숫자화할 수 없고 컴퓨터가 인식하기 어렵습니다. 이를 Nominal Data라고 표현합니다. 그와 달리, 키와 자식 수의 경우는 숫자로 바로 표현이 가능하고 컴퓨터가 인식할 수 있습니다. 대신 연속적인 값을 가지냐 아니냐의 형태로 연속적이면 Continuous, 그렇지 않으면 Discrete 정도로만 나뉘는거로 이해하고 넘어가면 될 것 같습니다. 

 

먼저, 데이터의 전처리는 왜 해야하는 것일까요? 

그렇다면 이러한 데이터를 왜 미리 처리를 해줘야 하는 걸까요? 의문이 생길 수 있습니다. 

 

Garbage In, Garbage Out

 

Garbage In, Garbage Out 이라는 표현을 들어보셨나요? 쓰레기가 들어오면 쓰레기가 나온다는 속담으로 머신러닝 분야에서는 아무리 모델이 좋아도 데이터라는 입력이 별로면 결과물은 별로라는 의미입니다. 그만큼 데이터의 중요성에 대해서 언급하는 표현인데, 왜 그럼 데이터가 좋아야할까요? 제가 생각했을때는 성능적인 요인과 분석적인 요인이 큰 것 같습니다. 

 

1. 성능적인 요인 

 

[왼쪽] 이상치 있는 경우 [오른쪽] 이상치 없는 경우에 대한 선형회귀모델 결과

 

과적합 방지: 노이즈나 이상치가 포함된 데이터로 학습하면 모델은 불필요한 패턴까지 잘 맞추도록 노력하는 과적합(Overfitting)의 문제가 발생할 수 있습니다. 그러나 불필요한 부분을 제거하면, 모델이 알맞는 혹은 필요한 패턴만 학습하게 됩니다. 그렇기에, 이러한 부분을 제거하면 편향이 제거되며, 이를 통해 신뢰성 높은 모델을 제작할 수 있습니다. 

 

일반화 성능 향상: 모델 입장에서 데이터를 해석하기도 용이해져서 일반화 성능이 오를 수 있습니다. 예를들어, 결측치를 생각해보면 모델의 입장에서 데이터의 결측치 (NA)와 값은 전혀 다른 값입니다. 하지만, 실제로는 결측치는 특정 값을 가진 경우가 많고 관측되지 못하였기에 없는 경우가 많습니다. 이런 결측치를 대체함으로써 모델은 실제 데이터의 패턴을 잘 학습해 성능 향상을 만들 수 있습니다. 

 

2. 분석적인 요인 

 

 

분석의 정확한 결론 및 해석 대표적으로 상관관계 같은 경우, 데이터에 이상치나 안좋은 값이 있으면 모델의 결과가 잘못 나오는 경우가 있습니다. 이러면, 해당 결과를 해석하는 입장에서도 잘못된 결론을 내릴 수 있기에 결과의 분석을 위해서도 전처리가 필수적입니다. 

 

 

마찬가지로, 위와 같이 시각적인 측면에서 이상치의 유무에 따라 해석하는게 달라지기도 하기에 전처리가 필요합니다. 

 

 

출처 : https://www.forbes.com/sites/gilpress/2016/03/23/data-preparation-most-time-consuming-least-enjoyable-data-science-task-survey-says/?sh=72d36ed76f63

실제로, 2016년도 조사에 따르면 이러한 데이터 전처리나 구축하는 부분은 총 시간의 60%를 차지할만큼 많은 투자를 해야한다고 합니다. 제 경험상 데이터 결측치나 이상치 처리에는 그렇게 많은 시간을 쓰는 것 같지는 않지만, 데이터를 분석(EDA)하고 파생 변수를 만드는 과정에 상당한 시간이 쓰이는 것 같습니다.  

 

전처리를 해야할 대상은 무엇이 있을까요?

전처리는 이제 인스턴스차원에서 할 수도 있고, 변수차원에서 진행할 수도 있습니다.

 

인스턴스 차원에서는 불필요한 인스턴스를 삭제할 수도 있고, 클래스가 불균형인 경우 Upsampling, Downsampling 등의 기법으로 보충해줄 수도 있습니다. 

 

변수 차원에서는 수치형 혹은 범주형 변수에 따라서 접근법이 좀 달라지고, 아래의 방법들을 생각해볼 수 있습니다. 

 

1. 수치형 변수 (3강)

- 정규화 (Normalization) 

- 스케일링 (Min-Max, Log) 

 

2. 범주형 변수 (2강)

- 인코딩 (One-Hot, Label, Mean, Frequency)

- 임베딩 (Text : TF-IDF, Word2vec /  Vision : CNN)

 

3. 공통 전처리 (2강)

- 이상치 처리 (Z-score) 

- 결측치 처리 (제거, 대체) 

 

4. 그 외 

- 파생 변수 생성 (3강)

- 차원 축소 & 변수 선택 (4강)

 

다음 강의에서는 공통 전처리 과정 중 결측치의 처리에 대해 알아보도록 하겠습니다.