- 데이터 전처리가 필요한 이유를 설명할 수 있다.
- 결측치·이상치를 처리하고 데이터를 정규화할 수 있다.
- 문제 해결에 유용한 핵심 속성(특성)을 선별·추출할 수 있다.
생각 열기 — 요리사는 재료부터 손질한다
훌륭한 요리사는 곧바로 불을 켜지 않아요. 먼저 채소를 씻고, 상한 부분을 도려내고, 크기를 고르게 썹니다. 재료 손질이 요리의 절반이죠. 기계학습도 똑같아요. 모은 데이터(재료)는 대개 빈칸이 있고(결측치), 말도 안 되는 값이 섞여 있고(이상치), 단위가 제각각입니다. 이걸 그대로 학습시키면? 1차시의 격언처럼 "쓰레기를 넣으면 쓰레기가 나와요."
그래서 데이터를 학습에 알맞게 다듬는 전처리(preprocessing)가 필요해요. 실제로 데이터 과학자는 업무 시간의 60~80%를 데이터를 모으고 다듬는 데 쓴다고 합니다. 화려한 알고리즘보다 이 '재료 손질'이 성능을 좌우하는 경우가 많거든요.
키는 cm(150~180), 통학 거리는 m(수백~수천)으로 적힌 데이터가 있어요. 이 둘을 그대로 쓰면, 숫자가 훨씬 큰 '통학 거리'가 '키'보다 AI에게 더 중요하게 보일 수 있어요. 어떻게 하면 둘을 공평하게 다룰 수 있을까요?
지저분한 데이터 청소하기
결측치 · 이상치 · 정규화
전처리의 3대 작업을 만나 봅시다.
결측치(빠진 값)
값이 비어 있는 칸. 평균·중앙값으로 채우거나, 너무 많이 비었으면 그 행/열을 빼요.
이상치(튀는 값)
키 1750cm처럼 말이 안 되는 값. 입력 오류면 바로잡고, 진짜 극단값이면 신중히 다뤄요.
정규화(크기 맞추기)
단위가 다른 값들을 같은 범위(예: 0~1)로 맞춰, 큰 숫자가 작은 숫자를 압도하지 않게 해요.
'시험 점수 예측'을 위해 모은 학생 데이터예요. 그런데 문제가 숨어 있네요! (앞에서 '키 vs 통학 거리'로 떠올린 크기 차이 문제를, 여기서는 '하루 걸음 수 vs 공부 시간'으로 직접 다듬어 봅니다.) 아래 버튼을 순서대로 눌러 데이터를 깨끗하게 다듬어 보세요.
| 학생 | 키(cm) | 하루 걸음 수 | 공부 시간(h) |
|---|
정규화 전에는 '하루 걸음 수'(수천)가 '공부 시간'(한 자릿수)보다 숫자가 훨씬 커서, AI가 걸음 수를 과도하게 중요하게 여길 수 있어요. 0~1로 크기를 맞추면 모든 특성이 공평한 출발선에 서죠. 거리·크기를 비교하는 많은 알고리즘(정보 4단원의 분류기 실험 — 가까운 이웃끼리 비교하던 것을 떠올려 보세요!)에서 정규화는 특히 중요합니다. 단, 단위를 0~1로 바꿔도 값들 사이의 상대적 관계(누가 더 큰지)는 그대로 유지돼요.
핵심만 골라내기 — 속성(특성) 추출
많다고 다 좋은 게 아니다
데이터를 청소했다면, 이제 학습에 쓸 특성(feature)을 골라야 해요. 특성이란 예측에 사용하는 입력 정보 하나하나예요(키, 공부 시간 등). 그런데 특성이 많을수록 좋은 게 아니에요 — 목표와 관련 없는 특성은 오히려 방해가 되고, 학습을 느리게 하거든요.
🎮 분류 게임 — 시험 점수 예측에 유용한 특성은?
'학생의 시험 점수'를 예측하려고 해요. 다음 정보 중 예측에 도움이 되는 특성과 관련 없는 특성을 분류해 보세요!
✅ 도움이 되는 특성
🚫 관련 없는 특성
좋은 특성은 목표와 관련이 깊고(공부 시간 ↔ 점수), 서로 중복되지 않아야 해요. '좋아하는 색'이나 '출석 번호'는 점수와 아무 관계가 없으니 빼는 게 낫죠. 더 나아가 가진 데이터로 새롭고 유용한 특성을 만들어 내는 것을 특성 공학(feature engineering)이라고 해요. 예를 들어 '생년월일'에서 '나이'를, '입장·퇴장 시각'에서 '머문 시간'을 만들어 내는 것처럼요. 좋은 특성을 잘 골라내고 만들어 내는 능력이 데이터 과학자의 핵심 실력입니다.
확인 문제
바로바로 채점!
2차시 확인 문제
4문항 · 즉시 채점
1데이터에서 값이 비어 있는 칸을 무엇이라고 할까?
2'키(cm)'와 '하루 걸음 수'처럼 크기가 매우 다른 값들을 같은 범위로 맞추는 작업은?
3학생 키 데이터에 '1750cm'가 있다면 이는 무엇이며 어떻게 다뤄야 할까?
4[OX] 예측에 쓰는 특성은 많으면 많을수록 항상 좋다.
더 알아보기
교과서 너머의 이야기 — 클릭해서 펼쳐 보세요
심화결측치를 채우는 여러 가지 방법
빈 값을 채우는 일을 대치(imputation)라고 해요. 가장 간단한 건 그 열의 평균으로 채우는 것이지만, 극단값에 흔들리지 않는 중앙값이 더 나을 때도 많아요. 범주형 데이터(예: 혈액형)라면 가장 흔한 값(최빈값)으로 채우죠. 더 정교하게는 비슷한 다른 데이터를 보고 추정하기도 해요 (키와 나이가 비슷한 학생들의 값으로 채우기 — kNN 대치!). 반대로 한 행/열에 결측치가 너무 많으면 억지로 채우기보다 그 행이나 열을 통째로 빼는 게 나을 수도 있어요. 정답은 데이터와 문제에 따라 달라서, "왜 비었는지"를 함께 고민하는 것이 중요합니다 — 빈칸에도 이유가 있거든요(예: 설문에서 민감한 질문일수록 더 많이 빔).
심화정규화 vs 표준화 — 두 가지 크기 맞추기
크기를 맞추는 방법은 크게 둘이에요. ① 정규화(min-max): 최솟값을 0, 최댓값을 1로 만들어 모든 값을 0~1 사이로 압축해요(우리 실습실이 쓴 방법). 범위가 분명할 때 직관적이죠. ② 표준화 (standardization): 평균을 0, 표준편차를 1로 맞춰요. 데이터가 정규분포에 가깝거나 이상치의 영향을 줄이고 싶을 때 유리해요. 둘 다 목적은 같아요 — 단위가 다른 특성들을 공평하게 만드는 것. 어떤 걸 쓸지는 데이터의 분포와 사용할 알고리즘에 따라 골라요. 참고로 모든 알고리즘이 크기 맞추기를 필요로 하는 건 아니에요 — 거리를 재는 kNN이나 신경망은 큰 도움을 받지만, 결정 트리 같은 일부 알고리즘은 크기에 둔감하답니다.
사례데이터 누수 — 시험 문제를 미리 본 AI
전처리에서 조심해야 할 함정이 있어요. 데이터 누수(data leakage)예요. 예를 들어 '환자가 퇴원할지'를 예측하는 AI를 만드는데, 특성에 실수로 '퇴원 날짜'를 넣었다고 해 봐요. 그러면 AI는 99% 정확하게 맞히겠지만, 실제로는 답을 미리 보고 푸는 부정행위나 다름없어요(아직 일어나지 않은 미래 정보를 쓴 거죠). 실전에 배치하면 '퇴원 날짜'를 모르니 전혀 못 맞히게 됩니다. 또 정규화 같은 전처리를 할 때 테스트 데이터의 정보까지 섞어 쓰면(전체 평균으로 정규화) 역시 누수가 생겨요. 그래서 전처리는 훈련 데이터만으로 기준을 정하고 테스트 데이터에 적용해야 해요. "시험 전에 답을 보면 안 된다"는 당연한 원칙이, 데이터를 다룰 때도 똑같이 적용되는 거죠(4차시의 훈련/테스트 분리와 이어집니다!).