본문 바로가기
두두 IT/머신런닝(ML)

TODO와 함께하는 복습 - 2 (데이터 전처리)

by DoDo's 2026. 5. 25.
반응형

🗺️ [복습 2단계] 04장. 데이터 전처리 (Data Preprocessing)

머신러닝 실무에서 전체 업무 시간의 70~80%를 차지하는, 가장 귀찮지만 절대 빠져선 안 되는 '데이터 전처리' 단계

"데이터 전처리는 요리하기 전에 재료를 손질하는 과정과 같아. 농장에서 갓 캐온 흙 묻고 썩은 당근(결측치)은 씻어내거나 잘라내고, 고기 덩어리(문자열 데이터)는 AI가 씹어 먹을 수 있게 깍둑썰기(인코딩)를 해줘야 해. 또, 소금 1g과 물 1000ml처럼 단위가 제각각인 재료들은 맛의 균형을 맞추기 위해 같은 기준의 컵 단위로 통일(스케일링)해 줘야 AI가 어느 한 재료의 맛에만 지배당하지 않지."

💻 핵심 코드 해설 (스케일링 위주)

가장 많이 쓰는 스케일링(단위 체급 맞추기)을 살펴보겠습니다. AI는 숫자 크기에 민감해서, '방 개수 3개'와 '집값 3억'이 있으면 3억이라는 숫자가 훨씬 중요하다고 착각합니다. 이를 공평하게 맞춰주는 작업입니다.

Python
 
from sklearn.preprocessing import StandardScaler

# 1. 스케일러 객체 생성 (체급을 맞추는 저울 소환)
scaler = StandardScaler()

# 2. 기준 세우기 (Train 데이터의 평균과 표준편차를 구함)
scaler.fit(X_train)

# 3. 변환하기 (구해진 기준을 바탕으로 실제 데이터를 0 근처의 숫자로 쫙 압축함)
X_train_scaled = scaler.transform(X_train)

# ★ 실무 꿀팁: 2번과 3번을 동시에 하는 마법의 명령어
X_train_scaled = scaler.fit_transform(X_train)
  • 🚨 절대 주의 (Data Leakage 방지): fit(기준 세우기)은 무조건 Train(공부용) 데이터에만 해야 합니다! Test(시험용) 데이터에는 절대 fit을 쓰면 안 되고, Train에서 세운 기준을 그대로 적용하는 transform만 써야 합니다. 안 그러면 시험 문제의 힌트가 유출되는 커닝(Data Leakage)이 발생합니다.

📝 TODO 실습 문제: 데이터 스케일링 적용하기

위의 설명을 바탕으로 아래 코드의 빈칸(___)을 채워보세요. 이번에는 Train 데이터와 Test 데이터에 각각 어떤 함수를 써야 하는지 맞히는 것이 핵심입니다.

Python
 
from sklearn.preprocessing import StandardScaler
import numpy as np

# 가상의 데이터 (Feature 1: 방 개수, Feature 2: 평수)
# 보시다시피 두 숫자의 체급(단위) 차이가 매우 큽니다.
X_train = np.array([[2, 30], [3, 85], [1, 15], [4, 100]])
X_test  = np.array([[2, 25], [3, 90]])

# 1. 스케일러 객체 소환
scaler = StandardScaler()

# 2. Train 데이터 변환 (기준을 세움과 동시에 변환하는 통합 함수 사용)
scaled_X_train = scaler.________(X_train)

# 3. Test 데이터 변환 (🚨주의: 새로운 기준을 세우지 말고 변환만 해야 함!)
scaled_X_test = scaler.________(X_test)

print("스케일링 전 X_train:\n", X_train)
print("스케일링 후 X_train:\n", scaled_X_train)

 

 

 

 

 

 


 

정답

from sklearn.preprocessing import StandardScaler
import numpy as np

# 가상의 데이터 (Feature 1: 방 개수, Feature 2: 평수)
# 보시다시피 두 숫자의 체급(단위) 차이가 매우 큽니다.

X_train = np.array([[2, 30], [3, 85], [1, 15], [4, 100]])
X_test = np.array([[2, 25], [3, 90]])

# 1. 스케일러 객체 소환, 저울계를 가져왔다.
scaler = StandardScaler()

# 2 Train 데이터 변환 (기준을 세움과 동시에 변환하는 통합 함수 사용)
scaled_X_train = scaler.fit_transform(X_train)

# 3. Test 데이터 변환 (주의 : 새로운 기준을 세우지 말고 변환만 해야 합니다.)
scaled_X_test = scaler.transform(X_test)

print("스케일링 전 X_train:\n", X_train)
print("스케일링 후 X_train:\n", scaled_X_train)

 

결과 값

스케일링 전 X_train:
 [[  2  30]
 [  3  85]
 [  1  15]
 [  4 100]]
스케일링 후 X_train:
 [[-0.4472136  -0.76827333]
 [ 0.4472136   0.76827333]
 [-1.34164079 -1.1873315 ]
 [ 1.34164079  1.1873315 ]]
반응형