Понимание деревьев решений: прирост информации и примесь Джини
Деревья решений: обзор
Деревья решений — это фундаментальная концепция в машинном обучении и науке о данных. Они предлагают прозрачный и интуитивно понятный способ принятия решений, разбивая сложные проблемы на ряд более простых решений.
По своей сути дерево решений — это древовидная модель, которая принимает решения на основе набора условий. Каждый внутренний узел в дереве представляет решение, основанное на определенном признаке, а каждый листовой узел представляет прогнозируемый результат или класс. Деревья решений превосходно справляются как с задачами классификации, так и с регрессией, что делает их универсальными инструментами анализа данных.
Преимущества деревьев решений
1. Интерпретируемость. Деревья решений предоставляют удобочитаемые решения, что делает их отличным выбором для объяснения и обоснования прогнозов модели.
2. Обработка нелинейности. Деревья решений могут фиксировать сложные взаимосвязи между переменными, в том числе нелинейные, без необходимости обширной предварительной обработки.
3. Важность функции. Деревья решений позволяют оценить важность каждой функции в процессе принятия решений.
Ограничения и преодоление проблем
1. Переобучение. Глубокие деревья решений могут переобучать данные обучения. Эту проблему можно решить, обрезав дерево или используя ансамблевые методы, такие как случайные леса.
2. Склонность к доминирующим классам. В наборе данных с несбалансированным классом деревья решений могут отдавать предпочтение классу большинства. Такие методы, как взвешивание классов или изменение критерия разделения, могут смягчить эту проблему.
Для практического примера мы будем использовать набор данных Churn онлайн-сервиса.
No 54.543981 Yes 45.456019 Name: Churn, dtype: float64
Index(['customerID', 'gender', 'SeniorCitizen', 'Partner', 'Dependents', 'tenure', 'CallService', 'MultipleConnections', 'InternetConnection', 'OnlineSecurity', 'OnlineBackup', 'DeviceProtectionService', 'TechnicalHelp', 'OnlineTV', 'OnlineMovies', 'Agreement', 'BillingMethod', 'PaymentMethod', 'MonthlyServiceCharges', 'TotalAmount', 'Churn'], dtype='object')
gender 0.0 SeniorCitizen 0.0 Partner 0.0 Dependents 0.0 tenure 0.0 CallService 0.0 MultipleConnections 0.0 InternetConnection 0.0 OnlineSecurity 0.0 OnlineBackup 0.0 DeviceProtectionService 0.0 TechnicalHelp 0.0 OnlineTV 0.0 OnlineMovies 0.0 Agreement 0.0 BillingMethod 0.0 PaymentMethod 0.0 MonthlyServiceCharges 0.0 TotalAmount 0.0 Churn 0.0 dtype: float64
<class 'pandas.core.frame.DataFrame'> RangeIndex: 12335 entries, 0 to 12334 Data columns (total 20 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 gender 12335 non-null object 1 SeniorCitizen 12335 non-null float64 2 Partner 12335 non-null object 3 Dependents 12335 non-null object 4 tenure 12335 non-null float64 5 CallService 12335 non-null object 6 MultipleConnections 12335 non-null object 7 InternetConnection 12335 non-null object 8 OnlineSecurity 12335 non-null object 9 OnlineBackup 12335 non-null object 10 DeviceProtectionService 12335 non-null object 11 TechnicalHelp 12335 non-null object 12 OnlineTV 12335 non-null object 13 OnlineMovies 12335 non-null object 14 Agreement 12335 non-null object 15 BillingMethod 12335 non-null object 16 PaymentMethod 12335 non-null object 17 MonthlyServiceCharges 12335 non-null float64 18 TotalAmount 12335 non-null float64 19 Churn 12335 non-null object dtypes: float64(4), object(16) memory usage: 1.9+ MB
Давайте посмотрим распределение всех столбцов, носящих категориальный характер.
<class 'pandas.core.frame.DataFrame'> RangeIndex: 12335 entries, 0 to 12334 Data columns (total 24 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SeniorCitizen 12335 non-null float64 1 tenure 12335 non-null float64 2 MonthlyServiceCharges 12335 non-null float64 3 TotalAmount 12335 non-null float64 4 Churn 12335 non-null object 5 gender_Male 12335 non-null uint8 6 Partner_Yes 12335 non-null uint8 7 Dependents_Yes 12335 non-null uint8 8 CallService_Yes 12335 non-null uint8 9 MultipleConnections_Yes 12335 non-null uint8 10 InternetConnection_Fiber optic 12335 non-null uint8 11 InternetConnection_No 12335 non-null uint8 12 OnlineSecurity_Yes 12335 non-null uint8 13 OnlineBackup_Yes 12335 non-null uint8 14 DeviceProtectionService_Yes 12335 non-null uint8 15 TechnicalHelp_Yes 12335 non-null uint8 16 OnlineTV_Yes 12335 non-null uint8 17 OnlineMovies_Yes 12335 non-null uint8 18 Agreement_One year 12335 non-null uint8 19 Agreement_Two year 12335 non-null uint8 20 BillingMethod_Yes 12335 non-null uint8 21 PaymentMethod_Credit card (automatic) 12335 non-null uint8 22 PaymentMethod_Electronic check 12335 non-null uint8 23 PaymentMethod_Mailed check 12335 non-null uint8 dtypes: float64(4), object(1), uint8(19) memory usage: 710.8+ KB
Выбор лучшего сплита
В процессе построения дерева решений алгоритм оценивает различные атрибуты и разделяет данные на основе того, который максимизирует получение информации или больше всего снижает примесь Джини. Этот шаг повторяется рекурсивно до тех пор, пока не будет выполнен критерий остановки, например максимальная глубина дерева или минимальное количество выборок на лист.
В этой статье рассматриваются основы деревьев решений с упором на две ключевые концепции: прирост информации и примесь Джини.
1. Примесь Джини
Примесь Джини — это еще один критерий, используемый для оценки потенциальных разделений в деревьях решений. Он измеряет вероятность неправильной классификации случайно выбранного элемента. Более низкий уровень примеси Джини указывает на более «чистое» разделение, при котором классы более однородны.
Шаги для расчета примеси Джини следующие:
1. Рассчитайте примесь Джини для всего набора данных.
2. Рассчитайте средневзвешенную примесь Джини для каждого потенциального разделения.
3. Затем коэффициент Джини рассчитывается как разница между исходным значением Джини.
Примесь и средневзвешенная примесь Джини после разделения.
[[4709 0] [ 7 3918]] [[1801 218] [ 373 1309]]
precision recall f1-score support No 1.00 1.00 1.00 4709 Yes 1.00 1.00 1.00 3925 accuracy 1.00 8634 macro avg 1.00 1.00 1.00 8634 weighted avg 1.00 1.00 1.00 8634 precision recall f1-score support No 0.83 0.89 0.86 2019 Yes 0.86 0.78 0.82 1682 accuracy 0.84 3701 macro avg 0.84 0.84 0.84 3701 weighted avg 0.84 0.84 0.84 3701
Gini Training Accuracy : 0.9991892517952282 Gini Test Accuracy : 0.8365306673871926
[0.84837963 0.83796296 0.8599537 0.85300926 0.85399768 0.83198146 0.85399768 0.82039397 0.85168019 0.84472769] Max Accuracy : 0.8599537037037037 *******************Final Accuracy for Training and Test Result*********************** Training Accuracy : 0.8456084234582206 Test Accuracy : 0.8365306673871926
Feature Importance SeniorCitizen 0.035532 tenure 0.232573 MonthlyServiceCharges 0.277247 TotalAmount 0.143947 gender_Male 0.016330 Partner_Yes 0.014318 Dependents_Yes 0.012281 CallService_Yes 0.014134 MultipleConnections_Yes 0.011699 InternetConnection_Fiber optic 0.021925 InternetConnection_No 0.026838 OnlineSecurity_Yes 0.004917 OnlineBackup_Yes 0.040175 DeviceProtectionService_Yes 0.013677 TechnicalHelp_Yes 0.031157 OnlineTV_Yes 0.032537 OnlineMovies_Yes 0.007008 Agreement_One year 0.009702 Agreement_Two year 0.008340 BillingMethod_Yes 0.018743 PaymentMethod_Credit card (automatic) 0.009933 PaymentMethod_Electronic check 0.007959 PaymentMethod_Mailed check 0.009030
precision recall f1-score support No 0.80 0.89 0.84 2019 Yes 0.84 0.73 0.79 1682 accuracy 0.82 3701 macro avg 0.82 0.81 0.81 3701 weighted avg 0.82 0.82 0.82 3701 Test Set Accuracy : 0.817887057552013 Train Set Accuracy : 0.8562659254111652
precision recall f1-score support No 0.79 0.62 0.69 2019 Yes 0.64 0.80 0.71 1682 accuracy 0.70 3701 macro avg 0.71 0.71 0.70 3701 weighted avg 0.72 0.70 0.70 3701 Test Set Accuracy : 0.7027830316130775 Train Set Accuracy : 0.7249247162381284
2. Получение информации
Прирост информации — это метрика, используемая в деревьях решений для измерения того, насколько тот или иной атрибут способствует снижению неопределенности при прогнозировании меток классов. Он количественно определяет уменьшение энтропии (меры случайности или примеси) в наборе данных, когда разделение производится на основе определенного атрибута. Более высокий прирост информации означает, что атрибут является хорошим предиктором для классификации.
Шаги для расчета прироста информации следующие:
1. Вычислите энтропию всего набора данных.
2. Рассчитайте средневзвешенную энтропию каждого потенциального разделения.
3. Вычислите прирост информации. как разница между начальной энтропией и средневзвешенной энтропией после разделения.
[[4709 0] [ 7 3918]] [[1793 226] [ 357 1325]]
precision recall f1-score support No 1.00 1.00 1.00 4709 Yes 1.00 1.00 1.00 3925 accuracy 1.00 8634 macro avg 1.00 1.00 1.00 8634 weighted avg 1.00 1.00 1.00 8634 precision recall f1-score support No 0.83 0.89 0.86 2019 Yes 0.85 0.79 0.82 1682 accuracy 0.84 3701 macro avg 0.84 0.84 0.84 3701 weighted avg 0.84 0.84 0.84 3701
Entropy Training Accuracy : 0.9991892517952282 Entropy Test Accuracy : 0.8424750067549311
[0.86226852 0.84722222 0.85069444 0.8599537 0.85399768 0.84936269 0.86095017 0.84356895 0.86790267 0.8400927 ] Max Accuracy : 0.8679026651216686 *******************Final Accuracy for Training and Test Result*********************** Training Accuracy : 0.853601374404532 Test Accuracy : 0.8424750067549311
Feature Importance SeniorCitizen 0.034327 tenure 0.204576 MonthlyServiceCharges 0.313353 TotalAmount 0.138474 gender_Male 0.016577 Partner_Yes 0.014992 Dependents_Yes 0.013878 CallService_Yes 0.010658 MultipleConnections_Yes 0.008022 InternetConnection_Fiber optic 0.014157 InternetConnection_No 0.020639 OnlineSecurity_Yes 0.004021 OnlineBackup_Yes 0.043498 DeviceProtectionService_Yes 0.013229 TechnicalHelp_Yes 0.031317 OnlineTV_Yes 0.029379 OnlineMovies_Yes 0.012289 Agreement_One year 0.011218 Agreement_Two year 0.017129 BillingMethod_Yes 0.013738 PaymentMethod_Credit card (automatic) 0.010043 PaymentMethod_Electronic check 0.014794 PaymentMethod_Mailed check 0.009691
precision recall f1-score support No 0.83 0.83 0.83 2019 Yes 0.79 0.80 0.80 1682 accuracy 0.82 3701 macro avg 0.81 0.81 0.81 3701 weighted avg 0.82 0.82 0.82 3701 Test Set Accuracy : 0.8151850851121318 Train Set Accuracy : 0.8536020384526292
precision recall f1-score support No 0.80 0.88 0.84 2019 Yes 0.83 0.73 0.78 1682 accuracy 0.81 3701 macro avg 0.81 0.81 0.81 3701 weighted avg 0.81 0.81 0.81 3701 Test Set Accuracy : 0.8116725209402864 Train Set Accuracy : 0.8355339356034283
Результат сокращенных деревьев имеет меньшую дисперсию по сравнению с обычными деревьями решений, они будут лучше работать в производственных случаях.
Заключение
Деревья решений обеспечивают универсальный и интерпретируемый подход к решению задач классификации и регрессии. Прирост информации и примесь Джини являются жизненно важными инструментами для управления процессом построения дерева. Оценивая влияние различных атрибутов и делая обоснованные разделения, деревья решений предлагают мощную информацию и действенные решения в широком спектре приложений, от финансов и маркетинга до здравоохранения и за его пределами.