이 프로젝트는 머신러닝 기술과 Gmail API를 활용하여 이메일을 "스팸"과 "비스팸"으로 자동 분류하는 시스템을 구축하는 것입니다. 시스템은 수신되는 이메일을 실시간으로 모니터링하고, 발신자와 제목을 기반으로 분류한 후 중요한 이메일에 대한 알림을 전송하여 스팸을 필터링합니다. 이 프로젝트는 수동 이메일 정렬 작업을 줄이고 생산성을 높이며, 대량의 이메일을 효율적으로 관리하기 위해 개발되었습니다.
-
이메일 수집:
- Gmail API를 통해 사용자의 받은 편지함에서 이메일을 가져옵니다.
- 발신자, 이메일 주소, 제목 등의 주요 정보를 추출합니다.
-
데이터 전처리:
- "Sender"와 "Subject" 필드의 결측값을 빈 문자열로 대체하여 처리합니다.
- 발신자와 제목을 결합해 모델 입력용 텍스트 필드를 생성합니다.
-
머신러닝 모델:
- 텍스트 분류에 적합한 다항 나이브 베이즈(Multinomial Naive Bayes) 알고리즘을 사용합니다.
- TF-IDF 벡터화를 사용하여 이메일 텍스트 데이터를 효과적으로 특징 추출한 후 모델을 학습합니다.
- 스팸과 비스팸에 대해 높은 정밀도와 재현율을 제공하며 약 95%의 정확도를 달성합니다.
-
자동 분류 및 알림:
- 학습된 모델을 사용하여 새로 수신된 이메일을 실시간으로 분류합니다.
- 이메일이 비스팸으로 분류된 경우 사용자에게 알림을 Gmail로 전송합니다.
- 처리된 이메일은 자동으로 "읽음"으로 표시됩니다.
-
스케줄링을 통한 자동화:
schedule라이브러리를 사용하여 분류 체크를 정기적으로(매 1분마다) 실행하여 이메일 모니터링을 자동화합니다.
email_snu.csv:Sender,Email,Subject,Label(스팸/비스팸) 필드가 포함된 샘플 데이터셋.emailClassifierModel.joblib및tfidfVectorizer.joblib: 새로운 이메일을 재학습 없이 분류하기 위해 저장된 모델과 벡터화기.credentials.json및token.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 계정의 비밀번호 설정.
-
레포지토리 클론:
git clone https://github.com/jihochang03/EmailSnuClassifier.git cd EmailSnuClassifier -
필요한 패키지 설치:
pip install -r requirements.txt
-
Gmail API 설정:
- Google Cloud Console에서
credentials.json파일을 가져옵니다. - 프로젝트 디렉토리에
credentials.json파일을 배치합니다.
- Google Cloud Console에서
-
스크립트 실행:
- 첫 실행 시 모델 파일이 없는 경우
email_snu.csv로 모델을 학습합니다. - 이후 스크립트가 새로운 이메일을 모니터링하고 분류를 수행합니다.
python main.py
- 첫 실행 시 모델 파일이 없는 경우
| 발신자 | 이메일 주소 | 제목 | 라벨 |
|---|---|---|---|
| 미술관 | [email protected] | [서울대학교미술관] 디지털아트 세미나 - 공존을 향한 여정 | 스팸 |
| SNU공학컨설팅센터 | [email protected] | [SNU아산유니버시티]2024 기후기술창업혁신대전 개최 안내_카드뉴스 | 스팸 |
| 창업지원단(홍보) | [email protected] | [벤처투자학회 SNAAC] 스타트업의 위대한 여정에 합류하세요. | 스팸 |
| 법이론연구센터 | [email protected] | [학술] 춤의 역사와 현재를 통해 살핀 합법성, 정당성, 접근성 | 스팸 |
| 에너지신산업 혁신융합대학사업단 | [email protected] | [행사] 'Energy Up! 에너지신산업 해외 연수 대만' 참가자 모집 | 스팸 |
-
실시간 이메일 모니터링:
- 스크립트는 Gmail 받은 편지함에서 매 1분마다 새로운 읽지 않은 이메일을 확인합니다.
- 학습된 나이브 베이즈 모델을 사용해 각 이메일을 분류합니다.
- 이메일을 읽음으로 표시하며, 비스팸으로 분류된 경우 사용자에게 알림을 보냅니다.
-
알림:
- 비스팸 이메일은 이메일의 세부 정보와 함께 사용자에게 알림을 보냅니다.
- Gmail의 SMTP 서버를 통해 알림을 전송합니다.
-
정확도: 약 95%
-
분류 보고서:
클래스 정밀도(Precision) 재현율(Recall) F1-스코어(F1-score) 스팸 0.96 0.93 0.94 비스팸 0.94 0.96 0.95 -
혼동 행렬:
예측 스팸 예측 비스팸 실제 스팸 548 28 실제 비스팸 18 82
- 고급 모델: SVM 또는 신경망과 같은 더 고급 모델을 사용해 정확도를 향상시키는 것을 고려합니다.
- 데이터 라벨링 강화: 스팸 탐지 성능을 개선하기 위해 더 많은 라벨링된 데이터를 수집합니다.
- 다중 사용자 지원: 여러 사용자가 개인화된 스팸 규칙과 알림 설정을 사용할 수 있도록 시스템을 확장합니다.
이 프로젝트는 MIT 라이선스 하에 배포됩니다.
이 시스템을 통해 사용자는 이메일을 효과적으로 관리할 수 있으며, 스팸과 중요한 이메일을 분류하여 생산성과 중요한 커뮤니케이션에 집중할 수 있습니다.