Rådgivning til nye og junior dataforskere

Hvad jeg ville have fortalt mig for nogle år siden

Billedkredit: Alice Truong

Motivering

For to år siden delte jeg min erfaring med at udføre datavidenskab i branchen. Forfatteren skulle oprindeligt være en privat refleksion for mig selv for at fejre min toårige twitterversary på Twitter, men jeg udgav det i stedet på Medium, fordi jeg tror, ​​det kunne være meget nyttigt for mange håbefulde dataforskere.

Spol frem til 2017, jeg har arbejdet hos Airbnb i lidt mindre end to år og er for nylig blevet en senior datavidenskabsmand - en branstitel, der bruges til at signalere, at man har erhvervet et vist niveau af teknisk ekspertise. Da jeg reflekterer over min rejse indtil videre og forestiller mig, hvad der kommer næste, skrev jeg endnu en gang et par lektioner, som jeg ville ønske, at jeg havde kendt i de tidligere dage af min karriere.

Hvis det tilsigtede publikum i mit forrige indlæg var for håbefulde datavidenskabsmænd og folk, der er helt nye på området, så er denne artikel for folk, der allerede er i marken, men lige er begyndt. Mit mål er ikke kun at bruge dette indlæg som en påmindelse for mig selv om de vigtige ting, jeg har lært, men også at inspirere andre, når de går ind på deres DS-karriere!

Hvem kritiske sti er du på?

Philip Guo, en fremragende akademisk og produktiv blogger, reflekterede over sin oplevelse af samspillet med forskellige mentorer gennem sine år som studerende, praktikant og forsker. I sit blotindlæg "Hvem kritiske sti er du på?" Gjorde han følgende bemærkninger:

Hvis jeg var på min mentors kritiske vej [til karrierefremskridt eller opfyldelse], ville de kæmpe hårdt for at sikre, at jeg fik den hjælp, jeg havde brug for for at få succes. Omvendt, hvis jeg ikke var på min mentors kritiske vej, blev jeg normalt overladt til at kæmpe for mig selv. […] Hvis du kommer på nogens kritiske vej, tvinger du dem til at binde din succes til deres, hvilket vil motivere dem til at løfte dig så hårdt som de kan.
Billedkredit: The Icefields Parkway // Daniel Han

Denne arbejdsdynamik er temmelig intuitiv, og jeg ville ønske, at jeg havde internaliseret det tidligere i min karriere, da jeg valgte projekter, valgte teams eller endda vurderede, hvilke mentorer eller virksomheder de skulle arbejde for.

Som et eksempel, mens jeg på Twitter, havde jeg altid ønsket at lære mere om maskinlæring, men mit team, til trods for at være meget datadrevet, havde stort set brug for datavidenskabsmænd til at fokusere på eksperimentdesign og produktanalyse. På trods af min bedste indsats fandt jeg det ofte vanskeligt at gifte sig med dette intellektuelle ønske med mit teams kritiske projekter.

Som et resultat, da jeg ankom Airbnb, tog jeg en bevidst beslutning om at fokusere på at blive medlem af et projekt / team, hvor ML er kritisk for dets succes. Jeg arbejdede med min manager for at identificere et par lovende muligheder, hvoraf den ene er at modellere levetidsværdien (LTV) for lister på Airbnb.

Dette projekt var ikke kun kritisk for vores forretnings succes, men også for udviklingen af ​​min karriere. Jeg lærte så meget om arbejdsgangen med at opbygge maskinlæringsmodel i skala, og der var ingen bedre måde at lære andet end at lære i sammenhæng med at løse et konkret forretningsproblem.

Uden tvivl var jeg meget heldig at finde et projekt, der var i overensstemmelse med mine ambitioner, og hvor jeg ville bygge mine færdigheder. Jeg tror, ​​at rammen for at vælge projekter på vores mentors kritiske veje kan gøre os i stigende grad "heldige" med at matche vores ambitioner med de rigtige projekter på arbejdet.

Princip, jeg lærte: Vi har alle de færdigheder, vi gerne vil udvikle, og intellektuelle interesser, som vi ville elske at forfølge. Det er vigtigt at evaluere, hvor godt vores ambitioner er i overensstemmelse med den kritiske sti for miljøet, vi er i. Find projekter, teams og virksomheder, hvis kritiske sti bedst tilpasses dit.

Valg af de rigtige værktøjer til problemet

