Elektron pochta bugungi dunyoda aloqa uchun muhim vositadir; ammo, spam elektron pochta katta muammo sifatida paydo bo'ldi. Noma'lum manbalardan kelgan bu kiruvchi xabarlar ko'pincha kirish qutilarini to'ldiradi va aloqa va samaradorlikni buzadi. Ushbu maqola elektron pochta xabarlarini "spam" yoki "ham" (spam bo'lmagan) sifatida tasniflash uchun turli xil mashina o'rganish usullaridan foydalanishni o'rganadi.
K-Yaqin qo'shnilar (KNN), Logistik regressiya, Yordam vektor mashinalari (SVM) va Naïve Bayes kabi tasniflash modellari baholanadi, ularning elektron pochta tasnifidagi samaradorligi taqqoslanadi. Har bir modelning ishlashi aniqlik, aniqlik, eslab qolish va F1 balli kabi ko'rsatkichlar asosida baholanadi, bu vazifa uchun qaysi yondashuv eng mos kelishini aniqlash uchun.
2023-yilda har kuni 347,3 milliard elektron xat yuboriladi, ulardan spam xatlar barcha elektron pochta trafigining 45 foizini tashkil qiladi. Ushbu elektron pochta spamlari har yili korxonalarga 20,5 milliard dollarga tushadi. Buni hisobga olsak, har doim spamning to'g'ri tasniflanganligini va qonuniy elektron pochta trafigiga xalaqit bermasligini ta'minlash kerak bo'ladi. Bu mashinani o'rganish imkoniyatlari va qo'llanilishini tushunishning foydali usuli.
Spam aniqlanganda, elektron pochta bilan tanish bo'lgan foydalanuvchi spamni deyarli darhol ko'rib chiqishi bilan osongina aniqlashi mumkin. Natijada, bu ish spamni aniqlash mashinani o'rganish tasniflagichi uchun foydali dastur ekanligini tasdiqlaydi, deb o'ylayman. Elektron pochtani spam yoki jambon sifatida tasniflash uchun juda ko'p dastlabki ishlov berish bosqichlari mavjud - ma'lumotlarni chiziqli klassifikator uchun maqbul bo'lish uchun tayyorlash, so'ngra TF-IDF (muddat chastotasi - teskari hujjat chastotasi) jadvaliga aylantirish uchun har bir qatorni tokenlash va ajratish.
Asosiy model sifatida K=3 bo'lgan KNN tanlangan. L1 tartibga solish bilan logistik regressiya, Naïve Bayes modeli va SVM modellari ham eng yaxshi modelni tanlashdan oldin sinovdan o'tkazildi. Ushbu loyihani amalga oshirish uchun 2551 ta "ham" elektron pochta fayli va 501 spam elektron pochta fayliga ega bo'lgan Kaggle ma'lumotlar to'plamidan foydalanilgan va modellashtirish R dasturlash tili yordamida amalga oshirilgan.
Quyidagi diagramma keyingi bosqichlarning borishini tushunishga yordam beradi -
Oldindan ishlov berish bosqichlari
Katta hajmdagi matnli ma'lumotlardan foydalanilayotganligini hisobga olib, ma'lumotlarni tozalash va tasniflash modellari tomonidan qo'llanilishi mumkin bo'lgan formatga o'tkazish uchun ularni oldindan qayta ishlash zarurati tug'ildi. Quyida ma'lumotlarni oldindan qayta ishlashning bir qismi sifatida amalga oshirilgan bosqichma-bosqich jarayon tushuntiriladi -
Matn ma'lumotlari chiziqli tasniflagich uchun maqbul bo'lishi kerak. Bu shuni anglatadiki, ma'lumotlar to'plami matn xususiyatlarini ajratib olish usullaridan foydalangan holda raqamli xususiyatlarga aylantirilishi kerak.
Birinchidan, matnning har bir satri tokenlashtiriladi va quyidagi shaklga asoslanadi. O‘zaklash jarayoni egilgan qo‘shimchalarni olib tashlash orqali so‘zlarni qisqartiradi. Masalan, quyidagi misolda ishchilar ishchiga aylanadi.
Keyinchalik, tokenlashtirilgan ma'lumotlar TF-IDF jadvaliga aylantiriladi (Term chastotasi - Teskari hujjat chastotasi). TF-IDF matn tahliliga yondashuv boʻlib, hujjatdagi har bir n-grammni uning chastota-teskari hujjat chastotasi atamasi boʻyicha ifodalaydi. Term chastotasi oddiygina hujjatdagi berilgan atamaning chastotasi (bu holda elektron pochta). Teskari hujjat chastotasi odatda quyidagicha ifodalanadi:
jurnali ((Hujjatlar umumiy soni/Muddati boʻlgan hujjatlar soni)
Bu juda tez-tez va shuning uchun unchalik muhim bo'lmagan atamalardan ko'ra muhim atamalarni tortish uchun xizmat qiladi.
Bu o'quv ma'lumotlar to'plamida jami 1130 atamani beradi.
Shuni ta'kidlash kerakki, TF-IDF-dan test to'plami bilan foydalanish strategiyasi faqat TF-IDF o'qitish bo'yicha namunaviy treningni amalga oshirish va keyin TF-IDFni test aniqligi uchun to'liq ma'lumotlar bilan qayta hisoblashdan iborat bo'ladi. Bu talab qilinadi, chunki TF-IDF ma'lum bir muddatning butun ma'lumotlar to'plamidagi chastotaga bog'liq, shuningdek, mashg'ulot paytida test ma'lumotlarini kiritmaslik kerak.
Nihoyat, mashg'ulotlar to'plamida umumiy muddatlar chastotasi bo'yicha faqat eng yaxshi 1000 ta atama tanlanadi.
Oldindan ishlov berish bosqichlari uchun kod -
#tokenize word_tokens <- complete_tbl %>% unnest_tokens(word,content) #stemming word_tokens<-word_tokens %>% mutate(word_stem=SnowballC::wordStem(word)) #remove any words with numbers word_tokens <- word_tokens[-grep('^\\d+$', word_tokens$word_stem),] #remove any words with . word_tokens <- word_tokens[-grep('[.]', word_tokens$word_stem),] #remove any single character words word_tokens <- word_tokens[-grep('.\\b[az]\\b.', word_tokens$word_stem),] #remove tokens which match stop words word_tokens <- word_tokens %>% filter(!word %in% stopWords) word_tokens <- word_tokens %>% filter(!word_stem %in% stopWords) #split into training and test word_tokens_train <- word_tokens %>% filter(document %in% ind) #create tfidf for training and then a complete tfidf for testing tfidf_train<-word_tokens_train %>% count(document,word_stem,sort=TRUE) %>% bind_tf_idf(word_stem,document,n) tfidf_complete<-word_tokens %>% count(document,word_stem,sort=TRUE) %>% bind_tf_idf(word_stem,document,n)
Ishlatilgan modellar
Model o'rtacha o'ziga xoslikka erishadi, lekin juda zaif sezuvchanlik, ya'ni ko'plab jambonlar spam sifatida noto'g'ri taxmin qilinadi. E'tibor bering, quyidagi natijalarning har birida ijobiy sinf "jambon"dir. Bu haqiqatan ham foydalanuvchi uchun mumkin bo'lgan eng yomon natijadir, chunki ular spam deb tasniflangan ko'plab haqiqiy elektron pochta xabarlarini o'tkazib yuborishadi.
KNN modeli uchun kod -
##train a model library(e1071) library(caret) library(class) library(LiblineaR) ##remove document number since this is indicative of spam or ham wide_feat_train<-subset(wide_feat_train, select=-c(document)) wide_feat_test<-subset(wide_feat_test,select=-c(document)) #Base model is a knn attempt knn_pred<-knn(train=wide_feat_train,test=wide_feat_test,cl=labels_train$label,k=3) knn_results<-confusionMatrix(knn_pred,labels_test$label) knn_results knn_results$byClass["F1"] knn_results$byClass["Precision"] knn_results$byClass["Recall"]
KNN modelidan yomon natijalarga erishgandan so'ng, Logistic Regression keyingi model ishlatilgan.
Ushbu stsenariyning maqsadi uchun,
Logistik regressiya quyidagi giperparametrlar bilan qo'llanilgan:
Ushbu model sinov ma'lumotlar to'plamida quyidagi natijalarni beradi, bu allaqachon KNN modelida sezilarli yaxshilanishdir. Umumiy aniqlik ancha yuqori, ammo o'ziga xoslik shuni ko'rsatadiki, hali ham yaxshilanish uchun joy bor. Ushbu model foydalanuvchisi bir nechta Hams Spam sifatida taxmin qilinayotganini topadi.
Logistik regressiya modeli uchun kod -
#Next is a logistic regression usin the below hyperparameters grid_logit <- expand.grid(loss="L1",cost=2,epsilon=0.1) lr <- train(x=wide_feat_train,y=labels_train$label,method="regLogistic",tuneGrid=grid_logit) lr_results<-confusionMatrix(as.factor(predict(lr,wide_feat_test)),labels_test$label) lr_results p_lr = predict(lr,wide_feat_test) prednum_lr<-ifelse(p_lr=="spam",0,1) roc_lr<-roc(labels_test$label,prednum_lr) plot(roc_lr) roc_lr$auc p1_lr<- prediction(as.numeric(p_lr),as.numeric(labels_test$label)) pr_lr <- performance(p1_lr, "prec", "rec") plot(pr_lr) lr_results$byClass["F1"] lr_results$byClass["Precision"] lr_results$byClass["Recall"]
Sinab ko'rilgan keyingi model Naive Bayes modeli edi. Ushbu model uchun besh tomonlama yondashuv bilan optimal giperparametrlarni topish uchun o'zaro tekshirish amalga oshirildi. Bu Naive-Bayes uchun quyidagi parametrlarga olib keladi -
Ushbu model, shuningdek, o'ziga xoslik va sezgirlik bo'yicha ham yaxshi natijalarga erishadi.
Naive Bayes modeli uchun kod -
##naive bayes main model nb_cv <- train( x=wide_feat_train, y=labels_train$label, method = "naive_bayes", trControl = train_control, tuneGrid = grid ) nb <- naiveBayes(wide_feat_train,labels_train$label,adjust=1,laplace=0,usekernel=FALSE) nb_results<-confusionMatrix(as.factor(predict(nb,wide_feat_test)),labels_test$label) nb_results p = predict(nb,wide_feat_test) prednum<-ifelse(p=="spam",0,1) roc_nb<-roc(labels_test$label,prednum) plot(roc_nb) roc_nb$auc p1<- prediction(as.numeric(p),as.numeric(labels_test$label)) pr <- performance(p1, "prec", "rec") plot(pr) nb_results$byClass["F1"] nb_results$byClass["Precision"] nb_results$byClass["Recall"]
4. Vektor mashinasini (SVM) qo'llab-quvvatlash
Yakuniy model chiziqli yadroga ega bo'lgan SVM o'zaro tekshiruvidir. Yordam vektor mashinalari ma'lumotlarni ikki sinf o'rtasida ajratish uchun maksimal ajratuvchi giperplanni optimal tarzda topishga harakat qiladi.
Bu yerda optimal giperparametrlarni aniqlash uchun R kutubxonasi karetasi yordamida 5-qavatli CV bajariladi. Ushbu giperparametrlar quyida ko'rsatilgan -
To'xtatilgan test ma'lumotlar to'plamiga qo'llanganda ushbu modelning natijalari quyida ko'rsatilgan -
SVM uchun kod -
#svm train_control <- trainControl( method = "cv", number = 5 ) svm <- train(x=wide_feat_train,y=labels_train$label,method="svmLinearWeights2",trControl=train_control) svm$bestTune svm_results<-confusionMatrix(as.factor(predict(svm,wide_feat_test)),labels_test$label) svm_results p_svm = predict(svm,wide_feat_test) prednum_svm<-ifelse(p_svm=="spam",0,1) roc_svm<-roc(labels_test$label,prednum_svm) plot(roc_svm,colorize=T,lwd=3, main=" ROC curve for SVM model") roc_svm$auc p1_svm<- prediction(as.numeric(p_svm),as.numeric(labels_test$label)) pr <- performance(p1_svm, "prec", "rec") plot(pr) svm_results$byClass["F1"] svm_results$byClass["Precision"] svm_results$byClass["Recall"]
Quyidagi jadvalda eng yaxshi modelni tanlash uchun ko'rib chiqilgan chora-tadbirlar jamlangan.
Model | Aniqlik | F1 ball | Aniqlik | Eslab qoling |
---|---|---|---|---|
KNN | 0,252 | 0,2293 | 0,8947 | 0,1315 |
Logistik regressiya | 0,9624 | 0,9781 | 0,9591 | 0,998 |
Naif Bayes | 0,9722 | 0,9834 | 0,9882 | 0,9787 |
SVM | 0,9885 | 0,9932 | 0,9886 | 1 |
Yuqoridagi jadvaldan ko'rinib turibdiki, SVM boshqa modellarga nisbatan eng yaxshi ishlaydi.
Keyinchalik tasdiqlash uchun ROC egri chiziqlari chizilgan va AUC qiymatlari hisoblab chiqilgan.
Model | KNN | Logistik regressiya | Naif Bayes | SVM |
---|---|---|---|---|
AUC | .5232 | .882 | .9574 | .9628 |
Rasm: 4 ta model uchun AUC qiymatlari
Yuqoridagi ko'rsatkichlardan xulosa qilish mumkinki, 5 marta o'zaro tekshirishga ega SVM elektron pochta xabarlarini jambon va spam sifatida tasniflashda ma'lumotlar to'plamida eng yaxshi ishlaydi.
Spamni filtrlash har doim uzluksiz evolyutsiyaga ega bo'lgan soha bo'lib qoladi, chunki spamerlar doimiy ravishda Spam xabarlarni yuborishning yangi va innovatsion usullarini topadilar. Spamga qarshi yagona yechim to'g'ri bo'lishi mumkin emas. Ushbu loyihada mashinani o'rganish vositalaridan ba'zilari Ham va Spam elektron pochta xabarlari uchun tasniflagich sifatida qanday ishlashini ko'rish uchun ishlatilgan. Hisob-kitoblarning tavsiflari, shuningdek, ularning ko'rsatkichlarini taqqoslash taqdim etiladi.
Sinovdan o'tgan to'rtta mashinani o'rganish modellaridan SVM ishlash jihatidan eng yaxshisi deb topildi. Logistic Regression va Naïve Bayes modellari ham istiqbolli natijalarni ko'rsatadi.