пʼятниця, 23 червня 2017 р.

Full stack data science і GCP

Сьогоднішній пост буде про специфіку роботи  data scientist в  бізнес (не research) проектах.
 Часто бізнесу потрібно мати просто хороше рішення сьогодні, а не ідеальне післязавтра. Але при цьому це “сьогоднішнє рішення” має бути достатньо якісним (щоб отримати шанс бути покращеним в майбутньому).

Згідно стандарту CRISP-DM виділяють такі етапи data science процесу:
  • Business Understanding - розуміння бізенс проблеми та можливих шляхів її вирішення
  • Data Understanding - розуміння які дані допоможуть вирішити цю проблему і де їх взяти
  • Data Preparation - підготовка даних (налаштування ETL, очищення, збагачення)
  • Modeling - підбір моделей та алгоритмів, які найкраще підходят для вирішення задачі
  • Evaluation - перевірка моделі, основне питання - "Чи вирішує наша модель бізнес задачу?"
  • Results communication - представлення результатів дослідження в зрозумілій всім учасникам формі.
  • Deployment - розгортання моделі для подальшого використання.
В ідеалі цим займається команда, яка включає:
Data Scientist (або Data Analyst + Machine Learning Engineer)- моделювання, підготовка даних, підготовка звітів/комунікація результатів.
Data Engineer - підготовка даних, підготовка до розгортання;
Business Analyst - комунікація з бізнесом,
DevOps - розгортання.

Часто кожен з цих спеціалістів має вузьку спеціалізацію із специфічним набором скілів. Часом у спеціаліста нема бажання виходити за межі власної зони відповідальності. Часом у бізнесу нема ресурсів/бажання платити за таку кількість (часто дорогих) спеціалістів, оплачувати  оверхед по неохідному комунікуванню між ними, налогоджування/контролю процесу взаємодії в команді. Та й побудова команди, де всі будуть доповнювати один одного задача не з легких. Подібні проблеми не нові і у споріднених  галузях. Наприклад, у software development одним із способів вирішити проблеми такого типу є спеціалізація full stack developer (а також практики DevOps). По аналогії,  такого "спеціаліста на всі руки" можна назвати full stack datas cientist.

Під full stack data scientist будемо далі розуміти людину, яка:

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

Тепер про інструменти.

Раніше, як і більшість моїх колег, використовувала такий стек:

Препроцесінг/підготовка даних - R/Python/Spark або спеціалізоване рішення типу Trifacta.
При цьому дані зберігаються локально або в базі даних (в 90% це SQL бази).

Побудова моделі - R /Python/Spark/TensorFlow

Тут швидкість обробки та кількість даних, які можна обробити залежать від локальної машини/сервера. Швидкість тренування моделей теж. 

Комунікація результатів:

Може бути статичною або інтерактивною.
Набір інструментів:

  • PowerPoint/Google Slides
  • R(Shiny), Python (matplotlib/seaborn)
  • Tableau
  • JavaScript (d3.js)

Deployment:

  • веб додаток з використанням R Shiny (якщо потрібне візуальне представлення результатів роботи моделі)
  • веб додаток з використанням Python/Flask (якщо в результаті маємо сервіс, який видає результати через API)
Виглядає непогано, однак треба вирішувати багато питань, які мало відносяться до data science:
  • вимоги до заліза
  • розробка/тестування веб додатку (frontend, backend, tests)
  • налаштування середовища (VM, Docker container, локально, в хмарі? )
  • розгортання додатку (Vagrant, Ansible?)
  • моніторінг
  • підтримка 
  • scaling (коли, як, хто?)
Тобто, впроваджуючи ваше рішення ви frontend розробник, backend розробник, тестувальник, devops інженер. Це забирає дуже багато часу та зусиль, оскільки всі інструменти змінюються.
Крім того,  світ data science теж змінюється (Вжух, і всюди XGBoost).

Чи є інший шлях?

Для себе використовую Google Cloud Platform інфраструктуру.

