AI 데이터 전처리

AI 데이터 전처리

AI 모델 성능을 끌어올리는 데이터 전처리, 결측치, 이상치, 스케일링, 인코딩, 데이터 분리, 파이프라인 자동화까지 실무 위주로 정리.

데이터 편향성

정의

  • 데이터 편향성은 수집,처리,라벨링 과정에서 특정 집단, 속성, 상황이 과대 또는 과소대표되는 문제를 의미.

영향

  • 모델의 예측 성능 불균형
  • 특정 사용자 그룹에 대한 차별적 결과
  • 서비스 신뢰도 하락 및 법적, 윤리적 문제 발생 가능성

대응 전략

(1) 데이터 수집 단계

방법 설명 예시
다양한 출처 확보 지역, 성별, 연령, 기기, 시간대 등 다양한 상황·집단 포함 전국 단위 고객 데이터를 수집해 수도권 집중 현상 방지
대표성 확보 실제 서비스 대상 분포를 반영한 표본 설계 신용평가 모델 → 나이·직업군 분포를 실제 금융권 고객 비율과 일치시키기
희귀 사례 보강 소수 클래스, 드문 이벤트를 의도적으로 추가 사고율 낮은 보험 청구 사례, 사기 거래 패턴 보강

(2) 데이터 전처리 단계

방법 설명 예시
데이터 균형화 클래스 불균형 해소 → 오버샘플링, 언더샘플링 SMOTE로 소수 클래스 생성, 다수 클래스 축소
데이터 증강 데이터 크기와 다양성 확대 텍스트 동의어 치환, 이미지 회전·색상 변경
라벨링 품질 관리 주관적 편향 최소화 다수의 어노테이터, 합의 기반 라벨 결정, 가이드라인 강화

(3) 공정성 평가 단계

방법 설명
모델 편향 측정 Demographic parity, Equalized odds, Equal opportunity 등 공정성 메트릭 활용
시뮬레이션 테스트 특정 속성(성별·지역·연령)에 따른 출력 차이 분석
A/B 테스트 실제 서비스에서 집단별 성능 차이 확인 및 개선 방향 도출

(4) 반복 개선 단게

  • 정기적인 데이터 업데이트
  • 편향 지표 모니터링
  • 모델,데이터,정책 동시 개선

사례

분야 편향 문제 대응
이미지 인식 서양인 얼굴 위주 학습 -> 동양인 인식률 낮음 아시아인 데이터 보강, 데이터 증강
채용 AI 특정 성별,학력 우대 -> 차별적 추천 성별,학력 비식별화, 공정성 메트릭 기반 모델 수정
금융 신용평가 나이,지역별 데이터 편중 -> 특정 계층 신용 점수 불리 인구 통계 기반 샘플링, 리밸런싱 기법 적용

정규화(Normalization) & 표준화(Standardization)

1. 개념 비교

항목 정규화 (Normalization) 표준화 (Standardization)
목적 데이터 값을 일정 범위로 스케일링 데이터 분포를 평균 0, 표준편차 1로 변환
수식 $x’ = \dfrac{x - x_{min}}{x_{max} - x_{min}}$ → [0, 1] $x’ = \dfrac{x - \mu}{\sigma}$ → 평균=0, 분산=1
전제 분포 가정 없음 가우시안(정규) 분포 가정 선호
주요 사용처 딥러닝 (신경망, 이미지/텍스트 임베딩 등) 통계/머신러닝 (SVM, PCA, K-Means, 회귀 등)

2. 활용 분야

분야 주로 쓰는 기법 이유
딥러닝 (신경망) 정규화 입력값 범위 고정 → 가중치 업데이트 안정화, Gradient Exploding/Vanishing 완화
머신러닝 (통계 기반) 표준화 공분산 기반 알고리즘(PCA, LDA, SVM 등)에서 변수 간 스케일 차이 제거
거리 기반 알고리즘 정규화 or 표준화 KNN, K-Means 등에서 변수 단위 차이에 따른 거리 계산 왜곡 방지

