sabato 29 settembre 2018

Comuni dell'Arberia

Avendo qualche ora libera ho pensato di fare una mappa dei comuni di Arberia.
Per chi non sapesse cos'è vi rimando alla pagina Wikipedia sull'argomento -> Arberia.

In pratica ho scritto in R uno scraper di tabelle per la pagina Wikipedia che riporta tutti i comuni d'Italia che ne fanno parte, poi con il package ggmap ho recuperato le coordinate.
Un pò di pulizia dei dati ed è già tutto pronto da caricare su uMap.
Non ho toccato nulla dalle informazioni di Wikipedia quindi non si offendano quelli che (come me) abitano in una frazione arbëreshë di un comune che non lo è 😉

Il codice e il geojson della mappa lo potete trovare sul mio github di seguito invece la mappa interattiva.



Visualizza a schermo intero

martedì 11 settembre 2018

Appunti di Data Science

Sempre più spesso il termine Data Science viene confuso con la previsione del futuro (nemmeno fossimo la zingara di Brera ☺).
La Data Science è un ecosistema complesso (fig. 1) in cui anche l'implementazione del modello di data mining/machine learning è una fase di un processo più ampio.
Vedendo nuovi aspiranti data scientist concentrarsi maggiormente su "potremmo applicare il modello X?" e poco su "che problema andiamo a risolvere?" ho pensato di scrivere questo post per chi vuole avvicinarsi alla disciplina.


fig. 1 data science


Solitamente per affrontare un progetto (che sia di data science o no) utilizzo l'approccio CRISP - DM.
Il CRoss-Industry Standard Process for Data Mining è ormai uno standard per i progetti di analisi dati e divide il problema in 6 fasi (fig.2).

fig.2 CRISP-DM Process
  1.  Comprensione del problema: questa è la fase più delicata, da qui deriva tutto il resto. Il mio consiglio è di investire più tempo in questa fase approfondendo (col cliente, col professore, ...) ciò che vi è richiesto. Vi eviterà molto lavoro nelle fasi successive.
  2. Comprensione dei dati: in questa fase con delle statistiche descrittive andiamo a scoprire cosa abbiamo a disposizione.
    1. Quante osservazioni e quante variabili ha il dataset?
    2. Per ogni variabile quanti valori mancanti?
    3. Per le variabili categoriali: quante categorie/valori distinti abbiamo?
    4. Per le variabili numeriche: minimo, massimo, media, mediana, quartili, deviazione standard.
  3.  Preparazione dei dati: ogni progetto ha le sue specifiche elaborazioni, qui cerco di riassumere le più comuni.
    1. Trattamento dei valori mancanti. Possono essere utilizzate diverse strategie a seconda di come è fatto il dataset e di quanto influiscono.
      1. Li imposto a zero? Sconsigliatissimo!
      2. Li sostituisco con media o mediana?
      3. Uso metodi di machine learning per predire il valore che manca?
      4. Uso l'interpolazione tra n valori prima e n dopo il mancante? (Molto usato nelle serie storiche)
    2. Trattamento Outlier. A meno che non lavoriamo proprio su outlier detection, e quindi cerchiamo proprio questi comportamenti anomali (es. scoprire frodi bancarie), questi valori "sporcano" il dataset, anche qui possono essere usate diverse strategie.
      1. Sostituire con la media o la mediana
      2. Sostituire con minimo o massimo
      3. Sostuire il valore usando modelli di machine learining
    3. Elaborazioni varie dipendenti dal problema da risolvere:
    4. fig.3 tidyverse è una libreria R per manipolare i dati
      1. Raggruppare secondo granularità spaziale/temporale
      2. Discretizzare variabili continue in range
      3. Creare variabili dummy
      4. Utilizzare metodi di Dimensionality Reduction (es. PCA)
      5. Remove Stopwords, Stemming (es. progetti NLP)
  4.  Modeling: finalmente arrivati al punto chiave, bisogna scegliere il modello da adottare. 
    1. La scelta dipende da:
      1. Che problema dobbiamo risolvere?
        Regressione? Classificazione? Pattern recognition? ...
        L'unico consiglio che mi sento di dare è di non esagerare con la complessità, non sempre un modello complesso è un modello migliore, anzi si può andare incontro ai fenomeni di overfitting e underfitting.
      2. Quanti dati abbiamo?
        Spesso ci si lancia sul deep learning perchè và molto di moda ma non abbiamo abbastanza dati per applicarli e quindi non danno quel vantaggio che dovrebbero.
    2.  Una volta scelti N modelli da valutare per ogni modello proponiamo un diverso tuning dei parametri (es. nel Random Forest il numero di alberi)
    3. Fatto questo "alleniamo" il modello su una parte del dataset (circa il 75% delle osservazioni) e lo testiamo sul restante.
      Se il test ci soddisfa scegliamo il modello migliore altrimenti si torna alla fase di tuning o a quella di preparazione del dato.

      [A questo link c'è un'ottimo cheatsheet sugli algoritmi di machine learning in R.]
  5.  Valutazione: in questa fase si valutano i risultati, se sono in linea con quanto richiesto nella prima fase ok, altrimenti si torna alla fase di comprensione del problema.
    Se il processo è andato a buon fine si valutano i possibili sviluppi futuri e le modifiche/miglioramenti apportabili. Tengo ad aggiungere che i modelli non sono statici ma và fatto un re-tuning dei parametri utilizzando i nuovi casi che si verranno a presentare, quindi in questa fase è importante anche calendarizzare anche questo.
  6. Deploy: se è tutto a posto il modello và in produzione. In questa fase durante gli anni di lavoro sono sempre stato affiancato da altre figure come Data Engineer, quindi è molto importante saper comunicare con altre figure del mondo Dati, nessun progetto può andare in porto con una sola figura seppur molto preparata.
