기억하려고 적어두는 두번째 미니 프로젝트
악성행위를 하는 웹 사이트는 공통 Feature가 존재함을 확인후 AI로 분류
데이터는 한국 인터넷 진흥원, OpenPish, PishTank
개발 프로젝트를 기획, 진행할 때 쓰는 보고서
As-Is / To-Be
→ 지금은 이렇고 나중엔 이렇게 될 것이다
As-Is
웹사이트 파일 유뮤 → No→ 보안전문가 수동 분석
To-Be
웹사이트 파일 유뮤 → No→ AI 학습기반 악성사이트 분석
파일이 없는 악성 사이트에 대해 AI기반 분석 환경 개발로 탐지 가능
웹 트래픽의 주요 Feature를 AI가 학습한 결과 !
보통 기업에서 반절은 수동, 반절은 AI
결국 사람이 만든 데이터로 트레이닝을 함
인간의 지식이 필수인.. 사람이 잘못 분류하면 문제가 생김
recall, precision이 중요한 지표
내가 예측한게 맞는지, 실제 악성사이트중 내가 맞춘것...
실제 raw data에서는 목적을 가지고 바라봐야 'label'
실제론 악성사이트와 관련된 피쳐들이 많네..? 한번 볼까...?
이번 프로젝트를 진행하면서 느낀점을 써보자면....
처음 캐글이라는 사이트를 통해 머신러닝 순위 경쟁을 했다.
하루라는 짧은 시간동안 데이터 전처리, 모델링, 결과물 제출까지 이루어졌다.
대회 test데이터는 상당히 많은 결측치가 존재했는데 발표시간에 다른 팀들을 보니 이걸 어떻게 해결하는지가 중요한 것 같았다.
대부분의 팀이 KNN Imputer로 결측치를 처리했는데, 단순히 배운걸로만 적용했던 나에게는 많은 생각을 하게 만들었던.....^^
짧은 시간동안 많은 것을 해야했기 때문에 팀원들에게 의존할 수 밖에 없었다. 생각하지 못한 부분에서 더 좋은 결과물을 낼 수 있도록 만들어줘서 소중한 경험이었다.
KNNImputer
: 고유한 n_neighbors 값을 knn알고리즘의 일반적인 값으로 정의
imputer = KNNImputer(n_neighbors=2)
data_filled = imputer.fit_transform(data)
이 임퓨터를 데이터에 적용을 하면 머신러닝이 디테일하게 계산한 것처러 결측치 기준으로 두 이웃값의 근사값으로 채워진 것을 확인할 수 있음
결측치에 데이터의 평균 또는 중간 값을 사용하는 것만큼 간단하지만 단순 평균을 사용하는 것보다 효과적이고 정확하다는 것!
+
AutoML (Automated Machine Learning)
: 자동화된 기계 학습으로, 데이터 전처리, 모델링, 하이퍼파라미터 튜닝 등 여러 단계의 머신러닝 프로세스를 자동화한 것
AutoML 라이브러리 중, PyCaret 라이브러리
!pip install pycaret
→ PyCaret을 설치하고
from pycaret.classification import *
→ target 값의 형태에 따라 분류 모델을 적용해야 하므로 classification 입력
PyCaret의 메인 compare_models()
→ 코드 한 줄이면 모든 분류 모델들의 Accuracy, AUC, Recall 등을 평가하여 비교해줌
tune_model() 코드를 실행하면 자동으로 하이퍼 파라미터를 튜닝하여 평가 결과를 출력
PyCaret은 모델링을 진행하기에 앞서 적합한 모델을 탐색하는 용도로 매우 적합!
AUTOML
https://github.com/mljar/mljar-supervised
GitHub - mljar/mljar-supervised: Python package for AutoML on Tabular Data with Feature Engineering, Hyper-Parameters Tuning, Ex
Python package for AutoML on Tabular Data with Feature Engineering, Hyper-Parameters Tuning, Explanations and Automatic Documentation - GitHub - mljar/mljar-supervised: Python package for AutoML on...
github.com
+
Catboost
기존에 존재하던 부스팅 모델들인 XGBoost, Light GBM 등을 능가하는 새로운 머신러닝 기법
범주형(categorical) feature를 처리하는데 중점을 둔 알고리즘
데이터 분석과 전처리 과정에서
train.hist(bins=10, grid=True, figsize=(20,20))
plt.show()

코드 하나로 이렇게 변수들의 히스토그램을 한눈에 볼 수 있음 !
왜도
: 데이터를 평가할 때 데이터 내 값의 분포를 설명하기 위해 가장 기본적으로 사용되는 통계치
왜도의 수치적 표현 : psych::skew()
전체적인 분포가 보인다면 얼마나 치우친 데이터인지를 확인해야 할 것이다. 이를 위해서는 psych패키지에서 제공하는 skew()를 사용한다. skew()의 결과는 부호와 절대값의 두 가지 관점에서 해석해야 한다.
skew()의 결과는 수치로 표현되다. 왜도 값이 음수이면 데이터가 음의 방향, 왼쪽으로 치우친 것이고 왜도 값이 양수이면 데이터가 양의 방향, 오른쪽으로 치우친 것이다.
왜도의 절대값은 데이터가 얼마나 왜곡되었는지를 나타낸다. 왜도 값이 0이면 데이터가 완벽하게 대칭을 이룬다. 그러나 실세계의 데이터에서는 왜도가 0인 데이터는 거의 볼 수 없다.
train.skew()

왜도 매우 큼..
train.describe(include='all')
데이터 프레임 한번에 기초통계량 확인 가능
'mini project' 카테고리의 다른 글
| 네 번째 미니프로젝트 - 1대1 문의 내용 유형 분류기 (0) | 2023.05.06 |
|---|---|
| 세 번째 미니프로젝트 - 저시력자를 위한 원화 화폐 분류 (0) | 2023.05.06 |
| 다섯 번째 미니 프로젝트 - 스마트폰 센서 데이터 기반 모션 분류 (0) | 2023.04.14 |
| 세 번째 미니프로젝트 - 차량 공유업체의 차량 파손여부 분류 (0) | 2023.03.22 |
| 두 번째 미니 프로젝트 - 미세먼지 예측 머신러닝 모델링 (0) | 2023.03.07 |