Анализ данных на Python в примерах и задачах

Пример построения модели машинного обучения

В материале рассматривается практический процесс построения модели машинного обучения для задачи кредитного скоринга (выдавать или не выдавать кредит). Автор демонстрирует полный цикл работы: импорт данных, их разделение на обучающую и тестовую выборки с помощью библиотеки Scikit-learn, обучение трех алгоритмов (k-ближайших соседей, логистическая регрессия, случайный лес), оценку точности моделей и ручной подбор гиперпараметров. Особое внимание уделяется единообразию интерфейса методов fit и predict, а также влиянию изменения параметров (например, количества соседей) на итоговую точность. В конце даются рекомендации по использованию официальной документации для углубленной настройки моделей.

Основные мысли

1. Единый интерфейс Scikit-learn: все алгоритмы используют одинаковые методы — fit для
обучения и predict для предсказания, что упрощает эксперименты.
2. Ключевая роль гиперпараметров: значения по умолчанию редко дают оптимальный результат;
ручное или автоматическое изменение параметров (например,n_neighbors) может значительно повысить точность.
3. Локальный максимум: увеличение параметра не всегда улучшает модель — был найден пик
точности при n_neighbors=6, а при 8 или 10 точность падала.
4. Сравнение алгоритмов: случайный лес показал наивысшую точность (около 72–73%) без тонкой настройки, тогда как логистическая регрессия — около 64%, а k-ближайшие соседи — 62% (при параметрах по умолчанию).
5. Важность воспроизводимости: для алгоритмов со случайностью (случайный лес) необходимо
фиксировать random_state, чтобы результаты можно было повторить.

Показывать лекцию целиком
Краткое изложение

1. Импорт и подготовка данных:
o Загружен датасет о заёмщиках (демографические и финансовые признаки).
o Целевая переменная: 0 — кредит не выдавать, 1 — выдавать.
o Данные разделены на 4 части: X_trainX_test (признаки) и y_trainy_test (правильные ответы). Модель обучается на y_train, а y_test используется только для оценки.
2. Выбор и обучение алгоритмов:
o Импортированы три
класса: KNeighborsClassifierLogisticRegressionRandomForestClassifier.
o Каждый алгоритм вызывается с параметрами по умолчанию (например, n_neighbors=5).
o Обучение происходит через метод fit(X_train, y_train).
3. Оценка и предсказания:
o Метод predict(X_test) генерирует предсказания модели.
o Метрика accuracy_score(y_test, y_pred) вычисляет долю правильных ответов (в примере — 62% для KNeighbors).
4. Ручной подбор гиперпараметров:
o Изменяли n_neighbors  с 5 на 6 — точность выросла (локальный максимум).
o При значениях 7, 8, 10 — точность падала.
o Для логистической регрессии меняли max_iterverbosen_jobs  — точность осталась ~64%.
o Для случайного леса меняли min_samples_split И min_samples_leaf  — точность упала с 73% до 69%.
5. Итоги и документация:
o Scikit-learn предоставляет единый интерфейс для сотен алгоритмов.
o Для глубокой настройки следует обращаться к официальной документации (User Guide, Tutorials).

Выводы

1. Библиотека Scikit-learn позволяет быстро перебирать разные алгоритмы с минимальными изменениями кода (меняется только название класса).
2. Значения гиперпараметров по умолчанию — лишь отправная точка; без настройки модель может работать далеко не оптимально (например, 62% против 73%).
3. Ручной перебор параметров трудоёмок и не гарантирует глобального максимума — в дальнейшем необходим автоматический поиск (Grid Search, Random Search).
4. Случайный лес на этих данных показал лучшую точность «из коробки» (72–73%), что делает его хорошим кандидатом для старта.
5. Понимание внутреннего устройства алгоритма не обязательно для базового применения, но важно
для осмысленной настройки параметров (например, что такое min_samples_leaf).

Вопросы для самопроверки

1. Почему набор данных был разделён именно на 4 части, а не на 2? Какую роль играют ,X_trainy_trainX_testy_test?
2. Что произойдёт с точностью модели k-ближайших соседей, если выбрать n_neighbors=1? А если n_neighbors=100? Почему?
3. В чём преимущество единого интерфейса fit/predict  в Scikit-learn? Приведите пример, как бы вы обучили логистическую регрессию, заменив всего одну строчку кода.
4. Почему для случайного леса важно задавать random_state, а для логистической регрессии — не обязательно?
5. В тексте точность модели при n_neighbors=6 выше, чем при n_neighbors=5 и n_neighbors=10. Означает ли это, что 6 — всегда оптимальное число соседей для любых данных?
6. Какие ещё метрики качества (помимо accuracy_score) можно использовать для задачи кредитного скоринга и почему accuracy может быть недостаточно?

Вернуться к учебному плану