3. 주의할 점

  • 학습 데이터로만 스케일링 기준($x_{min}$, $x_{max}$, $\mu$, $\sigma$)을 계산하고, 테스트 데이터는 같은 기준을 적용해야 함 → 데이터 누수(Data Leakage) 방지

  • 극단값(Outlier) 존재 시 Min-Max 정규화는 민감 → 표준화(Z-score)나 로버스트 스케일링(Robust Scaler) 사용 고려

  • 딥러닝에서도 Batch Normalization, Layer Normalization처럼 학습 과정 내에서 표준화 계열 기법을 사용하기도 함

텍스트 데이터 정제 (스페셜 토큰)

  • 자연어 처리(NLP) 모델은 입력 텍스트를 토큰(token) 단위로 분리하여 처리
  • 모델 학습 및 추론 과정에서 특별한 의미를 가지는 토큰(Special Token)을 활용
  • 시퀀스 처리, 패딩, 마스킹, 문장 구분, 분류 등에 필수적 역할

주요 스페셜 토큰

토큰 의미 / 역할 사용 예시
<s> / [BOS] 문장 시작(Start of Sequence) 디코더가 문장 생성 시작을 알림
</s> / [EOS] 문장 끝(End of Sequence) 문장 종료 지점 표시
<pad> 패딩(Padding) 시퀀스 길이 맞추기 → 배치 단위 처리
<unk> 알 수 없는 단어(Unknown) 사전에 없는 단어(OOV) 대체
<sep> 구분자(Separator) BERT 문장쌍 입력 시 두 문장 구분
<cls> 분류(Classification) 토큰 문장 전체 의미 요약 → 분류 태스크에 활용 (BERT)
<mask> 마스킹(Masked token) MLM(Masked Language Model) 학습 시 단어 가려놓고 문맥으로 예측

모델별 처리 방식

Sequence-to-Sequence (S2S) 모델

  • 사용 예 : 기계번역(Transformer, LSTM 기반 Encoder-Decoder)
  • 특징
    • 길이 맞추기 위해 Padding 사용 (보통 EOS 뒤에 채움)
    • 사전에 없는 단어는 <unk>로 치환 → 정보 손실 발생
    • 예:
      1
      2
      Inoput : <s> 나는 학생 입니다 </s> <pad> <pad>
      Output : <s> I am a student </s> <pad> <pad>

Bert (Bidirectional Encoder Representations from Transformers)

  • 사용 예:문장 분류, 개체명 인식, 질의응답 등
  • 특징
    • 입력 시 [CLS] / [SEP] 토큰으로 문장 전체 구조 표현
    • 단어를 subword 단위로 분해 (WordPiece, SentencePiece) -> OOV 문제 완화
    • 학습 시 일부 토큰을 [MASK]로 가려 문맥 기반 예측 학습(MLM)
    • 예:
      1
      2
      Input : [CLS] 나는 [MASK] 입니다 [SEP]
      Model : 학생 -> 문맥으로 예측

Pandas 핵심 기능 정리

데이터 입출력 & 기본 확인

범주 코드 예시 설명
데이터 불러오기 pd.read_csv('data.csv') CSV 파일 읽기
데이터 확인 df.head() 상위 5개 행 보기
df.info() 데이터 타입 및 결측치 정보
df.describe() 기초 통계 정보 확인

결측치 처리

