Привіт! Сьогодні я радий поділитися з вами, як створити ефективну систему виявлення фішингових сайтів за допомогою машинного навчання. У цій статті я покажу, як побудувати модель машинного навчання, що може виявляти фішингові сайти за характеристиками їхніх URL, а також як розгорнути її у вигляді веб-застосунку.
Для цього проєкту ми використаємо потужні інструменти: scikit-learn для алгоритмів машинного навчання, FastAPI для створення бекенд-API, Streamlit для побудови інтуїтивно зрозумілого інтерфейсу користувача, а також Docker для контейнеризації, що спрощує розгортання в різних середовищах.
Кроки проєкту:
- Визначення проблеми
- Дослідження даних
- Попередня обробка даних
- Розробка моделі
- Оптимізація моделі
- Розгортання
Проблема:
Фішингові атаки продовжують залишатися однією з основних загроз для користувачів Інтернету. За даними доповіді 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