본문으로 건너뛰기

03-900. 더 넓은 이해

데이터 전처리, 더 넓은 이해

앞서 진행한 것 외에도 데이터 전처리는 할 것이 많아 어렵다. 작업에 사람의 수고가 많고 지루하며 시행착오가 많을 수 밖에 없다. 그래서 데이터 전처리는 항상 체크리스트(Checklist, 할 일 목록)를 만들고 그에 따라서 진행해야 한다. 체크리스트는 발생하는 예외나 작업에 따라 계속해서 보강해야 한다.
하지만 주어진 데이터와 부석 목표와 상황에 따라 전처리에 예외사항, 필요 없는 작업, 추가 작업이 생기긴다. 그래서 체계적으로 한다고 해도 변화가 생기며 실수하거나 놓치는 것들이 생긴다. 전처리 후에 분석과 모델링을 진행하다 문제가 발생해서 전처리를 다시 하는 일도 매우 많다.

데이터 전처리를 잘하는 방법은 최대한 성실하게 하는 것이고 꼼꼼하게 챙겨야 할 것은 AI챗봇을 이용해서 해야 할 일을 정리하고 하는 것이 좋다.

ℹ️알아두기: '데이터 전처리'의 반댓말인 '데이터 후처리'라는 용어는 없다. 분석 결과를 시각화하거나 보고서 형태로 포맷에 맞게 재집계하거나 재가공하는 것을 후처리하고도 하지만 실무에서 이 용어는 거의 사용하지 않는다.

데이터 전처리의 종류와 순서

앞서 데이터 전처리를 종류별로 진행했지만 종류가 많아 기억하기 어렵다. 작업하기 전에 데이터 전처리에서 어떤 일을 해야 하는지 AI챗봇에게 목록과 순서를 확인 할 수도 있다.

❓AI 프롬프트: 데이터 분석에서 데이터 전처리 단계에서 하는 일을 나열해서 알려주세요

전처리에서 하는 작업은 다음과 같다.

결측치 처리(Missing Value Handling)
데이터에 비어 있거나 누락된 값이 있는 경우, 이를 삭제하거나 적절한 값으로 대체한다.

이상치 처리(Outlier Handling)
데이터에서 비정상적으로 크거나 작은 값(이상치)을 탐지하고, 필요에 따라 제거하거나 수정한다.

데이터 정제(Data Cleaning)
오타, 중복, 불필요한 공백 등 잘못된 데이터를 수정하거나 제거한다.

데이터 변환(Data Transformation)
데이터의 단위 변환, 스케일링(정규화, 표준화), 로그 변환 등 분석에 적합한 형태로 데이터를 변환한다.

데이터 인코딩(Data Encoding)
범주형 데이터를 숫자형 데이터로 변환(예: 원-핫 인코딩, 레이블 인코딩)한다.

데이터 통합(Data Integration)
여러 데이터 소스를 합치거나, 필요한 컬럼만 추출하여 새로운 데이터셋을 만든다.

특성 선택 및 추출(Feature Selection & Extraction)
분석에 필요한 변수(특성)만 선택하거나, 새로운 변수를 생성한다.

데이터 샘플링(Data Sampling)
전체 데이터에서 일부만 추출하여 분석에 사용하거나, 데이터의 불균형을 해소한다.

데이터 분할(Data splitting) 기계학습을 위해서 데이터를 학습데이터와 테스트데이터로 분할한다.

데이터 정규화/표준화(Normalization/Standardization) 서로 다른 척도의 변수들을 동일한 범위로 맞춰준다. 예를 들어 나이(0-100)와 소득(수천만원대)을 함께 사용할 때 스케일을 맞춰야 한다.

피처 엔지니어링(Feature Engineering) 기존 변수들을 조합하거나 변형해서 새로운 의미 있는 변수를 만든다. 생년월일에서 나이를 계산하거나, 구매 빈도와 금액으로 고객 등급을 만드는 것이 예시다.

데이터 통합(Data Integration) 여러 소스의 데이터를 결합한다. 고객 정보 테이블과 구매 이력 테이블을 조인하거나, 서로 다른 형식의 파일들을 하나로 합치는 작업이다.

데이터 분할과 피처 엔지니어링은 모델링에 관련된 것이라서 앞에서 진행하지 않아고 이 책에서는 다루지 않는다.

