Всего за три года компания InData Labs стала заметным игроком на рынке исследований данных и искусственного интеллекта — не только в Беларуси, но и в мире. В большом интервью для dev.by минский стартап делится опытом успешных проектов, рассказывает о технологическом стеке и тонкостях в работе с данными.
— В 2014, когда родилась идея компании, в области больших данных и науки о данных в Беларуси работали только единицы, — рассказывает сооснователь и CEO InData Labs Илья Кириллов. — Поэтому мы долго проверяли идею: изучали аналитические отчёты, общались с коллегами из Wargaming и RadiumOne (Разработку программного обеспечения для Wargaming, RadiumOne и InData Labs в Беларуси осуществляет СООО «Гейм Стрим». — Прим. dev.by), убеждались, что в этой области может получиться бизнес. Я был полон энтузиазма и нуждался в единомышленнике, который разделил бы этот настрой. Ко мне присоединилась Ирина — в то время она работала у Марата Карпеко (Cооснователь InData Labs и COO Wargaming — Прим. dev.by). С нас двоих всё и началось.
— В начале 2015 мы начали набирать команду — вспоминает Ирина Крышнева, операционный менеджер компании. — Одним из первых наших сотрудников стал Денис Пирштук — руководитель отдела data science. Сейчас в InData уже 30 человек.
Собрать команду профессионалов в области науки о данных, по словам собеседников, в то время было непросто: опытом работы в подобных проектах не обладал практически никто. Часть людей с нужными компетенциями всё же удалось отыскать на рынке, часть компания решила подготовить самостоятельно. Для этого основали лабораторию совместно с ФПМИ и Научно-исследовательским институтом математики и информатики БГУ.
— Мы понимали, что есть ребята с отличной теоретической подготовкой, но без практического опыта, и в лаборатории предлагали им трансформировать знания в реальные кейсы, — рассказывает Денис Пирштук, chief data scientist в InData. — Приносили задачи, для которых были собраны хорошие датасеты, и сборники материалов с конференций, в которых описывались разные подходы к решению этих задач и возможные подводные камни. В этих сборниках не было ни строчки кода — ребята должны были внимательно изучить материалы и предложить своё решение.
В первом наборе в лабораторию участвовало лишь несколько студентов ФПМИ, которых на программу лично приглашали руководители компании. С тех пор интерес к теме анализа данных многократно вырос: недавно InData проводила третий набор, и на этот раз свои решения предложенных задач присылали люди разных возрастов и профессий, в том числе из других стран.
«Чтобы работать с данными, нужно хорошо их понимать»
InData не занимается чистым аутсорсом: компания позиционирует себя как сервисная. Написание и внедрение кода — только один из этапов работы над проектом в стартапе. Большая часть времени уходит на консультирование, сбор и анализ данных и, в случае успеха, валидацию результатов.
Ирина: Абсолютное большинство сотрудников InData — специалисты по анализу данных (data scientists) и инженеры. Мы продаём наукоёмкие услуги, так что ребятам из небольшой команды по развитию бизнеса приходится достаточно глубоко погружаться в тему науки о данных, изучать, что такое нейронные сети. И всё равно уже на этапе предпродаж мы привлекаем специалистов по данным или инженеров, чтобы чётко выяснить, сможем ли мы работать с задачей, есть ли у потенциального клиента нужные данные и достаточно ли их для реализации проекта.
Илья: Предпродажа — интересный, но крайне сложный этап, поэтому в нём задействованы сотрудники и отдела продаж, и технических отделов. Уже на этом этапе мы демонстрируем знание бизнес-домена и техническую экспертизу и даже можем предложить технологические решения.
Денис: Мы работаем над проектами компактными командами — это выгодно и нам, и клиентам. Все наши проекты строятся вокруг данных, и в последнее время мы фактически начинаем работу с бизнес-анализа: чтобы работать с данными, нужно хорошо их понимать. Поскольку данные часто бывают специфическими, из незнакомых нам доменов, то погружение в них каждого сотрудника требует больших временных затрат. А время — это деньги, которые вынужден заплатить клиент. К тому же чем меньше людей участвует в проекте, тем проще коммуникация и синхронизация с заказчиком.
Ирина: А заказчики разные. Во-первых, мы работаем со стартапами, которые изначально выстраивают архитектуру приложений так, чтобы собирать данные, пригодные для обработки и анализа. Во-вторых, с enterprise-клиентами, у которых за годы работы накапливаются проблемы. В основном к нам приходят с конкретными бизнес-задачами, причём очень разными: например, мы занимаемся предсказанием оттока клиентов, сегментацией пользователей, построением рекомендательных систем.
Денис: Многие продуктовые компании хотят хотя бы попробовать машинное обучение, привнести за счёт него новый функционал для пользователей. Для этого нужно хорошо понимать аудиторию, точно знать её интересы.
Ирина: Наш основной фокус — именно работа с аудиторией.
Мы анализируем пользователей телекоммуникационных компаний, мобильных приложений, компаний розничной торговли. Имена многих клиентов называть не можем, поскольку данные — зачастую очень тонкая и чувствительная тема, особенно для телекома и банков. Но по большому счёту мы можем погрузиться в любой домен. Например, один из недавних проектов — работа с «женским» календарём Flo: мы помогли клиенту внедрить в приложение нейронные сети и реализовали интересный кейс по предсказанию фертильного окна.
«Иногда предлагаем кейсы, о которых заказчик и не думал»
Денис: Чаще всего мы работаем с уже собранными данными. Когда начинали работать над Flo, у ребят была большая аудитория и немало собранных данных — нам было на чём строить начальную модель.
Данные — главное конкурентное преимущество Flo, и оно получено за счёт долгосрочной стратегии. Миллионы женщин вводят в приложение огромное количество данных — опросники Flo включают до 100 пунктов. Таких подробных клинических сведений нет ни у одного врача, ни у одного университета. И чтобы собрать такие данные, Flo должен был на протяжении долгого времени внимательно работать с UX — делать всё, чтобы пользователи хотели вводить в приложение максимум информации.
Возможность работы с уникальными данными мотивировала и наших сотрудников. Анализируя миллионы записей, можно найти очень необычные закономерности и сильно повысить точность прогнозов, это практически исследовательский труд.
Ирина: Нашим ребятам пришлось глубоко погрузиться в тематику Flo: они изучили множество научных статей, консультировались у профильных специалистов. Наверное, про особенности менструальных циклов они знают лучше многих женщин!
Денис: Но Flo — это хороший случай, а бывает и так, что данные клиента не подходят для решения поставленной задачи. В таких случаях наши инженеры могут дать консультацию, как собирать нужные данные — разработать data-стратегию. Либо рассказать, что полезного можно получить из тех данных, которые есть.
Илья: Пока не было ни одного случая, в котором мы не придумали бы, какую пользу для клиента можно извлечь из собранных данных. Иногда мы предлагаем кейсы, о которых сам заказчик и не думал.
Денис: Часто внедряем архитектурные усовершенствования, чтобы упростить расширяемость системы клиента. Так было и с Flo: мы проанализировали серверную часть приложения, отметили узкие места в архитектуре, предложили и реализовали новую серверную часть. Наше решение — сложный компромисс между гибкостью, необходимой для быстрой разработки data driven-функционала и аналитики, и обязательным наличием запаса по масштабируемости, просчитанного с учетом постоянного роста нагрузки и объёмов данных.
Ирина: Набор наших компетенций очень широк: такой full-stack data engineering / data science consulting. Мы можем и сами собрать для клиента данные из открытых источников, как, например, в проекте с калифорнийским стартапом Captiv8. Наши ребята внедрили для них аналитику аудитории социальных медиа: предсказание демографических признаков и интересов пользователей.
Денис: Объясню подробнее. Для рекламы брендов часто используют так называемых influencers — блогеров, которые могут оказывать влияние на аудиторию в вопросах выбора. Перед запуском рекламы маркетологам важно понять, насколько публика блогера совпадает с их целевой аудиторией. Их интересует сегментация пользователей по базовым признакам: пол, возраст, раса, конфессия, место проживания, языки общения, интересы в контексте рекламных категорий. Это именно поведенческая аналитика: например, с точки зрения маркетолога, Барак Обама — белый.
Для такой аналитики рекламщики хотят иметь инструмент, который использует «чистый» API социальных сетей и не требует личного обращения к блогеру. В проекте с Captiv8 мы создали такой инструмент. Решение получилось «под ключ»: система выгружает из социальных сетей всю открытую информацию о пользователях, анализирует её, выдаёт поведенческий прогноз и складывает результаты в хранилище. Кейс был очень полезен и для нас самих: мы получили хороший опыт сбора данных из открытых источников.
Аналитика текстов: «У геймера мат может выражать и положительные эмоции»
Денис: Ещё один интересный кейс мы реализовали для крупной игровой компании, которая уделяет много внимания работе с сообществом. О продуктах компании ежедневно пишут так много комментариев — на YouTube, в социальных сетях, на форумах — что читать их все физически невозможно. Поэтому у нашего клиента возникла необходимость разработать вспомогательный сервис для людей, которые занимаются исследованиями аудитории — аналитическую систему, которая позволила бы выделить наиболее релевантные тексты.
Существует немало готовых систем анализа мнений, многие из них хорошо спроектированы. Но они, как правило, подходят только для массового рынка: для классических наблюдений за брендом, отслеживания отзывов в интернет-магазинах. Для решения задачи нашего клиента требовалась принципиально другая архитектура: типовая система либо «легла» бы под потоком данных, либо потянула бы астрономический ценник. К тому же игровой компании не подходит и классическая аналитика текстов: в геймерском сообществе слишком много специфической лексики.
У клиента не было собранных данных, но он очень хорошо знал, какие тексты нужно собирать и откуда. Мы выстроили систему, которая позволяет задать все необходимые параметры: за какими каналами отзывов следить, по каким ключевым словам и за какие даты собирать тексты. Объём данных очень велик: порой под одним видео на YouTube может собраться сотня тысяч комментариев. Система за разумное время собирает их и сохраняет в базе.
При этом до попадания в базу все тексты проходят через систему предварительной обработки. Во-первых, каждому тексту присваивается тематическая категория, во-вторых, проводится анализ тональности высказывания, или сентиментальный анализ — попытка выявить эмоциональную окраску текста. Для этих задач мы выстроили дистрибутивную модель на нейронных сетях. В качестве эталонного корпуса текстов подали дамп «Википедии» — на нём нейронная сеть научилась понимать связи между словами. Потом туда же были поданы десятки миллионов текстов про игры, по объёму соизмеримые с «Википедией».
В итоге модель стала хорошо различать окраску текстов с учётом всех особенностей: специфической лексики активных игроков, активным использованием мата (не обязательно является сигналом негативной оценки, а может выражать и положительные эмоции). Конечно, модель различает эмоциональные оттенки хуже, чем ребята, исследующие аудиторию, но полностью их заменить мы и не пытались. Факт, что система «видит» эти оттенки значительно лучше, чем человек, не вовлечённый в игровое сообщество.
Все тексты, сохранённые в базе, — напомню, их десятки миллионов — доступны для полнотекстового поиска. Организован он с помощью Elasticsearch — достаточно классического, хорошо масштабируемого инструмента. Но поверх него мы сделали надстройку — дистрибутивный поиск.
Дело в том, что если пользователю нашей системы нужно отыскать тексты о игровом балансе, то маловероятно, что ему подходят только те тексты, в которых есть слова «игровой баланс». С помощью нейронной сети мы автоматически расширяем поисковый запрос нужными ключевыми словами — теми, которые часто встречаются вместе с искомыми. На выходе по очень простому запросу получается достаточно полная выдача результатов с разбивкой на категории и выставленной оценкой эмоциональной окраски.
«Варьирование стека — компромисс между гибкостью и эффективностью»
Технологический стек InData изменяется от проекта к проекту. Денис Пирштук объясняет это самой сферой деятельности компании.
— Мы должны постоянно экспериментировать, предлагать что-то новое, быть гибкими в разработке, быстро подстраиваться под задачи клиента.
За постановкой задачи всегда идёт обзорное исследование данных, трансформация бизнес-требований в технические — сопоставление того, что есть с тем, что хочется. Если на этом этапе всё хорошо, мы начинаем экспериментировать с машинным обучением. Потом начинается стадия валидации с оффлайн-тестами на исторических данных и A/B-тестами.
Данные — вещь непредсказуемая, поэтому добиться нужного результата с первой попытки выходит не всегда. Часто приходится возвращаться на стадию экспериментов, а иногда — и к постановке бизнес-требований. И даже после внедрения природа данных может немного поменяться, и модели придётся обучать заново. А если накопится больше данных, можно будет сделать новую, принципиально более качественную модель. По такому кругу разработка проходит много раз.
Работу с данными мы, как правило, реализуем на Python — сейчас это язык номер один для анализа данных, с прекрасной экосистемой, огромным количеством библиотек. Он идеально соответствует нашему желанию быть гибкими — на нём решения строить проще и быстрее, не так «больно» что-то менять в процессе. И самые передовые алгоритмы в первую очередь реализуются именно на Python. Бэкенд Flo, например, полностью написан на Python.
В проекте с Captiv8 мы использовали Hadoop-стек: сам Hadoop, HBase для хранения данных, распределённые очереди Kafka. Там этот стек оправдывал себя — данных было очень много. А вот в проекте Flo в качестве базы данных используется PostgreSQL — такой вариант оказался оптимальным по скорости и надёжности разработки. PostgreSQL — проверенный инструмент: на нём запускался Instagram, Twitch использует сотни серверов с PostgreSQL. Нельзя вести себя как ребёнок и пытаться использовать самую последнюю игрушку — чем более новые инструменты используются в проекте, тем больше потенциальных подводных камней.
В упомянутом проекте для крупной игровой компании для обучения дистрибутивных моделей мы использовали тот же Python. В качестве промежуточного слоя, middleware, подключили Kafka, чтобы сделать систему отказоустойчивой и легко расширяемой. Для поиска, как уже упоминалось, использовали Elasticsearch — инструмент, написанный на Java, но с удобным доступом из кода на других языках. Мы не ставили задачу писать свой Elasticsearch — мы решали бизнес-задачу, используя лучшие доступные инструменты.
Варьирование стека — это всегда компромисс между гибкостью и эффективностью. Например, NoSQL очень хорош, но использование нереляционной базы данных несёт свои ограничения — например, хранение данных в ненормализованном виде. Если у команды есть чёткий план разработки на полгода вперёд, хорошо использовать Java, язык «кровавого энтерпрайза». Но если проект наукоёмкий, исследовательский, а тебе нужно быстро выходить в продакшн, разумнее применять Python. Сложные вычислительные моменты мы обычно переписываем на C++.
«Мы не стесняемся того, что мы из Беларуси»
InData Labs регулярно получает предложения о покупке, однако руководство компании и не думает продавать бизнес. Илья и Ирина чётко очерчивают цели нынешнего стартапа: стать центром экспертизы в сфере науки о данных и искусственного интеллекта. Лучшим в Беларуси — и одним из лучших в мире.
Ирина: Мы не стесняемся того, что мы из Беларуси. Вся разработка ведется в Минске, а наши клиенты — компании со всего мира: из Европы, Америки, Азии.
Кстати, выход на азиатский рынок — очень важное для нас направление. Очень большой интерес к науке о данных и большим данным проявляет регион APAC: к нам приходят компании из Сингапура, Малайзии, Индонезии. Но если американским и европейским компаниям можно успешно продавать услуги удалённо, то в Азии так не получается: там с клиентом нужно регулярно встречаться, общаться, проводить неформальные встречи.
Илья: Там свои культурные особенности. Например, можно объяснить клиенту предложение во всех подробностях — вас внимательно выслушают, зададут уточняющие вопросы. А через несколько дней придут и попросят объяснить то же самое ещё раз! И снова с удовольствием выслушают.
Ирина: Поэтому InData Labs зарегистрировала компанию в Сингапуре. Сейчас ищем человека, который представлял бы нас в этом регионе, занимался маркетингом и продажами.
Денис: В целом, чем ты дальше от клиента географически, тем труднее с ним работать. Данные — очень чувствительная вещь. Просто взять и отдать кому-то, даже сервисной компании, самое сокровенное — нелегко. Так что единственный шанс получить клиента в дальних регионах — иметь принципиальные преимущества по сравнению с конкурентами.
Наше желание стать хорошо узнаваемым центром компетенции в области больших данных, машинного обучения, искусственного интеллекта — это вопрос выживания. Либо ты заметен, тобой гордится страна и о тебе знают во всём мире, либо ты никто, и с тобой никто не хочет работать. Посередине ничего нет.
Илья: Сегодня на рынке у нас уже немало конкурентов в борьбе за ресурсы, но мы этому только рады: это способствует повышению общего уровня и квалификации специалистов. Мы очень ратуем за то, чтобы рынок рос, сфера data science развивалась. Дмитрий Гурский и фонд Haxus проводят огромную работу, организовывают AI-хакатоны. Менторить их помогают и эксперты InData — нам очень нравится делиться опытом. К тому же в таких мероприятиях есть прямая польза для нашего бизнеса: мы встречаемся с предпринимателями, объясняем нашу предметную область, привлекаем к ней внимание.
Денис: Важно и изучать чужие кейсы. Ни одна компания в сфере искусственного интеллекта и больших данных не придумывает идеи с нуля. Нужно внимательно анализировать, что в области уже сделано — это может дать конкурентное преимущество. Сервисная компания должна обладать максимальной экспертизой, быть впереди всех остальных. Поэтому нам очень важно развивать компетенции сотрудников.
Мне как тимлиду не хочется задумываться о том, как удержать людей в команде — вместо этого мы стремимся создавать атмосферу, в которой им было бы приятно расти. Важно, чтобы специалисты обменивались мнениями и знаниями, были частью более широкого сообщества data science. Хочется, чтобы к нам на работу приходили те, у которых горят глаза к самой предметной области. И чтобы из всех компаний они выбирали InData как лидера — на рынке и в сообществе.
Фото: Андрей Давыдчик
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.