Дерево решений - строим
Моя цель - в статье показать путь от поиска и подготовки данных, построение дерева решений до интерпретации результатов.
Захотелось ручками вспомнить, что такое Google Colab, машинное обучение, дерево решений, датасет и Python. Поехали!
Захожу в Google Colab и вижу... супер старые проекты : D
Нашла датасет. Коротко о нём:
Опубликован в 1994 году и содержит 1000 кредитных заявок (записей) и 20 признаков. Среди них: срок кредита, сумма, кредитная история, накопления, занятость, возраст, жильё и т.п. Задача - классифицировать кредитный риск как хороший/плохой
Сильно не буду углубляться в подробности и капать в глубь, лишь сформулирую вопрос, по которому буду работать - меня интересует:
Можно ли по характеристикам клиента предсказать, является ли его кредитный риск хорошим или плохим и что именно использует дерево решений для такого решения?
Итак, что делаю, чтобы ответить на вопрос:
Шаг 2. Забираем код по кнопке "Import in Python" и загружаем датасет (ссылка на него выше).
Единственное, название переменной для себя взяла как data - короче и лаконичнее выглядит, чем statlog_german_credit_data ))
С помощью X.head() видим таблицу с характеристиками. И тут можем заметить, что названия и значения намеренно обезличены - Attribute1, Attribute2 и т.п. - ну да, а зачем читать описание датасета, если можно в процессе это выяснить) Это как купить конструктор и сначала начать его собирать, а когда ничего не вышло - только после этого посмотреть инструкцию : ))
Все же посмотрела подробнее про датасет - и там есть описание для каждой характеристики.
Шаг 3. Теперь разделяем данные на обучающие и тестовые в разрезе, что 80% отводим на обучение, а 20% на проверку. То есть 800 заявок используем для обучения дерева, а на оставшихся 200 дерево будет само предсказывать.
Ладно, с первого раза у меня не получилось : D
Я использовала model.fit() предполагая, что задействованы одни числа, но в А11 текстовое значение. т.е. ошибка фактически говорит, что мы попытались А11 превратить в число, а оно не превращается ))
...на что получила совет закодировать категориальные признаки в числа, что ж, попробуем.
Получили точность всего 67,5%.
Итак, опишу коротко, что мы сделали в шагах 3-4:
Обучили дерево на 800 заявках на кредиты, в каждой заявке есть характеристики по типу срока и суммы кредита, возраста, кредитной истории и т.п. И есть целевая переменная - хороший или плохой кредитный риск. Во время обучения дерево не видело оставшиеся 200 заявок. После обучения мы отдали эти 200 заявок и спросили - какой у каждой кредитный риск? И как видим, оказалось, что из 200 случаев дерево правильно определило для 67,5%.
Дальше пошли мои изыскания и копания вглубь, потому что в процессе обнаружилось множество факторов, которые я не могла оставить без внимания - по типу, что из 20 характеристик вдруг стало 61 (перевели категориальные значения в набор числовых признаков, поэтому один столбец мог превратиться сразу в несколько). И другие не менее требующие внимания вопросы, о которых я сейчас не буду писать.
В итоге мне всё же захотелось посмотреть на само дерево, ради которого тут все собрались, показываю:
И если коротко из того, что еще удалось вытащить:
Получила матрицу ошибок, которая выглядит так:
это говорит о том, что из 200 тестовых заявок:
- 106 хороших заявок дерево правильно определило как хороших
- 34 хороших ошибочно назвало плохими
- 29 плохих правильно определило как плохих
- 31 плохих ошибочно определило как хороших
отсюда и взялся процент 67,5. 106+29 = 135 правильно определенных заявок, а это 67,5%.
В общем то мой вывод такой - спать надо в час ночи, а не деревья выращивать.
Может, допишу когда-нибудь. А может, останется и в таком виде.
Широкое поле для ответов на вопросы и анализ, но оставлю это на потом.
Подписывайтесь на мой тг канал, зову! Тык - Надежда WEBa
Посты про Веб, сайты и ИТ