paint-brush
ሃም ኣንጻር ስፓም፡ ከመይ ጌርና ስፓም ኢ-መይል ነለልዮን ንመደቦን።@ramakadapala
ሓድሽ ታሪኽ

ሃም ኣንጻር ስፓም፡ ከመይ ጌርና ስፓም ኢ-መይል ነለልዮን ንመደቦን።

Rama7m2025/03/08
Read on Terminal Reader

ኣዝዩ ነዊሕ፤ ንምንባብ

ኣብዚ ፕሮጀክት ገለ ካብቶም ናይ ማሽን ትምህርቲ መሳርሒታት ከም መምደቢ ንሃምን ስፓምን ኢመይላት ከመይ ከም ዝሰርሑ ንምርኣይ ተጠቒሞም። መግለጺታት ናይቲ ስሌታት ከምኡ’ውን ንጽጽር ኣፈጻጽማኦም ቀሪቡ ኣሎ።
featured image - ሃም ኣንጻር ስፓም፡ ከመይ ጌርና ስፓም ኢ-መይል ነለልዮን ንመደቦን።
Rama HackerNoon profile picture

መመላኽዒ

ኢመይል ኣብዚ ናይ ሎሚ ዓለም ንርክብ ኣገዳሲ መሳርሒ እዩ፤ እንተኾነ ግን ስፓም ኢመይላት ከም ዓቢ ብድሆ ተቐልቂሉ ኣሎ። እዞም ካብ ዘይፍለጡ ምንጭታት ዝመጹ ዘይተሓተቱ መልእኽትታት መብዛሕትኡ ግዜ ንኢንቦክስ ብምምላእ ርክብን ኣፍራይነትን ይዘርጉ። እዚ ጽሑፍ እዚ፡ ንኢመይላት ወይ "ስፓም" ወይ "ሃም" (ዘይስፓም) ንምምዳብ ዝተፈላለዩ ሜላታት ትምህርቲ ማሽን ምጥቃም ዝምርምር እዩ።


ከም K-Nearest Neighbors (KNN)፣ Logistic Regression, Support Vector Machines (SVM)፣ Naïve Bayes ዝኣመሰሉ ሞዴላት ምደባ ኣብ ምደባ ኢመይል ዘለዎም ኣድማዕነት ብምንጽጻር ይግምገሙ። ኣፈፃፅማ ነፍሲ ወከፍ ሞዴል ብከም ልክዕነት፣ ትኽክለኛነት፣ ምዝካርን F1 ነጥቢን ዝኣመሰሉ መለክዒታት መሰረት ብምግባር ይግምገም፣ ኣየናይ ኣገባብ ነዚ ዕማም ዝያዳ ዝምችእ ምዃኑ ንምፍላጥ እዩ።

መእተዊ

ኣብ 2023፡ መዓልታዊ 347.3 ቢልዮን ኢመይላት ይለኣኹ፡ ካብዚኦም ስፓም ኢመይላት 45% ካብ ኩሉ ትራፊክ ኢመይላት ይቖሙ። እዞም ናይ ኢመይል ስፓም ንንግዳዊ ትካላት ኣብ ዓመት 20.5 ቢልዮን ዶላር የኽፍሉ። ነዚ ኣብ ግምት ብምእታው፡ ስፓም ብትኽክል ከምዝተመደበን ኣብ ሕጋዊ ትራፊክ ኢመይል ጣልቃ ከምዘይኣቱን ምርግጋጽ ኩሉ ግዜ ኣድላይነት ክህሉ እዩ። እዚ ንዓቕምን ኣተገባብራን ማሽን ትምህርቲ ንምርዳእ ጠቓሚ መንገዲ እዩ።


