머신러닝 프로젝트 진행 과정(Workflow)
이번 글에서는 머신러닝 프로젝트 진행 과정(Workflow)에 대해 알아봅니다.
하고자 하는 프로젝트에 따라 진행과정은 조금씩 다르지만,
일반적인 예측 모델링 프로젝트(predictive modeling)는 다음과 같은 프로세스를 따릅니다.
1. 데이터 수집(Data Collection)
공개(public) 데이터셋은 수집과 전처리가 되어있지만,
커스텀(custom) 데이터셋은 수집과 전처리 작업을 직접 해야 합니다.
공개(public) 데이터셋을 얻을 수 있는 사이트는 다음과 같습니다.
- 캐글 데이터셋(https://www.kaggle.com/datasets)
- 구글 데이터셋 서치(https://toolbox.google.com/datasetsearch)
- 비주얼 데이터셋(VisualData)
* 공개 데이터셋: MNIST, Fashion-MNIST, Titanic,
CIFAR-10, MS COCO, ImageNet, KITTI, VisualQA, Youtube-8M, CelebFaces
2. 데이터 전처리(Data Preprocessing)
초기 데이터인 Raw Data는 지저분하고 있는 그대로 사용하기 어렵습니다.
빠진 부분(결측치), 중복된 값, 이상한 값들이 있기 때문이죠.
이렇게 지저분한 raw data를 정제(cleansing)해서 머신러닝 모델의 입력에 적합한 형태로 바꿔 주는 단계를 데이터 정제(Data Cleaning)라고 합니다. Python에서는 DataFrame’s head() method와 The info() method를 통해 이를 확인할 수 있습니다. (결측 값은 isnull().sum()을 사용할 수 있습니다.)
그 다음에 할 작업은 예측하고자 하는 목표(label) 값에 영향을 주는 핵심 변수를 정하는 피쳐 엔지니어링(Feature Engineering)입니다. 예를 들어, 집의 가격을 예측하고자 할 때 변수에 집의 가로, 세로 길이보다 면적이 더 중요할 것이므로 가로와 세로 변수로 계산한 면적이라는 새로운 피쳐를 만들어줍니다.
글로 읽었을 때는 간단해보이지만 현실은 간단하지 않습니다. 프로젝트의 진행 과정 중 약 80%를 차지한다고 해도 과언이 아닙니다.
3. 탐색적 데이터 분석 (EDA: Exploratory Data Analysis)
머신러닝 프로젝트의 핵심이라고 할 수 있는 탐색적 데이터 분석(EDA)입니다. 데이터 프로젝트의 성공 여부는 얼마나 데이터를 이해하고 있느냐에 좌우됩니다. 데이터를 이해하기 위해 데이터의 특징을 찾고, 숨겨진 패턴을 발견하는 과정을 EDA라고 부릅니다.
이 과정은 분석하는 사람의 도메인 지식에 따라서 변수만 보고 직관적으로 정할 수 있고(특징 생성(Feature Generation) or 특징 구축(Feature Construction)이 있습니다.) 관련 도메인 지식이 없다면 특징 선택(Feature Selection)과 차원 감소(Dimension Reduction) 와 같은 피쳐 엔지니어링 방법을 따릅니다. 특징 선택에서는 분류 모델은 Decision Tree, 회귀 모델의 경우 forward selection과 backward elimination과 같은 알고리즘을 사용합니다. 차원감소의 대표적인 알고리즘은 PCA(Principle Component Analysis)가 있습니다. 각 변수(Feature)를 하나의 축으로 투영시켰을 때 분산이 가장 큰 축을 첫번째 주성분으로 선택한 다음 큰 축을 두번째 주성분으로 선택해 데이터를 선형 변환하여 다차원을 축소하는 관측 데이터를 잘 설명할 수 있는 잠재 공간(latent space)을 찾는 것입니다. 이 알고리즘에 대한 자세한 설명은 나중에 더 다루기로 합니다.
주성분 분석 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 중심점의 좌표가(1,3)이고, (0.878, 0.478)방향으로 3, 이와 수직한 방향으로 1의 표준편차를 가지는 다변수 정규분포에 대한 주성분 분석. 화살표의 길이는 공분산행렬 고윳값의 제곱근에 해당하며, 고유 벡터의 끝점이 평균점에 위치한 채로 각 주성분의 방향을 나타내고 있다. 통계학에서 주성분 분석(主成分分析, Principal component analysis; PCA)은 고차원의 데이터를 저차원의 데이터로 환원
ko.wikipedia.org
4. 모델 선택(Model Selection)
말 그대로 예측값을 계산하는 알고리즘을 선택하는 과정입니다(e.g., Logistic Regression, K-NN, SVM, Deep Learning).
이 과정에서 모델이 사용할 속성들(features)을 선택하기도 합니다. EDA 과정에서 핵심 피쳐들을 선정했는데 왜 다시 선택하느냐는 의문이 들 수 있습니다. 하지만 모델 선택 과정 역시 데이터 탐색과 밀접한 관계가 있습니다. 데이터를 이해하고 나서 데이터에 적합한 모델을 선택할 수 있고, 원하는 만큼 모델의 정확도가 나오지 않을 경우 그 이유를 찾기 위해 데이터 탐색 과정으로 돌아올 수도 있습니다.
같은 모델이더라도 초모수(Hyperparameter)에 따라서 성능이 천차만별이므로, 초모수를 잘 선택하는 것이 중요합니다. 모델을 Fine-Tune하기 위한 방법으로는 Grid Search, Randomized Search, Ensemble Methods 등이 있습니다.
5. 평가 및 적용(Evaluation & Application)
머신러닝 프로젝트에서 가장 중요하지만 가장 실수가 자주 일어나는 과정입니다. 모델 평가에서 반드시 지켜야 하는 점은 테스트 데이터셋은 모델 선택과 모델 학습 과정에서 쓰이지 않아야 한다는 점입니다. (이 과정의 하나인 Cross-Validation score에 대해서는 나중에 좀 더 다루기로 하죠.) train dataset과 test dataset을 따로 쓰는 이유는 평가 과정의 목적이 모델이 새로운 데이터에 대해 얼마나 일반화(generalization) 가능한지를 측정해야 하기 때문입니다.