brunch

You can make anything
by writing

C.S.Lewis

by 이민우 Nov 10. 2017

Kaggle 시작하기

최근에 텐서플로우가 버즈워드처럼 눈 앞에 돌아다니기 시작하면서 

관심이 생겨 김성훈 교수님의 유튜브 강의를 보기 시작했는데.. 

강의를 볼 때는 어찌어찌 꾸역꾸역 알아들었다 싶었지만.. 아니었다.

배웠던걸 그대로 복습해보려는 데에도 그게 잘 되질 않았다.

엄청나게 단순한 코드인데 이해가 얕다 보니 원하는 코드 흐름으로 바꿔 넣는 게 잘 되질 않았다.

엄청나게 많은 에러를 보고 나서야 겨우 MINIST 테스트 데이터에서 라벨을 뽑아냈다.


뭔가 더 가져와서 실제로 써먹어봐야 배웠던 것이 보람차겠지만

연습을 할만한 데이터도 없었고 실제로 돌려볼 데이터도 준비되지 않았기에

텐서플로우와는 한참을 그렇게 거리를 두고 있었다.


그러다 캐글 얘기를 다시 듣게 되었다.

초보자를 위한 Competition과 연습할만한 데이터, 참고할만한 다른 사람들의 코드가 있다는 얘기.

데이터를 준비하는 과정부터가 꽤 심각한 고비인데 넘나 쉽게 해결해준다 하는 엄청 고마운 얘기.




# 시작 전에

일단 처음 시작하는 사람들을 위한 코스로 타이타닉에서 살아남은 사람 예측하기부터 시작하란 얘기를 들었다.

링크는 확인했지만 무슨 얘기인지 어디서부터 뭘 하란 것인지는 감이 오질 않는다.

여기저기 누르다가 튜토리얼을 찾았는데 찬찬히 읽다 보니 Datacamp라는 곳의 튜토리얼 링크가 있었다.

개인적으로 이 데이터캠프 튜토리얼이 큰 도움이 되었는데, 예측을 위한 코드뿐만 아니라 캐글 사용법까지 알려주었기 때문이다.




# 참가해보기

우선 다른 메뉴들과 복잡한 다른 정보는 제치고 본론으로 갔다.

일단은, https://www.kaggle.com/c/titanic 에서 시작.

파란색 버튼이 눈에 띈다. 일단 누른다. 별 것 없이 참여된다.

아래와 같이 예측 결과를 올릴 수 있게 된다.

여기서부터는 좀 막막하니 다시 처음부터 읽기 시작한다.




# Competition의 개요

Overview > Evaluation 에서 이 Competition에서 할 일이 설명되어 있다.

목적은 "죽은 사람, 산 사람을 예측하고 0 혹은 1로 분류해라"

경쟁에서 사용할 점수는 산 사람 / 죽은 사람 예측의 정확도

제출할 답변의 형식은 승객 아이디와 생사 여부, 두 개 컬럼이 들은 CSV 파일 

..이라고 한다.


Data > Overview 에서 어떤 데이터가 주어지는지 설명되어 있다.

트레이닝 세트와 테스트 세트가 주어지고 

각 데이터 세트에는 승객 개인별로 9개의 특징이 주어진다. 

트레이닝 세트에는 승객의 생사여부가 추가로 들어있다.

각 특징에 대한 설명이 들어있다.




# 커널 만들기

본격적으로 코드가 필요한 시점이다. 코드를 실행할 커널을 준비한다.

Kernels 페이지에서 New Kernel 버튼을 누른다.

노트북을 선택한다.

바로 노트북을 얻었다.

그동안 노트북 켜려고 ec2나 도커에 주피터 올려서 켜거나 GCP에 데이터랩을 쓴다거나 해야 노트북을 쓸 수 있었는데 그냥 원샷에 노트북을 하나 주니 넘나 편하고 좋았다.

어딘가 찾아보면 그냥 이런 노트북 주는 곳이 있긴 하지만 환경 설정하고 데이터 올리고 어찌어찌하다 보면 

결국 내 요구사항에 맞춘 내 노트북이 필요한 경우가 생기는데 캐글의 노트북은 캐글의 Competition에서 필요한 패키지가 모두 설치되어 있고 데이터도 이미 올라가 있으니 매우 편하다.




# 무식하게 일단 제출

이제 뭐 예측만 하면 되겠다 싶지만 막상 그게 또 그렇지가 않았다.

백지상태의 노트북을 받아 들고 나니 어디서 어떻게 데이터를 만들어 제출해야 하는지 내 머리도 백지가 됐다.

일단 위에서 얘기한 Datacamp의 Tutorial을 따라가 보았다.

무섭게 간단한 방법으로 시작하는데, 

남자 == 사망, 여자 == 생존

고대로 따라 해 보았다. (datacamp에서 남녀 구분으로 예측한 결과를 CSV로 다운로드할 수 있다.)

