paint-brush
Xom va spam: Spam elektron pochtani qanday aniqlash va tasniflash mumkintomonidan@ramakadapala
Yangi tarix

Xom va spam: Spam elektron pochtani qanday aniqlash va tasniflash mumkin

tomonidan Rama7m2025/03/08
Read on Terminal Reader

Juda uzoq; O'qish

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.
featured image - Xom va spam: Spam elektron pochtani qanday aniqlash va tasniflash mumkin
Rama HackerNoon profile picture

Abstrakt

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.

Kirish

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.

Jambon so'zlarining yaqindan ko'rinishiSpam so'zlarning yaqindan ko'rinishi Metodologiya kuzatildi

Quyidagi diagramma keyingi bosqichlarning borishini tushunishga yordam beradi -

Loyiha bosqichlarini ko'rsatadigan rasm

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.

    So'zlar va ularning o'zak so'zlari

  • 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.

  • Keyinchalik, shartlar hujjatlarning kamida 2 foizida, lekin hujjatlarning 95 foizidan ko'p bo'lmagan shartlarini tanlash orqali qisqartiriladi. Ushbu jarayon o'quv majmuasida juda noyob yoki juda keng tarqalgan atamalarni olib tashlash orqali ortiqcha moslashishni oldini oladi.


  • 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.


tf-idf jadvali

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

  1. K-Eng yaqin qo'shnilar (KNN) - asosiy model

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.


K=3 bo'lgan KNN uchun chalkashlik matritsasi
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"]
  1. Logistik regressiya

KNN modelidan yomon natijalarga erishgandan so'ng, Logistic Regression keyingi model ishlatilgan.


Ushbu stsenariyning maqsadi uchun,

Jambon va spam elektron pochta uchun imkoniyat formulalari

Logistik regressiya quyidagi giperparametrlar bilan qo'llanilgan:

  • yo'qotish = "L1"
  • xarajat = 2
  • epsilon = 0,1


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 uchun chalkashlik matritsasi 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"]
  1. Naif Bayes modeli

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 -


  • laplas = 0
  • userkernel = FALSE
  • sozlash = 1


Ushbu model, shuningdek, o'ziga xoslik va sezgirlik bo'yicha ham yaxshi natijalarga erishadi.

Naif Bayes modeli uchun chalkashlik matritsasi 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 -

  • xarajat = 1
  • yo'qotish = L2
  • vazn = 3


To'xtatilgan test ma'lumotlar to'plamiga qo'llanganda ushbu modelning natijalari quyida ko'rsatilgan -

SVM uchun chalkashlik matritsasi

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"]

Natijalar

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.

Xulosa

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.

L O A D I N G
. . . comments & more!

About Author

Rama HackerNoon profile picture
I am a highly accomplished data science and analytics professional with over 11 years of expertise in financial services

TEGI QILISH

USHBU MAQOLA TAQDIM ETILGAN...