Se cerchiamo how to become data scientists su Google troviamo una marea di risorse che ci esortano ad imparare le basi dell'algebra lineare e dell'analisi matematica.

La motivazione che ci viene data è che queste saranno la base della nostra comprensione degli algoritmi di machine e deep learning che andremo a studiare più avanti. Sono tasselli propedeutici e, a parer mio, le risorse che dicono questo hanno ragione. Non se ne esce.

Ho scoperto però che seppur necessari alla crescita e alla comprensione della materia come data scientist, esse non sono sufficienti. Ci sono moltissimi analisti incredibilmente abili nel loro lavoro, ma parecchi arrancano a trovare lavoro e a farsi valere.

Scrivo questo post nel gennaio 2022 ma sono abbastanza sicuro che questa affermazione rimarrà vera anche nel futuro. Basta andare a leggere qualsiasi discussione su Kaggle (ad esempio qui), Reddit (in /r/machinelearning oppure learnmachinelearning) oppure in un canale Discord che tratti l'argomento.

Questi individui non sono bravi - sono più che bravi. Eppure hanno difficoltà ad interfacciarsi con la realtà. Una realtà che richiede conoscenze che vanno al di là data science o dell'ingegneria informatica. Non voglio peccare di arroganza nel dire che io conosco la verità e che queste persone dovrebbero seguirmi. Non è così. Anche io ho sbattuto la testa contro questo palo e spesso la sbatto ancora oggi dopo 6 anni di esperienza in questo lavoro.

Non è stato facile, ma ho pian piano sviluppato degli approcci che si sono rivelati utili per aumentare il mio valore all'interno di un contesto lavorativo e non. Il consiglio che mi sento di condividere oggi è uno che non si sente spesso nei tanti corsi di data science che ci sono online, vale a dire quello di creare un dataset partendo da zero per risolvere un problema che ci interessa.

Iniziamo.

Quali sono i vantaggi di creare il proprio dataset da zero?

Ci sono diversi motivi che mi spingono a consigliare questo approccio. Questi spaziano da quelli pragmatici a quelli più personali. Ecco una panoramica:

  • ci assumiamo la responsabilità completa del progetto, da inizio a fine (accountability)
  • siamo proprietari a tutti gli effetti del materiale che usiamo (ownership)
  • sviluppiamo una comprensione per il problema e i nostri dati molto profonda (specific knowledge)
  • il nostro problema non è risolvibile attraverso gli open dataset conosciuti (leverage)

I temi di accountability, ownership, knowledge e leverage sono, a mio avviso, centrali allo sviluppo personale e professionale. Esploriamoli uno ad uno per dare un senso alla attività di creare un dataset da zero.

Responsabilità (Accountability)

Creare un dataset da zero ci pone in una situazione di responsabilità completa - ogni errore o bias nei dati è riconducibile a noi e solo a noi.

È quindi molto importante essere abili nel reperire il dato in maniera corretta, rispettando la validità e la coerenza dei sistemi di misurazione (se usiamo sensori fisici) o scrivendo codice pulito e strutturato se il dato è reperito online (ad esempio con dei testi).

Possesso (Ownership)

Quando ci mettiamo in gioco e dedichiamo del tempo a fare il lavoro sporco di scraping, creare sondaggi o condurre interviste, sviluppiamo disciplina, pazienza e abilità nelle attività menzionate.

Questo non accadrebbe se il dataset usato fosse pubblico, poiché altri ricercatori hanno fatto in passato questo lavoro per noi. Avere possesso del nostro dato ci permette anche di condurre con intenzione e scopo un eventuale team a disposizione per lo studio.

Conoscenza specifica (Specific knowledge)

Il percorso sarà ricco di sfide che affronteremo da soli o in compagnia. In ogni caso, possiamo essere sicuri che lo termineremo con più conoscenze specifiche e generali riguardo il problema. Se affrontiamo più volte questo percorso, possiamo anche diventare degli esperti in materia (la cosiddetta nicchia).

Leva (Leverage)

Avere leva significa che siamo in grado di fare o offrire qualcosa che non tutti possono. Avere leva ci dà valore. Se abbiamo molta leva, siamo in grado di offrire soluzioni che servono agli altri e che quest'ultimi sono in grado di pagare bene.

