본문 바로가기

자격증공부/빅데이터분석기사

[빅데이터분석기사][작업형2] 5회 기출문제 풀이(회귀)

320x100

* 퇴근후딴짓 님의 강의를 참고하였습니다. *

반응형

[문제] 중고자동차 가격 예측하기

ㅇ 예측할 값(y): price

ㅇ 평가 : RMSE (Root Mean Squared Error)

ㅇ data : train.csv, test.csv

제출 형식: result.csv파일을 아래와 같은 형식(수치형)으로 제출

ㅇ 답안제출 참고 : pd.read_csv('result.csv') 로 제출 코드 확인

320x100

[풀이]

## 데이터 불러오기
import pandas as pd

train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")

## EDA
# 데이터 크기 확인
train.shape, test.shape
# 샘플 확인 (시험환경에서는 display 대신 print 활용)
display(train.head(3))
display(test.head(3))
train.info()
# 기초 통계값 확인
train.describe()
test.describe()
train.describe(include='O')
test['transmission'].value_counts()
display(train.isnull().sum())
display(test.isnull().sum())
y_train = train.pop("price") ## 학습 데이터에서 타겟컬럼 제거


## 수치형 활용
cols = ['year', 'mileage', 'tax', 'mpg', 'engineSize']
train = train[cols]
test = test[cols]
# 훈련/검증 데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state=2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
# 랜던포레스트 모델 학습(회귀)
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
# rmse 함수정의
from sklearn.metrics import mean_squared_error
def rmse(y_true, y_pred):
    return mean_squared_error(y_true, y_pred)**0.5
rmse(y_val, pred)


## 수치형 + 범주형 활용
# 범주형 데이터는 원핫 인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# 훈련/검증 데이터 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, y_train, test_size=0.2, random_state=2022)
X_tr.shape, X_val.shape, y_tr.shape, y_val.shape
# 랜던포레스트 모델 학습(회귀)
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)
rmse(y_val, pred)

# 최종 예측 및 파일 제출
pred = rf.predict(test)
result = pd.DataFrame({
    'pred':pred
})
result.to_csv("result.csv", index=False)
pd.read_csv('result.csv')

# 최종 확인
y = pd.read_csv("y.csv")
rmse(y, pred)

# 정수형으로 변경
pred2 = pred.astype(int)
rmse(y, pred2)
320x100
반응형