В этой статье я покажу вам процесс развертывания вашей модели в Heroku Web с помощью библиотеки Streamlit. Для начала давайте поговорим о наборе данных и модели, которые мы используем в этой статье.

Наша постановка задачи состоит в том, чтобы предсказать, банкротится компания или нет. Наш образец набора данных выглядит так, как показано ниже.

Исследовательский анализ данных

Набор данных, с которым мы будем работать, очень прост. Он имеет 250 строк с семью столбцами (6 функций и 1 цель). Каждая функция имеет 3 дискретных значения 0, 0,5 и 1, что означает низкий, средний и высокий уровень соответственно. В процессе EDA мы понимаем, что набор данных очень чистый и не требует разработки функций.

ПОСТРОЕНИЕ МОДЕЛИ

Мы разделили данные на 3 способа: набор для обучения, набор для проверки и набор для тестирования. Мы использовали набор проверки, чтобы избежать утечки данных в тестовые данные во время обучения модели.

Мы использовали нейронные сети для разработки нашей модели для более качественных прогнозов. Гиперпараметры были оптимизированы и тщательно подобраны с помощью KerasTuner, чтобы избежать переобучения. Окончательная модель показала точность обучения 99,18% и точность тестирования 98,66% с 1 ошибкой классификации. Модель, которую мы построили, была очень удовлетворительной.

РАЗВЕРТЫВАНИЕ МОДЕЛИ

Я думаю, теперь вы, должно быть, разобрались с данными и моделью, давайте продолжим нашу основную тему — Развертывание модели.

Вещи, с которыми вы познакомитесь после этой статьи.

  1. Использование Streamlit для разработки и запуска вашего приложения на локальном компьютере.
  2. Создание учетной записи Heroku и развертывание вашего приложения в Интернете.

Использование Стримлит:

Streamlit — это платформа приложений с открытым исходным кодом для энтузиастов науки о данных, позволяющая создавать красивые приложения с минимальными затратами времени. Мы предпочитаем Streamlit, а не Flask, потому что для использования Streamlit не требуется знаний HTML. Зная важность Streamlit, давайте приступим к нашему коду.

Модели Keras можно распарывать, но я все же рекомендую использовать model.save() для сохранения модели на диск и избежания осложнений. Обученная модель сохраняется и загружается с помощью from keras.models import load_model library.

Создание нашего приложения

Сначала мы собираемся вводить данные для каждой из наших функций, используя виджет st.number_input. Этот метод можно использовать для ввода только дискретных числовых данных (с использованием параметров) во избежание ошибок.

Здесь st.sidebar используется для закрепления элементов ввода слева, что позволяет пользователям сосредоточиться на содержимом, а также поддерживать его организованность.

После ввода входных данных мы собираемся предсказать результаты, используя нашу загруженную модель. Для этого процесса мы собираемся использовать виджет st.button, который активирует функцию predict_bankruptcy (просмотрите код) при нажатии.

Теперь функция predict_bankruptcy возвращает выходные данные в результаты, и они отображаются с помощью виджета st.success, который может отображать наше сообщение об успехе для пользователя.

Таким образом, мы успешно изучили несколько виджетов и методов Streamlit для прогнозирования модели. Это создаст базовое приложение, но есть много методов и параметров, с которыми можно поиграться, чтобы ваше приложение выглядело красиво. Вы можете узнать о многих других функциях Streamlit из моего кода на github. Я добавлю свою ссылку на github в конце этой статьи для справки.

Если вы используете блокнот Jupyter, вам сначала нужно сохранить файл как .py. Затем вы можете запустить свое приложение на локальном компьютере, процесс очень прост. Вы можете открыть командную строку anaconda и ввести следующее.

Теперь ваше приложение должно работать в браузере по умолчанию, или вы можете скопировать URL-адрес и вставить его в браузер, чтобы запустить приложение. Та-да! Вы создали базовое приложение Streamlit для своей модели.

Развертывание на платформе Heroku

Практикуя науку о данных, многие студенты путаются, когда дело доходит до развертывания их модели в Интернете. Не волнуйтесь, я постараюсь облегчить вам этот процесс. Платформа Heroku — один из самых простых способов развернуть вашу модель в Интернете.

