카테고리 없음

빅데이터분석기사 12회 독학 합격 후기 (필기/실기)

twicecomix02 2026. 7. 4. 13:37

안녕하세요.

 

빅데이터분석기사 12회 필기/실기를 응시했는데, 다행히 사전점수 공개 기준 합격하게 되었습니다.

 

시험 준비하며 필기/실기 모두 블로그 정보글/후기를 많이 참고하였는데, 도움이 되는 점도 많았고 최근 시험이랑 다른 점도 많았다 생각이 들었습니다. 

 

제가 나름대로 느낀 점 후기 겸, 실기 준비 때 도움된 CBT 사이트 후기를 겸해 블로그에 남겨봅니다!

 

사회과학계열 인문계 졸업생이지만, 통계분석 경험이랑 코딩 경험 조금 존재하여, 이를 베이스로 필기 2유형과 실기 3유형 준비를 상대적으로 편하게 할 수 있었습니다.

 

 

1. 필기

 

준비 기간 및 방식 : 약 3일, 기출 돌려보기 

 

 필기를 검색해 보니, 기출 기반으로 3일컷, 2일컷을 잡아도 4지선다 기반으로 60점만 넘기면 되기에, 합격에 성공한 후기들을 많이 볼 수 있었습니다.

그래서, 저도 기존 기출 복원을 풀어보니 그정도로 잡아도 충분하다 못해 안정적이라 생각했습니다!

 

 

 

시험 후기

필기 당일 이 안일한 선택을 엄청나게 후회하게 되었습니다.

특히 ADSP 정도로 준비한 모델링 부분에서 한걸음 더 봐야 하는 패턴이 많이 나와 간신히 과락을 면한 채로 합격했습니다.

그래도, 제가 응시한 12회가 29%대의 유독 어려운 필기 시험이었다는게 그나마 위안이 되었네요.

사실 필기는 대부분이 기억에서 휘발된 상태... 

 

2. 실기

\

 

준비 기간 : 약 10일

 

1줄 요약

1. 퇴근후딴짓 KAGGLE 기출 + 데이터마님 CBT + LLM으로 준비

 

실기의 경우엔 작업형으로, 100% 프로그래밍을 사용해 보아야 하는 시험이니만큼, 교재나 강의 중심으로 진행해도 지출만 커지고, 크게 나아질 것이 없다 생각했습니다.

 

https://www.kaggle.com/datasets/agileteam/bigdatacertificationkr/data

 

https://www.datamanim.com/learn/bigdata-practical/type-practice

 

저는 퇴근후딴짓 님의 빅데이터 분석기사 실기 대비 kaggle 데이터셋의 문제를 풀어 1,2,3유형의 감을 잡고, 본격적인 양치기를 데이터마님의 5500원 CBT 결제로 시작했습니다.

 

 

그 과정에서, 예를 들어

 

2유형 원핫인코딩 vs LabelEncoder 이 데이터셋엔 뭘 쓰는게 나을까? 라든가.

1유형과 3유형 답과 다른 값이 나오는데 이유를 모르는 경우가 나오면

 

LLM(저는 chatgpt plus를 사용했습니다.)에게 코드와 질문을 던지면, 데이터 코드 문제라 그런가 잘 뱉어줬습니다.

 

시험 대비 전략

 

빅분기 실기의 여러 단기 대비 전략들은 크게 1유형 고득점 + 2유형 고득점 + 3유형 버리기 로 점수 먹기가 많이 보였습니다.

그런데 최근 실기 시험들은 템플릿 수준의 튜닝이면 2유형 고득점이 힘듦 + 꾸준한 1유형 복잡화로 인해, 해당 전략의 시간 가성비가 좋지 않게 나오는 것 처럼 보였습니다. 

 

그래서, 저는  1유형 적당히 + 2유형 25점을 생각 + 3유형 고득점 전략을 사용해 시험을 준비하였고, 실제 실기 결과 역시 그와 비슷하게 나왔습니다. 

 

유형별 전략

  • 1유형 : 적당히 준비 후 남는시간 노가다1유형은, 정석적인 방법을 사용하기 보단 제가 편한 방식을 사용한 것 같습니다. 
    • groupby로 기준에 따라 묶기, sum, mean, maxidx등 기본 pandas 사용 방법 및 저~중 난이도 문제의 경우 손에 익을 정도로 연습문제를 풀었습니다.
    • unstack, pivot_table, transform 등을 사용해서 데이터셋을 능숙하게 변형하는, 최근 1유형 고난도화에 크게 기여하는 문제들의 경우엔, 한정된 시간 동안 다른 유형을 깎는게 더 낫다 생각해, 머리 속에 이런게 있다... 정도로만 풀었습니다.
    • 3시간의 시험 시간 중 남는 시간동안,  앞서 말한 기본 pandas 기법 + for문 노가다를 여러 번 중첩해, 좀 비효율적인 방법으로 답을 구해냈습니다. 빅데이터분석기사는 코드의 채점기준이 없고, 오직 제출한 단답만이 채점 기준이니만큼, 그렇게 구해낸 답이라도 손해볼 일은 없으니까요.
  • 2유형 : 템플릿
    • 이 부분은 다른 준비하시는 분들과 마찬가지로 템플릿 준비해 갔습니다. 랜덤 포레스트 + 11회 이후 새로 떠오른 LGBM으로 준비하다, 후반 가면 갈수록 대충 해도 잘나오는 LGBM 위주로 준비했는데, 이번 12회 시험의 평가 지표 RMSLE는 LGBM 이상치 제거를 하지 않거나, 로그스케일 적용을 하지 않고 제출할 시, 음수의 로그를 정의하지 못해 오류가 터짐 >> 0점처리라는 참사가 발생했습니다.
    • 저는 다행히 스플릿 후 지표 확인이라는 절차까지 제대로 템플릿에 넣고, 이를 문제에서 제시한 평가 지표로 확인하는 절차를 템플릿에 넣었기 때문에(dir()을 활용하여 문제에서 제시한 지표 확인) 0점 처리는 피할 수 있었지만, 로그 스케일을 시험장에서 생각까지 해놓고 그냥 넘어간 건 아쉽다 생각했습니다. 
    • 사용 템플릿은 아래와 같습니다.
      이 경우, 높은 튜닝이 사용된 것은 아니라 25 저점 방어 ~ 30 보통 ~ 35 고점 정도의 점수대가 데이터마님 cbt 기준 지속적으로 나왔고, 실제 시험에선 랜포 사용 기준으로 30점이 나왔습니다.

 

