모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.01

결측치 처리: 데이터 공백을 채우는 전략

우리가 마주하는 실무 데이터는 엑셀의 빈칸처럼 값이 비어 있는 결측치(Missing Value)가 아주 흔합니다. 이 빈칸을 무시하고 넘어가면 인공지능 모델이 아예 작동을 멈추거나, 완전히 엉뚱한(편향된) 결과를 낼 수 있습니다. 이 챕터에서는 데이터에 생긴 '빵꾸'를 메우는 방법부터, 너무 튀는 데이터(이상치)를 솎아내고, 한쪽으로 치우친 데이터(클래스 불균형)를 바로잡는 과정까지, 머신러닝의 든든한 기초 체력이 되는 데이터 품질 파이프라인을 완벽하고 알기 쉽게 정리합니다.

챕터별 머신러닝 도식화

챕터를 선택하면 아래 도식이 해당 챕터 내용으로 바뀌어요. 머신러닝 흐름을 한눈에 보세요.

결측치 처리란? 공백을 줄이고 신뢰를 높이는 데이터 전처리

결측치란? 데이터 테이블에서 값이 비어 있는 상태입니다. 마치 이빨이 빠진 퍼즐과 같습니다. 실무에서는 설문조사에서 답변을 안 하거나, 센서가 고장 나서 기록이 끊기거나, 데이터를 옮기는 중에 유실되는 등 다양한 이유로 발생합니다.
결측 메커니즘(MCAR/MAR/MNAR)은 빈칸이 '왜' 생겼는지 그 원인을 따지는 것입니다. MCAR(완전 무작위 결측 · Missing Completely At Random)은 실수로 설문지에 커피를 쏟아 글씨가 지워진 것처럼 완전히 우연한 빈칸입니다. MAR(무작위 결측 · Missing At Random)은 '남성' 응답자가 '화장품 소비량'을 적지 않은 것처럼 다른 변수와 연관된 경우입니다. MNAR(비무작위 결측 · Missing Not At Random)은 '소득이 낮은 사람'이 일부러 '소득' 칸을 비워두는 것처럼, 빈칸 자체에 뼈아픈 의미가 숨어있는 경우입니다.
처리 전략은 크게 세 가지입니다. 쿨하게 지워버리는 삭제, 하나의 값으로 대충 메우는 단일대치, 여러 번 정교하게 채워보고 평균을 내는 다중대치가 있습니다. 각각 잃는 데이터의 양과 처리 속도가 다르기 때문에 상황에 맞춰 골라 써야 합니다.
단일대치와 다중대치: 단일대치는 빈칸을 '평균'이나 '가장 많이 나온 값'으로 한 번에 쓱싹 채우는 방법입니다. 빠르지만 위험할 수 있습니다. 반면 다중대치는 빈칸에 들어갈 법한 그럴싸한 값들을 여러 번 채워보고(가상 세계를 여러 개 만들고), 그 결과들을 종합해 가장 안전한 결론을 도출하는 꼼꼼한 방법입니다. 단일대치에서 자주 쓰는 값은 평균값(연속형), 중앙값(이상치가 많을 때), 최빈값(범주형)이며, 상황에 따라 회귀대치·KNN 대치·Hot-deck 같은 방법도 사용합니다.
이상치 탐지의 두 관점: 하나의 변수만 보고 튄 값을 찾는 단변량 탐지(Box Plot)와, 여러 변수를 묶어서 조합이 이상한 점을 찾는 다변량 탐지(Mahalanobis/Isolation Forest/SVDD)는 서로 다른 문제를 해결합니다. 실무에서는 보통 둘 다 확인해야 놓치는 케이스가 줄어듭니다.
클래스 불균형 보정: 데이터가 한쪽 클래스로 치우치면 모델은 소수 클래스를 '없는 것처럼' 학습하기 쉽습니다. 이를 보완하기 위해 Tomek Links(경계 정리), SMOTE/ADASYN(소수 샘플 합성), SMOTE+Tomek(합성 후 정리) 같은 전략을 조합합니다.
핵심 메시지: 결측치 처리는 단독 기술이 아니라, 이상치 탐지/불균형 보정과 연결된 하나의 품질 파이프라인 설계 문제입니다.

단일대치에서 자주 쓰는 대표값/방법

주요 단일대치 방법을 정의와 간단 수식으로 정리한 표입니다.

