Consigli per i nuovi e junior data scientist

Cosa mi sarei detto qualche anno fa

Credito d'immagine: Alice Truong

Motivazione

Due anni fa, ho condiviso la mia esperienza nel campo della scienza dei dati nel settore. Lo scritto doveva originariamente essere un riflesso privato per me stesso per celebrare il mio twitterversary di due anni su Twitter, ma l'ho invece pubblicato su Medium perché credo possa essere molto utile per molti aspiranti data scientist.

Velocemente fino al 2017, ho lavorato su Airbnb per un po 'meno di due anni e recentemente sono diventato uno scienziato di dati senior - un titolo di settore utilizzato per segnalare che si è acquisito un certo livello di competenza tecnica. Mentre rifletto sul mio viaggio finora e immagino che cosa sta per accadere, ho scritto ancora una volta alcune lezioni che avrei voluto conoscere nei primi giorni della mia carriera.

Se il pubblico previsto per il mio precedente post era per aspiranti scienziati dei dati e persone completamente nuove sul campo, allora questo articolo è per le persone che sono già sul campo ma che hanno appena iniziato. Il mio obiettivo è non solo usare questo post come promemoria per me stesso sulle cose importanti che ho imparato, ma anche ispirare gli altri mentre intraprendono la loro carriera in DS!

Di chi sei il percorso critico?

Philip Guo, un eccezionale blogger accademico e prolifico, ha riflettuto sulla sua esperienza interagendo con vari mentori durante i suoi anni come studente, stagista e ricercatore. Nel suo post sulla macchia "Di chi sei il percorso critico?", Fece la seguente osservazione:

Se fossi sul percorso critico del mio mentore [per avanzamento o realizzazione della carriera], avrebbero combattuto duramente per assicurarsi di ottenere l'aiuto di cui avevo bisogno per avere successo. Al contrario, se non ero sul percorso critico del mio mentore, di solito ero lasciato a badare a me stesso. […] Se prendi il percorso critico di qualcuno, lo costringi a legare il tuo successo al loro, il che li motiverà a sollevarti il ​​più forte possibile.
Credito immagine: The Icefields Parkway // Daniel Han

Questa dinamica di lavoro è piuttosto intuitiva e vorrei averla interiorizzata all'inizio della mia carriera quando ho scelto progetti, selezionato team o anche valutato per quali mentori o aziende per cui lavorare.

Ad esempio, mentre ero su Twitter, avevo sempre desiderato saperne di più sull'apprendimento automatico, ma il mio team, nonostante fosse molto guidato dai dati, aveva in gran parte bisogno di scienziati dei dati per concentrarsi sulla progettazione di esperimenti e sull'analisi dei prodotti. Nonostante i miei migliori sforzi, ho spesso trovato difficile sposare questo desiderio intellettuale con i progetti critici del mio team.

Di conseguenza, quando sono arrivato ad Airbnb, ho preso la decisione consapevole di concentrarmi sull'adesione a un progetto / team in cui ML è fondamentale per il suo successo. Ho lavorato con il mio manager per identificare alcune opportunità promettenti, una delle quali è quella di modellare il valore della vita (LTV) delle inserzioni su Airbnb.

Questo progetto non è stato solo fondamentale per il successo della nostra attività, ma anche per lo sviluppo della mia carriera. Ho imparato così tanto sul flusso di lavoro di costruzione di modelli di apprendimento automatico su larga scala e non c'era modo migliore per imparare se non quello di apprendere nel contesto della risoluzione di un problema aziendale concreto.

Indubbiamente, sono stato molto fortunato a trovare un progetto in linea con le mie aspirazioni e dove volevo sviluppare le mie capacità. Credo che il quadro di selezione dei progetti sui percorsi critici dei nostri mentori possa renderci sempre più "fortunati" nel tempo nel far combaciare le nostre aspirazioni con i progetti giusti al lavoro.

Principio che ho appreso: tutti abbiamo competenze che vorremmo sviluppare e interessi intellettuali che vorremmo perseguire. È importante valutare in che modo le nostre aspirazioni si allineano al percorso critico dell'ambiente in cui ci troviamo. Trova progetti, team e aziende il cui percorso critico si allinea meglio al tuo.

