빅데이터분석기사
빅분기 2유형 (1) (분류)
하웅이
2024. 11. 28. 17:38
* 내가보려고만드는 빅데이터분석기사 정리본 ◠‿◠
* 빅데이터분석기사 시험 대비용 코드 (실제 분석보다 단순화)
* 데이터마님 블로그를 참고하여 작성하였습니다.
저 지금 시험 이틀 전 벼락치기입니다 헉헉;
렛츠기릿 ( ੭ ・ᴗ・ )੭🔥⭐
0. 순서
작업형 2유형 분류 문제 풀이 순서는 아래와 같이 고정해놓음 (총 8단계)
- 데이터 불러오기
- 이상치 및 결측치 확인
💥 결측치는 채워넣고, 이상치는 그대로 두기 - 범주형 데이터 더미화
· 라벨인코딩(LabelEncoder) - 순서형 변수
· 원핫인코딩(get_dummies) - 명목형 변수
· 분류모형은 뭘쓰던 상관 없음. 특히 트리기반 모형에선 더더욱 상관없음! - 데이터 분할
- 학습
- 평가
분류모형 평가지표: accuracy_score, f1_score, recall_score, precision_score, roc_auc_score - 예측
트리모형: RandomForestClassifier트리모형이 가장 무난하기 때문. - 제출
1. Baseline Code
8단계에 맞추어 코드를 작성하면 요로케 ~
* (기본 정보) 아래 데이터는 서비스 이탈 유무를 분류하는 데이터입니다.
x_train_data: 6499rows*12columns
y_train_data: 6499rows*2columns
* 즉, 고객(customer_ID)의 이탈여부(Exited)를 예측하는 데이터
## 서비스 이탈 예측 데이터 (분류)
## 고객의 신상 정보 데이터를 통한 회사 서비스 이탈 예측 (종속변수: Exited)
# 1) 데이터 불러오기
import pandas as pd
x_train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/X_train.csv')
y_train = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/y_train.csv')
x_test = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/churnk/X_test.csv')
# 2) 이상치, 결측치 확인 및 삭제
drop_cols = ['CustomerId', 'Surname']
x_train_drop = x_train.drop(columns = drop_cols)
x_test_drop = x_test.drop(columns=drop_cols)
# 3) 범주형 데이터 처리 (더미화)
x_train_dummies = pd.get_dummies(x_train_drop)
x_test_dummies = pd.get_dummies(x_test_drop)
y = y_train.Exited
# 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 RandomForestClassifier
rf = RandomForestClassifier(random_state=52)
rf.fit(x_train, y_train)
# 6) 평가
# auc , 확률이라는 표현있으면 model.predict_proba로 결과뽑고 첫번째 행의 값을 가져오기 model.predict_proba()[:,1]
from sklearn.metrics import accuracy_score, f1_score, recall_score, roc_auc_score, precision_score
pred_xtrain_label = rf.predict(x_train)
proba_xtrain_label = rf.predict_proba(x_train)[:,1]
pred_xval_label = rf.predict(x_val)
proba_xval_label = rf.predict_proba(x_val)[:,1]
print('train_accuaracy:', accuracy_score(y_train, pred_xtrain_label)) # 정확도
print('validation_accuaracy:', accuracy_score(y_val, pred_xval_label))
print('train_f1_score:', f1_score(y_train, pred_xtrain_label)) #f1-score
print('validation_f1_score:', f1_score(y_val, pred_xval_label))
print('train_recall_score', recall_score(y_train, pred_xtrain_label)) #재현율
print('validation_recall_score:', recall_score(y_val, pred_xval_label))
print('train_precision_score:', precision_score(y_train, pred_xtrain_label)) #정밀도
print('validation_precision_score:', precision_score(y_val, pred_xval_label))
print('train_roc_auc_score:', roc_auc_score(y_train, proba_xtrain_label)) #roc곡선아래면적(auc)
print('validation_roc_auc_score:', roc_auc_score(y_val, proba_xval_label))
# 7) 예측
predcit_y_label = rf.predict(x_test_dummies)
proba_y_label = rf.predict_proba(x_test_dummies)[:,1] #예측한 각 클래스에 속할 확률
# 8) 제출
submit = pd.DataFrame()
submit['CustomerId'] = x_test['CustomerId']
submit['Exited'] = predcit_y_label
submit.to_csv("1churnk.csv", index=False)
pd.read_csv("1churnk.csv") #확인용