대치값/방법정의(간단 수식)
평균값(Mean)관측값 평균으로 대치: xmiss←xˉ=1n∑i=1nxix_{miss} \leftarrow \bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_ixmiss​←xˉ=n1​∑i=1n​xi​
중앙값(Median)중앙 순위 값으로 대치: xmiss←median(x)x_{miss} \leftarrow \mathrm{median}(x)xmiss​←median(x)
최빈값(Mode)가장 자주 나온 값으로 대치: xmiss←arg⁡max⁡v count(x=v)x_{miss} \leftarrow \arg\max_v\,\mathrm{count}(x=v)xmiss​←argmaxv​count(x=v)
회귀·KNN·Hot-deck회귀: x^=f(z)\hat{x}=f(\mathbf{z})x^=f(z), KNN: xmiss←1k∑j∈Nkxjx_{miss}\leftarrow\frac{1}{k}\sum_{j\in N_k}x_jxmiss​←k1​∑j∈Nk​​xj​, Hot-deck: xmiss←xdonorx_{miss}\leftarrow x_{donor}xmiss​←xdonor​

직관

기계는 빈칸을 싫어합니다. 빈칸을 방치하면 컴퓨터는 계산 자체를 할 수 없어 에러를 뱉습니다. OMR 카드에 마킹을 안 하면 채점을 아예 못 하는 것과 똑같습니다.
잘못 채우면 단단히 착각합니다. 모든 빈칸을 무작정 '0'이나 '평균값'으로 채우면 데이터의 원래 특징(분포)이 망가집니다. 모델은 빈칸을 채운 가짜 데이터를 '진짜'라고 굳게 믿어버리는 과도한 확신(Overconfident prediction)에 빠집니다.
전처리는 세트 메뉴입니다. 결측치만 채웠다고 끝이 아닙니다. 비정상적인 값(이상치)을 골라내고, 희귀한 데이터의 비율(불균형)을 맞춰주는 작업까지 한 호흡에 설계해야만, 모델이 실전 환경에서 당황하지 않고 제 실력을 발휘할 수 있습니다.
공정성과 안전성에도 직결됩니다. 특정 그룹에서 결측이 더 많이 발생(MAR/MNAR)하면, 잘못된 대치는 집단별 성능 격차를 키울 수 있습니다. 전처리 단계에서 편향 신호를 점검해야 모델의 신뢰성을 지킬 수 있습니다.
모델 선택보다 먼저 성능을 좌우합니다. 같은 알고리즘이라도 전처리 품질이 다르면 결과가 크게 달라집니다. 실무에서는 '좋은 모델'보다 '좋은 데이터 흐름'이 더 큰 이득을 만드는 경우가 많습니다.
운영 단계(배포 후) 안정성도 좋아집니다. 결측·이상치·불균형에 대한 기준을 미리 정해두면, 새 데이터가 들어와도 일관된 규칙으로 처리되어 재학습/모니터링이 쉬워집니다.

수학적 설명

