HelloWorld logo
22.09.2023. ·
17 min

Kako učiti Data Science?

HelloWorld

Za početak, o tome zašto je bitno da (a) učite Data Science rešavajući neki problem koji ste rešeni da rešite, u nekoj oblasti koja raspaljuje vašu radoznalost i znači vam, te (b) da učite Data Science funkcionalno, odn. da što pre vaše učenje pretočite u praksu koja ne samo da je korisna i vama i drugima već vas potencijalno i plaća za to da kroz rad učite; o potrebi da neprestano stvarate prilike za tako nešto i ni slučajno ne propuštate prilike nastale pukom srećom ili sticajem okolnosti.

Iz prve ruke

Konačno, sa skoro pedeset godina, posle programiranja čitav život počevši od moje desete godine (da, da - 8 bita i 64 Kb RAM-a 80-ih), silnih škola i rada u fundamentalnim istraživanjima koji sam započeo još 1993 a koje je potrajalo dvadesetak godina, te više od dvadeset godina karijere u onome što se nekada zvalo Quantitative Analytics, pa Data Mining, i konačno Data Science i/ili Machine Learning - rešio sam da je vreme da počnem da delim iskustvo pređenog puta. Pišem u oblasti u kojoj sam prošao sve od rada u statističkom softveru poput SPSS ili Statistica 90-ih, MATLAB, zatim R i konačno Python, u prethodnih tridesetak godina; od 64Kb u kojima treba da naučite da programirate do iskustva rada u Big Data (i to baš, baš Big Data u mom konkretnom slučaju); od statističke analize bihejvioralnih eksperimenata, anketnih istraživanja, skala stavova u oblastima istraživanja javnog mnjenja, međunarodnim odnosima, javnom zdravstvu, bankarskom sektoru, gemblingu i FMCG, do skrejpovanja i razvoja Information Retrieval sistema from scratch, mentorisanja Data Science studenata američkog edu-startapa, analize paterna ponašanja editora Wikidata koja je graf sa kojih 90+ miliona čvorova, te razvoja ML za predikciju popularnosti sadržaja na socijalnim medijima. Iskustvo je neverovatno a investicija dan danas lepo vraća, najviše time što mi omogućava da živim radeći poslove u kojima uživam, tako da mi je granica između radnog vremena, slobodnog vremena i hobija praktično izbrisana. A to je veoma važna stvar u vašem životu, stvar koju treba da se trudite da postignete: da uživate, a ne da mrzite ceo svet ponedeljkom ujutru smatrajući da je 8h radnog vremena nešto što je prosto ujedeno od vašeg života da bi finansiralo preostalih 16h. Pare nisu toga vredne, verujte mi.

Počeću sa postom naslovljenim: Kako učiti Data Science? Biće više nastavaka: praktično svaku od tema i motivacija kojih se dotaknem, elaboriraću u nekom kasnijem postu. Cilj mi je da pokušam pomognem onima koji su ili tek zainteresovani za Data Science kao moguć izbor za karijeru u istraživanju ili primeni, onima koji su tek počeli da uče, onima koji su naučili i traže posao, pa i onima koji su uveliko u Data Science - jer oni su odavno već shvatili da to znači učiti doslovce svaki dan.

Izbor je dobar

Data Science je dobar karijerni izbor, ako vas zanima, jer je danas svugde. Doslovce: kako je IT ušao u svaku moguću i nemoguću industriju i granu, tako je danas kao suza čista istina da u data intenzivnim okruženjima (engl. data intensive environments) - čitaj: gde god ima dosta podataka - za Data Scientista ima posla. A gde danas nema dosta podataka - pa, samo u poslu onih koji još nisu shvatili da bez stavljanja informacija u pogon u poslovnom okruženju više teško da ima pravog uspeha... Nema šanse da neko pravi pogrešan izbor životnog poziva ako se opredeljuje za Data Science: gap na tržištu rada je ogroman, potražnja za njima je velika, raste konstantno, i tek će da raste, jer su deo transformacije kompletne globalne ekonomije kroz ono što danas ljudi zovu Četvrtom industrijskom revolucijom. Često se pogrešno pretpostavlja da je uloga Data Science da automatizuje sve i svačiji posao i prepusti funkcionisanje sveta i privrede autonomnim algoritmima koji iz podataka uče i donose optimalne odluke. To jeste deo posla, ali (a) ne na svakoj Data Science poziciji, (b) ima i te kako posla koji ne podrazumeva primenu čitavog takvog ciklusa, u kome se od nas traži da (c) pomoću podataka i mašinskog učenja donosimo neke sasvim ljudske zaključke i preporuke, da (d) ponekad tek dovoljno lukavo vizuelizujemo neke podatke da bih ih neko drugi razumeo ili mogao da ih komunicira nekom trećem, te (e) često se naš posao sastoji u tome da uopšte iz nekih početnih, sirovih podataka tek dođemo do podataka koji ljudima nešto počinju da znače i na osnovu kojih će se tek kasnije razmatrati kuda dalje.

