시험 준비
빅데이터 분석기사 실기 준비를 하면서, 시험 직전에 볼 간단한 문법 정리집이 필요했다.
실제 시험 준비는 많은 분들처럼 캐글 놀이터를 활용했는데, 나같은 경우는
- python은 익숙하지만 pandas는 낯설어서 정답을 따라서 손코딩을 해보고
- 학습한 내용을 바탕으로 직접 문제를 풀어보는 식으로 공부했다.
작업형 2 유형의 경우 학습을 시켜 성능을 올리는 것도 중요하지만 개인적으로는
- 어떤 피처를 선택해서 학습할지
- 범주형 데이터는 어떻게 처리할지
- 결측치 처리는 어떻게 할지와 같은 데이터 전처리가 중요하다고 느꼈다.
제 8회 실기의 경우 데이터 전처리도 비교적 간단했고, 모델 성능도
EDA (데이터 분석)
- 데이터 상위 5개 확인
- 데이터 정보 확인
- df.info()
- null 개수, 데이터 타입 등 확인 가능
- 데이터 결측값 개수 확인
- 특정 컬럼의 값 개수
- df[컬럼].value_counts()
- 타겟(=레이블)의 수를 파악하는 데에 유용
- 데이터 최소, 최대, 사분위값 등 확인
- 데이터 값을 꺼내 별도 저장
- df2 = df.pop(컬럼)
- 예를 들어 학습 데이터에 정답 레이블이 함께 포함되어 있는 경우, 이를 통해 학습할 피처와 정답 레이블을 분리할 수 있음
데이터 전처리
- 학습, 테스트 데이터셋 나누기
- from sklearn.model_selection import train_test_split
- x_train, x_test = train_test_split(df, test_size=0.2, random_state=2024)
- 학습을 진행하고 오버피팅이 되어 있지는 않은지, 학습이 잘 되었는지 검증하는 용도로 유용
범주형 데이터 처리
- pd.get_dummies(df)
- 범주형 데이터를 0, 1의 수치형 데이터로 변환
- 사실상 원핫인코딩을 한다고 볼 수 있음
- 데이터 프레임 전체에 대해 한 번에 진행할 수도 있고, 특정 컬럼에 대해서 진행할 수도 있음
- LabelEncoder().fit_transform(df[컬럼])
- 범주형 데이터를 수치형 데이터로 변환
- from sklearn.preprocessing import LabelEncoder
- 여러 범주형 데이터 컬럼을 처리하고 싶다면, for loop으로 하나씩 처리해줘야 함
범주형 데이터 제외
- 범주형 데이터 제외
- df = df.select_dtypes(exclude=['object'])
이상치 제거
- del_idx = X_train[조건문].index
- X_train = X_train.drop(index=del_idx, axis=0)
- axis=0일 경우 행 데이터 삭제
- axis=1일 경우 열 데이터 삭제
- 행을 기준으로 데이터를 삭제할 경우, 인풋(X_train)과 아웃풋(y_train)을 모두 삭제해야 함에 유의
이상치 대체 (평균)
- mean_val = X_train[컬럼].mean()
- X_train.loc[:, 컬럼].replace('이전 값', mean_val(='대체할 값'), inplace=True)
- X_train[컬럼] = X_train[컬럼].replace('이전 값', '대체할 값')으로 작성해도 무방
결측치 대체
- 최빈값과 차이가 크면 최빈값으로, 값이 비슷하면 별도의 값으로 대체할 수 있음
- df[컬럼].fillna(df[컬럼].mode()[0])
- SimpleImputer 사용 가능
- from sklearn.impute import SimpleImputer
- X_train = SimpleImputer().fit_transform(X_train)
- X_test = SimpleImputer().transform(X_test)
- fit은 학습, transform은 변환 과정이므로 학습 데이터에 대해서만 fit을 수행하고 테스트 데이터에서는 fit을 수행하지 않음에 유의
스케일링
- StandardSclaer
- from sklearn.preprocessing import StandardScaler
- sclaer = StandardScaler()
- X_train = scaler.fit_transform(X_train)
- X_test의 경우 transform을 해주면 됨 (fit = 학습이므로 필요 없음)
- 평균 0, 분산 1로 표준화
- MinMaxScaler
- from sklearn.preprocessing import MinMaxScaler
- 사용 방법은 StandardScaler와 동일
알고리즘
어떤 모델이 있는지 정도만 숙지하고, 자세한 사용법은 시험 현장에서 help, dir를 통해 확인 후 사용
분류모델
- RandomForestClassifier
- from sklearn.ensemble import RandomForestClassifier
- model = RandomForestClassifier(n_estimators=N, max_depth=N, random_state=2024)
- n_estimator는 나무(tree)의 개수, max_depth는 나무의 깊이
- random_state는 결과의 재현을 위해 랜덤 시드를 고정한 것으로, 임의의 값을 사용하면 됨
- SVC
- from sklearn.svm import SVC
- model = SVC(random_state=2024)
- DecisionTreeClassifier
- from sklearn.tree import DecisionTreeClassifier
- model = DecisionTreeClassifier(random_state=2024)
회귀모델
- RandomForestRegressor
- from sklearn.ensemble import RandomForestRegressor
- model = RandomForestRegressor()
- XGBRegressor
- from xgboost import XGBRegressor
- model = XGBRegressor()
- LinearRegression
- from sklearn.linear_model import LinearRegression
- model = LinearRegression()
학습
- model.fit(X_train, y_train)
- 학습 시 y_train의 값은 타겟값만 남겨놔야 함 (다른 컬럼은 삭제)
- 학습 시 X_train의 값은 학습에 사용할 피처만 남겨놔야 함
평가
- predictions = model.predict(X_test)
- 평가 시 X_test의 값은 사용할 피처만 남겨놔야 함
- mean_accuracy = model.score(X_train, y_train)
- 분류 모델의 경우 평균 정확도
- 학습 데이터셋의 평균 정확도가 너무 높다면 오버피팅의 가능성
분류 평가지표
- accuracy
- 높을수록 좋은 성능
- from sklearn.metrics import accuracy_score
- accuracy_score(정답, 예측)
- ROC-AUC
- 값이 클수록 좋은 성능
- from sklearn.metrics import roc_auc_score
- roc_auc_score(정답, 예측)
- binary classification의 경우, predict_proba 함수를 통해 예측한 값의 [:,1]을 사용할 수 있음

회귀 평가지표
- RMSE
- 낮을수록 좋은 성능
- from sklearn.metrics import mean_squared_error
- np.sqrt(mean_squared_error(정답, 예측))
- R2
- 클수록 좋은 성능
- from sklearn.metrics import r2_score
- r2_score(정답, 예측)
결과 제출하기
해당 예시코드는 시험 문제에서도 주어짐
아래는 단순 참고용
- output = pd.DataFrame({'column1': X_test.column, 'column2': predictions})
- output.to_csv('파일명', index=False)