코드 예시 설명
df.isnull().sum() 컬럼별 결측치 개수 확인
df.dropna() 결측치가 있는 행 제거
df['col'].fillna(df'['col']).mean() 평균값으로 결측치 채우기
df.dropna(axis=0, thresh=5) 5개 미만 값만 있는 행 삭제
df.dropna(axis=1) 결측치가 하나라도 있는 열 삭제

inplace=True

  • df.dropna(inplace=True) -> 원본 df 자체가 변경됨
  • 기본값 False는 새로운 DataFrame 반환 -> 원본 유지

중복 처리

코드 예시 설명
`df.drop_duplicates() 완전 동일한 행 제거
`df.drop_duplicates(subset=[‘user_id’,’date]) 특정 컬럼 기준 중복 제거

데이터 타입 변환

코드 예시 설명
`pd.to_datetime(df[‘data’]) 문자열 -> 날짜 변환
`df[‘category’].astype(‘category’) 범주형 데이터로 변환

조건 필터링 / 새로운 컬럼 생성

코드 예시 설명
`df[df[‘age’] > 30] age가 30 이상인 행 선택
`df[‘bmi’] = df[‘w’]/(df[‘h’]/100) ** 2 BMI 계산 후 컬럼 추가

그룹화 / 집계

코드 예시 설명
`df.groupby(‘category’)[‘sales’].sum() 카테고리별 판매 합계

정렬

코드 예시 설명
`df.sort_values(by=’date’, ascending=False) 날짜 기준 내림차순 정렬

이상치 탐지 (IQR 활용)

1
2
3
4
Q1 = df['c'].quantile(0.25)
Q3 = df['c'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['c'] < Q1 - 1.5*IQR) | (df['c'] > Q3 + 1.5*IQR)]

문자열 처리

코드 예시 설명
df[‘name’].str.lower() 소문자 변환
df[‘name’].str.strip() 공백 제거
df[‘email’].str.split(‘@’).str[1] 이메일 도메인 추출

날짜 / 시간 처리

코드 예시 설명
`df[‘date’] = pd.to_datetime(df[‘date’]) 날짜 변환
`df[‘year’] = df[‘date’].dt.year 연도 추출
`df[‘month’] = df[‘date’].dt.month 월 추출
`df[‘weekday’] = df[‘date’].dt.day_name() 요일 추출
`df[‘end’] - df[‘start’]).dt.days 날짜 차이 계산

범주형 인코딩

코드 예시 설명
df['cat'].astype('category').cat.codes 레이블 인코딩
`pd.get_dummies(df, columes=[‘cat’]) 원-핫 인코딩

데이터 병합

코드 예시 설명
`pd.merge(df1, df2, on=’id’, how=’inner’) 내부 조인
`pd.merge(df1, df2, on=’id’, how=’left’) 왼쪽 조인

피벗 테이블

코드 예시 설명
df.pivot_table(index=’cat’, columns=’year’, values=’sales’, aggfunc=’sum’) 피벗 테이블 생성

샘플링

