본문 바로가기
Hobby/Hobby_4 - Coding

[자격증] 빅분기 실기 - 6. 실습환경 마지막 연습(D-1)

by 와우멍 2021. 6. 18.

안녕하세요 와우멍입니다.

 

빅분기 실기 벼락치기 마지막 포스팅입니다. 가시죠.


하루만 더 하면 됐는데, 번아웃이 왔는지 오늘 대부분의 시간에 딴짓을 해버렸네요..

대충 내일의 저를 믿고, 종교는 없지만 믿어보는 수 밖에요... ㅠㅠ


3. 제 2유형 : 25점 목표

 합계 60점이 생각보다 타이트하네요... 2유형에서 모델 만드는 것까지에 기본점수가 얼마나 되냐가 제 당락을 좌지우지할 것 같네요.

 예시문제를 보면 여기서는 회귀/분류 딱 이정도만 나오지 않을까 싶네요. 해봤자 평가 정도까지..? 

 Clustering이랑 크롤링은 과감히 접겠습니다. (PCA는 익숙하니 복습만 한 번 할께요)

 

 분류 빅분기 공식 예제 타이타닉으로 연습해봤고 (Logistic과 SVM만 준비!)

 회귀sklearn.datasets.load_boston의 집값 예측 예제bike sharing demand을 한번 준비해보겠습니다.

이 예제들은 나중에.... ㅠㅠ 다시 준비해보지요.... 제발 취미로 할 수 있길...

 따로 준비할 시간이 없어서, 빅분기 실기 공식 예제에서 '총구매액'을 나머지 변수들로 선형회귀하는 모델세우는 것으로 연습해봤습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
train_x = x_train.loc[:,['최대구매액''내점당구매건수','주말방문비율']]
train_y = x_train.loc[:,['총구매액']]
test_x = x_test.loc[:,['최대구매액''내점당구매건수','주말방문비율']]
test_y = x_test.loc[:,['총구매액']]
 
 
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(train_x, train_y)
model.score(train_x, train_y)
 
 
model.coef_ #추정된 모수
model.intercept_ #추정된 상수항
 
y_pred = model.predict(test_x) 
 
import sklearn
mse = sklearn.metrics.mean_squared_error(test_y, y_pred)
r2_score = sklearn.r2_score(test_y, y_pred)
cs

1~4 Line에서 분류가 아닌 회귀 문제가 되도록 임의로 slicing했습니다.

 7~10 Line에서 sklearn의 LinearRegression을 통해 선형회귀 모델을 세웠는데, 방법은 분류모델에서와 완전 같습니다

                     model( ) -> .fit( ) -> score( ) -> predict( )

13~14 Line에서는 선형회귀 결과로 나오는 기울기와 y절편을 출력해봤습니다.

16 Line에서 Test set에 대한 예측값을 계산한 다음

18~20 Line에서 MSE와 R2로 모델을 평가했습니다.

 

데이터도 막 만들었고, 모델도 튜닝을 안해서인지 R2 값이 음수가 나왔습니다.....ㅋㅋㅋㅋ

R2값이 음수가 나온다는 것은, 기본 mean값으로 밀어버린 예측값보다도 예측력이 떨어진다는 의미입니다. 그러니 다시 튜닝해서 양수를 만들어봅시다.


 일단 2유형 목표는 '답안 만들자!!'까지이니까, hyper parameter 튜닝하는 Grid search 같은 녀석은 잠시 제끼겠습니다.

 다만, 일반 Logistic regression이나 Linear regression보다는 성능이 좋다고 알려진 SVM과 XGBoost를 이용한 연습까지만 딱 해보고 마음 내려놓겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pandas as pd 
from xgboost.sklearn import XGBClassifier # 분류
from xgboost.sklearn import XGBRegressor  # 회귀
 
