이번 ADP 31회 실기는 최선을 다했기 때문에 후회는 크게 남지 않지만, 시험 특성 상 채점 기준이 명확하지 않아 합격에 대한 확신이 없었습니다. 시험 보고 나서 문제풀이를 복기해 봤을 때 잘못하면 불합격이다.. 라는 생각이 들어 불안에 떨었는데, 87점이라는 넉넉한 점수로 합격하게 되어 조금은 얼떨떨하네요.
Background
저는 대학에서 통계학을 전공했고, IT회사에 Data Science 직군으로 2019년 입사했습니다.
처음 입사했을 땐 데이터 플랫폼 개발과 엔지니어링 업무를 하다가, 지금은 팀을 옮겨서 AI 모델링, AI서비스 개발 업무를 하고 있습니다.
주 언어는 Python이며, 빅데이터분석기사 3회차(2021년 하반기) 시험에 응시, 합격한 이력이 있습니다.
Introduction
총 수험기간은 필기 약 2개월, 실기 약 5개월입니다.
저는 전공자이자 현직자이기 때문에, 직장인임에도 불구하고 준비 기간을 짧게 가져갈 수 있었습니다.
필기시험은 24회, 실기시험은 30회, 31회에 응시하였고, 아마도 필기 유효기간 끝나기 전 마지막 응시 기회였을 31회 시험에서 최종 합격하였습니다.
필기시험 준비 과정
ADsP 자격증 없이 경력으로 응시 조건을 채우고자 했고, 관련 경력 3년이 채워지는 2022년 초에 필기시험을 치렀습니다.
필기 공부는 진흥원에서 출시한 데이터 분석 전문가 가이드로 했습니다. 설명을 쭉 읽어보고 이해하고, 뒤에 있는 연습문제를 풀어보는 식으로 진행했습니다. 3회 정도 반복하니 시험일이 다가오더군요.
그런데 필기시험장에서 문제를 맞닥뜨려보니, 제가 공부한 내용과는 약간 차이가 느껴졌습니다. 책에 없는 내용이 좀 있는 느낌? 책도 워낙 두꺼운데다 지루하고, 시험 경향과도 좀 안맞는 진흥원 교재.. 합격은 했지만 딱히 추천드리고 싶지는 않습니다. 데이터에듀에서 나오는 파란책 보시는 게 더 좋을 것 같아요.
다행히도 서술형에서 개인적으로 익숙한 회귀분석 변수선택이 나와서.. 쉽게 점수를 땄고 한 번에 합격할 수 있었습니다. 객관식 점수 보니까, 서술형에서 20점 못 받았으면 떨어졌을 수도 있겠다 싶습니다.
실기시험 복기
필기와 실기 준비기간에 텀이 생긴 이유는, 필기 합격 이후 바로 결혼준비를 시작하게 되어서입니다. 직장 다니면서, 결혼준비와 실기준비까지 같이 하기에는 절대적인 시간이 부족했어요.
올해 봄 결혼식을 치르고 다시 일상에 적응할 때쯤, 작년에 합격했던 ADP 필기의 유효기간이 생각났습니다. 내년부터는 ADP 시험 횟수가 줄어든다고도 하고, 올해 안에 합격하지 못하면 앞으로 평생 못 딸 수도 있겠다는 생각이 들어 여름이 시작될 무렵 실기 준비를 본격적으로 시작했습니다.
30회 시험
두근두근 첫 시험! 지금까지 공부한 자료를 잔뜩 챙겨 들고 살짝 긴장한 채로 서일대학교에 갔습니다.
그러나 저를 맞이해준 건 낮선 시험환경이었습니다.
제가 공부했던 환경은 MacOS에 Jupyter Lab 환경, 시험장은 Windows에 Jupyter notebook 환경. Windows 키 배열에 적응할 때까지 오타를 냈고, notebook 셀 이동하는 방법도 몰라서 헤맸습니다. 시험장의 패키지 버전도 공부했던 버전과 달라서 애를 먹었습니다. seaborn에서 histplot을 사용할 수 없다니…
그리고 저는 시험 전 기출문제를 실전처럼 풀어봤을 때, 문제풀이 시간이 충분하겠다는 생각을 했습니다.
하지만 그 생각이 실전에서 발목을 잡았습니다. 시간이 여유롭다는 생각을 가지고 있으니 최대한 깔끔하게 답안을 작성하기 위해 공을 들이게 되더군요. 결국 먼저 덤볐던 통계 문제에서 시간을 너무 많이 쓰게 되었습니다. 그렇게 시간에 바짝 쫓기며 머신러닝 문제를 풀었고, 계속 실수를 연발했습니다. 독립변수에 종속변수를 포함시켜서 분석한다던가;;
심지어는.. 너무 급했던 나머지 마지막 제출할 때 파일명에다가 수험번호에 0을 앞에 하나 더 적어내는 실수를 해 버렸고, 결과는 0점.
재검토 요청을 했는데, 파일이 깨졌다는 답변이 돌아왔습니다. 파일은 그래도 제가 내용 확인하고 올린 거라, 수험번호 미스가 원인이 아닐까 생각하고 있습니다.
통계파트 선형계획법 15점짜리를 아예 손도 못댔기 때문에.. 수험번호를 제대로 적어서 제출했다고 해도 합격 여부는 장담하기 어려웠지만요ㅎㅎ 그렇게 저는 31회 시험을 준비하게 되었습니다.
31회 시험
30회 시험에서의 실수를 반복하지 않기 위해 노력했습니다.
우선, Docker를 사용하여 시험과 최대한 유사한 환경을 만들어 시험 공부를 했는데, 이번 시험에서 빛을 발했습니다. 시험 환경에서 scikit-learn의 LogisticRegression을 기본 파라미터로 사용하면 문제가 발생하는데, 이에 대한 해결 방안을 시험공부 할 때 연구한 적이 있어 버전업으로 해결하였습니다.
Docker 환경구축 관련 내용은 이 게시물에서 확인 가능합니다: https://hjben.github.io/adp-docker/
그리고 답안은 화려하지 않아도 가독성 있게끔만 작성하여 시간을 아꼈습니다.
통계 파트에서 베이즈 사후분포를 제외한 나머지는 다행히도 익숙해서 30분만에 모두 해결했고, 어렵고 난해했던 머신러닝 파트에 3시간 이상 투자했습니다. 결과물 제출도 여유 있게 진행했습니다. 30분 정도 남았을 때 우선 pdf 추출 후 제출하였고, 남은 시간동안 내용을 정리하여 한번 더 제출하였습니다.
실기 공부 방법
건강 관리
시험공부에 매진하느라 어쩌면 소홀할 수 있는 부분인데, 사실 가장 중요한 부분입니다.
31회 실기는 몸이 안좋아서 고생을 많이 했던 회차입니다. 시험 전날까지 몸살감기가 심했어요. 컨디션 좋은 상태로 시험을 봐도 붙을까 말까 할 것 같은데, 이 상태로는 탈락하게 될 게 뻔하다는 생각을 했고, 시험 3일 전부터는 체력 회복에만 집중했습니다. 다행히 시험 당일 아침에는 꽤 괜찮은 몸상태가 되었고, 알차게 4시간 잘 쓰고 돌아왔습니다. 1년 먹을 유자차랑 곰탕 이때 다 먹은 것 같네요.
(시험치고 나서 긴장이 풀렸는지, 그 다음주에 목감기랑 코감기 또 아주 독하게 앓았습니다;;)
코드북 만들기
여러 책을 공부하면서 주요 내용과 코드를 정리하고, 필요한 내용만 발라내는 작업을 진행했습니다. ADP 실기의 시험 범위는 사실상 무제한이고 교재 범위 외 내용도 상당수 나오기 때문에, 코드북은 계속 고쳐나간다는 생각으로 작업하였습니다. 교재의 내용을 기반으로 하면서, 설명이 부족하거나 없는 부분은 google 검색 등을 통해서 제 나름대로 내용을 채워나갔습니다.
시험이 다가오면 코드북을 인쇄해서 시험 중 내용을 쉽게 찾을 수 있도록 인덱싱해 두었습니다. 저는 이 작업을 시험 이틀 전에 진행했습니다.
코드북 Repo: https://github.com/hjben/adp
(데이터 경로가 제가 공부한 경로이고 업로드도 안 되어 있어서… 실행시키면 에러 납니다.)
저의 경우 업무를 하면서 어느 정도 코드가 손에 익었고, 시간이 많지 않다고 느껴서 책에서 제공하는 github 레포를 받아서 필요한 부분만 복사/붙여넣기한 다음 입맛에 맞게 수정했습니다. 그렇지만 코드는 직접 타이핑하는 것이 실력 향상에 더 좋습니다.
코드북을 잘 만들면 시험장에 책을 챙겨갈 필요가 없게 됩니다. 혹시 몰라서 책도 두어 권 가져가긴 했습니다만, 저는 시험 볼 때 코드북만 참고하였습니다.
기출문제 풀이
데이터마님(소니)님의 30회 실기 스터디에 참여했습니다.
31회 준비할 땐 같은 내용을 반복하게 될 것 같아서 스터디에 참여하지 않았습니다.
스터디는 기출문제 풀이를 숙제로 하고, 소니님의 해설을 곁들이는 방식으로 진행되었습니다. 저는 시간을 재면서 실전처럼 최종 pdf를 완성하는 방식으로 기출문제를 풀이하였습니다. 최신 회차 복기문제를 풀다 보니 실전감각 배양에도 많은 도움이 되었고, 시험에서 자주 쓰이는 코드 블록(데이터 전처리, 모델링, 기초 통계 등)에 자연스럽게 익숙해질 수 있었습니다.
또한, 스터디에서 다루지 않는 오래된 기출문제들도 데이터마님 사이트에서 찾아보고, 시험 전에 한번씩 풀어보았습니다. 이를 통해 어느 부분에 부족함이 있는지 확인하고, 그에 따라 코드북을 지속적으로 보완하였습니다.
공부했던 책
제가 실기 준비 중 참고했던 서적은 아래와 같습니다.
공통
(1) 파이썬: 한권으로 끝내기 (데싸라면, 빨간색 물고기, 자투리코드) - 추천도 상
ADP 실기 준비 기본서로, 처음 시작하기 좋은 책입니다. 저도 이 책부터 시작했어요. 기출 문제가 일부 수록되어 있어서 실전 연습에 도움이 되며, 답안을 서술하는 방법에 대하여 가이드 삼기 좋습니다. 머신러닝 패키지의 파라미터를 쭉 나열하고 있어 사용법을 참고하기에도 유용합니다.
단, 은근히 잘못된 부분도 많이 보이기에 (특히 통계파트) 책 내용의 절대적인 맹신은 금물입니다.
간간히 답안 작성에 참고하고자 시험장에 가져갔습니다. 한번도 열어보진 않았지만..
(2) 핵심만 요약한 통계와 머신러닝 파이썬 코드북 (조정임) - 추천도 상
31회 준비하면서 새로 구매해서 본 책으로, 위 책에서 빈 부분을 메우기 좋은 알찬 책입니다. 전처리, 분할과 교차검증, 평가지표와 거리지표 부분은 이런 것까지 있었나 하는 기법까지 다룹니다. 구판의 경우 악평이 좀 있었으나, 책이 최근 한번 개정되고 나서 가독성도 좋아지고 오타도 거의 없어졌습니다. 그러나 정말 많은 내용을 압축해서 담고 있기 때문에 처음 공부를 시작하시는 경우에는 어려울 수 있습니다.
통계 이론 부분도 제법 자세해서, 공식 참고용으로 보라책 대신 31회 시험장에 가져갔습니다. 그리고 수기 검정과 패키지 검정을 모두 소개하고 있는데, 사실 수기 검정은 시험장에서 거의 쓸 일이 없어 안 보셔도 되는 부분이긴 합니다.
31회 7번 문제였던 Cochran’s Q 검정도 이 책에 아주 잘 나와 있습니다.
머신러닝
(1) 파이썬 머신러닝 완벽 가이드 (권철민) - 추천도 중
머신러닝 바이블로 유명한 공룡책입니다. 머신러닝 기초 다지기에 좋은 책인 것 같습니다. 혹시라도 나올 수 있는 추천 시스템, 텍스트 분석에 대비하기에도 훌륭합니다.
다만 책의 코드는 약간 아쉬움이 느껴집니다. 평소 PEP8을 지키려고 노력하는 제가 봤을 때, 코드가 깔끔한 편은 아닙니다. 그리고 시험에 불필요한 함수화 코드가 많아서, 코드북 작성에 애먹은 책이기도 합니다.
30회 시험에는 챙겨갔지만, 31회 시험 땐 저만의 코드북을 믿고 챙겨가지 않았습니다.
(2) 파이썬 라이브러리를 활용한 머신러닝 (안드레아스 뮐러, 세라 가이도) - 추천도 중
scikit-learn 핵심 개발자가 쓴 책이라, scikit-learn을 제대로 활용해보고자 한다면 참고하기 좋습니다.
머신러닝 알고리즘의 장/단점 설명이 유용하며, 공통 (2)번 책의 머신러닝 부분은 이 책을 많이 참고한 것이 느껴집니다.
시각화 쪽은 mglearn이라는 패키지를 사용하여 간단하게 넘어가는 부분이 많아서 좀 아쉽습니다.
(3) 핸즈온 머신러닝 (오렐리앙 제롱) - 추천도 하
머신러닝과 딥러닝을 제대로 공부해보고자 하시는 분이라면 아주 좋은 책이지만, ADP 시험 준비에는 적합하지 않은 책입니다. 원리를 상당히 깊이 파고드는 편이라 비전공자의 경우 꽤 어려울 수 있습니다.
(4) 파이썬 라이브러리를 활용한 데이터 분석 (웨스 맥키니) - 추천도 하
파이썬 데이터 분석 입문 필독서로 numpy와 pandas 활용 능력을 기르는 데 제격인 도서입니다만, 위 책과 동일한 이유로 ADP 시험 준비에는 적합하지 않은 책입니다.
통계분석
(1) 통계학: 파이썬을 이용한 분석 (인하대학교 통계학과) - 추천도 상
보라책이라고 불리는 책으로, 통계의 이론적인 기초 잡는 데 도움이 됩니다. 내용이 깔끔하고 이해하기 쉬운 편이나, 기초통계 위주이며 통계분석의 전 범위를 망라하지는 못합니다.
혹시 수식을 이용한 풀이가 필요한 경우에 대비하여, 공식 참고용으로 30회 시험장에 가져갔습니다.
(2) STEP BY STEP 파이썬 비즈니스 통계분석 (김형수) - 추천도 중
통계 원리를 깊게 다루기보다는, 통계의 비즈니스/마케팅적 응용에 초점을 맞춘 책입니다.
요인분석, 신뢰도분석, 컨조인트분석, 비모수통계 등 얕고 넓게 기법을 다루고 있어 혹시 모를 통계 복병에 대비하기 좋은 책인 것 같습니다.
(3) 파이썬으로 배우는 통계학 교과서 (바바 신야) - 추천도 하
파이썬 코드를 통해 통계 원리를 설명하는데, 사실 시험 땐 패키지를 쓰기 때문에 크게 도움받기는 어려웠던 책입니다.
그리고 다른 책에 비해 깊이가 좀 많이 얕습니다. (전공자 버프가 있긴 하지만) 하루만에 다 봤어요.
(4) 데이터 과학을 위한 통계 (피터 브루스, 앤드루 브루스, 피터 게데크) - 추천도 하
위 책과 비슷한 내용이나, 조금 더 깊게 설명되어 있어 기초 다지기에 좋습니다. 다만 파이썬과 R을 섞어서 설명하는 점이 치명적인 단점이며, 구판이 R 위주의 서적이었어서 파이썬 코드가 없는 경우도 있습니다.
(5) 기타
대학 시절 공부했던 전공서적들을 일부 참고했습니다. 비모수 신뢰구간, 선형회귀의 디테일한 가정 등 인터넷에 정보가 많이 없는 기법들의 이론을 확인하고, 코드북에 구현하였습니다.
- Managerial Statistics (Keller)
- Practical Nonparametric Statistics (Conover)
- Applied Linear Regression Models (Kutner)
실기 시험장 Tips
문제풀이 순서와 시간 배분
통계 파트는 비교적 답이 명확하게 나오는 편이고, 알면 풀고 모르면 틀리는 분야여서 먼저 푸는 것을 추천드립니다. 머신러닝 배점도 높고 까다로운 최근의 문제 트렌드를 봤을 때, 통계에서 1시간 이상 사용하면 머신러닝 문제 풀 시간이 부족할 확률이 높습니다. 통계에서 최대한 시간을 아끼고, 머신러닝에 시간 투자 많이 하시기를 바랍니다.
그리고 4시간은 매우 짧은 시간이기 때문에, 화장실 가는 시간이나 간식 먹는 시간 등등 최대한 아끼고 답안 한 글자라도 더 쓰세요. 생각보다 화장실은 멀리 있고, 시험 끝나면 맛있는거 더 많이 먹을 수 있습니다.
Markdown
진흥원에서는 답안 작성 시 Word 등 편집기 활용을 추천하지만, 시간 절약을 위해서는 문제풀이와 답안작성을 거의 동시에 할 수 있는 Markdown을 적극 활용해야 합니다. pdf로 바로 다운로드 받는 것 보다는 html로 노트북 파일 다운로드 받고, html을 연 다음 우클릭 -> 인쇄 -> pdf로 저장 하시면 pdf가 깨지지 않습니다. 인쇄 환경설정 시 배율을 50%로 조정하면 보기 좋은 깔끔한 답안이 나오니 사용해 보시길! Markdown을 쓰기로 마음먹으셨다면, pdf 출력을 시험 전에 꼭 한번 해보세요. 막상 시험장에서 잘 안되면 엄청 당황스럽거든요;
화면 분할
시험 문제는 복사가 불가능해서, 답안 작성과 동시에 문제를 보려면 화면을 나눠야 합니다. 미리 적응하시는 게 좋습니다. 저는 왼쪽에 Jupyter, 오른쪽에 시험문제 놓고 시험 치렀습니다. (안그래도 모니터 작은데..)
사전 점검 시간
본 시험은 10시에 시작되지만, 시작 30분전에 사전 점검이라고 해서 Jupyter notebook에 접속할 시간을 줍니다. 이때 접속하는 notebook과 실제 시험 때 접속하는 notebook은 같기 때문에, 사전 점검 때 세팅해 둔 게 시험 때도 그대로 유지됩니다. 이 시간에 notebook 폭 설정이나, 한글 폰트 설치, warning 제거, 필요 패키지 import등을 해두시면 좋습니다.
시간 여유가 된다면 데이터 불러와서 EDA 해보시는 것도 도움이 많이 됩니다. 다만 여기까지는 감독관에 따라 허용되지 않는 경우도 많으니 감독관 눈치 보면서 적당히..
부분점수
정확한 답안이 아니더라도 부분점수가 어느 정도 있는 것 같습니다. 모르는 내용이 나오더라도, 관련 있는 내용은 최대한 쓰고 나오시기를 추천드립니다. 통계 쪽보다는 머신러닝 쪽에 부분점수가 많은 듯 합니다. 개인적으로 이번에 머신러닝 답안이 그렇게 만족스럽지 않았는데 꽤 높은 점수가 나왔습니다.
오픈북 시험이니, 가져가신 책에 뭐라도 적혀 있지 않을까요? 우리의 1점은 소중하니까~
EDA
머신러닝 문제 중 EDA는 시간도 오래 걸리고 요구사항도 많은 데 비해 배점이 매우 적은 편입니다. pandas-profiling 패키지의 영향이 아닐까 싶습니다. EDA에 많은 시간을 투자하시기보다는, 요구사항만 적당히 만족시키는 선에서 끝내고 모델링으로 넘어가는 것이 좋다는 생각입니다. EDA 전처리에 공들이다가 모델링 날림으로 하는 것 보다는, 전처리가 애매하게 되었더라도 모델링을 요구사항에 맞게 정확하게 하는 것이 더 점수가 높습니다. 모델링 배점이 더 크거든요.
통계분석 in 머신러닝
독립변수-종속변수 유의성 검정으로 변수 선택하는 문제가 30회 시험에 나왔었는데, 31회 시험에서도 나왔습니다. 통계분석 배점이 줄면서, 머신러닝 파트에 통계분석을 녹이는 방식으로 통계분석 역량을 확인하려는 것으로 보이며.. 당분간은 나올 확률이 높으니 준비해두시는 것이 좋겠습니다.
마치며
ADsP나 빅데이터분석기사는 흔하니까, ADP 하나 가지고 있으면 어떨까 싶어 도전하게 된 시험이었습니다. 시험의 난도나 합격률 정보는 전혀 모른 채로, 자격증 시험이 어려워봐야 얼마나 어렵겠어~ 라는 생각을 하며 필기 공부를 시작했습니다. 앞으로 닥칠 시련을 전혀 예상하지 못했던;; 사실 공부를 이렇게까지 열심히 하게 될 줄 알았다면 아예 시작하지 않았을 것 같기도 합니다. 물론, 데이터 분석 직무에서 요구하는 코어 역량을 제대로 기를 수 있었다는 점 하나만으로도 ADP의 가치는 충분하지 않나 생각하긴 합니다만..
ADP 시험, 특히 실기시험은 문제 운이 정말 중요한 것 같습니다. 뭐가 나올 지 모르지만, 확실하게 아는 게 많이 나오면 합격하는 시험이 아닐까 싶어요. 24회 필기, 31회 실기에서 회귀분석과 변수선택을 만난 건 지금도 어마어마한 행운이었다~ 라고 보고 있습니다.
실기 준비하는 5개월동안 여유 시간 모두 최대한 공부하는데 쓸 수 있도록 도와준 아내에게 감사 인사를 전하며 후기를 마칩니다.
이 자격증 한 장에 생각보다 많은 시간이 투자되었네요.