Quando costruiamo un dataset da zero per un problema che un dataset pubblico non copre adeguatamente, stiamo creando un asset con del valore. Questo valore è più o meno prezioso in base all'ambizione del progetto e al prodotto finale.


In sostanza, come per quasi tutti i progetti di sviluppo, quello che se ne ricava è quasi sempre importante per lo sviluppo personale e professionale.

È l'atteggiamento imprenditoriale che emerge - se il progetto è nostro a tutti i livelli menzionati allora dobbiamo essere in grado di sacrificare parecchio per dargli l'opportunità di vedere la luce. Nel data science, questo sacrificio spesso inizia proprio con la creazione di un dataset di addestramento.

Approccio

Poniamo che vogliamo modellare il nostro stato di salute quando siamo al PC. L'ipotesi è che ci sono dei momenti della giornata dove il nostro corpo si affatica di più e questo affaticamento può essere dovuto alla routine lavorativa oppure a fluttuazioni fisiologiche.

L'approccio giusto per chi vuole studiare questo fenomeno è mettere giù un piccolo disegno sperimentale. Infatti, la fase di modellazione viene dopo quella sperimentale a tutti gli effetti. Non si modella qualcosa di cui non si conosce nulla, e l'unico modo per conoscere qualcosa in maniera accurata è usare il metodo sperimentale.

