Инструмент для машинного обучения на частично-структурированных данных (командный проект)
Компания | Yandex Data Factory |
Учебный семестр | Осень 2016 |
Учебный курс | 3-й курс |
Максимальное количество студентов, выбравших проект: 2-3 | |
Содержание
|
Что это за проект?
Классическая постановка задачи машинного обучения очень проста: необходимо построить модель (алгоритм), которая по числовому вектору признаков предсказывает значение некоторой целевой переменной. Такая постановка максимально удобна для работы с ней на языке математики, разработки численных методов. Однако, в практике специалиста по анализу данных приходится иметь дело со сложными объектами, процесс описания которых в виде числового вектора (feature engineering) — одна из наиболее трудозатратных задач. Вот этот процесс разработки признаков хочется как можно сильнее упростить.
В рамках проекта предлагается разработать инструмент для построения моделей машинного обучения, в котором объекты описываются при помощи структуры данных в достаточно распространенном формате JSON. Алгоритм обучения должен уметь самостоятельно определять, какими признаками описываются объекты, какой тип имеют признаки, генерировать числовые описания признаков, сводя тем самым задачу к классической постановке.
Примеры типов признаков, которые должна уметь обрабатывать библиотека:
- числа
- категория
- текст
- дата/время
- временной ряд (массив из чисел)
- последовательность событий (массив из вложенных объектов)
Имея генератор векторно-числовых описаний объектов, инструмент использует наиболее универсальный и простой метод машинного обучения — градиентный бустинг над решающими деревьями (см. XGBoost) и таким образом строит конечную модель.
Почему описывать объекты именно в формате JSON? Для этого есть несколько аргументов: формат прост и подходит для описания почти любых типов данных, на этом языке реализованы многие Web API, одна из наиболее удачных реализаций концепции NoSQL баз данных (MongoDB) предлагает хранить данные именно в формате JSON. Вот несколько примеров наборов данных, представленных в формате JSON, с платформы Kaggle:
- https://www.kaggle.com/c/yelp-recsys-2013/data
- https://www.kaggle.com/c/whats-cooking/data
- https://www.kaggle.com/c/random-acts-of-pizza/data
Чему научатся студенты? Что самое интересное в проекте?
Создавать программный продукт, решающий реально существующую проблему в области Data Science. Правильно использовать методы машинного обучения с данными различной природы. Отличная возможность узнать целый спектр задач, к которым применяется машинное обучение.
Организация работы (Как студенты будут работать в команде?)
Проект расчитан на 2–3 студентов:
- Архитектор, в ответственности которого — разработка ядра библиотеки
- Разработчик с фокусом на data science, в его ответственности — разработка обработчиков признаков и обсуждение архитектурных решений
- Опционально: третий разработчик, либо аналитик с фокусом на подготовку бенчмарков, прототипирование и выбор наиболее перспективных методов feature engineer-инга для реализации в библиотеке
Компоненеты (Из каких частей состоит проект?)
- Подготовка и разбор бенчмарков: подборка наборов данных, построение модели “вручную”, используя стандартные приемы feature engineer-инга.
- Разработка библиотеки с модульной архитектурой, позволяющей добавлять обработчики признаков. Налаживание процесса совместной разработки и автоматического тестирования.
- Реализация обработчиков различных видов признаков (см. примеры в описании проекта), тестирование алгоритма на построенных бенчмарках.
- Интерфейс и его документация: CLI xgboost-like + Python sklearn-like.
- (*) Элементы AutoML: автоматический подбор параметров обучения, отбор фичей (или способов их генерации)
- (*) Интеграция с NoSQL базами данных вроде MongoDB.
Звездочкой отмечены направления развития, на случай если основная часть проекта покажется слишком простой.
Какие будут использоваться технологии?
- Библиотеки XGBoost, SciKit-Learn.
- База данных MongoDB.
- GitHub + Travis CI (непрерывная интеграция)
Какие начальные требования?
Внутренняя потребность (и относительное умение) писать качественный код, продумывать архитектуру. ACM ICPC уровня бог или чуть ниже — может быть плюсом.
Темы вводных занятий
- Инструменты коллективной разработки и автоматического тестирования
- Элементы agile
- Feature engineering в различных задачах
Критерии оценки
- 4-5: Алгоритм реализован и дает приемлемое качество на минимум 3х бенчмарках
- 6-7: Реализованы обработчики большинства видов признаков, часто встречаемых в прикладных задачах. Библиотеку получила положительный отзыв у независимого практикующего data scientиста, протестировавшего ее в реальной задаче.
- 8-10: Качественно реализованная и оформленная open source библиотека на GitHub + публикация в профессиональном издании + 200+ поинтов на HackerNews
Похожие проекты
Контактная информация
Ромов Петр (peter@romov.ru), будет еще технический ко-ментор