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

Алгоритм деревьев решений

Лекция посвящена практической реализации алгоритма «Деревья решений» на Python. В ходе занятия слушатели знакомятся с установкой фреймворка Graphviz для визуализации, учатся подготавливать данные, строить модели с разными критериями (Джини и энтропия), визуализировать полученные деревья и оценивать их качество с помощью метрик (Confusion matrix, Accuracy). Также обсуждается важность выбора метрики в зависимости от предметной области (например, медицинская диагностика) и влияние гиперпараметров на переобучение.

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

1. Установка окружения: Для работы с деревьями решений и их визуализацией требуется установить пакет graphviz (в систему) и библиотеки pydotplus, graphviz (в Python), а также прописать путь в переменные среды.
2. Главные гиперпараметры дерева: Ключевые параметры, влияющие на глубину и переобучение — max_depth (максимальная глубина), min_samples_split (мин. элементов для разбиения), min_samples_leaf (мин. элементов в листе).
3. Критерии разбиения: Алгоритм может использовать два критерия: Джини (Gini impurity) и энтропия (Information gain). Они используют разные формулы, что приводит к построению разных деревьев.
4. Визуализация: Graphviz позволяет сохранять деревья в форматах PDF и PNG, делая процесс принятия решений моделью полностью интерпретируемым.
5. Выбор метрики: Нет универсальной метрики. Для несбалансированных классов или задач с высокой ценой ошибки (например, пропуск болезни) важнее Precision/Recall/F1, а не просто Accuracy.
Показывать лекцию целиком
Краткое изложение

Введение и установка инструментов
Лектор напоминает, что продолжается курс по анализу данных на Python. Для начала работы необходимо установить фреймворк Graphviz (бесплатно), который позволяет рисовать красивые графики деревьев. После скачивания дистрибутива с официального сайта, важно прописать путь до папки bin установленной программы в системную переменную PATH. Далее из Jupyter Notebook через !pip install устанавливаются пакеты pydotplus и graphviz. В случае проблем с обнаружением библиотеки рекомендуется перезапустить ядро или выполнить специфические команды в Anaconda Prompt.

Подготовка данных и импорт библиотек
Импортируются стандартные библиотеки: numpy, pandas. Из sklearn забираются train_test_split, DecisionTreeClassifier, а также метрики accuracy_score и confusion_matrix. Данные загружаются из интернета (датасет сбалансированный).
Описание датасета: В данных скрыта простая формула: умножение первых двух признаков (влево) и вторых двух (вправо) определяет класс (Left / Right / Balanced). Задача модели — «нащупать» эту закономерность.

Построение и обучение моделей
Данные делятся на обучающую и тестовую выборки (70/30). Создаются две модели:
1. clf_gini с критерием Джини.
2. clf_entropy с критерием Энтропии.
Оба дерева имеют параметры: random_state=100, max_depth=3, min_samples_leaf=5. Модели обучаются на тренировочных данных.

Визуализация и сравнение деревьев
Используя Graphviz, лектор строит картинки деревьев. Оказывается, что корневые узлы у обоих деревьев совпадают (разбиение по X2), но на следующих уровнях деревья начинают различаться из-за разных формул расчета прироста информации. Сохранение графиков происходит через команды graph.write_pdf() и graph.write_png().

Оценка качества и выводы
Сравнение через confusion matrix показывает недостатки — оба дерева не определили ни одного объекта первого класса. Accuracy у Джини оказалась чуть выше, чем у энтропии. Лектор демонстрирует, как изменение гиперпараметров (убирая ограничения глубины) влияет на результат. В конце обсуждается важность выбора метрики: в медицине (анализ на ВИЧ) ложное успокоение (false negative) гораздо опаснее ложной тревоги (false positive).

Выводы

1. Деревья решений интерпретируемы: В отличие от «черных ящиков» (нейронных сетей), дерево можно визуализировать и понять логику каждого ответа.
2. Критерии Джини и энтропия работают по-разному: Несмотря на похожую корневую вершину, внутренняя структура и результаты моделей отличаются. Выбор критерия — часть настройки модели.
3. Гиперпараметры критичны: max_depth и min_samples_leaf напрямую борются с переобучением. Без них дерево может идеально запомнить обучающую выборку, но плохо работать на тесте.
4. Accuracy не всегда главный показатель: В задачах с неравной ценой ошибки нужны другие метрики (Precision, Recall, F1, ROC-AUC).
5. Рабочее окружение требует настройки: Установка graphviz — классический пример, когда мало поставить pip, нужно еще прописать системные пути.

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

1. Установка: Почему после установки graphviz через pip его нужно дополнительно прописывать в переменные среды PATH, и что будет, если этого не сделать?
2. Гиперпараметры: В чем разница между min_samples_split=10 и min_samples_leaf=5? Придумайте пример разбиения узла, где первый параметр разрешает деление, а второй — запрещает.
3. Визуализация: Какие форматы для сохранения деревьев поддерживает graphviz и чем они удобны при работе с большими деревьями (более 10 уровней)?
4. Сравнение критериев: Опишите ситуацию (на примере текстовой или медицинской задачи), где дерево с энтропией даст лучшую интерпретируемость, чем дерево с Джини, даже если точность у них одинаковая.
5. Метрики: Почему в случае с анализом на ВИЧ ложноположительный результат (FN) считается менее критичным, чем ложноотрицательный (FP)? Какую метрику нужно максимизировать в первую очередь в таком случае?
Вернуться к учебному плану