Хабр, привет! Мы взяли интервью у выпускника программы «Специалист по большим данным», руководителя проектов по машинному обучению и большим данным в компании QIWI, Сергея Чеканского, в рамках которого Сергей рассказал об опыте разработки и внедрения кластеров big data, типичном дне Data Scientist-a, а также дал практические советы начинающим аналитикам.

image

— Привет, Сергей! Приятно видеть, что твоя карьера в Data Science складывается успешно, расскажи, почему ты решил развиваться в области анализа данных и как оказался в QIWI?

— Все началось с моего поступления в магистратуру MIT, где я решил добавить в программу несколько предметов, связанных с анализом данных и алгоритмикой, в частности, Data Science в маркетинге, финансах и healthcare. Первый практический опыт анализа данных я получил в процессе написания диплома: изучал влияние постов в твиттере об экономике Греции, Португалии, Италии и Испании на котировки кредитных дефолтных свопов, то есть на вероятность дефолта определенной страны.

Имея доступ к огромному количеству твитов через базу MIT, мне удалось построить модель, которая проводила сентиментный анализ твитов, придавая им значение от -5 до 5, в зависимости от эмоциональной окраски твита. Окончив магистратуру, я осознал, что Data Science — это область, которая мне интересна. Я прошел большинство онлайн-курсов по Data Science, к примеру, классический курс от Andrew Ng. Через год я получил приглашение от бывшего сокурсника присоединиться к работе над “Плати потом” — стартапом, разработавшим платежную онлайн-систему, через которую пользователи могли совершать покупки с отсрочкой платежа. Главное отличие от обычного кредита заключалось в том, что мы не требовали паспортные данные, а лишь номер телефона и подтверждение авторизации в социальной сети. Таким образом, было необходимо разработать скоринговую систему, использующую данные из социальной сети, номер телефона и косвенные признаки, которые можно получить по IP, из localStorage, то есть все, что можно “вытащить” из компьютера.

Если до этого я лишь практиковался в моделировании на Kaggle, то в “Плати потом” необходимо было вводить в продакшн скоринговую Data Science систему. Особенность проекта заключалась в том, что скоринг должен был быть онлайн, основное требование — максимум 5 секунд на одну заявку — это время, за которое надо было не только собрать данные из всех источников, но и “отскорить” клиента. На протяжении года я писал систему один, затем штат сотрудников стал расширяться, мы работали над улучшением точности скоринга, подключали новые сервисы.

Параллельно мы старались развивать другие проекты, в частности, вышли на рынок e-commerce. Здесь возникла проблема: если пользователь делает заказ физических товаров и хочет заплатить наличными, он в конечном итоге может отказаться от товара. Тогда мы решили применить наши навыки скоринга для того, чтобы в момент оформления заказа пользователем оценивать вероятность невыкупа. Заключив партнерское соглашение с одной из компаний-агрегаторов служб доставки, мы интегрировались в их интерфейс для того, чтобы собирать нужные данные: как человек сформировал заказ, что он делал на сайте и тд. Таким образом, новая скоринговая модель была построена и введена в продакшн.

Вскоре на нас обратила внимание компания QIWI, с которой мы начали сотрудничать сначала в рамках некоторых проектов их R&D отдела, развивая в первую очередь направление e-commerce, а затем, летом 2016 года, они приняли решение о приобретении нашего стартапа.

— Чем отличается работа в QIWI от “Плати потом”? На какой стадии развития была инфраструктура big data, когда ты пришел в компанию?

— У “Плати потом” было множество продуктов, но в QIWI мы решили сосредоточиться на двух направлениях: e-commerce решения, которые мы разрабатывали в рамках стартапа и непосредственно разработка и внедрения data-driven систем, к примеру, в компанию мы принесли наши решения по кредитному скорингу. На протяжении нескольких месяцев мы разбирались с аналитическими системами и базами данных компании и поняли, что необходимо построить big data кластер, так как не было единого хранилища для проведения масштабных вычислений. Вся аналитика в основном выполнялась в реляционных базах в Oracle, а для каких-то целей привлекалась Vertica — полезная СУБД, но десятки терабайт данных хранить в ней дорого. Наконец, мы начали тестировать различные технологии и в результате наш выбор остановился на Apache Spark.

— Почему вы решили выбрать именно Spark? Какие альтернативы рассматривали?

