Нотатки Дата Саєнтіста: з чого почати і чи потрібно воно?

Нотатки Дата Саєнтіста: з чого почати і чи потрібно воно?

TL;DR це пост для запитань/відповідей про Data Science та про те, як увійти в професію та розвиватися в ній. У статтею я розберу основні принципи та FAQ і готовий відповідати на ваші конкретні питання — пишіть у коментарях (або в особі), я намагатимусь на все відповісти протягом кількох днів.

З появою циклу нотаток «дата сатаніста» надійшло чимало повідомлень та коментарів з питаннями про те, як почати і куди копати і сьогодні ми розберемо основні скіли та питання, що виникли після публікацій.

Все вказане тут не претендує на жодну істину в останній інстанції і є суб'єктивною думкою автора. Ми розберемо основні речі, які здаються найважливішими у процесі.

Навіщо саме це потрібно

Для того, щоб ціль була досяжна краще, щоб вона хоч якось конкретно виглядала - ви хочете стати DS або Research Scientist у Facebook/Apple/Amazon/Netflix/Google - дивіться вимоги, мови та необхідні навички прямо безпосередньо під яку позицію. Який процес найму? Як проходити звичайний день у такій ролі? Як виглядає усереднений профіль людини, яка там працює?

Часто загальна картина в тому, що людина не дуже розуміє, що саме хоче і не зовсім зрозуміло, як до цього незрозумілого образу готуватися, тому варто мати хоча б приблизний план того, що саме ви хочете.

Конкретизуйте поточне подання мети

Навіть, якщо воно по ходу змінюватиметься, а це взагалі нормально — змінювати плани по ходу п'єси — варто мати за мету і на неї орієнтуватися, періодично оцінюючи і переосмислюючи.

Буде чи це ще актуально

На той момент, як ви доростете до позиції.

Уявіть, що до вашої позиції вам потрібно отримати PhD, попрацювати 2-3 роки в індустрії і взагалі остригтися, медитуючи в монастирі — чи не буде з Data Science такої самої ситуації, як колись з економістами та юристами? Чи не зміниться все до невпізнання в тій галузі, якою ви хочете займатися.

Чи немає хорошого шансу, що всі зараз саме туди й ламануться, і ми побачимо картину, коли є широкий пласт людей, які намагаються увійти до професії, а позицій для старту буде просто мізер.

Можливо, варто врахувати поточні тенденції при виборі шляху, не тільки поточний стан ринку праці, але і ваше уявлення про те, як він змінюється і в якій точці знаходиться.

Наприклад автор і не планував йти в дата сатаністи, а під час PhD пиляв сторонні проекти, які сильно перегукувались по скіллах з DS і після закінчення аспірантури природним чином перейшов у середу, побачивши хорошу позицію.

Якщо по ходу п'єси виявиться, що треба буде переходити кудись ще — бо там зараз найрухливіше і все найцікавіше дійство відбувається, ну значить туди і переходитимемо природним чином.

Розбивка навичок

Це умовні категорії навичок, які мені здаються ключовими для повноцінної та ефективної роботи у DS. Окремо виокремлю англійську - вчіть, чим би ви не займалися в CS. Далі будуть ключові категорії.

Програмування/Скриптинг

З якими мовами обов'язково треба познайомитись? Python? Java? Shell scripting? Lua? Sql? C++?

Що саме потрібно вміти і навіщо в плані програмування – тут спектр позицій дуже різниться.

Наприклад, мені часто доводиться реалізовувати складну логіку, запити, моделі, аналітику і взагалі розробляти саме системи, що інтерпретуються, але практично ніколи немає вимог щодо швидкості роботи коду, крім найзагальніших і розумних.

Тому мій набір навичок дуже відрізняється від тих, хто пише бібліотеку Tensorflow і думає про оптимізацію коду під ефективне використання l1 кешу та подібних речей, тому дивіться, що саме потрібно вам та оцінюйте правильний шлях до вивчення.

Наприклад, для пітона люди вже навіть складають карту вивчення мови.

Напевно, під ваші потреби вже є поради бувалих і є хороші джерела — треба визначитися зі списком і почати їм займатися.

Розуміння бізнес-процесів

Без нього нікуди: вам потрібно розуміти, навіщо ви потрібні в даному процесі, що ви робите і навіщо. Часто саме це може заощадити купу часу, максимізувати свою користь і не витрачати час і ресурси на фігню.

Зазвичай, я ставлюся до таких питань:

  • Що саме я роблю у компанії?
  • Навіщо?
  • Хто і як це використовуватиме?
  • Які я маю опції?
  • У яких межах є параметри?

Тут трохи докладніше про параметри: часто можна сильно змінити сценарій роботи, якщо знати, що чимось можна пожертвувати: наприклад інтерпретованістю або навпаки, пара відсотків тут ролі не зіграють і у нас є дуже швидке рішення, а клієнту воно і потрібно, бо він платить за час роботи пайплайну в AWS.

Математика

Тут ви думаю і самі все розумієте - без знання базової математики ви не більше ніж племінник з гранатою (вибачте з Random Forest) - тому потрібно розуміти хоча б базові речі. Якби я складав прямий мінімальний список, то туди б увійшли:

  • Лінійна алгебра - величезна кількість ресурсів легко гуглиться, шукайте, що вам найбільше підходить;
  • Математичний аналіз (хоча в обсязі перших двох семестрів);
  • Теорія ймовірностей - вона всюди в машинному навчанні;
  • Комбінаторика - вона практично комплементарна до теорвера;
  • Теорія графів – хоча б БАЗОВО;
  • Алгоритми — хоча обсязі перших двох семестрів (див. рекомендації Кормена у його книжці);
  • Матлогіка – хоча б базово.

