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

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

В наши дни легко получить доступ к инструментам, поддерживающим машинное обучение. С подходящим устройством процесс машинного обучения может быть выполнен. Python — один из языков программирования, обычно используемых в машинном обучении. Сообщество предоставило множество модулей, поддерживающих процесс машинного обучения, таких как Pandas, Numpy, Sklearn, Tensorflow, Keras и многие другие. Эти модули можно использовать, чтобы сделать машинное обучение еще более простым и понятным.

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

Телекоммуникационная компания XYZ — пример из практики

Телекоммуникационная компания хочет проанализировать потенциал оттока клиентов между своими клиентами. Для анализа группе специалистов по данным поручено создать модель классификационного анализа, чтобы классифицировать клиентов, которые могут уйти, на основе их характеристик. Инструменты, используемые командой аналитиков данных, — это Python с Google Colab в качестве IDE.

1. Импорт данных

Данные импортируются в Google Colab с Google Диска. Используемые данные можно получить здесь. Но прежде чем данные будут импортированы во фрейм данных, модули сначала импортируются в Google Colab. Для обработки данных используется несколько модулей. В приведенном ниже коде показан модуль и импорт данных в Google Colab.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_csv("/content/drive/My Drive/telco_customer_churn.csv")

Pandas и модуль Numpy используются для выполнения операций с фреймами данных и логических операций. Matplotlib и Seaborn используются для визуализации обрабатываемых данных. Переменная «df» определяется как фрейм данных для данных. Чтобы проверить, находятся ли данные во фрейме данных, мы используем приведенную ниже команду, чтобы показать первые 5 данных фрейма данных.

df.head()

2. Предварительная обработка данных

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

df.info()

Тип данных «TotalCharges» все еще находится в объекте, где он должен быть float64. В процессе проверки данных некоторые строки заполнены символом ‘ ‘. В результате тип данных не может быть изменен на числовой. Чтобы решить эту проблему, мы можем удалить недостающие данные и изменить данные на числовые, используя приведенный ниже код.

df=df[df.TotalCharges!=' ']
df.TotalCharges=pd.to_numeric(df.TotalCharges)
np.dtype(df.TotalCharges)
df.describe()

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

sns.heatmap(df.corr(),annot=True);

Как видно из числовых переменных, корреляция между «сроком пребывания в должности» и «Общими затратами» очень высока. Это означает, что изменение «срока пребывания» больше повлияет на «Общие расходы» по сравнению с «Ежемесячными платежами».

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

def convert_to_buckets(tenure):
if tenure <=24:
   return '0 - 24 months'
elif tenure <=36:
   return '24 - 36 months'
elif tenure <=48:
   return '36 - 48 months'
elif tenure <=60:
   return '48 - 60 months'
else:
   return '> 60 months'
df['tenure']=df['tenure'].map(convert_to_buckets)
df['tenure'].value_counts()

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

cols=df.columns
cols=cols.drop(['customerID','MonthlyCharges','TotalCharges'])
all_cat_cols=list(cols)
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
for col in all_cat_cols:
   df[col] = labelencoder.fit_transform(df[col])
df[all_cat_cols].head()

3. Разделение поезда/теста данных

Прежде чем модель сможет предсказать целевую переменную, нам необходимо обучить модель. Мы разделяем данные на две части для обучения и тестирования данных. Нам не нужно вручную делить наш набор данных на два. Мы можем использовать модуль train_test_split для их автоматического разделения. Мы используем соотношение 80:20, где 80% для данных поезда и 20% для тестовых данных. Используемый модуль требует, чтобы мы указали целевую переменную как Y, а атрибуты как X. Ниже приведен пример разделения набора данных.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
df.drop(['Churn','customerID','TotalCharges'], axis=1),
df.Churn,
test_size= 0.2,
random_state=0,
stratify=df.Churn
)

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

4. Обучение и тестирование моделей

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

from sklearn.tree import DecisionTreeClassifier
clf_entropy = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=0)
clf_entropy.fit(X_train, y_train)

