상세 컨텐츠

본문 제목

Data Preprocessing(데이터 전처리)

데이터분석/전처리

by 2^7 2024. 9. 18. 13:30

본문

Data Preprocessing(데이터 전처리)란?

데이터 전처리(Data Preprocessing)는 머신러닝과 데이터 분석에서 매우 중요한 과정으로 실제 사용할 데이터는 결측값(missing values), 이상치(outliers), 중복, 불균형 등 다양한 문제를 발생 시킬 수 있는 데이터를 포함하고 있음

이러한 데이터를 그대로 사용할 경우 정확한 예측이나 분석 결과를 기대하기 어려우므로 사전에 문제가 될 수 있는 데이터를 처리하는것이 바로 데이터 전처리

1. Data Preprocessing(데이터 전처리)의 필요성

1-1. 데이터 품질 향상

  • 대부분의 데이터는 수집 과정에서 불완전하거나 오류가 포함될 수 있어 이러한 값들을 제거
    • ex) 설문조사 데이터에서는 응답자가 일부 질문을 건너뛰어 결측값이 발생
    • ex) 센서 데이터는 기계적 오류로 인해 이상치가 포함

1-2. 학습 성능 개선

  • 잘못된 데이터로 모델이 부정확한 패턴을 학습하거나, 불필요한 학습을 하는것을 방지

1-3. 데이터의 일관성 확보

  • 다양한 출처에서 확보한 데이터는 서로 다른 형식을 가질 수 있어 일관된 형식으로 맞추는 작업이 필요

 

2. Data Preprocessing 주요 프로세스

2-1. 데이터 정제

1) 결측값 처리

  • 결측값을 처리하는 방법으로 제거, 평균값, 중앙값, 최빈값 등으로 대체 처리가 있음
import pandas as pd

df = pd.DataFrame({
    'age': [25, 30, None, 22, 28],
    'salary': [50000, 60000, 55000, None, 52000]
})

# 결측값을 열의 평균값으로 대체
df.fillna(df.mean(), inplace=True)
print(df)

2) 이상치 처리

  • 데이터의 일반적인 패턴에서 크게 벗어나는 값
  • 모델에 왜곡된 학습을 유발할 수 있어 이상치를 탐지하고 제거하거나 대체 처리
import numpy as np

# 이상치 제거: z-score가 3 이상인 값은 제거
df = df[(np.abs(df.salary - df.salary.mean()) / df.salary.std()) < 3]

 

3) 중복 데이터 제거

  • 중복된 데이터는 분석 결과에 부정적인 영항을 미칠 수 있음
df.drop_duplicates(inplace=True)

 

2-2. 데이터 변환

데이터를 모델이 처리하기 쉬운 형식으로 변환하는 과정으로 정규화, 스케일링, 로그 변환 등이 있음

1) 정규화(Normalization)

  • 데이터의 범위를 0과 1 사이로 조정하여 특정 값이 너무 큰 영향을 미치지 않도록 하는 과정
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df[['age', 'salary']] = scaler.fit_transform(df[['age', 'salary']])

2) 스케일링(Standardization)

  • 데이터를 평균 0, 표준편차 1로 맞추는 과정
  • 주로 SVM, 로지스틱 회귀 같은 알고리즘에서 사용
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
df[['age', 'salary']] = scaler.fit_transform(df[['age', 'salary']])

 

2-3. 데이터 통합

수집한 여러 데이터를 일관된 형식으로 통합하는 과정

df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Score': [85, 90, 88]})

# ID 기준으로 두 데이터프레임 병합
df = pd.merge(df1, df2, on='ID')

 

2-4. 데이터 축소

모델 학습 속도를 높이고, 불필요한 변수를 제거하여 과적합(overfitting)을 방지하는 과정

from sklearn.decomposition import PCA

pca = PCA(n_components=2)
reduced_data = pca.fit_transform(df[['age', 'salary']])


2-5. 데이터 인코딩

문자열 데이터를 모델에 적합한 숫자 형태로 변환하는 과정으로 원-핫 인코딩(One-hot encoding)과 레이블 인코딩(Label encoding)이 있음

1) One-hot Encoding

  • 카테고리형 데이터를 이진 벡터로 변환하는 방법
pd.get_dummies(df, columns=['gender'])

2) Label Encoding

  • 각 카테고리 값을 숫자로 변환
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
df['gender'] = le.fit_transform(df['gender'])
728x90

관련글 더보기