Ali tog posla ima, i ima ga u toliko različitih oblasti i industrija, da je nesumnjiva jedna stvar: teško je da ako naučite Data Science nemate posla, i teško je da uz toliki raspon naše discpline kroz različita tržišta ne nađete neku nišu u kojoj će vam biti interesantno i izazovno da radite.

Kako onda izgleda početak u Data Science?

U kom trenutku, kako neko počne da stiče motivaciju, znanja i veštine, i počne da postaje Data Scientist? Moj odgovor je: ne znam. Jedino što po tom pitanju mogu da učinim za druge je da podelim moje lično iskustvo, dovedem nas danas do tek par izvesnih zaključaka (na kraju teksta), i podsetim da ima N (gde je N neki veliki ceo broj) izbora, iskustava, i ličnih priča drugačijih od moje kroz koje su ljudi ulazili i ulaze u ovu disciplinu.

Evo kako je sve počelo za mene, ukratko i bez ulaženja u ličnu biografiju, ljubavi, muzički i filmski ukus ili sklonosti ka funkcionalnom ili objektno orijentisanom programiranju. Prva stvar, pretpostavke: počeo sam da programiram sa deset (brojem: 10) godina, prvo učeći BASIC iz baš ma kog časopisa o mikrokompjuterima koji je 80-ih mogao da mi dopadne šaka i pišući kod na svesci "na kockice" (tako je zovu, iako je papir, koliko ja znam, "na kvadratiće", ali Ok), i od neke 1986 na 8-bitnom Commodore 64 koji sam uspeo da iskukam na poklon od roditelja u ekonomski ne tako slatka vremena po građane ondašnje Jugoslavije. Koliko sam bio lud i predan u tome: pa, imao sam nekih šesnest godina kada sam u jednom ex-Yu časopisu o računarima objavio prvu recenziju kompajlera za programski jezik PASCAL... Interesovanje nikada nije prestalo: preko prijatelja iz Istraživačke stanice Petnica sam došao do fotokopija poglavlja čuvene "Algorithms + Data Structures = Programs" Niklaus Wirtha, pratio razvoje koliko sam mogao, i maštao da jednog dana razvijam ekspertske sisteme u (danas prilično zaboravljenom) programskom jeziku PROLOG za logičko programiranje. Šta drugo programere uopšte zanima do razvoj AI?

Studije: ranih 90-ih, ako hoćeš da ideš u karijeru programiranja a živiš u Beogradu, to je bilo ili ETF, ili Matematika. Veliki je broj bio samoukih kao ja, ali opet - neka ozbiljna škola ti treba. Treba ne samo znati da programiraš, nego i razumeti matematička sredstva koja treba da pretočiš u algoritme, i onda u kod. Moj izbor (nerado; objasniću) je bila matematika; međutim, posle I semestra na Matematičkom je meni postalo jasno da jednostavno nisam osoba koja će svaki dan da vežba analizu i linearnu algebru tri, četiri sata dnevno, jer propustiš li jedne, dve vežbe za redom eto tebi problema kako da uopšte stigneš grupu sa kojom radiš do kolokvijuma ili ispita. A moja interesovanja su bila uska, i svakako vezana ne za baš sve u matematici: ono što nekoga zainteresovanog za računarstvo najviše interesuje, matematička logika, teorija formalnih jezika, teorija dokaza, izračunljivosti, meta-matematika. Iskreno nisam bio lud za verovatnoćom, statistikom i numeričkom analizom - oblastima za koje bi se reklo da zapravo predstavljaju same fundamente za Data Science. Ne - ja sam teoriju verovatnoće zavoleo kasnije. Sve u svemu, sa tih 18, 19 godina pala je nagla odluka da se studira nešto drugo, i to nešto sasvim drugo... posle prethodno položenih prijemnih ispita na matematici i fizici (izbor je bio matematika), položio sam prijemne ispite za Filozofski (filozofiju i psihologiju) i presrećan što sam sa tankim uspehom iz gimnazije uspeo u žešćoj konkurenciji da upišem psihologiju odlučio da nju i studiram. Nema više programiranja, nema više analiza i diferencijalnih jednačina, ide neki novi svet, neka nova interesovanja...

