데이터 정규화(Normalization)
데이터의 범위를 0과 1사이로 변환하는 과정
서로 다른 범위를 가진 데이터를 동일한 스케일로 맞추어 비교하기 쉽게 만듦
Min-Max 정규화
가장 일반적인 정규화 방법
각 데이터의 최소값을 0, 최대값을 1로 변환
pip install scikit-learn
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
#예시 데이터프레임 생성
data = {
'특성1' : [10,20,30,40,50],
'특성2' : [1,2,3,4,5]
}
df = pd.DataFrame(data)
#Min-Max 정규화
scaler = MinMaxScaler()
normalized_df = pd.DataFrame(scaler.fit_transform(df), columns = df.columns)
normalized_df
데이터 표준화(Standardization)
표준화(Standardization)
데이터를 평균이 0, 표준편차가 1이 되도록 변환하는 과정
정규 분포를 가정한 많은 분석 기법에 유리
Z-score 표준화
데이터에서 평균을 빼고 표준편차로 나누어 모든 데이터가 표준 정규분포(평균 0, 표준편차 1)를 따르도록 만듦
from sklearn.preprocessing import StandardScaler
#Z-score standardization
scaler = StandardScaler()
standardized_df = pd.DataFrame(scaler.fit_transform(df), columns = df.columns)
standardized_df
각 열의 데이터가 평균이 0, 표준편차가 1이 되도록 변환됨
비선형 변환(Non-linear Transformation)
데이터의 비정상적인 분포를 정규 분포에 가깝게 만들기 위해 사용
대표적인 방법 : 로그 변환, 제곱근 변환, 박스-콕스 변환
로그(Log)변환
양의 데이터에서 주로 사용
데이터의 분포를 좁히는 데 유용
특히, 지수 분포를 가진 데이터를 다룰 때 효과적
import numpy as np
#로그 변환
df['특성1_log'] = np.log(df['특성1'])
df
로그 변환 후 데이터의 분포가 평탄해지는 효과를 얻을 수 있음
제곱근(square root)변환
데이터의 분포를 평탄하게 만들기 위한 또 다른 방법
포아송 분포를 가진 데이터에서 사용
*포아송 분포
주어진 시간이나 공간에서 사건이 발생하는 평균 횟수 λ (람다)가 알려져 있을 때, 특정 사건이 k번 발생할 확률
제곱근 변환은 포아송 분포 데이터에 대해 다음과 같은 장점을 제공
분포의 대칭성 개선
- 포아송 분포는 오른쪽으로 치우친(skewed) 분포를 가지는 경우가 많음
- 제곱근 변환을 적용하면 데이터의 치우침(skewness)이 줄어들고, 분포가 더 대칭적으로 변화하여 정규성(normality)에 가까워짐
분산 안정화
- 포아송 분포는 분산이 평균(λ)에 의존하기 때문에 데이터의 분산이 비일정
- 제곱근 변환을 적용하면 분산이 안정(stabilize)됨. 데이터의 평균 값에 관계없이 일정한 수준의 분산을 갖게함
- 제곱근 변환 후의 분산은 데이터의 원래 분산보다 작아지며, 분석 과정에서 더 다루기 쉬운 형태로 변환
이상치의 영향 완화
- 사건 발생 횟수가 많아질수록 이상치가 발생할 가능성이 증가 -> 제곱근 변환은 데이터 값을 축소, 이상치가 분석 결과에 미치는 영향을 줄이는 데 도움을 줌
선형 관계로의 변환
- 포아송 데이터는 종종 비선형적인 특성을 보임. 제곱근 변환을 적용하면 데이터가 더 선형적인 패턴을 가지게 되어 회귀 분석이나 기타 선형 모델에서 더 잘 작동함
#제곱근 변환
df['특성1_sqrt'] = np.sqrt(df['특성1'])
df
제곱근 변환을 통해 분포가 줄어드는 효과를 얻음
박스-콕스(Box-Cox) 변환
다양한 형태의 데이터 분포를 정규분포에 가깝게 변환하기 위해 사용
양수 데이터에서만 사용 가능
(Scipy라이브러리 하위 모듈 scipy.stats 사용, 통계적 분석에 필요한 다양한 기능을 제공)
Box-cox변환 공식
: 변환할 원본 데이터 (양수여야 함)
: 변환 파라미터로, 최적의 값은 데이터의 정규성 개선 정도에 따라 결정
scipy.stats 모듈의 boxcox함수는
1. 데이터를 변환하고 동시에 최적의 λ 값을 자동으로 계산
2. 변환된 데이터와 최적의 λ 값을 함께 반환
하여
Box-Cox 변환을 쉽게 수행할 수 있게 해줌
from scipy.stats import boxcox
#박스-콕스 변환
df['특성1_boxcox'], _ = boxcox(df['특성1'])
df
박스-콕스 변환을 통해 데이터의 분포가 정규분포에 가까워지는 효과를 얻음
'Python to AI' 카테고리의 다른 글
Python - Pandas(데이터 전처리: Encoding, Embedding) (4) | 2024.12.13 |
---|---|
Python - 함수의 기본적 개념과 사용법 (6) | 2024.12.12 |
Python - Pandas(데이터 전처리 : 이상치 탐지 및 처리) (10) | 2024.12.10 |
Python - Matplotlib 한글폰트 커스텀컨피그 (6) | 2024.12.10 |
Python - Pandas(데이터 전처리 : isna(), isnull() ) (3) | 2024.12.10 |