AI
August 18

Дерево решений - строим

Моя цель - в статье показать путь от поиска и подготовки данных, построение дерева решений до интерпретации результатов.

Захотелось ручками вспомнить, что такое Google Colab, машинное обучение, дерево решений, датасет и Python. Поехали!



Захожу в Google Colab и вижу... супер старые проекты : D

Старички колаба

Но сейчас не о них.

Нашла датасет. Коротко о нём:

Опубликован в 1994 году и содержит 1000 кредитных заявок (записей) и 20 признаков. Среди них: срок кредита, сумма, кредитная история, накопления, занятость, возраст, жильё и т.п. Задача - классифицировать кредитный риск как хороший/плохой

Сильно не буду углубляться в подробности и капать в глубь, лишь сформулирую вопрос, по которому буду работать - меня интересует:

Можно ли по характеристикам клиента предсказать, является ли его кредитный риск хорошим или плохим и что именно использует дерево решений для такого решения?

Итак, что делаю, чтобы ответить на вопрос:

Шаг 1. Создаём New Notebook

New Notebook

Шаг 2. Забираем код по кнопке "Import in Python" и загружаем датасет (ссылка на него выше).

Единственное, название переменной для себя взяла как data - короче и лаконичнее выглядит, чем statlog_german_credit_data ))

Код для загрузки датасета

Получаем таблицу.

С помощью X.head() видим таблицу с характеристиками. И тут можем заметить, что названия и значения намеренно обезличены - Attribute1, Attribute2 и т.п. - ну да, а зачем читать описание датасета, если можно в процессе это выяснить) Это как купить конструктор и сначала начать его собирать, а когда ничего не вышло - только после этого посмотреть инструкцию : ))

Загрузили датасет

Все же посмотрела подробнее про датасет - и там есть описание для каждой характеристики.

описание характеристик

Шаг 3. Теперь разделяем данные на обучающие и тестовые в разрезе, что 80% отводим на обучение, а 20% на проверку. То есть 800 заявок используем для обучения дерева, а на оставшихся 200 дерево будет само предсказывать.

Разделяем данные на обучающие и тестовые

Шаг 4. Строим дерево решений

Ладно, с первого раза у меня не получилось : D

Я использовала model.fit() предполагая, что задействованы одни числа, но в А11 текстовое значение. т.е. ошибка фактически говорит, что мы попытались А11 превратить в число, а оно не превращается ))

Обратилась к ИИ за помощью...

ИИ в помощь!

...на что получила совет закодировать категориальные признаки в числа, что ж, попробуем.

Шутка: У нас в семье нет программистов. Также закодированный дед:

и теперь проверяем:

Получили точность всего 67,5%.

Итак, опишу коротко, что мы сделали в шагах 3-4:

Обучили дерево на 800 заявках на кредиты, в каждой заявке есть характеристики по типу срока и суммы кредита, возраста, кредитной истории и т.п. И есть целевая переменная - хороший или плохой кредитный риск. Во время обучения дерево не видело оставшиеся 200 заявок. После обучения мы отдали эти 200 заявок и спросили - какой у каждой кредитный риск? И как видим, оказалось, что из 200 случаев дерево правильно определило для 67,5%.

Дальше пошли мои изыскания и копания вглубь, потому что в процессе обнаружилось множество факторов, которые я не могла оставить без внимания - по типу, что из 20 характеристик вдруг стало 61 (перевели категориальные значения в набор числовых признаков, поэтому один столбец мог превратиться сразу в несколько). И другие не менее требующие внимания вопросы, о которых я сейчас не буду писать.

В итоге мне всё же захотелось посмотреть на само дерево, ради которого тут все собрались, показываю:

Дерево решений

И если коротко из того, что еще удалось вытащить:

Получила матрицу ошибок, которая выглядит так:

[[106 34]
[ 31 29]]

это говорит о том, что из 200 тестовых заявок:

  • 106 хороших заявок дерево правильно определило как хороших
  • 34 хороших ошибочно назвало плохими
  • 29 плохих правильно определило как плохих
  • 31 плохих ошибочно определило как хороших

отсюда и взялся процент 67,5. 106+29 = 135 правильно определенных заявок, а это 67,5%.


В общем то мой вывод такой - спать надо в час ночи, а не деревья выращивать.

Может, допишу когда-нибудь. А может, останется и в таком виде.

Широкое поле для ответов на вопросы и анализ, но оставлю это на потом.

Подписывайтесь на мой тг канал, зову! Тык - Надежда WEBa
Посты про Веб, сайты и ИТ