Понимание деревьев решений: прирост информации и примесь Джини

Деревья решений: обзор

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

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

Преимущества деревьев решений

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

Результат сокращенных деревьев имеет меньшую дисперсию по сравнению с обычными деревьями решений, они будут лучше работать в производственных случаях.

Заключение

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