์์ ๋๋ฒ์ ์ค๊ธฐ๋ ๋ถ๋ฅ๊ฐ ๋์์ง๋ง ํน์ ๋ชจ๋ฅด๋ ํ๊ท ํ๋ ์ฐ์ตํด๊ฐ๋ค. ๋๋ฌด ์ด๋ ต๋ค...!
์์ธกํด์ผํ ์ข ์๋ณ์(ํ๊ฒ)๊ฐ ๋ฒ์ฃผํ์ด๋ฉด ๋ถ๋ฅ, ์์นํ์ด๋ฉด ํ๊ท๋ค. ๋๋ roc_aucํ๊ฐ์งํ๋ฅผ ์ฌ์ฉํ ๊ฑฐ๋ผ๊ณ ๋ช ์๋ผ์์ผ๋ฉด ๋ถ๋ฅ์ด๊ณ , (์์ง ์ถ์ ๋ ์ ์์ง๋ง) r2 score, RMSE ๋ฑ์ ์ ์๋ฅผ ์ธ๊ฑฐ๋ผํ๋ฉด ํ๊ท๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
import pandas as pd
import numpy as np
pd.set_option("display.max_columns", None)
# 1. EDA
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
# (1168, 79) (292, 79) (1168, 2) (292, 2)
print(y_train.columns) # (['Id', 'SalePrice']) -> ๊ฐ๊ฒฉ์ ์์ธกํ๋ผ, ํ๊ท
print(X_train.info()) # float64(3), int64(33), object(43)
print(X_test.info()) # float64(3), int64(33), object(43)
# 2-1. id ์์ผ๋ฉด ๋๋- ์์
# 2-2. ๊ฒฐ์ธก์น ์ฒ๋ฆฌ- ์ผ๋จ 0
print(X_train.isna().sum())
X_train.fillna(0, inplace=True)
X_test.fillna(0, inplace=True)
print(X_train.info())
print(X_test.info())
์ปฌ๋ผ์ด 79๊ฐ๋ก ์๋นํ ๋ฐ์ดํฐ์๋ค. ์ปฌ๋ผ๋ช ๋ ๋ญ์ง ์ถ๋ก ์ด ์๋๋ ์ด๋ฆ์ด์๋ค. ๊ฒฐ์ธก์น๋ ๋ง์๋ค.
๊ฒฐ์ธก์น๋... ๋ฌธ์ํ์ ์ต๋น๊ฐ์ผ๋ก ์ฑ์ฐ๊ณ ์์นํ์ ํ๊ท ์ผ๋ก ์ฑ์ธ๊น? ๋ผ๋ ์ด์์ ๊ฟ๊พธ๊ธด ํ์์ง๋ง
ํ์ค์ ์ผ๋ก ์งง์์ฝ๋๋ฅผ ์จ์ผ ์ํ์๊ฐ์ ์ ์ซ๋ฆด ๊ฑฐ ๊ฐ์์ ์ผ๋จ 0์ผ๋ก ์ฑ์ ๋ค.
# 2-3. ์ธ์ฝ๋ฉ(์ํจ)
print(X_train.describe(include='object'))
X_train = X_train.select_dtypes(exclude=['object']) # (1168, 36)
X_test = X_test.select_dtypes(exclude=['object']) # (292, 36)
print(X_train.info(), X_test.info())
์ธ์ฝ๋ฉํ 43๊ฐ์ ์ปฌ๋ผ๋ช ์ ๋ฆฌ์คํธ๋ก ๋ฐ๋ ๊ฒ๋ ๊ตฌ๊ตฌ์ ์ ํ๋ค๊ณ ์์์์๋ ๊น๋ํ๊ฒ ๋๋ํ๊ธธ๋;; ์ผ๋จ ๋ฐ๋ผํด๋ดค๋ค.
select_dtypes ์ฒ์ ์จ๋ดค๋ค.
ํ๊ท ๋๋ ์๊ด๊ด๊ณ๋ฅผ ๋ด์ 1) ๋ ๋ฆฝ๋ณ์ ๊ฐ ์๊ด์ฑ ๋์ผ๋ฉด ๋ค์ค๊ณต์ ์ฑ ์ฐ๋ ค๋ก ๋๋ 2) ๋ ๋ฆฝ๋ณ์์ ์ข ์๋ณ์ ๊ฐ ์๊ด์ฑ ๋ฎ์ผ๋ฉด ์ํฅ๋ ฅ ๋ฏธ๋ฏธํ๋ค ํ๋จํด ๋๋. ์ด ๋๊ฐ์ง๋ฅผ ํด๋ณผ ์ ์๋๋ฐ, (79*79)์ ํ๋ฅผ ๋์ผ๋ก ๋ณด๊ธฐ ํ๋ค์๋ค;; ํด๋ดค๋๋ฐ '์ด๋๋ถํฐ๋ฅผ ๋๋ํ ๋งํผ ๋์ ์๊ด๊ณ์๋ก ๋ด์ผํ๋๋?'์ ๋ฌธ์ ๊ฐ ์์๊ณ , 0.9์ด๊ณผ์ธ๊ฑธ ๋ง์คํนํด๋ณด๋ ์์๋ค! ๊ทธ๋์ ์ด ๋จ๊ณ์์ ์ค์ง์ ์ผ๋ก ์ป์ ๊ฑด ์๋ค.
์ฌ์ค ์ปฌ๋ผ๊ตฌ๋ถ ์์ด ์ ์ฒด์ปฌ๋ผ ๋ผ๋ฒจ์ธ์ฝ๋ฉ for๋ฌธ ๋๋ฆฌ๊ณ , ๋ฒ์ฃผํ ์ปฌ๋ผ์ด๋ฉด ์ธ์ฝ๋ฉ ๋ ๊ฒ์ด๊ณ (try), ์์นํ์ด๋ฉด ๊ทธ๋ฅ ์ง๋๊ฐ์๋ผ๋(except) ์์ธ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ ์์ธ์ง ์๋ฌ๋ ์๋์ง๋ง ์ ์ฉ๋ ์๋๋ค. ์ ๋จน๊ธธ๋ ํฌ๊ธฐํ๊ณ ๋๋.
## ๋ถ๋ก : ํด๋ดค์ง๋ง ์ป์๊ฒ ์๋ ์ฝ๋ ๋ชจ์##
### ์๊ด๊ด๊ณ
corr = np.abs(X_train.corr())
print(corr[(corr>0.9)]) # ์๊ธฐ์์ ๊ณผ 1.0์ธ ์ ๋ค๋ฐ์ ์์์!
### try-except: ์๋๋ ๋ฐ๋ผํ์ง ๋ง์ธ์
cols = list(X_train.columns)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
try:
for col in cols:
X_train[col] = le.fit_transform(X_train[col])
X_test[col] = le.transform(X_test[col])
except ValueError:
pass
๋ง์ ์ฝ๋๋ก ๋์๊ฐ๋ฉด...
# 2-4. ์ค์ผ์ผ๋ง
from sklearn.preprocessing import RobustScaler
ro = RobustScaler()
cols = list(X_train.columns)
for col in cols:
X_train[col] = ro.fit_transform(X_train[[col]])
X_test[col] = ro.transform(X_test[[col]])
print(X_train.head().T)
print(X_train.describe())
์ค์ผ์ผ๋ง์ ํด๋ ์ต๋๊ฐ์ด ์์ฒญ ํ๋ ํน์ดํ ์ปฌ๋ผ๋ค์ด 7๊ฐ๋ ๋๋ค. (์๋ก ๋ค๋ฉด ์ต์๊ฐ0, ์ต๋น๊ฐ0, ์ค์๊ฐ0์ธ๋ฐ ์ต๋๊ฐ 1543 ์ด๋ฐ์...)์ผ๋จ ๋ ๋๊ณ ์ ์๊ฐ ๋ชป๋ง๋ ํ๋ฉด ๋ค์ ๋์์ค๊ธฐ๋ก ํ๋ค.
# 3. ๊ฒ์ฆ-๋๋๊ธฐ
from sklearn.model_selection import train_test_split
xx_train, x_val, yy_train, y_val = train_test_split(X_train, y_train, train_size=0.9)
print(xx_train.shape, x_val.shape, yy_train.shape, y_val.shape) # (1051, 36) (117, 36) (1051, 2) (117, 2)
# 4-1. ํ์ต
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=500, max_depth=5, random_state=42)
model.fit(X_train, y_train['SalePrice']) # ์ด๊ฑฐ ํท๊ฐ๋ฆฌ๋ฉด ๊ทธ๋ฅ val๋ก ํด...
# 3-1. ๊ฒ์ฆ-์์ธก
pred_val = model.predict(x_val)
# 3-2. ๊ฒ์ฆ-์ ์
from sklearn.metrics import mean_squared_error
RMSE = np.sqrt(mean_squared_error(y_val['SalePrice'], pred_val))
print(RMSE) # 22942.418081449574
# 4-2. X_test์ ์์ธก
pred = model.predict(X_test)
# 5. ์ ์ถํ์ผ
output = pd.DataFrame({'id':x_test['Id'],'Saleprice':pred}).to_csv("์ํ๋ฒํธ.csv", index=False)
๋ด๊ฐ ์ ์ผ ํท๊ฐ๋ คํ๋ ๋ถ๋ถ...! RandomForestRegressor๋ Classifier์ ์ฐ๋ ๋ฒ์ ๋์ผํด์ ๊ด์ฐฎ์๋ค. predict_proba๊ฐ ์๋๋ผ predict๋ฅผ ์จ์ผํ๋ค! ์ํ์์ ์ฃผ๋ ๋ฐ์ดํฐ๋ ์์ผ๋๊น ํ์ ๊ณผ ๋ฌ๋ฆฌ, train_test_split์ ์ ๋ง ๋ด ์ ์๋ง ๋๋ต ์๊ธฐ ์ํด์๋ง ์ฐ๊ณ , ๊ธฐ์กด์ X_train(๊ทธ๋๊น ๋๋ train๊ณผ val์ ๋ค์ ํฉ์น ๊ฑฐ)์ผ๋ก fitํ๊ณ test๋ก ์์ธกํ๋๊ฒ ๋ ์ฑ๋ฅ ์ข์ ๊ฑฐ๋ผ ๋ค์ด์ ๊ทธ๋ ๊ฒ ํด๋ดค๋ค. ๊ทธ๋ฐ๋ฐ y_train์์ ์๊พธ ํ๊ฒ์ปฌ๋ผ๋ง ์ธ๋ฑ์ฑํ๋๊ฑธ ๊น๋จน๋๋ค...
from sklearn.metrics๋ ์์ง ์ ๋ถ๋๋ค.. ํ๊ท๋ฉด ์ฑ์ ์ผ๋ก ์ธ๋งํ ์ ์๋ค์ด ๋ง์๋ฐ..! ํธ์ถ ๋ชปํ๋ฉด ๋ด ์ ์๋ ๋ชจ๋ฅด๊ณ ์ ์ถํ๊ฒ ๋๋๊ฑฐ๋ค
#______์ฑ์ ________
RMSE = np.sqrt(mean_squared_error(y_test['SalePrice'], pred))
print(RMSE) # 28657.429279872926
์ ๊ณฑ๊ทผ์ธ RMSE๋ ๋ฎ์์๋ก ์ข์ ์ฑ๋ฅ์ธ๊ฑด๋ฐ, ์ด์ ๋๋ฉด ๋ฌด๋ํ ๊ฑฐ ๊ฐ๋ค.
๋.
๊ณต๋ถ์๋ฃ https://www.kaggle.com/code/blighpark/t2-4-house-prices-regression
๋๊ธ