-
머신러닝/딥러닝 데이터 전처리sk루키즈/생성형AI 활용을 위한 머신러닝&딥러닝 2026. 3. 19. 23:34
"Garbage In, Garbage Out (쓰레기가 들어가면 쓰레기가 나온다)."
머신러닝과 딥러닝 분야에서 절대 변하지 않는 진리다. 아무리 최신, 최고의 인공지능 알고리즘을 가져오더라도, 학습할 데이터가 엉망이면 기계는 엉터리 답을 내놓을 수밖에 없다. 실제 데이터 분석 실무에서 전체 작업 시간의 70~80%가 데이터 전처리에 소모되는 이유가 바로 여기에 있다.
원시 데이터(Raw Data)를 기계가 소화할 수 있는 완벽한 상태로 요리하는 과정, 머신러닝 데이터 전처리의 핵심 파이프라인을 4단계로 완벽하게 쪼개서 알아본다.
1. 결측치(Missing Value) 처리: "빈칸은 X"
현실 세계의 데이터는 구멍이 뚫려있는 경우가 허다하다. 센서 오류, 사용자의 입력 누락 등 다양한 이유로 데이터에 빈칸(NaN, Null)이 존재한다. 기계는 수학 연산을 해야 하므로 이 빈칸을 그대로 두면 즉시 에러를 뱉어낸다.
- 삭제 (Drop): 데이터의 양이 충분히 많고, 결측치가 있는 행(Row)의 비율이 매우 적다면 가장 깔끔한 방법은 빈칸이 있는 행 자체를 날려버리는 것이다. (`dropna()`)
- 대체 (Imputation): 데이터가 소중해서 함부로 버릴 수 없다면 빈칸을 다른 숫자로 메워야 한다. 주로 해당 열(Column)의 평균값, 중앙값, 혹은 최빈값으로 채워 넣는다. (`fillna()`)
2. 범주형 데이터 인코딩: "컴퓨터는 글자를 모른다"
기계의 뇌 속은 거대한 행렬 곱셈으로 이루어져 있다. 따라서 '서울', '부산', '남자', '여자' 같은 문자열(Categorical Data) 데이터가 들어오면 계산을 하지 못한다. 문자를 기계가 이해할 수 있는 숫자로 바꿔주는 과정이 인코딩(Encoding)이다.
1. 라벨 인코딩 (Label Encoding)
'사과=0, 배=1, 포도=2' 처럼 문자에 1:1로 고유한 숫자를 부여하는 방식이다. 단, 이 방식은 기계가 최종적으로 맞혀야 하는 정답지(Target, y)에만 제한적으로 사용해야 한다. 만약 기계가 공부해야 할 문제지(Feature, X)에 라벨 인코딩을 쓰면, 기계는 "포도(2)가 사과(0)보다 2배 더 큰 가치를 지녔구나!" 하고 숫자의 크기 자체를 서열로 오해하는 대참사가 일어난다.
2. 원-핫 인코딩 (One-Hot Encoding)
앞선 크기 오해 문제를 해결하기 위해 고안된 완벽한 방법이다. 주관식 질문을 여러 개의 O/X 퀴즈로 찢어버린다. '사과', '배', '포도'를 하나의 열에 두는 대신, `과일_사과`,`과일_배`, `과일_포도`라는 3개의 열을 새로 만든다. 그리고 사과인 데이터는 `[1, 0, 0]` 형태로 자기 자리에만 불(Hot)을 켜고 나머지는 0으로 끈다. 이렇게 하면 기계는 크기가 아닌 독립적인 상태로 인식한다.
- 실무 핵심 주의사항 (더미 변수의 함정): 원-핫 인코딩으로 열을 찢었다면, 무조건 1개의 열은 삭제해야 한다(N-1 법칙). 만약 남/여 데이터를 `성별_남`, `성별_여` 2개로 나누어 모두 훈련시키면, 기계는 "남자가 0이면 무조건 여자가 1이네?" 하며 힌트가 100% 중복된다는 사실에 다중공선성(Multicollinearity) 문제를 일으키고 뇌정지에 빠진다. 판다스의 `pd.get_dummies(drop_first=True)` 옵션을 쓰면 이 문제를 피할 수 있다.
3. 데이터 분할 (Train / Test Split): "테스트할 데이터를 남긴다"
본격적인 데이터 스케일링에 들어가기 직전에 반드시 해야 하는 가장 중요한 작업이다. 전체 데이터를 기계에게 모두 보여주며 학습시키면, 기계는 훈련 데이터를 통째로 암기해 버리는 '과적합(Overfitting)'에 빠진다.
따라서 데이터를 보통 8:2 비율로 나눈다.
- Train Data (훈련 세트, 80%): 기계가 패턴을 문제집.
- Test Data (테스트 세트, 20%): 학습이 끝난 후, 모델이 한 번도 본 적 없는 데이터로 실력을 평가할 시험지.
4. 수치형 데이터 스케일링: "단위 통일"
데이터의 각 열마다 단위가 다르면 기계는 심각한 편견을 가진다. 예를 들어 '연봉 50,000,000(원)'과 '나이 30(세)'가 같이 들어가면, 기계는 숫자가 압도적으로 큰 연봉 데이터만 중요하다고 착각하고 나이 데이터는 무시해 버린다. 이를 막기 위해 모든 데이터의 범위를 공평하게 압축하는 것이 스케일링(Scaling)이다.
- StandardScaler (표준화): 데이터의 평균을 0, 표준편차를 1로 만들어 정규분포 형태로 모아준다. 이상치(Outlier)에 비교적 덜 민감하여 가장 널리 쓰인다.
- MinMaxScaler (정규화): 데이터의 최솟값을 0, 최댓값을 1로 맞추어 모든 숫자를 0과 1 사이로 찌그러뜨린다. 픽셀(0~255)을 다루는 딥러닝 이미지 처리에서 필수적으로 쓰인다.
- 실무 핵심 규칙 (Data Leakage 방지):
- Train 데이터: 무조건 `fit_transform()`을 사용한다. (훈련 데이터의 평균/표준편차 치수를 재고, 그 치수대로 변환까지 한 방에 처리한다.)
- Test 데이터: 절대 `fit`을 쓰면 안 되며, 오직 `transform()`만 사용해야 한다. (미래의 데이터인 테스트 데이터로 새로운 치수를 재면 훈련 때 세워둔 잣대가 무너진다. 반드시 과거 Train 데이터에서 측정한 공식을 그대로 가져와서 옷만 입혀야 한다.)
'sk루키즈 > 생성형AI 활용을 위한 머신러닝&딥러닝' 카테고리의 다른 글
머신러닝/딥러닝 비지도학습 주요 알고리즘 (0) 2026.03.23 머신러닝/딥러닝 지도학습(Supervised Learning) (1) 2026.03.22 머신러닝/딥러닝 : 데이터 파악 (0) 2026.03.21 머신러닝/딥러닝의 시작: 인공지능이 학습하는 데이터의 종류 (1) 2026.03.18