선릉역 1번 출구

[adventofcyber2023] - Day_15_Machine learning Jingle Bell SPAM: Machine Learning Saves the Day! 본문

Project/Program

[adventofcyber2023] - Day_15_Machine learning Jingle Bell SPAM: Machine Learning Saves the Day!

choideu 2023. 12. 17. 09:59

Story: 지난 몇주 동안 best festival company 직원들은 많은 스팸을 받아, 기존 스팸 탐지기를 고쳐 스팸 메일을 막으려고 한다.

 

목표: machine learning pipeline의 다양한 단계 이해, machine learning 분류 및 학습 모델, 데이터 세트를 훈련 데이터와 테스트 데이터로 분할하기

 

1. Jupyter Notebook

- 실시간으로 코드를 실행하므로 데이터 분석, 기계 학습 및 과학 연구에 사용됨

 

2. 머신러닝 파이프라인

- ML 모델 구축 및 배포와 관련된 일련의 단계를 의미

- 해당 단계를 통해 데이터가 원시 형식에서 예측 및 통찰력으로 효율적으로 흐름

  • Ingestion > Cleaning > Preprocessing > Modeling Deployment

1) 필수 라이브러리 가져오기

import numpy as np
import pandas as pd

2) 데이터 수집

- 머신러닝에 사용할 raw 데이터를 다양한 소스에서 수집하는 프로세스

- Pandas를 통해 다양한 소스에서 수집된 데이터를 로드함 csv 형식임

data = pd.read_csv("emails_dataset.csv")

3) 데이터 세트 테스트 및 확인

print(data.head())

4) DataFrame은 직관적이고 읽기 쉬운 구조화된 표 형식의 데이터 표현을 제공함

- 아래 명령을 사용하여 pandas 라이브러리를 사용하여 데이터를 프레임으로 변환

df = pd.DataFrame(data)
print(df)

5) 데이터 전처리

- 원시 데이터를 기계 학습에 적합한 구조화된 형식으로 변환하는 데 사용되는 기술

기술 설명
cleaning 오류를 수정 / 누락된 값 채우기/ 노이즈 완화 / 이상값 처리
normalization 숫자 데이터를 균일한 범위로 스케일링
standardization 평균, 표준 편차 데이터 크기 조정
feature extraction 텍스트, 이미지 등 임의의 데이터를 숫자로 변환 특징
dimenstionality reduction 주 변수 집합을 구해 고려 중인 변수의 수를 줄임
discretization 연속형 변수를 이산형 변수로 변환
text preprocessing 토큰화, 형태소 분석, 표 제어 추출
imputation 결측값을 평균, 중위수, 최빈값 또는 상수와 같은 통계적 값으로 대체
feature engineering 새로운 기능을 생성하거나 기존 기능을 수정하여 모델 개선

 

6) CountVectorizer() 활용

- 머신러닝 모델은 텍스트가 아닌 숫자를 이해하므로, 텍스트를 숫자 형식으로 변환해야함

- python sciket-learn 라이브러리에서 제공하는 CountVectorizer 클래스를 활용하여 텍스트를 토큰 개수 행렬로 변환하여 수행

from sklearn.feature_extraction.text import CountVectorizer

7) 데이터 세트 분할(train, test)

from sklearn.model_selection import train_test_split

8) model training

모델 설명
나이브 베이즈 분류기 특징 사이의 독립성을 가정한 베이즈 정리에 기반한 확률적 분류기, 고차원 텍스트 데이터에 적합
SVM 특징 공간에서 서로 다른 클래스를 분리할 수 있는 최적의 초평면을 찾는 분류기로 커널 함수와 함께 사용할 경우 비선형 및 고차원 데이터와잘 작동함
로지스틱 회귀 로지스틱 함수를 사용해 이항 종속 변수를 모형화하는 통계 모형
의사결정 트리 결정과 그로 인한 가능한 결과에 대한 트리와 같은 그래프를 사용함
이해하기 쉽지만, 적절한 가지치기가 없으면 overfitting되기 쉬움
랜덤 포레스트 일반적으로 예측 정확도와 과적합 제어를 향사시키기 위해 "배깅" 방법으로 훈련된 의사 결정 트리의 앙상블
GBM 앙상블 학습 방법은 단계별 방식으로 강력한 예측 모델을 구축하는 것으로, 올바르게 조정하면 랜덤 포레스트를 능가하는 것으로 알려짐
K-최근접이웃(KNN) 데이터 포인트가 k개의 가장 가까운 이웃 중에서 가장 일반적인 클래스에 할당된 상태에서 이웃의 다수결을 기준으로 각 데이터 포인틀르 분류하는 방법

9) Naive Bayes를 사용한 모델 훈련

- 특정 확률을 사용하는 통계 방법으로 스팸 및 스팸이 아닌 이메일에 나타나는 단어를 사용해 새로운 이메일이 스팸인지 아닌지 여부를 결정함

- 작동 방식

  • Naive Bayes 알고리즘은 각 이메일의 단어를 살펴보고 스팸/비스팸 이메일에 각 단어가 얼마나 자주 나타나는지 계산함
  • 이메일에 ㅍ포함된 단어를 기반으로 이메일이 스팸일 확률을 계산
  • 예시: "free"는 스팸에서도 흔하게 사용되는 단어로, 스팸 확률이 높아짐
  • 즉 모든 단어를 고려해서 이메일이 스팸 및 햄일 확률을 전반적으로 계산해 스팸 여부를 가림

10) Navie Bayes를 사용해 모델 학습

from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X_train, y_train)

11) 모델 평가

12) 모델 테스트

- 새 메시지를 분류하고 스팸인지 비스팸인지 판단해보기

message = vectorizer.transform(["Today's Offer! Claim ur £150 worth of discount vouchers! Text YES to 85023 now! SavaMob, member offers mobile! T Cs 08717898035. £3.00 Sub. 16 . Unsub reply X "])
prediction = clf.predict(message) 
print("The email is :", prediction[0])

 

+ challenge

 

Comments