]
Пример классификатора дерева решений для прогнозирования оттока клиентов
]
]
Обзор
]
Этот проект демонстрирует, как предсказать отток клиентов (независимо от того, покидает ли клиент услугу) с помощью классификатора дерева решений. Набор данных включает в себя такие функции, как age , ежемесячные обвинения , и звонки по обслуживанию клиентов , с целью прогнозирования, будет ли клиент сбрасывать или нет. &&?
модель обучается с использованием классификатора дерева решений Scikit-Learn, и код визуализирует дерево решений, чтобы лучше понять, как модель принимает решения.
]
]
]
Технологии используются
]
]
]
- python 3.x : первичный язык, используемый для построения модели.
]
- pandas : для наборов данных манипуляции и обработки данных.
]
- matplotlib : для визуализации данных (построение дерева решений). ]
]
- Scikit-Learn : для машинного обучения, включая обучение и оценку модели. ]
]
]
]
Шаги объяснены
]
]
1.
импортировать необходимые библиотеки ]
]
импортируйте панды как PD
Импорт matplotlib.pyplot как plt
импортные предупреждения
от sklearn.model_selection import train_test_split
от Sklearn.tree importeclassifier
от sklearn.metrics import acture_score
из дерева импорта Sklearn
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
2.
подавление предупреждений ]
]
Warnings.filterWarnings ("игнорировать")
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
Эта строка сообщает Python - игнорировать все предупреждения . Это может быть полезно, когда вы запускаете модели и не хотите предупреждения (например, о устаревших функциях), чтобы загромождать вывод. ]
]
]
3.
создание синтетического набора данных ]
]
data = {
«CustomerId»: диапазон (1, 101), # уникальный идентификатор для каждого клиента
«Возраст»: [20, 25, 30, 35, 40, 45, 50, 55, 60, 65]*10, # Возраст клиентов
«Месячный заряд»: [50, 60, 70, 80, 90, 100, 110, 120, 130, 140]*10, # Сумма ежемесячного счета
'CustomerserviceCalls': [1, 2, 3, 4, 0, 1, 2, 3, 4, 0]*10, # Количество звонков по обслуживанию клиентов
'Churn': ['no', 'no', 'yes', 'no', 'yes', 'no', 'да', 'да', 'нет', 'да']*10 # churn status
}
df = pd.dataframe (данные)
print (df.head ())
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- здесь, мы создаем
синтетический набор данных для проекта. Этот набор данных имитирует информацию о клиентах для телекоммуникационной компании с такими функциями, как возраст, месячный заряд, CustomerserviceCalls и целевой отток переменной (независимо от того, выбил ли клиент или нет).
]
]
- customerId : уникальный идентификатор для каждого клиента. ]
]
- age : возраст клиента. ]
]
- MonthlyCharge : ежемесячный счет клиента. ]
]
- CustomerserviceCalls : количество раз клиент назывался обслуживание клиентов. ]
]
- churn : будь то клиент (да/нет).
]
]
-
pandas DataFrame : данные структурированы как DataFrame (DF), двухмерная маркированная структура данных, позволяющая легко манипулировать и анализировать данные.
]
]
]
4.
разделение данных на функции и целевую переменную ]
]
x = df [['age', 'monthlygrack', 'customerserviceCalls']] # Функции
y = df ['churn'] # целевая переменная
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- функции (x) : независимые переменные, которые используются для прогнозирования цели. В этом случае это включает в себя возраст, месячный заряд и CustomerserviceCalls. ]
]
- целевая переменная (y) : зависимая переменная, которая является значением, которое вы пытаетесь предсказать. Здесь это столбец оттока, который указывает, будет ли клиент позойти или нет. ]
]
]
5.
разделение данных на наборы обучения и тестирования ]
]
x_train, x_test, y_train, y_test = train_test_split (x, y, test_size = 0,3, random_state = 42)
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- train_test_split разрывает набор данных на две части: a обучающий набор (используется для обучения модели) и набор тестирования (используется для оценки модели).
]
]
- test_size = 0,3 : 30% данных выделяются для тестирования, а остальные 70% используются для обучения. ]
]
- random_state = 42 обеспечивает воспроизводимость результатов, фиксируя семена для генератора случайных чисел. ]
]
]
]
]
6.
обучение модели дерева решений ]
]
clf = decietreeclassifier ()
clf.fit (x_train, y_train)
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- decietreeclassifier () инициализирует модель дерева решений.
]
- clf.fit (x_train, y_train) обучает модель, используя учебные данные. Модель изучает шаблоны из функций X_TRAIN, чтобы предсказать целевую переменную Y_TRAIN.
]
]
7.
делал прогнозы ]
]
y_pred = clf.predict (x_test)
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- clf.predict (x_test) : после обучения модели, она используется для прогнозирования на наборе тестирования (x_test). Эти прогнозируемые значения хранятся в Y_PRED, и мы сравним их с фактическими значениями (Y_TEST), чтобы оценить модель. ]
]
]
8.
Оценка модели ]
]
acture = acture_score (y_test, y_pred)
print (f "Точность: {Точность}")
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- acture_score (y_test, y_pred) ] вычисляет точность модели, сравнивая прогнозируемые метки оттока (y_pred) с фактическими метками оттока (y_test) из тестового набора. ]
- точность является мерой того, сколько предсказаний было правильным. Это распечатано для оценки. ]
]
]
9.
визуализация дерева решений ]
]
plt.figure (figsize = (12, 8))
tree.plot_tree (clf, fill = true, feature_names = ['age', 'monthlygrack', 'customerservicecalls'], class_names = ['no churn', 'churn'])
plt.show ()
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
]
- tree.plot_tree (clf, fill = true) : визуализирует обученную модель дерева решений. Заполненный = истинный аргумент окрашивает узлы на основе метки класса (отток/без оттока).
]
- face_names : указывает имена функций (независимые переменные) для отображения в дереве. ]
]
- class_names : указывает метки класса для целевой переменной (churn). ]
]
- plt.show () : отображает визуализацию дерева.
]
]
]
Запуск кода
]
]
клонировать репозиторий или загрузить скрипт. - ]
установить зависимости:
- ]
]
pip установить Pandas matplotlib scikit-learn
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
]
запустите сценарий Python или ноутбук Jupyter, чтобы обучить модель и визуализировать дерево решений. - ]
]
]
]