빅데이터분석기사 작업형2 모델링 답안 사례를 찾고 있다면, 이 글 한 편으로 끝내실 수 있도록 정리했습니다. 작업형2는 배점 40점짜리 단일 문제지만, 실제로는 합격과 불합격을 가르는 결정적 관문입니다. 실무에서 4년간 모델링을 하다가 9회차에 응시했을 때, 저 역시 ‘템플릿 하나만 제대로 외우면 끝난다’는 말의 의미를 시험장에서 체감했습니다.
제가 합격 노트에 가장 굵게 적어둔 문장은 이겁니다.
작업형2는 창의력 시험이 아닙니다. 표준 답안의 순서를 얼마나 흔들리지 않고 옮기느냐가 전부입니다.
아래에서 시험 구조, 만능 코드 템플릿, 분류·회귀 실전 답안, 그리고 채점에서 점수가 새는 지점까지 차례로 살펴보겠습니다.

작업형2 시험 구조와 채점 기준
먼저 시험이 어떤 모양인지부터 잡고 가야 합니다. 같은 시간을 투자해도 채점 방식을 모르면 점수가 새기 쉽거든요.
출제 형식과 배점
빅데이터분석기사 실기는 작업형1·2·3으로 나뉘며, 총점 60점 이상이 합격선입니다. 과락은 없습니다. 즉 한 유형을 0점 받아도 다른 유형에서 60점만 확보하면 합격이라는 뜻입니다.
작업형2는 그중 단일 문항이지만 배점이 가장 큽니다. 40점짜리 한 문제이고, 분류 또는 회귀 과제가 무작위로 출제됩니다.
응시 환경은 클라우드 코딩 페이지(구름EDU 기반)이며, Python과 R 중 택일입니다. 실무 비중을 보면 파이썬 응시자가 압도적입니다.
채점 방식: 성능 점수 + 절차 점수
핵심은 정답 그 자체가 아니라 예측 결과의 성능 지표입니다. 분류면 macro F1 또는 ROC-AUC, 회귀면 RMSE 기준으로 기준선 대비 점수가 산출됩니다.
다만 코드를 끝까지 돌리지 못해도, 부분 점수가 들어옵니다. 데이터 로딩·전처리·모델 학습·예측·제출 파일 생성 등 각 단계가 정상적으로 동작했는지를 함께 봅니다.
실전 팁
제출 파일 이름과 컬럼명을 한 글자라도 틀리면 채점이 안 들어갑니다. 문제 지시문에 명시된 result.csv 또는 수험번호.csv 형식, 그리고 컬럼명을 그대로 복사해서 쓰세요.
분류 vs 회귀, 어떤 지표가 나오는가
최근 출제 추세를 보면 분류 문제가 더 자주 나오는 편이지만, 회차마다 다릅니다. 어느 쪽이 나와도 흔들리지 않으려면 둘의 지표를 모두 외워두는 게 안전합니다.
| 구분 | 분류 문제 | 회귀 문제 |
|---|---|---|
| 타깃 형태 | 이진/다중 클래스 (0/1, A·B·C) | 연속형 값 (가격, 수량) |
| 대표 모델 | RandomForestClassifier | RandomForestRegressor |
| 평가 지표 | macro F1, ROC-AUC, Accuracy | RMSE, MAE, R² |
| 제출 컬럼 | 예측 클래스 또는 확률값 | 예측 수치 |
특히 헷갈리는 지점은 분류에서 ‘확률을 제출하라’는 경우입니다. 이때 predict_proba의 1열(양성 확률)만 뽑아 제출하면 됩니다.
이 섹션 핵심
작업형2는 40점짜리 단일 문항, 과락 없음, 합격선 60점. 분류면 F1/AUC, 회귀면 RMSE 기준. 제출 파일 포맷을 지문 그대로 따라가는 게 점수의 절반입니다.
합격자들이 쓰는 만능 코드 템플릿 8단계
이제 본론입니다. 어떤 데이터셋이 떨어져도 똑같이 굴러가는 8단계 흐름을 외워두면, 시험장에서 머리가 멎어도 손이 움직입니다.
1단계: 무조건 외우는 import 블록
시험 첫 줄에 그대로 쓰는 고정 코드입니다. 한 줄도 빠지면 안 됩니다.
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score, roc_auc_score, mean_squared_error
from sklearn.preprocessing import LabelEncoder
2단계: 데이터 불러오기
제공되는 변수명은 보통 X_train, X_test, y_train 세 개입니다. 문제 페이지에 미리 로드 코드가 들어있는 경우도 많으므로 지문을 먼저 확인하세요.
X_train = pd.read_csv('data/X_train.csv')
X_test = pd.read_csv('data/X_test.csv')
y_train = pd.read_csv('data/y_train.csv')
3단계: 30초 EDA
이 단계에서 욕심내면 시간이 모자랍니다. 다음 세 줄만 봅니다.
X_train.shape,X_test.shape— 행/열 수, 데이터 양 파악X_train.info()— 컬럼별 타입과 결측치 개수X_train.describe(include='all')— 수치형/범주형 분포 한눈에 보기
4단계: 결측치·범주형 처리
가장 점수가 새는 구간입니다. 결측치 처리는 단순하게, 범주형은 LabelEncoder로 일괄 처리하는 게 안전합니다.
# 결측치: 수치형은 중앙값, 범주형은 최빈값
for col in X_train.select_dtypes(include='number').columns:
X_train[col] = X_train[col].fillna(X_train[col].median())
X_test[col] = X_test[col].fillna(X_train[col].median())
for col in X_train.select_dtypes(include='object').columns:
X_train[col] = X_train[col].fillna(X_train[col].mode()[0])
X_test[col] = X_test[col].fillna(X_train[col].mode()[0])
# 범주형 인코딩
for col in X_train.select_dtypes(include='object').columns:
le = LabelEncoder()
le.fit(pd.concat([X_train[col], X_test[col]]))
X_train[col] = le.transform(X_train[col])
X_test[col] = le.transform(X_test[col])
주의
LabelEncoder를 X_train에만 학습시키면 X_test의 새로운 카테고리에서 에러가 납니다. 반드시 둘을 합쳐서 fit하세요.
5~7단계: 분리·학습·검증
검증셋을 따로 떼는 이유는 시험장에서 점수를 미리 가늠하기 위해서입니다. 시험 시스템이 가채점을 보여주지 않을 때를 대비하는 안전장치입니다.
X_tr, X_val, y_tr, y_val = train_test_split(
X_train, y_train.iloc[:, -1], test_size=0.2, random_state=42, stratify=y_train.iloc[:, -1]
)
model = RandomForestClassifier(n_estimators=300, random_state=42)
model.fit(X_tr, y_tr)
val_pred = model.predict(X_val)
print('F1:', f1_score(y_val, val_pred, average='macro'))
회귀라면 마지막 두 줄만 RMSE 계산으로 바꾸면 끝입니다.
val_pred = model.predict(X_val)
print('RMSE:', np.sqrt(mean_squared_error(y_val, val_pred)))
8단계: 제출 파일 저장
여기서 실수가 가장 자주 나옵니다. 문제 지문이 요구한 컬럼명 그대로 만드세요.
pred = model.predict(X_test)
result = pd.DataFrame({'pred': pred})
result.to_csv('result.csv', index=False)
# 확인
print(pd.read_csv('result.csv').head())
8단계 중 가장 중요한 건 1번(import)과 8번(저장)입니다. 가운데가 비어도 부분 점수가 들어옵니다.
분류·회귀 실전 답안 사례
이제 위 템플릿이 실제 문제에 어떻게 적용되는지, 분류와 회귀 사례를 하나씩 보겠습니다. 7~10회차 기출 흐름을 반영한 형태로 재구성했습니다.
사례 1. 분류 — 고객 이탈 예측 (macro F1)
문제 요지는 보통 이렇습니다. “고객 정보 X_train, X_test와 이탈 여부 y_train이 주어진다. X_test의 이탈 여부를 예측해 result.csv로 제출하라. 평가지표는 macro F1.”
풀이 핵심은 두 가지입니다. 첫째, 타깃 라벨이 cust_id처럼 식별자와 함께 들어있는 경우가 많아 컬럼을 정확히 골라야 합니다. 둘째, 클래스 불균형이 심하면 class_weight='balanced'를 넣으면 점수가 올라갑니다.
# y_train이 [cust_id, churn] 두 컬럼인 경우
y = y_train['churn']
model = RandomForestClassifier(
n_estimators=500, max_depth=10,
class_weight='balanced', random_state=42
)
model.fit(X_train, y)
pred = model.predict(X_test)
result = pd.DataFrame({'cust_id': X_test['cust_id'], 'churn': pred})
result.to_csv('result.csv', index=False)

