이전 글에 이어 AutoEncoder를 이용한 타이타닉 문제 접근의 최종 편입니다.
이전 편에서 AutoEncoder를 통해 케글에서 제공하는 타이타닉 데이터를 차원 축소해보았습니다.
Bytenet의 AutoEncoder의 encoder 를 통과하면 10차원의 feature가 1차원의 value로 축소됩니다. (batchsize,1)
준비된 Encoder 를 통과하면 비슷한 value를 가지는 data는 비슷한 값을 가지도록 Encoder를 학습됩니다.
(손글씨 데이터를 autoencoder로 학습하고 encoder만 통과시키면 비슷하게 생긴 숫자끼리 clustering 되는 값을 얻을 수 있습니다.)
train dataset 에서 pclass 를 뺀 10개의 feature만 사용해서 학습을 진행했습니다.
그럼 10개의 feature를 1 차원으로 축소하는 encoder를 만들 수 있습니다.
이 encoder를 사용해서 trainset의 feature와 동일한 갯수의 testset으로 통과시킵니다.
그럼 동일한 1차원의 값이 나오겠죠.
testset에서 나온 1차원의 값으로 trainset에서 가장 가까운 row를 찾습니다.
그리고 그 row가 가진 pclass를 return 하는 프로그램을 만들어봅니다.
실제 testset의 plcass 와 비교해보니 69%의 정확도가 나왔네요. pclass가 3개이니 3개중 하나를 임의로 선택할 때 보다는 높네요.
이 결과가 무엇을 의미할까요?
친구 따라 강남간다 라는 속담을 한번 생각해보죠.
속담을 실제 data에 적용하기위한 근거가 있는지 모르겠지만 그저 재미로 해보는 과제니 한번 적용해보겠습니다.
Mrs. Catherine 씨가 타이타닉에 탑승하기 위해 표를 사려고 할때 어떤 plcass의 표를 사야할지 고민하고 있다고 해보겠습니다.
그럼 Mrs. Catherine 씨와 가장 비슷한 환경의 사람들이 구매한 pclass를 기반으로 Mrs. Catherine씨에게 티겟구매를 추천해줄 수 있을 것입니다.
Mrs. Catherine 의 데이터를 Encoder에 통과시킨 후 trainSet의 데이터와 비교해서 가장 가까운 값을 가진 data를 찾습니다.
학습된 Encoder는 Master Michael 씨와 가장 비슷하다고 판단했네요.
Deep Learning 모델들의 한계지만 어떤 근거에서 두명의 데이터가 비슷하다고 판단했는지 정확한 이유를 알 수는 없습니다. 다만 두개의 데이터를 비교해보면 ticket과 fare가 같고 같은 Port에서 탑승하려고 했다는걸 알 수 있네요.
결과값을 비교해보면 두개의 값이 비슷하다고 생각할 수도 있습니다. 실제로 추천하려고 하는 pclass도 동일하고요
두명의 데이터만 보면 ‘친구따라 강남 간다’ 는 옛 속담이 틀리지 않았네요.
그럼 마지막으로 타이타닉 compete의 실제 문제인 생존 예측을 ‘친구 따라 강남 간다’ AutoEncoder 모델을 통해 예측해보겠습니다.
pclass 도 중요한 feature 이니 다시 input feature 로 포함해서 학습시켜 보겠습니다.
pclass 모델을 포함해서 encoder를 학습시킨 이후 동일하게 encoder에 testset을 통과시켜 나온 결과를 train result에서 가장 가까운 값의 survival 결과로 예측해보았습니다.
이후 csv 파일로 생성하여 kaggle API 를 사용해 제출까지 완료하였습니다.
최종 결과는 0.70 ( 정확도 70%) 입니다.
좀 더 정확도를 높이려면 AutoEncoder의 Reconstruction Loss를 낮추기 위한 epoch를 늘려보거나(현재 100 epoch 정도) learning rate 같은 Hyper Para를 바꿔가며 테스트 해볼 수 있겠지만 이 문제는 이미 score가 1인 문제로 score를 더 높이는건 큰 의미 없기 때문에 여기서 추가 진행하지 않습니다.
그래도 ‘친구 따라 강남 간다’ 라는 말이 ML 세계에서도 말도 안되는건 아니네요.
처음 이 과제를 시작할때도 언급했지만 이 과제의 목적은 제가 지금 하고 있는 ML 과제의 방향과 사용중인 모델이 제대로 되고 있는지 다른 데이터로 검증하기 위함이었습니다.
결과적으로 지금 하고 있는 방향과 모델이 잘못된건 아닌거 같아 안도감과 한편으로는 뿌듯함도 있네요.
좀 더 중요한 feature를 추출하고 Loss function 등에 대한 추가 고민으로 모델을 좀더 향상 시킨다면 연말에는 기대했던 결과를 볼 수 있을것 같은 희망이 생기네요
AutoEncoder를 이용한 타이타닉 문제 해결을 마칩니다.
소스는 github에서 https://github.com/sok891111/ML/blob/main/titanic_autoencoder.py