Chirper și imperiul lui Melon Husk (Y)
Автор: Mihnea-Teodor Stoica
Chirper și imperiul lui Melon Husk (Y)
Context
Într-o lume paralelă a rețelelor sociale, Chirper este cea mai populară platformă de micro-mesaje.
Recent, platforma a fost cumpărată de celebrul (și ușor excentricul) Melon Husk, care a decis să o rebranduiască sub numele de Y.
Pentru a face Y mai curată și mai prietenoasă, Melon Husk cere echipei tale de data science să construiască un model de clasificare care să detecteze automat chirp-uri problematice (spam, conținut irelevant sau zgomot), astfel încât acestea să poată fi filtrate din feed.
Ai primit un set de chirp-uri istorice și trebuie să construiești un model
care să poată clasifica chirp-uri noi.
Ți-au fost puse la dispoziție două fișiere:
- train.csv – chirp-uri istorice cu eticheta
label(problematic= 1 /normal= 0) - test.csv – chirp-uri noi, fără etichetă
Scopul principal: predicția probabilității ca un chirp să fie problematic
(valoare între 0 și 1, unde 0 = chirp sigur normal, 1 = chirp sigur problematic).
📊 Setul de date
Fiecare rând reprezintă un chirp publicat pe Chirper Y, cu următoarele atribute:
id– identificator unic al chirp-uluichirp– textul chirp-uluilabel– doar în train.csv, 1 (problematic) / 0 (normal)
Scopul final: prezice label pentru rândurile din test.csv.
📝 Task-uri
Primele două subtask-uri verifică analiza simplă a chirp-urilor.
Ultimul subtask evaluează performanța modelului de clasificare.
Subtask 1 (10 puncte)
Determină lungimea fiecărui chirp 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 caracterului # există în chirp
(indicator important pentru hashtag-uri excesive, iubite de spammeri 😄).
Subtask 3 (75 puncte)
Construiți un model de clasificare care prezice probabilitatea ca un chirp
să fie problematic (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:
unde:
- subtaskID – 1, 2 sau 3
- datapointID – valoarea
id - answer – depinde de task:
- Subtask 1: lungimea chirp-ului (număr întreg)
- Subtask 2: numărul de apariții ale caracterului
#(număr întreg) - Subtask 3: probabilitatea ca chirp-ul să fie problematic (număr real 0–1)
Exemplu pentru id = 25758:
subtaskID,datapointID,answer
1,25758,21
2,25758,0
3,25758,0.083
📊 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) – proporția de chirp-uri problematice detectate corect
- FPR (False Positive Rate) – proporția de chirp-uri normale marcate greșit ca problematice
-
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
- Curba este împărțită în trapeze folosind liniile verticale la valorile FPR
-
Interpretarea scorului:
- ROC AUC = 1 🏆 → clasificator perfect, Y devine visul lui Melon Husk
- ROC AUC = 0.5 🎲 → clasificator aleatoriu, la fel de util ca un poll pe Chirper
- 0.5 < ROC AUC < 1 📈 → cât de bine separă modelul chirp-urile normale de cele problematice