두 코드의 차이는 StandardScaler 인스턴스를 재사용하느냐, 새로 생성하느냐에 있어요.
이 차이 때문에 "UserWarning: X has feature names, but StandardScaler was fitted without feature names" 경고가 발생합니다.
🔍 1️⃣ 정상 작동하는 코드
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_valid)
- ss라는 하나의 인스턴스를 만들어 fit → transform 순서로 사용합니다.
- fit 시점에 X_train의 feature names(컬럼명) 이 함께 저장됩니다.
- 이후 transform(X_valid)을 호출할 때 같은 인스턴스이므로 feature names가 일치해 경고가 없습니다.
⚠️ 2️⃣ 경고가 발생하는 코드
X_train = StandardScaler().fit_transform(X_train)
X_test = StandardScaler().transform(X_valid)
- StandardScaler()가 두 번 호출되기 때문에 서로 다른 인스턴스입니다.
- 첫 번째는 fit_transform을 수행하지만, 두 번째는 새로 만들어져서 fit이 안 된 상태입니다.
- 새 인스턴스는 feature names 정보를 모르므로, transform(X_valid) 호출 시
“X has feature names, but StandardScaler was fitted without feature names” 경고가 발생합니다.
💡 해결 방법
한 번만 fit한 동일한 인스턴스를 사용해야 합니다.
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_valid)
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_valid)
✨ 정리
구분 설명 경고 발생 여부
| StandardScaler() 한 번만 생성 | 같은 인스턴스 재사용 | ❌ 없음 |
| StandardScaler() 두 번 생성 | fit 정보 공유 안 됨 | ⚠️ 경고 발생 |
'데이터 분석' 카테고리의 다른 글
| matplotlib 와 matplotlib.pyplot 차이 (0) | 2025.10.16 |
|---|---|
| Keras Sequential 모델에서 input_shape를 써야 하는 이유 — 한눈에 보는 차이와 구조 비교 (0) | 2025.10.16 |
| Boxplot 예시를 통해 설명(+ 장바구니 이탈 여부 예측 문제) (0) | 2025.10.15 |
| 데이터프레임과 시리즈 차이(+ 파이썬, 데이터 분석) (0) | 2025.10.12 |
| 데이터프레임 괄호 2개와 괄호 1개 차이(+ 데이터프레임과 시리즈 차이) (0) | 2025.10.11 |