이론

[ML/DL] 데이터 전처리 - Z-Score 표준화 Standardization 개념

weweGH 2024. 12. 20. 09:00
반응형

표준화 개념 정리
표준화 개념 정리


데이터 전처리 - Z-Score 표준화 Standardization 개념


들어가며


머신러닝, 딥러닝 모델을 생성하기 전, 데이터 전처리 과정에서 표준화와 정규화는 중요한 방법입니다. 데이터의 스케일을 조정하여 분석과 모델 성능 향상에 큰 도움이 되기 때문에 필수적인 전처리 방법입니다.

이 글에서는 표준화 개념표준화가 필요한 경우에 대해 설명합니다. 또한, 예제 데이터를 활용하여 표준화를 적용하는 방법을 공유합니다.


  • 표준화 Standardization
  • 표준화가 필요한 경우
  • 실제 데이터에 표준화 적용

Z-Score 표준화 

Standardization


Z-Score 표준화는 데이터의 평균을 0, 표준편차를 1로 변환하는 방법입니다. 데이터의 분포를 유지하면서 스케일을 조정하므로, 음수 값이 포함될 수 있습니다. 공식은 다음과 같습니다.

x는 데이터 값, μ는 데이터의 평균, σ는 데이터의 표준편차입니다.

$$ z = \frac{x-\mu }{\sigma } $$


Z-Score 표준화가 필요한 경우


1. 변수의 분포가 정규분포에 가까운 경우 유용합니다.

표준화는 데이터를 평균 0, 표준편차 1의 정규분포 형태로 변환합니다. 따라서, 변수의 분포가 이미 정규분포에 가까운 경우, 변동성을 효과적으로 비교할 수 있습니다.

예를 들어, 키(평균 175, 표준편차 10)몸무게(평균 75, 표준편차 5) 2가지 변수가 있다고 가정하겠습니다.  키의 표준편차(10)가 몸무게의 표준편차(5)보다 크므로, 키의 변화가 모델에서 더 중요하게 다뤄집니다. 따라서, 표준화 후 동일한 스케일에서 비교를 한다면 키와 몸무게의 변동성을 공정하게 비교할 수 있습니다.

로지스틱 회귀나 선형 회귀와 같은 모델은 입력 변수의 스케일에 민감하기 때문에, 평균이 0이고 표준편차가 1인 표준 정규분포 형태로 데이터를 표준화하면 모델의 성능과 해석력이 향상될 수 있습니다. 


2. 거리 기반 모델(KNN, SVM, K-Means)에 적합합니다.

거리 기반 모델에서는 유클리디안 거리를 사용합니다. 만약 데이터의 스케일이 서로 다르다면, 값이 큰 변수가 거리 계산에 매우 큰 영향을 미치게 됩니다.

예를 들어, A 변수는 0~1 범위이고 B 변수는 0~1,000 범위라면, 범위가 큰 B 변수의 영향이 매우 커집니다. 따라서, 표준화를 통해 모든 변수의 스케일을 동일하게 맞춰 각 변수의 기여도를 균형있게 조정합니다.


3. 데이터의 크기와 상관없이 분포를 유지하고 싶을 때 적합합니다.

표준화는 데이터의 크기 자체를 줄이거나 확대하지 않고, 각 데이터의 지점이 전체 분포에서 어디에 위치하는지를 나타냅니다. 즉, 데이터의 절대적인 크기는 다르지만, 표준화를 통해 상대적인 위치를 유지하여 각 데이터의 패턴을 잘 나타낼 수 있습니다.

예를 들어, PCA 주성분 분석과 같은 차원 축소 알고리즘의 경우는 데이터의 분산을 기반으로 주성분을 계산합니다. 따라서, 스케일의 차이가 커질수록 특정 변수가 결과에 불균형적으로 영향을 줄 수 있습니다.