— Как раз в это время я пошел учиться в New Professions Lab и вдохновился тем, насколько хорошо работает Spark и какие штуки можно делать на нем. В качестве альтернативы рассматривали Vertica, она позволяет достаточно быстро работать с колоночным форматом данных, у нее много расширений, в принципе ее можно назвать лайт версией Спарка. Однако, сравнив, что можно делать на Вертике и Спарке мы поняли, что на Спарке можно делать все то же самое, только дешевле. Более того, в нем мы не ограничены в формате хранения данных, можем использовать различные варианты, от текстовых и сиквенс файлов до Storage Engine. Также мы обратили внимание на технологию Apache Kudu и решили попробовать использовать его как Storage Engine для части данных. В результате, big data архитектура выглядит следующим образом: часть данных мы храним в “паркете” в HDFS, часть — в Kudu, а обрабатываем все это с помощью Spark.

— Какие данные и из каких источников используются компанией при аналитике? Какие задачи помимо скоринга возникают?

— Основа — это данные о транзакциях, из социальных сетей, а также кликстрим с 3 источников: сайт, мобильные приложения и QIWI кошелек вкупе с терминалами.
Что касается задач, то помимо скоринга это выявление предпочтений пользователей для повышения CTR (click-through rate), определение слабых мест на сайте, оценка эффективности коммуникаций, поведенческая аналитика, анализ социальных сетей, а в нашем случае это анализ транзакционных сетей, образующихся в процессе совершения денежных переводов между пользователями, для выявления фрода.

— Какие алгоритмы используются для решения поставленных задач? Есть ли любимые методы или под каждую задачу нужно искать свой?

— В первую очередь мы стараемся применять новые технологии, однако основное направление экспериментов заключается не в построении моделей, а в обработке данных, откуда собственно и возникла идея использовать Spark. Конечно, нами используются многие традиционно любимые методы, как и у большинства задач на Kaggle, не связанных с обработкой звука или изображений: градиентный бустинг, деревья решений. Случайный лес в основном используется для того, чтобы получить первоначальный результат, выяснить, какие переменные являются ключевыми, а какие необходимо отбросить, затем обычно смотрим, как на данной задаче будет работать градиентный бустинг, пробуем несколько моделей объединить, однако, конечно, все ограничивается скоростью работы модели. Мы не можем себе позволить, как на Kaggle, сделать безумный ансамбль из 130 различных моделей, на самом деле, более важная задача — это поиск новых признаков и новых зависимостей между признаками.

В свою очередь, решая задачу сегментации пользователей, мы сначала проводим ручное выделение признаков, а затем применяем, к примеру, изоляционные леса, смотрим, как работает простой метод k средних. Также недавно у нас была задача определения пользователей, которые совершают действия, не являющиеся фродом в чистом виде, однако потенциально это что-то недопустимое. Таким образом, необходимо было сегментировать эти несколько тысяч пользователей, подходящих под критерий, и понять, какие цели эти транзакции преследуют. Для решения данной задачи мы использовали матричную факторизацию, чтобы выделить основные факторы и по ним уже проводить сегментирование, также пробовали новый алгоритм — BigARTM, который используется для определения тематики текстов. Мы представили каждую транзакцию как слово, а совокупность транзакций — как предложение и с помощью модели пытались определить тематику совокупности предложений по каждому пользователю. Построенная модель показала достаточно хороший результат.

— Какой профит получила компания от внедрения кластера big data?

— По сути продакшн вариант кластера стартовал лишь в конце марта, поэтому пока сложно оценить бизнес эффект, но результат может быть заметен с точки зрения увеличения производительности: мы в несколько сотен раз увеличили скорость расчета параметров, можем себе позволить обрабатывать сразу несколько лет транзакционных данных, а также мгновенно анализировать терабайты кликстрима, которые ежесекундно приходят с сайта и приложений, то есть пока value от внедрения big data заключается в значительной экономии времени и, соответственно, затрат.

— Расскажи, как проходит типичный день Data Scientist-а?

— Если говорить о моём обычном дне, то 50% времени уходит на решение технических задач: проверка чистоты данных, задачи по загрузке и выгрузке данных, проверка достоверности данных, где хранить “витрину” и тд, 30% в свою очередь уходит на различные внутрикорпоративные вопросы, и лишь оставшиеся 20% времени занимает аналитика: построение моделей, проверка гипотез, тестирование. Причем в подготовку данных в первую очередь входит решение проблем других сотрудников: почему какой-то модуль не работает, почему тип данных конвертируется неправильно и тд, поэтому, для того, чтобы это делать быстро и безболезненно нужно выходить из парадигмы “я математик-аналитик” и быть хакером-программистом.

