Tutti i lavori
Caso studio 05Progetto di tesi

Outsyd Sentinel

Machine learning che manda ogni recensione al team giusto — e uno sguardo onesto a un punteggio perfetto.

Contesto
Laurea triennale in Informatica (L-31) — project work sul machine learning per i processi aziendali
Ruolo
Da solo — dati, modelli, dashboard, elaborato
Tecnologie
Python · scikit-learn · pandas · Streamlit · seaborn
Anno
2026

100%

di accuratezza sul test set — e perché non mi fido.

01 — L’idea

Ogni lamentela ha un responsabile. Il segreto è fargliela arrivare per primo.

Hotel e app di viaggio ricevono un flusso continuo di commenti scritti liberamente, e quasi tutti finiscono in un’unica casella. Sentinel legge ogni recensione e prende due decisioni: quale reparto deve occuparsene — accoglienza, cibo e ristorazione, servizi e Wi‑Fi o posizione — e se l’ospite è soddisfatto. Chi può sistemare una doccia fredda vede la lamentela che la riguarda, invece che tutti o nessuno.

02 — Come funziona

  1. Dati800 recensioni sintetiche e bilanciate, con la stessa struttura dei commenti di Outsyd — id, utente, testo, data. Nessun dato personale.
  2. Pre-elaborazioneTutto in minuscolo, punteggiatura rimossa, un bag of words costruito con CountVectorizer.
  3. Due modelliRegressione logistica per il reparto (4 classi) e per il sentiment (2), addestrati sull’80% dei dati e testati sul restante 20%.
  4. DashboardStreamlit: analizza una recensione con il grado di sicurezza, elabora un CSV in blocco, mostra le metriche.

Perché non una rete neurale? 800 frasi brevi non ne hanno bisogno. La regressione logistica si addestra in millisecondi, i suoi pesi si possono leggere e spiegare e un piccolo team può riaddestrarla su un portatile — per un processo aziendale conta più di qualche punto di accuratezza.

03 — Provalo

Questo è il modello addestrato, che gira nel tuo browser.

Ho esportato il vocabolario e i pesi della regressione dalla pipeline di scikit-learn in un file JSON da 6 KB. La pagina divide il testo in parole esattamente come fa CountVectorizer e fa i calcoli in JavaScript — i risultati coincidono con quelli di Python fino alla quarta cifra decimale. Scrivi una recensione o parti da un esempio.

Gli ultimi tre servono a metterlo in crisi.

Smista a

—

Sentiment

—

Parole che il modello conosce

04 — Il problema del 100%

Entrambi i modelli hanno fatto 100% sul test set. Dovrebbe insospettirti.

Il test set veniva dallo stesso generatore del training set: lo stesso vocabolario di 86 parole, le stesse strutture di frase. Separarli alla perfezione dimostra che la pipeline funziona dall’inizio alla fine — non che capisca le recensioni. Dagli una frase che il generatore non ha mai scritto e la sicurezza sul sentiment scivola verso il testa o croce: «la vista sul mare era stupenda» risulta leggermente negativa, perché la parola «stupenda» non l’ha mai vista.

Cosa servirebbe per usarlo davvero: recensioni etichettate di ospiti reali; TF-IDF con coppie di parole, così «non funzionava» viene letto come un’unica idea negativa; un transformer multilingue, se il budget lo permette; e una Cloud Function che etichetta ogni commento prima che venga scritto nel database.

36000 04400 00360 00044
AccoglienzaCiboPosizioneServizi

Reparto — previsto e reale, 160 recensioni di test

710 089
NegativoPositivo

Sentiment — previsto e reale

05 — Il legame con Outsyd

Sentinel è stato progettato intorno ai dati che Outsyd ha già. I commenti dell’app sono salvati con gli stessi campi prodotti dal generatore, quindi il classificatore può stare in una Cloud Function tra l’utente e il database e aggiungere a ogni commento reparto e sentiment prima del salvataggio.

La tesi racconta tutto il percorso — requisiti, sviluppo iterativo, valutazione e suoi limiti — e collega ogni passaggio agli esami che ci stanno dietro: probabilità e statistica, algoritmi, basi di dati, organizzazione e marketing.