저번 포스팅에서 데이터 예측 모델의 결과가 좋지 않다는 결론을 내렸습니다. (아래 그림은 결과를 나타냅니다.)
결과가 좋지 않은 이유를 아래와 같이 생각을 했습니다.
따라서, 이번 포스팅에서는 test dataset을 train 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를 변형했습니다.
위의 두 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 기법을 적용하는게 맞는지 등 더 발전 가능한 부분들이 있을 것으로 예상됩니다. (제가 아직 공부중이라 많은 부분이 미숙한 부분이 많습니다.)
다음 포스팅에서는 다른 사람들은 어떻게 해결했는지 혹은 더 나은 방법을 찾아서 공유할 수 있도록 하겠습니다.
감사합니다 :-)