Fairplay
Author: Ilie-Goga Radu
FairPlay și meciurile cu risc ridicat
Context
Într-un univers paralel, FairPlay este departamentul responsabil cu monitorizarea echipelor și jucătorilor în timpul meciurilor.
De-a lungul anilor, FairPlay a observat că anumite meciuri tind să devină haotice mai des atunci când apar:
- faulturi,
- multe cartonașe,
- decizii controversate și scandaluri.
Pentru a evita scandaluri cat mai mult, FairPlay îți cere să construiești un model care clasifică meciurile după potențialul de haos.
Ai la dispoziție date din trecut despre meciuri și trebuie să construiești un model de clasificare care să poată prezice daca meciul va deveni haotic.
Setul de date
Ți-au fost puse la dispoziție două fișiere:
train.csv- meciuri din trecut, cu eticheta chaos_labeltest.csv- meciuri noi, fără etichetă
Fiecare rând reprezintă un meci și conține următoarele coloane:
MatchID- identificator unic al meciuluiSeason- sezonul competiționalMatchWeek- etapaHomeTeam- echipa gazdăAwayTeam- echipa oaspeteGoals- numărul total de goluriShots- numărul total de șuturiCorners- numărul total de cornereYellowCards- numărul de cartonașe galbeneRedCards- numărul de cartonașe roșiiTeamStyles- listă de stiluri de joc asociate meciului (ex: ["AggressiveTackler", "HighPressure"])chaos_label- doar în train.csv,- 1 = meci haotic / cu scandal
- 0 = meci controlat
Scopul final:
Prezice dacă un meci din test.csv este haotic (valori binare - 0 sau 1).
Task-uri
Primele două subtask-uri verifică înțelegerea și preprocesarea datelor.
Ultimul subtask evaluează performanța modelului de clasificare.
Subtask 1 (10 puncte)
Calculați numărul de meciuri jucate de echipa "Chelsea", atât în deplasare, cât și acasă, pe baza setului de testare.
Afișați un singur număr întreg.
Subtask 2 (15 puncte)
Pornind de la coloana TeamStyles, calculați un scor numeric numit StyleAggressionScore, definit ca:
StyleAggressionScore = (numărul de stiluri agresive) / (numărul total de stiluri)
Stilurile considerate agresive sunt:
AggressiveTacklerRiskTakerHighPressureChaosInducer
Rezultatul trebuie să fie un număr real între 0 și 1.
Subtask 3 (75 puncte)
Construiți un model de clasificare care să prezică dacă un meci este haotic (chaos_label = 1) sau controlat (chaos_label = 0).
Pentru fiecare rând din test.csv, modelul trebuie să returneze o predicție binară:
- 0 → meci controlat
- 1 → meci haotic
Modelul poate folosi orice feature disponibil în setul de date, inclusiv feature-uri artificiale construite în cadrul subtask-urilor anterioare.
Evaluare
Pentru Subtask 3, evaluarea se face folosind scorul F1 macro.
Scorul F1 macro se calculează astfel:
- se calculează F1-score separat pentru fiecare clasă (0 și 1)
- se face media aritmetică a celor două valori
Această metrică tratează ambele clase în mod egal și penalizează modelele care prezic corect doar clasa majoritară.
Praguri de evaluare:
- F1 macro ≥ 0.95 → 75 puncte
- F1 macro ≤ 0.80 → 0 puncte
Valorile intermediare primesc punctaj proportional.
Formatul fișierului de submisie
Fișierul submission.csv trebuie să conțină o linie pentru primul subtask, și câte 2 linii pentru fiecare rând din test, corespunzătoare celorlalte 2 subtaskuri.
Structură:
subtaskID,datapointID,answer
unde:
subtaskID- 1, 2 sau 3datapointID- valoarea id (sau 1 pentru primul subtask)answer- depinde de task:- Subtask 1: numărul de meciuri (număr întreg)
- Subtask 2: scorul descris (aproximat la 2 zecimale)
- Subtask 3: predicție binară (0/1)
Exemplu pentru id = 25758:
| subtaskID | datapointID | answer |
|---|---|---|
| 1 | 1 | 2000 |
| 2 | 25758 | 0 |
| 3 | 25758 | 0 |
Sursă dataset: https://www.kaggle.com/datasets/ajaxianazarenka/premier-league?select=PremierLeague.csv