Før Airbnb havde jeg kodet i R og dplyr i det meste af mit professionelle liv. Efter at have startet på LTV-projektet, indså jeg snart, at den leverbare ikke var et stykke analysekode, men snarere en læringspipeline til produktionsmaskiner. I betragtning af at det er meget lettere at bygge komplekse rørledninger i luftstrøm ved hjælp af Python, stod jeg overfor et dilemma - skulle jeg skifte fra R til Python?

Billedkilde: quickmeme.com (udover R eller Python er Excel også en alvorlig konkurrent )

Dette viser sig at være et meget almindeligt spørgsmål blandt dataforskere, da mange kæmpede for at beslutte, hvilket sprog de skulle vælge. For mig er der helt klart en omkostningsomskiftning, når den ene eller den anden er forpligtet. Jeg gik gennem fordele og ulemper for at forstå kompromiserne, men jo mere jeg tænkte over det, jo mere faldt jeg i fælden for beslutningslammelse. (Her er en underholdende tale, der demonstrerer dette koncept). Til sidst slap jeg fra denne lammelse efter at have læst dette svar på Reddit:

I stedet for at tænke på hvilket programmeringssprog du skal lære, skal du tænke på hvilket sprog der giver dig det rigtige sæt Domain Specific Sprog (DSL), der passer til dine problemer.

Egnetheden af ​​et værktøj er altid kontekstafhængig og problemspecifik. Det handler ikke om, hvorvidt jeg skal lære Python, det er om Python er det rigtige værktøj til jobbet. For at uddybe mere om dette punkt er her et par eksempler:

  • Hvis dit mål er at anvende de mest aktuelle, banebrydende statistiske metoder, er R sandsynligvis det bedre valg. Hvorfor? Fordi R er bygget af statistikere og for statistikere. I dag offentliggør akademikere deres forskning ikke kun i papirer, men også i R-pakker. Hver uge er der mange interessante nye R-pakker, der stilles til rådighed på CRAN, som denne.
  • På den anden side er Python fantastisk til at bygge produktionsdata-rørledninger, da det er et programmeringssprog til generelle formål. For eksempel kan man nemt indpakke en scikit-learning-model ved hjælp af Python UDF for at udføre distribueret score i Hive, orkestrere Airflow DAGs med kompleks logik eller skrive en Flask-webapp for at vise output fra modellen i en browser.

Til mit særlige projekt havde jeg brug for at bygge en produktionsmaskins læringsrørledning, og mit liv ville være meget lettere, hvis jeg gjorde det i Python. Til sidst rullede jeg ærmerne op og omfavnede denne nye udfordring!

Princip, jeg lærte: I stedet for at fikse en enkelt teknik eller et programmeringssprog, så spørg dig selv, hvad er det bedste sæt værktøjer eller teknikker, der kan hjælpe dig med at løse dit problem? Fokus på problemløsning, og værktøjerne kommer naturligt.

Opbygning af et læringsprojekt

Selvom jeg ikke har brugt Python til at arbejde med Data Science før, spillede jeg med sproget i en anden kapacitet. Jeg har dog aldrig rigtig lært Python-grundlæggende ordentligt. Som et resultat blev jeg bange, når kode blev organiseret i klasser, og jeg spekulerede altid på, hvad __init__.py blev brugt til.

For virkelig at lære det grundlæggende korrekt denne gang hentede jeg inspiration fra Anders Ericssons forskning om bevidst praksis:

Bevidst praksis er aktiviteter designet typisk af en lærer med det ene formål at effektivt forbedre bestemte aspekter af den enkeltes præstation.

Da jeg var min egen lærer, var indsigt fra Dr. Ericsson meget hjælpsom. For eksempel startede jeg mit ”læringsprojekt” ved at sammenlægge et sæt materialer, der var mest relevante til at gøre ML i Python. Denne proces tog mig et par uger, indtil jeg besluttede mig med en personlig læseplan. Jeg stresstestede dette pensum ved at bede erfarne Pythonistas om at gennemgå min plan. Alt dette forarbejde var beregnet til at sikre, at jeg ville være på den rigtige læringsvej.

Her er et glimt af min personaliserede læseplan