데이터 전처리의 손서

데이터 전처리는 상황과 목적에 따라 순서가 달라진다. 하지만 일반적으로는 시행착오에 의한 작업을 최대한 줄이기 위해서 데이터 정제와 간련된 작업을 먼저하고 그 후에 변형 작업을 한다. 이 후에 데이터 결합이나 분석을 하면서 전처리에서 처리하지 못한 것을 발견하면 그 부분을 다시 한다.

데이터 전처리와 데이터 랭글링과 데이터 먼징

데이터 전처리 작업을 데이터 랭글링(Data Wrangling) 또는 **데이터 먼징(Data Munging)**이라고도 한다. 이 작업들은 주로 데이터 정제 후에 여러가지 목적의 분석에 적합한 형태로 데이터 형태를 바꾸는 작업을 말하기도 한다. 데이터 정제(Data cleansing)은 제대로 처리했다면 반복해서 하지 않지만 데이터 변형은 분석을 하는 작업 중에도 빈번하게 작업한다. 그래서 쉽게 쓸 수 있고 빠르고 여러 작업을 할 수 있는 유연한 도구가 필요한데 Python의 Pandas나 R의 DataFrame, dplyr와 같은 정형 데이터를 다루는데 특화된 자료구조 또는 라이브러리를 많이 사용한다. 그 외에 엑셀에서는 고급 함수와 피봇 테이블을 사용한다.

AI를 이용한 전처리 자동화

인공지능과 기계학습을 이용해서 데이터 전처리를 자동화할 수 있는 방법이 비교적 오랫동안 연구되어 왔다. 하지만 아직 완전한 자동화는 어렵지만 AI를 이용해서 일부 자동화를 하고 작업에 드는 시간과 수고를 줄일 수 있다.

데이터 전처리에 AI사용이 가능한 것

전처리에서 자동화 할 수 있는 것들이다.

  • 자동 결측치 처리
  • 이상치 자동 탐지
  • 자동 데이터 유형 감지
  • 텍스트 데이터 정제
  • 자동 특성(feature) 선택 (피처 엔지니어링)

데이터와 도메인 지식에 따른 맥락 문제

AI 기반으로 자동화를 완전하게 하지 못하는 이유는 도메인 지식이 필요한 경우나 데이터의 맥락(context, 컨텍스트)를 이해해야 하는 상황에서는 여전히 인간의 판단이 매우 중요하기 때문이다. 또한 AI 모델 자체가 제작될 때 사용한 훈련 데이터에 의존하기 때문에 새로운 유형의 데이터나 문제에 적응하기 어렵다. 따라서 AI를 이용해서 완전한 자동화를 하기 보다는 분석가의 작업을 보조하는 역할로 활용하는 것이 현실적이다.

AI를 이용한 전처리 코드 자동화

완전한 자동화는 아직 힘들지만 AI를 활용한 코드 생성은 큰 도움이 된다. AI로 전처리 작업을 자동화할 수 있는 방법 중 가장 효율적인 것은 데이터 전처리에 필요한 코드를 생성하고 수정하는 것이다. 전처리 과정에서 작성하는 코드의 특징은 비슷한 코드를 반복적으로 작성하거나 기존 코드를 변형, 수정하는 일이 자주 발생한다. 이 때 AI를 활용하면 필요한 코드를 신속하게 생성하거나 수정할 수 있다. 코드를 작성하지 않고 할 수 있는 AI자동화 방법은 데이터를 AI에게 모두 주고 지시하는 것인데 데이터 크기가 작으면 할 수 있지만 데이터 크기가 크면 진행 시간이 너무 길어지고 이용요금이나 많아지므로 현실적으로 아직 어렵다.

대량 데이터 전처리

대량 데이터(빅데이터)를 전처리할 때는 작은 데이터를 처리할 때와 다른 방식으로 접근해야 한다. 대량 데이터는 그 크기가 매우 커서 일반 노트북이나 단일 서버로는 처리하기 어려운 경우가 많다. 메모리 제한, 긴 처리 시간, 분산 처리 필요성 등의 문제가 있어 보통 데이터베이스나 빅데이터 전용 플랫폼을 활용하는 것이 일반적이다. 그래서 Python만으로 빅데이터를 직접 처리하는 것은 불가능하고, Python으로 빅데이터 플랫폼을 제어하는 코드를 작성하거나 빅데이터 플랫폼 환경에서 실행되는 코드를 만들어 처리해야 한다.

