Годовой приход человека может зависеть от различных аспектов, таких как возраст, образование, род занятий, количество отработанных часов в неделю, его пол и многие другие характеристики. Набор данных «взрослые-входящие» предоставляет набор данных, включая некоторые из этих характеристик, и сообщает нам, превышает ли доход человека 50 тысяч долларов в год (›50 тысяч) или меньше 50 тысяч долларов в год (≤50 тысяч).

Ниже мы можем увидеть, как выглядит этот набор данных. Затем дается описание столбцов, присутствующих в наборе данных.

  • age: возраст человека. [непрерывно]
  • рабочий класс: тип работы. (Федеральный, Государственный, Частный,…) [категорический]
  • fnlwgt: Я не нашел описания для этого :( [непрерывно]
  • образование: уровень образования, полученный человеком. (бакалавр, 12 место, докторская степень,…) [категориальный]
  • education_num: Числовое представление об уровне образования. [непрерывно]
  • marital_status: статус семейного наследия. (женат, разведен, никогда не был в браке,…) [категорично]
  • род занятий: роль, которую человек играет в своей работе. (Управленческий, Продажи, Ремонтировать,…) [категорично]
  • отношения: роль, которую люди играют в своих семейных отношениях. (Жена, Муж, Собственный ребенок,…) [категорично]
  • race: Раса человека. (Черный, Белый, Азиатский,…) [категорический]
  • пол: биологический пол человека. [категорический]
  • capital_gain: прирост капитала для человека [непрерывно]
  • capital_loss: Убыток капитала для человека [непрерывно]
  • hours_per_week: общее количество отработанных часов в выходные.
  • native_country: Страна рождения человека. [категорический]
  • high_income: ›50 000 долларов США или ≤ 50 000 долларов США [по категориям]

Вы можете найти этот набор данных в следующем источнике: http://www.cs.toronto.edu/~delve/data/adult/desc.html

В этом посте мы предскажем, будет ли доход человека выше или ниже 50 тысяч долларов, используя модели «Дерево решений», «Случайный лес» и «Ансамбль дерева решений». Мы сделаем это с помощью модуля конвейера, предоставленного scikit-learn, вместе с модулями RandomForestClassifier и DecisionTreeClassifier. Чтобы создать ансамбль деревьев решений, мы будем использовать модуль BaggingClassifer, также предоставляемый sklearn. Мы будем использовать поиск по сетке, чтобы найти наилучшие настройки для нашего прогноза и сравнить результаты, полученные на каждом этапе настройки этой модели.

Для проведения наших тестов и оценок все характеристики этого набора данных были преобразованы в числовые характеристики. Таким образом, все следующие результаты были получены с преобразованным набором данных.

Мы начнем с конвейера, выполняющего преобразование характеристик из категориальных в числовые, выбора функций с помощью Select K best и задачи классификации с использованием моделей DecisionTree и Random Forest.

Используя cv поиска по сетке, мы добавим определение оценок как дерево решений, случайный лес и классификатор BaggingClassifier, выполняющий ансамбль деревьев решений.

Набор гиперпараметров, используемых в этой сетке, показан на рисунке 3.

В этом примере мы также изменим гиперпараметры oob_score и bootstrap модели BaggingClassifier. Таким образом, мы также можем протестировать нашу модель с образцами вне пакета, то есть образцами, которые не использовались во время нашего обучения.

Для этого мы должны установить для oob_score и bootstrap значение True. Чтобы изучить больше возможностей, мы также проверим, работает ли наша модель лучше без использования образцов out of bag, в этом случае мы должны установить oob_score и bootstrap на False.

Найдена лучшая модель

После выполнения поиска по сетке методом подгонки лучшей моделью был случайный лес. Гиперпараметры модели показаны в списке ниже.

Оценщик: классификатор случайного леса

  • критерий: энтропия
  • n_estimators: 400
  • max_leaf узлов: 16
  • max_depth: 16
  • Минимальное количество образцов листа: 1
  • Минимальное количество выборок: 2
  • fs_k: 14

В нашем примере точность модели в наборе тестовых данных составила примерно 85,27%. Отчет о классификации показан на рисунке 4.

Интерпретация модели

Для интерпретации модели воспользуемся ELI5.

ELI5 - это пакет Python, используемый для отладки классификаторов машинного обучения и объяснения прогнозов.

Сначала мы воспользуемся функциональностью show_weights в модели, которую мы достигли с помощью поиска по сетке. Таким образом, мы можем увидеть предопределенную версию важности функции модели случайного леса.

Затем мы определим важность перестановки, используя нашу модель и eli5, чтобы мы могли увидеть вклад каждой функции в прогноз. Метод важности перестановки перемешивает по одной функции за раз, затем подбирает и прогнозирует модель, чтобы увидеть, была ли ее точность скомпрометирована, он вычисляет этот показатель, выполняя разницу между точность, достигнутая с исходной моделью и моделью с перетасовкой.

Этот процесс повторяется со всеми функциями. Чем больше разница в точности прогнозов, тем важнее характеристика.

На рисунках 4 и 5 показаны оценка важности характеристик модели и важность перестановки соответственно.

Справочная документация по ELI5

https://eli5.readthedocs.io/en/latest/overview.html