코드 없이 머신러닝 모델 만들기
written by Bogyeom Kim
bogyeom.kim@looxidlabs.com
룩시드랩스는 VR과 모바일 앱에 뇌파를 접목하여 인지기능의 저하를 손쉽게 발견하고 손쉽게 멘탈헬스케어를 관리할 수 있는 플랫폼을 개발하고 있습니다. 머신러닝은 기계가 과거의 데이터를 학습하여 새로운 예측을 하는 도구로, 대규모 생체 데이터가 활발하게 수집되는 빅데이터 시대에 바이오, 헬스케어 분야에 발전을 가져오고 있습니다. 본 아티클 시리즈에서는 룩시드랩스에서 인지기능 저하를 발견하고 정신건강 전반을 관리하는데 사용할 머신러닝 기술에 대해 알아보고, 멘탈헬스케어 산업 동향을 소개하도록 하겠습니다.
지난 아티클에서는 머신러닝의 개념과 종류에 대해 알아보았습니다. 머신러닝은 과거의 데이터를 학습하여 새로운 문제를 해결하는데 사용하는 도구로, 그 종류에는 지도학습, 비지도학습, 강화학습이 있다고 소개해드렸습니다. 어느 정도 감이 잡히시나요? 그럴 수도 있고 아닐 수도 있을 것입니다.
머신러닝이라는 용어에 더 친숙해지기 위해, 이번 아티클에서는 머신러닝을 직접 만들어보려고 합니다. 먼저 머신러닝을 사용한다고 했을 때 거치는 일련의 과정, 파이프라인을 살펴볼 것입니다. 그 다음 코드 없이 머신러닝 모델을 구축할 수 있는 소프트웨어를 소개하고, 실습을 통해 직접 머신러닝을 이용해봅시다. 이번 아티클을 읽으신 후 머신러닝이 사용된 서비스나 제품에 대해 접하면, 대략 이러한 과정을 거쳐서 만들어졌겠구나 감을 잡으실 수 있기를 기대합니다.
머신러닝을 사용할 때 거치는 일련의 과정들이 있습니다. 이를 머신러닝 파이프라인이라고 하는데, 넓은 의미와 좁은 의미를 나누어 살펴볼 수 있습니다. 넓은 의미에서는 데이터베이스에 데이터를 올리고, 데이터베이스에서 데이터를 가져와서, 데이터를 전처리하고, 모델을 학습시키고, 모델을 분석 및 검증하고, 그렇게 검증된 모델을 배포하고, 새로운 예측 결과를 제공하는 것까지를 포함합니다.
좁은 의미에서는 우리가 원하는 작업에 머신러닝을 이용하고 싶을 때 거치는 과정이라고 할 수 있겠습니다. 대개 정제된 형태의 데이터를 가져오고, 모델에 맞게 전처리하고, 모델에 학습하고, 새로운 예측을 통해 문제를 해결하는 것을 포함합니다. 넓은 의미와 비교했을 때, 데이터 수집, 모델 배포 등의 과정이 생략되고, 직접적으로 해결하고자 하는 문제에 머신러닝을 사용하는 과정으로 이해할 수 있습니다.
파이프라인을 구축하는 이유는 머신러닝 문제들이 비슷한 과정을 필요로 하기 때문입니다. 새로운 문제를 마주할 때마다 전처리, 학습, 예측 등 개별 단계를 일일이 만들 필요 없이 만들어둔 파이프라인을 사용하여 문제를 해결할 수 있습니다.
또한 머신러닝 파이프라인을 구축하면 머신러닝에 사용되는 일련의 과정을 이해하는데 도움이 됩니다. 그래서 우리는 코딩 없이 머신러닝 모델을 만들 수 있는 툴을 이용하여 타이타닉호 생존자를 예측하는 머신러닝 파이프라인을 구축할 것입니다. 이는 데이터를 받았을 때, 1) 데이터를 탐색적으로 살펴보고, 2) 모델에 맞게 전처리하고, 3) 모델을 골라 학습시키고, 4) 새로운 데이터에 모델을 적용하여 예측 성능을 살펴보는 과정을 포함합니다. 구체적인 내용은 아래에서 확인하도록 하겠습니다.
Orange3는 코드와 수학 없이 머신러닝을 사용할 수 있도록 도와줍니다. 수학과 코드 없이, 직관적인 GUI를 드래그 앤 드롭하기만 하면, 데이터 시각화부터 머신러닝 모델 구축까지 배울 수 있습니다. 다운로드는 아래 링크에서 가능합니다. 각자의 운영체제를 확인하고 그에 맞는 Orange3를 다운받으면 됩니다.
https://orangedatamining.com/download/
이제 본격적으로 Orange3를 이용하여 타이타닉호 생존자를 예측하는 모델을 구축해봅시다.
Sample data에서 타이타닉호 탑승자 데이터를 불러와봅시다.
우리의 목표는 주어진 데이터를 이용해서 타이타닉호 생존자를 예측하는 모델을 만드는 것입니다. 이는 지도학습 방법 중 분류 모델로 해결 가능합니다. 지도학습 방법은 예측하고자 하는 변수가 연속적인지 (e.g., 12세) 또는 비연속적인지 (e.g, 남, 여)에 따라 회귀모델과 분류모델로 분류됩니다. 우리는 타이타닉호 탑승자들의 생존 여부, 즉 비연속적인 변수를 예측하고자 하므로 분류 모델을 사용할 것입니다.
데이터는 위와 같이 생겼습니다. 표 형태로, survived (생존 여부), status (사회적 계층), age (나이), sex (성별) 정보가 포함되어 있습니다. survived가 예측변수이니 status, age, sex 정보와 생존여부의 관계를 학습하는 지도학습 분류 모델을 만들면 될 것 같습니다.
본격적으로 Orange3를 이용하여 타이타닉호 생존자 예측 파이프라인을 구축하기에 앞서, 최종적으로 만들 결과물을 보여드리겠습니다.
이 파이프라인에는 데이터를 불러오는 것을 시작으로, 데이터를 탐색적으로 분석하고, 전처리하여, 머신러닝 모델을 구축하고, 모델의 성능을 평가하는 것까지의 단계가 포함되어 있습니다. 수식없이, GUI만으로도 데이터 분석과 머신러닝 모델 구축이 가능하다는 것을 실감하셨을 것입니다. 그렇다면 이제 본격적으로 머신러닝 파이프라인 각 단계별 과정에 대해 살펴보도록 하겠습니다.
파일 위젯으로 데이터를 불러오고, 데이터 테이블 위젯을 연결하여 데이터가 어떻게 생겼는지 확인해보았습니다. 2201개의 데이터가 있고, 4개의 변수가 있음을 확인했습니다.
Orange3는 box plot, violin plot, scatter plot 등 다양한 시각화 도구를 제공합니다. 이를 이용하여 데이터를 탐색적으로 살펴보도록 하겠습니다.
예측에 가장 중요한 목표 변수인 생존 여부를 시각화 해서 확인해보았습니다. 사망자가 생존자에 비해 약 2배 정도 많은 것으로 보입니다. 추가적으로 class에 따라 생존율이 상이하게 나타난다는 것을 발견하였습니다. 사망자 중 선원들과 하층 계급의 사람들의 비율이 높다는 것이 눈에 띕니다.
학습에 용이한 형태로 데이터를 변형하는 과정을 총칭하여 전처리라고 부릅니다. 전처리에는 학습-시험 데이터 분리, 결측치 대체, feature transformation 등 다양한 방법들을 포함합니다. 이번 머신러닝 파이프라인에서는 가장 필수적인 방법들을 위주로 다뤄보도록 하겠습니다.
학습-시험 데이터 분리
학습에 사용할 데이터(Train dataset)와 학습 후 모델의 성능을 확인할 데이터(Test dataset)를 나누어줍니다. 이는 학습된 모델이 새로운 데이터에 대해서도 예측을 잘하는지, 다시 말해 모델의 일반화 가능성을 평가하기 위한 과정입니다. Orange3에서는 데이터 샘플러 위젯을 데이터 파일과 연결시켜주면 됩니다. 학습 데이터와 시험 데이터의 비율은 80:20으로 설정하겠습니다.
또한 학습에 용이한 형태로 변수를 전처리할 것입니다. 아래의 방법들을 위젯에서 찾아 클릭해주면 됩니다.
일정 비율 이상의 결측치가 포함된 변수 제거: 90% 이상 결측치를 포함한 경우, 해당 변수 자체를 제거
결측치 대체: 연속형 변수의 경우 결측치를 평균으로, 비연속형 변수의 경우 결측치를 최빈값으로 대체
원핫인코딩: 범주형 데이터가 숫자로 표현되어 있을 때, 연속적인 특성이 없음을 분명히 하기 위해 사용하는 기법
표준정규화: 변수들을 일정한 단위로 맞춰주는 feature scaling 방법 중 하나로, 변수들이 표준정규분포를 따르도록 값을 변환하는 방법.
전처리를 마쳤다면 이제 본격적으로 학습할 모델을 선택해봅시다. 예측 모델의 성능은 어떤 모델을 사용하는지에 따라 달라질 수 있습니다. 이에 Orange3는 다양한 모델을 위젯의 형태로 제공하고 있습니다. 그 중에서 이번 파이프라인에는 logistic regression, kNN clustering, Tree based model, Random Forest, Gradient Boosting 모델을 포함시켜 5개의 모델별 학습 및 예측 결과를 비교할 것입니다. 모델이 구체적으로 어떤 수식을 바탕으로 구축되었는지 이해하지 않더라도 원하는 모델로 학습시키고 그 결과를 확인할 수 있다는 것이 Orange3의 큰 장점입니다.
끝으로 Test and Score 위젯을 전처리와 학습 모델 위젯들과 연결합니다. Test and Score 위젯은 학습 또는 테스트 데이터셋과 학습 모델을 입력으로 받고, 학습 및 테스트 결과를 출력으로 내보냅니다.
Test and score 위젯은 여러가지 샘플링 방법을 제공합니다. 그 중에서 cross-validation을 이용하여 학습 데이터로 학습시킨 모델의 성능을 확인해봅시다. 여기서 cross-validation은 고정된 특정 training set에 과적합(overfitting)되는 것을 막으면서 모델의 성능을 확인하기 위한 방법입니다. 우리는 Number of fold를 5로 설정하고, stratified에 체크를 한 뒤 성능을 확인하려고 합니다. 이렇게 하면 Orange3에서 모델별 성능 지표를 제시해줍니다. 중간 과정은 다음과 같습니다: 1) 데이터를 5개의 fold로 나누고, 2) 4개를 학습용, 1개를 평가용 데이터 세트로 사용, 3) 이 과정을 5번 반복, 4) 총 5개 set의 성능 지표를 얻은 후 평균내어 화면에 제시합니다.
위에서 노란색 박스로 표시된 표는 5개의 모델의 성능을 비교하여 보여주고 있습니다. 5가지 머신러닝 예측 성능 지표 중 AUC는 높을수록 분류 성능이 좋음을 의미하는데, 0.752로 random forest이 가장 좋은 성능을 보이는 것으로 나왔습니다. AUC의 구체적인 의미와 다른 지표들의 개념은 추후 아티클에서 자세하게 다루도록 하겠습니다.
앞서 살펴본 결과는 학습용 데이터를 이용하여 cross validation한 결과였습니다. 이번에는 앞서 학습된 모델을, 전처리 단계에서 분리해놓은 20%의 시험용 데이터에 예측해보고 그 성능을 살펴봅시다. 그 결과 AUC를 기준으로 보았을 때 random forest와 gradient boosting이 0.752로 가장 높은 성능을 보였습니다. 이렇게 학습, 검증, 시험용 데이터에서 성능을 확인하는 것까지 마치면 기본적인 머신러닝 파이프라인 구축을 끝낸 것입니다.
머신러닝에 더 친숙해지기 위해 코드 없이 머신러닝 파이프라인을 구축해보았습니다. 실생활에서 머신러닝이 적용된 사례들을 접했을 때 어떤 과정들을 거쳤을지 대략적인 감을 잡는데 도움이 될 것이라고 생각합니다. 더 나아가 다음 아티클에서는 머신러닝 사례들을 예리하게 볼 수 있도록, 머신러닝 실험을 평가하는 요소들에 대해 다뤄보도록 하겠습니다.
참고자료