Skip to content

jihochang03/EmailSnuClassifier

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

스팸메일 탐지기

이 프로젝트는 머신러닝 기술과 Gmail API를 활용하여 이메일을 "스팸"과 "비스팸"으로 자동 분류하는 시스템을 구축하는 것입니다. 시스템은 수신되는 이메일을 실시간으로 모니터링하고, 발신자와 제목을 기반으로 분류한 후 중요한 이메일에 대한 알림을 전송하여 스팸을 필터링합니다. 이 프로젝트는 수동 이메일 정렬 작업을 줄이고 생산성을 높이며, 대량의 이메일을 효율적으로 관리하기 위해 개발되었습니다.

프로젝트 개요

주요 기능:

  1. 이메일 수집:

    • Gmail API를 통해 사용자의 받은 편지함에서 이메일을 가져옵니다.
    • 발신자, 이메일 주소, 제목 등의 주요 정보를 추출합니다.
  2. 데이터 전처리:

    • "Sender"와 "Subject" 필드의 결측값을 빈 문자열로 대체하여 처리합니다.
    • 발신자와 제목을 결합해 모델 입력용 텍스트 필드를 생성합니다.
  3. 머신러닝 모델:

    • 텍스트 분류에 적합한 다항 나이브 베이즈(Multinomial Naive Bayes) 알고리즘을 사용합니다.
    • TF-IDF 벡터화를 사용하여 이메일 텍스트 데이터를 효과적으로 특징 추출한 후 모델을 학습합니다.
    • 스팸과 비스팸에 대해 높은 정밀도와 재현율을 제공하며 약 95%의 정확도를 달성합니다.
  4. 자동 분류 및 알림:

    • 학습된 모델을 사용하여 새로 수신된 이메일을 실시간으로 분류합니다.
    • 이메일이 비스팸으로 분류된 경우 사용자에게 알림을 Gmail로 전송합니다.
    • 처리된 이메일은 자동으로 "읽음"으로 표시됩니다.
  5. 스케줄링을 통한 자동화:

    • schedule 라이브러리를 사용하여 분류 체크를 정기적으로(매 1분마다) 실행하여 이메일 모니터링을 자동화합니다.

파일 구조

  • email_snu.csv: Sender, Email, Subject, Label(스팸/비스팸) 필드가 포함된 샘플 데이터셋.
  • emailClassifierModel.joblibtfidfVectorizer.joblib: 새로운 이메일을 재학습 없이 분류하기 위해 저장된 모델과 벡터화기.
  • credentials.jsontoken.json: Gmail API에 접근하기 위한 인증 파일.
  • 파이썬 스크립트:
    • loadData(): 데이터셋을 로드하고 전처리합니다.
    • trainModel(): 나이브 베이즈 모델을 학습하고 저장합니다.
    • gmailAuthenticate(): OAuth2로 Gmail API 인증을 수행합니다.
    • checkEmail(): 받은 편지함에서 새로운 이메일을 확인하고, 분류 후 알림을 전송합니다.
    • sendNotification(): 분류된 이메일에 대해 사용자에게 알림 이메일을 전송합니다.

설정 가이드

사전 요구사항:

  • Python 3.x 및 필수 라이브러리: pip install -r requirements.txt로 설치.
  • Gmail API 접근: Gmail API 인증 설정 필요.
  • 환경 변수 설정: EMAIL_PASSWORD에 Gmail 계정의 비밀번호 설정.

초기 설정:

  1. 레포지토리 클론:

    git clone https://github.com/jihochang03/EmailSnuClassifier.git
    cd EmailSnuClassifier
  2. 필요한 패키지 설치:

    pip install -r requirements.txt
  3. Gmail API 설정:

    • Google Cloud Console에서 credentials.json 파일을 가져옵니다.
    • 프로젝트 디렉토리에 credentials.json 파일을 배치합니다.
  4. 스크립트 실행:

    • 첫 실행 시 모델 파일이 없는 경우 email_snu.csv로 모델을 학습합니다.
    • 이후 스크립트가 새로운 이메일을 모니터링하고 분류를 수행합니다.
    python main.py

email_snu.csv 예제 데이터

발신자 이메일 주소 제목 라벨
미술관 [email protected] [서울대학교미술관] 디지털아트 세미나 - 공존을 향한 여정 스팸
SNU공학컨설팅센터 [email protected] [SNU아산유니버시티]2024 기후기술창업혁신대전 개최 안내_카드뉴스 스팸
창업지원단(홍보) [email protected] [벤처투자학회 SNAAC] 스타트업의 위대한 여정에 합류하세요. 스팸
법이론연구센터 [email protected] [학술] 춤의 역사와 현재를 통해 살핀 합법성, 정당성, 접근성 스팸
에너지신산업 혁신융합대학사업단 [email protected] [행사] 'Energy Up! 에너지신산업 해외 연수 대만' 참가자 모집 스팸

사용 방법

  1. 실시간 이메일 모니터링:

    • 스크립트는 Gmail 받은 편지함에서 매 1분마다 새로운 읽지 않은 이메일을 확인합니다.
    • 학습된 나이브 베이즈 모델을 사용해 각 이메일을 분류합니다.
    • 이메일을 읽음으로 표시하며, 비스팸으로 분류된 경우 사용자에게 알림을 보냅니다.
  2. 알림:

    • 비스팸 이메일은 이메일의 세부 정보와 함께 사용자에게 알림을 보냅니다.
    • Gmail의 SMTP 서버를 통해 알림을 전송합니다.

모델 성능

  • 정확도: 약 95%

  • 분류 보고서:

    클래스 정밀도(Precision) 재현율(Recall) F1-스코어(F1-score)
    스팸 0.96 0.93 0.94
    비스팸 0.94 0.96 0.95
  • 혼동 행렬:

    예측 스팸 예측 비스팸
    실제 스팸 548 28
    실제 비스팸 18 82

향후 개선 사항

  1. 고급 모델: SVM 또는 신경망과 같은 더 고급 모델을 사용해 정확도를 향상시키는 것을 고려합니다.
  2. 데이터 라벨링 강화: 스팸 탐지 성능을 개선하기 위해 더 많은 라벨링된 데이터를 수집합니다.
  3. 다중 사용자 지원: 여러 사용자가 개인화된 스팸 규칙과 알림 설정을 사용할 수 있도록 시스템을 확장합니다.

라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다.


이 시스템을 통해 사용자는 이메일을 효과적으로 관리할 수 있으며, 스팸과 중요한 이메일을 분류하여 생산성과 중요한 커뮤니케이션에 집중할 수 있습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages