ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터 전처리: Missing Data와 Duplicate Data
    AI 2026. 1. 23. 09:01

    이터 분석과 머신러닝 프로젝트에서 가장 먼저 마주하는 난관은 '지저분한 데이터'입니다. "Garbage In, Garbage Out"이라는 말처럼, 품질 낮은 데이터는 아무리 좋은 알고리즘을 써도 나쁜 결과를 낳습니다. 오늘은 전처리의 핵심인 결측치(Missing Data)와 복 데이터(Duplicate Data) 처리 원리를 정리해 보겠습니다.

     

     

    Missing Data

    현실의 데이터는 수집 과정에서의 누락, 시스템 오류 등으로 인해 비어 있는 경우가 많습니다. 이를 어떻게 다루느냐에 따라 모델의 성능이 극명하게 갈립니다.

    💡 결측치 발생 유형 (참고 지식)

    단순히 "비어 있다"를 넘어, 왜 비어 있는지 이해하면 더 정교한 처리가 가능합니다.

    • MCAR (완전 무작위 결측): 결측이 발생한 원인이 다른 변수와 아무런 상관이 없는 경우.
    • MAR (무작위 결측): 특정 변수와 관련하여 결측이 발생했지만, 변수 자체의 값과는 상관없는 경우.
    • MNAR (비무작위 결측): 결측된 값 자체가 결측 원인과 직접 연관된 경우 (예: 고소득자가 소득 질문에 응답하지 않음).

    ✅ 결측치 확인하기

    Pandas에서는 isnull()과 sum()을 조합하여 컬럼별 결측치 개수를 파악합니다.

     
    # 컬럼별 결측치 개수 확인
    print(trade.isnull().sum())
    
    # 특정 컬럼(기타사항)에 정보가 아예 없다면 과감히 삭제
    trade = trade.drop('기타사항', axis=1)
    

    ✅ 처리 방법 1: 삭제(Deletion)

    결측치가 발생한 행이나 열을 제거하는 방법입니다.

    • 언제 사용하나? 데이터 양이 충분하고, 특정 행에 결측치가 너무 많아 정보 가치가 없을 때 사용합니다.
    • 주의점: 무작위로 삭제할 경우 데이터의 편향(Bias)이 생길 수 있습니다.
    # 특정 컬럼들이 모두 결측치인 행만 삭제 (how='all')
    trade.dropna(subset=['수출건수', '수출금액', '수입건수', '수입금액', '무역수지'], how='all', inplace=True)
    

     

    ✅ 처리 방법 2: 대체(Imputation)

    결측치를 적절한 값으로 채워 넣는 방법입니다.

    1. 대표값 사용: 평균(Mean), 중앙값(Median), 최빈값(Mode). (데이터 분산이 왜곡될 수 있음에 유의)
    2. 예측 모델 활용: 다른 변수들을 독립변수로 활용해 결측치를 예측하여 채움.
    3. 시계열 보간(Interpolation): 시계열 데이터라면 앞뒤 데이터의 흐름을 고려해 채움.

    실무 Tip: 인덱스 191번처럼 특정 국가의 특정 시점 데이터만 빠졌다면, 해당 국가의 전후 달 데이터를 평균 내어 채우는 것이 논리적입니다.

     
    # 전후 데이터의 평균으로 보완 예시
    index_191_value = (trade.loc[188, '수출금액'] + trade.loc[194, '수출금액']) / 2
    trade.loc[191, '수출금액'] = index_191_value
    

     

    시계열 데이터(Time-Series)는 왜 특별할까?

     

    • 시계열 데이터란? 시간 순서가 생명인 데이터 (주가, 기온, 로그 데이터 등)
    • 특징: 흐름(Trend)과 계절성(Seasonality)이 있음
    • 보완 기법: 단순 평균 대신 보간법(Interpolation)이나 앞뒤 값(ffill, bfill) 사용하기

     


    중복 데이터(Duplicate Data) 처리

    동일한 정보가 여러 번 기록되면 특정 데이터의 영향력이 과도하게 커져 모델이 왜곡될 수 있습니다.

    ✅ 중복 확인 및 제거

    Pandas의 duplicated()는 중복 여부를 True/False로, drop_duplicates()는 중복을 제거한 결과를 반환합니다.

    ✅ 중복 제거의 핵심 옵션: keep

    중복된 데이터 중 어떤 것을 남길지 결정하는 것이 중요합니다.

    • keep='first': 첫 번째 데이터만 남김 (기본값).
    • keep='last': 마지막 데이터만 남김.
    • keep=False: 중복된 모든 데이터를 삭제.
     
    # id가 중복된 경우, 가장 나중에 들어온(마지막) 데이터만 남기기
    df.drop_duplicates(subset=['id'], keep='last', inplace=True)
    

     

    🧐 마치며: 어떤 방법을 선택해야 할까?

    결측치와 중복 데이터 처리에 정답은 없습니다. 하지만 아래의 기준을 참고해 보세요.

    상황 추천 방법
    결측치가 전체의 5% 미만일 때 삭제 고려
    수치형 데이터인데 이상치가 많을 때 평균 대신 중앙값으로 대체
    시계열 데이터일 때 보간법(Interpolation) 또는 전후 값 활용
    범주형 데이터일 때 최빈값 또는 'Unknown'이라는 새로운 범주 생성

     

Designed by Tistory.