들어가며: 실전 경험에서 나온 공략법
AICE Professional 시험에 직접 도전해 보았습니다. 결과적으로 1, 2번은 만점을 받았지만, 3번(Image) 문제에서 막혀 아쉽게 불합격했습니다. 그 경험을 바탕으로, 시험에서 나올 가능성이 높은 예상 문제와 접근 방법을 정리해 보겠습니다.
같은 시험을 준비하시는 분들에게 실질적인 도움이 되길 바랍니다.
AICE Professional 시험 구조부터 파악하자
시험은 총 3문제로 구성되어 있으며, 각 문제의 배점은 다음과 같습니다.
| 문제 | 유형 | 배점 |
|---|---|---|
| 1번 | Tabular (정형 데이터) | 30점 |
| 2번 | Text (텍스트 데이터) | 35점 |
| 3번 | Image (이미지 데이터) | 35점 |
합격 기준은 80점 이상입니다. 100점 만점에 80점이니 여유가 있어 보이지만, 실제로는 한 문제라도 완전히 틀리면 사실상 불합격입니다. 부분 점수가 있긴 하지만, 거의 다 맞아야 의미 있는 점수가 나옵니다. 풀다가 중간에 포기하거나 답이 아예 틀리면 0점 처리되기 때문에, 세 문제 모두 확실하게 마무리하는 전략이 필요합니다.
1번 문제: Tabular 회귀 — 출제 유형 분석
예상 문제 형태
약 10개 내외의 수치형 변수(각종 검사 수치, 지표 등)가 주어지고, 이를 기반으로 1년 후 발병 수치를 예측하는 전형적인 회귀(Regression) 문제가 출제됩니다.
핵심 포인트는 다음과 같습니다.
- 범주형 변수 없이 수치 데이터만 제공됩니다
- 복잡한 전처리가 필요 없는 깔끔한 데이터셋입니다
- 평가 기준은 RMSE 83 이하를 달성해야 합니다
즉, 전처리에 시간을 쓸 필요 없이 모델 선택과 하이퍼파라미터 조정에 집중하면 되는 문제입니다.
풀이 전략: 5단계 접근법
Step 1. 데이터 로드 및 기본 확인
python
import pandas as pd
import numpy as np
from pathlib import Path
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
import joblib
# 경로 설정
DATA_DIR = Path('.')
TRAIN_CSV = DATA_DIR / '01_train.csv'
TEST_CSV = DATA_DIR / '01_test_x.csv'
# 제출 파일 이름 설정 (본인 전화번호로 변경)
PHONE = '01012345678'
OUT_CSV = DATA_DIR / f'{PHONE}_1.csv'
OUT_PKL = DATA_DIR / f'{PHONE}_1.pkl'
TARGET_COL = 'target'
# 데이터 로드
train = pd.read_csv(TRAIN_CSV)
test = pd.read_csv(TEST_CSV)
실전에서는 파일명이 다를 수 있으니, 문제에서 제시하는 파일명을 정확히 확인하세요.
Step 2. 전처리 — 최소한으로 충분합니다
이 문제의 데이터는 깔끔한 수치형이라 복잡한 전처리가 필요 없습니다. 다만 혹시 모를 결측치에 대비해 평균값 대치 정도만 해 두면 안전합니다.
python
# X, y 분리
y = train[TARGET_COL].values
X = train.drop(columns=[TARGET_COL])
# 결측치 안전장치 (있으면 평균 대치)
if X.isnull().any().any():
X = X.fillna(X.mean())
if test.isnull().any().any():
test = test.fillna(test.mean())
팁: 시험 시간은 한정되어 있습니다. EDA(탐색적 데이터 분석)에 시간을 과하게 쓰기보다, 빠르게 모델을 돌려보고 결과를 확인하는 쪽이 효율적입니다.
Step 3. 검증 데이터 분리 — 반드시 확인하고 넘어가세요
python
X_tr, X_va, y_tr, y_va = train_test_split(
X, y, test_size=0.2, random_state=42
)
검증 데이터를 분리하는 이유는 단순합니다. 제출 전에 RMSE가 83 미만인지 확인해야 하기 때문입니다. 이 확인 없이 바로 제출하면, 기준을 넘겼는지 알 수 없어 불안한 채로 시험을 마치게 됩니다.
Step 4. 모델 학습 및 검증 — RandomForest면 충분합니다
python
rf = RandomForestRegressor(
n_estimators=600,
max_depth=None,
min_samples_leaf=2,
n_jobs=-1,
random_state=42
)
# 학습 및 검증
rf.fit(X_tr, y_tr)
va_pred = rf.predict(X_va)
rmse_va = mean_squared_error(y_va, va_pred, squared=False)
print(f'Validation RMSE: {rmse_va:.4f}')
RandomForestRegressor를 선택한 이유는 명확합니다.
- 전처리가 거의 필요 없습니다 (스케일링 불필요)
- 과적합에 비교적 강합니다
- 하이퍼파라미터 기본값만으로도 준수한 성능을 냅니다
- XGBoost보다 설정이 간단해서 시험 환경에서 실수할 여지가 적습니다
RMSE가 83을 넘긴다면? 간단 튜닝 가이드
| 파라미터 | 시도 순서 | 설명 |
|---|---|---|
n_estimators | 300 → 600 → 1000 | 트리 수를 늘려 안정성 향상 |
min_samples_leaf | 1 → 2 → 4 | 노이즈 완화, 과적합 방지 |
max_depth | None → 20 → 12 | 트리 깊이 제한으로 일반화 |
max_features | 1.0 → 0.7 → 0.5 | 각 트리가 사용하는 변수 비율 축소 |
시간 여유가 있다면 RandomizedSearchCV로 30~50회 정도 탐색해도 좋지만, 대부분의 경우 위 조합을 2~3개만 수동으로 바꿔 보면 기준을 통과합니다.
Step 5. 최종 제출 파일 생성
검증에서 기준을 통과했다면, 전체 학습 데이터로 다시 학습한 뒤 예측합니다.
python
# 전체 데이터로 최종 학습
rf.fit(X, y)
# 테스트 예측
test_pred = rf.predict(test)
# CSV 저장 (문제에서 요구하는 포맷에 맞춰 조정)
test['pred'] = test_pred
test.to_csv(OUT_CSV, index=False)
print(f'Wrote: {OUT_CSV}')
# 모델 저장 (pkl)
joblib.dump(rf, OUT_PKL)
print(f'Wrote: {OUT_PKL}')
주의: 제출 파일의 컬럼명과 포맷은 문제마다 다를 수 있습니다. 문제 지시사항을 꼼꼼히 읽고 맞추세요. 파일명도
전화번호_문제번호형식이 일반적이지만, 시험 당일 안내를 반드시 따라야 합니다.
실전 체크리스트
시험장에서 코드를 실행하기 전, 이 순서대로 확인하세요.
- 데이터 파일명과 경로가 정확한가?
- target 컬럼명이 맞는가?
- 검증 RMSE가 83 미만인가?
- 최종 학습은 전체 데이터로 했는가?
- 제출 CSV 포맷(컬럼명, 순서)이 문제 요구사항과 일치하는가?
- pkl 파일이 정상적으로 저장되었는가?
마무리
1번 Tabular 문제는 AICE Professional 세 문제 중 가장 접근하기 쉬운 문제입니다. RandomForest 하나로 충분히 만점을 받을 수 있고, 전처리에 시간을 낭비하지 않는 것이 핵심입니다.
다만, 쉽다고 방심하면 안 됩니다. 파일명 오류, 제출 포맷 실수 같은 사소한 부분에서 0점을 받을 수 있습니다. 코드보다 제출 과정을 더 꼼꼼히 챙기세요.
다음 글에서는 2번 Text 문제 풀이를 다루겠습니다.