В этой статье я расскажу о работе, проделанной в период 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.