Når jeg havde et klart defineret pensum, brugte jeg følgende strategier til bevidst at øve på jobbet:

  • Øvelse gentagne gange: Jeg tvang mig til at udføre verdslige, ikke missionskritiske analyser i Python i stedet for i R. Dette trækkede oprindeligt min produktivitet, men det tvang mig til at blive fortrolig med den grundlæggende API for pandaer, uden byrden at skulle bruge overhold en presserende frist.
  • Opret feedback-loop: Jeg fandt muligheder for at gennemgå andre menneskers kode og rette små fejl, når det var relevant. For eksempel prøvede jeg at forstå, hvordan vores interne Python-biblioteker blev designet før jeg brugte dem. Når jeg skrev min egen kode, forsøgte jeg også at refaktorere den flere gange og gøre den mere læsbar for alle.
  • Lær ved at chunking og huske: I slutningen af ​​hver uge skrev jeg min ugentlige fremgang, som omfattede de vigtige ressourcer, jeg studerede i den uge, koncepter, jeg lærte, og eventuelle større takeaways i løbet af denne uge. Ved at huske de materialer, jeg lærte, var jeg i stand til at internalisere koncepterne bedre.

Langsomt og gradvist blev jeg bedre hver uge. Men det var bestemt ikke let: der var tidspunkter, hvor jeg måtte slå grundlæggende syntaks op i både R og Python, fordi jeg skiftede frem og tilbage mellem de to sprog. Når det er sagt, huskede jeg, at dette er en langsigtet investering, og der vil blive udbetalt udbytte, da jeg dykkede ind i ML-projektet.

Princip, jeg lærte: Som understøttet af mange felteksperimenter, før du dykker ned i et projekt, hjælper planlægning foran dig med at øve mere bevidst. Gentagelse, chunking, tilbagekaldelse og feedback er blandt de mest nyttige aktiviteter til at styrke læring.

Samarbejde med erfarne dataforskere

En af nøgleingredienserne i bevidst praksis er at modtage rettidig og handlingsrig feedback. Ingen gode atleter, musikere eller matematikere er i stand til at opnå storhed uden coaching eller målrettet feedback.

En almindelig egenskab, som jeg har observeret fra mennesker, der har en stærk væksttankegang, er, at de generelt ikke skammer sig over at anerkende det, de ikke ved, og de beder konstant om feedback.

Når jeg ser tilbage på min egen akademiske og professionelle karriere indtil videre, har jeg mange gange i fortiden censureret mine spørgsmål, fordi jeg ikke ønskede at virke ude af stand. Men med tiden indså jeg, at denne holdning var temmelig skadelig - i det lange løb er de fleste tilfælde af selvcensur gået glip af mulighederne for at lære i stedet for skam.

Billedkilde: edutopia - Det er vigtigt at have en væksttankegang!

Før dette projekt havde jeg meget lidt erfaring med at sætte maskinlæringsmodeller i produktion. Af de mange beslutninger, jeg tog for projektet, var en af ​​de bedste beslutninger at erklære tidligt og skamløst overfor mine samarbejdspartnere, at jeg ved meget lidt om ML-infrastruktur, men at jeg ville lære. Jeg lovede dem, men efterhånden som jeg blev mere vidende, ville jeg gøre mig nyttig for holdet.

Dette viste sig at være en temmelig god strategi, fordi folk generelt elsker at dele deres viden, især når de ved, at deres mentorskab til sidst vil gavne dem selv. Nedenfor er et par eksempler, som jeg ikke ville have lært så hurtigt uden vejledning fra mine partnere:

  • Scikit-Learn-rørledninger: Min samarbejdspartner foreslog mig, at jeg kunne gøre min kode mere modulopbygget ved at vedtage Sklearns pipeline-konstruktion. I det væsentlige definerer rørledninger en række datatransformationer, der er konsistente på tværs af træning og score. Dette værktøj gjorde min kode renere, mere genanvendelig og lettere kompatibel med produktionsmodeller.
  • Modeldiagnostik: Da vores forudsigelsesproblem involverer tid, lærte min samarbejdspartner mig, at typisk krydsvalidering ikke vil fungere, da vi kunne risikere at forudsige fortiden ved hjælp af fremtidige data. I stedet ville en bedre metode være at bruge krydsvalidering af tidsserier. Jeg lærte også forskellige diagnostiske teknikker, såsom liftkort og forskellige andre evalueringsmetrikker, såsom SMAPE.
  • Infrastruktur til maskinindlæring: Med hjælp fra ML-infra-ingeniører lærte jeg at styre pakkeafhængighed via virtualenvs, hvordan man serialiserer modeller ved hjælp af pickling, og hvordan man gør modellen tilgængelig på scoretid ved hjælp af Python UDF'er. Alle disse er datatekniske færdigheder, som jeg ikke kendte før.

