SW 전공

SW 전공 이론 학습

이론 목록으로 돌아가기

데이터 전처리와 탐색적 데이터 분석

결측치·이상치·중복·인코딩·스케일링을 처리하고 요약통계와 시각화로 데이터 구조를 탐색한다.

예상 읽기 8

1. 전처리의 목적

전처리는 원시 데이터를 분석·모델링에 적합한 형태로 정리하는 과정이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
원시 데이터
   ↓
스키마·타입 확인
   ↓
결측·이상·중복 처리
   ↓
범주 인코딩·수치 변환
   ↓
스케일링·파생변수
   ↓
분석용 데이터셋

전처리는 단순 청소가 아니라 분석 결과에 직접 영향을 주는 설계이다.

2. 결측치

결측은 값이 관찰되지 않은 상태이다.

대표 처리:

  • 행 삭제
  • 컬럼 삭제
  • 평균·중앙값·최빈값 대체
  • 그룹별 대체
  • 시계열 보간
  • 모델 기반 대체
  • 결측 여부 자체를 새 변수로 사용
CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
age: [21, 23, NULL, 79, NULL]
           │
    중앙값 23으로 대체
           ▼
age: [21, 23, 23, 79, 23]

평균은 이상치에 민감하고 중앙값은 상대적으로 강건하다. 결측이 무작위가 아니라 특정 고객군에서 집중된다면 단순 대체가 편향을 키울 수 있다.

3. 이상치

이상치는 다른 관측값과 크게 다른 값이다. 오류일 수도 있고 중요한 사건일 수도 있다.

IQR 방법

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
IQR = Q3 - Q1
하한 = Q1 - 1.5×IQR
상한 = Q3 + 1.5×IQR

예:

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
Q1=10, Q3=20
IQR=10
허용범위=-5 ~ 35
50은 이상치 후보

Z-score

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
z = (x - 평균) / 표준편차

정규분포에 가까운 데이터에서 절댓값이 큰 z는 이상치 후보가 될 수 있다.

이상치는 자동 삭제하지 않는다. 금융 사기, 장애 급증, 센서 고장처럼 분석 목적에 중요한 신호일 수 있다.

4. 중복과 일관성

중복은 전체 행이 같을 수도 있고 같은 실체가 다른 표기로 저장될 수도 있다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
C001 | 김민수 | 010-1234-5678
C884 | 김민수 | 01012345678

중복 제거에는 정규화된 전화번호, 주소, 이름, 생년월일 등의 조합과 업무 규칙이 필요하다.

중복 제거 전에 “동일 사건의 반복 기록”인지 “잘못된 복제”인지 구분해야 한다.

5. 범주형 인코딩

방법적합한 상황주의
Label Encoding순서가 있는 범주순서 없는 범주에 가짜 크기 관계 생성
One-Hot Encoding순서 없는 소수 범주범주 수가 많으면 차원 증가
Frequency Encoding빈도 정보 사용목표값과의 관계를 직접 표현하지 않음
Target Encoding범주별 목표 평균데이터 누수와 과적합 주의
CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
지역 = [서울, 부산, 대전]

One-Hot:
서울 → [1,0,0]
부산 → [0,1,0]
대전 → [0,0,1]

6. 스케일링

표준화

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
z = (x - 평균) / 표준편차

평균 0, 표준편차 1에 가까운 값으로 변환한다.

최소-최대 정규화

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
x' = (x - 최소) / (최대 - 최소)

일반적으로 0~1 범위로 변환한다.

거리 기반 알고리즘과 경사하강 기반 모델에서는 스케일 차이가 큰 변수의 영향이 커질 수 있다. 트리 모델은 일반적으로 스케일 영향이 상대적으로 작다.

7. 학습 데이터 누수

데이터 누수는 실제 예측 시점에는 알 수 없는 정보가 학습에 들어가 성능이 부풀려지는 문제이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
잘못된 순서:
전체 데이터 평균으로 결측 대체
    ↓
학습·테스트 분리

올바른 순서:
학습·테스트 분리
    ↓
학습 데이터로 대체 규칙 학습
    ↓
같은 규칙을 테스트에 적용

목표값을 직접 또는 간접으로 포함한 변수, 미래 정보, 평가 데이터 기반 전처리가 대표 누수이다.

8. EDA

탐색적 데이터 분석은 모델을 만들기 전에 데이터의 구조·분포·관계·이상 징후를 이해하는 활동이다.

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
단변량 분석
   ├─ 분포
   ├─ 중심·산포
   └─ 이상치

이변량 분석
   ├─ 범주-범주: 교차표
   ├─ 수치-수치: 산점도·상관
   └─ 범주-수치: 그룹 비교

다변량 분석
   └─ 여러 변수의 패턴·상호작용

9. 기술통계

통계량의미
평균전체 합 / 개수
중앙값정렬했을 때 가운데 값
최빈값가장 자주 나온 값
범위최댓값 - 최솟값
분산평균에서 떨어진 정도의 제곱 평균
표준편차분산의 제곱근
사분위수데이터를 네 구간으로 나누는 값
CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
데이터: 2, 3, 3, 4, 20
평균 = 6.4
중앙값 = 3

이상치 20 때문에 평균이 중앙값보다 크게 올라간다.

