빅데이터분석기사
빅분기 2유형 (2) (회귀)
하웅이
2024. 11. 30. 04:24
* 내가보려고만드는 빅데이터분석기사 정리본 ◠‿◠
* 빅데이터분석기사 시험 대비용 코드 (실제 분석보다 단순화)
* 데이터마님 블로그를 참고하여 작성하였습니다.
0. 순서
작업형 2유형 분류 문제 풀이 순서는 아래와 같이 고정해놓음 (총 8단계)
- 데이터 불러오기
- 이상치 및 결측치 확인하고 변수 정리
💥 결측치는 채워넣고, 이상치는 그대로 두기 - 범주형 데이터 더미화
· 라벨인코딩(LabelEncoder) - 순서형 변수
· 원핫인코딩(get_dummies) - 명목형 변수
· 계산량 문제만 없다면, 회귀에서 원핫인코딩이 안전 - 데이터 분할
- 학습
- 평가
분류모형 평가지표: MSE, RMSE, MAE, MAPE, R^2 - 예측
트리모형: RandomForestRegressor트리모형이 가장 무난하기 때문. - 제출
1. Baseline Code
8단계에 맞추어 코드를 작성하면 요로케 ~
* (기본 정보) 아래 데이터는 학생 성적을 예측하는 데이터입니다.
x_train_data: 478rows*33columns
y_train_data: 678rows*33columns
* 즉, 학생(StudentID)의 성적(G3)을 예측하는 문제
#1 데이터불러오기
import pandas as pd
import numpy as np
x_train = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/studentscore/X_train.csv")
y_train = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/studentscore/y_train.csv")
x_test= pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/studentscore/X_test.csv")
#2 변수정리
#StudentID
x_train = x_train.drop(columns=['StudentID'])
x_test = x_test.drop(columns=['StudentID'])
y = y_train.iloc[:,-1]
#3 더미화
x_train_dummies = pd.get_dummies(x_train)
x_test_dummies = pd.get_dummies(x_test)
#4 분할
from sklearn.model_selection import train_test_split
x_train, x_val, y_train, y_val = train_test_split(x_train_dummies, y, test_size=0.3, random_state=52)
#5 학습
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor()
rfr.fit(x_train, y_train)
#6 평가
y_pred_val = rfr.predict(x_val)
from sklearn.metrics import mean_squared_error, mean_absolute_error, mean_absolute_percentage_error, r2_score
print('mse:', mean_squared_error(y_val, y_pred_val))
print('rmse:', np.sqrt(mean_squared_error(y_val, y_pred_val)))
print('mae:', mean_absolute_error(y_val, y_pred_val))
print('mape:', mean_absolute_percentage_error(y_val, y_pred_val))
print('r2:', r2_score(y_val, y_pred_val))
#7 예측
y_pred = rfr.predict(x_test_dummies)
#8 제출
summit = pd.DataFrame()
summit['G3'] = y_pred
summit.to_csv('summit.csv', index=False)