Da jeg lærte flere nye koncepter, var jeg ikke kun i stand til at anvende dem til mit eget projekt, men jeg var i stand til at drive spændende diskussioner med teamet om maskinlæringsinfrastruktur, så de kan bygge bedre ML-værktøjer til dataforskere. Dette skaber en dydig cyklus, fordi den viden, der blev delt med mig, gjorde mig til en bedre partner og samarbejdspartner.

Princip, jeg lærte: I det lange løb er de fleste tilfælde af selvcensur glip af muligheder for at lære i stedet for skam. Angiv tidligt og skamløst dit ønske om at lære, og gør dig selv nyttig, når du bliver bedre.

Undervisning og evangelisering

Da jeg kom nærmere på at sætte min model i produktion, bemærkede jeg, at en masse af de færdigheder, jeg fandt op, kunne være meget værdifulde for andre datavidenskabsmænd på vores team. Efter at have været kandidatstuderende i årevis, vidste jeg altid, at jeg havde en passion for undervisning, og jeg lærte altid mere om emnet, da jeg blev lærer. Richard Feynman, den afdøde nobelprispris i fysik og en fænomenal lærer, talte om hans syn på undervisning:

Richard Feynman blev engang bedt af et Caltech-fakultetsmedlem om at forklare, hvorfor halvdelen af ​​partikler overholder Fermi Dirac-statistikker. Han rejste sig til udfordringen og sagde, ”Jeg vil forberede en førsteårsforedrag om det.” Men et par dage senere sagde han til fakultetsmedlemmet, ”Du ved, jeg kunne ikke gøre det. Jeg kunne ikke reducere det til nybegynderniveauet. Det betyder, at vi virkelig ikke forstår det. ”

Dette var virkelig inspirerende - hvis du ikke kan reducere emnet til dets kerne og gøre det tilgængeligt for andre, betyder det, at du ikke rigtig forstår det. Når jeg ved, at undervisning i disse færdigheder kan forbedre min forståelse, søger jeg muligheder for omhyggeligt at dokumentere mine modelimplementeringer, give læringsfrokost og opfordre andre til at prøve værktøjerne. Dette var en win-win, fordi evangelisering øger opmærksomheden, hvilket i tern hjælper med at drive værktøjsoptagelse på tværs af holdet.

Fra slutningen af ​​september er jeg begyndt at samarbejde med vores interne Data University-team for at forberede en række klasser på vores interne ML-værktøjer. Jeg er ikke helt sikker på, hvor dette vil gå, men jeg er meget spændt over at køre mere ML-uddannelse på Airbnb.

Til sidst vil jeg afslutte dette afsnit med en tweet fra Hadley Wickham:

Princip, jeg lærte: Undervisning er den bedste måde at teste din forståelse af emnet og den bedste måde at forbedre dine færdigheder på. Når du lærer noget værdifuldt, skal du dele det med andre. Du behøver ikke altid at oprette ny software, der forklarer, hvordan eksisterende værktøjer fungerer, kan også være meget værdifulde.

Tænk på dit trin K + 1 på trin K

Fra at fokusere på mine egne leverancer, at samarbejde med ML-infrastrukturteamet, til endelig at undervise og give andre datavidenskabsmænd mulighed for at lære mere om ML-værktøjer, er jeg virkelig glad for, at omfanget af mit originale projekt var meget større, end det var et par måneder siden. Ikke desto mindre forventede jeg aldrig dette i første omgang.

Da jeg reflekterede over udviklingen i dette projekt, var en ting, der var forskellig fra mine tidligere projekter, at jeg altid havde en lille utilfredshed med den aktuelle situation, og jeg har altid ønsket at gøre det lidt bedre. Den mest veltalende måde at karakterisere dette er fra Claude Shannons essay:

