В этой статье я расскажу о работе, проделанной в период GSOC. Подробное описание проекта смотрите здесь
Я работал с организацией CHAOSS над Augur. Идея моего проекта состоит в том, чтобы найти информацию о репозиториях, доступных на GitHub, с помощью машинного обучения, и поэтому эта идея больше всего побуждает меня внести свой вклад, поскольку она будет полезна для всего сообщества разработчиков.
Введение:
Augur — это платформа с открытым исходным кодом, которая систематически интегрирует данные из нескольких репозиториев с открытым исходным кодом, систем отслеживания проблем, списков рассылки и других коммуникационных систем, на которые опираются проекты с открытым исходным кодом для создания высокоструктурированной (реляционные и графовые базы данных), согласованной и проверенной коллекции данные о здоровье и устойчивости из открытых источников. Сотни узкоспециализированных запросов данных реализованы в API Augur, данные и визуализации передаются пользователям Augur, а результаты одного пользовательского запроса приносят пользу всему сообществу.
Резюме проекта
Нам нужно внедрить модель машинного обучения внутри Insight_worker, чтобы обнаруживать идеи и выбросы в показателях временных рядов более чем 100 000 репозиториев. Модель должна быть в состоянии обнаруживать выбросы в самых разных данных по более чем 20 показателям временных рядов. дружелюбный, так что пользователь может контролировать результат в соответствии со своими потребностями.
Существует много алгоритмов, которые были полезны для обнаружения выбросов в данных временных рядов, таких как ARIMA, SARIMA, декомпозиция STL, IsolationForest, KNN, SVM, CAD OSE, Skyline, Prophet (от facebook), Numenta HTM , LSTM и т. д.
После анализа всех вышеупомянутых алгоритмов мы попытались реализовать простую, но эффективную модель, которая должна обладать большинством преимуществ, присутствующих в вышеупомянутых алгоритмах. The Numenta Anomaly Benchmark (NAB) — это новый тест. для оценки алгоритмов обнаружения аномалий в потоковых приложениях реального времени. Он состоит из более чем 50 помеченных файлов данных реальных и искусственных временных рядов, а также нового механизма оценки, разработанного для приложений реального времени. В этом репозитории они оценили некоторые из наиболее эффективных алгоритмов с их значениями производительности.
Мы решили использовать модель BiLSTM по следующим причинам:
- В задачах, где доступны все временные шаги входной последовательности, двунаправленные LSTM обучают два вместо одного LSTM во входной последовательности. Первый на входной последовательности как есть, а второй на обратной копии входной последовательности.
- Он отличается от однонаправленного LSTM тем, что имеет две сети, которые работают как в прямом, так и в обратном направлении, поэтому он может сохранять информацию как из прошлого, так и из будущего.
- BiLSTM показывают очень хорошие результаты, поскольку они могут лучше понимать контекст благодаря своим двунаправленным сетям.
Итак, основная идея заключалась в том, чтобы предсказать следующее значение time_step на основе некоторого набора предыдущих значений time_step, а затем найти разницу между фактическим и предсказанным значением. Если разница слишком велика, считайте их выбросами.
Модель прогнозирует значение для всех дней обучения, чтобы проанализировать производительность модели для всей последовательности, которую мы сохраняем в таблице для дальнейшего анализа производительности модели. Поскольку наша цель - найти выбросы, поэтому, если мы рассмотрим среднее значение и стандартное отклонение (стандартное значение) для всей последовательности, то глобальные или большие выбросы могут повлиять на эти значения, и возможно, что мы пропустим локальные выбросы. Чтобы избежать этого, мы сначала обнаруживаем глобальные выбросы, а затем вычисляем среднее значение и стандартное значение для каждого экземпляр time_step. Если ошибка в прогнозе следующего time_step превышает комбинацию среднего и стандартного значения последнего экземпляра time_step, то мы рассматриваем это как локальные выбросы.
Анализ результатов:
Модель BiLSTM тестировалась в наборе из 15 репозиториев с несколькими метриками, такими как строки изменений кода, проблемы, pull_requests и т. д.
- Модель работала довольно хорошо и смогла обнаружить тенденции и сезонность в показателях.
- Поскольку это проблема машинного обучения без присмотра, данные были помечены вручную, а затем были рассчитаны точность и полнота, и они оказались выше 0,8, что весьма впечатляет.
- Кроме того, производительность модели, проанализированная на основе ее прогнозируемых значений за период обучения и отношения ошибок к фактическим значениям, в большинстве случаев была ниже 0,5.
- Однако модель борется с метриками строк изменений кода из-за широкого диапазона значений и неравномерного распределения данных. Эти проблемы можно решить с помощью логарифмического преобразования только для этих метрик.
- Параметры в модели BiLSTM автоматически изменяются в зависимости от данных, что делает ее пригодной практически для всех типов данных.
Мои вклады:
Реализован Insight_Worker для метрики time_series pr864.
Реализовано
- функция time_series_metrics для сбора данных и предварительной обработки исходных данных
- Метод model_lstm для конфигурации модели LSTM
- метод preprocess_data для упорядочивания данных для метода lstm_keras
- Метод lstm_selection для выбора параметров time_step для разных полей репо
- Метод lstm_keras для обучения и прогнозирования выбросов, а также вставки новых моделей и сводки в соответствующие таблицы.
- метод insert_data для вставки выбросов в таблицу repo_insights и repo_insights_records
- Записные книжки для анализа данных и различных оценок результатов lstm_model присутствуют в time_series_notebook.
Тестирование, документация и финальный референс Ноутбук pr890
- Добавлено тестирование и документация
- Добавлен справочный блокнот для лучшего понимания реализованной модели.
Это был отличный опыт работы с сообществом CHAOSS в рамках программы GSoC. Эта программа помогла мне изучить обширное сообщество открытого исходного кода, дала возможность работать с такими опытными профессионалами. мои знания о понимании кода, написании эффективного и полезного кода.
Ознакомиться с моей проектной работой можно здесь.
Если у вас есть какие-либо предложения, вы можете прокомментировать их ниже или связаться со мной в LinkedIn.