Sve dok me na prvoj godini psihologije nisu sačekali ispiti iz statistike, fiziologije centralnog nervnog sistema, te oblasti kao što su psihofizika i kognitivna obrada informacija... Kad imate iza sebe prilično solidnu matematiku još iz gimnazije i godine programiranja u kojima svakako barate brojevima svaki dan, vidite šta je nastava psihologije na prvoj godini, okrenete se oko sebe i dođe vam skoro da se nasmejete bledim licima većine vaših kolega koji mahom dolaze sa bekgroundom društvenih nauka i humanističkih discplina, načitani Frojda i Junga (koje sam poprilično pročitao i sam i osećam samo najveće poštovanje za njihov rad i dan danas), kako u neverici slušaju o linearnoj regresiji, tome šta je histogram, a šta psihofizička funkcija za koju je Fehner verovao da je logaritamska a Stivens da je stepena - brzo shvatite da se nalazite na mestu koje je potencijalno veoma interesantno za vas. Tako je i bilo: nisam završio ni prvu godinu studija a već sam izveo moju prvu eksperimentalnu studiju u kognitivnoj psihologiji. Druga godina studija, prvi nastup na naučnoj konferenciji. Do kraja studija sam ih imao ne znam koliko i objavljena četiri naučna rada do neke dvadeset i četvrte ili dvadeset i pete godine: svaki je, po prirodi oblasti u kojoj sam istraživao, uključivao statističke modele podataka, najčešće analize varijanse i multipla linearne regresije. Interesovanja su mi se brzo proširila na ono što su osnove oblasti Unsupervised Learning danas (PCA, i MDS - nešto što se koristilo za redukciju dimenzionalnosti pre t-SNE i UMAP), jer su mi znanja u toj oblasti bila potrebna da bih istraživao u oblasti semantičkog pamćenja i distribucione - ili statističke, ako hoćete - semantike, koja me je veoma interesovala. Najbolje od svega je bilo otkriće da je mejnstrim teorija kognitivnih nauka - koje predstavljaju osnovu za istraživanja u oblasti veštačke inteligencije, a pored kognitivne psihologije obuhvataju mnoge druge naučne oblasti od neurobiologije do inženjeringa - nešto što se zove Computational Theory of Mind. Drugim rečima: psiholozi i filozofi koji su se bavili problemima saznanja i pitanjem inteligencije nisu pretpostavljali ništa drugo do ono što su u XX veku takođe pretpostavili matematičari, logičari i inženjeri, naime, da objašnjenje inteligencije leži u razumevanju ljudskog uma kao kompjutacione mašinerije. Bio sam, i ostao fasciniran time (iako danas ne verujem da je kompjutaciona teorija uma u stanju da objasni ljudsku inteligenciju u potpunosti). Oblast je bila prepuna matematičkih modela raznih kognitivnih funkcija: prepoznavanja, pamćenja, razumevanja značenja reči, donošenja odluka...

I konačno, naučni rad je i te kako zahtevao dobro poznavanje verovatnoće i statistike da bi se analizirali i modelirali eksperimentalni podaci, a da biste matematičke modele mogli da primenite na podatke nije bilo dovoljno imati papir i olovku, dabome. Godine rada u SPSS, zatim STATISTICA, do momenta kada su me doktorske studije konačno dovele do MATLAB (kroz jedan od najboljih i najtežih kurseva koje sam ikada uzimao u životu, Simulation and Data Analysis na njujorškom NYU). Usput sam "pokupio" bejzijansku verovatnoću i statistiku i ostao ubeđeni subjektivista u teoriji verovatnoće do dan danas. Naravno da je programski jezik R bio sledeći logičan korak.

R sam počeo da učim neke 2006. godine, mislim. Od 2013 godine, kada sam konačno završio rad na doktorskoj tezi, uključujući razvoj originalne bihejvioralne teorije odlučivanja i njene matematičke formulacije, do danas, teško da sam godišnje imao više od sedam dana da nisam napisao liniju R koda. Nešto Python sam znao s početka 2000-ih, ali me je R, specijalizovan za matematičku statistiku i tada visoko popularan samo u akademskoj zajednici prirodno više zainteresovao. Danas, u R radim bukvalno sve, uključujući i ono čemu jezik u suštini nije namenjen: održavanje i razvoj sajtova ili pisanje blogova : )

