Autore: Pierluigi Papa
Data: 6 luglio 2026
Caricamento del dataset:
ATS_Data_Task_Jet_HR <- read_excel("ATS Data - Task @ Jet HR.xlsx") data<-ATS_Data_Task_Jet_HR
Analizzando il dataset su R il primo problema che ho dovuto affrontare è stato il diverso formato per le variabili "Data di candidatura" e "Data di Fine Processo". Ho creato una funzione ad hoc per renderle tutto dello stesso formato. Il focus su queste due variabili è stato dettato dal fatto che si potesse creare un KPI basato su queste due variabili per valutare il processo di selezione.
La funzione usata per fare ciò, denominata "parsedatamista" per completezza si trova nel file JETHR.Rhtml.
Oltre alla conversione,la variabile durata del processo è stata creata e aggiunta come ulteriore variabile del dataset iniziale.
Primo controllo di qualità. Alcune durate risultano negative Verifico quante sono, in valore assoluto e in percentuale sul totale.
sum(data$durata < 0, na.rm = TRUE)
## [1] 2290
(sum(data$durata < 0, na.rm = TRUE) / nrow(data)) * 100
## [1] 22.91146
Queste durate negative sono errori: probabilmente date invertite o di battitura. Non le elimino dal dataset, ma le escludo dai calcoli sulla durata(23%).
Un altro safe check è stato sulla presenza di duplicati.
#quanti
nomi compaiono almeno due volte
sum(duplicated(data$Nome e Cognome))
## [1] 1450
Questo risultato non ci porta ad una soluzione definitiva poichè potrebbe essere che una persona abbia applicato più di una volta o ci siano omonimi. Un consiglio è quello di far registrare le persone quando applicano in modo tale da avere ID univoci.
Arrivati a questo punto, il prossimo step è eliminare unità inutili.
In particolare tutte le unità che hanno un CV non è stato valutato ad eccezione dei Web "Designer" & "Chief of Staff".
noscreen<-data[is.na(data$`Valutazione CV`) & !(data$Ruolo %in% c("Web Designer", "Chief of Staff")),] nrow(noscreen)
## [1] 439
Queste 439 unità vengono escluse dal dataset.
data_clean <- data[!(rownames(data) %in% rownames(noscreen)), ]
Data_clean sarà il dataset di riferimento con non più 9995 candidati ma 9556.
Ogni ruolo segue un processo diverso. Prima di analizzare i dati ho ricostruito i quattro funnel a partire dalle regole fornite, perché applicare lo stesso schema a tutti falserebbe le metriche. La tabella riassume i percorsi.
| Funnel | Ruoli | Percorso |
|---|---|---|
| Standard | Sales Ops, BDR, Talent | Screening → Task → Interview 1 → Interview 2 → Interview 3 → Offer |
| Software Engineer | Software Engineer | Screening → Interview 1 → Interview 2 → Interview 3 → Offer (no Task) |
| Product Designer | Product Designer | Screening → Interview 1 → Task → Interview 2 → Offer (Task dopo la 1ª interview, 2 interview) |
| No-Screening | Web Designer, Chief of Staff | Task → Interview 1 → Interview 2 → Interview 3 → Offer (no Screening) |
Il dataset è stato sotto-diviso in 4 sottodataset in base ai diversi processi di selezione.
Nota a margine: per lo stesso ruolo vengono usati nomi diversi. In particolare:
| Variabile | Funnel | Ruoli |
|---|---|---|
df_standard | Standard | Sales Ops, BDR, Talent |
df_swe | Software Engineer | Software Engineer |
df_pd | Product Designer | Product Designer |
df_noscreen | No-Screening | Web Designer, Chief of Staff |