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

Pandas로 배우는 파이썬의 원 핫 인코딩 기법

by excel-master 2025. 4. 3.
반응형
Pandas로 배우는 파이썬의 원 핫 인코딩 기법

데이터 과학과 머신러닝의 세계에서 원 핫 인코딩(One-Hot Encoding)은 범주형 변수를 수치형 변수로 변환하는 중요한 기법입니다. 이 기법은 특히 Pandas와 함께 사용할 때 강력한 도구가 될 수 있습니다. 이번 글에서는 원 핫 인코딩에 대한 5가지 기법을 소개하고, 실용적인 팁과 사례를 통해 이해를 돕겠습니다.

1. 기본 원 핫 인코딩

원 핫 인코딩의 가장 기본적인 형태는 Pandas의 get_dummies() 함수를 사용하는 것입니다. 이 함수는 범주형 데이터를 자동으로 인코딩하여 새로운 데이터프레임을 생성합니다. 예를 들어, 다음과 같은 데이터가 있을 때:

이름 과일
철수 사과
영희 바나나
민수 사과
수진 체리

다음과 같이 인코딩할 수 있습니다:

import pandas as pd

data = {'이름': ['철수', '영희', '민수', '수진'],
        '과일': ['사과', '바나나', '사과', '체리']}
df = pd.DataFrame(data)
one_hot = pd.get_dummies(df['과일'])
df = df.join(one_hot)
print(df)

이 결과는 다음과 같습니다:

이름 과일 사과 바나나 체리
철수 사과 1 0 0
영희 바나나 0 1 0
민수 사과 1 0 0
수진 체리 0 0 1

2. 특정 범주만 인코딩하기

때때로 모든 범주가 필요하지 않을 수 있습니다. 이 경우, get_dummies()columns 매개변수를 사용하여 특정 열만 인코딩할 수 있습니다. 예를 들어:

one_hot = pd.get_dummies(df['과일'], columns=['과일'], drop_first=True)

이렇게 하면 첫 번째 범주가 자동으로 제외되어 다중 공선성을 피할 수 있습니다. 이 기법은 모델의 성능을 높이는 데 유용합니다.

3. 사용자 정의 원 핫 인코딩

Pandas의 기본 기능을 넘어, apply() 함수를 사용하여 더 복잡한 인코딩 로직을 구현할 수 있습니다. 예를 들어, 특정 조건에 따라 인코딩을 다르게 할 수 있습니다:

def custom_encoding(fruit):
        if fruit == '사과':
            return [1, 0, 0]
        elif fruit == '바나나':
            return [0, 1, 0]
        else:
            return [0, 0, 1]

df[['사과', '바나나', '체리']] = df['과일'].apply(custom_encoding).tolist()

이렇게 하면 사용자가 정의한 조건에 따라 인코딩된 결과를 얻을 수 있습니다.

4. 다중 인코딩

원 핫 인코딩을 여러 열에 동시에 적용할 수 있습니다. pd.get_dummies()를 여러 번 사용할 필요 없이 한번에 처리할 수 있습니다:

data = {'이름': ['철수', '영희', '민수', '수진'],
        '과일': ['사과', '바나나', '사과', '체리'],
        '색상': ['빨강', '노랑', '빨강', '초록']}
df = pd.DataFrame(data)
one_hot = pd.get_dummies(df, columns=['과일', '색상'])

여기서 각각의 범주형 변수에 대해 원 핫 인코딩이 진행됩니다. 이 방법은 복잡한 데이터셋을 다룰 때 매우 유용합니다.

5. 원 핫 인코딩 후 스케일링

원 핫 인코딩을 완료한 후, 스케일링을 통해 모델의 성능을 향상시킬 수 있습니다. StandardScaler 또는 MinMaxScaler와 같은 스케일러를 사용할 수 있습니다:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
scaled_data = scaler.fit_transform(df[['사과', '바나나', '체리']])

이렇게 하면 데이터의 분포를 표준화하여 모델 학습에 더 효과적입니다.

실용적인 팁 5가지

1. 결측치 처리 후 인코딩

원 핫 인코딩을 수행하기 전에 결측치를 처리하는 것이 중요합니다. 결측치를 적절히 처리하지 않으면 인코딩된 데이터에 오류가 발생할 수 있습니다. Pandas의 fillna() 함수를 사용하여 결측치를 대체할 수 있습니다. 예를 들어:

df['과일'].fillna('unknown', inplace=True)

2. 큰 데이터셋에서의 성능 고려

데이터셋이 클수록 원 핫 인코딩으로 생성되는 열의 수가 많아질 수 있습니다. 이 경우 feature selection 기법을 사용하여 불필요한 열을 제거하여 성능을 저하시키지 않도록 해야 합니다. 이를 통해 모델의 복잡성을 줄이고 학습 시간을 단축할 수 있습니다.

3. 데이터 유형에 따라 적절한 인코딩 선택

모든 범주형 데이터에 원 핫 인코딩이 적합한 것은 아닙니다. Label Encoding이 더 적합할 수 있는 경우도 있으므로, 데이터의 특성을 잘 분석하여 인코딩 방식을 선택하는 것이 중요합니다.

4. 원 핫 인코딩 후 데이터 확인

인코딩 후 데이터프레임을 항상 확인해야 합니다. head() 함수를 사용하여 인코딩된 데이터를 검토하고, 원하지 않는 열이 생기지 않았는지 확인하는 것이 중요합니다.

5. 모델링 전에 데이터 시각화

원 핫 인코딩이 끝난 후, 데이터의 분포를 시각화하는 것이 좋습니다. Seaborn이나 Matplotlib를 사용하여 데이터의 경향성을 살펴보면 더 나은 모델을 구축하는 데 도움이 됩니다.

요약 및 실천 팁


원 핫 인코딩은 머신러닝의 중요한 기법 중 하나로, 범주형 데이터를 효과적으로 수치형 데이터로 변환할 수 있습니다. Pandas를 활용하면 이 과정을 간단하게 수행할 수 있으며, 다양한 방법으로 데이터를 인코딩할 수 있습니다. 이번 글에서 소개한 기법과 팁을 바탕으로 데이터를 처리해보세요. 실습을 통해 자신의 데이터에 맞는 최적의 인코딩 방법을 찾아보는 것이 중요합니다.

마지막으로, 원 핫 인코딩을 활용할 때는 항상 데이터의 품질을 확인하고, 모델링 전에 충분한 탐색적 데이터 분석을 수행하는 것을 잊지 마세요!

반응형