빅데이터분석기사 실기
2024.11.30 10:00~13:00
대학교 졸업 전 관심있는 자격증 중 정처기에 이어 빅데이터분석기사도 이번에 마무리했다.
원래는 필기와 함께 동차로 응시하려고 했는데, 여러 할 일이 많아 응시하지 못했다 ..
응시를 빨리 했더라면 학교에서 지원받았을텐데 .. 아쉽다
빅데이터분석기사는 정처기와 다르게 결과가 빠르게 나오는 편이고, 사전점수를 일주일 전에 공개까지 한다.
따라서 시험 치르고 2주 뒤 금요일에 사실상 합격 여부를 알 수 있다.
시험 리뷰는 아무래도 SW에서 응시자가 많은 정처기와 비교하며 빅분기를 설명할 예정이다.
실기 공부 기간
빅데이터 분석기사 실기는 정처기와 다르게 나오는 문제가 정형화 되어있다.
따라서 크게 준비할 내용이 없었고, 과거에 필기합격하고 정리한 코드 + 3유형만 전날 벼락치기하고 시험보러 갔다.
그만큼 빅데이터 분석기사의 실기는 난이도가 낮다는 것이고, 모르는 부분만 집중적으로 공부하면 충분히 승산있다.
결론은 그냥 피지컬로 봤다는 소리.
본인이 pandas를 잘 다룬다면 scipy와 statsmodels만 보고 가면 된다.
실기 준비 방법
1, 2유형은 유형이 정형화되어있고, 난이도만 조절되는 수준이라 책을 따로 살 필요는 없다고 생각한다.
3유형을 책으로 준비하기엔 너무 많다는 것을 느낄 것이다.
기본기가 부족하면 책을 보며 보충하고, 어느정도 할 줄 안다면 빅데이터 분석기사 캐글 놀이터에서 연습하면 된다.
https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr
Big Data Certification KR
퇴근후딴짓 의 빅데이터 분석기사 실기 (Python, R tutorial code) 커뮤니티
www.kaggle.com
과목 별로 어떻게 준비하면 될지 요점정리 하자면,
1과목은 데이터프레임을 전처리하는 문제여서 pandas를 많이 써봐야 한다.
기존 시험과 달리 점점 1과목에서 요구하는 전처리가 귀찮게 출제된다.
절대 어려운 것이 아니고, 단지 복합적인 조건을 걸어 두 가지 혹은 세 가지를 동시에 만족하는 경우를 잘 추려야 한다.
예를 들자면 이번 빅분기 9회 1-3번이 되겠다. 해당 코드는 네이버카페에 작성했던 블럭이다.
# 고객만족도 결측치: 모든 직원의 평균값으로
df.loc[df['고객만족도'].isnull()] = df['고객만족도'].mean()
# 근속연수 결측치: 같은 부서에서 평가등급이 동일한 직원의 평균값으로, 소수점 아래는 버림
dep_list, grade_list = df['부서'].unique(), df['성과등급'].unique()
for dep in dep_list:
for grade in grade_list:
avg = math.floor(df.loc[(df['부서'] == dep) & (df['성과등급'] == grade), '근속연수'].mean())
df.loc[(df['부서'] == dep) & (df['성과등급'] == grade) & (df['근속연수'].isnull()), '근속연수'] = avg
# cond_a: 연봉/근속연수, cond_b: 연봉/고객만족도
df['cond_a'] = df['연봉'] / df['근속연수']
df['cond_b'] = df['연봉'] / df['고객만족도']
# a: 연봉/근속연수 세 번째로 높은 사람의 근속연수
df = df.sort_values('cond_a', ascending=False)
a = df.iloc[2, unknown] # a = 14 (unknown인 이유: 칼럼 인덱스까진 기억안남)
# b: 연봉/고객만족도 두 번째로 높은 사람
df = df.sort_values('cond_b', ascending=False)
b = df.iloc[1, unknown] # b = 6 (unknown인 이유: 칼럼 인덱스까진 기억안남)
이렇게 nested loop로 풀었는데, 좀 더 단순하게 해결하려면 groupby를 쓸 수도 있다.
groupby를 사용하지 않은 이유는 공부를 안했으니까 ..
그냥 원래 전처리하던 방식대로 for loop로 원하는 조건 찾아서 채웠다.
여담으로 이 문제는 정답이 20 or 21로 갈렸던 문제인데, 문제를 잘 읽고 풀어야 한다.
난이도를 올리는 또다른 방법으로는 데이터프레임을 독특한 방식으로 제공하는 것이다.
일반적으로 데이터프레임은 아래처럼 제공한다.
그런데 이번 회차 1-2번에서 연도를 제외한 나머지 값들의 row와 column을 바꿔서 시험에 나왔다.
시험 문제는 검거율 = 검거건수/발생건수로 하여 검거율을 채우는 것이 핵심이었다.
기존과 같은 df였다면 바로 검거건수/발생건수를 계산하여 새로운 column으로 할당했겠지만,
이번 회차처럼 준다면 조건식을 세워 for loop를 돌리던가 해야 한다.
조금 복잡하게 데이터를 주더라도 df.iloc 혹은 df.loc을 이용하여 조건식을 잘 세울 수 있으면, 1유형은 충분히 풀 수 있다.
2과목은 머신러닝 모델을 세워 x_test를 예측하는 유형이다.
머신러닝 + 모델링이라고 생각해서 어렵다고 느껴지겠지만, 무지성 Randomforest면 해결된다.
문제를 봤을 때 금액과 같이 수치를 예측하는 거라면 RandomForestRegressor를 사용하고,
성공 여부등과 같이 클래스를 예측하는 거라면 RandomForestClassifier를 사용하면 쉽다.
따라서 빅분기는 40점 주고 시작한다고 생각하면 된다.
머신러닝 파트는 다음의 순서로 진행하면 된다.
1. 데이터 불러오기 + 결측치 확인
2. 결측치가 있다면 가장 빈번한 값을 Simple imputer로 채워 넣음
3. object type의 column에 대해 Label encoding 진행
4. train dataset을 split하여 train-valid dataset으로 분할 (스킵해도 됨)
5. Random forest로 모델 학습
6. valid 나눈 경우 valid dataset의 성능 확인
7. test data에 대하여 inference하고 제출
보통 학습을 제대로 했나 train_test_split으로 확인하지만, 빅분기에서 하는 머신러닝 과정은 단순한 파이프라인이라
중간에 성능확인을 굳이 안해도 돼서 생략했다.
불안하면 test size 0.2정도로 주고 split하여 metric으로 valid 성능을 확인하면 된다.
아래의 링크대로 작성하면 무난하다.
[빅데이터분석기사] 실기 제2유형 정리
빅데이터분석기사 실기 제2유형2유형은 머신러닝으로 모델을 세우고 이를 피팅시켜 예측하는 문제이다.따라서, 해당 유형에선 모델 성능이 우수한 RandomForest를 다루고, 이것만 사용하여 해결하
lucple.tistory.com
학습한 모델로 inference를 잘 진행했으면
test data와의 row 수는 잘 맞는지, inference 결과를 csv파일로 저장 잘 됐는지 꼭 확인해야 한다!
3과목은 모델 혹은 행렬을 분석하거나 linear (or logistic) regression을 하는 내용이다.
해당 파트가 점수따기 가장 어렵다고 생각하는데, 통계의 모든 내용을 출제할 수 있어서 공부하면 끝도 없을 거 같다.
따라서 항상 나오는 회귀 문제를 풀고, 나머진 빈출되는 유형을 찾아야 한다.
우선 회귀문제는 statsmodels.api.formula를 사용하면 된다.
선형회귀라면 ols, 로지스틱 회귀라면 logit을 사용하고, 수식과 데이터를 잘 넣어주면 끝난다.
이후 model.summary()로 문제에서 요구하는 것을 찾아 제출하면 끝.
문제는 나머지 통계에서 무엇이 나올지 모른다는 것이다.
우선 자주 나오는 것은 odds비를 계산하는 것과 p-value에 따라 유의미한 변수를 찾는 것이다.
나머진 dir(scipy.stats)와 help로 function을 찾아서 풀었다.
문제에서 요구하는 것 자체는 매우 간단하므로, help를 통해 function의 설명을 잘 읽어보자.
실기 후기
주어진 데이터를 활용하여 직접 코딩하는 문제다보니 시간을 넉넉하게 주는 듯하다.
3시간을 주는데, 나는 1.5시간정도 풀다가 나왔다.
다만, 이게 컴퓨터로 진행해서 시험장 혹은 자리를 잘 뽑아야 할 것 같다.
내 자리는 PC에 문제가 있어서 자리를 바꿨는데, 미리 확인하지 않았으면 큰일날 뻔 했다.
따라서 사전점검이 필수지만,
9회차 실기는 구름 서버이슈인지 IDE 접속 자체가 안돼서 시험장에서 실기 환경에 적응할 시간이 전혀 없었다 ..ㅋㅋ
기출을 몇 개 봤었는데, 앞으로 1유형은 계속 복잡하게 출제될 것 같다.
2유형은 어렵게 낼 수가 없는 문제고, 3유형은 범위가 너무 넓어 지엽적으로 출제하기 까다롭기 때문이다.
빅데이터 분석기사를 응시하며, 다사다난했던 2024년은 이렇게 마무리했다 :)