Scegliere gli strumenti giusti per il problema

Prima di Airbnb, avevo programmato R e dplyr per gran parte della mia vita professionale. Dopo aver iniziato il progetto LTV, ho presto capito che il risultato non era un pezzo di codice di analisi, ma piuttosto una pipeline di machine learning di produzione. Dato che è molto più semplice costruire pipeline complesse in Airflow usando Python, mi sono trovato di fronte a un dilemma: dovrei passare da R a Python?

Fonte immagine: quickmeme.com (oltre a R o Python, Excel è anche un serio contendente )

Questa risulta essere una domanda molto comune tra i data scientist, poiché molti hanno faticato a decidere quale lingua scegliere. Per me, c'è chiaramente un costo di commutazione una volta impegnato l'uno o l'altro. Ho esaminato i pro e i contro per capire i compromessi, ma più ci pensavo, più cadevo nella trappola della paralisi delle decisioni. (Ecco un discorso divertente che dimostra questo concetto). Alla fine, sono fuggito da questa paralisi dopo aver letto questa risposta su Reddit:

Invece di pensare a quale linguaggio di programmazione imparare, pensa a quale lingua ti offre il giusto set di lingue specifiche di dominio (DSL) che si adattano ai tuoi problemi.

L'adeguatezza di uno strumento dipende sempre dal contesto e dal problema specifico. Non si tratta di sapere se dovrei imparare Python, ma se Python è lo strumento giusto per il lavoro. Per approfondire questo punto, ecco alcuni esempi:

  • Se il tuo obiettivo è applicare i metodi statistici più attuali e all'avanguardia, è probabile che R sia la scelta migliore. Perché? Perché R è costruito da statistici e per statistici. Oggi gli accademici pubblicano le loro ricerche non solo su articoli ma anche in pacchetti R. Ogni settimana, ci sono molti nuovi interessanti pacchetti R resi disponibili su CRAN, come questo.
  • D'altra parte, Python è ottimo per la costruzione di pipeline di dati di produzione, poiché è un linguaggio di programmazione generico. Ad esempio, si può facilmente avvolgere un modello di apprendimento di scikit usando Python UDF per eseguire punteggi distribuiti in Hive, orchestrare DAG Airflow con logica complessa o scrivere un'app Web Flask per mostrare l'output del modello in un browser.

Per il mio progetto specifico, dovevo costruire una pipeline di machine learning di produzione e la mia vita sarebbe molto più semplice se l'avessi fatto in Python. Alla fine, mi sono rimboccato le maniche e ho abbracciato questa nuova sfida!

Principio che ho imparato: invece di fissare una singola tecnica o un linguaggio di programmazione, chiediti: qual è il miglior set di strumenti o tecniche che ti aiuteranno a risolvere il tuo problema? Concentrati sulla risoluzione dei problemi e gli strumenti arriveranno naturalmente.

Costruire un progetto di apprendimento

Anche se non ho mai usato Python per lavorare con Data Science prima, ho giocato con il linguaggio in una diversa capacità. Tuttavia, non ho mai davvero imparato i fondamenti di Python in modo corretto. Di conseguenza, mi sono spaventato quando il codice è stato organizzato in classi e mi sono sempre chiesto a cosa servisse __init__.py.

Per imparare davvero i fondamenti questa volta, ho preso ispirazione dalla ricerca di Anders Ericsson sulla Deliberate Practice:

La Pratica deliberata è attività progettata, in genere da un insegnante, al solo scopo di migliorare efficacemente aspetti specifici delle prestazioni di un individuo.

Dato che ero il mio insegnante, le intuizioni del Dr. Ericsson sono state molto utili. Ad esempio, ho dato il via al mio "progetto di apprendimento" curando una serie di materiali che erano più rilevanti per fare ML in Python. Questo processo mi ha richiesto alcune settimane fino a quando non ho optato per un curriculum personalizzato. Sottolineo che ho testato questo curriculum chiedendo ai pitonisti esperti di rivedere il mio piano. Tutto questo pre-lavoro aveva lo scopo di garantire che sarei sul giusto percorso di apprendimento.

Ecco un assaggio del mio curriculum personalizzato