Мы определяем алгоритм в переменной clf_entropy, затем мы подгоняем данные поезда атрибутов (X_train) и данные целевого поезда (y_train) к алгоритму для обучения алгоритма. Затем мы определим новую переменную для сохранения результата прогнозирования алгоритма. Используемая переменная будет y_pred, которая будет результатом прогнозирования модели.

y_pred=clf_entropy.predict(X_test)

6. Анализ производительности модели

Есть несколько способов оценить производительность модели, которую мы обучили, с помощью ее прогнозируемых значений. Матрица путаницы является одной из матриц производительности, которые можно использовать. Матрица путаницы состоит из четырех значений: истинно положительных (TP), ложноположительных (FP), ложноотрицательных (FN) и истинно отрицательных (TN). Истинный положительный и истинно отрицательный — это значение, при котором предсказание модели верно или совпадает с целевыми тестовыми данными. В нашем случае, если данные целевого теста говорят об оттоке, модель также предсказывает отток. Если данные целевого теста говорят об отсутствии оттока, модель также предсказывает отсутствие оттока. Ложноположительные и ложноотрицательные значения представляют собой значения, которые модель предсказывает неверно или отличается от данных целевого теста.

Теперь мы понимаем, как читать матрицу путаницы. Чтобы показать матрицу в Python, мы можем использовать модуль показателей производительности, предоставленный Sklearn. Давайте посмотрим, как мы можем визуализировать матрицу путаницы.

from sklearn.metrics import confusion_matrix
cm=confusion_matrix(y_test, y_pred)
data = {'y_Actual':np.array(y_test),'y_Predicted': np.array(y_pred)}
d = pd.DataFrame(data, columns=['y_Actual','y_Predicted'])
confusion_matrix = pd.crosstab(d['y_Actual'], d['y_Predicted'], rownames=['Actual'], colnames=['Predicted'])
sn.heatmap(confusion_matrix, annot=True,fmt=".0f")
plt.show()

В отчете можно увидеть числа 0 и 1. Эти числа представляют категорию, уходят клиенты или нет. 0 означает, что отток клиентов отсутствует, а 1 — отток клиентов. Что нам нужно подчеркнуть, так это точность и полнота модели. Из матрицы путаницы мы можем сказать, что общее количество тестовых и прогнозируемых данных равно 1407. Модель способна предсказать, что 938 клиентов не уйдут, а 173 клиента уйдут, что совпадает с целевыми тестовыми данными. Модель не смогла предсказать всего 296 данных.

Из матрицы путаницы мы можем определить точность и значение отзыва (чувствительности) модели. Точность — это доля спрогнозированных не ушедших клиентов, которые соответствовали целевым тестовым данным, от общего числа фактически не ушедших из целевых тестовых данных. С другой стороны, отзыв — это доля спрогнозированных клиентов, которые не уходят, которые соответствуют целевым тестовым данным, от общего значения, которое спрогнозировала модель, не ушедших клиентов, включая совпавшие или несопоставленные данные. Ниже приведены расчеты.

Precision = TP/(TP+FP) = 938/(938+95) = 0.91 = 91%
Recall = TP/(TP+FN) = 938/(938+201) = 0.82 = 82%

Таким образом, модель может предсказывать с точностью 91% и полнотой 82%. Это указывает на то, что модель способна прогнозировать клиентов. Это помогает бизнесу выработать стратегию и к кому обратиться, чтобы сохранить клиента, а не отток.

Заключение

Машинное обучение помогает бизнесу в принятии решений и предотвращает дальнейшее возникновение проблем. Есть много моделей, которые могут быть применены для решения проблем бизнеса. Например, регрессию можно использовать для прогнозирования числовых данных и многого другого. Наличие специалиста по данным в бизнесе дает много преимуществ, особенно в разработке стратегий и принятии решений. Применение машинного обучения по-прежнему очень обширно, и это наша возможность исследовать!

До следующего раза, спасибо!