대량 데이터 처리의 문제는 대부분 컴퓨터의 계산 및 처리 용량 때문에 생긴다.

메모리 부족 문제

  • 전체 데이터를 메모리에 로드할 수 없음
  • 청크(chunk) 단위로 나누어 처리 필요
  • 스트리밍 방식으로 순차 처리

처리 시간 문제

  • 단일 머신으로는 처리 시간이 과도하게 오래 걸림
  • 병렬 처리 또는 분산 처리 필요
  • 샘플링을 통한 프로토타이핑 후 전체 적용

저장 공간 문제

  • 원본 데이터와 처리된 데이터를 모두 저장하기 어려움
  • 압축, 파티셔닝, 컬럼형 저장 포맷 활용
  • 불필요한 중간 결과물 즉시 삭제

이런 데이터 엔지니어링은 관련 분야의 고급 기술이 필요하므로, 데이터 분석가는 언제 데이터 플랫폼을 사용하고 데이터 엔지니어와 언제 어떻게 협업해야 하는지 파악하는 것도 중요하다. 하지만 최근 대부분의 데이터 플랫폼은 SQL 엔진을 가지고 있어 SQL로 데이터를 간리할 수 있다. SQL을 알고 있다면 데이터 엔지니어의 도움 없이도 상당 부분의 대량 데이터 전처리 작업을 할 수 있다.

⚠️주의사항: 빅데이터 플랫폼에서 대량 데이터 처리할 때는 작은 실수가 큰 비용으로 이어질 수 있다. 반드시 소규모 테스트를 거친 후 전체 데이터에 적용해야 한다.

데이터 전처리 도구

데이터 전처리와 관련된 도구들은 매우 많다. 데이터 전처리를 하지 않고 분석할 수 있는 경우는 사실상 없어 도구들이 많이 생겨났다.

Python으로 데이터 전처리를 할 때는 편리한 Pandas를 많이 사용한다. 데이터 플랫폼을 이용해서 전처리를 하려면 SQL엔진을 지원하는 경우는 SQL로 한다. 그렇지 않는 것들은 플랫폼에 지원하는 방식으로 처리하게 되는데 프로그래밍을 많이 해야 한다. 기본적인 수준의 데이터 전처리는 빅데이터가 아닌 것은 Python의 Pandas와 SQL만 알아도 할 수 있다.

아래에 데이터 전처리에 관련된 도구를 모두 나열한다. 이 중에 특별한 몇개를 제외하고는 시대와 유행에 따라 바뀐다. 데이터 분석을 할 때 이런 도구들 함께 이용하거나 데이터를 가져올 때 이용해야 하는 것들이 있다. 이 책에서 대부분 다루지 않지만 어떤 것들이 있는지는 알아두자.

데이터베이스 및 쿼리 도구

  • SQL: 대용량 데이터 처리와 복잡한 조인, 집계 작업에 최적화
  • NoSQL: MongoDB, Elasticsearch 등 비정형 데이터 처리
  • BigQuery, Snowflake: 클라우드 기반 대용량 데이터 웨어하우스

스프레드시트 도구

  • Excel: 소규모 데이터, 빠른 프로토타이핑, 비개발자 친화적
  • Google Sheets: 협업과 실시간 공유가 필요한 경우
  • 파워 쿼리(Power Query): Excel/Power BI의 고급 데이터 변환 도구

프로그래밍 언어 및 라이브러리

  • Python:
    • Pandas: 정형 데이터 조작의 표준
    • NumPy: 수치 연산과 배열 처리
    • Dask: 대용량 데이터 병렬 처리
    • Polars: 고성능 데이터프레임 라이브러리
  • R:
    • dplyr, tidyr: 데이터 조작과 정리
    • data.table: 고성능 데이터 처리
  • Scala: Apache Spark와 함께 빅데이터 처리

** 빅데이터 처리 플랫폼**

  • Apache Spark: 분산 데이터 처리 엔진
  • Apache Kafka: 실시간 스트리밍 데이터 처리
  • Hadoop: 대용량 데이터 저장 및 처리 생태계
  • Apache Hive: Hadoop 기반으로 SQL 쿼리를 MapReduce 작업으로 변환

