동아대학교 김현석 교수님의 로봇인공지능 연구실에 들어가면서 kaggle 스터디를 시작하였다. kaggle은 여러 인공지능 competition에 참여하여 순위안에 들어가면 상금도 받을 수 있다. 나는 이번주에 진행중인 competition은 아니지만 처음 kaggle입문용으로 적합하다고 하여 Titanic - Machine Learning from Disaster를 선택하여 유튜브 영상을 참고하여 제출해보았다. 이 competition은 train데이터를 활용하여 titanic에 탑승한 승객들의 생존율을 예측하는 것이다.
참고한 유튜브 영상 링크 : https://www.youtube.com/watch?v=vNsiyYX3irM
개발환경은 colab으로 정하였다.
세개의 데이터를 다운받아 코랩으로 옮긴다.
나같은 경우는 코랩에 kaggle폴더를 만들고 그 안에 Titanic - Machine Learning from Disaster폴더를 만들어 이 안에 다운받은 .csv파일들을 드래그하여 옮겨줬다.
그리고 .csv파일들의 경로를 복붙하여 .head로 파일들이 어떻게 구성되어있는지 확인해보았다.
데이터 전처리과정이 제일 길고 복잡했다.
간단히 요약하자면
'Embarked'열
missing value 찾아서 S,C,Q중 제일 많은 S로 채워 S,C,Q를 숫자화함
'Name' 열 -> 'Title' 열 만들기
'Name'열에서 문자열+. 의 패턴을 'Title'열에 저장하여 'Title'열과 'Sex'열을 crosstab하여 드물게 나타나는 이름을 'Rare'나 다른 이름으로 바꾸고 그렇게 추려진 다섯가지 이름을 숫자화함
'Sex'열과 'Age'열의 전처리
'Sex'열에서 여자/남자를 숫자화하고 'Age'열의 missing value를 'Title'로 그룹화한 나이의 중간값으로 채움
'Age'열 -> 'AgeBand'열
'Age'열 연령대 8등분해 0~7로 바꿈
'SibSp'열과 'Parch'열 -> 'Family'열과 'Alone'열
Family=SibSp+Parch+1(자기자신)
Alone=Family=1
'Fare'열 -> 'FareBand'열
요금대를 5분해 0~4로 바꿈
여기서 4번과 6번에서 연령대와 요금대를 하이퍼파라미터로 생각하여 더 세세하게 등분하여 나눠주면 정확도가 올라갈 수도 있다고 생각했다.
데이터들마다 단위가 다른데 단위가 제거된 실수값을 가지게 하기 위해서 데이터 표준화를 해주어야한다.
to_numpy함수로 float32타입으로 모두 변환해준뒤,
정확도를 높이고 오버피팅을 낮추기 위해 Dense와 dropout을 사용했다.
그리고 200번 학습시켜 정확도를 50%대에서 70%대까지 올렸다.
마지막으로 test data에 대한 생존예측을 하여 제출할 csv를 만들어 제출하면 된다.
제출방법을 몰라서 헤맸는데 생각보다 간단했다.
4번과정까지 코드를 다 돌리고나면 새로운 csv파일이 생기는데 이걸 다운로드하여 제출하면 된다.
최종적으로 14344팀에서 7982등을 하였다.
정확도는 분명 코랩에서 돌렸을땐 79%였는데 올리니까 77%