08 | 더 나은 알고리즘의 개발
지금까지 타이타닉 생존자 데이터를 사용한 기계 학습 모델의 개발에 대해서 알아보았다. 데이터를 정제하고, 탐색해보고, 모델을 만든 뒤 개선하는 과정을 설명하는 이 절의 내용과 코드 구조를 사용하면 다른 분류 문제에서도 기본적인 방향을 찾을 수 있을 것이다.
더 나은 기계 학습 알고리즘은 어떻게 찾아야 할까? 타이타닉 데이터뿐만 아니라 일반적인 분류 문제에 적용할 수 있는 지침을 몇 가지 제시하면서 이 장의 내용을 마치려고 한다.
• 리서치 : 같은 문제를 해결하는 알고리즘이 이미 여러 논문에서 연구된 경우가 있다. 때에 따라서는 교과서 격에 해당하는 책에 해당 주제가 실려 있는 경우도 있다. 이들을 가장 먼저 찾아서 공부해보기 바란다.
• 더 나은 피처의 개발 : 타이타닉의 경우 데이터에 숨어 있는 ‘가족’의 개념을 꺼내 사용하니 모델의 성능이 향상되는 것을 볼 수 있었다. 결국 대부분의 기계 학습 문제는 주어진 데이터에서 쓸 만한 피처를 어떻게 꺼내서 사용하는가에 성패가 달려 있다.
• 모델 선택 : 이 절에서는 간단하게 rpart, ctree의 단독 모델만 사용했다. 그러나 일반적으로는 앙상블 모델(예를 들면, 랜덤 포레스트)이 더 나은 성능을 보이는 것으로 알려져 있다. 한 예로 넷플릭스 프라이즈4 에서도 데이터의 서로 다른 특징을 잡아내는 여러 모델을 종합하면 할수록 더 나은 성능을 얻을 수 있다고 확인되었다.[3] 여러 모델을 합치는 앙상블 학습[4]을 적용해보기 바란다.
• 디버깅 : 예측이 틀린 데이터를 들여다보고 왜 틀렸는지를 살펴본다. 어떻게 하면 그 데이터에 대해서 올바른 예측을 할 수 있을까 생각해본다. 그러다 보면 결국 더 나은 피처나 알고리즘을 발견할 수 있다.
• 테스트 : 코드가 길어지면 정말로 모델의 성능이 낮아서 예측이 잘 안 되는 것인지, 아니면 코드에 문제가 있어서 잘 동작하지 않는지 확신이 서지 않을 때가 있다. 코드를 작성하면서 테스트를 충분히 해두면 이런 불확실성이 사라진다.
• 문서화 : 떠오르는 아이디어를 문서로 잘 정리하고 이들 각각을 적용하면서 성능이 얼마나 개선되는지를 기록해둔다. 수일, 수주에 걸쳐서 모델을 작성하다 보면 예전에 적용한 모델의 성능이나 알고리즘을 잊어버리기 쉽다. 그러면 했던 일을 여러 번 반복하는 낭비가 발생한다. 처음부터 모든 것을 문서화해둬야 한다.
• 버전 관리 : 깃(Git)과 같은 소스 코드 버전 관리 시스템을 사용하기 바란다. 코드와 함께 코드의 성능을 같이 기록해서 커밋(commit) 해두면 예전 코드의 성능과 현재 코드의 성능을 비교하기 수월하다.
4 주문형 영화 스트리밍을 제공하는 회사인 넷플릭스가 개최한 영화 평점 예측 대회를 말한다.