Billedkilde: Bogomslag fra “A Mind at Play: How Claude Shannon opfandt informationssiden” af Jimmy Soni, Rob Goodman
”Der er ideen om utilfredshed. Med dette mener jeg ikke en pessimistisk utilfredshed med verden - vi kan ikke lide, hvordan tingene er - jeg mener en konstruktiv utilfredshed. Ideen kunne komme til udtryk i ordene: Dette er OK, men jeg tror, ​​at tingene kunne gøres bedre. Jeg tror, ​​der er en pænere måde at gøre dette på. Jeg tror, ​​tingene kunne forbedres lidt. Med andre ord er der konstant en let irritation, når ting ikke ser helt rigtigt ud; og jeg tror, ​​at utilfredshed i dag er en vigtig drivkraft hos gode forskere. ”

Jeg er på ingen måde en kvalificeret videnskabsmand (selvom det på en eller anden måde er i min jobtitel), men jeg synes, at karakteriseringen af ​​en lille utilfredshed er ganske fortællende for, om du vil være i stand til at udvide virkningen af ​​dit projekt. I løbet af mit projekt, hver gang jeg er på trin K, ville jeg naturligvis begynde at tænke over, hvad jeg skal gøre for trin K + 1 og videre:

  • Fra “Jeg ved ikke hvordan man bygger en produktionsmodel, lad mig finde ud af hvordan” til “Jeg tror, ​​at værktøjerne kan forbedres, her er mine smertepunkter, forslag og feedback til, hvordan man gør værktøjerne bedre”, reformed jeg mig selv fra en kunde til en partner med ML-infrastrukturteam.
  • Fra "lad mig lære værktøjerne, så jeg kan være god til det" til "lad os gøre disse værktøjer mere tilgængelige for alle de andre datavidenskabsmænd, der er interesseret i ML", omformulerede jeg mig selv fra en partner til en evangeliser.

Jeg synes, denne tankegang er yderst hjælpsom - brug din gode smag og let utilfredshed til at brænde dine fremskridt med vedholdenhed. Når det er sagt, tror jeg, at denne utilfredshed ikke kan fremstilles, og kun kan komme fra at arbejde på et problem, du er interesseret i, hvilket bringer til mit sidste punkt.

Princip, jeg lærte: Vær opmærksom på din indre utilfredshed, når du arbejder på et projekt. Dette er ledetråde til, hvordan du kan forbedre og skalere dit projekt til det næste niveau.

Afsked tanker: Du og dit arbejde

For nylig stødte jeg på et foredrag fra Richard Hamming, som er en amerikansk matematiker, der er kendt for mange af sine videnskabelige bidrag, herunder Hamming-kode og Hamming-afstand. Foredraget fik titlen You And Your Research, hvor Dr. Hamming sagde, at det meget godt kan omdøbes til “Du og din karriere”.

Da han delte sine historier, stod et par vigtige punkter ud for mig.

Hvis det, du laver, ikke er vigtigt og ikke sandsynligt, at det er vigtigt, hvorfor gør du det? Du skal arbejde på vigtige problemer. Jeg tilbragte fredag ​​eftermiddag i årevis med at tænke på de vigtige problemer inden for mit felt [det er 10% af min arbejdstid].
Lad mig advare dig om vigtige problemer, vigtighed er ikke konsekvensen, nogle problemer er ikke vigtige, fordi du ikke har fået et angreb. Problemets betydning afhænger i vid udstrækning af, om du fik en måde at angribe problemet.
Hele dette kursus, jeg forsøger at lære dig noget om stil og smag, så du kan være i stand til at få noget lyst på, når problemet er rigtigt, hvilket problem der er rigtigt, hvordan man gør det. Det rigtige problem på det rigtige tidspunkt på den rigtige måde tæller, og intet andet tæller. Ikke noget.

Når Dr. Hamming taler om vigtighed, mener han problemer, der er vigtige for dig. For ham var det videnskabelige problemer, og for mange af os var det måske noget andet. Han talte også om vigtigheden af ​​at have en angrebsplan. Hvis du ikke har en plan, betyder problemet ikke noget, hvor store konsekvenserne der er. Til sidst nævnte han at gøre det med din egen unikke stil og smag.

Hans bar for at lave godt arbejde er ekstremt høj, men det er værd at forfølge. Når du finder dit vigtige problem, vil du naturligvis prøve at gøre det bedre og gøre det mere virkningsfuldt; du vil finde måder at lære andre om dens betydning; du vil bruge tid på at lære af andre store mennesker og bygge dit håndværk.

Hvad er et problem, der er vigtigt for dig, der er på din kritiske vej?

Jeg vil gerne takke Jason Goodman og Tim Kwan for at have gennemgået mit indlæg og givet mig feedback