Крок за кроком: Розгортання моделі машинного навчання за допомогою FastAPI, Docker та Streamlit

Привіт! Сьогодні я радий поділитися з вами, як створити ефективну систему виявлення фішингових сайтів за допомогою машинного навчання. У цій статті я покажу, як побудувати модель машинного навчання, що може виявляти фішингові сайти за характеристиками їхніх URL, а також як розгорнути її у вигляді веб-застосунку.

Для цього проєкту ми використаємо потужні інструменти: scikit-learn для алгоритмів машинного навчання, FastAPI для створення бекенд-API, Streamlit для побудови інтуїтивно зрозумілого інтерфейсу користувача, а також Docker для контейнеризації, що спрощує розгортання в різних середовищах.

Кроки проєкту:

  1. Визначення проблеми
  2. Дослідження даних
  3. Попередня обробка даних
  4. Розробка моделі
  5. Оптимізація моделі
  6. Розгортання

Проблема:

Фішингові атаки продовжують залишатися однією з основних загроз для користувачів Інтернету. За даними доповіді Anti-Phishing Working Group, фішингові атаки досягли рекордних рівнів у першому кварталі 2022 року, перевищивши 1 мільйон атак вперше. Ці атаки зазвичай спрямовані на фінансовий сектор, електронну комерцію та соціальні медіа, ставлячи під загрозу чутливу інформацію користувачів.

Набір даних:

Набір даних для цього проєкту був отриманий з UC Irvine Machine Learning Repository, і містить інформацію про 1,353 різні вебсайти. Дані про фішингові сайти можна знайти також на Kaggle.

Набір даних складається з 10 стовпців (9 характеристик та 1 класова мітка) і містить 548 легітимних URL, 702 фішингових та 103 підозрілі URL.

Дослідження даних:

Перше, що потрібно зробити — це перевірити набір даних на наявність пропущених значень і дублювання. Після цього можна перейти до вивчення розподілу класів у цільовій змінній.

З'ясували, що клас "Підозрілий" має лише 103 записи, що значно менше, ніж інші класи. Тому ми об'єднали цей клас із класом "Фішинг", щоб спростити модель і покращити її ефективність.

Попередня обробка даних:

Перед побудовою моделей потрібно підготувати дані. Спочатку ми розділили набір даних на тренувальну та тестову вибірки, а також здійснили масштабування числових змінних, щоб забезпечити рівномірний внесок кожної ознаки під час тренування моделі.

Розробка моделі:

Для побудови моделі ми використали кілька популярних алгоритмів машинного навчання, зокрема логістичну регресію, SVM, Random Forest, XGBoost та LightGBM. Використовуючи крос-валідацію, ми порівняли їх точність і з'ясували, що найкращі результати показали LightGBM, Random Forest і XGBoost.

Оптимізація моделі:

Для покращення результатів моделі Random Forest ми виконали налаштування гіперпараметрів за допомогою GridSearchCV. Найкращі параметри дозволили досягти точності 91.5% на тестових даних, з чудовою точністю та відгуком для обох класів.

Розгортання:

Для деплойменту ми використовували FastAPI для бекенд-API, Streamlit для інтерфейсу користувача і Docker для контейнеризації. Завдяки Docker ми змогли забезпечити послідовне середовище для нашого застосунку, яке легко розгортається в будь-якому середовищі.

Фреймворк FastAPI обробляє передбачення URL, отримані через API, а Streamlit надає зручний інтерфейс для введення даних. За допомогою Swagger UI можна протестувати API і перевірити точність результатів перед розгортанням у продакшн.

Висновок:

Ця стаття показала, як створити повноцінний застосунок машинного навчання для виявлення фішингових сайтів, використовуючи FastAPI, Docker і Streamlit. Застосовуючи потужні моделі машинного навчання, ми створили додаток, готовий до використання у реальному світі.

Перекладено з: Step-by-Step Deploying a Machine Learning Model using FastAPI, Docker and Streamlit