Як це працює:

Поточні дані збираються з допомогою GoogleAnalytics (оскільки це веб-сайт + мобільні додатки це природній та найбільш простий спосіб отримати дані) та кількох ETL і потрапляють в BigQuery. Це DWH, який дозволяє супер швидке виконання SQL запитів на великих об'ємах даних. Там  роблю і первинне дослідження даних. Середовище налаштовувати не потрібно. При цьому запит, який обробляє 67 GB виконується за 40 секунд.
Додатковий плюс:  не маємо звичної проблеми, коли аналітичні квері сповільнюють роботу SQL продакшен бази.

Вивчення даних та тестування гіпотез роблю з допомогою в Datalab. Це побудований на основі Jupyter notebook,  дозволяє звертатись до BigQuery/Google Storage/ML Engine, а також використовувати python та  його бібліотеки (pandas, scikit-learn, seaboarn).
Будувати візуалізації можна як з використанням python бібліотек, так і з використанням Google Charts API.  Для запуску достатньо команди
datalab create datalab-vm -- machine-type "machine type"
яка автоматично стартує машину вказаного типу та встановить з'єднання з цією машиною з вашого локального комп'ютера.

Для тренування та збереження моделей  використовую Google ML Engine. ML Engine використовує Tensor Flow.  Весною 2017 з'явилась можливість тренування на GPU.

Основна переваги GCP для мене:
Big Query:

  • швидка обробка великого об'єму даних
  • зручна мова запитів

ML Engine:

  • API для використання моделі готовий відразу після розгортання моделі. 
  • Це serverless рішення, тобто ресурси для нього виділяються лише на час виклику. 
  • Автоматично масштабується - ресурси виділяються пропорційно до викликів
  • Можна викликати prediction у online (near real time) та batch форматах.
  • Можна одночасно розгорнути кілька версій API
Datalab досить зручний, однак в принципі, може бути замінений Jupiter notebook з налаштуванням доступу то GCP сервісів через API.  Найбільше подобається можливість легкої зміни типу машини під задачу.

Крім того, Google Cloud Platform має ще кілька цікавих рішень:
  • Cloud Dataprep - препроцесінг даних. На основі сервісу Trifacta. Мала невеликий досвід використання Trifacta - тоді були проблеми якраз з Ops частиною.
  • Dataproc - дозволяє підняти кластер з Hadoop, Spark, Hive, Pig, etc
  • Dataflow - можна використовувати для побудови ETL.
  • Pub/Sub - message flow
  • Google Data Studio - для побудови дешбордів.
  • Cloud Functions - serverless середовище для виконання функцій
Отже, що ми отримали в результаті:

  • frontend/backend development, DevOps та Ops зкоротилися до мінімуму - нарешті data scientist може займатися своєю роботою (юххху!)
  • платимо лише за використані ресурси (запити до апі, час тренування, місце) і не оплачуємо неефективний час роботи віртуальної машини або докер контейнера
  • ми можемо вибрати (і оплатити) для реалізації проекту лише реально необхідну кількість ресурсів
  • маємо розумний варіант для масштабування (по часу і вартості)
  • продакшен рішення представлені у вигляді добре задокументованих і відомих у галузі API.


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

В серпні на DataFest в Києві планую розповісти детальніше та показати на прикладах, як це працює.

неділя, 23 квітня 2017 р.

Перша спеціалізація, яка мала бізнес спрямування, а не технічне.
Особливо було морально тяжко, коли demand на наступний рік вираховували з допомогою одного евристичного правила, а не оці ваші time-series :)

понеділок, 30 січня 2017 р.

Не такі страшні перших 80% створення онлайн курсу, як останніх 80%

Станом на сьогодні на курс "Аналіз даних та статистичне виведення на мові R"  на Prometheus записалося вже 10032 слухачі (~ 2000 після закінчення активної фази курсу) і нарешті є час описати процес створення курсу.

