IT/Note

[Classification] Feature Engineering

김솔샤르 2022. 7. 31. 15:53

Language : Python
Library : NumPy, Pandas, Scikit-learn

좋은 결과를 얻기 위해 모델링에 앞서서 Feature 데이터의 형태를 보고 적절하게 전처리하는 과정이 필요하다.

Data Scaling

  • Feature 데이터의 Scale을 맞추어줌. 데이터의 Feature별로 Scale의 차이가 크다면 정확한 결과를 얻기 어려울 수 있다.
    • Standard Scaler : 평균 0, 분산 1인 정규분포로 변환
    • MinMax Scaler : min = 0, max = 1이 되도록 변환
  • 데이터 분포를 확인하기 위해 시각화 라이브러리, 함수 이용

Encoding

  • 문자열 데이터를 모델이 처리할 수 없으므로 문자열 형식의 데이터를 Number 타입으로 변환 필요
    • Label Encoder : 문자를 숫자로 단순 치환
    • One-Hot Encoder : 0과 1로 이루어진 다수 컬럼으로 표현

Log Transfrom

  • Feature 데이터 분포가 고르지 않고 편향되어 있다면(보통 좌편향) 이를 Log Scale로 변환하여 정규 분포화해줌
  • 이때 그냥 Log를 적용하는 것이 아니라 Log(N+1)을 적용함. (N이 소수가 나올 것에 대한 방어)

Remove Outlier

  • 일정 범위를 벗어난 데이터를 이상치로 보고 제거함
  • 보통 IQR을 사용함(Q3 값에서 Q1 값을 뺀 것)
    • Lowest : Q1 - IQR * weight(보통 1.5), Highest : Q3 + IQR * weight 으로 보고 이 범위를 벗어난 데이터는 제거한다

Over/Under Sampling

  • 데이터가 불균형할때(ex : 신용카드 이상 결제 데이터는 정상 결제에 비하면 극소수)는 단순 우세한 클래스를 택하는 로직을 적용해도 모델 성능이 좋게 나온다. 하지만 열세한 클래스의 재현율이 급격하게 낮아지는 문제가 있음.
  • Known as imbalanced data problem
  • 다수 클래스 데이터에서 일부만 사용하거나(Under sampling), 소수 데이터 클래스들을 증가시키는(Over sampling) 방법이 있음
    • Over sampling with SMOTE : KNN을 사용해서 열세 클래스의 이웃 데이터(우세 클래스)들을 열세 클래스로 변형시키는 방법
반응형