train_x = pd.read_csv('data/X_train.csv'
train_y = pd.read_csv('data/y_train.csv')
test_x = pd.read_csv('data/X_test.csv')
 
train_x['환불금액'= train_x['환불금액'].fillna(0
test_x['환불금액'= test_x['환불금액'].fillna(0)
 
from sklearn.preprocessing import LabelEncoder
LB = LabelEncoder()
LB.fit(train_x['주구매상품'])
train_x['주구매상품'= LB.transform(train_x['주구매상품'])
LB.fit(test_x['주구매상품'])
test_x['주구매상품'= LB.transform(test_x['주구매상품'])
train_x = pd.get_dummies(train_x, columns =['주구매지점'])
 
xgb = XGBClassifier()
xgb.fit(train_x.drop(['cust_id','주구매지점'],axis=1), train_y.drop('cust_id',axis=1))
# print(xgb.predict_proba(test_x.drop(['cust_id','주구매지점'],axis=1)))
print(xgb.score(train_x.drop(['cust_id','주구매지점'],axis=1), train_y.drop('cust_id',axis=1)))
cs

1~3 Line: 여기서는 분류모델을 할거니 XGBClassifier만 사용할 것이지만, Regression도 가능하다는 것을 확인햇씁니다.

5~7 Line: 데이터를 불러오구요,

9~10 Line: (데이터를 확인한 뒤) NaN값을 채워줍니다.

12~18 Line: 명목형 데이터를 LabelEncoder와 One-hot-Encoding을 해주는 부분입니다. 여기서는 일단 다 드랍시키긴 했지만...

20~23 Line: XGBoost도 사용법은 똑같습니다.  model( ) -> .fit( ) -> score( ) -> predict( )

다만, 분류에서는 model.predict_proba( )로 뽑아서 roc-auc로 평가하고 회귀에서는 model.predict로 뽑아서 r2 score나 MSE등의 지표로 평가한다는 게 다를 것 같네요.

 

회귀분석에서의 평가는 아래의 방법들을 사용하면 됩니다. (왠지 이거 1유형에서 나올 수도 있을 것 같네요.)

1
2
3
4
5
6
7
8
9
from sklearn.metrics import r2_score
r2 = r2_score(y, lr.predict(x_2)
 
from sklaern.metrics import mean_absolute_error
MAE = mean_absolute_error(y_test, y_pred)
 
from sklaern.metrics import mean_squared_error
MSE = mean_squared_error(y_test, y_pred)
RMSE = np.sqrt(MSE)
cs

https://cafe.naver.com/sqlpd/21302

 

파이썬 작업형 2코드 짠 거 올려볼게용 roc_auc 0.72로 올랐어요

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

이 분의 코드는 EDA부터 파생변수 설정, 모델의 hyper parameter 튜닝까지 깔끔하게 잘 해놨습니다.

시험장 가기 전에 한번 훑어보시면 좋을 것 같네요 :-)

 

https://g0n1.tistory.com/137?category=943588 

 

빅데이터분석기사 실기 준비 - 분류 모델 11개 비교

import pandas as pd import numpy as np import time from sklearn.model_selection import StratifiedKFold as SKF from sklearn.metrics import roc_auc_score,f1_score,precision_score,accuracy_score X_trai..

g0n1.tistory.com

위 블로그에서는 Default값으로 넣었을 경우에 모델의 성능을 쭉 list-up해놨습니다.

여기서도 보면 대충 XGboost가 좋은 성능을 보여주네여.


 XGboost나 SVM으로 딱 끝내려 하는데, XGboost가 train set에 대해서는 높은 성능을 보여주지만.. test set에 대해서는 그만큼의 수치를 보여주지 못한다는게 조금 걸리네요.

이건 내일 가서 SVM이랑 XGboost 두개 비교해서 해본 다음에.... 보고 결정하려합니다.

그럼 모두 내일 화이팅입니닷. 내일 어떻게든 되어 있겠죠 허허헛

댓글