Kaggle: Machine Learning Competitions (Version 02)

3949 단어 kagglekaggle

저번 포스팅에서 데이터 예측 모델의 결과가 좋지 않다는 결론을 내렸습니다. (아래 그림은 결과를 나타냅니다.)

결과가 좋지 않은 이유를 아래와 같이 생각을 했습니다.

  • train dataset 변형후 모델학습을 진행했는데, test dataset은 그대로 사용

따라서, 이번 포스팅에서는 test dataset을 train dataset을 변형한 것처럼 처리한 후 모델의 성능을 측정해보려합니다.

기존 코드와 달라진 부분은 테스트 데이터를 처리하는 부분 밖에 없습니다. 따라서 바뀐 부분만 작성했습니다.

test dataset 변형

# Log transformation
test_X['GrLivArea'] = np.log(test_X['GrLivArea'])
test_X[test_X['TotalBsmtSF']>0]['TotalBsmtSF'] = np.log(test_X[test_X['TotalBsmtSF']>0]['TotalBsmtSF'])
  • 학습데이터 중에서 GrLivArea, TotalBsmtSF features를 변형했습니다.

    • log transformation으로 변형했습니다.
  • 위의 두 feature 값에 log transformation을 적용합니다.

예측 데이터 변형

테스트 데이터를 변형해서 예측 데이터를 생성했습니다.

따라서 예측 데이터는 반대로 exponential을 활용해서 원래대로 돌려주어야합니다.
(testset -> log(testset) -> model(log(testset)) -> prediction -> exp(prediction))

왜냐하면 학습에 사용된 SalePrice(label)도 log transformation을 적용했기 때문입니다.

즉 모델에 학습에 사용한 데이터는 간단하게 말해서 아래와 같았습니다.

  • feature: log(featuers)

  • label: log(SalePrice)

# make predictions which we will submit. 
test_preds = rf_model.predict(test_X)
test_preds = np.exp(test_preds)

결과

위의 내용을 적용한 결과는 아래와 같습니다.

182906 -> 30380 으로 더 나은 결과를 보여주고 있습니다.

하지만 결과가 아직도 많이 부족합니다.

feature 제대로 선택하지 못한 부분도 있고, random forest 기법을 적용하는게 맞는지 등 더 발전 가능한 부분들이 있을 것으로 예상됩니다. (제가 아직 공부중이라 많은 부분이 미숙한 부분이 많습니다.)

다음 포스팅에서는 다른 사람들은 어떻게 해결했는지 혹은 더 나은 방법을 찾아서 공유할 수 있도록 하겠습니다.

감사합니다 :-)

좋은 웹페이지 즐겨찾기