#apache-spark #pyspark #user-defined-functions #forecasting
Вопрос:
Мы оцениваем spark как параллельный сервер для обучения тысяч моделей прогнозирования временных рядов в соответствии с определенной иерархией (группами): customer_id, site_id и product_id.
На сегодняшний день мы создали уникальный идентификатор comb_id, который отличается для любой комбинации этих 3 переменных. Данные выглядят более или менее так:
comb_id customer_id site_id timestamp value
1 87 55 2020-01-12 12:00 43.5
1 87 53 2020-01-12 12:00 45.6
1 87 65 2020-01-12 12:00 48.2
2 87 55 2020-01-12 12:00 43.5
2 87 53 2020-01-12 12:00 45.6
2 87 55 2020-01-12 12:00 43.5
То, что мы делаем, — это агрегирование столбца значений в соответствии с идентификатором комбинации, мы выполняем некоторую предварительную обработку, создаем лаги, скользящие средние, функции календаря и объединяем их с дополнительными внешними функциями. Затем мы выполняем контейнерную рабочую нагрузку, запускаем n_comb_id * number_of_algorithms*hpo_jobs_for_each_algorithm.
Эта процедура работает очень хорошо в том смысле, что мы можем настроить каждый из отдельных алгоритмов и получить наилучшую модель наилучшего алгоритма для каждого combination_id. Однако это очень медленно, так как у нас есть ограничение на количество контейнеров, которые мы можем запустить, и это может стать проблемой в будущем.
Мы нашли этот полезный ресурс: https://towardsdatascience.com/pyspark-forecasting-with-pandas-udf-and-fb-prophet-e9d70f86d802 и нам удалось запустить это для нашего варианта использования, но мы видим следующие проблемы:
- Невозможно настроить каждую модель пророка для каждой группы (или, по крайней мере, мы не знаем, как это сделать).
- Мы используем XGBoost и randomForest вместо prophet.
Сталкивался ли кто-нибудь с такой же проблемой раньше?
PS: Наше понимание spark очень ограничено, поэтому приносим извинения, если мы спрашиваем о чем-то тривиальном.