now is better than never

[쇼핑데이터를 활용한 머신러닝] 4. 정형 데이터 전처리 (1) 본문

Python/[코칭스터디 10기] Beyond AI Basic

[쇼핑데이터를 활용한 머신러닝] 4. 정형 데이터 전처리 (1)

김초송 2023. 5. 4. 19:25

1. 데이터 전처리 (1)

- 데이터 전처리(Preprocessing)

  • 머신러닝 모델에 데이터를 입력하기 위해 데이터를 처리하는 과정
  • EDA 에 따라 달라지는 데이터 전처리
  • 모델, 목적에 따라 달라지는 데이터 전처리
    선형 모델? 트리? 딥러닝?
  • 전처리의 목적 : 머신러닝 모델에 데이터를 입력할 수 있도록 하는 것

 

1)  연속형

- Scaling

  • 데이터 단위 혹은 분포를 변경
  • 선형 기반의 모델 (선형 회귀, 딥러닝 등) 경우 변수들 간의 스케일을 맞추는 것이 필수적
  1. Min Max Scaling
    (x - 최소) / (최대 - 최소)
  2. Standard Scaling
    (x - 평균) / 표준편차 
  3. Robust Scaling
    (x - 중위값) / (3사분위 수  - 1사분위 수)

x 축 : feature, y 축: 계수

 

- Scaling + Distribution

  • 스케일링과 분포 둘 다 바꿈
  • 타겟과 관계가 직접적으로 바꾸어질 수 있음
  1. Log Transformation
    : 한 쪽으로 분포가 치우친 경우 정규분포 형태로 바꾸어줌
      exp 를 취하면 log transformation 반대
  2. Quantile Transformation
    : 값을 uniform 하게 바꾸거나 정규분포화
      log transformation 과 차이점은 어떤 분포가 들어와도 uniform/정규분포에 맞출 수 있음
      상관계수가 -0.74 에서 -0.79 로 상관관계 강해짐

Quantile transformation

- Binning

  • 연속형 변수를 범주형 변수로 바꾸는 방법
  • 넓고 얇은 다봉(봉우리가 여러 개)분포
    -> 트리모델 : overfitting 발생
  • 이런 형태일 때 binning 으로 overffiting 방지, 선형 모델일 때 해석 용이해짐

 

2) 범주형

  • 범주형 변수 : 카테고리를 가지는 변수
    식물의 종, 자동차 종류 등

- Encoding

  • 범주형 변수를 수치형으로 바꾸는 것
  1. One Hot Encodng
    • 변수를 1 과 0 으로 나눔
    • feature 종류에 따라 1 / 0 변수 생성
    • 모델이 변수의 의미를 정확하게 파악
    • 종류가 많을 경우 차원의 저주 문제가 생겨 성능 낮음, 메모리면에서 좋지 않음
  2. Label Encoding
    • 컬럼의 수는 1개로 유지, 각각의 종이 다른 값을 가짐
    • 종마다 다른 번호 -> 하나의 컬럼으로 모든 종 표현
    • 모델이 이 숫자를 순서를 특징으로 인식할 수도 있음
      특히 선형모델에서는 범주형 변수의 값이 순서를 가지고 순서에 맞게 label 했을 때만 사용 가능
  3. Frequency Encoding
    • 해당 변수의 값의 빈도수를 변수의 값으로 사용
  4. Target Encoding
    • 각각의 종이 가지는 target 변수의 평균으로 encoding
    • 각각의 값을 수치로 바꿈으로써 하나의 컬럼에 모든 값을 표현 + 순서의 영향을 받지 않음
  • Frequency / Target
    • 서로 다른 종이 동일한 값으로 encoding 될 수 있음
      미래에 새로 등장하는 종에는 encoding 불가
    • 의미있는 값을 모델에 줄 수 있음
    • target 의 경우 target 값과 직접적으로 연관 -> overfitting 문제 생길 수 있음
  • One-hot, Label
    • 의미없는 숫자로 대체

- Embedding

  • = Entity Embedding
  • Word2Vec 같은 모델을 활용해 Text 데이터를 더 낮은 차원으로 임베딩하는 방법