범주형 데이터 이진분류
AI 문제 해결 노트 책을 바탕으로 이진분류 실습을 진행했다.
Mar 10, 2023
Learnings
- Subplot, Seaborn을 활용한 이중축 만들기를 다시 한번 공부해볼 수 있었다 but still 어려움
- 순서를 직접 지정해서 범주형 데이터 타입을 바꾸는 방법을 배웠다 (CategoricalDtypes)
- 날짜 데이터의 경우 원핫 인코딩이 아니라 삼각함수 인코딩을 해야할 때도 있다 (순환형 데이터이기 때문) → 시계열 데이터 공부를 해야하는데
데이터 둘러보기(구조 탐색)
파일별 용도 파악
train, test, sample_submission
데이터 양(레코드 수, 피처 수, 전체 용량 등)
- 이진 피처 → 값이 숫자가 아닌 경우 0과 1로 인코딩
- 명목형 피처 → 전체 데이터가 크지 않아 원핫 인코딩
- 순서형 피처 → 고윳값 순서에 맞게 인코딩
CategoricalDtype
- 날짜 피처 → 크고 작음으로 해석되지 않도록 원핫 인코딩 진행
피처 이해(이름, 의미, 데이터 타입, 결측값 개수, 고윳값 개수, 실제값, 데이터 종류 등)
Summary : 결측값은 따로 없고, 범주형으로 이루어진 데이터셋
summary = pd.DataFrame(train.dtypes, columns=['데이터 타입']) summary = summary.reset_index() summary = summary.rename(columns={'index':'피쳐'}) summary['결측값 개수'] = train.isnull().sum().values summary['고유값 개수'] = train.nunique().values summary['첫번째 값'] = train.loc[0].values summary['두번째 값'] = train.loc[1].values
순서형은 고유값 별도 확인
훈련 데이터와 테스트 데이터 차이
- target값 이진 분류 문제
- 훈련, 테스트 데이터셋 모두 동일한 feature가 들어있음
타깃값 : 제출(예측)해야 하는 값
이진 분류 문제
데이터 시각화
각종 시각화
범주형 시각화 - 이진 피처 (타겟값)
- 특정 타깃값이 특정 고유값에 치우쳐져있지 않았는지 확인했으나 고르게 분포되어있었다
범주형 시각화 - 명목형 피처
- 각 항목별로 타겟값 1의 분포가 달라 피처로 활용해볼 수 있음을 확인했다
범주형 시각화 - 순서형 피처
- 순서형 피처는 순서를 재설정해준 후 확인했을 때 우상향하는 모습을 보였다
범주형 시각화 - 날짜 피처
- 삼각함수 인코딩을 할 수 있지만, 원핫 인코딩을 진행했다
피처 파악
- 추가할 피처 : 없음
- 제거할 피처 : 없음
- 새로 생성할 피처 : 없음
이상치 파악
- 해당 피처 처리 방법은? 이상치 없음
베이스라인 모델
피처 엔지니어링
- 원핫 인코딩 적용
평가지표 준비
- ROC AUC
모델 생성 및 훈련
- logistic regression
ROC_AUC: 0.7965
성능 개선
인코딩
- bin_3, 4 : 이진피처 인코딩
- ord_1, 2 : 순서형 수동 인코딩
- ord_3,4,5 : 순서형 알파벳 순서 인코딩 OrdinalEncoder() 사용
- nom_0~9 : 명목형 피처 인코딩 → 원핫 인코딩 적용
- 날짜변수 : 원핫 인코딩 적용
피처 스케일링
- 순서형 피처 min-max 스케일링 적용
하이퍼파라미터 최적화 - GridSearch
%%time - 소요시간 측정
gridsearch_logistic_model :
0.8046
light gbm
제출
- 샘플링하지 않고 train_test_split() 안하고 다시 한번 훈련해주기
Share article