Что такое Героку?

Heroku — это сервисная платформа, которая позволит вам бесплатно создавать, запускать и управлять приложениями в облаке.

Создание учетной записи — первый шаг в этом процессе. После создания учетной записи вы можете перейти к Создать → Создать новое приложение.

Теперь вам нужно указать действительное имя для своего приложения и выбрать регион размещения для развертывания (это либо США, либо Европа), а затем нажать Создать приложение.

Следующим шагом будет переход на вкладку Развертывание и подключение вашей учетной записи Github к Heroku.

Ваши коды будут обновлены для создания вашего приложения через репозиторий Github.

Итак, давайте обсудим предварительные требования для вашего репозитория Github:

  • Вы должны создать новый репозиторий.
  • Ваш файл приложения Streamlit должен быть добавлен в этот репозиторий.
  • Ваш сохраненный файл .h5 обученной модели должен быть добавлен.
  • Необходимо добавить файл requirement.txt. (введите pip freeze > requirements.txt в вашей рабочей среде в приглашении anaconda, чтобы получить файл requirements.txt).
  • Procfile — необходимо добавить необходимый файл для запуска команд вашим приложением на платформе Heroku. Формат procfile приведен ниже.
web: sh setup.sh && stream lit run <app file name>
  • setup.sh — этот файл определяет переменные среды оболочки, необходимые для запуска вашего кода в приложении. Формат файла setup.sh приведен ниже.
mkdir -p ~/.streamlit/ 
echo "\
[server]\n\
port = $PORT\n\
enableCORS = false\n\
headless = true\n\
\n\
" > ~/.streamlit/config.toml
  • В случае любых дополнительных файлов, импортированных в код вашего приложения (например, изображений, наборов данных и т. д.), вы должны добавить исходный файл в свой репозиторий.

Не беспокойтесь, если вы не понимаете файлы Procfile и setup.sh, вам просто нужно следовать формату, чтобы он работал.

Я надеюсь, что все предварительные условия выполнены, и мы можем вернуться на платформу Heroku, с которой мы ушли.

Теперь вы можете подключитьрепозиторий Github к своей учетной записи Heroku. Затем вам следует перейти к параметру Развертывание вручную, выбрать основную ветвь и нажать Развернуть ветвь.

Теперь вы можете подождать, пока ваше приложение загрузится на платформу Heroku.

После этого вы получите сообщение о том, что ваше приложение успешно развернуто. Вы можете нажать Просмотр, чтобы открыть свое приложение.Та-да!
Вы можете найти мое приложение на сайте о банкротстве. Профилактика на https://bankruptcy-prevention.herokuapp.com/.

Примечание. После того, как ваша модель загружена на платформу Heroku, могут возникнуть проблемы из-за превышения размера слага. Итак, я собираюсь рассказать вам о некоторых хитростях, позволяющих уменьшить размер слагов.

- Попробуйте удалить все ненужные файлы, присутствующие в вашем репозитории github.

- Попробуйте уменьшить версии пакетов, которые вы упомянули в файле requirements.txt.

- Поскольку tensorflow требует много памяти для установки в вашем приложении, вы можете использовать tensorflow-cpu==2.5.0вместо tensorflow==2.7.0, чтобы уменьшить объем памяти, который тратится впустую.

Ссылка на мой репозиторий на github (включая набор данных и все необходимые файлы) — https://github.com/Vinoth-24/Bankruptcy-Prevention.

Заключение

Из этой статьи мы узнали, как развернуть рабочую модель на локальном компьютере, а также на веб-платформе Heroku с использованием библиотеки Streamlit. Я также рассказал об устранении неполадок, связанных с развертыванием на платформе Heroku.

В будущем я буду работать над оттачиванием своих навыков, чтобы предоставлять простые и точные знания сообществу Data Science. В моих следующих статьях я раскрою некоторые важные концепции науки о данных, которые могут показаться сложными (на самом деле нет).

Эта статья призвана помочь новичкам в развертывании моделей машинного обучения и глубокого обучения.

Любые предложения и критика тепло приветствуются. Спасибо, что остались до конца.