Una volta che avevo un curriculum chiaramente definito, ho usato le seguenti strategie per esercitarmi deliberatamente sul lavoro:

  • Pratica ripetutamente: mi sono costretto a eseguire analisi banali e non mission-critical in Python invece che in R. Questo inizialmente ha ridotto la mia produttività, ma mi ha costretto a familiarizzare con l'API di base dei panda, senza l'onere di dover rispettare una scadenza urgente.
  • Crea feedback Loop: ho trovato l'opportunità di rivedere il codice di altre persone e correggere piccoli bug quando appropriato. Ad esempio, ho cercato di capire come sono state progettate le nostre librerie Python interne prima di usarle. Quando ho scritto il mio codice, ho anche provato a riformattarlo più volte e renderlo più leggibile per tutti.
  • Impara a pezzi e ricordando: alla fine di ogni settimana, ho scritto i miei progressi settimanali, che includevano le risorse importanti che ho studiato in quella settimana, i concetti che ho appreso e tutti i principali takeaway durante quella settimana. Ricordando i materiali che ho imparato, sono stato in grado di interiorizzare meglio i concetti.

Lentamente e gradualmente, sono migliorato ogni settimana. Certamente non è stato facile: ci sono stati momenti in cui ho dovuto cercare la sintassi di base sia in R che in Python perché stavo passando avanti e indietro tra le due lingue. Detto questo, ho tenuto presente che si tratta di un investimento a lungo termine e che i dividendi verranno pagati mentre mi immergo nel progetto ML.

Principio che ho imparato: supportato da molti esperimenti sul campo, prima di immergerti in un progetto, pianificare in anticipo ti aiuta a esercitarti più deliberatamente. Ripetersi, ritagliare, richiamare e ottenere feedback sono tra le attività più utili per rafforzare l'apprendimento.

Collaborazione con esperti data scientist

Uno degli ingredienti chiave della pratica deliberata è ricevere feedback tempestivi e attuabili. Nessun grande atleta, musicista o matematico è in grado di raggiungere la grandezza senza coaching o feedback mirato.

Un tratto comune che ho osservato da persone che hanno una forte mentalità di crescita è che generalmente non si vergognano di riconoscere ciò che non sanno e chiedono costantemente feedback.

Guardando indietro alla mia carriera accademica e professionale finora, molte volte in passato ho autocensurato le mie domande perché non volevo apparire incapace. Tuttavia, nel tempo mi sono reso conto che questo atteggiamento era piuttosto dannoso - a lungo termine, la maggior parte dei casi di autocensura sono occasioni mancate di apprendimento piuttosto che vergogna.

Fonte immagine: edutopia - È importante avere una mentalità di crescita!

Prima di questo progetto, avevo pochissima esperienza nel mettere in produzione modelli di machine learning. Tra le molte decisioni che ho preso per il progetto, una delle migliori decisioni è stata quella di dichiarare presto e spudoratamente ai miei collaboratori che so ben poco dell'infrastruttura ML, ma che volevo imparare. Ho promesso loro, tuttavia, man mano che diventavo più ben informato, mi sarei reso utile per la squadra.

Questa si è rivelata una strategia abbastanza buona, perché le persone generalmente amano condividere le loro conoscenze, soprattutto quando sanno che il loro tutoraggio alla fine ne trarrà beneficio. Di seguito sono riportati alcuni esempi che non avrei imparato così rapidamente senza la guida dei miei partner:

  • Pipeline di Scikit-Learn: il mio collaboratore mi ha suggerito di poter rendere il mio codice più modulare adottando il costrutto della pipeline di Sklearn. In sostanza, le pipeline definiscono una serie di trasformazioni di dati coerenti tra formazione e punteggio. Questo strumento ha reso il mio codice più pulito, più riutilizzabile e più facilmente compatibile con i modelli di produzione.
  • Diagnostica del modello: dato che il nostro problema di previsione comporta tempo, il mio collaboratore mi ha insegnato che la convalida incrociata tipica non funzionerà, poiché potremmo correre il rischio di prevedere il passato utilizzando dati futuri. Invece, un metodo migliore sarebbe quello di utilizzare la validazione incrociata delle serie temporali. Ho anche imparato diverse tecniche diagnostiche come il diagramma di sollevamento e varie altre metriche di valutazione come SMAPE.
  • Infrastruttura di apprendimento automatico: con l'aiuto degli ingegneri infra ML, ho imparato a gestire la dipendenza dei pacchetti tramite virtualenvs, come serializzare i modelli utilizzando il decapaggio e come rendere disponibile il modello al momento del calcolo del punteggio utilizzando UDF Python. Tutte queste sono abilità di ingegneria dei dati che non conoscevo prima.

