티스토리 뷰

(해당 포스트에서 소개하고 있는 "데이터 전처리 대전" 책은 한빛미디어로부터 제공받았음을 알려드립니다.)

그림 1. 데이터 전처리 대전 

 회사에서 인공지능 관련 업무를 하다보면, (물론 사람마다 나누는 기준은 다를 수 있겠지만...) 여러 부류의 일들이 있다. 당연히 모델 개발이나 이를 실제 프레임워크에 반영해서 넣는 일이 주 업무이겠지만, 이런 일 외적으로 개인적으로 중요하다고 생각하는 일이 하나가 있다. (이것도 기준이 다르겠지만) 내 기준에서는 Data Preprocessing, 다르게 표현하면 데이터 전처리이다. 뭐 다른 업무 처럼 딥러닝/머신러닝 모델을 만든다거나 그런 기술을 집어넣는 일이 아니기에 전체 업무에서는 그렇게 부각이 되는 건 아니지만, 어차피 그런 모델을 개발할 때 다 필요한게 모델에 집어넣고 학습시킬 데이터이고, 이런 데이터의 형식은 일정해야 되기 때문에 그만큼 원론적인 룰이라고 생각한다. 

 사실 내가 하는 일에서는 데이터 전처리의 필요성이 크다. 센서 데이터를 다루는 이상, 센서에서 정상적인 값을 읽지 못했을 경우 채워지는 NaN는 당연히 처리해야 될 데이터이고, 가끔 오동작으로 비정상적인 데이터가 저장된 경우는 더 골치가 아프다. 이 비정상적인 값이 진짜 이런 이상한 현상이 발생해서 찍힌 값인지, 아니면, 센서가 오동작해서 찍힌 값인지, 아니면 script가 도는 시스템이 중간에 멈춰서 이런건지 원인을 찾기가 애매하기 때문이다. 또 이런 데이터가 발생했을 경우에 대한 후처리도 고민해야 한다. 이런걸 할려면 포괄적으로 데이터를 많이 보고 이해하면서, 나름의 Domain Knowledge도 필요하고, 특정 문구를 처리하기 위한 정규표현식도 알아야 한다. 

 여기서 소개하는 이 책은 그 많은 데이터 처리 문제 중에서도 딱 전처리에 대한 노하우를 기술한 책이다. 이론적으로만 데이터 전처리를 하자면, 딱 케이스에 필요한 API만 찾아다가 쓰면 별 문제가 없다. 그 데이터의 양이 적다는 가정하에만 말이다. 데이터 양이 많아지면, 자연적으로 우리가 상식상에서 알고있는 API만 써서 처리하기에는 그 효율성이 너무 낮다. 그런 관점에서는 알고 있고, 쉬운 API가 아닌 "효율적인" API를 써야 한다고 생각한다. 그래서 그냥 정보가 아닌 노하우라고 표현한 이유이기도 하다. 책 내용도 보면 우리가 잘 알고 있으나 비효율적인 코드와 간단하고 매우 효율적인 코드를 Not awesome과 Awesome 으로 나눠서 설명하고 있다.

 개인적으로 좋다고 생각한 부분은 데이터 전처리도 그 나름의 주제별로 나눠서 설명했다는 것이다. 아마 주요 내용을 다루는 부분이 Part 2. 데이터 구조 전처리일텐데 여기서는 딱 이 주제들로 구분지어 설명하고 있다.

  • 추출 (Select)
  • 집약 (Aggregation)
  • 결합 (Join)
  • 분할 (Split)
  • 생성 (Generate)
  • 전개 (Spread)

또한 데이터 내용 전처리에서도 자료형별로 전처리하는 기법을 다음과 같이 제시하고 있었다.

  • 수치형 (Numerical)
  • 범주형 (Categorical)
  • 일시형 (datetime)
  • 문자형 (Character)
  • 지리형 (GIS)

 데이터 전처리를 많이 해본 사람들이라면 어쩌면 이런 주제들이 익숙할 것이고, 새로 접하는 사람도 이런 주제에 대해서는 눈여겨보면 좋을만한 주제들로 정리가 잘되어 있었다. 그리고 데이터를 많이 처리하는 언어 중에서도 많이 사용되는 것이 Python과 R, 그리고 SQL일텐데, 이 책에서는 이 3가지 언어를 모두 커버하려고 노력했다. 그래서 예시도 되도록이면 언어별로 좋은 사례들을 제공하는 형태로 되어 있다. 이 부분은 어쩌면 한가지 언어만으로 데이터 전처리를 시도하는 사람에게는 해당 페이지들이 조금 낭비처럼 느껴질 수 있다. 물론 전처리 주제에 관한 컨셉을 다양한 언어로 표현한 부분에 대해서는 개발자 환경의 다양성을 감안해서 작성되었을 수도 있겠지만, 만일 내가 Python은 알고 SQL, R은 모르는 개발자다 싶으면, 이 책이 나한테 큰 메리트가 있을까 하는 의구심이 조금은 생길 수 있을듯 하다. (사실 나같은 경우가 좀 그랬다. 물론 평소에 SQL, R은 공부해야 되겠다 하는 마음가짐은 있지만, 문법도 익숙하지 않은 상황에서는 전처리에 바로 적용하기 어려운 부분이 좀 있었다.)

 그럼에도 불구하고, (Python만 한정해서 보더라도) 이 책에 담긴 전처리 노하우들은 실무에서도 바로 쓸 수 있을만큼 꽤나 도움이 많이 되었다. 딱 책에 명시된 주제가 내가 겪고 있던 문제에 대한 것들이 많았기 때문에, 그런 부분을 Awesome 코드만 따와서 적용해보기에 너무 좋았던 책이었던 것 같다.

 요약하자면 개인적인 관점에서는 이 책이 너무 많은 개발자들의 다양성을 존중하려고 노력했고, 그러면서 약간 알맹이들이 조금씩은 빠진듯한 느낌이 조금씩 있었지만, 데이터 전처리라는 주제를 딱 놓고 봤을 때는, 실무에서 겪을법한 일에 대한 주제와 그 예시들이 잘 설명되어 있어 실무에 응용하기 좋았던 부분은 이를 필요로 하는 독자들에게는 도움이 되지 않을까 하는 생각을 해본다.

댓글