import pandas as pd
import numpy as np
train = pd.read_csv('/data/ac236f047c_train.csv')
test = pd.read_csv('/data/9e89ff3c74_test.csv')

# 사용 라이브러리 import from sklearn. 복사해두기
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import RandomForestRegressor
import lightgbm as lgb



# RMSE 함수
def rmse(y_true, pred):
    return np.sqrt(mean_squared_error(y_true, pred))


# y값 분리
y = train.pop('target')


# 합쳐서 전처리
# train/test를 따로 전처리하면 원핫인코딩 컬럼이 달라질 수 있으므로 합쳐서 처리
data = pd.concat([train, test], axis=0)


# 결측치 확인 후 median 처리
# print(data.isnull().sum())

for col in data.columns:
    if data[col].isnull().sum() > 0:
        if data[col].dtype == 'object':
            data[col] = data[col].fillna(data[col].mode()[0])
        else:
            data[col] = data[col].fillna(data[col].median())


# 원핫인코딩
data = pd.get_dummies(data)


# 다시 분리
train = data.iloc[:len(train)]
test = data.iloc[len(train):]


# 트레인 테스트 분리
x_tr, x_val, y_tr, y_val = train_test_split(
    train,
    y,
    test_size=0.2,
    random_state=42
)


# 랜포 모델링
# 그리드서치는 시험시간 때문에 오래 걸릴 수 있으므로
# n_estimators, max_depth를 몇 개만 직접 바꿔보며 RMSE를 메모
rf = RandomForestRegressor(
    n_estimators=250,
    max_depth=11,
    random_state=42
)

rf.fit(x_tr, y_tr)
rf_pred = rf.predict(x_val)

print('RandomForest RMSE:', rmse(y_val, rf_pred))


# lgbm 모델링
lgbm = lgb.LGBMRegressor(
    n_estimators=300,
    random_state=42,
    verbose=-1
)

lgbm.fit(x_tr, y_tr)
lgbm_pred = lgbm.predict(x_val)

print('LightGBM RMSE:', rmse(y_val, lgbm_pred))


# best 나온걸로 최종 test 데이터셋 모델링 및 csv파일 제출
# 위에서 RMSE가 더 낮았던 모델을 선택해서 사용

final_model = lgbm
# final_model = rf

final_model.fit(train, y)
pred = final_model.predict(test)

result = pd.DataFrame({'pred': pred})
result.to_csv('result.csv', index=False)

 

  • 3유형 : dir, help 활용
    • DIR, HELP 치트키를 가장 많이 활용했습니다. 특히, 3유형의 전반부의 경우엔 ~~한 상황이 있다, 이에 가장 적합한 검정 방법을 사용하라는 느낌의 문제 제시가 이루어지는데, print(help(stats)) 를 활용한다면, 해당 검정 방법이 사용되는 예시까지 주석으로 쉽게 달아놓은 덕분에 실제 시험장에서도 유용하게 활용할 수 있었습니다.  

 

3. 데이터마님 CBT 후기

시험을 준비하는 과정에서, 앞서 말한 데이터마님 cbt 5500원 문제 결제가 큰 도움이 되었습니다. 

사이트 이용을 통해 유형별 연습 확인, 모의고사 동형 문제, 자작 모의고사를 제공받을 수 있었습니다.

 

 

1.장점 :  kaggle보다 확실히 시험장 환경에 가까운 코드 작동 방식, 제출 방식.

  처음 사이트를 이용할 땐 notebook 형식으로 나눠치는 것도 적용 안되고, 소숫점 3자리에서 반올림하라 하는 문제의 답이 0.4일 때 0.400형식으로 안하면 오답처리가 되는 점에서 불편함을 느꼈는데, 오히려 이 방식이 실제 제출 방식, 시험 환경과 맞춘 세팅이었습니다. 시험의 합격을 목적으로 준비를 하는 만큼, 실제 환경과 유사한 구조가 datamanim cbt의 가장 큰 장점이라 생각합니다.

 

2. 개선점

 

3유형의 경우 데이터 마님은  직설적으로 ~~검정의 통계량을 구하시오. 라는 제시문을 설명에 넣었는데, 실제 시험에선 상황을 주고, 이에 맞는 검정 방법이 무엇인지 추론하는 느낌의 문제 설명이 나타났기에, 3유형 설명 방식을 이에 맞게 개선해 주었으면 하는 생각이 들었습니다.

 

또한, 최종 제출 시점에서 2유형 csv파일 채점을 포함한 모든 채점이 들어가는 채점이 적용되었으면(더 긴장감 있는 느낌의 채점?)

최종 모델 제출에서 test 대신 x_val을 넣어 0점 처리가 되는 등 시험장에서 발생할 수 있는 실수에 대해  더 유연한 대비가 가능하지 않을까 하는 생각이 들었습니다.