Quando ho appreso nuovi concetti, non solo sono stato in grado di applicarli per il mio progetto, ma sono stato in grado di condurre discussioni coinvolgenti con il team dell'infrastruttura di apprendimento automatico in modo che possano costruire strumenti ML migliori per i data scientist. Questo crea un ciclo virtuoso perché la conoscenza condivisa con me mi ha reso un partner e un collaboratore migliore.

Principio che ho imparato: a lungo termine, la maggior parte dei casi di autocensura sono occasioni mancate di apprendimento piuttosto che vergogna. Dichiara in anticipo e senza vergogna il tuo desiderio di apprendere e renditi utile man mano che diventi migliore.

Insegnare ed evangelizzare

Mentre mi avvicinavo alla messa in produzione del mio modello, ho notato che molte delle competenze acquisite potrebbero essere molto utili per altri data scientist del nostro team. Essendo stato un istruttore studente laureato per anni, ho sempre saputo di avere una passione per l'insegnamento e ho sempre imparato di più sull'argomento quando sono diventato insegnante. Richard Feynman, il recente premio Nobel per la fisica e un insegnante fenomenale, ha parlato della sua opinione sull'insegnamento:

Richard Feynman una volta è stato invitato da un membro della facoltà di Caltech a spiegare perché la rotazione di metà particelle obbedisce alle statistiche di Fermi Dirac. Affrontando la sfida, ha detto: "Preparerò una lezione di matricola su di essa". Ma pochi giorni dopo ha detto al membro della facoltà, "Sai, non potevo farlo. Non sono riuscito a ridurlo a livello di matricola. Ciò significa che non lo capiamo davvero. "

Questo è stato davvero stimolante: se non riesci a ridurre il soggetto al suo interno e renderlo accessibile agli altri, ciò significa che non lo capisci davvero. Sapendo che insegnare queste abilità può migliorare la mia comprensione, cerco opportunità per documentare attentamente le implementazioni del mio modello, fornire pranzi di apprendimento e incoraggiare gli altri a provare gli strumenti. Questa è stata una vittoria perché l'evangelizzazione aumenta la consapevolezza, il che aiuta a guidare l'adozione degli strumenti in tutto il team.

A partire da fine settembre, ho iniziato a collaborare con il nostro team interno Data University per preparare una serie di lezioni sui nostri strumenti ML interni. Non sono esattamente sicuro di dove andrà, ma sono molto entusiasta di guidare più istruzione ML su Airbnb.

Infine, vorrei terminare questa sezione con un tweet di Hadley Wickham:

Principio che ho imparato: l'insegnamento è il modo migliore per testare la tua comprensione della materia e il modo migliore per migliorare le tue abilità. Quando impari qualcosa di prezioso, condividerlo con gli altri. Non è sempre necessario creare un nuovo software, spiegando in che modo gli strumenti esistenti possono anche essere di grande valore.

Al passaggio K, pensa al tuo passaggio K + 1

Dal concentrarsi sui miei risultati finali, alla collaborazione con il team di infrastruttura ML, alla fine di insegnare e consentire ad altri data scientist di saperne di più sugli strumenti ML, sono davvero felice che l'ambito del mio progetto originale fosse molto più ampio di quanto non fosse qualche mese fa. Tuttavia, devo ammetterlo, non l'ho mai anticipato.

Mentre riflettevo sull'evoluzione di questo progetto, una cosa che era diversa dai miei precedenti progetti era che avevo sempre avuto una leggera insoddisfazione per lo stato attuale delle cose e volevo sempre migliorarlo un po '. Il modo più eloquente per caratterizzarlo è dal saggio di Claude Shannon:

