[KT AIVLE] 10. 미니프로젝트 2차(2)

onlyJoon·2023년 3월 7일
0

KT AIVLE

목록 보기
5/31
post-thumbnail

주제

  • 악성 사이트 탐지 모델링

목표

  • 탐색적 데이터 분석 복습
  • 데이터 전처리 과정 복습
  • 머신러닝 모델링 과정 복습
  • 머신러닝 모델 평가

개인 목표

  • 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

  • depth

3.5 Voting

  • 위 네개의 모델을 활용하여 최종 예측 결과를 결정
  • soft와 hard 두 가지가 있음

어려웠던 부분

  • 불필요한 변수를 제거하는 과정
    • 변수들 중 highly imbalanced된 것들이 많았음
    • 변수들 간 상관관계가 높은 것들이 많았음
  • 변수를 제거하니 모델의 성능이 제대로 나오지 않음
    • 변수를 최소한 제거하면 최대 성능은 약 0.96.
    • 변수를 최대한 제거하면 최대 성능이 0.90에도 미치지 못하는 결과를 보임
  • GridSearch 과정이 너무 오래 걸렸음
    • HalvingGridSearchCV를 사용하여 시간을 단축시킴
    • Early Stopping도 적용해보면 좋을 것 같음
  • GridSearch를 하더라도 default 값으로 했을 때보다 성능이 좋지 않을 때가 있었음
    • Bayesian Optimization을 알아보고 다음 번에 적용해볼 예정
profile
A smooth sea never made a skilled sailor

0개의 댓글