RMSE를 이용해 예측한 집값과 실제 집값의 오차를 계산하여 성능 평가를 진행합니다. 이때 RMSE가 낮을 수록 성능이 좋다는 것을 의미합니다.
target data인 SalePrice가 어떻게 분포하고 있는지를 파악해줍니다.
오른쪽으로 길게 꼬리를 갖는 것을 확인할 수 있습니다.
대부분의 모델들이 정규분포형식으로 되어있지 않으면 제대로된 값을 도출하기 어렵습니다.
따라서 로그변환을 해줍니다.
다시 시각화해보면 정규분포 형태로 변환된 것을 알 수 있습니다.
이상치를 제거해줍니다.
상위 10개의 결측값이 있는 열을 나열하고 결측값의 비율도 도출해줍니다.
결측값을 시각화해주었습니다.
결측값을 처리해줄텐데 아래와 같이 처리해주었습니다.
'Electrical', 'KitchenQual', 'Exterior1st', 'Exterior2nd', 'SaleType' 열의 결측값은 각 열의 최빈값으로 대체합니다.
'MSZoning' 열의 결측값은 'MSSubClass' 열을 기준으로 그룹화하고, 각 그룹 내에서 최빈값으로 대체합니다.
'PoolQC' 열의 결측값은 "None"으로 대체합니다. 데이터 설명에 따르면 'NA'는 "No Pool"을 의미합니다.
'GarageYrBlt', 'GarageArea', 'GarageCars' 열의 결측값은 0으로 대체합니다. 차고가 없으면 차가 없다고 가정하는 것입니다.
'GarageType', 'GarageFinish', 'GarageQual', 'GarageCond' 열의 결측값은 "None"으로 대체합니다. 차고가 없으면 각각의 품질 및 상태에 대한 정보가 없다고 가정하는 것입니다.
'BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2' 열의 결측값은 "None"으로 대체합니다. 지하실이 없으면 각각의 품질, 상태 및 외부 노출 정보가 없다고 가정하는 것입니다.
'LotFrontage' 열의 결측값 처리:
'Neighborhood' 열을 기준으로 그룹화하고, 각 동네(neighborhood) 내에서 'LotFrontage'의 중앙값(median)으로 결측값을 대체합니다. 동네별로 토지 앞면의 길이의 중앙값을 사용하여 결측값을 추정하는 것입니다.
나머지 범주형 특성들과 수치형 특성들의 결측값 처리:
나머지 범주형 특성들은 "None"으로 대체하고, 수치형 특성들은 0으로 대체합니다.
위에 출력했었던 결측값 상위 10개 열과 결측값 비율을 다시 출력해보았습니다. 결측값이 모두 처리된 것을 알 수 있습니다.
feature별로 왜도값을 계산해서 왜도값이 0.5 이상인 것을 출력해줍니다. 왜도값이 높으면 정규분포형식을 띄지 않기 때문에 정규분포형식으로 만들어주어야합니다.
정규분포형식으로 만들어줍니다.
범주형데이터를 인코딩을 통해 수치형데이터로 변환해줍니다.
교차 검증을 해줄 것인데 교차검증은 과적합 방지와 더 정확한 예측을 위해 해주어야합니다.
가장 일반적인 교차 검증 기법 중 하나는 k-겹 교차 검증입니다. 이 기법은 데이터를 k개의 폴드로 나누고 k번의 모델 훈련과 검증을 수행합니다. 각 폴드는 한 번씩 검증 데이터로 사용되며 나머지 폴드들은 훈련 데이터로 사용됩니다.