Fonte immagine: Copertina del libro da
"C'è l'idea dell'insoddisfazione. Con questo non intendo un'insoddisfazione pessimistica del mondo - non ci piace come stanno le cose - intendo un'insoddisfazione costruttiva. L'idea potrebbe essere espressa con le parole, va bene, ma penso che le cose potrebbero essere fatte meglio. Penso che ci sia un modo più ordinato per farlo. Penso che le cose potrebbero essere leggermente migliorate. In altre parole, c'è continuamente una leggera irritazione quando le cose non sembrano del tutto giuste; e penso che l'insoddisfazione dei giorni nostri sia una forza trainante chiave per i bravi scienziati. "

Non sono affatto uno scienziato qualificato (anche se questo è in qualche modo nel mio titolo professionale), ma penso che la caratterizzazione di una leggera insoddisfazione sia abbastanza indicativa per sapere se sarai in grado di estendere l'impatto del tuo progetto. Durante il mio progetto, ogni volta che sono al passaggio K, naturalmente inizierei a pensare a cosa fare per il passaggio K + 1 e oltre:

  • Da "Non so come costruire un modello di produzione, fammi capire come" a "Penso che gli strumenti possano essere migliorati, ecco i miei punti deboli, suggerimenti e feedback su come migliorare gli strumenti", ho riformulato me stesso da un cliente a un partner con il team di infrastrutture ML.
  • Da "Fammi imparare gli strumenti in modo che io possa essere bravo a farlo" a "Rendere questi strumenti più accessibili per tutti gli altri Data Scientist interessati alla ML", mi sono rimodellato da un partner a un evangelizzatore.

Penso che questa mentalità sia estremamente utile: usa il tuo buon gusto e una leggera insoddisfazione per alimentare i tuoi progressi con perseveranza. Detto questo, penso che questa insoddisfazione non possa essere prodotta e può venire solo dal lavorare su un problema a cui tieni, che porta al mio ultimo punto.

Principio che ho imparato: presta attenzione alla tua insoddisfazione interiore quando lavori su un progetto. Questi sono indizi su come migliorare e ridimensionare il progetto al livello successivo.

Pensieri di separazione: tu e il tuo lavoro

Di recente mi sono imbattuto in una conferenza di Richard Hamming, un matematico americano noto per molti dei suoi contributi scientifici, tra cui il codice di Hamming e la distanza di Hamming. La conferenza è stata intitolata You And Your Research, in cui il Dr. Hamming ha affermato che può benissimo essere ribattezzato come "You And Your Career".

Mentre condivideva le sue storie, alcuni punti importanti si sono distinti per me.

Se quello che stai facendo non è importante, non è probabile che sia importante, perché lo stai facendo? Devi lavorare su problemi importanti. Ho trascorso venerdì pomeriggio per anni a pensare agli importanti problemi nel mio campo [che è il 10% del mio orario di lavoro].
Lascia che ti avverta di problemi importanti, l'importanza non è la conseguenza, alcuni problemi non sono importanti perché non hai avuto un attacco. L'importanza del problema, in larga misura, dipende se hai un modo per attaccare il problema.
Durante l'intero corso, sto cercando di insegnarti qualcosa sullo stile e sul gusto, quindi sarai in grado di avere un po 'di idea su quando il problema è giusto, quale problema è giusto, come procedere. Il problema giusto al momento giusto nel modo giusto conta e nient'altro conta. Niente.

Quando il dottor Hamming parla di importanza, intende i problemi che sono importanti per te. Per lui, si trattava di problemi scientifici e, per molti di noi, potrebbe essere qualcosa di diverso. Ha anche parlato dell'importanza di avere un piano di attacco. Se non hai un piano, il problema non ha importanza, per quanto grandi siano le conseguenze. Infine, ha menzionato di averlo fatto con il tuo stile e gusto unici.

Il suo bar per fare un ottimo lavoro è estremamente alto, ma vale la pena perseguirlo. Quando trovi il tuo problema importante, proverai naturalmente a migliorarlo e renderlo più efficace; troverai modi per insegnare agli altri il suo significato; passerai il tempo ad imparare da altre persone fantastiche e a costruire il tuo mestiere.

Qual è un problema importante per te nel tuo percorso critico?

Vorrei ringraziare Jason Goodman e Tim Kwan per aver esaminato il mio post e avermi dato un feedback