본문 바로가기
Python/Python DataAnalysis

[Python Data Analysis] 11. 데이터 분석 절차

by Rosmary 2021. 12. 12.
728x90
반응형

 

 

 

 

지금까지의 Python Data Analysis 포스팅에서는 필자가 분석용 데이터를 pandas 패키지의 DataFrame이나 Series로 변환하고, 변환된 데이터를 편집, 삭제, 추가, 변형하는 기본적인 과정에 대해서 살펴보았다. 이번 포스팅에서는 날 것의 데이터를 분석하는 절차에 대해 이론적인 정리를 할까 한다. 

 

데이터 분석은 크게 지도학습과 비지도학습으로 나뉜다. 지도학습의 경우 측정하려는 결과와, 결과에 영향을 주는 요인을 분석 모델에 적용하여 학습하고, 학습한 결과를 바탕으로 특정 요인값에 대해 결과를 예측하게 된다. 비지도학습은 지도학습과 달리 학습 데이터가 별도로 없다. 이번 포스팅에서는 지도학습에 대해서 먼저 정리를 하려 한다.

 

Python은 scikit-learn이라는 패키지를 통해, 데이터 전처리, 모델 선정 및 평가까지 분석에 필요한 모든 절차를 진행할 수 있다. 학습/분석 모델의 종류가 다양하긴 하지만, 이들의 사용 방법 자체는 세세한 부분을 제외하면 모두 동일하기 때문에, 본격적인 데이터 분석 진행에 앞서, 데이터 분석의 절차에 대해 이론적으로 정리해야 할 필요성이 있다.

 

데이터 분석 절차는 크게 4가지 부분으로 나뉜다.

1. 데이터의 전처리

2. 학습/검증/테스트 데이터 분류

3. 학습 모델 선정

4. 모델의 튜닝 및 평가

 

 

 

I. 데이터의 전처리

 

데이터의 전처리는 데이터 비교를 위해 원본 데이터에 수정을 가하는 작업이다. 크게 두 가지로 나뉘는데, 하나는 결측치의 처리, 다른 하나는 원본 데이터의 정규화다.

 

1. 결측치의 처리

 

결측치의 처리는 어렵지 않다. 측정/수집한 데이터에 결측치(Missing Value)가 존재하는 경우, 해당 결측치가 포함된 자료는 삭제하거나, 다른 데이터(평균값, 중간값 등)로 대체하면 된다.

 

2. 데이터의 정규화

 

조금 단순하면서도 극단적인 예시를 들어, 동남아 국가인 태국과, 북유럽 국가인 노르웨이 사람들의 생활 수준에 따른 신장을 추정하는 분석 모델을 만든다고 가정해보자.

 

 

 

 

위의 자료는 필자가 대략적으로 만든 데이터다. 이 데이터를 보면 알겠지만, 신장을 나타내는 단위는 cm로 같지만, 개개인의 소득은 각자의 화폐를 이용하기 때문에 단위나 범위가 다르다. 따라서, 이렇게 서로 다른 데이터를 동일한 범위나 단위로 맞춰주는 작업이 필요하다.

 

g, kg과 같이 동일한 물리 단위를 측정하는 것이라면 단순히 단위만 맞춰주더라도 데이터 학습과 예측에 큰 문제가 없다. 하지만 위의 예시처럼 화폐단위를 사용하는 경우, 각 국가의 화폐단위를 달러나 유로로 변환한다고 하더라도, 각 국가의 물가 상황을 반영하지 않았기 때문에 비교가 불가능하다(위의 예시에서는 태국은 70만원 소득을 가진자가 171cm이고, 노르웨이는 300만원의 소득을 올리는 자가 178cm다. 당연히 직접적인 비교가 불가능하다). 그렇기 때문에 단위를 통일시키더라도 비교가 불가능한 데이터의 경우 정규화라는 과정을 거쳐, 측정/수집한 데이터의 범위를 동일하게 맞춰주는 작업을 진행해야 한다.

 

데이터를 정규화하는 방법은 여러가지다. 가장 많이 사용하는 방법은 최소최대척도(Min-Max Scale)이라 불리는 방법인데, 이는 각 데이터의 범위를 0~1 사이로 변환한다. 

 

