빅데이터분석기사 실기
IT 위키
더 많은 작업
- 빅데이터분석기사 실기시험
- 빅데이터 분석 실무 과목을 Python 또는 R 코드로 직접 풀어 검정하는 CBT 작업형 시험
빅데이터분석기사 필기에 합격하고 응시자격 서류 심사를 통과하면 응시할 수 있다. 과목은 '빅데이터 분석 실무' 하나이며 100점 만점에 60점 이상이면 최종 합격이다.
- 검정방법 : 통합형(작업형), CBT
- 시험시간 : 180분
- 언어 : Python 또는 R 중 선택
- 제6회(2023. 6. 24.)부터 기존 단답형 10문항을 없애고 작업형 제3유형으로 바꿨다.
| 유형 | 내용 | 문항 | 배점 | 답안 |
|---|---|---|---|---|
| 작업형 제1유형 | 데이터 전처리 (결측값·이상값 처리, 필터링, 집계, 스케일링, 날짜 처리) | 3문항 | 30점 (각 10점) | 계산 결과 값을 입력 |
| 작업형 제2유형 | 분류·회귀 모형 구축과 평가 | 1문항 | 40점 | 예측 결과를 지정한 형식의 CSV 파일로 제출 |
| 작업형 제3유형 | 통계 분석 (가설검정, 회귀계수 추정 등) | 2문항 (소문항 포함) | 30점 | 계산 결과 값을 입력 |
pandas로 데이터를 가공해 한 개의 값을 구한다.
import pandas as pd
df = pd.read_csv("data.csv")
# 결측값 확인과 대체
df.isnull().sum()
df["age"] = df["age"].fillna(df["age"].median())
# 이상값 (IQR 기준)
q1, q3 = df["price"].quantile([0.25, 0.75])
iqr = q3 - q1
out = df[(df["price"] < q1 - 1.5 * iqr) | (df["price"] > q3 + 1.5 * iqr)]
# 조건 필터링과 그룹 집계
df[df["city"] == "서울"]["sales"].mean()
df.groupby("city")["sales"].sum().sort_values(ascending=False).head(3)
# 최소-최대 정규화, 표준화
from sklearn.preprocessing import MinMaxScaler, StandardScaler
df["x_mm"] = MinMaxScaler().fit_transform(df[["x"]])
df["x_z"] = StandardScaler().fit_transform(df[["x"]])
# 날짜 처리
df["date"] = pd.to_datetime(df["date"])
df["month"] = df["date"].dt.month
- 자주 쓰는 함수 : isnull, fillna, dropna, quantile, groupby, agg, sort_values, nlargest, value_counts, merge, pivot_table, cut, to_datetime
학습용 데이터로 모형을 만들고 평가용 데이터를 예측해 제출한다.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
y = train.pop("target")
# 범주형 변수 원-핫 인코딩 (학습·평가 데이터 열 맞추기)
all_x = pd.get_dummies(pd.concat([train, test]))
X, X_test = all_x[:len(train)], all_x[len(train):]
X, X_test = X.fillna(0), X_test.fillna(0)
# 검증 데이터로 성능 확인
X_tr, X_val, y_tr, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
model = RandomForestClassifier(n_estimators=200, random_state=42)
model.fit(X_tr, y_tr)
print(roc_auc_score(y_val, model.predict_proba(X_val)[:, 1]))
# 전체 학습 후 예측, 제출 파일 저장
model.fit(X, y)
pd.DataFrame({"pred": model.predict_proba(X_test)[:, 1]}).to_csv("result.csv", index=False)
- 제출 파일의 열 이름, 행 수, 확률값·클래스값 여부는 문제의 요구대로 맞춘다. 형식이 틀리면 점수를 받지 못한다.
- 분류 : RandomForestClassifier, LogisticRegression, 부스팅 계열 / 회귀 : RandomForestRegressor, LinearRegression
- 데이터 분할, N-fold 교차 검증, 하이퍼파라미터 조정
scipy, statsmodels로 검정통계량·p-값·회귀계수 등을 구한다.
from scipy import stats
import statsmodels.formula.api as smf
# 정규성 검정
stats.shapiro(df["x"])
# 대응표본 / 독립표본 t-검정
stats.ttest_rel(df["before"], df["after"])
stats.ttest_ind(g1, g2, equal_var=False)
# 일원배치 분산분석
stats.f_oneway(g1, g2, g3)
# 카이제곱 독립성 검정
table = pd.crosstab(df["gender"], df["buy"])
stats.chi2_contingency(table)
# 선형 회귀와 로지스틱 회귀 계수
smf.ols("y ~ x1 + x2", data=df).fit().summary()
smf.logit("buy ~ age + income", data=df).fit().params
- 제1유형은 결과 값 하나만 맞으면 되므로 중간 결과를 print로 확인하며 푼다.
- 제2유형은 성능보다 제출 형식이 먼저이다. 기본 모형(랜덤 포레스트)으로 먼저 제출 파일을 만든 뒤 개선한다.
- 제3유형은 scipy.stats와 statsmodels의 결과 해석(검정통계량, p-값, 계수, 오즈비)을 익힌다.
- 시험 환경에서는 help()와 dir()로 함수 사용법을 확인할 수 있다.