사례 2. 회귀 — 중고차 가격 예측 (RMSE)
회귀에서는 타깃 분포 왜곡이 흔합니다. 가격, 매출처럼 오른쪽으로 긴 꼬리를 가진 데이터에는 log 변환이 의외로 큰 점수를 줍니다.
from sklearn.ensemble import RandomForestRegressor
y = y_train.iloc[:, -1]
y_log = np.log1p(y) # 로그 변환
model = RandomForestRegressor(
n_estimators=500, max_depth=15, random_state=42
)
model.fit(X_train, y_log)
pred_log = model.predict(X_test)
pred = np.expm1(pred_log) # 원래 스케일로 복원
result = pd.DataFrame({'pred': pred})
result.to_csv('result.csv', index=False)
제가 실제로 회귀 문제를 풀 때 log 변환을 적용한 것만으로 검증 RMSE가 약 18% 줄었습니다. 가격·매출·일조량처럼 한쪽으로 치우친 변수에는 거의 항상 효과가 있습니다.
분류 vs 회귀, 코드에서 바뀌는 부분만
두 사례를 비교하면, 사실상 4줄만 바뀐다는 게 보입니다.
확률 제출이 요구될 때
분류에서 “양성 클래스 확률을 제출하라”는 지시가 나오면 한 줄만 바꿉니다.
proba = model.predict_proba(X_test)[:, 1] # 1열 = 양성 클래스 확률
result = pd.DataFrame({'pred': proba})
result.to_csv('result.csv', index=False)
이 섹션 핵심
분류는 클래스 불균형이면 class_weight='balanced', 회귀는 타깃이 치우치면 log1p/expm1. 이 두 가지만 추가해도 베이스라인 대비 점수가 한 단계 올라갑니다.
자주 하는 실수와 점수 새는 지점
마지막 섹션입니다. 실제로 응시생들이 시험장에서 가장 많이 떨어지는 함정을 정리했습니다. 한 번 읽어두면 시험 당일 똑같은 실수를 안 합니다.
실수 1. 제출 파일 컬럼명 한 글자 차이
지문에서 “income 컬럼으로 제출하라”고 했는데 Income, pred, predict로 저장하면 0점 처리됩니다. 지문을 복사해서 쓰세요.
실수 2. 검증셋 분리를 빼먹음
X_train 전체로 학습하면 시험장에서 점수를 가늠할 길이 없습니다. 검증 점수가 0.5도 안 되는데 그대로 제출하는 일이 생깁니다.
실수 3. 하이퍼파라미터 튜닝에 시간 쓰기
GridSearchCV로 30분을 태우는 사람을 시험장에서 봤습니다. 그 시간이면 작업형3 한 문제를 더 풉니다. n_estimators=300~500, max_depth=10~15 정도로 고정해 두는 게 효율적입니다.
실수 4. 데이터 누수
스케일링이나 인코딩을 X_train + X_test 합쳐서 fit하는 건 시험에서는 봐주지만, 정석은 X_train에 fit하고 X_test에 transform 적용입니다. 다만 LabelEncoder는 새로운 범주에서 에러가 나기 때문에 합쳐서 fit하는 게 안전합니다. 시험장에서는 후자를 권합니다.
실수 5. 시간 배분
작업형2에 1시간을 다 써버리면 작업형3을 못 풉니다. 작업형2는 30~40분 안에 끝내는 게 정상입니다.
제 합격 당시 시간 분배
작업형1: 20분 / 작업형2: 35분 / 작업형3: 30분 / 검토 25분. 작업형2를 빠르게 끝낸 게 결정적이었습니다.
참고로 동일한 데이터 분야의 비전공자 대상 자격증 순서가 궁금하다면, DAsP와 ADsP 중 어느 자격증을 먼저 보는 게 좋은지 비교한 글에서 데이터 자격증 전체 로드맵을 함께 잡을 수 있습니다.
자주 묻는 질문
Q. 작업형2에서 RandomForest 말고 XGBoost를 써도 되나요?
네, 가능합니다. sklearn 외에 xgboost, lightgbm도 응시 환경에 설치돼 있습니다. 다만 시험장에서 처음 써보는 라이브러리에 도전하지 마세요. 평소에 RandomForest로 베이스라인을 만들고, 시간이 남을 때만 XGBoost로 바꿔 점수 비교를 하는 전략이 안전합니다.
Q. 작업형2를 0점 받아도 합격할 수 있나요?
이론상 가능합니다. 과락이 없기 때문에 작업형1(30점)과 작업형3(30점)에서 만점에 가깝게 받으면 60점 합격선을 넘길 수 있습니다. 하지만 작업형1과 3은 한 문제만 틀려도 점수가 크게 깎이는 구조라, 실전에서는 작업형2에서 부분 점수라도 챙기는 게 훨씬 안정적입니다.
Q. 검증 F1 점수가 어느 정도 나와야 합격권인가요?
문제마다 다르지만, 대체로 검증 macro F1이 0.75 이상이면 작업형2 만점에 가깝게 받습니다. 0.65~0.75 구간은 부분 점수 약 60~80%, 그 아래는 절반 미만으로 떨어지는 경향이 있습니다. 회귀의 경우 베이스라인 RMSE 대비 얼마나 줄였는지가 기준입니다.
Q. 시험장에서 인터넷 검색이나 도움말을 볼 수 있나요?
아니요. 외부 인터넷은 차단됩니다. 다만 Python 표준 도움말 함수(help(), dir())는 사용할 수 있고, sklearn 함수의 docstring은 ?RandomForestClassifier처럼 호출해서 확인할 수 있습니다. 평소 연습할 때 자주 잊는 인자 이름은 미리 손에 익혀두세요.
Q. 작업형2 준비는 며칠 잡으면 충분한가요?
파이썬 기본 문법과 pandas를 다룰 줄 안다면, 작업형2 자체는 2~3일이면 템플릿 완성이 가능합니다. 다만 작업형1·3까지 함께 준비하려면 최소 3~4주는 필요합니다. 비전공자라면 ADsP 한 달 학습 플랜 정도의 데이터 분석 기초를 먼저 잡고 들어가는 게 시간 절약에 좋습니다.
여기까지가 빅데이터분석기사 작업형2 모델링 답안 사례의 핵심 정리입니다. 시험 전날 이 글의 8단계 템플릿만 한 번 더 손으로 타이핑해 보세요. 시험장에서 손이 먼저 움직이는 순간, 작업형2는 사실상 끝납니다.