개요
본 리뷰는 한빛미디어
출판사 "파이썬을 활용한 머신러닝 쿡북(크리스 알본 저)"
를 읽고 얻은 지식을 정리한 글입니다.
데이터사이언스의 8할은 전처리
자! 이제 난 제법 보스턴 주택가격 예측도 돌려봤고, MNIST 데이터셋 손글씨 인식도 해봤고, 또 Iris 붓꽃 분류도 능히 해냈다. 근데 왜 현실로 돌아오면 난 아무것도 할 수가 없지? 이 책에 관심있는 독자분이라면 다들 비슷한 고민을 한번쯤 해보셨거나 마주하고 있는 중일 것이다. 필자 역시 마찬가지였고 지금은 나아가긴 했지만 새로운 유형의 데이터 셋을 만날 때마다 비슷한 고민에 빠진다.
머신러닝과 딥러닝을 마주하며 겪는 우리의 고민은 여러 유형이 존재하지만 당장 맞닥드리게 되는 크게 2가지 부류의 문제가 있다. 하나는 데이터 특성을 파악한 후 어떻게 해야 모델에 떠먹여 줄 수 있을지.. 즉, 전처리에 대한 고민
이고, 다른 하나는 어느정도의 방법론은 찾아냈는데 언어의 벽 - Python, Julia, R, Swift - 등을 사용하면서 문법을 모르거나 또는 그 언어다운 기법을 사용할 줄 몰라
나만의 방식으로, 이상한 문법으로 빙빙 돌아가며 시간과 성능을 낭비하는 문제이다.
머신러닝 모델을 배워서 자신감도 생겼겠다, 내공을 튼튼히 하고자 머신러닝 관련 수학 개념도 잡았고, 코딩 더 매트릭스 같은 책으로 선형대수도 배웠고, 통계학의 기본기도 다잡으며 여기까지 왔는데 할 수 있는게 별로없다니.. 독립변수, 종속변수가 수치형인지 범주형인지 이진인지 숫자인지 등
데이터 성격에 따른 통계학적 개념도 어느정도 잡았는데 실무에서 마주친 데이터를 보고 머뭇거리게 될 수 밖에 없었던 경험. 그 무서운 경험에서 벗어나고 싶다면, 전처리에 대한 두려움을 없애고 싶다면, 필자가 아는 한 국내에선 이 책이 으뜸이라 말하고 싶다.
몸값 높은 데이터사이언티스트라면 현실에서 데이터를 마주했을 때 EDA와 시각화등을 통해 데이터의 생김새가 어떤지 감을 잡을것이다. 그리고 그간의 경험으로 축적된 내공을 통해 어떤 모델을 선택하고 어떤 평가지표를 적용할 지 견적이 나올 것이고, 모델이 최고의 성능을 발휘할 수 있도록 모델의 입맛에 맞게 전처리 작업에 돌입할 것이다. 그런 전문가가 아니라면 우리 대부분은 상당히 방대한 전처리의 범위에 압도당하고, 데이터의 특성에 따라 분석 기법도 천차만별이라는 사실에 좌절하게 된다.
실무에서 쉽게 맞닥드리게 되는 다음의 질문을 생각해보자.
-
이미지에 나타난
사물의 경계선
을 표시하고 싶다. 그런데 어떻게 그리지?
-
기껏 학습에 사용할 사진을 열심히 찍었다. 그런데
빛에 반사
가 되었네? 빛의 반사는 어떻게 지우지?
-
평가지표라고는 MSE, ROC Curve, 정확도, Score Method 등 기본 지식만 갖췄는데
나만의 지표
는 어떻게 만들수 있을까?
-
방금 만든 로지스틱 회귀 모델의
분산을 줄이고 싶은데
이거 가능한건가?
-
성별 데이터
불균형
이 심한데 이거 그대로 돌려도 과적합에 빠지진 않으려나? 성능에 문제는 없으려나?
-
명목변수
를 특성 인코딩을 거쳐 수치로 바꿨는데 왜 원하는 결과대로 안나오지? 만약 위 질문 중 단 한번이라도 비슷한 고민을 하셨다면 이 책이 솔루션이라고 말하고 싶다.
저자는 수십 페이지로 작성된 안내글이 아닌 하나의 직관적인 질문으로 이 책을 소개한다. 1000개의 범주와 누락된 데이터가 있는 수치 특성, 불균형한 클래스로 이루어진 범주형 타깃 벡터가 담긴 JSON 파일을 다루기 위해 어떤 레시피를 사용해야 할까?
이 짧은 문장에 대한 답이, 그리고 유사한 레시피가 이 책에 씌여있다.
필자는 저자, 역자, 출판사와 금전적으로 관련이 없지만 이 책은 돈이 전혀 아깝지 않다. 그동안 데이터 사이언티스트의 꿈을 꾸며 열심히 삽질했던, 캐글 점수 좀 올려보겠다고 책 뒤져보며 축적해 온 엄청난 공을 들여왔던 나의 내공이 전부 녹아있다니… 눈 앞에 늦게 나타난 것이 밉기도 하고, 몰랐던 기법을 배울 수 있어 이쁘기도 한 묘한 매력을 뽑낸다.
실무 혹은 캐글 등의 경진대회를 접할수록 전처리의 중요성은 알겠는데 도대체 고수들의 내공이 담긴 책이 없는 것이 늘 불만이었다. 원서나 외국 레퍼런스는 어학 실력이 부족해 종종 한계에 부딪혔고, 국내에 발간된 번역서 중 전처리라는 제목이 포함된 신간을 기쁜 마음으로 구입하기도 했는데 데이터 수집 내용만 잔뜩있는 것을 확인하고 눈물 흘리며 덮었던 경험도 있다. 다행히 이번엔 진짜가 나타났다. 다들 전처리, 전처리 말은 많지만 고작 결측치와 이상치 처리만 주구장창 다루고 실전에서 겪은 경험들은 왜 이리도 없는지.. 덕분에 갈증이 엄청나게 해소되었다.
전처리, SW 2.0, 통계 핵심개념 등 본 도서의 장점
앞 장에서 소개한 바와 같이 이 책의 화룡정점은 전처리이다. 하지만 그걸로 끝이 아니다. 전처리에 대한 필요 이상의 이론을 걷어내고 실무에 필요한 딱 그 수준으로 빨리 급한불을 끄게 솔루션을 제시한다. 그 후 깔끔하고 핵심이 담긴 언제 사용하고 왜 사용하는지 설명을 제시한다. 마지막으로 핵심과 어긋난 삽질으로 지치거나 가독성이 떨어지지 않도록 (예를 들면 Open CV가 Python 3.6에서 지원이 안되는 줄 알고 지웠다가 설치하는 등 또는 사이킷런 0.20 등 최신버전의 등장으로 deprecate되기 직전의 코드를 유지보수하지 않도록 지켜주는 등) 역자가 후방을 든든하게 지켜준다. 요약하자면 책의 구성은 아래 그림과 같이 과제 - 해결 - 설명 - 참고 - 덧붙임(역자의 주)
순서로 구성되어 있다. 책의 제목에 걸맞게 쿡북답게 구성되어있다.
덕분에 데이터의 기본 적재, 랭글링 기법을 기본으로 수치, 범주, 텍스트, 시계열, 이미지
에 이르기까지 종류별로 거의 완벽하게 대응할 수 있는 기법들을 핵심개념 위주로 알려주어 문제 해결에 바로 적용할 수 있음은 물론 가독성을 올려주기에 학습효과가 좋다.
그렇게 탄탄해진 개념을 바탕으로 다양한 예제와 친절한 주석, 설명을 통해 스프트웨어 2.0의 구현에 도움을 주는 프로그래밍 스킬을 전수한다. 특히 R에서 탄생한 Pandas를 Pandas답게(axis 활용 등), Python을 Python답게(리스트 컴프리핸션의 등) 사용할 수 있는 기법
을 전수한다.
특성추출 및 선택 파트에서는 주성분분석(PCA)에 대한 깔끔한 해결책 뿐만 아니라 데이터 종류, 분산 특성에 따라 베르누이, 카이제곱, RFECV 등 어떤 것을 사용해야 하는지
통계학 개념이 실무핵심 위주로 집대성 되어있고 어떤 상황에서 왜 써야 하는지 상세히 서술한다. 더불어 현존하는 인기 머신러닝 모델을 선형회귀부터 신경망까지 깊이있게 다루는데 하나같이 다른책에선 보기 힘든 모델 관련 실무
에서 맞닥드리게되는 문제 및 해결책 중심으로 구성되어 있어 저자 내공의 깊이에 적잖이 놀랐다. 마지막으로 pkl, HDF5등의 포맷으로 학습된 모델을 저장하고 불러오는 방법의 전수를 끝으로 화룡정점을 장식한다.
누구나 좋은책을 만나면 숨겨놓고 나만보고 싶다는 생각이 든 경험이 있을 것이다. 본 도서가 그렇다. 내가 그동안 열심히 시간을 투자해가며 얻은 팁과 내공들을 왜 세상에 이렇게 쉽게 내놓는 거냐며 투덜거리면서도 몰랐던 부분을 배울땐 그렇게 고마울 수 없는 묘한 책이다. 멋진 저자와 역자의 환상적인 콜라보로 탄생한 이 명작이 국내에서 필자와 같이 고군분투중인 데이터 사이언티스트 지망생들께 큰 도움이 될 것이라 믿어 의심치 않는다.
누가 읽어야 하는가?
-
sw 2.0 프로그래머 : 자체 데이터 사이언스 솔루션 개발, Python의 고급기술 습득
-
데이터 애널리스트 : 부족했던 프로그래밍 스킬을 채우기에 좋다.
-
데이터 사이언티스트 : 모델링 핵심에 대한 실무 전반을 돌이켜 보고, 더 좋은 성능을 보장하는 설계에 도움이 될 것이다.
-
기타 머신러닝, 딥러닝, Python, 전처리 등을 배우고 싶은 학생, 실무자, 경영자 등
책의 구성 및 요약
이 책은 크게 네부분으로 구성되며, 각 파트에서 다루는 내용을 아래와 같이 요약해 보았다.
-
1. 벡터, 행렬, 배열, 데이터 적재 및 랭글링(1 ~ 3장)
- Numpy를 활용한 벡터, 행렬, 배열, 희소행렬, 인덱싱, 벡터연산, 기초통계량, 전치, 행렬식, 고유벡터, 역행렬 등
- 샘플 데이터셋 적재 및 생성, CSV/ Excel/ Json/ SQL로 부터의 적재방법
- 데이터프레임, 행선택, 치환, 기초통계, 이상치, 결측치, 중복제거, 열원소순회, apply일괄적용, 병합 등
-
2. 데이터 종류별 전처리 기법(4 ~ 8장)
- 데이터 종류(수치, 범주, 텍스트, 시계열, 이미지)에 따른 차별화된 실무 솔루션 제공
- 스케일변환, 군집과 KNN을 활용한 이상치 처리, 결측치 처리, 순서유무에 따른 인코딩, 불균형 해소 등
- 구두점, 불용어, HTML파싱, 어간추출, 품사태깅, BoW, TF-IDF 처리기법 등
- 시차특성, 이동시간 윈도우 사용법, 이미지 이진화, 배경제거, 경계선 감지 등
-
3. 특성 추출,선택 및 모델의 평가,선택(9장 ~ 12장)
- 주성분분석, 클래스분리, 행렬분해, 희소데이터 특성 줄이기, 분산 기준으로 수치 및 이진 처리, 상관관계 특성 다루기 등
- 교차검증, 기본회귀, 기본분류, 이진분류, 다중클래스분류, 사용자정의 평가지표 만들기 등
- 완전탐색, 랜덤탐색, 전처리, 병렬화, 알고리즘 특화 기법 활용등을 통한 최선의 모델 선택 기법
-
4. 머신러닝 모델(13장 ~ 20장)
- 선형회귀, 트리, KNN, 로지스틱회귀, SVM, 나이브베이즈, 군집, 신경망 등
- 모델별 실전에서 마주치는 실무적 해결기법 정리
- 훈련된 모델의 저장 및 복원
요약하며…
현존하는 국내 서적 중 데이터사이언스 전처리 실무를 다루는 끝판왕이라고 요약하고 싶다. 머신러닝 모델과 개념을 다루는 책은 많지만 실전에서 특히 전처리를 다루는 책은 정말 접하기 쉽지 않다. 실무에서 맞닥드리기 쉬운 200가지의 실전문제에 대한 레시피를 제공함으로써 능숙한 데이터사이언스들이 실무에서 발휘하는 내공을 얻을 수 있다는 점이 매력이다. 모델에 따른 전처리 능력은 현직자들의 몸값을 높이는 스킬이므로 좀처럼 공유되지도 않는데다, 전처리는 데이터 유형, 분포, 성격에 따라 다루는 기법이 천차만별이기에 집대성하기 결코 쉽지 않은 분야이다. 실무 및 캐글 등 경진대회에서 깊이있게 고민했던 거의 모든 문제에 대한 해법이 담겨있어 놀랄 수 밖에 없다.
더불어 파이썬 다운 프로그래밍 기법을 활용한 샘플 제시로 좀 더 효율적인 프로그래밍 기법을 익힐 수 있게 해주는 점 또한 백미이다. 개념적으로 접근하기에도 쉽지 않은 실무문제에 골머리를 썩으면서, 또 한편으로는 파이썬의 효율적인 기법을 몰라 Pandas가 데이터를 다루는 방식을 몰라 레퍼런스를 찾고, 구글링하고, 커뮤니티에 질문을 올려 답이 올라오기만을 바라는 상황에 처해 본 프로그래머라면 이 책에서 제시하는 데이터사이언스에 특화된 프로그래밍 기법이 실무에 적용하기 얼마나 편리하게 정리되어있는지 감탄하게 될 것이다.
아울러 때로는 실무에 필요한 요소를 바로 찾아내기 어려운 방대한 통계의 바다에서 실무 문제에 어떤 기술을 어떤 상황에서 빠르게 적용해야 하는지 바로 제시함으로써 실무에 특화된 통계적 시각을 함양하게 해준다.
컬러판으로 출간되어 코드에 대한 가독성도 훌륭하여 아쉬운 점이 거의 없다. 굳이 찾자면 제목에 임팩트가 너무없기에 다른 서적과 중복된 내용을 다루는 듯한 느낌이 든다는 것? 머신러닝 서적을 수십권 보유한 필자와 같은 독자들의 시선을 한번에 사로잡기 어렵다는 정도이다. 필자에게 네이밍 센스는 없지만 적어도 “데이터 유형별 전처리 기법 전부 + 전처리를 통한 실무 모델링” 정도의 느낌이 풍기는 제목이었다면 더 유명해지지 않을까 싶다. 다행히도 본 리뷰를 접하는 독자가 있으시다면 적어도 다른책에서 흔히 다루는 뻔한 머신러닝 모델 의 중복 설명을 다루는 책이 아님을 아실 것이다. 관련 업계 실무자라면 꼭 일독을 권한다.
<한빛미디어 출판사>
믿고보는 “한빛미디어 출판사”. IT분야에서 독보적인 양질의 도서를 출판하는 회사입니다. “나는 프로그래머다” 팟캐스트 후원, DevGround2019 행사, 리뷰어 모집, 다양한 학습 지원 등 다양한 분야에서 사회에 공헌하는 개발자와 공생하는 업체입니다. IT분야에 관심 있으시다면 한빛미디어의 책으로 후회없는 출발을 하실 수 있습니다.
한빛미디어 바로가기