251203_BootCamp Day 33_머신러닝 기초 (2)

2025. 12. 3. 20:26TIL

머신러닝 모델을 만들기 전, 데이터 전처리는 필수적이다

결측치, 이상치, 불균형 데이터를 제대로 처리하고, 의미 있는 파생 변수를 생성해 모델의 성능을 높일 수 있다

https://serokell.io/blog/data-preprocessing

 

1. 데이터 전처리

원시(raw) 데이터에서 불필요하거나 손실이 있는 부분을 처리하고, 분석 목적에 맞는 형태로 만드는 과정

1) 데이터 전처리의 필요성

  • 모델 정확도 및 신뢰도 향상
  • 이상치나 결측치가 많은 상태로 학습하면 예측 성능이 크게 떨어짐
  • 효율적인 데이터 분석과 모델 훈련을 위해 필수적인 단계

2) 제조업에서 데이터 전처리가 필요한 사례

  • 센서가 간헐적으로 측정에 실패해 결측값이 발생
  • 센서 오작동으로 인해 극단적으로 큰 값(이상치)이 기록
  • 정상 제품과 불량 제품의 데이터 분포가 매우 다름(불균형 데이터)

2. 결측치

데이터에서 없는 값

1) 결측치 발생 원인

  • 센서 고장, 측정 오류, 환경적 문제 등
  • 사람이 수기로 입력하는 경우

2) 결측치 처리 기법

  • 삭제 : 결측치가 있는 행 또는 열을 제거
    • 간단하지만 데이터 손실이 발생하므로, 결측치가 매우 소수일 때 적합
  • 대체 : 결측치를 다른 값으로 대체
    • 평균, 중앙값 대체 : 수치형 데이터에서 많이 사용, 데이터 분포 왜곡이 비교적 적음
    • 최빈값으로 대체 : 범주형 데이터에서 사용
    • 예측 모델로 대체 : 회귀/분류 모델을 이용해 결측값을 예측 (이렇게까지 해야 되나..?)
    • 최빈값은 중복으로 발생할 수 있기 때문에, pandas에서 최빈값을 대체할 때는 어떤 최빈값으로 대체할 것인지 정해줘야 한다.

3. 이상치

정상 범주에서 크게 벗어나는 값

1) 이상치 탐지 기법

  • 통계적 기법 : 데이터가 정규분포를 따른다고 가정하고, 평균에서 3σ 범위를 벗어나는 값을 이상치로 간주.
    • 직관적이고 간단하나, 정규성 가정이 틀릴 수 있음
  • Box plot : 사분위수를 이용해 (Q1 - 1.5 * IQR) ~ (Q3 + 1.5 * IQR)을 벗어나는 데이터를 이상치로 간주.
    • 분포 특성에 영향을 적게 받는 장점이 있음
  • 머신러닝 기반 : 이상치 탐지 알고리즘(isolation forest, DBSCAN 등)

2) 이상치 처리 기법

  • 이상치를 단순 제거
  • 이상치 값을 조정(클리핑, Winsorizing 등)
  • 별도로 구분하여 모델에서 제외하거나, 다른 모델 (이상치 예측 모델)로 활용
  • 이상치를 살릴 지 말지 → 도메인 지식이 있어야 함

4. 정규화(Normalization) / 표준화 (Standardization)

모델(특히 거리 기반 알고리즘, 딥러닝 등)에 따라 특정 변수의 스케일이 크게 영향을 미칠 수 있음

ex. 센서 A는 값 범위가 0 ~ 1000, 센서 B는 값 범위가 0 ~ 1이면 A가 모델에 더 큰 영향을 줌

변수에 따라 범위가 다 다른데, 이걸 그대로 머신러닝 모델에 적용하면 값이 큰 변수가 모델에 더 큰 영향을 미침

⇒ 특정 변수에 치우치지 않기 위해 정규화, 표준화를 수행함