요롷게 예측 결과를 제출하고 나면 놀랍게도 정확도가 0.76555

남녀만 나눠 넣어도 엄청 정확도가 높다.




# 무식하게 일단 머신러닝

자 그럼 이제 예측을 하면 되겠구나 학습시키면 되는구나 싶다.

튜토리얼에서는 디씨전트리와 랜덤포레스트로 예측하는 방법에 대한 가이드가 나온다.

하라는 대로 해봤지만 80%를 넘지 못한다.

딥하지 않은 것이 문제구나 싶어 텐서플로우로 뉴럴네트워크를 구현해 학습시켜봤지만 80%를 넘지 못했다.

트레이닝 데이터를 쪼개서 학습/테스트한 결과의 정확도는 엄청나게 높은 반면 실제 캐글의 테스트 데이터로 예측한 결과의 정확도는 매우 낮은 편으로 나왔다. 

현대 문물의 state of art라고 불리는 물건이 그냥 대충 남녀 구분으로 갈라 나눈 것과 고작 3% 차이밖에 내질 못하다니 뭔가 문제가 있다고 생각이 들었다.

도대체 이 사람들은 뭘 해서 저런 정확도가 나오나 싶은데..

현대 문물이나 머신러닝이 문제가 아니라 처음부터 뭔가 많이 놓치고 온 느낌이 든다.

다시 찬찬히 읽어보았다.




# 다른 사람의 커널 참고하기

캐글이 매우 좋은 점은 다른 사람의 노트북을 참고할 수 있다는 점이다.

타이타닉은 Competition 자체부터 튜토리얼 성격이라 그런 것인지 튜토리얼 성격의 노트북 또한 많다.

최근 인기 노트북으로 올라온 Titanic Survival Predictions (Beginner)을 열어보았다.


목차를 살펴보면,

1. Import Necessary Libraries

2. Read In and Explore the Data

3. Data Analysis

4. Data Visualization

5. Cleaning Data

6. Choosing the Best Model

7. Creating Submission File


노트북에서 주어진 데이터에 대한 분석이 상당한 지분을 차지한다.

놓치고 온 것이 무엇인지 알 수 있었다. 

캐글이 준 데이터에 빈 구멍만 적당히 메꿔 머신러닝에게 부탁하면 되는 줄로 기대했지만

다른 사람들을 보니 단순히 빈 구멍만 메꾸는 것이 아니라 머신러닝에게 줄 feature를 고르고 정리하고, 

돌아가는 데이터를 만드는 일에 정성을 들이고 있다.

 

각 feature별로 삶과 죽음에 어떤 영향이 있는지 살펴보고,

나이를 카테고리로 그룹화해서 살펴보거나 

선실이 어디였는지의 기록 유무가 결과에 영향이 있는지를 확인하는 창의력과

나이가 기록되지 않은 사람들을 위해 단순히 중앙값이나 평균값을 적어 넣는 게 아니라 

이름을 확인하고 연령대를 유추해 적어 넣는 치밀함까지..


이제 이게 어떻게 돌아가는지 대략 감이 온다.

아무거나 준다고 좋게 뽑아주는 게 아니라 먼저 잘 골라 넣어야 결과물이 좋다는 얘기..




# 모델 고르기

좀 더 진지하게 고민하고서 그럴싸한 피쳐들을 모아 왔다. 다시 학습을 시도해본다.

Datacamp Tutorial을 통해 디씨전트리와 랜덤포레스트를 알게 되었지만

사실 이름과 개념만 알 뿐인데 이후에 더 많은 모델들이 있다는 걸 알게 되었다.

어디까지 배우고 이해해야 하는지 감이 안 오긴 하는데 확실한 것은 각 모델을 구현하는 데에는 긴 코드가 필요하지 않다는 점이고 이해와 별개로 모두 돌려볼 수 있으며 굳이 하나를 고를 필요도 없다는 점으로..

배울게 많은 게 문제지 시간이 없는 게 아니니까.. 미래의 나를 위해 배움을 양보한다.

일단 다 돌려보고 높은걸 선택하는 것으로 진행해보려는데 기대보다 높은 정확도가 나오질 않았다.

다시 데이터 깎는 과정으로 돌아가야 하나보다.




# 시작하기

몇 번을 같은 데이터와 같은 코드로 돌리는데도 새롭다.

본 것도 잊을 판에 볼 때마다 새로운 게 나온다.

뭔가 하나 더 배우고 해볼 때마다 두 개씩 더 모르는 게 늘어나는 느낌이 든다.

튜토리얼 지겨워 밖으로 벗어나고 싶은데 아직도 낮은 순위가 사람 맘을 잡는다.

사람의 배움은 끝이 없고 다른 배움을 반복하니..

어찌 되었건 개요 정도는 파악했으니 대략의 겉핥기는 이쯤에서 끝내고

순위권 들어가면 새로 글을 써야지..

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari