나는 데이터분석에 많은 관심을 가졌고 대학원 데이터 사이언스 전공까지 진학을 했으며 빅데이터분석기사 또한 취득을 했다. 하지만 내가 데이터분석을 나의 또다른 업으로 삼을 정도로 역량과 가능성이 충분히 있는지에 대해 확신이 생기지 않았다. 나 스스로를 증명하고싶었고 ADP라는 시험 합격을 이에 대한 척도로 삼고 도전하기로 했다.
빅데이터분석기사(2022)와 ADsP(2023)를 취득하면서 이론적인 지식이 남아있는 상태였기 때문에 필기시험은 커트라인(70점)을 넘기는 점수를 목표로 준비하였다. ADP 필기시험은 객관식의 경우 유형도 위 두 시험과 유사하고 마치 문제은행식으로 출제가 되는 경향이 있어서 상대적으로 준비가 수월했다.
ADP는 이론서가 드문 편인데, 데이터에듀에서 나온 기본서(일명 파랑책)로 공부하였다. 분량도 꽤 넉넉하여 개념 다지기에 이만한 책이 없는 것 같다. 수험생 사이에 유명하여 중고 거래도 활발하다. 실기에서도 개념을 서술해야하는데 이후에도 이 책으로 개념을 정리해나가면 좋다.
ADP 필기의 정수는 서술형인데 나는 운이 좋았던 것 같다. 기억에 남는 것은 서포트벡터머신(SVM)의 마진(서로 다른 집단을 구분하는 경계)과 서포트벡터(마진에서 가장 가까운 점) 사이의 거리를 구하는 문제였다. 서포트벡터머신의 알고리즘을 알고 있으면 굳이 외우지 않아도 풀 수 있는 문제였고, 직각삼각형에서 서로 다른 두 변의 길이를 이용해 나머지 한 변의 길이를 구하는 법을 이용해 풀었다.
시험 결과 무난한 점수를 받았고 목표한 대로 점수가 나와 흡족하기도 하였다.
그러나 돌이켜보면 이러한 전략은 시험 합격에 대단히 효율적인 전략일 수 있으나, 자칫 배움에 깊이가 없어질 수 있기 때문에 주의가 필요해보인다. 특히 ADP의 경우 실기에서도 상당한 정도의 개념을 서술하도록 요구하는데, 아무리 오픈북이라고 해도 알고 적는 것과 모르면서 적는 것은 답안의 완성도 측면에서 뚜렷한 차이가 있다. 뒤에서 다시 언급하겠지만, 나는 필기시험을 준비할 때 이론 정리가 미흡하여 결국 실기시험을 준비할 때 개념 정리를 다시 하는 상황이 일어나게된다.
한편 데이터분석 부트캠프를 하면서 데이터엔지니어링에 관심을 갖게 되었는데 이는 ADP 필기의 '데이터 처리 기술 이해' 과목에서 다루고있다. 그러나 시험 준비를 할 때 이 과목의 개념을 제대로 이해하지 못하다보니 데이터엔지니어링이 그저 생소하고 새로운 장벽처럼 느껴지는 문제가 있었다.
2023년에는 시험 일정이 필기를 합격하고 바로 실기를 볼 수 없게 되어있어서 제31회 시험을 치루게 되었다. 여기서부터 제33회 합격까지 나의 고난(?)이 시작된다. 그간 업무가 한참 바쁘기도 했고 무슨 자신감인지 모르겠지만 바짝 준비하면 합격할 수도 있다는 생각에 시험일 한 달 전부터 준비를 시작했다. 파이썬 실기 한권으로 끝내기라는 책을 사서 파이썬 코드를 연습했고 엑셀로 내 나름의 코드북을 만들었다.
그러나 시험 전날까지도 연습이 덜 됐다는 생각이 강하게 들었다. 구체적인 코드 스크립트는 코드북을 참고한다고 하더라도 코드를 어떻게 작성해 나갈 것인지에 대한 그림이 머리속에 그려져야하는데 그려지지 않았다. 책과 코드북을 챙기긴 했지만 든든하지 않은 불안한 마음으로 시험에 임했다.
나는 대구에 살고있는데 대구에는 아쉽게도 고사장이 없다. 가장 가까운 곳이 부산이어서 아침 일찍 짐을 싸고 차를 몰아 부산 해운대의 모 컴퓨터학원에 도착했다. 응시자가 적은 시험이고 나에게는 첫 시험이다보니 주변을 관찰 하게되었는데 생각보다 나이가 많아보이는 응시자가 많아서 놀랐다. 나는 30대 중반을 넘어서면서 체력도 떨어지고 도전하는 방법보다 도전하지 않을 이유를 찾는 경우가 많았는데 ADP 실기 시험을 보면서 그런 나를 반성하게되는 순간이었다.
제31회 ADP 실기시험에서는 환자의 의료정보를 이용한 데이터 분석문제, 학생 건강검진 데이터 분석문제, 통계분석 문제가 나왔다. 지금 생각해보면 그런대로 무난한 문제였다고 생각하는데 모든 시험이 그러하듯이 아는 사람한테는 한없이 쉽고 모르는 사람한테는 한없이 어려운 것이 시험이다.
첫 번째 세트는 그런대로 풀었으나 두 번째 세트인 학생 건강검진 문제에서 전처리를 하지 못해 세트 문제를 통째로 날렸다. BMI와 나이를 기준으로 '적정체중여부'라는 파생변수를 만들어야 다음 문제들을 풀 수가 있는데 파생변수를 생성하지 못하니 진도를 나갈 수가 없었다. 통계분석 파트에서는 베이지안 통계인 사전분포와 사후분포를 구하는 문제가 나왔는데 개념을 전혀 알지 못해서 손대지 못했다. 또한 대응표본의 이진데이터에 대한 차이검정법인 코크란 Q 검정을 수행하는 문제가 나왔으나 이에 대한 개념도 명확히 잡히지 않아 제대로 풀지 못했다. 전반적으로 몰라서 못 푸는 문제가 많았다.
준비해간 책과 코드북이 도움이 될까 싶어서 시험장에서 참고를 해보려 노력했지만 무용지물이었다. 일단 전처리는 최소한 def로 함수를 만들어서 칼럼에 mapping한다는 기본적인 방법을 알고 있어야하는데 이조차 모르고있으니 무엇을 참고해야할지 감조차 오지 않았다. 통계분석 또한 주어진 데이터가 대응표본 데이터인지 독립표본 데이터인지 판단할 수 있어야 그에 걸맞는 검정법을 참고할 수 있는데 그 사전 판단조차 되지 않았다. ADP 실기는 오픈북이지만 개념을 이해하지 못하고 있으면 아무리 두꺼운 책이라도 쓸모가 없는 시험이었다.
시험 결과는 예상한대로 불합격이었다. 시험장에서 현실의 벽을 체감했기에 합격을 기대하지 않았고 다음번 시험을 준비하기로 하였다. 아래 점수에서 보면 알 수 있듯이 머신러닝파트에서 전처리 하지 못한 세트는 거의 0점처리 된듯하고 통계분석파트에서도 제대로 알지 못하는 부분은 냉정하게 감점처리된 것으로 보인다.
해를 넘기고 조금 업무에 여유가 생겼고 제대로 공부를 해야겠다는 생각에 1월 말부터 스터디를 시작하였다. 스터디는 빅데이터분석기사 ADP 실기 정보공유방에서 모집글을 보고 시작하게 되었다. 1주일에 한번 주말에 비대면으로 진행을 했으며 통계학의 주요 개념을 조금씩 맡아서 발표하고 기출문제와 통계학 연습문제를 과제로 풀어보는 형태로 진행하였다. 통계학 교재는 인하대학교 통계학과에서 지은 교재를(일명 보라책) 사용하였다. 기출문제는 데이터마님 사이트에 올라와있는 문제들을 이용하였다.
https://www.datamanim.com/intro.html (데이터마님 사이트)
나는 시험 합격이 절실했고 의욕도 있었기 때문에 데이터마님 홈페이지 운영자인 소니님이 운영하시는 스터디에도 참여를 하였다. 저녁에 간단한 개념설명을 듣고 기출문제와 소니님이 자체 제작하신 연습문제를 풀어보는 스터디였다. 나는 두 스터디 모두 열심히 참여하였고 스터디의 과제도 모두 풀었다.
31회 시험을 보면서 전처리와 통계 기본의 중요성을 절실히 체감하였기 때문에 시험준비할 때 이 두 부분을 보완하는데 초점을 맞췄다. 전처리는 데이터마님 사이트에서 빅데이터 분석기사 데이터 전처리 100문제를 반복해서 풀었다. 정보공유방에서 3번정도는 반복해서 풀어야한다는 조언이 있어 3번 풀었는데 그정도 풀어보니 데이터 핸들링에 어느정도 자신감이 생겼다.
통계학 또한 보라책의 텍스트를 읽으면서 개념을 이해하기 위해 노력하였고 책에 있는 연습문제도 스터디에서 일부 선정해서 파이썬으로 풀어보았다. 나는 학부시절 통계학을 이중전공했는데 수리통계와 회귀분석 등을 집중적으로 공부해서그런지 집단 간 차이에 대한 검정은 모르는 부분이 많았다. 보라책은 이러한 부분을 많이 채워주었다.
그러나 보라책은 시험에서 출제되는 비모수통계나 베이지안통계를 다루지 않기 때문에 보충학습이 필요했다. 나는 비모수통계를 학부에서 전혀 접해본적이 없기때문에 개념을 익히기 위해 참고서적을 사기로 했다. 그런데 아쉽게도 파이썬을 이용한 비모수통계학 책은 찾기 어려워 아래와 같이 R을 이용하는 책을 구하고 코드를 파이썬으로 변환하여 정리하였다.
비모수통계라는 것이 나에게는 매우 생소한 분야라서그런지 모르겠지만 책의 내용이 난해한 부분이 많았다. 순서(순위)와 부호를 이용해 검정을 하기때문에 수학적으로 기호화되고 일반화된 표현들이 많았고 이해하기 어려웠다. 그래서 모든 내용을 공부하지 않고 표본 특성(독립/대응) 및 표본집단 수(일표본/이표본/3이상표본)에 따른 검정법 요약자료를 토대로 필요한 내용을 책에서 찾아 공부했다.
확실히 31회 시험보다 공부량이 많았기 때문에 합격 가능성이 있어보였다. 그런데 시험을 치루기 2주쯤 전부터 컨디션 난조가 찾아왔다. 세 달동안 스터디를 일주일에 두개씩 하고 아이가 3월에 초등학교에 입학하면서 공부와 육아를 병행하는 것이 쉽지 않았던것 같다. 또한 공부량이 많았으나 충분히 머릿속에 정리되지 않아 불안감에 멘탈이 흔들렸던 부분도 있었다. 가장 중요한 시기인 시험 1주일 전쯤에는 합격 여부와 상관 없이 일단 얼른 시험을 마무리하고싶다는 생각이 나를 지배하고 있었다.
시험 당일 지난번 시험장과 동일한 부산 해운대의 모 컴퓨터학원에 입장을 하고, 지난번과 같은 감독관을 만나서 조금 민망한 느낌을 받으면서 시험 시작을 기다렸다. 32회 시험에서는 머신러닝은 발전량에 대한 데이터 세트문제와 발전기와 계절 데이터를 이용한 세트문제가 나왔다. 통계분석은 선형회귀의 가정에 대한 문제와 카이제곱 검정문제, 독립표본의 차이에 대한 문제 등이 나왔다.
31회와 달리 32회 시험은 시험에서 요구하는 사항이 세밀해졌다. 서브문제가 많아지고 서브문제별로 요구하는 사항(예를 들면 특정 조건을 충족하는 데이터만을 이용하라는 등)도 많았다. 전처리 요구수준 또한 31회보다 더욱 복잡해져서 요구사항을 뒤늦게 확인해 작업을 다시 하는 경우도 있었다. 이것저것 확인하면서 데이터를 처리하다보니 시간이 쏜살같이 흘러갔는데, 요구사항을 놓치고 이걸 다시하니 시간을 허비할 뿐만 아니라 심리적으로도 압박감이 컸다. 전처리뿐만 아니라 문제를 제대로 읽는 집중력도 필요했다.
머신러닝에서 첫 번째 데이터세트는 그런대로 해결하였는데, 두 번째 데이터세트에서 문제가 생겼다. 하나는 Wide Format이고 다른 하나는 Long Format인 두 데이터를 결합해야하는데 melt를 사용하는 방법이 잘 생각이 나지 않는 것이다. 사실 판다스 연습과 기출문제를 풀면서 melt를 연습한 적은 있지만 이것을 대체할 다른 방법들을 주로 생각해왔기때문에 melt를 자주 사용하지를 않았다. 그러다보니 정작 melt를 사용해야 할 순간에 사용하지 못하고 데이터 칼럼을 평균내 변형하여 결합하고 서브문제를 풀었다.
31회 시험보다는 많이 풀었지만 확실하게 풀었다는 생각이 들지 않았다. 잘하면 턱걸이로 합격하겠다는 생각도 했지만 결과는 불합격이었다.
점수가 31회 시험보다 17.3점 상승하였는데, 문제는 머신러닝은 5.5점밖에 오르지 않았다는 것이었다. 전처리에 많은 노력을 기울였지만 올바르지 않게 전처리를 한 결과 점수를 많이 획득하지 못한 것으로 보였다. 즉, 문제를 끝까지 풀더라도 전처리가 잘못되면 감점을 크게 받는 것으로 보였다. 한편, 통계분석은 내가 생각한 것보다 점수가 잘 나왔는데 문제에 필요한 개념을 적용했으면 머신러닝에 비해 후하게 점수를 주는 것으로 보였다.
32회 시험에 불합격하고 앞으로의 공부 방향을 고민하는 시간을 가졌다. 주변에서 LLM 스터디 제안이 왔지만 데이터 분석의 기본인 전처리를 제대로 못하는데 모델링 공부를 하는 것이 스스로 부적절해보였다. 기본기를 다지는 것을 목표로 삼고 스터디를 사양을 하고 실제 데이터를 다루기 위해 공모전을 시도했다. 교육공공데이터 활용 공모전과 사내 데이터분석 공모전에 참여를 하였고 사내 공모전은 수상도 하였다. 데이터분석을 스스로 처음부터 끝까지 하면서 분석 절차를 연습하는 기회를 가졌으며 정제되지 않은 데이터를 직접 처리하면서 데이터를 꼼꼼하게 보는 훈련도 하였다.
7월에는 내일배움카드를 이용해서 데이터분석 부트캠프에 참여하였다. 약 4개월간 체력적으로도 힘들고 가족에게 눈치도 많이 보였지만 부트캠프 참여는 내가 시험 준비하는 기간 동안 정말 잘 한 일 중에 하나인것같다. 부트캠프는 비전공자 등 데이터분석을 처음 접하는 취준생을 대상으로 하였기 때문에 완전 기초부터 가르쳤다. 아는 내용들이 많았으나 모르는 내용도 있어서 기초지식을 다시 학습하고 정리하는데 도움이 되었다. 또한 아침에 SQL과 알고리즘 코딩테스트 문제를 푸는 시간을 가졌는데 자료 구조를 상상하고 함수 만드는 것을 훈련하는 데 매우 도움이 되었다.
한편 판다스 데이터 전처리를 추가로 학습하기 위해 정보공유방에서 한 합격자분이 추천해주신 유데미 강의를 수강하였다. 가격도 17,000원정도로 저렴했는데 다루는 내용은 매우 방대하여 이것만 익혀도 판다스 데이터 전처리는 크게 무리가 없어보였다. 특히 이 강의에서는 판다스 메소드와 함수의 다양한 옵션들(value_counts 메소드의 normalize, bins 옵션 등) 을 알려주는데, 꽤 쓸모가 있는 옵션들이 많았다.
https://www.udemy.com/course/pandas-2022/?couponCode=KEEPLEARNING (유데미 강의 사이트)
33회 시험을 준비할 때에도 스터디를 하긴 했는데 모의고사를 만들어서 4시간동안 각자 풀어보는 형태로 진행했다. 스터디원이 많이 바쁘셔서인지 시간이 다들 맞지 않아서 결국 토요일 새벽 5시에 하기로 했다. 그러나 너무 이른 아침이라 다들 감당이 되지 않았는지 결국 각자 시간을 정해서 풀게 되었고 나 또한 세번정도 새벽에 풀고 이후 시간이 힘들어서 나머지는 시간을 정해서 풀었다.
32회차 시험에서 많은 지식이 머리에 정리가 되지 않아 실력발휘를 못했기때문에 단권화를 진행했다. 그동안 단편적으로 정리해둔 자료들을 머신러닝과 통계분석 두 파트로 각각 모으고 워드에 정리해나갔다. 먼저 무슨 주제를 정리할지 마인드맵을 그린 후 하나씩 정리해나갔는데 타이핑을 치고 수식을 입력하는 것이 번거로운 일이었으나 정리를 하는 과정에서 개념을 하나씩 곱씹어보는 시간을 가질 수 있었다.
개념이 도출되는 과정을 논리적으로 생각해보는 과정은 정말 중요한 것 같다. 아무리 기억력을 평가하는 시험이라도 이러한 과정을 거치게 되면 기억에 오래 남고 잊더라도 참고자료를 보면 기억이 되살아나게 된다. 그러나 단순 암기만 하면 기억에 잘 남지도 않을 뿐더러 참고자료를 보면 모든 것이 새로울 뿐이다.
단권화를 마무리하고 시험 2주 전 제본을 만들었다. 그리고 과거에 만들어두었던 엑셀 코드북은 직접 출력을 했다. 따로 띠지작업은 하지 않고 앞에 목차와 페이지수를 기록하여 찾아볼 수 있게 만들었다. 하지만 무엇보다, 내가 직접 만든 자료이기때문에 어떤 내용이 어느 부분에 있는지 대략적으로 파악하고 있었고 덕분에 시험장에서 내용을 빠르게 찾아볼 수 있었다.
시험 당일, 이번에는 차를 끌지 않고 기차에서 단권화 제본을 보면서 갔다. 이번에는 시험장이 바뀌어서 부산 서면의 모 컴퓨터학원으로 갔다. 시험을 세번씩이나 보니 시험 환경도 이제 익숙했다. 참고자료로는 책은 파이썬 한권으로 끝내기만 들고 갔고 제본과 엑셀 코드북만 챙겼다. 실제로 시험을 볼 때 책은 단 한번도 보지 않았고 거의 제본만 보면서 문제를 풀었다.
시험은 32회차 시험과 유사하게 출제되었다. 머신러닝에서는 당뇨병 데이터 세트문제와 지하철과 기상 데이터 세트문제가 출제되었으며 통계분석에서는 카이제곱 검정, 시계열분석 등이 출제되었다. 여전히 전처리 요건이 까다로웠고 전처리 잘못해서 다시 하는 경우도 발생했다. 그래도 거의 막히는 문제는 없었고 개념 서술이 필요한 부분은 단권화 제본을 이용해 문구 그대로 작성하였다.
단 하나 아쉽게 실수한 것이 있다. 시험 시작 30분 전 컴퓨터 환경 테스트를 하는 시간에 데이터별로 EDA를 간단히 해두었는데 내가 먼저 EDA한 데이터를 이용해서 첫 문제를 풀었고 엉뚱한 데이터를 이용했다는 것을 나중에야 알게 되었다. 다행히 데이터를 바꾸고 시사점을 다시 내면 되는거라 중대한 실수는 아니었는데 자칫 시간을 많이 뺏길 뻔 했다.
33회차부터는 주최측에서 출제 방향을 사전에 안내해주어서 이를 두 번정도 읽고 갔다. 답안에 일관성이 있을 것, 모델 선택 시 선택한 이유를 설명할 것, 선택한 모델이 다른 모델에 비해 가지는 장단점과 근본적 한계를 설명할 것 등 가이드라인이 명시되어있어서 이에 맞게 많은 내용들을 적었다. 대부분의 내용은 미리 만들어둔 제본으로 해결이 되었다.
33회차에서도 melt를 이용한 문제가 출제되었는데 큰 막힘 없이 풀었으며, 그 외 모르는 문제가 있었으나 희생이 가능한 서브문제였기에 큰 미련을 갖지 않고 아는 범위 내에서 작성했다. 답안지도 이전에는 코드를 워드에 붙여넣어 작성하느라 시간을 많이 뺐겼는데 이번에는 마크다운으로 작성하고 html로 변환한 다음 가로 형태로 pdf 저장 후 제출해 시간을 절약했다. 다만, pdf로 저장할 때 저장이 제대로 되지 않는 경우가 있었고 파일을 열어서 정상여부 확인 후 최종 제출했다.
결과는 합격이었다. 내년 5월에 유예기간이 끝나서 필기를 다시보면 어떻게하나 하는 걱정도 했었는데 마지막 집중력을 다해서 시험 준비에 임했고 좋은 결과를 이뤄냈다. ADP의 활용도 등 자격증의 지위에 대한 논란이 많이 있는 것은 사실이다. 하지만 현재까지 데이터분석 관련해서 ADP를 대체할 만한 전문 자격증이 없다는 점과 ADP를 준비하면서 겪었던 시행착오 등 경험을 통해 내가 향후 데이터분석가로 성장할 수 있다는 것은 분명하다는 점에서 의미를 부여해 본다.