1) 정규화

  • MinMaxScaler : 모든 값을 0과 1 사이로 매핑
    • 값의 스케일이 달라도 공통 범위로 맞출 수 있음
    • 딥러닝, 이미지 처리 등에서 입력값을 0~1로 제한해야 하거나 (특히 색[RGB] : 0~255 범위) 각 특성이 동일한 범위 내에 있어야 하는 경우 자주 사용
    • 최소값, 최대값이 극단값(outlier)에 민감 → 극단치가 있으면 대부분의 데이터가 [0, 1] 구간 내부 한쪽에 치우치게 되기 때문에 주의를 요함

2) 표준화

  • StandardScaler : 평균을 0, 표준편차를 1로 만듦
    • 분포가 정규분포에 가깝게 변형됨
    • 정규분포 가정을 사용하는 알고리즘(선형회귀, 로지스틱회귀, SVM 등)에 자주 쓰임
    • 99.9%의 데이터는 -3 ~ 3 사이로 나옴 (정규분포의 ±3σ 범위와 관련)
    • 데이터 분포가 심하게 치우쳐 있으면, 평균과 표준편차만으로는 충분한 스케일링이 되지 않을 수 있기 때문에 주의를 요함 (로그 변환, RobustScaler 등을 추가적으로 고려해야 함)

5. 불균형 데이터 (class imbalance)

불균형 데이터 : 정상 99%, 불량 1%처럼 한 클래스가 극도로 적은 경우

⇒ 모델이 극도로 적은 클래스를 거의 예측하지 못할 가능성이 큼 (편향 발생)

  • Random oversampling
    • 소수 클래스의 데이터를 단순 복제하여 개수를 늘림
  • SMOTE(Synthetic Minority Over-sampling Technique)
    • 소수 클래스를 무작정 복사만 하는 것이 아니라, 비슷한 데이터들을 서로 섞어서 (interpolation) 새로운 데이터 생성
    • 소수 클래스의 데이터와 최대한 비슷하지만, 다양성을 갖는 가상의 데이들을 생성
  • Undersampling
    • 다수 클래스 데이터를 줄이는 방식. 데이터 손실 위험이 있지만, 전체 데이터 균형을 맞출 수 있음
  • 혼합 기법
    • SMOTE와 언더샘플링을 적절히 섞어서 사용

6. 범주형 데이터 변환

  • 원-핫 인코딩(One-hot encoding)
    • 범주형 변수를 각각의 범주별로 새로운 열로 표현, 해당 범주에 해당하면 1, 아니면 0
    • 범주 간 서열 관계가 없을 때 사용하기 좋으나, 범주가 매우 많으면 차원이 커짐 (칼럼 수가 늘어남)
  • 레이블 인코딩 (Label Encoding)
    • 범주를 숫자로 직접 매핑 (S=0, M=1, L=2, XL=3…)
    • 단순하지만, 모델이 숫자의 크기를 서열 정보로 잘못 해석할 수 있음 (순서가 있을 때 사용해야 함)

7. 피처 엔지니어링 (Feature Engineering)

모델 성능 향상을 위해 기존 데이터를 변형, 조합하여 새로운 특성(피처)을 만드는 작업
  • 중요성
    • 복잡한 데이터 구조 안에 존재하는 패턴을 효과적으로 추출해 모델이 쉽게 학습하게 함
  • 제조업 : 센서 데이터 간 시계열적, 물리적 관계를 반영하는 경우가 많음
  • 파생 변수 생성
    • 날짜 파생 변수 : 측정 시간이 2025-02-24 10:35:00이라면, 월, 일, 시, 주말 여부 등으로 분해
    • 수치형 변수 조합 : 온도와 습도가 있을 때, 새로운 피처 온도*습도를 추가
    • 로그 변환, 제곱근 변환 등 : 분표가 매우 치우친 변수(오른쪽 꼬리가 긴 경우)에 로그 변환을 적용하여 정규성에 가까워지도록 변형

8. 머신러닝 데이터 전처리 팁

  • 전처리와 피처 엔지니어링 과정에서의 모든 선택 (결측치 처리 방식, 이상치 제거 기준 등)은 도메인 지식과 데이터 탐색 (EDA) 결과를 함께 고려해야 함
  • 각 단계별로 간단한 모델을 시험적으로 훈련해보고, 성능 변화를 체크하는 것이 좋음