Hyun's Wonderwall

[AIchemist] 파머완 - CH05. 회귀 | 10. 회귀 실습 - 캐글 주택 가격: 고급 회귀 기법 본문

Study/Python-Machine-Learning

[AIchemist] 파머완 - CH05. 회귀 | 10. 회귀 실습 - 캐글 주택 가격: 고급 회귀 기법

Hyun_! 2023. 11. 14. 12:25

캐글 주택 가격: 고급 회귀 기법 데이터 세트로 회귀 분석을 더 심층적으로 학습해보자

https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/

 

House Prices - Advanced Regression Techniques | Kaggle

 

www.kaggle.com

 

이 데이터는 79개의 변수로 구성되어있고, 미국 아이오와 주의 에임스(Ames) 지방의 주택 가격 정보를 가지고 있다.

각 피처에 대한 설명은 위 링크에 있음

성능 평가는 섹션9와 동일한 RMSLE(Root Mean Squared Log Error)를 기반으로 한다.

가격이 비싼  주택일수록 예측 결과 오류가 전체 오류에 미치는 비중이 높으므로 이것을 상쇄하기 위해 오류 값을 로그 변환한 RMSLE를 이용한다.

 

데이터 사전 처리(Preprocessing)

*이 예제는 데이터 가공을 많이 수행할 예정임. 원본 csv파일 기반의 DataFrame은 보관하고 복사해서 데이터를 가공하자.

//

Target 값은 맨 마지막 칼럼인 SalePrice이다. 데이터 세트의 전체 크기와 칼럼의 타입, 그리고 Null이 있는 칼럼과 그 건수를 내림차순으로 출력해 보겠다.

//code

 

데이터 세트는 1460개의 레코드와 81개의 피처로 구성되어 있으며 피처의 타입은 숫자형은 물론 문자형도 많이 있다

Target을 제외한 80개의 피처중 43개가 문자형이며 나머지가 숫자형임

데이터 양에 비해 Null 값이 많은 피처도 있음

전체 1480개 데이터 중 PoolQC, MiscFeature, Alley, Fence는 1000개가 넘는 데이터가 Null임. Null값이 너무 많은 피처는 드롭하겠음.

회귀 모델을 적용하기 전에 타깃 값의 분포도가 정규 분포인지 보자. 다음 그림에서 볼 수 있듯 데이터 값의 분포가 중심에서 왼쪽으로 치우친 형태로, 정규 분포에서 벗어나 있다.

//

정규 분포가 아닌 결과값을 정규 분포 형태로 변환하기 위해 로그 변환을 적용하자. 먼저 넘파이의 log1p()를 이용해 로그 변환한 결과값을 기반으로 학습한 뒤, 예측 시에는 다시 expm1()으로 추후에 환원하자.

결과값을 로그 변환하고 다시 ㅂ분포도를 살펴보기

//

SalePrice를 로그 변환해 정규 분포 형태로 결과값이 분포함을 확인할 수 있다.

이제 SalePrice를 로그 변환한 뒤 DataFrame에 반영하자

그리고 Null값이 많은 피처인 PoolQC, MiscFeature, Alley, Fence, FireplaceQu는 삭제하겠다. 또한 Id도 단순 식별자이므로 삭제하겠다. LotFrontage는 Null이 259개로 비교적 많으나 평균값으로 대체하겠따. 그리고 나머지 null피처는 Null값이 많지 않으므로 숫자형의 경유 평균값으로 대체하겠다.

위의 로그 변환 및 Null피처의 전처리를 수행해 보자

DataFrame객체의 mean()메서드는 자동으로 숫자형 칼럼만 추출해 칼럼별 평균값을 Series 객체로 변환해준다. 따라서 다음 코드의 DataFrame.fillna(DataFrame.mean())은 결과적으로 Null값인 숫자형 피처만 평균값으로 대체해 준다

//SP로그변환 코드

 

이제 문자형 피처를 제외하면 Null값이 없다.

문자형 피처는 모두 원-핫 인코딩으로 변환 - get_dummies()를 이용! (얘는 자동으로 문자열 피처를 원-핫 인코딩 변환하면서 Null값은 모든 인코딩 값이 0으로 변환되는 방식으로 대체해주므로 변도의 Null값대체 로직이 필요없다. (4개의 칼럼값... 인코딩값 모두 0...?)

원-핫 인코딩 적용시 당연히 칼럼이 증가함. 얼마나 늘어났는지 확인해보자.

피처가 75개->251개로 증가, Null값 가진 피처는 존재 x //여기까지 데이터 세트 기본 가공

 

선형 회귀 모델 학습/예측/평가

데이터 세트 학습과 테스트 데이터 세트로 분할, LinearRegression, Ridge, Lasso 이용해 선형 계열의 회귀모데 ㄹ만들어보자

 

 

RMSLE