본문 바로가기
카테고리 없음

머신러닝에서 데이터 전처리가 중요한 이유 🤔

by 구굴글로리 2025. 3. 11.

머신러닝에서 데이터 전처리가 중요한 이유 🤔

머신러닝 모델을 만들기 전에 가장 먼저 해야 할 작업이 무엇일까요? 바로 데이터 전처리입니다. 데이터가 정리되지 않은 상태에서 모델을 학습시키면, 엉뚱한 결과를 얻거나 성능이 낮아질 수 있어요.

데이터 전처리가 중요한 이유는 다음과 같습니다:

노이즈 제거: 잘못된 데이터나 불필요한 데이터를 걸러내야 모델이 더 정확한 패턴을 학습할 수 있어요.
결측값 및 이상값 처리: 데이터가 비어 있거나 너무 튀는 값이 있으면 학습에 방해가 될 수 있어요.
스케일링 & 정규화: 데이터의 크기 차이를 맞춰주어 모델이 학습하기 쉽게 만듭니다.
특성 선택: 의미 없는 특성을 제거하고, 중요한 특성만 남겨 모델의 효율성을 높입니다.
데이터 변환: 범주형 데이터를 숫자로 변환하는 등 모델이 이해할 수 있도록 데이터를 정리해야 해요.

이러한 과정을 거치면, 머신러닝 모델의 정확도가 높아지고, 예측 성능도 좋아집니다. 반면, 데이터 전처리를 소홀히 하면 학습이 잘못되거나 과적합(Overfitting) 문제가 발생할 수 있어요.

💡 TIP: 데이터 전처리는 모델 성능을 최대 20~30%까지 향상시킬 수 있는 중요한 단계예요! 제대로 전처리를 하면 복잡한 모델을 사용하지 않고도 좋은 결과를 얻을 수 있답니다. 😉


결측값 처리 방법 🛠

머신러닝 데이터에는 종종 결측값(Missing Values)이 포함되어 있어요. 예를 들어, 설문조사 데이터를 보면 몇 개의 응답이 비어 있는 경우가 많죠. 결측값을 처리하지 않으면 모델이 데이터를 제대로 학습할 수 없어요.

결측값을 처리하는 대표적인 방법은 다음과 같아요:

방법 설명
삭제(Drop) 결측값이 있는 행이나 열을 삭제하는 방법
평균 또는 중앙값 대체 결측값을 해당 열의 평균값 또는 중앙값으로 채우는 방법
모델 기반 대체 머신러닝 모델을 사용하여 결측값을 예측하는 방법

데이터가 충분하다면 결측값이 있는 행을 삭제하는 방법이 가장 간단해요. 하지만 데이터가 부족하면 평균값이나 중앙값을 사용해 결측값을 채워 넣는 것도 좋은 방법이죠.

⚠️ 주의: 결측값을 무조건 삭제하면 데이터 손실이 발생할 수 있어요! 삭제할지 대체할지는 데이터의 성격을 고려해서 결정해야 합니다.

이상값 제거 방법 🔍

이상값(Outlier)은 다른 데이터와 비교했을 때 너무 크거나 작은 값으로, 머신러닝 모델의 성능을 저하시킬 수 있어요. 예를 들어, 평균 월급을 분석하는 데이터에서 한 사람이 1억 원을 받는다면, 전체 평균이 왜곡될 수 있겠죠?

이상값을 찾고 제거하는 대표적인 방법은 다음과 같아요:

방법 설명
사분위수(IQR) 이용 데이터의 1사분위수(Q1)와 3사분위수(Q3)를 이용하여 범위를 벗어난 이상값을 제거
Z-Score 이용 평균에서 표준편차의 특정 배수 이상 떨어진 데이터를 이상값으로 간주
도메인 지식 활용 해당 데이터의 특성을 고려하여 전문가가 직접 이상값을 판단

일반적으로 **사분위수(IQR) 방법**이 가장 널리 사용됩니다. 이는 데이터의 1사분위수(Q1)와 3사분위수(Q3)를 계산한 후, Q1 - 1.5 * IQR 이하이거나 Q3 + 1.5 * IQR 이상인 값을 이상값으로 간주하는 방식이에요.

또 다른 방법으로 **Z-Score 방법**이 있는데, 평균에서 몇 개의 표준편차만큼 떨어져 있는지를 기준으로 이상값을 판단합니다. 보통 Z-score 값이 **3 이상**이면 이상값으로 간주해요.

💡 TIP: 머신러닝에서는 이상값을 무조건 제거하지 않고, 데이터를 분석한 후 이상값이 정말 잘못된 데이터인지 판단하는 것이 중요해요! 😉


데이터 정규화 및 스케일링 📊

머신러닝 모델은 숫자 데이터의 크기 차이에 민감할 수 있어요. 예를 들어, 키(160~190cm)와 연봉(1,000~10,000만 원)이 같은 데이터에 있으면, 연봉이 상대적으로 훨씬 큰 값이라 모델이 키보다 연봉을 더 중요하게 학습할 수 있어요. 이를 방지하려면 **정규화(Normalization)**와 **스케일링(Scaling)**을 적용해야 해요!

