이제 타이타닉 프로젝트에 참여하기 위한 기본 준비가 되었다. 나의 경우 일단 타이타닉 프로젝트에 참여하는 것이 목표였기 때문에 패스트캠퍼스의 캐글 강의 내용을 따라하면서 나의 답안을 어떻게 제출할 것인지 고민했다.
강의는 캐글 1위라고 하는 안드레이 룩야넨코의 캐글 노트북을 설명하는 내용인데 데이터 사이언스의 프로세스를 소개하고, 각 프로세스 별로 타이타닉 챌린지의 로데이터를 어떻게 분석했는 지 설명하는 내용이였다. 그럼 각 단계별 내용을 간단히 소개해 보겠다.
* 데이터사이언스 프레임워크
1. 목표정의 - 데이터 분석을 통해 해결하고자 하는 문제를 정의한다.
2. EDA(Explatory Data Analysis) - 통계와 시각화를 통해 데이터를 분석한다.
3. Feature Engineering - 머신러닝 알고리즘을 적용하기 위한 항목을 결정한다.
4. 알고리즘 적용 - 피처 항목에 알고리즘을 적용해 모델링한다.
5. 모델링 평가 및 튜닝 - 모델링을 평가하고 수정한다.
6. 결과 제출 - 결론을 도출하고 지속적으로 모델을 개선해 나간다.
1. 목표 확인
타이타닉 프로젝트에는 승객의 생존여부를 예측하기 위해 두 가지 로데이터 세트가 제공되는 데 하나는 개별 승객의 나이, 성별, 탑승 클래스, 동승자, 티켓 가격 등과 같은 정보와 실제 그 생존여부(0 or 1)가 포함된 트레이닝 데이터, 그리고 이를 바탕으로 생존여부를 예측해 답안을 제출해야 하는 테스트 파일 두 가지다. 즉, 트레이닝 데이터를 바탕으로 모델링을 하고 그 결과를 테스트 파일에 적용해 예측 결과를 제출하는 것이다.
2. EDA (Exploratory Data Analysis)
문제해결을 위해 데이터를 요리 뜯어보고 저리 뜯어보는 과정이다. 어떤 데이터가 어떤 형태로 주어졌는 지 빈 값이 많은 데이터는 무엇인지 이를 어떻게 처리할 지 결정한다. 데이터 분석과 시각화 툴을 이용해 데이터를 분석하면서 데이터들 안의 잠재적인 문제나 패턴, 상관관계 등을 발견하고 같은 범주의 데이터를 묶어 새로운 데이터를 만들기도 한다. 머신은 문자열보다는 숫자를 선호하므로 문자를 숫자로 바꾸기도 한다.
안드레이의 노트북은 먼저 전체 데이터들의 상관관계 분석 후 클래스, 이름, 성별, 나이 등의 개별 데이터를 차례대로 전처리 작업(빈데이터를 채우거나 문자를 숫자 데이터로 변환하거나 데이터를 묶어 새로운 항목을 만들거나)을 해나가면서 항목에 따른 생존률과의 관계를 분석하고 시각화해나갔다.
3. Feature Engineering
피처 엔지니어링은 문자 데이터를 숫자 데이터로 변환하고 도메인 지식(마케팅 등 특정분야 지식)을 활용해 새로운 항목을 추출하는 등 머신러닝 알고리즘을 적용하기 위한 항목을 준비하고 결정하는 것을 말한다. 강의에서는 여기저기 찔러보고 다른 사람이 한 것도 보고 문제해결을 위해 새로운 분석 항목을 추가하는 단계라고 한다.
안드레이의 노트북에서는 기존 항목 가운데 생존율과 연관성이 높다고 분석한 8개의 항목(컬럼)과 생존율과 연관성이 높다고 생각한 요소들을 묶어 새롭게 수치화한 항목 5개를 머신러닝을 적용하기 위한 ‘피처’ 항목으로 결정했다.
4. 머신러닝 알고리즘 적용 (모델링)
이제 항목이 결정되었다면 알고리즘을 적용할 차례다. 13개 컬럼 데이터(13 columns x 1309 rows)에 바로 적용하는 것이 아니라 (컴퓨터가 알아들을 수 있도록) 인코딩을 통해 새로운 데이터 프레임을 만들어 머신러닝 알고리즘을 적용한다. 이 때 원핫 인코딩 (One Hot Encoding)*을 적용하면 컬럼의 수가 무지하게 늘어나게 된다.
*원핫 인코딩 - 열 내에서 항목을 나누어 0이나 1이냐로 구분해 새로운 컬럼들을 만들어 내는 것으로 컬럼의 수가 무지하게 늘어난다.
여기에 결정 트리, 랜덤 포레스트, 엑스트라 트리, KNN 등 총 11개의 알고리즘을 모두 적용하고 그래프로 결과(정확도)를 본다. 강의에서는 각각의 알고리즘이 무엇인지 간단히 개념을 설명하는 데 이것만 들어서는 무엇인지 잘 몰라 일단 그냥 복사해서 적용하기로 했다.
그런 다음 항목들의 중요도를 계산해 380개 항목만 선정해 다시 한번 11개의 알고리즘을 적용해 정확도를 측정한다.
5. 모델링 평가 및 튜닝
위 결과를 바탕으로 모델별로 최적의 파라미터를 찾아 다시 알고리즘을 적용해 결과를 본다. 여기서부터 멘붕이었다. 그래, 그냥 알고리즘을 그대로 적용하는 것은 그렇다 치고 파라미터를 수정해서 다시 알고리즘을 적용하라고? 알고리즘이 먼지도 잘 모르는 데 파라미터 수정, 넌 나에게 좌절감을 주었다~~ 강의도 그냥 파라미터를 수정하는 모습만 모여주고 후루룩 넘어가버린다.
그러면 그렇지… 김동률의 노래가 생각났다. # 세상의 모든 게 한 번에 이뤄지면 그건 조금 싱거울테니
6. 결과 제출
마지막으로 하나의 알고리즘 모델을 선택하는 것이 아니라 최적의 파라미터들을 가진 알고리즘을 모두 종합해 최종 결과를 예측했는데 이 때 ‘종합하는 방법’이 보팅(Voting)이다. 하드보팅은 모든 알고리즘의 결과값을 똑같은 비율로 반영해 최종 결과를 모델링하는 것이고, 소프트보팅은 각 알고리즘의 확률값의 평균으로 최종 예측값을 모델링한다.
이렇게 보팅 방식으로 만들어진 모델링을 테스트 데이터에 적용하면 각 탑승자별 생존률이 예측된다.
수업을 마쳤다면 나의 답안을 제출해야 한다. 파이썬 기본문법과 데이터 분석 라이브러리를 간단히 익히고 시작했지만 인공지능의 알고리즘을 제대로 알고 적용하거나 파라미터를 수정하는 부분은 지금 내가 할 수 있는 부분은 아니다.
그래서 두 가지 방법으로 답안을 제출하기로 했다. 첫번째는 안드레이의 노트북을 그대로 실행해 답안을 제출해 보는 것이고, 두 번째는 분석 과정을 따라하면서 인공지능 알고리즘은 그대로 적용하지만 피처 항목을 조금 다르게 만들어 보는 것이다.
EDA와 피처 엔지니어링 단계에서 안드레이는 모든 항목을 차례대로 분석하고 수치화하고 데이터를 합쳐 새로운 항목을 만들어 내기도 했지만, 나는 생존율에 미치는 영향이 떨어진다고 생각한 티켓번호나 선실 정보는 제외하기로 했고, 피처드 엔지니어링 단계에서 생존률이 높았던 여자 그룹, 남자그룹, 생존율이 낮은 특성을 보였던 남자그룹을 안드레이와 조금 다르게 정의해 추가했다.
첫 번째 나름 소신있게 피처 항목을 설정하고 나머지 인공지능 부분은 수업 내용을 그대로 적용한 버전을 제출했다. 주피터 노트북에서 마지막으로 소프트 보팅한 결과는 정확도 82.27이였는데 제출 페이지에서 제출하니 정확도는 0.74880, 순위는 한 1만 9천 등 정도로 뜬다. 거의 꼴찌에 가까운 듯 하다.;;
두 번째 안드레이의 프로세스를 그대로 적용해 답을 제출하면 어떻게 될까? 어라 정확도 0.78에 순위는 한 2662 등 정도로 올라간 듯 하다. 노트가 공개되어 있다면 그대로 제출하거나 약간의 아이디어를 더해 자신의 답안을 제출하는 경우도 있을 것 같았다. 현재 리더보드에는 정확도가 1.00인 사람이 100명 이상 랭크되어 있는 데 이 사람들은 어떻게 한 걸까?
예측 정확도 0.74나 0.78이나 큰 차이는 없지만 단순히 동전을 던져 이 사람이 살지 말지 생존여부(Survived or Die?)를 결정하는 0.5의 확률보다는 나아야 할 것이다. 물론 동전 던지기도 연속으로 실행했을 때 예외적으로 예측 확률이 아주 높아지는 경우도 있다고 한다. 마치 월드컵 경기 결과를 연속해서 맞췄다는 예측 문어처럼…
하지만 우리가 바라는 것은 이런 극히 예외적인 경우가 아니라 어떤 경우에도 가능하면 정확한(Robust)한 예측을 하는 것일 것이다. 그래서 인간의 분석능력과 감, 지식을 동원해 분석을 하고 인공지능 알고리즘을 통해 대량의 데이터를 처리해 최적의 결과를 예측하고자 하는 게 아니겠는가?
캐글 참여기의 마지막 글에서는 좀 더 정확도를 높이기 위해 다른 노트북들도 살펴보고 이번 첫 번째 캐글 도전 사이클을 마무리 짓고자 한다.