범주형 데이터 이진분류

AI 문제 해결 노트 책을 바탕으로 이진분류 실습을 진행했다.
Mar 10, 2023
범주형 데이터 이진분류
🔑
Learnings - Subplot, Seaborn을 활용한 이중축 만들기를 다시 한번 공부해볼 수 있었다 but still 어려움 - 순서를 직접 지정해서 범주형 데이터 타입을 바꾸는 방법을 배웠다 (CategoricalDtypes) - 날짜 데이터의 경우 원핫 인코딩이 아니라 삼각함수 인코딩을 해야할 때도 있다 (순환형 데이터이기 때문) → 시계열 데이터 공부를 해야하는데
 

데이터 둘러보기(구조 탐색)


파일별 용도 파악
train, test, sample_submission

데이터 양(레코드 수, 피처 수, 전체 용량 등)
  • 이진 피처 → 값이 숫자가 아닌 경우 0과 1로 인코딩
  • 명목형 피처 → 전체 데이터가 크지 않아 원핫 인코딩
  • 순서형 피처 → 고윳값 순서에 맞게 인코딩 CategoricalDtype
  • 날짜 피처 → 크고 작음으로 해석되지 않도록 원핫 인코딩 진행

피처 이해(이름, 의미, 데이터 타입, 결측값 개수, 고윳값 개수, 실제값, 데이터 종류 등)
Summary : 결측값은 따로 없고, 범주형으로 이루어진 데이터셋
notion image
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
순서형은 고유값 별도 확인
notion image

훈련 데이터와 테스트 데이터 차이
  • target값 이진 분류 문제
  • 훈련, 테스트 데이터셋 모두 동일한 feature가 들어있음

타깃값 : 제출(예측)해야 하는 값
이진 분류 문제

 

데이터 시각화


notion image

각종 시각화
범주형 시각화 - 이진 피처 (타겟값)
  • 특정 타깃값이 특정 고유값에 치우쳐져있지 않았는지 확인했으나 고르게 분포되어있었다
범주형 시각화 - 명목형 피처
  • 각 항목별로 타겟값 1의 분포가 달라 피처로 활용해볼 수 있음을 확인했다
범주형 시각화 - 순서형 피처
  • 순서형 피처는 순서를 재설정해준 후 확인했을 때 우상향하는 모습을 보였다
범주형 시각화 - 날짜 피처
  • 삼각함수 인코딩을 할 수 있지만, 원핫 인코딩을 진행했다

피처 파악
  • 추가할 피처 : 없음
  • 제거할 피처 : 없음
  • 새로 생성할 피처 : 없음

이상치 파악
  • 해당 피처 처리 방법은? 이상치 없음

 

베이스라인 모델


피처 엔지니어링
  • 원핫 인코딩 적용

평가지표 준비
  • ROC AUC

모델 생성 및 훈련
  • logistic regression ROC_AUC: 0.7965

 

성능 개선


인코딩
  • bin_3, 4 : 이진피처 인코딩
  • ord_1, 2 : 순서형 수동 인코딩
  • ord_3,4,5 : 순서형 알파벳 순서 인코딩 OrdinalEncoder() 사용
  • nom_0~9 : 명목형 피처 인코딩 → 원핫 인코딩 적용
  • 날짜변수 : 원핫 인코딩 적용
notion image

피처 스케일링
  • 순서형 피처 min-max 스케일링 적용

하이퍼파라미터 최적화 - GridSearch
%%time - 소요시간 측정
gridsearch_logistic_model : 0.8046
light gbm

제출
  • 샘플링하지 않고 train_test_split() 안하고 다시 한번 훈련해주기

 
 
 
Share article

hollyisyoon