В этой статье мы реализуем иерархическую модель машинного обучения для прогнозирования в приложении Dash, а затем развернем приложение в облаке. В этой статье не рассматривается создание приложения Dash.
Предварительные требования:
- Понимание иерархического прогнозирования (читайте эту статью).
- Как создать Dash-приложение.
- Как создавать модули/функции в python.
Данные
Данные, используемые в этом проекте, были получены от Kaggle. По сути, он детализирует различные временные ряды данных о спросе на продукты и указывает категории и склады, к которым относятся продукты.
Данные были преобразованы для целей этого проекта и агрегированы по месяцам и годам. Таким образом, модель прогнозирования прогнозирует спрос на ежемесячные периоды. Входные данные модели агрегируются по складу, категории продуктов, продуктам и месяцу-году, а затем выводятся данные с той же структурой.
Пользовательский интерфейс
Найдите ниже изображение интерфейса приложения:
Интерфейс приложения имеет четыре основные особенности:
- входные данные модели:
Здесь вы указываете горизонт прогнозирования и, при желании, указываете склад и/или интересующую категорию продукта. - прогнозная диаграмма:
выходные данные модели визуализируются в виде гистограммы. - карточка статистики:
Вывод группируется по продуктам, ранжируется и отображается здесь. - Таблица данных:
Подробное представление выходных данных модели.
Реализация модели
Следующие шаги определяют процедуру реализации модели машины в приложении в виде модуля:
- Создайте папку в каталоге вашего приложения и создайте файл «__init__.py». Это указывает на то, что файлы python в папке можно использовать в качестве модулей.
- Создайте файл питона
- Библиотеки импорта должны запускать построенную модель
import pandas as pd import sklearn import joblib import pickle
4. Загрузите файл модели ML
with open("modules/forecaster.pkl", 'rb') as f: model = joblib.load(f)
5. Определите функцию для запуска модели прогнозирования на указанном горизонте.
def forecast(fh): pred = model.predict(fh) final = pred.reset_index() return final
6. Импортируйте модуль в приложение dash
from modules import forecastingPipeline as forecaster
Модуль был создан в папке с именем modules в каталоге приложения dash. Это объясняет, почему модуль импортируется из модулей.
Функция обратного вызова
# inputs other than trigger button are called states # this allows the funstion to collect the inputed data, but wait on a trigger @callback( Output("projected-data", "data"), State("date-picker", "start_date"), State("date-picker", "end_date"), State("whse-selection", "value"), State("cat-selection", "value"), State("targets", "value"), Input("model-run", "n_clicks") ) def date_picker(start, end, whse, cat, target, click): #initializing variables periods = 0 fh = 0 start_date = start end_date = end if click is None: raise PreventUpdate else: # converting date inputs to datetime objects start_date = pd.Timestamp(start_date) end_date = pd.Timestamp(end_date) # setting forecasting horizon to specified date range fh = ForecastingHorizon( pd.PeriodIndex(pd.date_range(start = start_date, end = end_date, freq="M")), is_relative=False ) pred = forecastingPipeline.forecast(fh) # since predict attribute of selected model only takes fh, # other inputs will be applied as filters on model output if whse is not None and cat is not None: pred = pred[(pred['Warehouse'] == whse) & (pred['Product_Category'] == cat)] elif whse is not None: pred = pred[pred['Warehouse'] == whse] elif cat is not None: pred = pred[pred['Product_Category'] == cat] # converting dataframe to json serializable format pred_dict = pred.to_dict() output = json.dumps(pred_dict) return output
Теперь вы можете протестировать свое приложение, чтобы просмотреть выходные данные модели для указанных входных данных.
Развертывание приложения
Для размещения приложения мы будем использовать платформу приложений Digital Ocean.
- Создайте файл требований .txt в каталоге приложения. Запустите следующую команду в своем терминале. Убедитесь, что вы находитесь в каталоге приложения
pip -r freeze requirements.text
Это загрузит все библиотеки и версии, используемые при создании приложения. При развертывании приложения среда, созданная хостом, должна иметь все эти библиотеки для успешной сборки, развертывания и запуска приложения. Поэтому убедитесь, что этот файл часто обновляется, чтобы иметь последний охват используемых библиотек.
2. Разверните приложение на github
Убедитесь, что все файлы, к которым обращается приложение, находятся в каталоге приложения. Вы можете предоставлять данные используемым API или ссылки на данные из github. Это уменьшит размер вашего приложения.
3. Создайте учетную запись Digital Ocean. (вы получаете 200 долларов бесплатного кредита на 60 дней)
4. Создайте новый проект и приступайте к созданию приложения.
5. Выберите Github в качестве источника
6. Выберите репозиторий с вашим проектом и укажите каталог с вашим приложением и всеми сопутствующими файлами.
7. Поскольку в файле requirements.txt есть все зависимости, необходимые вашему приложению, вы можете пропустить раздел настройки среды.
8. Пропустите оставшиеся подсказки и приступайте к сборке приложения.
Все зависимости будут установлены, а образы Docker созданы для вашего приложения на этапе сборки. После этого приложение будет развернуто. Теперь вы можете просмотреть свое приложение для планирования запасов в браузере по предоставленной ссылке
Ваше приложение также автоматически обновляется при появлении нового обновления в ветке, связанной с экземпляром приложения.
Найдите ниже ссылку на веб-приложение: https://clownfish-app-8gbil.ondigitalocean.app/ и репозиторий github: https://github.com/ladyjossy77/retail-demand-forecaster.