L'esempio che ho menzionato è interessate - vediamo come applicare il metodo sperimentale per un progetto del genere. Ecco gli step

  1. Definizione dell'ipotesi
    Una ricerca si basa quasi sempre su una o più ipotesi sperimentali. A volte può essere solo esplorativa, ma la maggior parte hanno delle affermazioni fatte dai ricercatori che le sostiene. Nel nostro caso abbiamo l'abbiamo menzionata poc'anzi: ci sono dei momenti della giornata in cui si è più stanchi e questi momenti sono dovuti a ragioni di stress lavorativo o fluttuazioni fisiologiche.

    Il nostro obiettivo sarà quello di falsificare questa affermazione (principio della falsicabilità di Popper) andando a trovare prove a sostegno dell'opposto. Se queste prove sono importanti (statisticamente) allora siamo in grado di rifiutare l'ipotesi nulla (quella che descrive il mondo prima dell'esperimento) e accettare una ipotesi alternativa (quella su cui abbiamo raccolto abbastanza prove nell'esperimento).
  2. Preparazione
    La fase preparatoria ci permette di organizzare il flusso di attività e di reperire i vari strumenti che ci occorrono. Nel nostro caso dovremmo raccogliere i dati durante la giornata.

    Compreremo sensori da applicare al corpo per tracciare battito cardiaco, pressione sanguigna e saturazione del sangue. Inoltre, useremo dei software per tracciare le nostre attività al PC. Dobbiamo anche tener conto dell'orario della giornata: l'intuizione iniziale è quella che l'indice di ogni attività sarà un timestamp che indica l'orario preciso.
  3. Raccolta dati e esperimento
    In questa fase cerchiamo di osservare o causare l'effetto che falsifica la nostra ipotesi. Nel nostro caso, gli indicatori espressi dai sensori indossati e dai software usati ci informeranno di quello che accade realmente.

    Magari abbiamo un crollo di energie solo per quando parliamo con un gruppo specifico di persone a lavoro, oppure quando facciamo una attività che non ci piace molto. Ogni evento che prende luogo sarà misurato e memorizzato con l'apparato tecnico predisposto nel punto precedente.
  4. Analisi dei risultati
    Questa è la fase finale del processo (a meno che non si pubblica un paper al riguardo, in quel caso l'approccio si conclude con la fase di presentazione). Qui andremo ad applicare un numero ampio di tecniche di analisi dati per validare e chiarare i risultati della ricerca.


È solo in seguito all'analisi dei risultati del nostro studio che possiamo dire di aver compreso il problema che avevamo di fronte all'inizio. Aggiungo che questo è l'unico momento dove eticamente siamo giustificati a modellare il fenomeno osservato.

Utilizzo la parola eticamente perché, sebbene si possa fare modeling senza l'approccio descritto, è solo attraverso questo percorso che l'autore della ricerca ottiene quello che desidera sin dall'inizio: una maggiore comprensione del fenomeno.

Ogni altro tentativo è veicolato da obiettivi che esulano da una comprensione più profonda, come ad esempio fare bella figura verso qualcuno (il cosiddetto status game) oppure risolvere il problema di qualcun altro che a sua volta non ha l'esigenza di comprendere più profondamente quello di cui è interessato.

Voglio specificare che non c'è niente di male a non voler perseguire un obiettivo puramente conoscitivo. Tutti giochiamo lo status game, e a tutti fa piacere fare un buon lavoro ed essere pagati bene. Non è questo il punto. Il punto è che, se dovessi consigliare a mio figlio come condurre un progetto personale in un campo come questo, gli direi queste parole. Non c'è niente di male nel non farlo...ma sono dell'idea che se lo si fa se ne esce come delle persone migliori, professionalmente e personalmente.

Strumenti utili ad un analista per creare un dataset da zero

Stilerò una lista di metodiche che ho usato nel corso della mia carriera per raccogliere i dati per il mio progetto. Sviluppare abilità nell'applicare queste tecniche è utile a qualsiasi analista che vuole avere la possibilità di lavorare autonomamente sul suo progetto.

Web scraping

la regina delle tecniche digitali per il reperimento del dato. Oggigiorno non c'è nulla che non possa essere scraperato se si è abili abbastanza. Consiste nel raccogliere i dati che ci interessano da siti web o altre risorse online. Il dato dev'essere visibile da un web browser e dev'essere concepito per essere visionato da altri utenti.

Ci sono delle regole, però: non scraperare siti che esplicitamente chiedono di non essere scraperati - non è etico - e non scraperare assiduamente (ergo, non floodare il server). Quando scraperiamo non stiamo facendo altro che mandare richieste al server per ricevere il dato. Se lo facciamo troppo velocemente potremmo danneggiare il server in questione.

La barriera più imponente è rappresentata dai social media, ma ci sono comunque dei metodi validi che è possibile trovare online.
Gli strumenti che possiamo usare in Python sono

  • per piccoli progetti --> combinazione di BeautifulSoup + Requests (qui un ottimo template per iniziare)
  • per grossi progetti --> Scrapy
  • per qualsiasi esigenza di rendering JavaScript --> Playwright

Sondaggi

Spesso dimentichiamo che i sondaggi sono delle tecniche per la raccolta dati molto potenti. Ci sono siti web come Pollfish che permettono di inviare sondaggi e interviste su larga scala attraverso il web e con profilazione molto precisa.

È vero che otteniamo spesso dati più qualitativi attraverso di essi, ma per un data scientist un dato qualitativo non è altro che un dato simile a qualsiasi altro. Possiamo sempre utilizzarlo per la nostra ricerca.

Sensori fisici

L'utilizzo dei sensori fisici è molto cresciuto nell'ultimo decennio grazie alla crescita del settore IoT e dei wearable devices come Apple Watch e simili. Oggi possiamo facilmente mettere su una strumentazione fisica per la nostra raccolta dati, sia per le cose che per le persone.

Script

Se possediamo un sito web e siamo abili in Javascript o Php, possiamo scrivere degli script di tracciamento che, con il consenso dell'utente, possono raccogliere dati sul suo comportamento di utilizzo. Un po' come fanno Google Analytics e HotJar.

Aggiungo che raccogliere questo tipo di informazione può ricadere nella regolamentazione GDPR, quindi dobbiamo essere cauti e usare i dati responsabilmente.‍


In conclusione, devo menzionare che è anche possibile comprare dati, che differiscono in prezzo in base alla loro qualità. Spesso si tratta di dati difficilmente reperibili da un singolo individuo (come dati che provengono da zone profonde dello spazio oppure dagli abissi marini) e sono molto difficili da mettere insieme proprio a causa del fenomeno che descrivono.

Questa strada è spesso usata dai data scientist per avere una mole di dati più grande da unire ad un dataset già sviluppato da loro.