Вопрос или проблема
Я создаю нечто очень похожее на этот пример проекта BigQuery ML.
Моя система отличается в двух направлениях:
Во-первых, ей потребуется несколько тысяч временных рядов, поэтому я предпочел бы использовать функцию множественных рядов, чем иметь тысячи отдельных моделей.
Во-вторых, данные более непредсказуемы в долгосрочной перспективе (в отличие от периодических или сезонных), поэтому требуется довольно частая переобучаемость, при этом обнаруживаются только локальные тренды.
Данные на самом деле мониторят напряжения в устройствах на батарейках, которые обычно падают с линейной скоростью, но иногда могут падать намного быстрее в зависимости от использования, а затем заряжаются случайным образом. Я прогнозирую будущее напряжение и предсказываю, когда произойдет критический уровень. Я протестировал одну модель, и предсказания оказались впечатляюще хорошими, ARIMA, похоже, балансирует как долгосрочное типичное поведение, так и локальные недавние изменения, даже несмотря на то, что оно является апериодическим.
Что касается данных, я получаю новые данные от каждого устройства индивидуально с случайными интервалами. Поэтому мне нужно ввести эти новые данные в модель, переобучить её и обновить прогноз для временного ряда этого устройства.
Я могу ограничить количество раз, когда это обновление происходит, например, раз в час, а не делать это на основе событий в реальном времени. Почти в реальном времени было бы отлично, но это не обязательно.
Если бы у меня было несколько тысяч отдельных моделей, это было бы тривиально спроектировать, я бы обновил данные (таблица BigQuery), а затем воссоздал эту конкретную модель, что занимает около 30 секунд.
Однако имея все ряды в одной модели, похоже (из документации), что мне придется выбросить всю модель со всеми тысячами рядов и переобучить всё это. Я в настоящее время не знаю, сколько времени это займет, как это масштабируется, но предполагаю, что это будет значительно дольше и, вероятно, дороже. Все, кроме одного временного ряда, остаются неизменными, поэтому это кажется очень расточительной операцией.
Так есть ли способ переобучить только один временной ряд в модели ARIMA BigQuery?
Я прочитал интересные заметки в разделе ограничений для синтаксиса CREATE MODEL, специфичного для временных рядов, которые обсуждают обработку тысяч рядов.
Я прочитал этот вопрос, но меня не убедила ссылка на использование “горячего старта”, поскольку он не оставляет ссылок на документы, и это не кажется доступным в модели ARIMA.
Я также читал этот вопрос, который больше касается общей необходимости переобучения.
После реализации и тренировки этой модели и лучшего понимания деталей, похоже, что короткий ответ – НЕТ, мне придется заново создать и обучить всю модель.
Это занимает около 7 минут, чтобы обучить около 3,500 рядов с примерно 100 точками данных каждый из начального набора данных. Это может увеличиваться по мере добавления данных в рамках инкрементальной ETL без конца.
Ответ или решение
Обновление и повторное обучение модели машинного обучения, особенно в контексте времени, представляет собой критически важный аспект работы с данными в BigQuery ML. Рассмотрим более подробно ваш вопрос о том, возможно ли обновление данных и повторное обучение только одной из нескольких временных рядов в модели ARIMA, созданной в BigQuery.
Проблема и контекст
Вы описали ситуацию с тысячами временных рядов, выявляя необходимость в собранной модели, которая могла бы обрабатывать данные от множества устройств с различными временными отметками. Это требует функциональности, которая позволяет реализовать быстрые обновления модели, особенно при наличии непредсказуемых изменений в данных, что делает ARIMA особенно подходящей в данной ситуации.
Текущие ограничения BigQuery ML
К сожалению, в текущей реализации BigQuery ML нет функции, позволяющей обновлять или повторно обучать только одну временную серию в модели ARIMA. При использовании модели для нескольких временных рядов вся модель должна быть обновлена, даже если данные для большинства рядов остаются неизменными. Это связано с архитектурой модели и тем, как она обрабатывает данные.
Процесс обновления модели
Когда вы добавляете новые данные для одной из временных серий, вам необходимо:
-
Обновление таблицы данных: Вероятно, у вас уже есть автоматизированный процесс для обновления данных в таблице BigQuery.
-
Повторное создание модели: После обновления данных вам нужно будет начать процесс повторного обучения модели. Это действие требует времени, и вы отметили, что для модели с 3500 временными рядами и 100 точками данных на ряд это занимает около 7 минут. Это время может увеличиваться по мере роста объемов данных, добавляемых в процессе ETL.
Альтернативные подходы
-
Модели для отдельных временных рядов: Если в вашем проекте не критично иметь одну модель на все временные ряды, вы можете создать отдельные модели для каждого временного ряда. Хотя это и увеличит количество моделей, это позволит вам обновлять каждую модель отдельно по мере поступления новых данных, избегая ненужных перерасходов ресурсов и времени.
-
Иерархическая модель: Рассмотрите возможность использования методов иерархического предсказания, которые могут включать более простые модели, пригодные для работы с предсказаниями на основе местных тенденций.
-
Переход на другие платформы: Если ваши требования к обновлениям данных становятся слишком ограничительными в BigQuery, рассмотрите возможность использования других платформ или библиотек для машинного обучения, таких как TensorFlow или PyTorch. Они могут предложить более гибкие решения для обновления моделей.
Заключение
На текущий момент, обновление только одного временного ряда в модели ARIMA в BigQuery ML невозможно, и вам необходимо будет повторно обучить всю модель при появлении новых данных. Хотя у этого метода есть свои недостатки, данный подход предоставит вам стабильное поведение модели. Тем не менее, для оптимизации процессов рекомендуется рассмотреть возможность разделения временных рядов на несколько моделей или перейти к более адаптивным решениям, если это возможно.