머신러닝 전 데이터 전처리 방법
잡학다식의 지식공방

빅데이터 관련 자료/Machine Learning

머신러닝 전 데이터 전처리 방법

carpe08 2024. 1. 22. 18:06

데이터 전처리: 데이터 분석과 머신러닝을 위한 필수 과정

데이터 전처리는 데이터를 분석하거나 머신러닝 모델에 적용하기 전에 데이터를 정리하고 가공하는 과정입니다. 이를 통해 데이터의 품질을 향상시키고 모델의 성능을 극대화할 수 있습니다. 이번 글에서는 데이터 전처리의 주요 방법과 주의할 점을 정리해보겠습니다.


1. 데이터 이해하기

데이터의 특성과 분포를 파악하는 것이 가장 먼저 해야 할 일입니다. 이를 통해 어떤 전처리 과정이 필요한지 판단할 수 있습니다. 데이터 시각화와 기초 통계를 활용하면 데이터의 구조와 이상점을 쉽게 확인할 수 있습니다.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 데이터 로드
df = pd.read_csv("data.csv")

# 데이터 기본 정보 확인
df.info()
print(df.describe())

# 데이터 분포 시각화
sns.histplot(df['feature'], bins=30)
plt.show()

2. 데이터 누락 처리

데이터에는 결측치(Missing Values)가 포함될 수 있습니다. 이를 처리하지 않으면 모델 성능이 저하될 수 있습니다.

# 결측치 확인
print(df.isnull().sum())

# 결측치 대체 (평균값 또는 특정 값으로 채우기)
df.fillna(df.mean(), inplace=True)

필요에 따라 결측치가 포함된 행을 제거할 수도 있습니다.

# 결측치가 있는 행 제거
df.dropna(inplace=True)

3. 이상치 탐지 및 처리

이상치는 데이터 분포에서 벗어난 극단값으로, 모델 학습을 방해할 수 있습니다. 박스플롯을 활용하여 이상치를 시각적으로 확인할 수 있습니다.

sns.boxplot(x=df['feature'])
plt.show()

이상치를 제거하거나 적절한 값으로 대체할 수도 있습니다.

# IQR (사분위 범위) 활용한 이상치 제거
Q1 = df['feature'].quantile(0.25)
Q3 = df['feature'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['feature'] >= lower_bound) & (df['feature'] <= upper_bound)]

4. 범주형 데이터 처리

머신러닝 모델은 숫자 데이터를 처리하므로 범주형 데이터(Categorical Data)는 변환이 필요합니다.

원-핫 인코딩 (One-Hot Encoding)

# 원-핫 인코딩 적용
df = pd.get_dummies(df, columns=['categorical_column'])

레이블 인코딩 (Label Encoding)

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['categorical_column'] = le.fit_transform(df['categorical_column'])

5. 데이터 스케일링: 표준화 vs 정규화

스케일링을 적용하면 모델의 성능이 향상될 수 있습니다.

표준화 (Standardization): 평균을 0, 표준편차를 1로 조정

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])

정규화 (Normalization): 데이터를 0~1 범위로 조정

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])

6. 시계열 데이터 처리

시계열 데이터는 시간에 따른 변화를 고려해야 합니다.

# 날짜 변환 및 특성 추출
df['datetime'] = pd.to_datetime(df['datetime_column'])
df['year'] = df['datetime'].dt.year
df['month'] = df['datetime'].dt.month
df['day'] = df['datetime'].dt.day
df['hour'] = df['datetime'].dt.hour

7. 차원 축소 (PCA)

고차원 데이터를 다룰 때 차원 축소 기법을 활용하면 연산 비용을 줄이고 성능을 향상시킬 수 있습니다.

from sklearn.decomposition import PCA
pca = PCA(n_components=2)
df_pca = pca.fit_transform(df)

8. 데이터 분할 (Train/Test Split)

모델을 학습하기 전에 데이터를 훈련 세트와 테스트 세트로 나누는 것은 필수적인 과정입니다.

from sklearn.model_selection import train_test_split
train_data, test_data = train_test_split(df, test_size=0.2, random_state=42)

9. 텍스트 데이터 처리

자연어 처리(NLP)에서는 텍스트를 전처리하여 분석할 수 있도록 변환해야 합니다.

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import nltk
nltk.download('stopwords')
nltk.download('punkt')

stop_words = set(stopwords.words('english'))
df['text'] = df['text'].apply(lambda x: ' '.join([word for word in word_tokenize(x) if word.lower() not in stop_words]))

10. 이미지 데이터 전처리

이미지 데이터의 경우 크기 조정, 색상 변환 등을 수행할 수 있습니다.

from skimage import io, color, transform

# 이미지 로드 및 크기 조정
img = io.imread("image.jpg")
img_resized = transform.resize(img, (100, 100))

# 이미지 색상 변환 (흑백)
img_gray = color.rgb2gray(img)

결론

데이터 전처리는 분석 및 모델링의 성능을 높이기 위해 필수적인 과정입니다. 데이터를 잘 이해하고 적절한 전처리를 수행하면 모델의 성능을 극대화할 수 있습니다.

요약

✅ 데이터의 특성을 먼저 파악해야 함

✅ 결측치와 이상치를 적절히 처리해야 함

✅ 범주형 데이터는 숫자로 변환해야 함

✅ 스케일링을 통해 데이터 정규화/표준화 적용

✅ 필요에 따라 차원 축소(PCA) 및 시계열 데이터 가공 필요

✅ 훈련-테스트 데이터 분할 필수

✅ 텍스트 및 이미지 데이터는 별도의 전처리 필요

적절한 전처리 과정을 거쳐 최적의 분석 및 모델 성능을 확보하세요! 

320x100
320x100