Sistem automatizat de detectare a email-urilor spam
Author: Mihai Nan
💌 Sistem automatizat de detectare a email-urilor spam 📧
Compania ta dorește să protejeze utilizatorii de email-urile nedorite (spam).
Pentru aceasta, s-a decis construirea unui sistem automat care să identifice
email-urile spam și să le separe de cele legitime (nonspam).
Ai primit un set de email-uri etichetate și trebuie să construiești un model
care să poată clasifica email-urile noi.
Ți-au fost puse la dispoziție două fișiere:
- train.csv - email-uri istorice cu eticheta
label(spam= 1 /nonspam= 0) - test.csv - email-uri noi, fără etichetă
Scopul principal: predicția probabilității ca un email să fie spam (valoare între 0 și 1, unde 0 = nonspam sigur, 1 = spam sigur).
📊 Setul de date
Fiecare rând reprezintă un email, cu următoarele atribute:
sample_id- identificator unictext- conținutul email-uluilabel- doar în train.csv, 1 (spam)/ 0 (nonspam)
Scopul final: prezice label pentru rândurile din test.csv.
📝 Task-uri
Primele două subtask-uri verifică analiza simplă a email-urilor.
Ultimul subtask evaluează modelul de clasificare.
Subtask 1 (10 puncte)
Determină lungimea fiecărui email ca număr de caractere.
Afișează pentru acest subtask un număr întreg.
Subtask 2 (15 puncte)
Numără câte apariții ale cuvântului free există în email.
Subtask 3 (75 puncte)
Construiți un model de clasificare care prezice probabilitatea ca un email să fie spam (p ∈ [0,1]) pentru fiecare rând din test.
Evaluarea se face folosind ROC curve și AUC (Area Under the ROC Curve).
🧮 Evaluare
- AUC ≥ 0.95 → 75 puncte
- AUC ≤ 0.80 → 0 puncte
- Intervalul dintre ele: punctaj proporțional
Subtasks 1–2 se evaluează exact (prin comparare).
📄 Formatul fișierului de submisie
Fișierul submission.csv trebuie să conțină câte 3 linii pentru fiecare rând din test,
corespunzătoare celor 3 subtasks.
Structură:
subtaskID, datapointID, answer
unde:
- subtaskID - 1, 2 sau 3
- datapointID - valoarea
sample_id - answer - depinde de task:
- Subtask 1: lungimea email-ului (număr întreg)
- Subtask 2: numărul de apariții ale cuvântului
free(număr întreg) - Subtask 3: probabilitatea ca email-ul să fie spam (număr real 0–1)
Exemplu pentru sample_id = 00042:
subtaskID,datapointID,answer
1,00042,342
2,00042,3
3,00042,0.742
📊 Metrica de evaluare: ROC AUC 📈
Pentru Subtask 3, evaluarea se face folosind ROC AUC (Area Under the ROC Curve).
Aceasta este o măsură unică care sintetizează performanța unui clasificator pentru toate pragurile posibile de decizie.
Cum se calculează ROC AUC?
- Se trasează curba ROC, care reprezintă:
- TPR (True Positive Rate) - rata corectă de aprobare a cererilor aprobate
- FPR (False Positive Rate) - rata cererilor respinse incorect aprobate

- Aria de sub curbă (AUC) se calculează folosind regula trapezelor:
- Curba este împărțită în trapeze folosind liniile verticale la valorile FPR și liniile orizontale la valorile TPR
- Se adună ariile trapezelor pentru a obține valoarea finală a AUC

- Interpretarea scorului:
- ROC AUC = 1 🏆 → clasificator perfect, toate cererile sunt clasificate corect
- ROC AUC = 0.5 🎲 → clasificator aleatoriu, fără putere predictivă
- 0.5 < ROC AUC < 1 📈 → cât de bine clasificatorul separă clasele