Практичний аналіз та візуалізація даних

Одна з найважливіших речей — вміти не боятися забруднити руки в даних і провести всебічний аналіз датасету, проекту та накидати швидку візуалізацію даних.

Exploratory data analysis має стати просто чимось природним, як і всі інші трансформації даних та вміння накидати простий пайплайн із unix тузлів (див. попередні статті) або написати читаний та зрозумілий ноутбук.

Окремо згадаю візуалізацію: краще один раз побачити, ніж сто разів почути.

Показати менеджеру графік у сто разів простіше та зрозуміліше, ніж набір цифр, тому matplotlib, seaborn та ggplot2 ваші друзі.

Софт скіли

Не менш важливо вміти донести свої ідеї, а також результати та побоювання (ітд) до оточуючих – переконайтеся, що ви вмієте чітко викласти завдання як у технічних, так і бізнесових термінах.

Можете пояснити колегам, менеджерам, начальству, клієнтам та всім, кому потрібно, що відбувається, якими даними ви оперуєте та що за результати ви отримали.

Ваші графіки та документація мають читатися без вас. Тобто не потрібно йти до вас, щоб зрозуміти, що там написано.

Ви можете зробити зрозумілу презентацію, щоб донести суть того, що відбувається, та/або задокументувати проект/свою роботу.

Ви можете аргументовано та беземоційно донести свою позицію, сказати “так/ні” або поставити під сумнів/підтримати рішення.

Навчання

Є багато різних місць, де можна цьому навчитися. Я наведу короткий список - я пробував з нього все і, чесно скажу, кожен пункт має свої плюси і мінуси. Спробуйте і вирішуйте, що підходить вам, але дуже рекомендую спробувати кілька варіантів і не зациклюватися на одному.

  • Онлайн курси: coursera, udacity, Edx, etc;
  • Нові школи: онлайн та офлайн - SkillFactory, ШАД, MADE;
  • Класичні школи: магістерські програми університетів та курси підвищення кваліфікації;
  • Проекти - можна просто вибрати цікаві для вас завдання і пиляти, викладаючи на github;
  • Стажування - тут складно щось підказати, треба шукати, що є і знаходити відповідні варіанти.

А чи треба воно?

Насамкінець, мабуть додам три персональні принципи, яким я намагаюся слідувати сам.

  • Має бути цікаво;
  • Приносити внутрішнє задоволення (= хоча б не завдавати страждань);
  • "Бути вашим".

Чому саме вони? Складно уявити, що ви будете чимось займатися день за днем ​​і вам не буде це подобається або буде нецікаво. Уявіть, що ви лікар і ненавидите спілкуватися з людьми - це звичайно може спрацювати, але вам буде постійно некомфортно від потоку пацієнтів, які у вас щось хочуть запитати. Це не працює у довгостроковій перспективі.

Чому я спеціально згадав ще внутрішнє задоволення? Мені здається, це необхідно для подальшого розвитку та в принципі процесу навчання. Я справді отримую задоволення, коли мені вдається довести до кінця якусь складну фічу і побудувати модель або обрахувати важливий параметр. Я отримую задоволення, коли мій код естетично гарний і добре написаний. Тому й вивчати щось нове найцікавіше і не вимагає прямо якоїсь суттєвої мотивації.

"Бути вашим" - це те саме відчуття, що ви приблизно цим і хотіли займатися. Я маю невелику історію. Я з самого дитинства захоплювався рок-музикою (і металом — ЛОСОСЬ!) і як багато хто захотів навчитися грати і ось це ось все. З'ясувалося, що у мене немає слуху та голосу — мене це зовсім не бентежило (а треба сказати багатьох виконавців це і прямо на сцені не бентежить), і ось ще школярем у мене з'явилася гітара… і стало зрозуміло, що мені не дуже подобається сидіти годинами та грати на ній. Ішло тяжко, мені весь час здавалося, що виходить якась фігня — я зовсім не отримував від цього задоволення і тільки почував себе паршивим, безглуздим і зовсім нездатним. Я буквально з-під палиці себе змушував сідати за заняття і в цілому це було не в коня корм.

В той же час, я цілком спокійно міг сидіти годинами за розробкою якоїсь іграшки, за допомогою скрипту анімувати щось на флеші (або ще щось) і мене дико мотивувало доробляти елементи в грі або розбиратися з механікою руху і/ або підключенням сторонніх бібліотек, плагінів та іншого.

І в якийсь момент я зрозумів, що гра на гітарі — це не моє і реально мені подобається слухати, а не грати. А очі горіли, коли я писав ігри і код (слухаючи в цей момент всякі різновиди металу) і ось це мені тоді і подобалося, і цим мені варто займатися.

А чи ще є питання?

Звичайно ж, ми не змогли пройтися по всіх темах і питаннях, так що пишіть коментарі і в личку — я завжди радий питанням.

Нотатки Дата Саєнтіста: з чого почати і чи потрібно воно?

Нотатки Дата Саєнтіста: з чого почати і чи потрібно воно?

Джерело: habr.com

Додати коментар або відгук