실전 흐름: 데이터를 관찰(EDA) → 빈칸이 생긴 이유 추측 → 대치 전략 선택 → 너무 튀는 값 잡기(이상치 탐지: Box Plot 등) → 데이터 비율 맞추기(클래스 불균형 보정: SMOTE 등) → 드디어 모델 학습 및 평가의 순서로 진행됩니다.
단일대치 기본식: 빈칸을 평균으로 채운다면 xmiss←xˉx_{miss} \leftarrow \bar{x}xmiss​←xˉ, 크기순으로 줄을 세웠을 때 딱 중간에 있는 값으로 채운다면 xmiss←median(x)x_{miss} \leftarrow \mathrm{median}(x)xmiss​←median(x) 로 표현합니다.
다중대치 개념: mmm개의 완성된 평행우주(데이터셋)를 만든 다음, 각각에서 얻은 결론(θk\theta_kθk​)을 합쳐서 평균을 냅니다. θˉ=1m∑k=1mθk\bar{\theta}=\frac{1}{m}\sum_{k=1}^{m}\theta_kθˉ=m1​∑k=1m​θk​
IQR 기반 Box Plot(박스 플롯) 규칙: 정상 데이터의 울타리를 치는 공식입니다. 하한선 Q1−1.5×IQRQ_1-1.5\times IQRQ1​−1.5×IQR부터 상한선 Q3+1.5×IQRQ_3+1.5\times IQRQ3​+1.5×IQR까지를 울타리로 정하고, 이 밖으로 넘어가면 이상치(비정상)로 판단합니다.
공분산(Covariance)이란? 두 변수가 함께 얼마나 움직이는지를 수치로 나타낸 것입니다. 직관적으로는 “키가 큰 사람이 대체로 몸무게도 더 나가는가?” 같은 동행 관계를 측정합니다. 수식으로는 cov(X,Y)=E[(X−μX)(Y−μY)]\mathrm{cov}(X,Y)=\mathbb{E}[(X-\mu_X)(Y-\mu_Y)]cov(X,Y)=E[(X−μX​)(Y−μY​)] 입니다. 여러 변수의 공분산을 한 번에 모으면 공분산 행렬 Σ\SigmaΣ가 되고, 이 Σ\SigmaΣ가 데이터 구름(타원)의 방향/늘어짐을 결정합니다.
Mahalanobis 거리 (마할라노비스 거리): 단순한 ‘직선거리’가 아니라, 공분산(분포 모양)을 반영한 ‘표준화된 거리’입니다. 즉, 데이터가 많이 퍼진 방향으로의 이동은 덜 벌점, 잘 안 퍼지는 방향으로의 이동은 더 큰 벌점을 줍니다. DM(x)=(x−μ)⊤Σ−1(x−μ)D_M(\mathbf{x})=\sqrt{(\mathbf{x}-\boldsymbol\mu)^\top\Sigma^{-1}(\mathbf{x}-\boldsymbol\mu)}DM​(x)=(x−μ)⊤Σ−1(x−μ)​ (여기서 Σ−1\Sigma^{-1}Σ−1 때문에 공분산이 핵심입니다).
Isolation Forest (아이솔레이션 포레스트): 이상치는 ‘군집에서 멀다’라기보다 빨리 고립(isolate) 된다고 봅니다. 데이터를 무작위로 쪼개는(랜덤 분할) 나무들을 많이 만들었을 때, 어떤 점이 몇 번 안 쪼개도 혼자 떨어져 나오면 이상치일 가능성이 큽니다. 장점은 고차원에서도 잘 동작하고, 분포 가정이 약하다는 점입니다.
SVDD (Support Vector Data Description): 정상 데이터만으로 ‘정상 영역’을 하나의 경계(최소 부피의 감싸는 구/원, 또는 커널로 휘어진 경계)로 학습한 뒤, 경계 밖을 이상치로 판단하는 방법입니다. 핵심 직관은 “정상은 한 덩어리로 감쌀 수 있다”이며, 원-클래스(One-class) 이상치 탐지에 자주 쓰입니다.
Class Imbalance(클래스 불균형): 양성(희귀) 클래스가 너무 적으면 모델이 ‘다수만 맞히는’ 방향으로도 점수가 높아 보일 수 있습니다. 그래서 정확도만 보지 말고 재현율(Recall), 정밀도(Precision), F1, PR-AUC 같은 지표를 함께 보고, 필요하면 리샘플링으로 분포를 조정합니다.
Tomek Links (토멕 링크): 서로 다른 클래스의 두 점이 서로의 가장 가까운 이웃이면, 그 쌍은 경계에서 ‘헷갈리는(겹치는)’ 부분일 가능성이 큽니다. 보통 다수 클래스 쪽 점(또는 둘 다)을 제거해 경계를 정리하는 언더샘플링 기반 정제(cleaning) 기법입니다.
SMOTE: 소수 클래스 샘플 x\mathbf{x}x와 이웃 xnn\mathbf{x}_{nn}xnn​을 골라, 그 사이를 선형 보간해 합성 샘플을 만듭니다. xnew=x+λ(xnn−x)\mathbf{x}_{new}=\mathbf{x}+\lambda(\mathbf{x}_{nn}-\mathbf{x})xnew​=x+λ(xnn​−x), λ∼U(0,1)\lambda\sim U(0,1)λ∼U(0,1). 단순 복사보다 과적합을 줄이지만, 경계에 노이즈가 많으면 오히려 나쁜 샘플도 늘릴 수 있습니다.
SMOTE를 활용한 복합 Resampling (예: SMOTE+Tomek): 먼저 SMOTE로 소수 클래스를 ‘늘리고’, 그 다음 Tomek Links로 경계의 겹침을 ‘정리’합니다. 한마디로 메움(oversample) → 청소(clean) 순서로 생각하면 쉽습니다.