본문 바로가기
네이버 부스트캠프 AI Tech 7기/Machine Learning Basic

정형 데이터 전처리

by YS_LEE 2024. 8. 23.
반응형

정형 데이터

  • 범주형 데이터: 순서형 / 명목형
  • 수치형 데이터: 이산형 / 연속형

대푯값

  • 평균 / 총합
  • 기댓값 (가중평균)
  • 최빈값
  • 중앙값
  • 사분위값
  • 절사평균

1. 범주형 데이터

집단 간 분석에 용이한 데이터

  • 명목형 데이터
    • 순서 상관없이 항목으로 구분
  • 순서형 데이터
    • 각 값이 우위 등 순서가 존재
    • (수치형과 헷갈린다면 산술 연산이 적용되는지 확인)
    • e.g. 별점 4점은 별점 2점보다 2배 좋은가?

명목형 데이터 전처리

  • Label Encoding
    • sklearn.preprocessing.OrdinalEncoder()
    • 없는 레이블에 대해 미리 전처리 필요
    • [0,1,2] 등으로 라벨링 한다면 자체적인 순서 발생
  • One-Hot Encoding
    • sklearn.preprocessing.OneHotEncoder()
    • 다수 범주가 동시에 포함될 수 있는 경우에도 효율적인 인코딩
    • 변수에 따라 데이터가 커질 수 있어 학습 속도와 퀄리티에 악영향
      • 빈도 기반 범주를 일부 줄이기, 데이터 증강 등을 사용할 수 있음
      • 그러나 이것 역시 long-tail 데이터에 대한 학습 퀄리티 악화될 수 있음
  • Binary Encoding
    1. 레이블링을 우선한다. (0,1,2,3...)
    2. 이를 이진수로 변환한다. (000, 001, 010, ... 111)
    3. 이를 컬럼 데이터로 변환한다 [0, 0, 0] [0, 0, 1]
      범주의 개수가 k개 일때 k < 2^N 을 만족하는 최소 N만큼의 컬럼 생성
    • Pros: 순서 정보를 없애며, 개수가 많은 범주에 대해 효과적
    • Cons: 범주의 의미가 거의 사라짐
  • Embedding
    • 자연어 처리에 있어 적절한 임베딩 모델을 사용
  • Hashing
    • 랜덤 해시 값 사용으로 순서 정보를 없앰
  • 특정 값에 따른 인코딩
    • 해당 범주가 가진 통계값의 사용
    • 예시로 빈도수로 한다면 여자가 30명, 남자가 70명 이라면 => [여자,남자] => [30,70]
    • 표본집단의 통계량과 모집단 다른 경우 치명적
    • 캐글 등에서 테크닉으로 사용할 수 있지만 범용적으로 사용하기엔 어려움

순서형 데이터

  • 순서형 데이터
  • 순환형 데이터

2. 수치형 데이터

구분 1

  • 이산형 데이터: 띄엄띄엄한 정수 형태
  • 연속형 데이터: 연속적인 실수 형태
    구분 2
  • 구간형 데이터: 구간의 값이 중요 (온도, 시간)
  • 비율형 데이터: 원점과의 거리가 중요 (인구수, 횟수, 밀도)

데이터에 대한 해석

  • 왜도 (skewness)
  • 첨도 (Kurtosis)
  • 형태

정규화와 표준화

  • 정규화(Normalization)
    • 데이터 범위를 [0,1] 또는 [-1,1]과 같은 특정 범위로 변환
    • 모든 값에 최솟값을 빼주고, 최댓값에서 최솟값을 뺀 값으로 나눠준다.
  • 표준화(Standardization)
    • 데이터의 평균을 0, 표준편차를 1로 만들어, 데이터를 표준 정규 분포 형태로 변환
    • 각 값에서 평균을 빼주고 표준편차로 나눠준다.

비대칭도 (Skewness)

이미지 출처: https://en.wikipedia.org/wiki/Skewness

  1. 오른쪽으로 치우친 데이터 (Negative Skew)
    • 큰 값의 구간을 작은 값보다 더 효과적으로 작게 만들기
      • Square/Power Transformation: 제곱 변환 또는 거듭 제곱
      • Exponential Transformation: 지수 함수
  2. 왼쪽으로 치우친 데이터 (Positive Skew)
    • 작은 값의 구간을 큰 값보다 더 효과적으로 크게 만들기
      • Log Transformation: 로그 (조건: 0 이상 실수)
      • Square-root Transformation: 제곱근 (조건: 양수)
      • Box-Cox Transformation: 범용적인 Log Transformation 변형 방법론

Box-Cox Transformation

$$
f(x) =
\begin{cases}
\frac{x^\lambda - 1}{\lambda} & \text{if } \lambda \neq 0 \
\log(x) & \text{if } \lambda = 0
\end{cases}
$$

  • 0인 경우, Log 변환
  • 0.5인 경우, 제곱근 변환
  • 1인 경우, 유지
  • -1인 경우. 역수 변환

반응형