Cos’è Kaggle?
Kaggle è una piattaforma online per competizioni di modelli predittivi e analitici fondata nel 2010. Diverse aziende ed enti di ricerca condividono i loro dati, espongono un problema e data scientist di tutto il mondo competono tra loro per produrre il miglior modello per quel particolare problema.
Ad oggi Kaggle conta più di 500.000 utenti, anche denominati Kaggler, provenienti da quasi 200 paesi e specializzati nei più disparati campi (computer science, biologia, medicina, etc.). Tra questi ci sono anche elementi di spicco di importanti aziende informatiche, come il team IBM di Watson e di DeepMind di Google.
Dal 2010 ad oggi sono state lanciate più di 200 competizioni, tra cui spiccano:
- il riconoscimento dei movimenti per Kinect di Microsoft
- la ricerca del bosone di Higgs del CERN
- Heritage Health Prize
Per chi fosse interessato a cimentarsi con algoritmi e programmazione per conto proprio, Kaggle dispone anche di una libreria di dataset sulle più disparate tematiche: politica, sport, scienza, videogame.
Tipologie di competizione
Le competizioni possono essere di tre tipi:
- Prize: vengono messi in palio dei premi in denaro per i primi 3 classificati.
- Job: le aziende che indicono una competizione mettono in palio un colloquio per specifiche posizioni di lavoro.
- Knowledge: sono delle particolari competizioni, adatte soprattutto per i nuovi Kaggler e per chi desidera fare pratica con algoritmi e dati.
Il funzionamento di una competizione Kaggle è abbastanza semplice: con l’avvio della gara vengono resi disponibili i dataset per implementare e testare i propri modelli e contestualmente viene fissata una deadline.
Per tutto il periodo della competizione i partecipanti (singoli o uniti in team) possono sottomettere sul server Kaggle i propri risultati, i quali vengono comparati con l’output di riferimento noto solo a chi ha indetto la gara e valutati con un punteggio.
Al termine della competizione vengono proclamati vincitori i Kaggler posizionatisi in testa alla classifica finale.
Per lo sviluppo del proprio modello si può utilizzare qualsiasi linguaggio di programmazione: R, SaS, SPSS, Julia, Java, Python.
Un esempio di competizione
A titolo di esempio vorrei raccontarvi brevemente di una competizione alla quale ho partecipato insieme a mio fratello.
La competizione in questione è la Santander Customer Satisfaction} (60.000 euro al primo classificato), svoltasi dal 02.03.2016 al 02.05.2016 e a cui hanno partecipato oltre 5.000 Kaggler.
Il tema della competizione era identificare i Clienti soddisfatti/insoddisfatti durante la loro esperienza con Santander.
I dati messi a disposizione dei partecipanti erano costituiti da:
- sample_submission.csv, un esempio di come doveva essere strutturato l’output per la valutazione
- train.csv, un insieme di dati con cui implementare il proprio modello
- test.csv, un insieme di dati su cui testare il proprio modello
i dati forniti erano composti da campi anonimi, tutti di tipologia numerica. La colonna TARGET era la variabile da predire e poteva assumere il valore 1 per i Clienti insoddisfatti e il valore 0 per i Clienti soddisfatti.
L’obiettivo era predire la probabilità che ciascun Cliente nel test set fosse un Cliente insoddisfatto.
Il modello utilizzato.
Non avendo informazioni sui dati a disposizione (a causa dei campi resi anonimi), sono state condotte su questi alcune modifiche preliminari come la rimozione delle feature costanti e delle feature identiche che poco o nulla aggiungono alla definizione del modello o addirittura concorrono alla distorsione.
Una volta normalizzati i dati a disposizione, per la definizione del modello si è utilizzata l’implementazione dell’algoritmo XGBoost disponibile nel package xgboost di R.
XGBoost sta per Extreme Gradient Boosting ed è simile ma più efficiente del Gradient Boosting, un’algoritmo per effettuare regressione e classificazione. Ciò che lo rende veloce è la sua capacità di operare in parallelo su una singola macchina, rendendo xgboost almeno 10 volte più veloce di implementazioni Gradient Boosting esistenti. Supporta vari funzioni obiettivo, tra cui la regressione e la classificazione.
Il package R xgboost ha anche funzioni aggiuntive per fare la convalida incrociata e la ricerca di variabili importanti. Ci sono molti parametri che deve essere controllati per ottimizzare il modello (booster tree o booster lineare).
Per chi fosse interessato ad un’introduzione al package R XGBoost ecco un utile link.
Risultati.
Al termine della competizione il nostro modello ha ottenuto la 400-esima posizione in classifica su 5123, rientrando così nel Top 8% della classifica.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Premesso che io non ho mai sviluppato modelli matematici.
Ma se come nell’esempio non si conoscono da dove provengono i dati e solo i risultati. I modelli costruiti non riguardo solo quei dati e non l’effettivo comportamento del sistema?.
Ciao Lorenzo,
purtroppo molti dei dati messi a disposizione nelle competizioni non possono essere resi disponibili nella loro forma originaria per diversi motivi (privacy e concorrenza, per dirne due), pertanto i diversi campi sono resi anonimi. L’unico campo noto è quello dell’output (nel nostro caso SODDISFATTO/INSODDISFATTO) e a partire da questo si può però stabilire il modello da seguire (classificazione piuttosto che regressione). Lavorare con campi espliciti sicuramente dà un’idea molto più precisa del problema, ma è possibile descrivere un sistema anche in queste condizioni. La cosa importante è il raffinamento che si va a fare sui dati (togliere campi con un solo valore possibile oppure campi con varianza minima), pur “restando al buio” sul loro significato effettivo.
Il fatto di lavorare con campi anonimi non pregiudica il comportamento dei dati (ad esempio, se invece di un dataset con nomi cognomi e CAP, si effettuano sostituzioni del tipo NOME–> NUMERO, COGNOME –> NUMERO, CAP –> CODICE A LETTERE si avranno sempre gli stessi pattern nei dati).
Il modello usato per questi particolari dati può essere usato anche in presenza di altri dati (l’impianto di questo modello è stato usato anche in altre competizioni di Kaggle).
A presto Lorenzo!
Andrea
Scusa Andrea se ti rispondo solo adesso. Ti ringrazio per la risposta.
Ho trovato molto interessante questo articolo, non conoscevo “kaggle” … complimenti anche per il posizionamento in classifica
del vostro modello e in bocca al lupo per eventuali competizioni future!
Giovanni Conti
Grazie mille Giovanni, veramente molto gentile. Crepi il lupo!
Se hai interesse per questo tipo di competizioni, ti consiglio di cominciare gradualmente con quelle della tipologia “Getting Started”. Oltre ad essere molto divertenti, ti daranno sicuramente voglia di partecipare ad altre ancora più avvincenti.
A presto!
Andrea