inblog logo
|
hollyisyoon

    범주형 데이터 이진분류

    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

    RSS·Powered by Inblog