그 외에 데이터가 정규분포를 따르도록 만들어주는 표준 정규화(Normalization)도 주로 사용한다.

 

 

 

II. 학습/검증/테스트 데이터 분류

 

이렇게 원본 데이터를 분석할 수 있는 데이터로 변환했다면, 데이터 내 상관관계 확인 및 상관관계에 따른 학습을 진행해야 한다. 위에서 예시로 들었던 소득과 신장을 다시 상기하자면, 소득과 신장이 양의 상관관계를 가지긴 하지만 어느정도의 상관관계를 가지는지, 수집한 데이터로 측정을 하는 과정을 거쳐야 한다. 

 

위에서 필자가 언급했던 데이터는 특정 방법으로 수집한 데이터로, 그리고 소득이 신장에 영향을 준다는 가정하에 살펴보자. 필자가 수집한 데이터를 보면, 결과(Y, 신장)에 영향을 미치는 특성치(X)로 소득이 있고, 소득에 따른 결과(Y)인 신장 역시 데이터에 표시되어 있다. 따라서 이 데이터들을 사용하여 특성치(X)와 결과(Y)의 상관관계를 학습하면 된다. 

 

데이터를 특정 모델로 학습하고나면 이 데이터가 제대로 학습된 것인지 검증하는 과정이 필요하다. 검증을 위해 검증할 데이터 역시 별도의 특성치와 결과가 표시된 데이터가 필요하다. 그런데 이를 위해 별도로 데이터를 수집하는 과정을 거치기에는 번거로운 점이 한 두 가지가 아니다 보니, 보통 수집한 데이터 일부를 검증용 데이터로 나누어 작업을 진행한다. 즉, 학습용 데이터 중 20~30% 정도를 검증용 데이터로 별도로 사용한다는 것이다.

 

테스트 데이터의 경우, 학습/검증 데이터와 달리 특성치만 존재한다. 테스트 데이터는 학습, 검증용 데이터를 통해 학습한 특성치/결과의 상관관계를 적용하여, 테스트 데이터 특성치의 결과를 예측하는데 사용한다.

 

 

III. 학습 모델 선정

 

데이터 전처리와 분류까지 완료되면, 학습, 검증에 사용할 모델 및 테스트 데이터를 적용할 모델을 정해야 한다. 사용할 학습 모델은 데이터 결과의 종류에 따라 달라지게 된다. 예를 들어 로지스틱 회귀모델의 경우 결과 척도가 분류 척도인 경우에만 사용할 수 있다. 각 모델의 학습 및 테스트 정확도는 동일한 데이터를 사용하더라도 다르게 나오게 된다.

 

모델을 선정하고 나면 학습 데이터로 학습을, 검증 데이터로 실제 데이터의 예측 결과가 잘 나오는지 검증을 하게 되며, 학습데이터 정확도와 검증 데이터 정확도가 엇비슷하게 나타나는 경우, 해당 모델을 테스트 데이터에 적용하여 테스트 데이터 특성치에 대한 결과를 예측하더라도 어느정도 정확한 데이터를 얻을 수 있게 된다.

 

IV. 모델 튜닝 및 평가

 

테스트 데이터에 대해 모델 적용 결과가 나타났다고 끝이 아니다. 각 모델은 하이퍼파라미터(초매개변수)라고 불리는, 모델을 튜닝할 수 있는 고유 값들을 가지고 있는데, 선정한 모델 중 가장 최적의 결과를 나타내는 하이퍼파라미터 값을 찾아 모델에 다시 적용하고 학습해주어야 한다. 

 

하이퍼파라미터를 찾을 때 사용하는 방법은 크게 두 가지가 있다. 하나는 Grid 탐색이라 불리며, 하이퍼파라미터 값들을 사용자가 몇 개 선정하여 그 중 최적의 결과를 내는 값을 찾는 방법이다. 다른 하나는 무작위탐색이며 하이퍼파라미터 값의 특정 범위를 지정해주면, 지정한 범위 내에서 모델의 성능치가 최대가 되는 하이퍼파라미터 값을 찾아준다. 

 

 


 

다음 포스팅에서는, Scikit Learn 패키지를 사용하여 데이터 전처리를 진행하는 방법에 대해 알아보려 한다.

 

 

Fin.

반응형

댓글