ኣብ ጉዳይ ምፍላጥ ስፓም፡ ሓደ ምስ ኢመይል ዝፈልጥ ሰብኣዊ ተጠቃሚ፡ ስፓም ምስ ረኣዮ ዳርጋ ብኡንብኡ ብቐሊሉ ክውስኖ ይኽእል። ከም ውጽኢቱ ድማ እዚ ስራሕ እዚ ስፓም ምልላይ ንማሽን ትምህርቲ ምደባ ጠቓሚ መተግበሪ ምዃኑ ዘረጋግጽ እዩ ዝብል እምነት ኣለኒ። ንሓደ ኢመይል ከም ስፓም ወይ ሃም ንምምዳብ፡ ብዙሕ ቅድመ-መስርሕ ስጉምትታት ይሓትት - ነቲ ዳታ ንመስመራዊ ምደባ ቅቡል ንኽኸውን ምድላው፡ ድሕሪኡ ንነፍሲ ወከፍ መስመር ቶከናይዝ ምግባርን ስቴሚንግን ናብ TF-IDF (Term Frequency – Inverse Document Frequency) ሰሌዳ ንምቕያር።


K=3 ዘለዎ KNN ከም መበገሲ ሞዴል ተመሪጹ። ሎጂስቲክ ሪግረሽን ምስ L1 ስሩዕ ምግባር፣ ናይ Naïve Bayes ሞዴልን SVM ሞዴላትን እውን ቅድሚ እቲ ዝበለፀ ሞዴል ምውሳኖም ተፈቲኖም እዮም። ንዕላማ እዚ ፕሮጀክት ካብ ካግል ዝተረኸበ ዳታሴት ተጠቒምና 2551 “ሃም” ኢመይል ፋይላትን 501 ስፓም ኢመይል ፋይላትን ዘለዎ ኮይኑ እቲ ሞዴሊንግ ድማ R ፕሮግራሚንግ ላንጋዋጅ ተጠቒምካ ዝተገበረ እዩ።

ብቐረባ ናይ ሃም ቃላትናይ ስፓም ቃላት ብቐረባ ምርኣይ ኣገባብ ስዒቡ።

እዚ ኣብ ታሕቲ ዘሎ ሰንጠረዥ ንዋሕዚ ናይቶም ዝተኸተሉ ዝተፈላለዩ ስጉምትታት ንምርዳእ ምሓገዘ –

ስጉምትታት ፕሮጀክት ዝገልጽ ስእሊ

ቅድመ መስርሕ ስጉምትታት

