데이터수집 -> 데이터 전처리 -> 데이터 모델링 -> 데이터 모형 평가
위 순서로 차근차근 따라가면 된다.
1. 데이터 수집
수집을 위해 pandas 라이브러리를 추가해주고 pd.read_csv 함수를 이용해 데이터를 불러온다.
import pandas as pd
# 데이터 로드
X_test = pd.read_csv("data/X_test.csv")
X_train = pd.read_csv("data/X_train.csv")
y_train = pd.read_csv("data/y_train.csv")
# 데이터 확인
X_train.head()
X_train과 y_train이 원래 각각 나뉘어져 있는 경우에는 위와같이 불러오면 되는데
train데이터에 label 컬럼까지 포함되어 있는 경우에는 아래와 같이 불러오면 된다.
X_train = X_train.drop(['ylabel컬럼이름'], axis=1)
y_train = X_train['ylabel컬럼이름']
이러면 데이터 수집은 완료
2. 데이터 전처리
- 결측치 확인 및 처리 (null 처리)
- 데이터 타입 확인 및 명목형 데이터 변환
위 두가지를 기본으로 해주면 된다.
더 들어가서 전처리 하면 수치형 데이터들도 최소-최대 정규화를 통해 진행하는 등의 전처리가 있을 수 있지만 빅데이터분석기사 실기 시험에서는 안해도 된다.(나중에 몇년 후에는 모르겠지만 당장은 필요 없어보인다)
기본적으로 모델링 돌아가게끔 최소한의 작업만 해줘도 시험보는데는 충분하다.
1) 가장 기초형. get_dummies사용
# 결측치 확인
x_train.isnull.sum()
# 결측치 존재 시 결측치 처리 (평균대체, 0으로 대체, 결측치 삭제 등등)
x_train = x_train.fillna(0) # 예시로 0으로 대체한 것.
# 데이터 타입 확인
x_train.info() # 명목형 변수인 object형을 확인한다.
# 명목형 데이터 변환
# pd.get_dummies함수를 사용하면 굉장히 간단하다
x_train_dummies = pd.get_dummies(x_train)
x_test_dummies = pd.get_dummies(x_test)
# 그럼 자동으로 명목형 변수들이 수치형으로 변환이 된다.
그런데 여기서 주의해야할 점이 있다.
pd.get_dummies는 범주형 데이터가 train과 test데이터에서 각각 같게 나왔을 경우에만 사용가능하다.
즉, x_train데이터와 x_test데이터를 각각 get_dummies처리한 결과의 컬럼수가 동일해야만 그 이후의 모델링 및 평가를 진행할 수 있다. 그게 아니라면 모델링하고 fit하는 부분에서 에러가 발생하게 된다.
그래서 직접 one-hot encoding으로 변환해주는 방법도 알고 있는 것이 좋다.
2) 중급형
# 패키지 import해주고
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown='ignore')
ohe.fit(x_train)
위와 같이 handle_unknown 옵션에 ignore를 사용하면
x_train에 들어있지 않은 범주형 데이터에 대해서는 전부 0처리 하도록 만들어 준다.
즉, x_train과 x_test의 컬럼의 수를 갖게 일치시켜 주는 방법이다.
3. 데이터 모델링
분류, 회귀에 따라 알맞은 것을 사용하면 되는데
제일 만만한 RandomForest를 사용하는 것도 방법이다.
- 분류 -> RandomForestClassifier
- 회귀 -> RandomForestRegressor
from sklearn.model_selection import train_test_split
x_train_1, x_valid, y_train_1, y_valid = train_test_split(x_train, y_train, test_size = 0.2, random_state=23)
# random_state는 아주 중요한 하이퍼파라미터이다. 조절 잘하면 성능지표를 끌어올릴 수 있다.
#분류
rf = RandomForestClassifier()
rf.fit(x_train_1,y_train_1)
y_pred_train = rf.predict(x_train_1)
y_pred_valid = rf.predict(x_valid)
y_pred_test = rf.predict(x_test)
#회귀
rf = RandomForestRegressor()
rf.fit(x_train_1,y_train_1)
y_pred_train = rf.predict(x_train_1)
y_pred_valid = rf.predict(x_valid)
y_pred_test = rf.predict(x_test)
train_test_split을 안한다고 시험점수가 깎이거나 하지는 않는다.
test데이터에 대한 예측을 하기 전 train데이터를 이용해 성능지표를 확인하고 싶어서 하는 것이므로 해도 되고 안해도 되지만 성능지표가 잘 나왔는지, 하이퍼파라미터 튜닝을 통해 성능지표가 개선되는것을 보고 싶다면 하는게 좋다.
4. 데이터 모형 평가
어떤 지표로 평가를 할 것인지는 문제에서 주어질 것이다. 그러므로 문제를 잘 읽고 해당되는 평가지표를 사용하면 된다.
# 분류의 경우 f1_score를 보통 사용한다.
from sklearn.metrics import f1_score, roc_auc_score
print('f1_score:',f1_score(y_train_1, y_pred_train))
print('f1_score:',f1_score(y_valid, y_pred_valid))
print('roc_auc_score:',roc_auc_score(y_train_1, y_pred_train))
print('roc_auc_score:',roc_auc_score(y_valid, y_pred_valid))
위와 같이 했으면 다 끝났다. '실행'을 해보고 에러가 없다 싶으면 x_test데이터도 마찬가지로 위와 같은 방식으로 predict함수 사용하여 예측해주면 된다.
그리고 마지막으로는 엑셀로 만들어서 제출하면 된다.
답안 제출 유의사항은 시험문제에도 잘 나와 있겠지만 .csv파일명의 이름을 뭘로 할 것인지는 시험문제 가이드에 잘 나와있으니 나온 그대로 따라하면 된다.
또한 .csv파일 만들 때 index가 자동으로 생성되는 경우가 있는데 문제에서 index없애는 것이 일반적인 경우이므로index=False를 사용해서 없애주면 된다.
pd.DataFrame({'컬럼명': x_test.ID, 'label컬럼명': y_pred_test}).to_csv('제목.csv', index=False)
이렇게 하면 웬만하면 만점 받을 수 있다. 작업형 2유형이 처음부터 끝까지 다 작성해야하는 부분이라 비전공자의 경우에는 어떻게 공부해야하나 막막할 수가 있는데 step-by-step 각 단계를 차근차근 따라가면 누구나 할 수 있다.
각 단계별로 가장 기본적인 코드들만 외워가도 되니 포기하지 말자.
그럼 화이팅이다.
'IT 이것저것' 카테고리의 다른 글
SQLD:시험팁과 공부방법은 알고가자 (1) | 2023.01.08 |
---|---|
JDBC,JDK,JRE,JVM 의미 및 설명 (2) | 2023.01.07 |
빅데이터분석기사-실기 답안작성팁,실제후기정보 (3) | 2023.01.05 |
빅데이터분석기사-실기 합격후기 문제유형,공부방법,유의사항,꿀팁 (3) | 2023.01.03 |
Ojdbc8.jar 의 NIO옵션과 Interrupt 함수 사용 시 발생하는 오류 (SQL Recoverable Exception:Closed Connection) (3) | 2023.01.02 |
댓글