На прошлых выходных проходил хакатон от компании EPAM, посвященный анализу данных и машинному обучению. Хакатон - это 24 часа программирования, по итогу которых каждая участвующая команда должна предоставить свой прототип продукта. Я принимал участие в этом мероприятии вместе со своими сокурсниками и хочу рассказать о том, как все проходило и что мы успели создать за ограниченный промежуток времени.
Это не первый мой хакатон, и могу сказать, что проведен он был на очень хорошем уровне. Организаторы предложили три области, в которых можно себя проявить, и предоставили командам датасеты для реализации своих идей. Первая тема называлась Графы. Единственной команде, которая решила работать в этой области, был предложен набор данных из интернет-магазина Amazon по книжным публикациям со связями совместных покупок.
Вторая тема относилась к обработке естественных языков. Участники пытались извлечь полезную информацию из датасетов с вопросами и ответами популярного портала Stack Overflow. Мы решили участвовать в последней теме, которая называлась Geospatial analysis. Для нас было немного удивительно, что большинство команд взялись именно за эту область; возможно это произошло из-за того, что организаторы подготовили наибольшее число наборов данных именно для геопространственного анализа.
Количество датасетов для geospatial было действительно внушительным. Если для анализа текстов и графов было предложено по одному-двум наборам данных, то в этой области их было с добрый десяток. Все датасеты были посвящены Санкт-Петербургу. Среди них были данные о передвижении людей и общественном транспорте, о жилых домах и заведениях, о коммунальных проблемах и преступлениях и так далее. При таком разнообразии информации, кажется, что можно придумать все что угодно. Посмотрим, что из этого вышло.
Спустя сутки программирования родился прототип нашего приложения под названием SafePass. Пароли тут не причем. SafePass предоставляет информацию о безопасности района для выбранной на карте точки. Но самое главное то, что он делает предсказание уровня преступности на ближайший месяц. Уровень преступности достаточно расплывчатое понятие и тут нужно пояснить. Мы ввели свою метрику, которая рассчитывается с учетом тяжести совершенных преступлений в этом районе. Мы также считаем показатель преступности за прошлый месяц, чтобы видеть динамику этой характеристики. Собственно так выглядит веб-интерфейс прототипа:
Также у нас есть телеграм-бот, который предоставляет ту же информацию для вашего текущего местоположения. Разработка бота заняла совсем немного времени, и если вы хотите узнать как это делается, почитайте мой пост.
Пару слов о технологическом стеке. Весь анализ данных и машинное обучение проходили в питоновском Jupyter Notebook. Для предсказания преступности использовались деревья решений в лице яндексового CatBoost и нейронные сети с применением библиотеки Theano. Веб-интерфейс создавался с помощью Angular 4, а для написания веб-сервиса использовался python-фреймворк Django. Карты же мы рисовали с помощью библитотеки Gmaps, взаимодействующей с Google Maps Api.
На этом хакатоне мы не заняли призовых мест. Честно говоря, я не особо на это рассчитывал, потому как мы изначально не подходили под модель победителей хакатона в моем представлении. А секрет успеха очень прост. Во-первых, направляясь на хакатон, вы должны четко распределить роли в команде, и каждый участник в своей роли должен быть достаточно хорош. На деле такое разделение обязанностей после сбора команды может быть трудным и скорее всего неосуществимым. Поэтому стоит изначально собирать команду, подбирая людей под роли.
Как я уже сказал, мы с самого начала не подходили на роль победителей. В нашей команде было два человека, которые весьма близки к теме машинного обучения, и два человека, скорее ассоциирующие себя с бэкэндом. Тут явно не хватает людей, которые могут быстро и элегантно сделать фронтенд, причем желательно под разные устройства. Но тут возникает другой вопрос, а зачем вообще идти на хакатон?
Один мой коллега утверждает, что это занятие для бездельников. Я бы с ним не согласился. Одна из целей достаточно банальна: если вы готовы собрать команду, удовлетворяющую секрету успеха, то вы можете побороться за победу, то есть, скорее всего, за денежный приз. Такая цель понятна любому человеку. Однако, что если вы, также как и наша команда, просто собрались друзьями с желанием поучаствовать? Чем вам может быть полезен хакатон?
Для меня такое мероприятие это возможность попробовать что-то новое в почти реальном проекте. Тут есть и дедлайн, и команда, с которой нужно кооперировать, и реальная задача, которую нужно решить. На всех трех хакатонах, в которых принимал участие, я знакомился с новой для себя технологией. Так было с разработкой под андроид, с плагином для IDE, и вот теперь веб-интерфейс с использованием Angular 4. Вообще на этом хакатоне каждый из нас поработал с чем-то до этого не знакомым, будь то django или средства отображения географических данных, поэтому я считаю, что нельзя недооценивать такие мероприятия.
Вернемся к секрету успеха. Отличной команды отнюдь не достаточно для победы на хакатоне. Самый важный момент в достижении успеха - это идея. Она должна быть максимально оригинальной. Пусть даже она не несет большого социального смысла, она должна отличаться от остальных и заинтересовать слушателя. С этим тоже были проблемы у нас и многих других команд из области geospatial. Казалось бы, при таком обилии датасетов, именно в этой теме не должно было возникнуть таких проблем. Однако, когда каждый второй рассказывает про безопасность районов и рисует подобные тепловые карты, это порядком утомляет:
И напоследок, еще один совет для направляющихся на хакатон. Когда вы уже собрали свою команду, а по регламенту у вас еще есть возможность добрать людей, не берите незнакомого человека перед стартом мероприятия, даже если он очень хочет к вам. Принцип “четыре головы хорошо, а пять еще лучше” в этой ситуации не работает. Люди бывают разные, и вы не можете предугадать, каким окажется этот кот в мешке. Удачных хакатонов!
Written on December 9th, 2017 by Alexey Kalina