표준화는 데이터가 얼마나 넓게 퍼져 있는지 즉, 변수의 변동성을 동일한 스케일에서 비교할 수 있는 방법입니다. 특정 변수의 값이 크다는 이유로 영향력이 높아지거나 낮아지는 문제를 해결할 수 있고, 이는 데이터 분석과 모델링에서 공정성을 확보에 매우 중요한 역할을 합니다.

반응형

실제 데이터에 표준화 적용


기상 데이터를 예제로 T 변수에 대한 회귀분석 예측 모델을 만들기 위해 필요한 데이터 전처리를 진행하겠습니다. 유의할 점은 아래의 표준화 적용 과정은 정답이 아닙니다. 분석의 방향에 따라 모델에 따라 표준화 여부가 달라지기도 하므로 어떤 과정으로 진행되는지에 대한 흐름을 이해하는 참고용으로만 활용해주시기 바랍니다.

현재 데이터는 이상치는 존재하지 않으므로 바로 표준화부터 적용하겠습니다.

- 활용 데이터: cleaned_weather.csv

- 타겟 변수: T(온도)

- 예측 모델: 회귀분석

import pandas as pd 
pd.options.display.max_columns = 100

df = pd.read_csv('cleaned_weather.csv')
df.head()

df head 출력 결과
df head 출력 결과


먼저 그래프 시각화를 활용하여 데이터의 변수별 분포를 확인하겠습니다. 날짜 변수 혹은 이진 변수는 표준화가 필요 없으므로 데이터 타입이 float이나 int인 변수만 선택하여 박스플롯과 히스토그램을 생성하겠습니다.

박스플롯

import matplotlib.pyplot as plt

num_cols = df.select_dtypes(include=['float64', 'int64']).columns

df[num_cols].boxplot(
    figsize=(10, 7)
)

plt.suptitle('Boxplot of Numerical Variables', fontsize=16)
plt.tight_layout()
plt.show()

박스플롯
박스플롯


히스토그램

df[num_cols].hist(
    figsize=(10, 7),     
    bins=20,              
    color='orange',       
    edgecolor='black'     
)

plt.suptitle('Histogram of Numerical Variables', fontsize=16)
plt.tight_layout()
plt.show()

히스토그램
히스토그램


박스플롯과 히스토그램으로 시각화한 결과, Tpot, Tdew, rho는 정규 분포에 가까운 분포를 나타내므로 표준화 대상 변수에 포함하겠습니다.

VPmax, VPact, VPdef와PAR, max. PAR 그리고 wv, max. wv 변수는 값의 스케일이 다르기 때문에 표준화 대상 변수에 포함하겠습니다. 그러나 비대칭 분포를 나타내므로 로그 변환을 진행한 후 표준화를 적용하겠습니다.


비대칭 분포 변수 로그 변환

log_transform_cols = ['VPmax', 'VPact', 'VPdef', 'PAR', 'max. PAR', 'wv', 'max. wv']

for col in log_transform_cols:
    df[col] = np.log1p(df[col])

표준화가 필요한 변수를 선택했으므로 StandardScaler를 활용하여 표준화를 적용하겠습니다. fit_transform은 데이터 학습과 변환을 동시에 실행합니다.

from sklearn.preprocessing import StandardScaler

# 표준화 대상 변수
st_cols = ['Tpot', 'Tdew', 'rho', 'VPmax', 'VPact', 'VPdef', 'PAR', 'max. PAR', 'wv', 'max. wv']

# 표준화
scaler = StandardScaler()
df_scaler = scaler.fit_transform(df[st_cols])

df_standardized = pd.DataFrame(df_scaler, columns=st_cols)
df_standardized.head()

df_standardized
df_standardized


표준화는 평균을 0, 분산을 1로 만드는 과정이므로 describe를 활용하여 표준화가 잘 진행되었는지 확인하겠습니다. df_standardized에 대한 describe 결과, 평균이 0 표준편차가 1에 가까우므로 표준화가 잘 된 것을 확인할 수 있습니다.

df_standardized.describe()


 

반응형