본문 바로가기
IT.데이터

빅데이터 분석기사 실기 - 작업형 2유형 준비 / 2회 기출 변형 해설

by JROK 2023. 6. 22.

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유형 포스팅을 통해 숙지하시면 되겠습니다. 

 

감사합니다.

댓글