대표적인 방법은 다음과 같습니다:

방법 설명
Min-Max Scaling 데이터를 0~1 사이의 값으로 변환
Standard Scaling (Z-score) 데이터를 평균이 0, 표준편차가 1이 되도록 변환

**Min-Max Scaling**은 데이터 값을 **0~1 사이로 조정**하는 방식이에요. 예를 들어, (X - X_min) / (X_max - X_min) 공식을 사용해 정규화합니다.

반면, **Standard Scaling(Z-score 변환)**은 평균을 0, 표준편차를 1로 맞춰주는 방식이에요. (X - 평균) / 표준편차 공식을 사용해서 데이터를 변환하죠.

⚠️ 주의: 딥러닝에서는 Min-Max Scaling이 자주 사용되며, 일반적인 머신러닝에서는 Standard Scaling이 더 많이 쓰여요! 어떤 방법을 사용할지는 데이터와 모델 특성을 고려해야 합니다.

실전 예제 코드 💡

데이터 전처리를 직접 해보는 것이 가장 빠르게 이해하는 방법이에요! 아래는 **Pandas와 Scikit-learn**을 사용하여 데이터를 전처리하는 실전 예제 코드입니다.


        import pandas as pd
        import numpy as np
        from sklearn.preprocessing import MinMaxScaler, StandardScaler

        # 1. 데이터 생성 (예제 데이터)
        data = {'Age': [25, np.nan, 30, 35, 40, 200],  # 200은 이상값
                'Salary': [50000, 55000, np.nan, 65000, 70000, 1000000]}  # 1000000은 이상값
        df = pd.DataFrame(data)
        print("원본 데이터:\n", df)

        # 2. 결측값 처리 (평균값으로 대체)
        df['Age'].fillna(df['Age'].mean(), inplace=True)
        df['Salary'].fillna(df['Salary'].median(), inplace=True)

        # 3. 이상값 제거 (IQR 방법 사용)
        Q1 = df['Age'].quantile(0.25)
        Q3 = df['Age'].quantile(0.75)
        IQR = Q3 - Q1
        df = df[(df['Age'] >= (Q1 - 1.5 * IQR)) & (df['Age'] <= (Q3 + 1.5 * IQR))]

        # 4. 데이터 정규화 (Min-Max Scaling)
        scaler = MinMaxScaler()
        df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])

        print("전처리된 데이터:\n", df)
    

위 코드를 실행하면, 다음과 같은 작업이 수행됩니다:

  1. 결측값 처리: Age는 평균값으로, Salary는 중앙값으로 채움
  2. 이상값 제거: Age에서 IQR 범위를 벗어난 200을 제거
  3. Min-Max 스케일링: Age와 Salary를 0~1 범위로 변환

💡 TIP: 데이터 전처리는 머신러닝 성능을 좌우하는 중요한 과정이에요! 실전 프로젝트에서 데이터를 분석할 때 꼭 적용해 보세요. 😉


자주 묻는 질문 ❓

결측값 처리는 무조건 해야 하나요?

네, 결측값을 그대로 두면 모델이 제대로 학습되지 않을 수 있어요. 단, 삭제할지 대체할지는 데이터의 특성을 고려해야 합니다.

이상값을 제거하는 게 항상 좋은가요?

항상 그런 것은 아닙니다! 이상값이 중요한 의미를 갖는 경우(예: 사기 탐지, 희귀 질병 분석)라면 제거하면 안 됩니다.

Min-Max 정규화와 Z-score 정규화 중 어떤 걸 써야 하나요?

일반적으로 딥러닝에서는 Min-Max 정규화를 많이 사용하고, 일반 머신러닝에서는 Z-score 정규화를 더 선호합니다.

정규화나 스케일링은 모든 데이터에 적용해야 하나요?

아니요! 범주형 데이터(예: 남/여, 도시 이름 등)에는 적용할 필요가 없어요. 연속형 데이터에만 사용하면 됩니다.

결측값이 너무 많은 경우에는 어떻게 하나요?

결측값 비율이 30~40% 이상이면, 해당 컬럼을 삭제하는 것도 고려할 수 있어요. 또는 머신러닝 모델을 활용해 결측값을 예측할 수도 있습니다.

정규화를 하면 모델 성능이 무조건 좋아지나요?

그렇지는 않아요. 일부 모델(예: 결정 트리, 랜덤 포레스트)은 정규화를 하지 않아도 괜찮습니다. 반면, 로지스틱 회귀나 신경망에서는 정규화가 중요합니다.


#머신러닝, #데이터전처리, #결측값처리, #이상값제거, #데이터정규화, #스케일링, #머신러닝기초, #데이터사이언스, #Python, #Pandas, #ScikitLearn, #AI, #딥러닝, #데이터분석, #인공지능