전용 데이터 전처리 도구

  • Trifacta/Dataprep: 시각적 데이터 준비 도구
  • Talend: 오픈소스 데이터 통합 플랫폼
  • Alteryx: 드래그 앤 드롭 방식의 데이터 분석 도구
  • OpenRefine: 데이터 정제 전용 오픈소스 도구

클라우드 기반 도구

  • AWS Glue: 서버리스 ETL 서비스
  • Azure Data Factory: 마이크로소프트 클라우드 데이터 통합
  • Google Cloud Dataflow: 구글 클라우드 스트림/배치 처리
  • Databricks: 통합 분석 플랫폼

실시간 처리 도구

  • Apache Storm: 실시간 스트림 처리
  • Apache Flink: 저지연 스트림 처리
  • Redis: 인메모리 데이터 구조 저장소

도구의 선택 기준은 상황에 맞게 다르다. 선택할 때 중요한 것은 작업하는 곳의 데이터 상황에 도구가 맞는지, 작업자가 도구에 익숙한지, 그리고 비용이다. 데이터 처리를 해서 얻을 수 있는 이득 보다 비용이 더 높다면 그런 도구를 쓰는 것은 비합리적이다.

비정형 데이터 품질 검증

비정형 데이터를 일반적인 데이터 분석에서 사용하는 일은 많지 않다. 정형 데이터와 비슷한 점검을 하지만 절차는 간단한 편이고 비정형 데이터(텍스트, 이미지, 오디오 등)는 정형 데이터와 달리 명확한 스키마가 없어 품질 검증이 더 복잡하고 주관적이다. 단순한 규칙 기반 검증을 넘어 내용의 일관성, 관련성, 기술적 무결성 등 다양한 차원을 고려해야 한다.

텍스트 데이터

  • 언어 감지: 분석 대상 언어가 맞는지 확인한다.
  • 인코딩 검사: 문자 깨짐(예: ����)이 없는지 확인한다.
  • 구문 및 맞춤법: 문법 오류, 오탈자 등을 탐지하고 교정한다.
  • 불필요한 내용 제거: HTML 태그, 광고, 상용구 등 분석에 불필요한 요소를 제거한다.
  • 개인정보 탐지: 주민등록번호, 전화번호 등 민감 정보를 탐지하고 마스킹 처리한다.
  • 일관성: 용어 사용이 일관적인지, 약어 사용 규칙이 지켜졌는지 확인한다.

이미지 데이터

  • 해상도 및 크기: 분석에 필요한 최소 해상도를 만족하는지 확인한다.
  • 선명도 및 노이즈: 이미지가 흐리거나 노이즈가 심하지 않은지 평가한다.
  • 가림(Occlusion): 분석 대상 객체가 다른 물체에 가려지지 않았는지 확인한다.
  • 조명 조건: 이미지가 너무 어둡거나 밝지 않은지 확인한다.
  • 파일 무결성: 이미지 파일이 손상되지 않았는지 확인한다.
  • 레이블 정확성: (지도 학습의 경우) 이미지에 대한 레이블이나 주석이 정확한지 검증한다.

오디오 데이터

  • 배경 소음: 배경 소음이 너무 커서 주된 소리(예: 음성)를 방해하지 않는지 확인한다.
  • 샘플링 레이트 및 비트 깊이: 분석 목적에 맞는 오디오 품질(샘플링 레이트, 비트 깊이)을 가졌는지 확인한다.
  • 음성 명료도: (음성 인식의 경우) 발음이 명확하게 들리는지 평가한다.
  • 무음 구간: 불필요하게 긴 무음 구간이 있는지 탐지하고 처리한다.

비정형 데이터의 품질은 후속 작업인 자연어 처리(NLP), 컴퓨터 비전(CV) 모델, 음성 및 오디오 모델의 성능에 직접적인 영향을 미친다. '쓰레기를 넣으면 쓰레기가 나온다(Garbage In, Garbage Out)' 원칙은 비정형 데이터에서 더욱 중요하게 작용한다. 그래서 수준이 높고 많은 코딩과 엔지니어링 작업이 필요하다. 정형 데이터와는 양상이 많이 달라서 비정형 데이터 전처리 작업은 일반적으로는 데이터 분석의 일부로 여기지 않고 별도로 관리하는 것이 일반적이다.