— Какой язык программирования по-твоему лучше подходит для анализа данных?

— Для анализа данных есть несколько языков, которые на данный момент наиболее популярны: R, Python, кто-то скажет, что это Scala или Julia. Экзотические варианты, конечно, хороши, но только в том случае, если ты изначально хорошо в них разбираешься. Если человек начинает с нуля, то, конечно, лучше выбрать язык, по которому больше всего информации в интернете, и на данный момент — это Python. Так как первый год новичка в Data Science будет заключаться в “гуглении” того, как что либо сделать, на Python это сделать легче всего. Дальше, после освоения Питона я бы обратил внимание на Scalа, потому что она позволяет делать многие вещи по-другому, к примеру, пользоваться расширенным API Spark.

— Какими навыками должен обладать любой Data Scientist?

— По тулзам для себя я остановился на Питоне, какие-то задачи делаю на Scala. Естественно в процессе работы не могу обойтись без таких библиотек, как Pandas и Scikit-Learn, причем пакет Pandas обязателен, некоторые пытаются его игнорировать, пользоваться циклами, но такой подход тратит время, а функции, написанные вручную зачастую намного медленнее, чем то, что за тебя написали и много раз протестировали. Таким образом, Pandas нужно обязательно пользоваться, посмотреть всю его обширную документацию, ведь он может делать практически все, начиная от трансформации данных и заканчивая записью в базы. Также плюсом библиотеки является то, что в последних версиях Spark его API почти полностью повторяет API Pandas, и переход от библиотеки к Спарку проходит почти безболезненно. Также, если человек планирует не только решать задачи на Kaggle, но и в продакшн среде разрабатывать Data Science продукты, то необходимо научиться пользоваться модулями для работы с базами от pyodbc до SQLAlchemy.

— Ты говорил, что прошел множество курсов по машинному обучению. Какой из них ты бы посоветовал новичкам?

— Я бы рекомендовал начинать с курса Andrew Ng, он имеет достаточно хорошую структуру и простым языком объясняет логику работы алгоритмов, что очень важно. Необходимо понимать, почему один алгоритм работает хорошо в данной задаче, но плохо работает в другой, почему нужно много оперативной памяти, чтобы применить SVD, что такое локальный максимум, и тд. Эти вещи очень хорошо в данном курсе объясняются, создавая солидную базу, а дальше нужно выбирать курсы по тому топику, который тебе наиболее интересен, будь то анализ текстов или Social Network Analysis, чтобы получить специализированное знание. Также на русском языке сейчас появляется большое количество курсов, к примеру от Яндекса и МФТИ, однако в отличии от курса Эндрю они уходят больше в математику и меньше в логику работы алгоритмов, однако в их курсе отлично освещаются методы оценки моделей, неплохо рассказано про ROC-AUC кривые. Стоит отметить, что большинство курсов не так много времени уделяют генерации признаков, потому что эта тема сильно зависит от конкретных данных и здесь у многих людей возникают проблемы. Я бы посоветовал пройти несколько различных курсов, чтобы развить креативность и уметь применять различные подходы к трансформации данных.

— Что тебе дала программа “Специалист по большим данным” от New Professions Lab?

— В первую очередь программа познакомила с огромным спектром различных инструментов, принципами их работы расширив мой технический кругозор, а также я получил понимание того, что при небольших усилиях, можно добиться очень многого, если владеть необходимым инструментарием. Благодаря программе мне удалось выбрать правильные технологии, позволяющие наилучшим образом внедрить и настроить систему, в частности, я осознал, на что способен Spark, хотя до этого у меня было заблуждение о том, что внедрить Spark будет сложнее и дороже, чем сделать ту же самую работу старыми средствами. В результате я понял, что big data — это понятно и просто, и научился использовать эти технологии для извлечения максимальной пользы с минимальными затратами.

— И напоследок: в каком направлении будут развиваться технологии машинного обучения и big data в ближайшие годы?

— Я думаю, что уклон будет в сторону нейронных сетей, а с технологической стороны в стеке Hadoop уже появляются и будут появляться инструменты для работы с нейронными сетями для распределенных вычислений. Данных становится все больше и в результате повышается эффективность работы нейронных сетей. Также становится все больше курсов, огромное количество инструментов, позволяющих познакомиться с нейросетями, а у Tensorflow, в частности, имеются отличные туториалы. Таким образом, нейронные сети становятся все более доступными, а вычисления и железо намного дешевле.

https://habrahabr.ru