강화학습

데이터 전처리는 어떻게 할까?

miracleai 2024. 5. 22. 13:11
반응형

데이터 전처리는 머신러닝이나 데이터 분석에서 매우 중요한 단계이다. 이 과정은 데이터의 품질을 높이고 분석에 적합하게 만드는 것을 목표로 한다. 데이터 천저리를 통해 고객 이탈 예측 하는 방법을 예로 들자면 다음과 같다.

 

1. 데이터 수집 및 이해

데이터 구조

  • 고객 ID: 고객을 식별하는 고유한 ID
  • 나이: 고객의 나이
  • 성별: 고객의 성별 (예: 남성, 여성)
  • 거주 지역: 고객의 거주 지역을 나타내는 범주형 변수
  • 가입 기간: 고객이 서비스를 사용한 기간 (개월 단위)
  • 월 요금: 고객이 매달 지불하는 요금
  • 총 사용량: 고객이 총 사용한 데이터량 (예: GB 단위)
  • 서비스 해지 여부: 고객의 이탈 여부 (0: 유지, 1: 해지)

반응형

2. 데이터 정리

결측치 처리

 (1) 결측치 확인:

python 코드

df.isnull().sum()

 

  • 각 변수에 대해 결측치의 개수를 확인.

 (2) 결측치 대체:

  • 평균 또는 중앙값으로 대체: 연속형 변수(나이, 월 요금 등)의 결측치는 평균값 또는 중앙값으로 대체.

python 코드 

df['나이'].fillna(df['나이'].mean(), inplace=True)

df['월 요금'].fillna(df['월 요금'].median(), inplace=True)

 

  • 최빈값으로 대체: 범주형 변수(성별, 거주 지역 등)의 결측치는 최빈값으로 대체.

python코드 

df['성별'].fillna(df['성별'].mode()[0], inplace=True)

df['거주 지역'].fillna(df['거주 지역'].mode()[0], inplace=True)

 

중복 데이터 제거

중복된 데이터를 제거하여 데이터의 품질을 높임

python코드 

df.drop_duplicates(inplace=True)

 

3. 데이터 변환

범주형 데이터 인코딩

범주형 데이터를 숫자로 변환.

 

  • 레이블 인코딩: 순서가 있는 범주형 데이터에 사용.

   python코드 

   from sklearn.preprocessing import LabelEncoder

   le = LabelEncoder()

   df['성별'] = le.fit_transform(df['성별'])

 

  • 원-핫 인코딩: 순서가 없는 범주형 데이터에 사용.

  python코드 

  df = pd.get_dummies(df, columns=['거주 지역'])

 

스케일링

연속형 데이터를 표준화 또는 정규화합니다.

  • 표준화: 평균을 0, 표준편차를 1로 맞추는 방법임.

  python코드 

  from sklearn.preprocessing import StandardScaler

  scaler = StandardScaler()

  df[['나이', '월 요금', '총 사용량']] = scaler.fit_transform(df[['나이', '월 요금', '총 사용량']])

 

  • 정규화: 데이터를 0과 1 사이로 변환.

  python 코드

  from sklearn.preprocessing import MinMaxScaler

  scaler = MinMaxScaler()

  df[['나이', '월 요금', '총 사용량']] = scaler.fit_transform(df[['나이', '월 요금', '총 사용량']])

 

4. 특성 선택 및 추출

상관관계 분석

변수 간의 상관관계를 분석하여 중요하지 않은 변수를 제거.

 python코드 

 import seaborn as sns

 import matplotlib.pyplot as plt

 corr_matrix = df.corr()

 plt.figure(figsize=(12, 8))

 sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

 plt.show()

 

특성 추출

기존의 변수에서 새로운 변수를 만든는 과정.

python코드

df['평균 사용 요금'] = df['월 요금'] / df['총 사용량']

 

5. 데이터 분할

훈련, 검증, 테스트 데이터 분할

데이터를 모델 훈련, 검증, 테스트용으로 나눕니다.

 

 

 

python코드

from sklearn.model_selection import train_test_split

X = df.drop('서비스 해지 여부', axis=1)

y = df['서비스 해지 여부']

X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42)

X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)

 

  • 70%는 훈련 데이터
  • 15%는 검증 데이터
  • 15%는 테스트 데이터

 

전처리 후 데이터 예시

전처리가 완료된 데이터는 다음과 같은 형태를 가질 수 있다.

고객 ID 나이 성별 가입 기간 월 요금 총 사용량 거주 지역_1 거주 지역_2 거주 지역_3 서비스 해지 여부
1 0.4 1 24 0.6 0.5 0 1 0 0
2 0.7 0 36 0.8 0.7 0 0 1 1
3 0.2 1 12 0.3 0.4 1 0 0 0
... ... ... ... ... ... ... ... ... ...

 

 

이러한 전처리 과정을 통해 데이터의 품질을 높이고, 모델이 더 정확하게 예측할 수 있도록 한다.

 

반응형