Quanto scritto non è altro che una breve infarinatura sulla metodologia CRISP-DM con qualche aggiunta scaturita dall'esperienza.
Troppo spesso il Data Scientist è confuso con un mago (e questo a volte fa piacere) ma dietro a qualsiasi magia c'è sempre tanto metodo.

fig.4 Abatantuono interpreta "Il mago di Segrate"



giovedì 12 luglio 2018

Perchè non si può predire chi vincerà i mondiali di calcio?


I mondiali FIFA 2018 sono ormai all'atto finale, in questo mese man mano che alcune nazionali venivano eliminate è salito alla ribalta un articolo, e un modello di Machine Learning, che prevedeva una finale Germania - Brasile vinta dalla Germania.
Il link all'articolo è qui: https://www.kdnuggets.com/2018/06/football-world-cup-predictions.html

World Cup KDnuggets brackets
La Previsione di KDNuggets


Su vari forum e social network ho letto diversi commenti sul perchè il modello non abbia funzionato:
  • andava usato un altro modello
  • le fonti dati non erano quelle giuste
  • analisti scarsi
  • blablabla...
  • ...
Premesso che nel ML come nel calcio siamo tutti allenatori (del modello) al bar e l'assente ha sempre ragione.
Secondo me non è nessuno dei precedenti motivi ma il motivo principale è che i mondiali di calcio non sono prevedibili perchè:
  • il calcio è uno sport basato sul blitz: puoi essere il Brasile e giocare contro Taiwan, ma se ti fanno un gol in qualsiasi modo e si chiudono bene con un pò di fortuna Taiwan passa il turno;
L'imprevedibilità di Higuita che qualifica il Camerun
  • basarsi sui dati storici è inutile: ogni 4 anno le rose cambiano completamente: puoi avere squadre totalmente rinnovate (Francia 2014 vs Francia 2018) o squadre quasi uguali ma con 4 anni in più sulle spalle (Argentina 2014 vs Argentina 2018);
 
Totò Schillaci numero 9 del Palermo, Eto'o e Miccoli: una ...
Le "imprevedibili" notti magiche di Totò Schillaci
  • la competizione è talmente breve che una squadra/calciatore molto in forma può fare un'enorme differenza: vedi le notti magiche di Totò Schillaci in Italia 90 o il Brasile del 2002 che si qualifica a stento e poi vince il torneo.

Detto questo il calcio è il gioco più bello del mondo e quando si può unire passione e lavoro anche se i risultati non ci danno ragione "almeno ci siamo divertiti", quindi ben vengano questi esperimenti e per il mondiale 2022 in Quatar non dimenticatevi di inserire tra le variabili di input lo sbalzo termico tra il paese di origine/campionato di provenienza dei calciatori e la sede del torneo!

Buona finale mondiale a tutti!

 

Enjoy!
Enjoy!