데이터 분석

UserWarning: X has feature names 경고 해결법 — StandardScaler 사용 시 꼭 알아야 할 포인트

The Ohgorithm 2025. 10. 16. 20:58

두 코드의 차이는 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)

✨ 정리

구분                                                                                       설명                                                       경고 발생 여부

 

StandardScaler() 한 번만 생성 같은 인스턴스 재사용 ❌ 없음
StandardScaler() 두 번 생성 fit 정보 공유 안 됨 ⚠️ 경고 발생