https://www.datamanim.com/dataset/practice/ex2.html
이 포스팅은 빅데이터 분석기사 2회 기출 변형 - 작업형 2유형을 토대로 작업형 2유형을 대비해보겠습니다.
참고로 위의 링크에 있는 데이터마님 페이지에서 문제를 가져와보았습니다.
나와있는 해석이 아닌 더 쉬운 풀이로 풀어보겠습니다.
1. 문제 해석
- 고객 구매 데이터를 사용해서 고객이 주문한 물품이 제 시간에 도착여부(Reached.on.Time_Y.N) 예측
- X_train.csv, y_train.csv : 학습 및 학습평가에 사용하는 파일
- X_test.csv : 제출용 데이터 생성에 사용하는 파일
- roc_score를 사용하여 평가
- 아래의 형식으로 submission수험번호.csv 로 저장
- Reached.on.Time_Y.N은 제 시간에 도착할 확률
-> 결과적으로 제 시간에 도착할 확률인 Y, N로 구분하는 분류문제이다.
2. 본격적인 쉽고 단순한 문제 해설
1. 첫째로, 분류 문제에 맞게 사용 라이브러리를 먼저 import 해준다. 또한 df.head와 같이 데이터를 볼 때, display가 잘 되도록 데이터 보여지는 설정과 데이터를 로드해준다.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
#데이터 보여지기 위한 설정
#데이터가 많은경우 모두 출력 안되고 ... 으로 생략해서 출력됨.
pd.set_option('display.max_rows',500) #출력할 max row를 지정
pd.set_option('display.max_columns',20) #출력할 max columns를 지정
pd.set_option('display.float_format', '{:.4f}'.format) #출력 format 지정 - 소수점아래 4자리까지
#데이터 로드
X = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/shipping/X_train.csv")
Y = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/shipping/y_train.csv")
X_submission = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/shipping/X_test.csv")
#print(X.shape, Y.shape, X_submission.shape) # 데이터 shape을 확인해본다.
2. 데이터 로드가 완료되었으면 분류문제를 풀기 위한 평가함수를 불러온다.
def get_scores(model, x_train, x_test, y_train, y_test):
A = model.score(x_train, y_train) # accuracy
B = model.score(x_test, y_test) # accuracy
y_pred = model.predict(x_test)
C = f1_score(y_test, y_pred)
y_proba = model.predict_proba(x_test)[:, 1]
D = roc_auc_score(y_test, y_proba)
return f'ACC: {A:.4f} {B:.4f} F1: {C:.4f} AUC: {D:.4f}'
3. 데이터 전처리를 하기 위한 작업을 실시한다. 전처리 작업 후에는 테스트를 진행하고 파일을 형식에 맞게 제출한다.
# 1. X, X_submission 합치고 간단한 전처리
dfX = pd.concat([X, X_submission])
dfXF = pd.get_dummies(dfX)
#print(dfXF.nunique()) #nunique 확인을 통해 컬럼 값이 1개인 것을 제거해준다.
dfXF = dfXF.drop(columns=['ID', 'Gender_F']) #필요없는 변수 제거해준다.
# 2. 스케일링 작업
dfXF = pd.DataFrame(MinMaxScaler().fit_transform(dfXF))
# 3. X_use, X_submission 분리
X_use = dfXF.iloc[:6599, :] # X.shape이 (6599, 11) 이였음.
X_submission = dfXF.iloc[6599:, :]
Y_use = Y['Reached.on.Time_Y.N']
#print(X_use.shape, Y.shape, X_submission.shape)
#X_use.info()
# 4. train, test 분리
temp = train_test_split(X_use, Y_use, test_size = 0.2, stratify=Y_use, random_state=1234)
x_train, x_test, y_train, y_test = temp
# 5.모델링, 평가
model1 = DecisionTreeClassifier(max_depth=3, random_state=1234)
model1.fit(x_train, y_train)
print(get_scores(model1, x_train, x_test, y_train, y_test))
# 6. 제출준비 및 제출
submission = pd.DataFrame()
submission['NY'] = model1.predict_proba(X_submission)[:, 1]
submission.to_csv('수험번호.csv', index=False)
# 7.. 제출파일 확인
#temp = pd.read_csv('수험번호.csv')
#print(temp.shape)
#print(temp.head())
모델링, 평가는 이전 작업형 2유형 포스팅을 통해 숙지하시면 되겠습니다.
감사합니다.
'IT.데이터' 카테고리의 다른 글
빅데이터 분석기사 실기 - 작업형 1유형 준비 / 2회, 3회, 4회, 5회 기출 변형 핵심 코드 공유 (0) | 2023.06.22 |
---|---|
빅데이터 분석기사 실기 - 작업형 2유형 준비 / 평가 함수, 사용 라이브러리 import (0) | 2023.06.20 |
빅데이터 분석기사 실기 - 작업형 3유형 준비 / 카이제곱, 피셔의 정확 검정 (Fisher's Exact Test), 비모수 검정 (0) | 2023.06.20 |
빅데이터 분석기사 실기 - 작업형 3유형 준비 / t-test, ANOVA (0) | 2023.06.19 |
빅데이터 분석기사 실기 - 작업형 3유형 준비 / 예상문제 풀이 (0) | 2023.06.19 |
댓글