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

onlyJoon·2023년 3월 8일
0

KT AIVLE

목록 보기
6/31
post-thumbnail

주제

  • 캐글 경진대회

목표

  • 악성 사이트 탐지 머신러닝 모델링
  • 주어진 데이터셋에서 적절한 변수 선택
  • 주어진 데이터셋에서 결측치를 적절한 값으로 처리

개인 목표

  • 캐글 상위 10% 이상 랭크하기

역할

  • 7인 1조로 구성된 팀
  • train, test 데이터 분석
  • 개인이 구현한 모델 최적화
  • 최적화 모델로 결과값 예측하여 캐글 제출

1. 데이터 분석

1.1 구성

  • train

    • 웹 크롤러를 통해 수집된 정상/악성 사이트의 HTML Code에 대한 데이터셋
  • test

    • 머신러닝 모델을 통해 결과를 예측하는데 사용할 데이터셋

1.2 분석

  • train
    • (3664 * 24)
    • 결측치: url_path_len, url_domain_len 각각 하나씩 존재
    • 단일값: url_chinese_present, html_num_tags('applet'), url_port(8개만 1)
    • 같은값: url_domain_len, url_hostname_len
    • 상관관계 매우 높은값: url_querylen~url_num_query_para
    • 상관관계 다소 높은값: div, form, a
    • url_len = url_path_len + url_domain_len 의 관계가 성립
    • 그 외 다수의 데이터가 편중되어 분포
  • test
    • (2441 * 23)
    • 결측치가 6개의 변수에서 다수 존재
    • 단일값: url_chinese_present, html_num_tags('applet'), url_port(1개만 1)

2. 데이터 전처리

2.1 중복 데이터 제거

  • 중복 데이터는 학습에 부정적 영향을 미치므로 제거해야 함
  • 총 357개의 중복 데이터가 존재하였음

2.1 결측치 처리

  • train
    • url_path_len: 'url_len = url_path_len + url_domain_len'의 관계를 이용하여 처리
    • url_domain_len: 'url_domain_len, url_hostname_len'의 관계를 이용하여 처리
  • test
    • url_path_len, url_domain_len: train 에서와 동일(url_hostname_len은 처리하지 않음)
    • 3개의 태그 변수(script, from, a)는 'KNN Imputer' 적용(기존에는 각 변수의 평균값으로 채웠으나, 팀원을 통해 해당 방법을 알게 되었음)

KNN Imputer

  • knn 알고리즘을 이용하여 결측치를 채우는 방식
  • 즉, 결측값의 가장 가까운 (n_neighbors)개의 값을 이용해 결측값을 대체하는 알고리즘
  • 'n_neighbors = 5'로 설정하고 진행
from sklearn.impute import KNNImputer

imputer = KNNImputer(n_neighbors = 5)
imputer.fit(test)
x_test= pd.DataFrame(imputer.transform(test), columns = test.columns)

2.3 불필요한 변수 제거 및 중복 데이터 제거

  • 총 다섯 개의 변수를 제거: 같은 데이터 및 다중공선성
  • 변수를 제거하지 않았을 때보다 성능이 더 나은 것을 확인하였음
drop_cols = ['url_hostname_len', 'url_chinese_present', 'html_num_tags(\'applet\')', 'url_port', 'url_num_query_para']
train.drop(drop_cols, axis = 1, inplace=True)
  • 과적합 방지를 위해 중복 데이터 제거: drop_duplicates()

3. 머신러닝 모델링 및 평가

  • 어제 구현한 모델들의 하이퍼파라미터를 조정하여 진행

  • train 데이터셋을 train과 validation용으로 분리하여 학습 및 검증 진행

  • 학습 및 검증 결과

    모델Micro F1-Score
    Decision Tree0.9441
    Random Forest0.9570
    LGBM0.9591
    CatBoost0.9677
    Hard Voting0.9702

4. 결과

어려웠던 부분

  • 전처리 과정 중 결측치 보강에서 너무 많은 시간을 소요해 머신러닝 모델을 구현하고 최적화하는데 시간이 부족하였음

    • 다른 조의 발표를 통해 Pycaret, Automated Machine Learning 등 시간을 단축할 수 있는 툴이 있다는 것을 알게 되었음
    • 위와 같은 툴을 활용하면 좋았겠지만, 배운 내용을 적용해보고 팀원들과 내용을 공유하며 진행했다는 것에 더 큰 의미가 있다고 생각함.

마무리

  • 주어진 데이터 학습을 통해 성능이 좋게 평가된 모델이더라도 실제 데이터에 적용하여 좋은 성능을 내는 것은 어려움

  • 데이터 분석 및 전처리의 중요성을 확인함(해당 과정이 소홀할 때와 아닐 때의 성능차이가 확연히 눈에 보임)

  • 수업에서 배운 내용들 대부분을 적용해보았으며, 구글링하며 더 넓게 공부할 수 있었음

profile
A smooth sea never made a skilled sailor

0개의 댓글