728x90
반응형
에어비엔비 가격?
- 평가: R-Squared, MAE, MSE, RMSE, RMSLE, MAPE
- target : price(가격)
- csv파일 생성 : 수험번호.csv (예시 아래 참조)
<답안 예시>
id,price
34323697,238
29927138,183
120362,234
데이터 불러오기와 EDA
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
print(train.shape, test.shape)
train.head(3)
train.isnull().sum()
test.isnull().sum()
#분류는 value_counts()를 쓰지만 회귀는 의미가 없음(데이터가 다 달라서)
#일반적으로는 그래프 모델을 보지만, 빅분귀에서는 사용이 불가능함 그래서 describe를 씀
train['price'].describe()
train.info()
데이터 전처리 & 피처엔지니어링
# 결측치를 발견했으므로 처리해보자
train.nunique()
# name, host_name, last_review, host_id >> 고유의 값으로 각각 너무 많으므로 지워버림
# date값도 결측을 처리하기 어려워서 지워버림
# reviews_per_month -> 0
cols = ['name', 'host_name', 'last_review', 'host_id']
print(train.shape)
train = train.drop(cols, axis=1)
test = test.drop(cols, axis=1)
print(train.shape)
train['reviews_per_month'] = train['reviews_per_month'].fillna(0)
test['reviews_per_month'] = test['reviews_per_month'].fillna(0)
train.isnull().sum()
train = train.drop('id', axis=1)
test_id = test.pop('id')
test.head()
# 범주형 데이터가 3개 있었음 데이터가 꽤 많으므로 라벨인코딩을 하겠음
cols =['neighbourhood_group', 'neighbourhood', 'room_type']
from sklearn.preprocessing import LabelEncoder
for col in cols:
le = LabelEncoder()
train[col] = le.fit_transform(train[col])
test[col] = le.transform(test[col])
train[cols]
검증데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train.drop('price', axis=1), train['price'],
test_size=0.15, random_state=2022)
모델&평가
# 평가
# 평가 방법은 하나라도 알면 그걸 적용해도됨
import numpy as np
from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error
def rmse(y_test, y_pred): #RMSE
return np.sqrt(mean_squared_error(y_test, y_pred))
def rmsle(y_test, y_pred): #RMSLE
return np.sqrt(np.mean(np.power(np.log1p(y_test) - np.log1p(y_pred), 2)))
def mape(y_test, y_pred): #MAPE
return np.mean(np.abs((y_test - y_pred) / y_test)) * 100
R2값은 높은게 좋고, 나머지는 오차이므로 낮은 값이 좋음
# 선형회귀
# R2는 높은게 좋고 , 나머지는 오차이므로 낮은게 좋음
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_tr,y_tr)
pred=model.predict(X_val)
print("r2: ",r2_score(y_val, pred))
print("mae: ",mean_absolute_error(y_val, pred))
print("mse: ",mean_squared_error(y_val, pred))
print("rmse: ",rmse(y_val, pred))
print("rmsle: ",rmsle(y_val, pred))
print("mape: ",mape(y_val, pred))
랜덤포레스트, 리니어, XGB정도는 기억하
#랜덤포레스트
from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor()
model.fit(X_tr,y_tr)
pred=model.predict(X_val)
print("r2: ",r2_score(y_val, pred))
print("mae: ",mean_absolute_error(y_val, pred))
print("mse: ",mean_squared_error(y_val, pred))
print("rmse: ",rmse(y_val, pred))
print("rmsle: ",rmsle(y_val, pred))
print("mape: ",mape(y_val, pred))
# xgb
from xgboost import XGBRegressor
model = XGBRegressor()
model.fit(X_tr,y_tr)
pred=model.predict(X_val)
print("r2: ",r2_score(y_val, pred))
print("mae: ",mean_absolute_error(y_val, pred))
print("mse: ",mean_squared_error(y_val, pred))
print("rmse: ",rmse(y_val, pred))
print("rmsle: ",rmsle(y_val, pred))
print("mape: ",mape(y_val, pred))
# 라쏘
from sklearn.linear_model import Lasso
model = Lasso()
model.fit(X_tr,y_tr)
pred=model.predict(X_val)
print("r2: ",r2_score(y_val, pred))
print("mae: ",mean_absolute_error(y_val, pred))
print("mse: ",mean_squared_error(y_val, pred))
print("rmse: ",rmse(y_val, pred))
print("rmsle: ",rmsle(y_val, pred))
print("mape: ",mape(y_val, pred))
# 릿지
from sklearn.linear_model import Ridge
model = Ridge()
model.fit(X_tr,y_tr)
pred=model.predict(X_val)
print(r2_score(y_val, pred))
print("r2: ",r2_score(y_val, pred))
print("mae: ",mean_absolute_error(y_val, pred))
print("mse: ",mean_squared_error(y_val, pred))
print("rmse: ",rmse(y_val, pred))
print("rmsle: ",rmsle(y_val, pred))
print("mape: ",mape(y_val, pred))
예측 및 csv 제출
pred = model.predict(test)
pred
pd.DataFrame({'id':test_id, 'output':pred}).to_csv("00000.csv", index=False)
pd.read_csv("00000.csv")
728x90
'IT&게임 > 빅데이터분석기사(빅분기)' 카테고리의 다른 글
작업형2 유형 참고(lightBGM-분류/회귀) (0) | 2024.06.18 |
---|---|
[빅분기] 여러가지 에러 케이스 (0) | 2024.06.18 |
빅데이터분석기사 제2유형 : 분류문제 예제1 (0) | 2024.06.07 |
빅데이터분석기사 제2유형 : ⑥ 평가지표 (0) | 2024.06.06 |
빅데이터분석기사 제2유형 : ④ 머신러닝 (분류) (1) | 2024.06.06 |
댓글