Наприкінці 2015 зі мною сконтактував Олексій Молчановський і запропонував зробити курс з статистики. Ми домовились про наступні кроки: в січні базовий перелік тем, в лютому детальний, весна - розробка лекцій і запис лекцій. Літо - лабораторні роботи та тести. Виглядало цілком поєднуваним з сім"єю та роботою.

Що хотілося досягнути?

  • Показати практичне застосування статистики
  • Дати початкові знання та показати, де можна вивчати статистику крім українських вузів
  • Зробити внесок в українську освіту :)

Початковий план виглядав так:





План та матеріали третього тижня допомагала робити Олена Медвєдєва.  Однак, з кінця квітня в гру вступила реальність. Практично подальша підготовка курсу тривала до релізу.
На початок травня були презентації по трьох лекціях. Які дуже відрізнялись від теперішніх :) Далі ми почали узгоджувати та планувати запис. Фактично розробка презентацій останніх тижнів + різні варіанти запису (в студії, скрінкасти)  + покращення існуючих тривали майже все літо.
Лише запис скрінкастів прийнятної (не ідеальної) якості тривав більше місяця (запис щодня по дві години).
Як ви могли помітити, Prometheus ставить на меті робити курси кращої якості ніж edX та Coursera, що вимагає від автора більше зусиль. В останній тиждень перед запуском я зрозуміла, що треба робити детальні конспекти (початковий план включав лише основні формули). Конспект + завдання лабораторної роботи – це 20-30 сторінок тексту щотижня. Не дивлячись на те, що це вимагало значно більше часу, вважаю що дуже покращило курс.
Після запуску курсу та першого тижня, стало зрозуміло, що серед слухачів є люди з зовсім іншим способом мислення, які розуміють завдання інакше. Тому завдання наступних тижнів допомагали тестувати Олена Мєдведєва, Таня Кодлюк, Олег Суховірський та Саша Руппельт. Саша ще допомагав з підтримкою форуму. Відповіді на форумі, навіть з моїм кількарічним досвідом роботи в саппорті, були найбільш тяжким випробуванням :) Тут морально допомагала моя сім'я.

Трохи статистики:

  • станом на сьогодні 10032 зареєстровані слухачі
  • більше 80% мають ступінь бакалавра або вище
  • відсоток тих, хто отримав сертифікат 7.42% (середній відсоток закінчення для Coursera, EdX, Udacity ~ 2%)
  • середній вік слухачів 29 років
  • загалом від моменту домовленості про створення курсу до завершення активної фази пройшло 11 місяців
  • протягом цього року було змінено три роботи :)

Висновки та поради тим,  хто думає над створенням свого курсу:

Цільова аудиторія: при створенні курсу вважала, що цільова аудиторія це студенти ВУЗів. Насправді 80% слухачів вже мало вищу освітою (також серед слухачів були й викладачі ВУЗів, які хотіли закрити для себе питання застосування статистики).
Різниця між "живим" виступом і онлайн-курсом: при "живому" виступу є фідбек від аудиторії і є можливість на це зреагувати та щось на ходу змінити, в онлайн-відео все зразу має бути ідеально.
Оцінка часу: час підготовки однієї хорошої презентації на кількість тижнів курсу. Запис відео - як мінімум, стільки ж (реалістичніше 2x)
Деталі: конспекти, лабораторні, тести. Приблизно половина часу підготовки презентацій. Вимагають тестування.
Тестування: - хороший варіант прочитати курс кілька разів для невеликих груп перед запуском.
Команда: можливо кращий варіант розділити курс на окремі частини між кількома особами. Це можуть бути модулі або підготовка однотипного матеріалу(презентації, озвучення презентацій, конспекти, завдання і т. д.). Однак, тут треба зводити все до спільного знаменника та координувати роботу всіх залучених.





неділя, 28 серпня 2016 р.

Data Science в Нідерландах