코드 예시 설명
`df.sample(frac=0.1, random_state=42) 10% 무작위 샘플 추출

포인트

  • inplace=True -> 메모리 절약, 체인 연산 어려움 -> 실수 시 원복 힘듦
  • 체인 연산 / 디버깅 편의성 위해 보통 기본값 False 사용 권장 후 필요한 경우 마지막에 덮어쓰기
  • 대용량 데이터 : chunksize 옵션으로 CSV 읽기 (pd.read_csv(..., chunksize=100000))

데이터 증강 (Data Augmentation) 정리

  • 데이터 증강은 기존 데이터를 변형/합성하여 모델이 더 일반화되도록 돕는 기법
  • 특히 이미지, 음성, 텍스트 등 비정형 데이터 처리에서 많이 사용
  • 목적
    • 데이터 부족 문제 해소
    • 모델이 다양한 상황 (노이즈, 가림, 색 변화 등)에 강건해지도록 개선
    • 과적합(Overfitting) 완화

주요 기법별 특징

기법 적용 분야 방법 장점 주의할 점
Gaussian Blur 이미지 가우시안 커널로 이미지 흐리게 해상도/화질 저하 상황 대응, 과적합 방지 디테일 손실 → 작은 물체 탐지 악영향
Random Erasing 이미지 임의 영역 제거 후 채움 가림(occlusion) 상황 대응, 정규화 효과 중요한 객체 삭제 시 성능 저하 가능
Mixup 이미지·오디오 두 샘플 입력+레이블 선형 혼합 일반화 향상, 과적합 완화 비현실적 샘플 → 해석 어려움, 경계 모호화
CutMix 이미지 한 이미지 일부를 다른 이미지에 붙임 Mixup보다 객체 형태 보존 원본과 다른 의미 생길 수 있음
Color Jitter 이미지 밝기·대비·채도·색조 변환 다양한 조명 상황 대응 과도 시 실제 데이터와 괴리
Noise Injection 이미지·오디오·탭울러 랜덤 노이즈 추가 모델이 노이즈에 강건 너무 심하면 원본 패턴 왜곡
SMOTE 탭울러(불균형 분류) 소수 클래스 주변 k-NN 보간 불균형 개선, 다양성 증가 이상치 주변 합성 → 성능 저하
ADASYN 탭울러(불균형 분류) 어려운 영역에 집중 합성 경계 학습 강화 노이즈도 강화 가능, 과적합 위험
SpecAugment 음성 스펙트로그램 구간/주파수 마스킹 음성 다양성 증가 정보 손실 주의
Back Translation 텍스트 번역 후 다시 원문 언어로 역번역 자연스러운 문장 다양화 번역 품질 따라 성능 좌우
EDA 텍스트 동의어 치환, 삭제, 삽입, 순서 변경 간단·빠른 증강 의미 왜곡 가능성 있음

그래프 데이터 증강

구분 기법 설명 장점
구조변형 Edge Dropping 무작위로 일부 엣지 제거 연결 희소화, 과적합 방지
구조변형 Edge Perturbation 엣지를 랜덤 추가/삭제 구조 다양성 증가
구조변형 Node Dropping 일부 노드와 연결 엣지 제거 중요 노드 의존 감소
구조변형 Subgraph Sampling Random Walk/BFS로 부분 그래프 추출 대규모 그래프 학습 효율 ↑
노드 특성변형 Feature Masking 일부 노드 피처를 0으로 마스킹 정보 불완전성에 강건
노드 특성변형 Feature Perturbation 노드 피처에 노이즈 추가(예: Gaussian) 잡음 환경 대응
노드 특성변형 Attribute Shuffling 동일 클래스 내 노드 피처 섞기 데이터 다양성 증가
Mixup 계열 Graph Mixup 두 그래프/노드 임베딩을 선형 보간 결정 경계 부드러움, 일반화 ↑
Mixup 계열 Manifold Mixup latent space에서 보간 일반화 성능 ↑
Mixup 계열 GraphSMOTE 소수 클래스 근처 synthetic node 생성 클래스 불균형 완화
고급 기법 DropEdge 학습 중 일부 엣지 랜덤 drop over-smoothing 완화
고급 기법 GraphCL/GRACE 등 두 증강 뷰를 만들어 contrastive loss 학습 표현 학습 강화, 라벨 부족에 효과
고급 기법 Adversarial Augmentation 구조/피처에 adversarial perturbation 추가 모델 강건성(robustness) 강화

그래프 데이터 증강 (Generative Model)

Diffusion Model (확산 모델)

  • 원리
    • Forward: 데이터에 점진적으로 노이즈 추가 → 가우시안 분포
    • Reverse: 학습된 네트워크가 노이즈 단계적 제거 → 샘플 생성
  • 특징
    • 매우 고품질 샘플, 모드 붕괴 거의 없음
    • 학습·샘플링 느림(최근 DDIM 등으로 개선)

GAN (Generative Adversarial Network)

  • 원리
    • Generator: 가짜 데이터 생성
    • Discriminator: 진짜/가짜 판별, 적대적 학습으로 Generator 개선
  • 특징
    • 학습/샘플링 빠름, 고품질 생성 가능
    • 단점: 학습 불안정, 모드 붕괴(다양성 부족)

VAE (Variational Autoencoder)

  • 원리
    • Encoder: 데이터를 잠재 공간 확률분포로 인코딩
    • Decoder: 잠재 벡터에서 데이터 복원, KL Divergence로 정규화
  • 특징
    • 안정적 학습, 잠재 공간 해석 용이(인터폴레이션 적합)
    • 단점: 생성 품질이 GAN·Diffusion 대비 낮고 흐릿한 경향
Author

Hamin Lee

Posted on

2025-08-29

Updated on

2025-08-29

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.