🖇 왜 피처 스케일링이 필요할까?
🖇 피처 스케일링하기
K-Means 클러스터링이나 PCA와 같은 머신러닝 알고리즘을 적용하기 전에 꼭 거쳐야 할 중요한 과정이 있는데
바로 Feature Scaling(피처 스케일링)이다.
피처 스케일링이 필요한 이유와, K-Means와 PCA에서 스케일링이 중요한 이유를 알아보고
다양한 스케일링 방법을 통해 실제로 데이터를 스케일링하는 과정까지 수행해 보았다.
데이터의 각 특성이 사용하는 척도(스케일)가 다르면, 머신러닝 알고리즘이 특정 특성에만 과도하게 집중하는 문제가 발생할 수 있다.
예를 들어
이 둘을 그대로 클러스터링에 사용하면, 숫자 크기가 더 큰 키 데이터가 거리 계산에서 더 큰 영향을 미쳐 잘못된 클러스터링 결과를 만들 수 있다.
그렇기 때문에 클러스터링을 하기에 앞서서 피처를 스케일링하여 키와 몸무게가 동일한 척도를 가질 수 있도록
모든 특성을 동일한 기준으로 맞춰주는 스케일링(Feature Scaling)이 필요하다.
K-Means 클러스터링은 두 점 사이의 거리(Euclidean Distance)에 크게 의존하여 클러스터를 형성한다.
앞선 예시에서 보았듯
거리 계산은 수치가 큰 특성일수록 더 많이 반영되기 때문에, 스케일이 다른 특성들은 클러스터링 결과를 왜곡시켜 정확하지 않은 군집이 형성될 수 있다.
💡 따라서 모든 특성을 동일한 기준으로 맞춰주는 피처 스케일링이 필요하다.
주성분 분석(PCA)은 고차원의 데이터셋에서 가장 중요한 특징을 추출하여 더 낮은 차원으로 압축하는 차원 축소 기법이다.
다중공선성이 있는 컬럼을 제거하는 것도,
차원 축소를 진행할 때 모든 특성들이 동일한 척도로 되어 있으면 가장 효율적으로 데이터를 압축할 수 있기 때문이다.
💡 따라서 PCA 적용 전에 데이터를 스케일링하는 것을 권장한다.
그럼 본격적으로 데이터 피처 스케일링을 진행해 보자. 각 특성의 평균이 0이고 표준 편차가 1이 되도록 변환해야 한다.
머신러닝 라이브러리 scikit-learn이 제공하는, 변수들을 스케일링해 줄 수 있는 클래스 StandardScaler를 불러와야 한다.
from sklearn.preprocessing import StandardScaler
# 클래스 객체 생성
# scaler는 변수이자 StandardScaler()라는 클래스를 담은 객체(object)
scaler = StandardScaler()
여기서 StandardScaler 이란?
각 특성(feature)의 평균을 0, 표준 편차를 1로 바꾸어 정규 분포 형태로 변환합니다. 즉, 값들을 표준화하는 방식이다.
외에도 아래와 같은 다양한 스케일링 방법이 있다.
| 이름 | 방식 | 특징 |
|---|---|---|
StandardScaler | 평균 0, 표준편차 1 | 기본형. 정규분포를 따름 |
MinMaxScaler | 0~1로 조정 | 이미지, 균등분포에 적합 |
RobustScaler | 중앙값과 사분위수 기준 | 이상치에 강함 |
Normalizer | 벡터 크기 1로 조정 | 텍스트/시계열 분석에 적합 |
스케일링을 진행할 때에는 범주형 데이터가 아닌, 연속형 데이터만 진행한다.
주어진 데이터 셋에서 범주형 데이터는 CustomerID가 유일하고, 특성은 고객을 식별하기 위한 식별자이므로 클러스터링에 대한 의미 있는 정보를 포함하고 있지 않다.
따라서 이를 제외한 나머지 특성들을 스케일링하여 차원 축소와 K-Means 클러스터링을 위한 데이터를 준비해 보자.
# 원본 보존을 위해 복사
data = user_data.copy()
# 스케일링할 컬럼 목록
# CustomerID 식별자일 뿐, 클러스터링에 사용되지 않으므로 제외
columns_list = data.iloc[:, 1:].columns
# 스케일링 적용
data[columns_list] = scaler.fit_transform(data[columns_list])
[참고] .fit_transform()
| 단계 | 설명 |
|---|---|
fit() | 각 특성의 평균과 표준편차 계산 (학습 단계) |
transform() | 위 값을 이용해 데이터를 표준화 (변환 단계) |
data.head()
기존에는 모두 양수였던 것들이 더 작아지고 음수인 값으로 표준화된 것을 확인할 수 있다.
StandardScaler는 각 컬럼 값들의 분포가 평균 0, 표준편차가 1이 되도록 스케일링하기 때문에 이런 결과가 나오는 것이다.
지금까지 피처 스케일링 과정을 수행하였다.
피처 스케일링 전에는 특성마다 값의 크기, 분포 등이 달랐지만
피처 스케일링 후,
모든 특성의 중심(평균)은 0
폭(표준편차)은 1
이렇게 서로 다른 특성(feature)들을 공통된 스케일로 맞춘 것을 확인했다.
| 항목 | 내용 |
|---|---|
| 왜 필요? | 서로 다른 척도의 특성들이 알고리즘에 영향을 불균형하게 미침 |
| 적용 대상 | 연속형 특성만 (범주형, 식별자 제외) |
| 사용 방법 | StandardScaler 사용하여 평균 0, 표준편차 1로 조정 |
| PCA 영향 | 분산 왜곡 방지 → 효과적인 차원 축소 가능 |
| 클러스터링 영향 | 거리 계산 정확도 증가 → 더 명확한 군집 형성 가능 |
스케일링이 완료되었으니, 이제 본격적으로 차원 축소(PCA) 를 통해 데이터의 중요한 정보를 유지하면서도 효율적인 구조로 바꿔보도록 하자.
[해당 컨텐츠는 아이펠 캠퍼스 LMS에서 학습한 내용을 재해석한 것으로 무단 복제 및 사용을 금지합니다.]