안녕하세요! GDGoC SSWU Chapter Member 한예원입니다.
저는 개발자를 위한 데이터 전처리 팁을 소개해 드리려고 합니다.
1. 데이터 전처리의 중요성
데이터 전처리는 AI/ML 프로젝트의 성패를 좌우하는 핵심 과정입니다. 아무리 뛰어난 알고리즘이라도 전처리가 제대로 이루어지지 않은 데이터를 사용한다면 성능은 기대에 미치지 못할 가능성이 큽니다. 반면, 잘 처리된 데이터는 복잡한 알고리즘보다도 더 큰 효과를 낼 수 있습니다. 이 글에서는 데이터 전처리의 주요 과정과 실용적인 팁을 공유하려 합니다.
2. 데이터 전처리 단계와 팁
데이터를 탐색하고, 결측값이나 이상치를 처리하여, 필요한 경우 데이터를 변환하거나 새로운 특징을 생성해냅니다. 데이터 전처리의 주요 단계와 각 단계에서 활용할 수 있는 팁, 라이브러리, 코드 예제를 소개해드리겠습니다.
- 데이터 탐색 (EDA, Exploratory Data Analysis)
데이터를 시각화하고 요약 통계를 확인하며, 데이터의 분포와 이상값(outliers)을 파악하는 데 중점을 둡니다.
Tip:
• Pandas를 사용하여 데이터를 탐색하고, Matplotlib와 Seaborn으로 시각화합니다.
• 이상값이나 결측값의 위치를 파악하기 위해 히스토그램, 상자 그림(Box Plot)을 활용합니다.
<예제 코드>
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
데이터 탐색
print(df.describe())
sns.histplot(df['column'])
plt.show()
- 결측값 처리
결측값의 유형
1. MCAR (Missing Completely At Random): 특정 이유 없이 무작위로 누락된 데이터.
2. MAR (Missing At Random): 다른 변수의 값에 따라 결측이 발생.
3. MNAR (Missing Not At Random): 관찰할 수 없는 이유로 결측이 발생.
결측값 처리 방법
• 삭제: 결측값이 적다면 해당 행이나 열을 제거합니다.
• 대체: 평균, 중앙값, 최빈값으로 채우거나 예측 모델을 사용해 값을 대체합니다.
Tip:
• Scikit-learn의 SimpleImputer를 활용하면 효율적으로 결측값을 처리할 수 있습니다.
• 특정 도메인에서는 결측값을 0이나 특정 값으로 채우는 것도 고려할 수 있습니다.
<예제 코드>
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean') # 평균값으로 대체
df['column'] = imputer.fit_transform(df[['column']])
- 데이터 정규화와 스케일링
데이터의 범위를 조정하면 머신러닝 모델이 값의 크기에 영향을 받지 않도록 할 수 있습니다.
방법
- 정규화 (Normalization): 데이터를 [0, 1] 범위로 변환.
- 표준화 (Standardization): 데이터를 평균 0, 표준편차 1로 변환.
Tip:
• 정규화는 Min-Max Scaling을, 표준화는 Z-score Scaling을 사용합니다.
• Scikit-learn의 StandardScaler와 MinMaxScaler를 활용하세요.
<예제 코드>
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df[['column']])
- 이상치 처리
이상치는 데이터의 분포에서 벗어난 값으로, 모델 성능을 떨어뜨릴 수 있습니다.
이상치 탐지 방법
• 시각화: Box Plot, Scatter Plot을 활용합니다.
• 통계적 방법: IQR(Interquartile Range) 또는 Z-score를 사용해 이상치를 탐지합니다.
처리 방법
• 이상치를 제거하거나 적절한 값으로 변환합니다.
Tip :
이상치를 무조건 제거하기보다 데이터의 맥락을 고려하여 결정하세요 !
- 범주형 데이터 처리
머신러닝은 모델 숫자 데이터를 더 잘 처리하기 때문에, 범주형 데이터를 수치로 변환하는 작업이 필요합니다.
방법
- 라벨 인코딩 (Label Encoding): 범주형 데이터를 숫자로 변환.
- 원-핫 인코딩 (One-Hot Encoding): 각 범주를 독립적인 열로 변환.
<예제 코드>
import pandas as pd
One-Hot Encoding
encoded_df = pd.get_dummies(df, columns=['column'])
- 특징 선택 및 생성
특징 선택 : 모델 성능을 높이기 위해 불필요한 변수를 제거하는 작업입니다. 상관관계 분석이나 PCA(주성분 분석)를 활용합니다.
특징 생성 : 여러 열의 데이터를 조합해 새로운 특징을 생성할 수 있습니다. 예를 들어, 날짜 데이터를 연도, 월, 일로 분리하면 더 유의미한 정보를 얻을 수 있습니다.
결론 !
올바른 전처리 과정은 단순히 데이터를 깨끗하게 만드는 것을 넘어, 모델이 더 효율적으로 학습하고 좋은 성능을 발휘할 수 있는 환경을 제공합니다. 개발자는 데이터 전처리의 중요성을 인지하고 꾸준히 실습하며 실무 역량을 키워야 합니다. 또한, 자동화 도구와 라이브러리를 활용해 생산성을 높이는 것도 중요합니다.
감사합니다!