Home 빅분기 실기 작업형 2유형 총정리
Post
Cancel

빅분기 실기 작업형 2유형 총정리

구체적으로 어떤식으로 하는지는 여러번 올려드렸으니 자세한 예시는 다른 게시글을 참고해주시면 됩니다. 그냥 코드없이 말로 설명할려고 합니다.

exmaple

img1 daumcdn

1. 데이터 확인하기

일단 데이터가 들어 왔습니다. 독립(설명)변수와 종속(목적)변수가 무엇인지 파악을 합시다.

1
2
.info()
.describe()

info()의 경우 정보의 양과 어떤 데이터의 형태인지 확인할 수 있습니다. describe()의 경우 데이터의 평균, 표준편차, 백분위 수를 볼 수 있습니다. 그리고 ‘범주형’데이터와 ‘이산형’데이터가 무엇인지 파악을 합니다.

일단 train데이터에서 일단 X(독립변수)와 y(목적변수)를 분리를 하고 시작합시다.

(개인적으로 제출용 파일 summit를 미리 만들어서 test데이터에서 id값정도 만드는 것도 권장합니다)

data type

그리고 내가 예측할 데이터를 보고 필요없는 것으로 판단 되는 것들을 제거합시다. 예를 들면 이름, id 등은 대부분의 경우 예측하는데 방해가 될 것입니다. 그런데 보다가 이산형 데이터라고 하면서 int나 float가 아닌 object가 있다면 astype를 통해서 형변환을 해줍시다. 또는 .unique()를 통해서 수치 값만 있어야 할 것인데 (*7)등의 다른 이상한 값이 들어 있는지 확인을 해봅시다.(지난번 기출 예시) 이산값이 있다면 해당 컬럼을 확인해서 제거하거나 대체를 합시다. iloc나 loc를 이용하면 해당 값에 접근할 수 있습니다.

결측값이 있는지 확인을 해줍시다. 결측값이 있다면 이를 평균으로 대처할 것인가 0으로 반환할 것인가 정해줍시다. 평균을 대처하는게 좋겠다면 표준화를 처리를 하고 fillna를 통해서 0으로 채웁시다. 아니라면 0을 채우고 최대최소스케일을 합시다. 또는 적용하지 않으셔도 됩니다. 본인이 보았을때 데이터가 지나치게 불균형하거나 이상치가 크다면 quantile나 clip를 이용해서 처리하는 것도 좋을 것입니다. test에서도 똑같이 전처리를 합시다. 다만 기준은 train과 동일한 기준으로 해야 합니다.

index를 뽑는 것은 select_dtypes()가 있습니다. exclude=’object’를 사용하면 수치형만 뽑을 수 있겠네요 범주형 데이터의 get_dummies()를 통해서 원핫인코딩도 합시다. 라벨인코딩은 머리에서 지우는걸로 하지만 영 불안하시다면 판다스 팩토라이즈 부분 한번 보시면 됩니다.

feature 선정, 이상치처리, 결측값대체, 원핫인코더 여기 까지 했으면 데이터 전처리가 성공적으로 이루어 졌을 것입니다. 이제 학습을 합시다.

2. 모델 불러오기

데이터는 모두 준비되었다고 가정을 합시다. 그리고 다른모델 쓰지말고 랜덤포레스트사용하는 걸로 합시다.

1
2
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import RandomForestClassifier

문제에서 목표변수 y가 어떤 종류인지 확인을 합시다. 정확한 값을 예측하고 싶다면 회귀를, 어떤 범주를 예측하고 싶다면 분류를 들고와서 학습을 하면 됩니다. 그리고 model.fit(X,y)로 모델을 만드는 것이 끝났습니다.

만약 여러분들이 여기 까지 오셨는데 시간이 충분히 있으시다면 하이퍼파라미터 튜닝정도 해보시면 좋을 것입니다. 시간은 넉넉하다고 가정을 하고 그리드 서치대신 랜덤 서치 한가지만 들고 해봅시다.(시간 오래 걸립니다) 그리고 튜닝한 매개변수를 확인한다음 방금한 하이퍼파라미터 튜닝은 지웁시다. 매개변수를 모델에(선언할때) 적용하시고 다시 학습을 하시고 이제 예측값을 받아볼 차례입니다.

개인적으로는 train데이터를 가지고 split하는 것을 안할 것입니다. 모든 과정이 1분 이내에 이루어지기 때문에 복잡한 방법을 사용하기는 어려우며 스태킹이나 일반화 방법역시 마찬가지로 시간이 오래 걸릴 것으로 예상합니다. 그래서 train데이터에서 다시 한번 테스트 데이터를 나누고 그거 score확인 해봐야 ‘좋게 만들 마땅한 방법’이 별로 없습니다. 그냥 안그래도 데이터도 적은데 그냥 학습 돌리는게 나아보입니다. (지극히 제 개인적인 생각입니다)

다시 정리하면 그냥 모델의 정확도 확인 없이 train데이터로 통째로 학습을 하고 test에 바로 돌려볼겁니다.

model.predict(test)는 어떤 값을 얻을지 구하는 것이고

model.proba_predict(test)는 해당 값이 나올 확률을 구하는 것입니다. 어떤 것을 요구하는지 잘 구분을 해봅시다.

3. 제출 CSV파일 저장하기

그렇게 구한 값으로 앞에서 만든 summit 데이터프레임에다가 넣어주고 제출형식이 맞는지 확인을 하고 csv파일로 저장을하고 수험번호로 파일명을 만들었는지 index=False했는지 꼼꼼하게 확인을 합시다.

그리고 제출하면 끝!

유의사항에 보시면 데이터 전처리, Featrue Engineering, 분류 알고리즘, 초매개변수 최적화, 모형앙상블을 사용하면 좋은 결과를 얻을 수 있다고 하는데 랜덤포레스트가 앙상블 기법중 하나입니다. 저희는 유의사항에 제시된 것들을 모두 사용한 셈입니다.

여러번 말씀드리지만 작업 2유형의 목적은 특별히 우수한 모델을 만들어라!가 아닌 너 전체 과정 도움없이 스스로 해볼 수 있어? 정도라고 생각합니다.

마지막으로 코드를 작성하다가 여기에 대괄호가 들어가는지 소괄호가 들어가는지 헷갈리거나, columns인지 column인지 아니면 대괄호가 두번 들어가는지 한번들어가는지 소소한 부분에서 꼼꼼하게 정리를 해줍시다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.

빅분기 실기 작업형 2유형 총정리

빅분기 실기 복원 문제 Pandas 값 다루는 방법