10. 분포 모양

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
왼쪽 꼬리              대칭                오른쪽 꼬리
   ▂▃▅█▇▅▃             ▂▄▇█▇▄▂             ▇█▅▃▂▁
음의 왜도                                 양의 왜도
  • 왜도: 분포의 비대칭 정도
  • 첨도: 꼬리와 극단값 특성에 관련된 지표
  • 다봉분포: 여러 집단이 섞였을 가능성
  • 바닥·천장 효과: 측정 범위에 값이 몰림

11. 시각화 선택

목적적합한 그래프
수치 분포히스토그램, 상자그림
범주 빈도막대그래프
시간 변화선그래프
두 수치 관계산점도
범주별 수치 비교상자그림·막대
구성 비율막대·누적막대, 제한적으로 원그래프

축을 잘라 차이를 과장하거나 면적·3D 효과로 값을 왜곡하지 않도록 한다.

12. Python 예시

PYTHON코드 영역 안에서 좌우로 이동할 수 있습니다.
import pandas as pd

df = pd.read_csv("transactions.csv")

print(df.info())
print(df.describe(include="all"))
print(df.isna().mean().sort_values(ascending=False))
print(df.duplicated().sum())

# 중앙값 대체
median_amount = df["amount"].median()
df["amount"] = df["amount"].fillna(median_amount)

# 범주별 건수
print(df["channel"].value_counts(dropna=False))

코드는 도구 사용 예시이며, 실제 처리 전에는 컬럼 의미와 업무 규칙을 확인해야 한다.

13. 결측 메커니즘과 처리 전략

결측은 단순히 비어 있는 값이 아니라 왜 비었는지에 따라 처리 위험이 달라진다.

  • MCAR: 결측 여부가 관측·비관측 값과 무관
  • MAR: 관측된 다른 변수로 결측 가능성을 설명 가능
  • MNAR: 빠진 값 자체나 관측되지 않은 요인이 결측과 관련

단일 평균 대체는 분산과 변수 간 관계를 약화시킬 수 있다. 결측 플래그를 함께 두거나 그룹 중앙값·다중대체·모델 기반 대체를 검토하고, 주어진 데이터와 가정에 적합한 방법을 선택한다.

14. 변환식과 경계 계산

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
IQR = Q3 - Q1
하한 = Q1 - 1.5×IQR
상한 = Q3 + 1.5×IQR

z = (x - 평균) / 표준편차
min-max = (x - 최솟값) / (최댓값 - 최솟값)

Q1=10, Q3=30이면 IQR은 20, 상한은 60이다. 60은 경계값이므로 일반적인 규칙에서 이상치가 아니고, 61부터 상한 초과다. 이상치라고 해서 자동 삭제하지 않으며 센서 고장인지, 실제 희귀 사건인지, 입력 오류인지 확인한다.

15. 누수를 막는 파이프라인

PYTHON코드 영역 안에서 좌우로 이동할 수 있습니다.
# 개념적 순서
X_train, X_test = split_by_time_or_random(X)
scaler.fit(X_train)          # 학습 데이터로만 규칙 추정
X_train_t = scaler.transform(X_train)
X_test_t  = scaler.transform(X_test)
model.fit(X_train_t, y_train)

교차검증에서도 각 fold의 학습 부분에서만 대체값·스케일·특성선택을 학습해야 한다. 전체 데이터로 평균을 계산한 뒤 fold를 나누면 검증 fold 정보가 학습에 유입된다. Target encoding도 검증 행의 정답을 사용하지 않도록 out-of-fold 방식이 필요하다.

16. 변환 선택과 모델 영향

  • 표준화: 평균 0, 표준편차 1. 거리·경사 기반 모델에 자주 필요
  • Robust scaling: 중앙값과 IQR 사용. 극단값 영향이 상대적으로 작음
  • 로그 변환: 오른쪽 꼬리가 긴 양수 변수의 왜도를 완화할 수 있음
  • One-hot: 명목형 범주에 가짜 순서를 만들지 않음
  • 순환형 시간: 시간대 23시와 0시가 가깝도록 sin/cos 특성을 고려

트리 계열은 단조 변환과 스케일에 상대적으로 덜 민감하지만, kNN·k-means·SVM·정규화 선형모델은 변수 크기의 영향을 크게 받을 수 있다.

17. EDA에서의 도표 선택

CODE코드 영역 안에서 좌우로 이동할 수 있습니다.
단일 수치형 분포 → 히스토그램·상자그림
범주별 수치형 비교 → 그룹 상자그림
두 수치형 관계 → 산점도
범주 빈도 → 막대그래프
시간 변화 → 시계열 선그래프

상관관계는 인과관계를 증명하지 않는다. 집단을 합쳤을 때와 나눴을 때 관계 방향이 달라지는 Simpson 역설도 있으므로 중요한 층화 변수를 확인한다.

확인 문제

  1. Q1=10, Q3=30일 때 IQR 상한은?
  2. 스케일러의 평균·표준편차는 어느 데이터에서 학습해야 하는가?
  3. 명목형 범주에 가짜 순서를 만들지 않는 대표 인코딩은?
  4. 극단값에 상대적으로 강한 스케일링은?
  5. 결과 발생 후에만 알 수 있는 변수를 예측 특성에 넣은 문제는?