Od neke 2015. godine, kada sam već neko vreme prestao sa svakim akademskim angažmanom u istraživanjima ili nastavi i uzeo moju prvu poziciju koja se zvanično zvala Data Scientist, do danas, imam osećaj da sam završio još najmanje jedan fakultet radeći u Data Science. Istina, još od 2002 godine sam imao iskustva u istraživanjima javnog mnjenja (gde vam i te kako treba dobro znanje matematičke statistike), radio kao analitičar na međunarodnim projektima, radio u istraživanju tržišta, tako da mi nije bio toliki problem da nekako izađem na tržište kao konsultant u analizi podataka. Ali je realni rad u Data Science vremenom, a ponajviše od početka mog angažmana kao Data Scientist za Wikidata (2017 - 2022) - najluđi posao koji sam u životu radio - zahtevao mnogo više od dobrog R programiranja i poznavanja statističkih modela. SQL sam, ruku na srce, naučio još tokom nekih angažmana na razvoju Information Retrieval i Text Mining sistema u R za jednu međunarodnu fondaciju neke 2015, ako ne grešim, od kada datira i moja sklonost ka PostgreSQL, ali su ulaz u Big Data okruženja (Apache Hadoop i Spark) te potreba da razvijam kompletna softverska rešenja i plasiram ih u produkciona, virtuelna okruženja bili za mene priličan šok. Ali me je jedna stvar držala: ja sam, jednostavno, voleo sve to. I nikada mi nije predstavljalo problem to da nešto novo učim, toliko sam radoznao po prirodi da bih mogao da idem u školu za pare i polažem ispite do penzije (ako ikad u penziju uopšte i odem). Apache Spark je bila stvar koja me je naterala da se ozbiljnije vratim Python programiranju, i danas koristim Python i R uporedo u poslu - mada 90% koda koji pišem danas jeste u Python, dok R koristim za istraživačke faze projekata jer mi omogućava rapidan razvoj prototipa ma kog modela na kome radim. A i više ga volim : ) Vremenom, kroz posao, godinama, prešao sam kompletan put od čoveka koji koristi matematičku statistiku i modeliranje da bi testirao neku naučnu hipotezu ili teoriju do čoveka koji radi full-stack software development u Data Science: od istraživanja, preko prototipa, mašinskog učenja i selekcije modela, do njihovog plasiranja u produkciju upakovane u različite data proizvode u koordinaciji sa product i communications stranama posla.

Pa ovo je lična priča: ponovo, šta su opšte pretpostavke, kako se ulazi u Data Science?

Prvi način da vam pomognem u tome kako da uđete i kako da učite Data Science se sastoji u izvođenju nekoliko zaključaka iz ove moje profesionalne i lične priče, podsećajući vas da postoji bezbroj načina na koje možete da uđete u Data Science i učite tu oblast.

1. Treba da volite to, i da radite na nečemu konkretnom! Često ljudima koji me pitaju kako da počnu u Data Science odgovorim tako što ih pitam: koji problem vi pokušavate da rešite, a da to nije problem šta isplaćuje vašu mesečnu platu i plaća kiriju? Ja sam ono što me je odvelo u Data Science karijeru naučio rešavajući tri problema kognitivnih nauka koji su me najviše zainteresovali: problem odlučivanja, problem otkrića kauzalnih odnosa iz statističkih podataka, i problem značenja; sredstva kojima danas raspolažem u mom znanju i veštinama sam stekao radeći na rešavanju ovih problema. Za vas to može da bude nešto sasvim drugo, iz oblasti ekonomije, biologije, fizike, menadžmenta, inženjeringa, entertjmenta, kriptovaluta i NFTs, čega god hoćete, ali uvek je za učenje bolje da ispred sebe imate konkretan problem koji hoćete da rešite matematičkim sredstvima u Data Science nego da ga nemate: to ključno utiče na vašu motivaciju, da se bavite nečime što vas interesuje, što vam daje snage da napredujete. Ljudi znaju tokom kurseva u Data Science koje držim da me pitaju koji dataset treba da uzmemo i na njemu vežbamo R ili Python? Ja im obavezno odgovaram, vidite, na Kaggle i drugde ih ima milion - ali vi treba da odaberete onaj koji vas zanima, jer će vam svi drugi verovatno biti dosadni.

