Лабораторная работа №4
📌 Тема
Классификация с применением Scikit-Learn. Предсказание дефолта по кредиту
Ссылка на ipynb-board
Отчет
Работа с другими моделями
Наилучший ROC-AUC получился при использовании Gradient-Boosting - 0.8641. Почти такое же значение иметь Random Forest(0.8640). Остальные модели проигрывают - Logistic Regression: 0.6618(предполагает, что вероятность дефолта линейно зависит от признаков), KNN: 0.5576(ищет локальную схожесть), SVM - 0.4259 (подзодит для работы с плотными непрерывными пространствами, у нас же таблица с разнородными признаками). Изменение параметров Random Forest также не принесло значительных улучшений
Причины невозможности построения лучшей модели
- Информационный потолок датасета (Data Ceiling): В датасете содержится всего 10 анкетных признаков. Эти данные описывают статус заемщика, но не его поведение. Они несут ограниченную информацию о реальной платежной дисциплине. Для достижения AUC > 0.90 в индустрии используются поведенческие данные: история транзакций, скорость погашения предыдущих займов, данные из бюро кредитных историй и другие.
- Природа Gradient Boosting / Random Forest: Ансамбли деревьев уже выжимают максимум нелинейных взаимодействий из таблицы. Они автоматически находят оптимальные пороги и комбинации признаков. Попытка усложнить архитектуру (добавить слои нейросети или увеличить глубину деревьев) приведет не к росту качества, а к переобучению на шуме.
- Шум в финансовых данных: Два человека с одинаковым доходом, возрастом и долговой нагрузкой могут повести себя по-разному из-за внешних факторов (потеря работы, болезнь, изменение макроэкономики), которые в данных отсутствуют. К этим выбросам очень чувствительны некоторые модели (например, KNN) Мой скор 0,86 является хорошим результатом для этой задачи.
План интеграции с веб-сервисом
- Сериализация и подготовка артефактов модели (сохранение обученную модель и все объекты предобработки в едином формате, размещение артефактов в отдельной директории проекта, исключение их из системы контроля версий (добавьте в .gitignore)
- Организация структуры проекта (разделение кода на пакеты для загрузки модели, бизнес-логики, маршрутизации, валидации и конфигурации, настройка управления зависимостями и виртуальное окружение.
- Инициализация веб-приложения
- Загрузка модели и пайплайна при старте сервера (загрузка модели и объектов предобработки один раз при инициализации приложения, а не при каждом запросе. Реализация проверку целостности артефактов при старте. В асинхронных фреймворках (FastAPI) используйте lifespan-события или startup/shutdown хуки; в Flask/Django – инициализацию через middleware или готовящие скрипты.
- Валидация входных данных (Определение схемы входного JSON: типы данных, допустимые диапазоны, обязательные и опциональные поля, обработка null)
- Реализация эндпоинта предсказания (Создание маршрута, который принимает JSON, вызывает валидацию, применяет предобработку и выполняет инференс. Преобразование сырые данные в формат, ожидаемый моделью (DataFrame или numpy-массив). Возврат структурированного ответа
- Обработка ошибок и логирование
- Тестирование
- Контейнеризация и развертывание (упаковка приложения в docker-образ, автоматизация сборки, развертывания)
- Мониторинг, версионирование, поддержка