Kaggle(캐글) - 주택 가격 예측 초보자 튜토리얼[Hellfer](1)
https://www.kaggle.com/code/jimmyyeung/house-regression-beginner-catboost-top-2/notebook
🔥House Regression: Beginner Catboost (Top 2%)🚀
Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources
www.kaggle.com
위의 글을 보고 참고하여 작성했습니다.
먼저 아래 링크에서 데이터셋을 업로드해 보겠습니다.
https://www.kaggle.com/datasets/shashanknecrothapa/ames-housing-dataset
Ames Housing Dataset
www.kaggle.com
'Ames Housing DataSet'은 기계 학습 및 데이터 분석 분야에서 잘 알려진 데이터세트입니다.
특히 회귀 작업, 주택 가격 예측에 자주 사용됩니다.
Number of Instances - 2,930개의 인스턴스 또는 관측값으로 구성됩니다.
Number of Features - 주거용 부동산의 다양한 측면을 설명하는 79개의 다양한 특징 또는 변수가 있습니다.
Target Variable - 데이터 세트의 대상 변수는 주택 판매 가격을 나타내는 'SalePrice'입니다.
Data Types - 수치형 및 범주형 변수가 모두 포함됩니다.
파일은 노트북에서 input칸에서 업로드를 누르고 해당 'Ames Housing DataSet'을 다운로드하여 직접 해도 되고 Add input을 통해 하셔도 됩니다.
기존의 COMPETITIONS파일의 House Prices - Advanced Regression Techniques의 train.csv를 사용해도 무관하지만 정확도를 높이기 위해서 위의 파일을 업로드했습니다.
전체 순서는 다음과 같습니다.
1. 라이브러리 임포트 : 데이터 분석, 전처리, 모델링에 필요한 라이브러리들을 임포트 합니다.
2. 데이터 로드
3. EDA(탐색적 데이터 분석)
- 데이터의 정보 확인, 결측치 확인, 기초 통계량 확인, 상관관계 히트맵 등
4. 데이터 전처리
- 훈련 데이터와 검증 데이터를 분리, 스케일링 수행, 결측치 처리
5. 모델링
6. 예측 및 제출
첫 번째 순서로 관련 모듈을 임포트 해보겠습니다.
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
# Input data files are available in the read-only "../input/" directory
# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using "Save & Run All"
# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session
/kaggle/input/ameshousing-csv/AmesHousing.csv
/kaggle/input/house-prices-advanced-regression-techniques/sample_submission.csv
/kaggle/input/house-prices-advanced-regression-techniques/data_description.txt
/kaggle/input/house-prices-advanced-regression-techniques/train.csv
/kaggle/input/house-prices-advanced-regression-techniques/test.csv
# 데이터 시각화를 위한 라이브러리
import seaborn as sns
import matplotlib.pyplot as plt
# 통계 분석을 위한 라이브러리
from scipy.stats import skew, norm
import scipy.stats as stats
import statsmodels.api as sm
# 머신러닝 모델 학습 및 평가를 위한 라이브러리
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.neighbors import KNeighborsRegressor
# XGBoost와 CatBoost 모델
import xgboost as xgb
from catboost import Pool
from catboost import CatBoostRegressor
# 결측치 시각화를 위한 라이브러리
import missingno as msno
그래프를 인라인으로 출력하기 위한 명령어
%matplotlib inline
파일 이름을 찾기 어렵다면 오른쪽 파일 누르고 copy 해서 변수명 = pd.read_csv(' ')에 붙여 넣기 하면 됩니다.
train = pd.read_csv('/kaggle/input/ameshousing-csv/AmesHousing.csv')
test = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')
train.info() 함수를 통해 AmesHousing의 데이터프레임 구조와 내용을 파악해 보겠습니다.
train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2930 entries, 0 to 2929
Data columns (total 82 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Order 2930 non-null int64
1 PID 2930 non-null int64
2 MS SubClass 2930 non-null int64
3 MS Zoning 2930 non-null object
4 Lot Frontage 2440 non-null float64
5 Lot Area 2930 non-null int64
6 Street 2930 non-null object
7 Alley 198 non-null object
8 Lot Shape 2930 non-null object
9 Land Contour 2930 non-null object
10 Utilities 2930 non-null object
11 Lot Config 2930 non-null object
12 Land Slope 2930 non-null object
13 Neighborhood 2930 non-null object
14 Condition 1 2930 non-null object
15 Condition 2 2930 non-null object
16 Bldg Type 2930 non-null object
17 House Style 2930 non-null object
18 Overall Qual 2930 non-null int64
19 Overall Cond 2930 non-null int64
20 Year Built 2930 non-null int64
21 Year Remod/Add 2930 non-null int64
22 Roof Style 2930 non-null object
23 Roof Matl 2930 non-null object
24 Exterior 1st 2930 non-null object
25 Exterior 2nd 2930 non-null object
26 Mas Vnr Type 1155 non-null object
27 Mas Vnr Area 2907 non-null float64
28 Exter Qual 2930 non-null object
29 Exter Cond 2930 non-null object
30 Foundation 2930 non-null object
31 Bsmt Qual 2850 non-null object
32 Bsmt Cond 2850 non-null object
33 Bsmt Exposure 2847 non-null object
34 BsmtFin Type 1 2850 non-null object
35 BsmtFin SF 1 2929 non-null float64
36 BsmtFin Type 2 2849 non-null object
37 BsmtFin SF 2 2929 non-null float64
38 Bsmt Unf SF 2929 non-null float64
39 Total Bsmt SF 2929 non-null float64
40 Heating 2930 non-null object
41 Heating QC 2930 non-null object
42 Central Air 2930 non-null object
43 Electrical 2929 non-null object
44 1st Flr SF 2930 non-null int64
45 2nd Flr SF 2930 non-null int64
46 Low Qual Fin SF 2930 non-null int64
47 Gr Liv Area 2930 non-null int64
48 Bsmt Full Bath 2928 non-null float64
49 Bsmt Half Bath 2928 non-null float64
50 Full Bath 2930 non-null int64
51 Half Bath 2930 non-null int64
52 Bedroom AbvGr 2930 non-null int64
53 Kitchen AbvGr 2930 non-null int64
54 Kitchen Qual 2930 non-null object
55 TotRms AbvGrd 2930 non-null int64
56 Functional 2930 non-null object
57 Fireplaces 2930 non-null int64
58 Fireplace Qu 1508 non-null object
59 Garage Type 2773 non-null object
60 Garage Yr Blt 2771 non-null float64
61 Garage Finish 2771 non-null object
62 Garage Cars 2929 non-null float64
63 Garage Area 2929 non-null float64
64 Garage Qual 2771 non-null object
65 Garage Cond 2771 non-null object
66 Paved Drive 2930 non-null object
67 Wood Deck SF 2930 non-null int64
68 Open Porch SF 2930 non-null int64
69 Enclosed Porch 2930 non-null int64
70 3Ssn Porch 2930 non-null int64
71 Screen Porch 2930 non-null int64
72 Pool Area 2930 non-null int64
73 Pool QC 13 non-null object
74 Fence 572 non-null object
75 Misc Feature 106 non-null object
76 Misc Val 2930 non-null int64
77 Mo Sold 2930 non-null int64
78 Yr Sold 2930 non-null int64
79 Sale Type 2930 non-null object
80 Sale Condition 2930 non-null object
81 SalePrice 2930 non-null int64
dtypes: float64(11), int64(28), object(43)
memory usage: 1.8+ MB
이름의 공백을 제거하고 'Order', 'PID' 열을 삭제해 보겠습니다.
#열 이름에서 공백을 제거
train.columns = train.columns.str.replace(' ', '')
# 'Order', 'PID' 열을 삭제
train = train.drop(['Order','PID'], axis = 1)
train
train.descibe() 함수를 통해 기술 통계 정보를 알아보겠습니다.
- count : 값의 개수, mean : 평균, std : 표준 편차, min : 최솟값, 25% : 1 사분위수, 50% : 중앙값, 75% : 3 사분위수, max : 최댓값
train.describe()
test.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1459 entries, 0 to 1458
Data columns (total 80 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Id 1459 non-null int64
1 MSSubClass 1459 non-null int64
2 MSZoning 1455 non-null object
3 LotFrontage 1232 non-null float64
4 LotArea 1459 non-null int64
5 Street 1459 non-null object
6 Alley 107 non-null object
7 LotShape 1459 non-null object
8 LandContour 1459 non-null object
9 Utilities 1457 non-null object
10 LotConfig 1459 non-null object
11 LandSlope 1459 non-null object
12 Neighborhood 1459 non-null object
13 Condition1 1459 non-null object
14 Condition2 1459 non-null object
15 BldgType 1459 non-null object
16 HouseStyle 1459 non-null object
17 OverallQual 1459 non-null int64
18 OverallCond 1459 non-null int64
19 YearBuilt 1459 non-null int64
20 YearRemodAdd 1459 non-null int64
21 RoofStyle 1459 non-null object
22 RoofMatl 1459 non-null object
23 Exterior1st 1458 non-null object
24 Exterior2nd 1458 non-null object
25 MasVnrType 565 non-null object
26 MasVnrArea 1444 non-null float64
27 ExterQual 1459 non-null object
28 ExterCond 1459 non-null object
29 Foundation 1459 non-null object
30 BsmtQual 1415 non-null object
31 BsmtCond 1414 non-null object
32 BsmtExposure 1415 non-null object
33 BsmtFinType1 1417 non-null object
34 BsmtFinSF1 1458 non-null float64
35 BsmtFinType2 1417 non-null object
36 BsmtFinSF2 1458 non-null float64
37 BsmtUnfSF 1458 non-null float64
38 TotalBsmtSF 1458 non-null float64
39 Heating 1459 non-null object
40 HeatingQC 1459 non-null object
41 CentralAir 1459 non-null object
42 Electrical 1459 non-null object
43 1stFlrSF 1459 non-null int64
44 2ndFlrSF 1459 non-null int64
45 LowQualFinSF 1459 non-null int64
46 GrLivArea 1459 non-null int64
47 BsmtFullBath 1457 non-null float64
48 BsmtHalfBath 1457 non-null float64
49 FullBath 1459 non-null int64
50 HalfBath 1459 non-null int64
51 BedroomAbvGr 1459 non-null int64
52 KitchenAbvGr 1459 non-null int64
53 KitchenQual 1458 non-null object
54 TotRmsAbvGrd 1459 non-null int64
55 Functional 1457 non-null object
56 Fireplaces 1459 non-null int64
57 FireplaceQu 729 non-null object
58 GarageType 1383 non-null object
59 GarageYrBlt 1381 non-null float64
60 GarageFinish 1381 non-null object
61 GarageCars 1458 non-null float64
62 GarageArea 1458 non-null float64
63 GarageQual 1381 non-null object
64 GarageCond 1381 non-null object
65 PavedDrive 1459 non-null object
66 WoodDeckSF 1459 non-null int64
67 OpenPorchSF 1459 non-null int64
68 EnclosedPorch 1459 non-null int64
69 3SsnPorch 1459 non-null int64
70 ScreenPorch 1459 non-null int64
71 PoolArea 1459 non-null int64
72 PoolQC 3 non-null object
73 Fence 290 non-null object
74 MiscFeature 51 non-null object
75 MiscVal 1459 non-null int64
76 MoSold 1459 non-null int64
77 YrSold 1459 non-null int64
78 SaleType 1458 non-null object
79 SaleCondition 1459 non-null object
dtypes: float64(11), int64(26), object(43)
memory usage: 912.0+ KB
test에서 'Id' 열을 삭제하고, axis = 1은 열을 삭제하겠다는 의미입니다.
test.drop(['Id'], axis=1, inplace=True)
test
두 개의 데이터프레임인 train과 test를 합쳐서 train_test로 만드는 명령어로, ignore_index는 원래의 인덱스를 무시하고 새로운 인덱스를 생성하겠다는 의미입니다.
train_test = pd.concat([train, test], axis=0, ignore_index=True)
train_test
msno.matrix() 함수는 결측값을 시각화하는 데 사용됩니다.
이 함수는 데이터프레임에서 결측값의 패턴을 보여주는 매트릭스 플롯을 생성합니다.
이를 통해 결측값을 한눈에 파악할 수 있습니다.
msno.matrix(train_test)
train_test 데이터프레임에서 숫자형 및 범주형 features를 분리하여 리스트로 저장
numerical_features = train_test.select_dtypes(include = [int, float]).columns.tolist()
categorical_features = train_test.select_dtypes(include = 'object').columns.tolist()