Під час відпустки сходили на зустріч PyData Amsterdam. Зустріч відбувалася в офісі GoDataDriven(який є частиною компанії Xebia). Сама локація знаходиться в іншому для мене Амстердамі - з широкими магістралями та великими технологічними будівлями.

В офісі - скельний тренажер:

А тепер про сам мітап. Говорили про Deep Learning для NLP.

Maarten Versteegh з команії Textkernel займається нормалізацією резюме з використанням deep learning.  Його доповідь містила загальний короткий огляд deep learning. Наприкінці був набір практичних порад з імплементації: як проводити початкову ініціалізацію ваги, робити нормалізацію і т д. Загалом, нічого нового: convolutional networks з використанням keras (на прикладі Newsgroup Dataset)

Друга доповідь Privacy laws and machine learning @ ING від Kees van der Fliert з банку ING була про практичну проблему підготовки даних для аналізу. Суть проблеми: вибірка транзакцій для аналізу може містити дані приватних осіб. Якщо фізичну особу можна з мінімальними зусиллями ідентифікувати, то це може призвести до судових позовів. Тому дані фізосіб мають вилучатись на етапі формування вибірки. Якщо ці особи не є клієнтами банку, то не вистачає інформації, щоб розрізнити фізичних та юридичних осіб. Класифікатор будується на основі тексту транзакції, який містить назву юридичної/фізичної особи.

 Доповідачі в Україні відпрацьовують всі деталі дуже ретельніше і стараються зробити вау-доповідь. За рахунок цього data science зустрічі у Львові відбуваються досить рідко, бо на підготовку вау-доповіді треба витрати багато часу та зусиль. В Амстердамі це виглядало більше як зустріч data science комюніті з піцою та пивом + доповіді для обговорення. Це трохи відбивається на доповідях - на базовому рівні до аудиторії доноситься суть проблеми та пропоновані шляхи вирішення. Можливо, деякі деталі можна було б допрацювати, але сама ідея цілком зрозуміла.

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

понеділок, 18 січня 2016 р.

Morning@Lohika: Introduction to Data Science

В суботу, 16 січня говорили про data science і як з цим жити. Слайди:

А також досліджували злочинність у Сан-Франциско і визначали найбільш небезпечні місця. Код тут.

середа, 30 грудня 2015 р.

Аналізуємо статті з NIPS 2015

На kaggle запустили змагання для аналізу статтей з конференції NIPS 2015 (Neural Infromation Processing Systems). NIPS це одна з найбільших конференцій з machine learning.

вівторок, 29 вересня 2015 р.

Data Manipulation at Scale: Systems and Algorithms

Якщо раніше проблемою було знайти інформацію для навчання, то зараз тяжко зорієнтуватись у величезній кількості онлайн курсів та спеціалізацій. Настала осінь і ресурсів  для навчання стало ще більше.
Якщо ви хочете зрозуміти як працюють алгоритми  data science та зрозуміти, як їх можна застосовувати для великих об'ємів даних,  то спеціалізація Data Manipulation at Scale: Systems and Algorithms   від Вашингтонського університету - хороший вибір. Спеціалізація побудована на основі курсу, який пропонувався в 2013 році.
За мету автори ставлять навчити студентів:

  1. Describe common patterns, challenges, and approaches associated with data science projects, and what makes them different from projects in related fields. 
  2. Identify and use the programming models associated with scalable data manipulation, including relational algebra, mapreduce, and other data flow models. 
  3. Use database technology adapted for large-scale analytics, including the concepts driving parallel databases, parallel query processing, and in-database analytics 
  4. Evaluate key-value stores and NoSQL systems, describe their tradeoffs with comparable systems, the details of important examples in the space, and future trends. 
  5. “Think” in MapReduce to effectively write algorithms for systems including Hadoop and Spark. You will understand their limitations, design details, their relationship to databases, and their associated ecosystem of algorithms, extensions, and languages. write programs in Spark 
  6. Describe the landscape of specialized Big Data systems for graphs, arrays, and streams

Перший курс спеціалізації почався вчора.