2. Treba da imate sreće, jeste - ali i da prilike za učenje stvarate i da ih koristite kada vam se pruže. Primetićete kako se u mojoj priči o početku karijere u Data Science stvari nekako perfektno slažu: čovek programira od malih nogu, čak i kad promeni faks da pobegne od matematike on uleti u oblast društvenih nauka koja je solidno matematizovana, dobije priliku da se bavi naukom, tokom studija se razbije od metodologije, verovatnoće i statistike, sve vreme nešto programira, ubada dobre poslove, i kako da na kraju ne postane Data Scientist? Pa čovek ima lude sreće! To samo zvuči tako kad se ispriča. Prvi časopis o računarima mi jeste otac doneo na poklon 1984. godine, ali nije on nego ja seo za sto, izvadio svesku i počeo da uči da programira (bez računara, zvuči kao vic danas). Kada sam upisao psihologiju, mogao sam te više prirodno-naučne ispite da ispolažem sa desetkama, slegnem ramenima, nakupim sertifikate za neke terapije i couching i danas razgovaram sa ljudima za novac kao što radi ogroman broj mojih kolega (zbog toga na tržištu koje je daleko više zasićeno nego ono u Data Science): ja sam izabrao da zagrizem i uđem u naučni rad pored redovnih studija; to je duplo više rada na studijama nego što se od vas traži. Nekih 2000/01, dok sam bio polaznik Beogradske otvorene škole, mogao sam da je završim i stavim u džep lepe preporuke za posao, odem i bavim se nekim reasearch managementom i uživam; ja sam predložio osnivanje istraživačkog centra koji bi se bavio razvojem Interneta i proučavanjem informacionog društva, tako stvorio priliku da oformim tim, izvedem istraživanja sa hiljadama ispitanika i naučim proces menadžmenta istraživanja od ideje do publikacije s leva na desno (četiri knjige smo mi u tom timu objavili zajedno 2002 - 2005; i to je trebalo napisati). Za doktorat, nisam morao da razvijam novi matematički model u teoriji odlučivanja, doktorira se i sa mnogo manje. Uopšte nisam morao da u životu prihvatam pozicije na kojima je trebalo da radim i back-end na Big Data u Hadoop i Spark, i mašinsko učenje, i razvoj RStudio Shiny dashboards, i njihovu produkciju u cloud okruženjima; mogao sam da kažem Ok, platite nekog Data inženjera za Big Data i zaposlite nekog juniora da radi dashboards, ja sam specijalista za ML i radim samo to - kao što danas radim na poziciji na kojoj se od mene zahteva samo ML, a u većini firmi kojima treba Data Science to što sam godinama radio ja radi tim ljudi. Ali je to za mene bio izazov - pa sam učio. Sve ono što nisam uradio je bilo da propustim priliku da učim kada bi mi se pružila pukom srećom, ili da propustim da priliku za učenje stvorim kada takve prilike nije bilo. U većini slučajeva, nisam uspevao samo to, već sam uspevao i da budem plaćen da radim posao koji je podrazumevao da na njemu mnogo učim.

To bi bile pretpostavke: (1) da učite Data Science radeći na nečemu što vas interesuje i što volite, jer u suprotnom ozbiljno rizikujete da sebi zagorčate život ubrzo, te (2) da neprestano tražite prilike za učenje, kontekste u kojima će vaše učenje postajati funkcionalno i koristiti i vama i drugima (pri tom vas, kad god je to moguće, i plaćajući za to), i ne da prilike za učenje Data Science čekate nego da ih aktivno stvarate. Predlažite projekte, okupljajte timove, tražite podatke, otvorite blog i pišite šta i kako radite, i objasnite zašto je važno koji problem rešavate i zašto vam je do toga stalo.

U narednim postovima, o tome da li i koliko teorije verovatnoće i statistike treba da znate da biste preuzeli neku poziciju u Data Science/ML, o tome da li vam trebaju master i doktorske studije da biste radili u Data Science (odmah da odgovorim: ne, ali nije ni loše ako je upravo to bio vaš razvojni put), kako da učite samo programiranje za Data Science, kako da organizujete vaše projekte tokom učenja (obavezno morate da imate projekat na kome radite dok učite Data Science), i drugim nadam se korisnim raspravama.

Autor: Goran S. Milovanović

Pogledaj komentare

Iz ove kategorije