ዓቢ መጠን ናይ ጽሑፍ ዳታ ኣብ ጥቕሚ ይውዕል ከምዘሎ ኣብ ግምት ብምእታው፡ ነቲ ዳታ ንምጽራይን ብሞዴላት ምደባ ክጥቀሙሉ ዝኽእሉ ቅርጺ ንምብጻሕን ቅድመ-መስርሕ ምግባር ኣድላይነት ነይርዎ። እዚ ዝስዕብ ከም ኣካል ቅድመ መስርሕ ዳታ ዝተኸተለ ደረጃ ብደረጃ መስርሕ ክገልፅ እዩ –

  • እቲ ናይ ጽሑፍ ዳታ ንሓደ መስመራዊ ምደባ ቅቡል ክኸውን ኣለዎ። እዚ ማለት እቲ ዳታሴት ናይ ጽሑፍ ባህርያት ምውጻእ ሜላታት ተጠቒሙ ናብ ቁጽራዊ ባህርያት ክቕየር ኣለዎ።

  • ፈለማ፡ ነፍሲ ወከፍ መስመር ናይቲ ጽሑፍ ቶከን ኮይኑ ናብዚ ዝስዕብ ቅርጺ ይብገስ። መስርሕ ምትካል ንቃላት ንዝተጠዋወዩ መወዳእታታት ብምእላይ የሕጽሮም። ንኣብነት ኣብዚ ኣብ ታሕቲ ዘሎ ኣብነት ሰራሕተኛታት ሰራሕተኛ ይኾኑ።

    ቃላትን ጕንዲ ቃላቶምን።

  • ቀጺሉ እቲ ቶከን ዝኾነ ዳታ ናብ TF-IDF table (Term frequency - Inverse document frequency) ይቕየር። TF-IDF ንነፍሲ ወከፍ n-ግራም ኣብ ሓደ ሰነድ ብመንጽር ተርሙ ፍሪኩዌንሲ-ተገላባጢ ሰነድ ፍሪኩዌንሲ ዝገልጽ ኣገባብ ትንተና ጽሑፍ እዩ። ድግግሞሽ ቃል ኣብ ውሽጢ ሓደ ሰነድ (ኣብዚ ጉዳይ እዚ፡ ኢመይል) ዝተዋህበ ቃል ድግግም ጥራይ እዩ። ተገላባጢ ሰነድ ፍሪኩዌንሲ ብሓፈሻ ከምዚ ዝስዕብ ይግለጽ፤

    log ((ጠቕላላ ብዝሒ ሰነዳት/ብዝሒ ሰነዳት ምስ ተርም)


እዚ ድማ ካብቶም ኣዝዮም ተደጋጋሚን በዚ ኸኣ ውሑድ ኣገደስቲ ቃላትን ንላዕሊ ንኣገደስቲ ቃላት ንምምዛን የገልግል።

  • ቀጺሉ፡ እንተወሓደ ኣብ 2 ሚእታዊት ሰነዳት ዝረኣዩ ግን ከኣ ካብ 95 ሚእታዊት ሰነዳት ዘይበዝሑ ቃላት ጥራይ ብምምራጽ፡ እቶም ውዕላት ይንኪ። እዚ መስርሕ እዚ ኣብቲ ናይ ስልጠና ስብስብ ኣዝዮም ፍሉያት ወይ ኣዝዮም ዝሰፍሑ ውዕላት ከምዝተኣልዩ ብምርግጋጽ ልዕሊ ዓቐን ምትእስሳር ይከላኸል።


  • እዚ ድማ ኣብቲ ናይ ስልጠና ዳታሴት ብድምር 1,130 ተርም ይህብ።


TF-IDF ምስቲ ናይ ፈተነ ስብስብ ንምጥቃም ዝሕግዝ ስትራተጂ ኣብቲ ስልጠና TF-IDF ጥራይ ሞዴል ስልጠና ምፍጻም ክኸውን ምዃኑ ምፍላጥ ኣገዳሲ እዩ፣ ድሕሪኡ ድማ ብድሕሪኡ TF-IDF ብሙሉእ ዳታ ንፈተነ ልክዕነት ዳግማይ ምሕሳብ ክኸውን እዩ። እዚ ዘድሊ ምኽንያቱ TF-IDF ኣብ ፍሪኩዌንሲ ኣብ ምሉእ ዳታሴት ናይ ሓደ ዝተወሰነ ተርም ዝምርኮስ ስለዝኾነ፣ ከምኡ እውን ኣብ እዋን ስልጠና ነቲ ናይ ፈተና ዳታ ንኸይሕወሶ።


ኣብ መወዳእታ ኣብቲ ናይ ስልጠና ስብስብ ብሓፈሻዊ ፍሪኩዌንሲ ተርም እቶም ዝለዓሉ 1000 ተርማት ጥራይ እዮም ዝምረጹ።


tf-idf ሰደቓ

ኮድ ንናይ ቅድመ መስርሕ ስጉምትታት -

 #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)

ዝተጠቕሙ ሞዴላት

  1. K-Nearest Neighbors (KNN) – እቲ መሰረታዊ ሞዴል

እቲ ሞዴል ርትዓዊ ፍሉይነት ግን ከኣ ኣዝዩ ድኹም ተነቃፍነት ይረክብ፣ እዚ ማለት ብዙሓት ሃም ብሓሶት ከም ስፓም ይግመቱ። ኣብ ነፍሲ ወከፍ ካብዞም ኣብ ታሕቲ ዘለዉ ውጽኢታት፡ እቲ ኣወንታዊ ክፍሊ “ሃም” ምዃኑ ኣስተውዕል። እዚ ብሓቂ ንሓደ ተጠቃሚ ዝኸፍአ ውጽኢት እዩ ምኽንያቱ ብዙሓት ከም ስፓም ዝምደቡ ሓቀኛታት ኢመይላት ምሰኣኑ።


ናይ ምድንጋር ማትሪክስ ንKNN ምስ K=3
ኮድ ንሞዴል KNN -

 ##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. ሎጂስቲካዊ ሪግረሽን

ካብ ሞዴል KNN ድኹም ውጽኢት ድሕሪ ምርካብ፡ ሎጂስቲክ ሪግረሽን ቀጺሉ ዝተጠቕመሉ ሞዴል እዩ።


ንዕላማ እዚ ስናርዮ እዚ፡

እቲ ናይ ዕድል ቀመማት ንሃምን ስፓምን ኢመይል

ሎጂስቲክ ሪግረሽን በዞም ዝስዕቡ ሃይፐርፓራሜተራት ተግባራዊ ኮይኑ –

  • ክሳራ =” L1”
  • ወጻኢታት = 2
  • ኤፕሲሎን = 0.1


እዚ ሞዴል እዚ ኣብቲ ናይ ፈተነ ዳታሴት እዞም ዝስዕቡ ውጽኢታት ይህብ፣ ድሮ ኣብ ሞዴል KNN ርኡይ ምምሕያሽ እዩ። እቲ ሓፈሻዊ ትኽክለኛነት ኣዝዩ ልዑል ኮይኑ፡ እቲ ፍሉይነት ግን ገና ገለ ምምሕያሽ ዝግበረሉ ቦታ ከምዘሎ ዘርኢ እዩ። ሓደ ተጠቃሚ ናይዚ ሞዴል ውሑዳት ሃምስ ከም ስፓም ክግመቱ ምረኸበ።
ናይ ምድንጋር ማትሪክስ ንሎጂስቲክ ሪግረሽን ኮድ ንሎጂስቲካዊ ሪግረሽን ሞዴል -

 #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. ንፉዕ ባየስ ሞዴል

ቀጺሉ ዝተፈተነ ሞዴል ድማ ሞዴል ናይቭ ባየስ እዩ ነይሩ። ነዚ ሞዴል እዚ ብሓሙሽተ ዕጽፊ ኣገባብ ምቹኣት ሃይፐርፓራሜተራት ንምርካብ መስቀላዊ ምጽዳቕ ተገይሩ። እዚ ውጽኢቱ እዞም ዝስዕቡ መለክዒታት ን Naive-Bayes - .


  • ላፕላስ = 0
  • usekernel = ሓሶት እዩ።
  • ምትዕርራይ = 1


እዚ ሞዴል እዚ ኣብ ክልቲኡ ፍሉይነትን ተሃዋስነትን እውን ጽቡቕ ውጽኢት ይረክብ።

ናይ ምድንጋር ማትሪክስ ን Naïve Bayes ሞዴል ኮድ ንናይቭ ባየስ ሞዴል -

 ##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. ደገፍ ቬክተር ማሽን (SVM) .

እቲ ናይ መወዳእታ ሞዴል SVM cross-validation ምስ መስመራዊ ከርነል እዩ። ደገፍ ቬክተር ማሽናት ኣብ መንጎ ክልተ ክፍልታት ዳታ ንምፍላይ ዝለዓለ ዝፈላልይ ሃይፐርፕሌን ብዝበለጸ መንገዲ ክረኽባ ይፍትና።


ኣብዚ፡ ምቹኣት ሃይፐርፓራሜተራት ንምልላይ፡ R library caret ተጠቒምካ 5 ዕጽፊ CV ይፍጸም። እዞም ሃይፐርፓራሜተራት ኣብ ታሕቲ ተገሊጾም ኣለዉ -

  • ወጻኢታት = 1
  • ክሳራ = L2
  • ክብደት = 3


ውጽኢት ናይዚ ሞዴል ኣብቲ ዝተሓዝአ ናይ ፈተነ ዳታሴት ክውዕል ከሎ ኣብ ታሕቲ ተገሊጹ ኣሎ –

ናይ ምድንጋር ማትሪክስ ን SVM

ኮድ ን SVM -

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

ውፅኢታት

እዚ ዝስዕብ ሰሌዳ ንዝበለጸ ሞዴል ንምምራጽ ዝተሓሰቡ መለክዒታት ብሓጺሩ የቕርብ–

መርኣያ

ትኽክለኛነት

F1 ነጥቢ

ልክዕነት

ምዝካር

KNN

0.252 እዩ።

0.2293 እዩ።

0.8947 እዩ።

0.1315

ሎጂስቲክ ሪግረሽን (ሎጂስቲክ ሪግረሽን)

0.9624 እዩ።

0.9781 እዩ።

0.9591 እዩ።

0.998 እዩ።

ንፉዕ ባየስ

0.9722 እዩ።

0.9834 እዩ።

0.9882 እዩ።

0.9787 እዩ።

SVM

0.9885 እዩ።

0.9932 እዩ።

0.9886 እዩ።

1

ካብዚ ኣብ ላዕሊ ዘሎ ሰሌዳ፡ SVM ምስቶም ካልኦት ሞዴላት ክነጻጸር እንከሎ ዝበለጸ ኣፈጻጽማ ከምዘለዎ ምርኣይ ይከኣል።


ንዝያዳ ንምርግጋጽ ድማ ROC curves ተሰሪዖም AUC values ተሰሊዖም።

መርኣያ

KNN

ሎጂስቲክ ሪግረሽን (ሎጂስቲክ ሪግረሽን)

ንፉዕ ባየስ

SVM

AUC

.5232 ዝብል እዩ።

.882

.9574 ዝብል እዩ።

.9628 ዝብል እዩ።

ስእሊ፡ AUC ዋጋታት ናይቶም 4 ሞዴላት

ካብዚ ኣብ ላዕሊ ዝተጠቕሰ መለክዒታት፡ እቲ 5 ዕጽፊ መስቀላዊ ምጽዳቕ ዘለዎ SVM፡ ነቶም ኢመይላት ከም ሃምን ስፓምን ኣብ ምምዳብ፡ ኣብቲ ዳታሴት ዝበለጸ ውጽኢት ከም ዘለዎ ምድምዳም ይከኣል።

መደምደምታ

ስፓመርስ ብቐጻሊ ሓደስቲን ፈጠራውያንን ሜላታት ስፓም መልእኽቲ ንምልኣኽ ስለ ዝረኽቡ፡ ምፍታሕ ስፓም ወትሩ ቀጻሊ ምዕባለ ዘለዎ ዓውዲ ክኸውን እዩ። ዝኾነ ንጽል ጸረ-ስፓም መፍትሒ ቅኑዕ ክኸውን ኣይክእልን እዩ። ኣብዚ ፕሮጀክት ገለ ካብቶም ናይ ማሽን ትምህርቲ መሳርሒታት ከም መምደቢ ንሃምን ስፓምን ኢመይላት ከመይ ከም ዝሰርሑ ንምርኣይ ተጠቒሞም። መግለጺታት ናይቲ ስሌታት ከምኡ’ውን ንጽጽር ኣፈጻጽምኦም ቀሪቡ ኣሎ።


ካብቶም ዝተፈተኑ ኣርባዕተ ሞዴላት ማሽን ትምህርቲ፡ SVM ብመንጽር ኣፈጻጽማ ዝበለጸ ኮይኑ ተረኺቡ። ሞዴላት ሎጂስቲክ ሪግረሽንን ኔይቭ ባየስን እውን ተስፋ ዘለዎ ውጽኢት የርእዩ።