주제
목표
- 탐색적 데이터 분석 복습
- 데이터 전처리 과정 복습
- 머신러닝 모델링 과정 복습
- 머신러닝 모델 평가
개인 목표
- grid search 적용해보기
- Ensemble 사용해보기
- 3가지 이상 모델 만들기
역할
- 개인 프로젝트이므로, 혼자서 과정들을 진행하였음
1. 데이터 분석
1.1 구성
-
Feature Website
- 웹 크롤러를 통해 수집된 정상/악성 사이트의 HTML Code에 대한 데이터 셋
-
train
- HTML에서 추출한 Feature(특징)에 대한 데이터셋
1.2 분석
- ydata-profiling: AUTO EDA를 위한 라이브러리
%pip install ydata-profiling
from ydata_profiling import ProfileReport
profile = df.profile_report(interactions = {'targets':['label'],}, explorative = True)
profile.to_widgets()
- 이를 활용해 단변량, 이변량 분석을 하였음
- 각 데이터의 자료형(숫자형, 범주형), 결측치 여부, 기초 통계량, 데이터 분포, 상관분석 결과 등을 한번에 확인하였음
2. 데이터 전처리
2.1 중복 데이터 제거
df.drop_duplicates(inplace = True)
- 중복 데이터는 학습에 부정적 영향을 미치므로 제거해야 함
- 총 357개의 중복 데이터가 존재하였음
2.2 결측치 처리
- 결측치는 두 개가 서로 다른 행에 존재 -> 제거
df.dropna(subset = [기준 컬럼들], axis = 0, inplace = True)
2.3 불필요한 변수 제거
- 무의미한 변수, 상관관계가 높은 변수들을 확인하여 제거
3. 머신러닝 모델링 및 평가
- 각 모델 하이퍼파라미터 조정을 위해 Grid Search를 적용
3.1 DecisionTree
- max_depth, min_samples_leaf, min_samples_split 조정
3.2 RandomForest
- n_estimators, max_depth, min_samples_leaf, min_samples_split 조정
3.3 LGBM
- max_depth, n_estimators 조정
3.4 CatBoost
3.5 Voting
- 위 네개의 모델을 활용하여 최종 예측 결과를 결정
- soft와 hard 두 가지가 있음
어려웠던 부분
- 불필요한 변수를 제거하는 과정
- 변수들 중 highly imbalanced된 것들이 많았음
- 변수들 간 상관관계가 높은 것들이 많았음
- 변수를 제거하니 모델의 성능이 제대로 나오지 않음
- 변수를 최소한 제거하면 최대 성능은 약 0.96.
- 변수를 최대한 제거하면 최대 성능이 0.90에도 미치지 못하는 결과를 보임
- GridSearch 과정이 너무 오래 걸렸음
- HalvingGridSearchCV를 사용하여 시간을 단축시킴
- Early Stopping도 적용해보면 좋을 것 같음
- GridSearch를 하더라도 default 값으로 했을 때보다 성능이 좋지 않을 때가 있었음
- Bayesian Optimization을 알아보고 다음 번에 적용해볼 예정