Data Science – sve što ste hteli da znate o tome
Nakon što smo krajem marta održali jedan meetup na temu “Data Science – šta je to”, javilo mi se puno ljudi da im pošaljem neke uvodne materijale koji bi im pomogli da krenu sa učenjem.
Trebalo mi je mnogo vremena da sednem i krenem da sastavljam listu, jer izvora je mnogo, i ono u šta sam duboko sigurna je da ću na kraju završiti sa rečenicom – najbolje je da kreneš sa nekim realnim primerom koji je tebi zanimljiv, jer se najviše uči kroz vežbu. Pritome, ne postoji neko zlatno pravilo po kome bi taj put učenja trebalo da se odvija, pa je baš nezahvalno i napraviti neki spisak materijala i smernica, a osigurati da se time ne unese “bias”, odnosno prokletstvo tog “usmerenog” kretanja, jer sam ja tako učila, pa jedino tako može. Pored toga, ja sam neko ko se isključivo bavi primenom napredne analitike u okviru biznisa, gde je glavni fokus izmeriti performanse pomoću neke mere uspeha kao što su profit, ili troškovi. A napredna analitika se može koristiti u raznoraznim naukama i oblastima istraživanja, i ne mora biti vezana za poslovni svet. Međutim, došla sam na jednu sjajnu ideju da šta god ovde napisala, dozvolim kolegama iz struke da ovu listu prošire, ili da i oni podele svoje iskustvo, tako da ih ovim putem pozivam da daju svoj mali doprinos, i tako postanu pokretači velikih stvari.
FAQ su neizbežna sekcija ovog teksta, i doći ćemo do njih, ali pre toga bih želela da se osvrnem na neke osnove koje je neophodno da spomenem, kako bih pozvala na razmišljanje, i možda probudila inspiraciju onima koji bi želeli da se upuste u Data Science vode.
Jedan ooogroman disclaimer na samom početku – ako očekujete od ovog teksta da vam bude kristalno jasno kako da sutra krenete i šta prvo da učite – budite svesni da je to praktično nemoguće. Pored toga što sadržaj, kompleksnost i sfera Data Science-a kojom ćete se baviti pre svega zavisi od vašeg interesovanja i predznanja, Data Science je toliko široka oblast da bi bilo potrebno proći ceo jedan program u nivou osnovnih akademskih studija da biste mogli da kažete da imate neku baznu osnovu. Ono što je moj cilj je da vam ovim tekstom pomognem(o) da razvijete pristup učenju, da budete u svakom trenutku svesni nekih činjenica koje ovde navodimo, a materijale i kurseve ćete potom tražiti i sami. ? Međutim, neka lista proverenih kurseva nije na odmet, tako da ćemo je prikačiti uz ovaj tekst.
Preduslov za sve
Koliko god privlačan bio, Data Science nije za svakog. Kao i bilo koje drugo zanimanje, zahteva posvećenost. Ono što je osnovni preduslov za uspeh u ovoj oblasti jeste da mora da se voli. Dakle, zaista treba da vas interesuje analitika, da volite da “rudarite” po podacima danonoćno, kako biste iz istih izvukli maksimum.
U Data Science-u takođe važi zlatni Pareto. 80% je prljavog posla, u smislu pripreme i inženjeringa podataka, dok je ovaj “fancy” deo koji se tiče samih modela češće tek nekih 20%. Modeli postoje, i ako koristite R ili Python biblioteke, uglavnom se svedu na svega par linija koda. Ono što je veći problem je izvlačenje maksimalne informativne moći iz podataka, i naravno pronalaženje optimalne konfiguracije modela. Na kraju, model je nemoćan, ukoliko podaci nisu dobri – “garbage in, garbage out”.
Ono što se često zanemaruje u Data Science-u je taj značaj eksploratorne analize. Dešava se da se koraci preskaču, od želje da se što pre krene sa privlačnim i sofisticiranim modelima mašinskog učenja. Međutim, dobra eksploratorna analiza je nekad i više od pola obavljenog posla. Tu se radi sa podacima, ulazi se u njihovu prirodu, stiče se razumevanje, na osnovu kojeg su jasni prediktivna moć i ograničenja koja postoje u skupu podataka.
Ako ne volite to tzv. rudarenje po podacima, i preskačete eksploratornu analizu, vrlo verovatno nećete tako brzo napredovati u poslu. Ili prosto – ovo nije za vas. I to je sasvim okej, pronaći ćete nešto drugo što vam bolje fituje. U ovom tekstu možete da pronađete još detaljnije objašnjenje i argumente koji se tiču početaka u Data Science-u, prevelikih očekivanja, i realnosti koja ne odgovara istim.
Data Science vs. Machine learning vs. Artificial intelligence
O ovome sam pričala i na webinaru, tako da neću da se ponavljam, ali jako je bitno da razgraničite da ova tri pojma nisu istva stvar, i da postoji povezanost među njima, a da dokle god mislite da su ista stvar – lutaćete. Možda će vam ovaj tekst pomoći da malo bolje razumete razliku. Ukoliko ne, ima dosta varijacija na temu, izaberite svoju. Nećete mnogo pogrešiti.
Gradivni elementi Data Science-a
Kako se najćešće tvrdi, Data Science je spoj različitih oblasti – biznisa, odnosno datog domena, IT-a i matematike, odnosno statistike. U zavisnosti od predznanja, kada krećete u Data Science-u, vaše veštine su jače u nekoj od ovih oblasti, a slabije u drugoj. I to je sasvim u redu. Ono što je bitno jeste da prepoznate šta je to vaša jača strana, jer vas to razlikuje od drugih. Kada znate šta je vaša jača strana, a šta je to što vam fali od veština – jasno vam je šta treba da učite kako biste napredovali. Npr. ako dolazite iz društvenih nauka, vi odlično znate specifičnosti oblasti kojom se bavite, ali vam fali znanje iz IT-a, a možda i statistike. Ovo znači da, ako želite da se jednog dana bavite computer visionom npr., prvi kurs koji treba da pređete treba da bude vezan za programiranje. I to ne savladavanje biblioteka (to dolazi kasnije), već elementarno programiranje, koncepti datog programskog jezika, paradigme, kontrola toka, strukture podataka, pa zatim da krenete sa matematikom i algoritmima. Ukoliko dolazite iz IT-a, već bi trebalo da dovoljno dobro poznajete programiranje i matematiku, ali vam fali malo detaljnije znanje statistike, tako da bi neki kurs za statističku analizu dobro došao. Domen, odnosno biznis – je nešto što se savladava sa iskustvom. Ne postoji savršeni kurs koji može da vas pripremi za to, ali naravno uvek možete pročitati neku knjigu, koja će vam približiti domen u kome biste želeli da radite. Na kraju, možda ste apsolutni početnik, i mislite da vam fali elementarno znanje iz svih ovih oblasti. Krenite sa jednom, kada savladate neku elementarnu osnovu, krenite sa drugom, i tako dok ne budete dovoljno spremni da možete (ili ne budete primorani) da žonglirate i u hodu učite više stvari.
Profili Data Scientist-a
Što se tiče profila Data Scientista, u zavisnosti od toga čime se bave u svakodnevnom poslu, kakvi su zahtevi koje rešavaju i šta je potrebno od veština da poseduju kako bi na njih odgovorili – razlikuje se nekoliko tipova Data Scientista. Svima je zajedničko da vole Data Science i Machine learning, međutim, razlikuju im se fokusi.
Analitičari su više fokusirani na eksploraciju, utvrđivanje paterna i objašnjavanje određenog ponašanja i uzročno-posledičnih veza. Dakle, više su po prirodi statističari, nego što su developeri. I malo teže barataju sa produkcionalizacijom rešenja i serviranjem modela.
Inženjeri najviše vole da rade sa deep learning problemima, gde ima dosta kompleksnih formulacija, gde mogu da isprobavaju različite arhitekture mreža i da se igraju sa različitim konfiguracijama.
Developeri su uglavnom fokusirani na isporuku modela, kako će se sve to realizovati u produkciji, da li će biti skalabilno i responzivno, kako da kod bude čist i lako nadogradiv, kako će se neki ML model retrenirati itd.
Story-tellerima je najbitnije kako će rešenje da prodaju biznisu. Šta je osnovni benefit njihovog rešenja, kako će biznis od toga profitirati, i zašto je bilo bitno baviti se određenim problemom.
Profil dosta zavisi i od interesovanja, kao i polazne osnove. Nećete na isti način pristupati Data Science-u ukoliko dolazite iz biznis domena, i npr. iz sveta IT-a. Međutim, odgovornosti i zahtevane veštine zavise i od same kompanije. Prvenstveno od toga da li kompanija ima mogućnost da zapošljava više različitih profila kao što su Data Scientist, Data Engineer, Machine Learning Engineer, Developer i DevOps. Ukoliko da – onda će sigurno posao Data Scientista u ovoj kompaniji da se razlikuje od posla u kompaniji koja ne može sebi da priušti sve te profile – te će Data Scientist biti u obavezi da prokriva više sfera.
Metodologije razvoja
Jedna od najjednostavnijih metodologija razvoja analitičkih projekata je CRISP-DM metodologija. I sve druge su uglavnom varijacija na temu, ako se dobro upoznate sa ovom, imaćete već stabilnu osnovu da odradite svoj prvi mini-projekat za vežbu. Metodologije razvoja su bitne zato što uređuju način na koji se pristupa nekom problemu, kao i razvoju rešenja, osiguravaju fokus kao i rezultat.
Rešenje vs. Proizvod
Kada pričamo o Data Science projektima, uglavnom se odvajaju dve vrste projekata: rešenja i proizvodi. Više o tome možete pronaći npr. ovde.
Rešenja su projekti koji su specijalizovani za određeni problem, dakle razvijeni su za potrebe datog domena, na osnovu definisanog problema, specifične su prirode, i retko mogu da se 1/1 primene na isti način kod više različitih klijenata, ili u različitim biznis domenima. Rešenje može biti npr. neki izveštaj, fajl sa rezultatima, ili neki dashboard. Ukoliko projekat uključuje razvoj modela predviđanja neke vremenske serije, npr. prodaje u nekom maloprodajnom lancu, koje specifično odgovara modelovanju ponašanja tog maloprodajnog lanca, u smislu sezonalnosti, trendova, posebnih akcija, i tako dalje – to je rešenje razvijeno specifično za potrebe tog maloprodajnog lanca, i ne može se tek tako primeniti u domenu telekomunikacija npr. gde se pojam sezonalnosti i trenda drugačije doživljava i opisuje.
Proizvodi, i to data proizvodi, su projekti koji integrišu naprednu analitiku i alate mašinskog učenja, kako bi unapredili poslovanje u ulozi decision-support sistema. Proizvodi su kreirani tako da su lako skalabilni, i da mogu da se upotrebe u okviru različitih sistema i različitih biznis domena, jer mogu da rešavaju više različitih problema, te tako mogu lakše da se prilagođavaju potrebama klijenata. Proizvodi zahtevaju jako detaljno planiranje, temeljno razvijenu arhitekturu i dosta tehničkih funkcionalnosti, kako bi mogli da odgovore na različite potrebe klijenata. Ako pravimo analogiju sa primerom rešenja, proizvod bi podrazumevao tehnički sistem koji omogućava da se na osnovu vremenske serije dobije predikcija, bez obzira na to da li se radi o maloprodajnom lancu, telekomunikacijama, logistici, i tako dalje.
Već bi trebalo da vam se polako stvaraju obrisi onoga da svaki od ova dva tipa rešenja podrazumeva (mada, ne nužno) različiti skup veština i znanja. Rešenja mogu da variraju što se kompleksnosti tiče, dok su proizvodi izuzetno tehnički zahtevni, i potrebno je veliko iskustvo u smislu developmenta, kako bi se razvio proizvod koji je responzivan, skalabilan i pouzdan. Naravno, oba zahtevaju poznavanje metoda i alata napredne analitike.
Tako da, u zavisnosti od toga šta je vama zanimljivije, ili šta je vašem potencijalnom poslodavcu glavni fokus razvoja, postoji potreba da razvijate tehničke veštine koje će vam pomoći da budete kompetentni za određene pozicije na koje biste voleli da konkurišete.
R vs. Python vs. nešto treće
Ovo je zaista (skoro) nebitno. Kada sam kretala sa učenjem, pisala sam rekurentu mrežu u Javi. I od tada, Javi nisam ni prišla (sem kad mi Spark izbaci neku grešku ? ). Ono što je zaista bitno je da hvatate koncepte. Lako ćete izguglati ono što vam treba. Koncepti dataframe-ova, grupisanja i agregiranja postoje i u R, i u Pythonu, i u Sparku, a pre svega su inspirisani manipulacijama koje se mogu raditi u SQL-u, tako da, već vidite o čemu pričam. Ako govorimo o modelima mašinskog učenja, tu se dešava da ima nekih varijacija što se tiče implementacije u različitim jezicima, međutim, najbitnije je razumeti kako algoritam radi, a implementaciju možete savladati kroz dokumentaciju ili Stackoverflow.
R je fantastičan jezik, ima odličan community, dosta biblioteka i funkcija, fantastične mogućnosti vizualizacije. I ukoliko ne mislite da se bavite razvojem ozbiljnih tehničkih sistema (za koje vam ipak treba programski jezik namenjen toj svrsi), R je dobar izbor.
Kažu da je Python drugi najbolji jezik za sve. Ako vam ovo nešto govori – krenite tim putem. ? U suštini, general purpose je, možete peglati ML, možete peglati Deep learning, možete praviti vizualizacije i interaktivne dashboarde, kao i API-eve, bukvalno – štagod vam padne na pamet. Sa tim što ne mogu da tvrdim da sve što postoji u R-u, postoji i u Pythonu. Što ne znači da se i to uskoro neće promeniti.
Mnogi za scientific programming, a u poslednje vreme – i za naprednu analitiku, koriste Juliu. Međutim, mislim da je Julia jos daleko od nivoa popularnosti, podrške i community-ja koji imaju R i Python.
Spark je takođe dobra opcija, ali Spark nije uvek nužna opcija. Uglavnom, ukoliko vam ne treba osnovna prednost Sparka – a to je mogućnost paralelizacije kompleksnih procesa nad velikom količinom podataka – po meni, ne bi trebalo da vam je prvi izbor. Opet ako se čak i desi da treba da se shiftujete na Spark, nemojte se plašiti, sve može da se savlada.
Postoje i različiti alati za razvoj ML modela – Orange, RapidMiner, SAS – gde sve funkcioniše po principu drag&drop, ali opet je bitno da razumete metodologiju razvoja i modele koje upotrebljavate, kako biste napravili sistem koji radi. Ako se ne pronalazite u programiranju, ovo može biti dobar izbor.
Moram li da čitam naučne radove/imam PhD?
PhD je najveća zabluda sa kojom sam se susretala tokom ovih godina, čitajući različite tekstove, i FAQ na temu kako krenuti sa Data Science-om. Ono što treba da razumete – PhD je bitan ukoliko se bavite naučno-istraživačkim radom. I onda kada vi razvijate nove algoritme mašinskog učenja, i to ne kao titula, već u smislu znanja i iskustva koje je neophodno da bi se novi algoritmi razvijali. Ovo podrazumeva da imate izuzetno poznavanje linearne algebre, numeričke analize, kombinatorike, i mnoštva još stvari (za šta je zaista potrebna višegodišnja posvećenost). Sa druge strane, PhD iz nekog određenog domena može biti korisna referenca, budući da u tom slučaju poznajete specifičnosti domena u kom biste mogli da primenjujete naprednu analitiku. Međutim, isto tako može biti i problematično sa siromašnim praktičnim iskustvom. Da li će vam titula pomoći da brže, ili da uopšte dođete do posla u Data Science-u? Ne mora da znači. Istina je negde na sredini.
Što se tiče čitanja naučnih radova – ovo je obavezno. Data Science podrazumeva svakodnevno prelistavanje, iščitavanje i poređenje naučnih radova, jer akademija je ta koja (zajedno sa industrijom) pomera granice. Kada radite na nekom Data Science problemu, najbitnije je da budete svesni limita, šta je sve što je moguće odraditi. Granice su definisane onim dokle je akademija stigla sa istraživačkim radom, i onim što je u industriji moguće primeniti. Kada ste svesni ovih mogućnosti – moći ćete da rešite bilo koji problem sa kojim se susretnete.
Zašto su influenseri važni?
Pored knjiga, kurseva, i blog postova, postoji još jedan, “instant”, način da dolazite do relevantnih informacija i saznanja, a to su društvene mreže. LinkedIn, Reddit i Twitter su do sada moji favoriti, mada naravno tu su i ostali. Ovim putem možete da pratite lidere u ovoj oblasti, da uvek budete u toku, da se povežete sa ljudima sličnih interesovanja i da delite iskustva i znanja, kao i da zauzvrat, dobijate. Ja sam u svom tekstu već pričala na ovu temu, i ono što mogu reći posle godinu dana je da – i dalje tako mislim. ?
Ok, hajde da konkretizujemo stvari:
-
- Statistical learning by T. Hastie and R. Thibsirani (ovaj kurs je povezan sa knjigom An introduction to statistical learning, koja je okačena ispod): https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning
- ML by Andrew Ng: https://www.coursera.org/learn/machine-learning#about
- Deep Learning Specialization by Andrew Ng: https://www.coursera.org/specializations/deep-learning
- Jedan od najboljih kurseva za sisteme za preporuku, kome to bude zanimljivo (uz ovaj kurs valja držati pored sebe i ovu knjigu (dole link) kao neki recept, gde možeš da dublje pročitaš neke pojedinosti, ne preporučujemo da se knjiga čita od 1 do poslednje strane. Već se samo čupa šta ti treba: Recommender Systems Handbook)
https://www.coursera.org/specializations/recommender-systems?#courses
- DataCamp
-
-
- Case studies – pored klasičnih kurseva za Python i ML biblioteke, prolazak kroz neke real world probleme u Data Science-u
- PluralSight (free of charge April, valja iskoristiti)
- Python fundamentals: https://www.pluralsight.com/browse/software-development/python
-
- Podcasts
- Books
-
-
- Introducing Python
- Hands-On Machine Learning with Scikit-Learn and TensorFlow
- Learning Spark
- Learning PySpark
- Mining massive datasets (postoji i standford kurs na osnovu ove knjige, koji je bruka dobar https://online.stanford.edu/courses/soe-ycs0007-mining-massive-data-sets)
- Introduction to statistical learning (objašnjava sve osnovne koncepte statističkog učenja, kroz algoritme i primere)
- The Elements of Statistical Learning (pokriva slične oblasti kao prethodna, sa ozbiljnom matematikom, prethodna je pisana na osnovu ove i bliža je početnicima)
- Sjajna knjiga za početnike u R-u: https://www.amazon.com/Data-Science-Transform-Visualize-Model/dp/1491910399
-
- Blogs
- Deep learning
-
-
- Martin Gorner’s presentation, “TensorFlow and Deep Learning without a PHD (Part 1 and 2)”
- Pretty detailed and comprehensive blog about deep learning: Colah’s blog
- Deep learning specialization – najbolji materijali za deep learning ikada. Prvi kurs – kakva je struktura mreže i kako funkcioniše, drugi kurs – parametri i tjuniranje, treći – konceptualni (kako provaliti da mreža greši i šta raditi), četvrti – konvolucija (computer vision), peti – RNN (nlp, audio)
- Knjiga: http://www.deeplearningbook.org/lecture_slides.html
-
- Communities
Naredni koraci
- Uključi se u community – posećuj sve moguće meetup-e, konferencije i predavanja, na takvim događajima uvek možeš dobiti dobar savet, ideju, nova znanja i sl.
- Upoznaj se sa teorijskim osnovama napredne analitike (metodologije razvoja, eksploracija podataka, statistički testovi, algoritmi mašinskog učenja,…)
- Pronađi primer koji ti je zanimljiv, kroz koji bi bilo moguće da primenjuješ to što učiš i proširuješ svoje znanje i iskustvo (UCI machine learning repository i Google dataset search repository imaju na milione open datasetova, sigurno ćeš pronaći nešto što tebe zanima)
- GUGLAJ
- Projekat na kome radis okači na svoj GitHub profil, to je obavezna i najbitnija stavka u tvom CV-u
- Napravi izveštaj u kome ćeš objasniti šta je rađeno, koji je problem rešavan, šta su koraci, koji su to najveći izazovi bili, koji zaključi su izvedeni i na osnovu čega, koje su mogučnosti za poboljšanja, …
- Pitaj nekog iz community-ja ko se bavi oblastima koje te zanimaju za savet kako da kreneš baš u toj oblasti (data science je širok pojam)
- Apliciraj za praksu/posao, gde ćeš uz mentora najbolje i najbrže učiti i razvijati se. Ukoliko postoji tehnički test prilikom selekcije – i to je savršena prilika da naučiš nešto. Iskoristi je!
Acknowledgements
Hvala svima koji su pomogli da se ovaj dokument realizuje, pre svega mojim kolegama iz Things Solver tima (hvala Anđela, Jasmina, Tijana, Marija, Strahinja, Marko, Bogdane). A posebne zahvalnice idu i mojim kolegama Bojani Soro iz Content Insights-a i Srđanu Šantiću iz Logikka-e. Zajedničkim snagama, sastavili smo listu početnih materijala i oblikovali ovaj dokument. HVALA SVIMA! Nadam se da će ovaj dokument biti od koristi početnicima, i da ćemo ga putem zajednice poboljšavati i obogaćivati.
Autor : Valentina Đorđević, Head of Data Science u kompaniji Things Solver