Intro to machine learning - (15) Tying it all together
강의는 지난번 Evaluation Metrics에서 사실상 끝났고, 이번에는 Wrap-up 느낌의 챕터입니다.
강의에서 배웠던 Task 프로세스를 보면, 데이터나 연구 호기심으로부터 정보를 Feature의 형태로 가져옵니다. 가지고 있는 데이터를 알고리즘에 넣고 훈련시킨 뒤, 결과 혹은 성능을 평가하는 과정을 거칩니다. 필요에 따라 변수 생성, 모델 훈련 단계로 다시 돌아와서 필요하다고 판단되는 처리를 한 뒤, 다시 진행할수도 있습니다.
이를 단계별로 살펴보면,
데이터셋/연구 호기심 단계에서는
-
충분한 양의 데이터를 가지고 있는가?
-
문제를 제대로 정의하고 있는가?
-
우리가 가진 문제에 제대로 답할 수 있는 충분한/올바른 변수를 가지고 있는가?
이 세 가지를 유념해야 합니다. 분석 전에 어떤 방향으로 분석을 할지, 분석을 통해 어떤 결과를 얻고자 하는지 등이 제대로 설정되어야 유의미한 분석이 될 수 있기 때문입니다.
Feature에 대해서는 여러가지 종류의 처리를 해줄 수 있습니다.
가장 먼저하는 탐색 단계에서는 상관관계 확인, Outlier 제거, 결측치 대치, 정리를 해줄 수 있습니다. 독립변수 사이에 상관관계가 있거나, 데이터에 Outlier가 있는 경우 모델의 결과에 큰 영향을 미칠 수 있기 때문에 반드시 짚고 넘어가야 합니다.
EDA 결과나 도메인 지식을 기반으로 새로운 변수를 만들거나, 기계가 이해할 수 없는 데이터를 이해할 수 있도록 변환하는 과정을 거칩니다. 기존의 변수를 기반으로 효율적인 정보의 탐색을 위해 데이터의 차원을 축소하기도 합니다.
모든 Feature가 항상 모델을 만드는데 활용되는 것은 아닙니다. 학습의 효율성을 높이거나, 성능을 향상시키거나, 과적합을 피하기 위해 Feature Selection 과정을 거칩니다. 여러가지 방법이 활용되는데, `Y`를 예측하는데 가장 좋은 K개, 혹은 일정 비율의 변수만을 활용하기도 하고, 모든 변수를 넣은 모델로 시작해서 가장 덜 중요한 변수를 제거해가면서 원하는 만큼의 변수를 남기는 방법을 활용하기도 합니다.
가지고 있는 데이터의 형태나 풀고자 하는 문제에 따라 사용하는 알고리즘이 달라집니다. 알고리즘을 고를때 여러가지가 고려되기 때문에, 처음에 얘기했던 문제를 정의하거나 데이터를 제대로 이해하는 것이 중요합니다. 물론 데이터의 형태와는 크게 상관없이 전반적으로 양호한 성능을 보이는 알고리즘들도 있습니다.
사용하는 알고리즘을 선택하는데는 먼저 정해진 답이 있는가? 없는가?로 나뉩니다.
정해진 답이 있는 문제를 푸는 것은 Supervised Learning인데, 이는 다시 `Y`의 분포에 따라 달라집니다. 연속형인 경우에는 회귀(Regression)문제라고 하고, 정해진 카테고리에 따라 분류하는 분류(Classification)문제도 있습니다. 회귀와 분류 두 문제를 다 풀 수 있는 알고리즘도 있고, 하나만 풀 수 있는 알고리즘도 있습니다.
정해진 답이 없는 문제를 푸는 것은 Unsupervised Learning인데, 비슷한 데이터를 묶거나, 데이터를 더 자세하게 탐색하는 등의 Task가 있습니다.
알고리즘에 대한 내용이기 때문에 같이 묶여있기는 하지만, 일반적으로 알고리즘을 Tuning하는 과정은 이 다음에 나올 알고리즘의 성능에 대한 평가(Evaluation)를 마친 뒤에 이루어지는것이 일반적입니다. 모델의 Parameter를 조정해서 성능을 높일수도 있고, 시각화를 통한 전반적인 확인을 할 수도 있습니다.
GridSearchCV를 통해서는 Parameter의 조정과 동시에 모델의 성능을 평가할수도 있습니다. 입력한 Parameter들의 조합을 만들어서, Cross Validation을 해줍니다. 여러 파라미터의 경우의 수를 Cross Validation을 통해 검증하기 때문에, 안정적인 방식이라고 할 수 있습니다.
모델이 학습된 뒤에는, 결과에 대한 평가가 필요합니다. 평가에 따라 이전 단계로 돌아가서 변수에 부가적인 처리를 할지, 다른 모델을 선택할지, Parameter들을 조정할지 등의 결정을 할 수 있습니다.
우리가 푸는 문제에 따라 평가지표도 다르게 사용합니다. 평가와 함께 결과에 대한 검증도 이루어집니다. 정말 우연히 혹은 데이터에 섞인 잡음 등의 다양한 원인에 의해 너무 좋게, 혹은 나쁘게 나올 수 있기 때문입니다.
모델의 학습에 참여하지 않은 Test Data로 모델의 성능을 평가할수도 있고, 데이터를 여러 조각으로 나누어서 각 조각을 한번씩 Test Data로, 나머지를 Train Data로 활용한 결과로 평가할수도 있습니다. 당연히 Test Data를 하나만 쓰는 것이 비교적 간단한 방법입니다. 하지만 하나의 Test Data로만 성능을 평가하고, 모델을 조정하는 등의 과정을 반복한다면, 결국 이 모델은 Generalize되지 못하고 Test Data만 잘 맞추는, Test Data에 Overfitting된 모델이 될 것입니다. 나중에 들어올 새로운 데이터에는 별로 좋은 성능을 보이지 못하는 아쉬운 모델이 되는 것입니다.