Сегментация клиентов с использованием неконтролируемого машинного обучения в Python
В современную эпоху компании прилагают все усилия, чтобы сделать своих клиентов счастливыми. Они запускают новые технологии и услуги, чтобы клиенты могли больше использовать их продукты. Они стараются быть на связи с каждым из своих клиентов, чтобы они могли предоставить товары соответственно. Но практически поддерживать связь со всеми очень сложно и нереально. Итак, вот вам и использование сегментации клиентов.
Сегментация клиентов означает сегментацию клиентов на основе их схожих характеристик, поведения и потребностей. Это в конечном итоге поможет компании во многих отношениях. Например, они могут запустить продукт или соответствующим образом улучшить его функции. Они также могут ориентироваться на определенный сектор в соответствии со своим поведением. Все это приводит к повышению общей рыночной стоимости компании.
Сегментация клиентов с использованием неконтролируемого машинного обучения в Python
Сегодня мы будем использовать машинное обучение для реализации задачи сегментации клиентов.
Импорт библиотек
Библиотеки, которые нам потребуются:
- Pandas — эта библиотека помогает загружать фрейм данных в формате 2D-массива.
- Numpy — массивы Numpy работают очень быстро и могут выполнять большие вычисления.
- Matplotlib/Seaborn — эта библиотека используется для рисования визуализаций.
- Sklearn — этот модуль содержит несколько библиотек с предварительно реализованными функциями для выполнения задач от предварительной обработки данных до разработки и оценки моделей.
Python3
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sb from sklearn.preprocessing import StandardScaler, LabelEncoder from sklearn.cluster import KMeans import warnings warnings.filterwarnings( "ignore" ) |
Импорт набора данных
Набор данных, взятый для задачи, включает в себя сведения о клиентах, включая их семейное положение, их доход, количество приобретенных товаров, типы приобретенных товаров и так далее.
Python3
df = pd.read_csv( "new.csv" ) df.head() |
Выход:
Чтобы проверить форму набора данных, мы можем использовать метод data.shape.
Python3
df.shape |
Выход:
(2240, 25)(2240, 25)
Чтобы получить информацию о наборе данных, такую как проверка нулевых значений, количество значений и т. д., мы будем использовать метод .info().
Предварительная обработка данных
Python3
df.info() |
Выход:
Python3
df.describe().T |
Выход:
Улучшение значений в столбце «Принято».
Python3
df[ "Accepted" ] = df[ "Accepted" ]. str .replace( "Accepted" , "") |
Чтобы проверить нулевые значения в наборе данных.
Python3
for col in df.columns: temp = df[col].isnull(). sum () if temp > 0 : print (f "Column {col} contains {temp} null values." ) |
Выход:
Column Income contains 24 null values.
Теперь, когда у нас есть количество нулевых значений и мы знаем, что значений очень мало, мы можем их отбросить (это не сильно повлияет на набор данных).
Python3
df = df.dropna() print ( "Total missing values are:" , len (df)) |
Выход:
Total missing values are: 2216
Чтобы найти общее количество уникальных значений в каждом столбце, мы можем использовать метод data.unique().
Python3
df.nunique() |
Выход:
Здесь мы можем заметить, что есть столбцы, которые содержат отдельные значения во всем столбце, поэтому они не имеют отношения к разработке модели.
Также в наборе данных есть столбец Dt_Customer , который содержит столбец даты, который мы можем преобразовать в 3 столбца, т. е. день, месяц, год.
Python3
parts = df[ "Dt_Customer" ]. str .split( "-" , n = 3 , expand = True ) df[ "day" ] = parts[ 0 ].astype( "int" ) df[ "month" ] = parts[ 1 ].astype( "int" ) df[ "year" ] = parts[ 2 ].astype( "int" ) |
Теперь у нас есть все важные функции, теперь мы можем удалить такие функции, как Z_CostContact, Z_Revenue, Dt_Customer.
Python3
df.drop([ "Z_CostContact" , "Z_Revenue" , "Dt_Customer" ], axis = 1 , inplace = True ) |
Визуализация и анализ данных
Визуализация данных — это графическое представление информации и данных в графическом или графическом формате. Здесь мы будем использовать гистограмму и график подсчета для лучшей визуализации.
Python3
floats, objects = [], [] for col in df.columns: if df[col].dtype = = object : objects.append(col) elif df[col].dtype = = float : floats.append(col) print (objects) print (floats) |
Выход:
["Education", "Marital_Status", "Accepted"] ["Income"]
Чтобы получить график подсчета для столбцов типа данных — объект, обратитесь к коду ниже.
Python3
plt.subplots(figsize = ( 15 , 10 )) for i, col in enumerate (objects): plt.subplot( 2 , 2 , i + 1 ) sb.countplot(df[col]) plt.show() |
Выход:
Давайте проверим value_counts для Marital_Status данных.
Python3
df[ "Marital_Status" ].value_counts() |
Выход:
Теперь давайте посмотрим на сравнение функций по отношению к значениям ответов.
Python3
plt.subplots(figsize = ( 15 , 10 )) for i, col in enumerate (objects): plt.subplot( 2 , 2 , i + 1 ) sb.countplot(df[col], hue = df[ "Response" ]) plt.show() |
Выход:
Кодировка этикетки
Кодировка меток используется для преобразования категориальных значений в числовые значения, чтобы модель могла их понять.
Python3
for col in df.columns: if df[col].dtype = = object : le = LabelEncoder() df[col] = le.fit_transform(df[col]) |
Тепловая карта — лучший способ визуализировать корреляцию между различными функциями набора данных. Присвоим ему значение 0,8
Python3
plt.figure(figsize = ( 15 , 15 )) sb.heatmap(df.corr() > 0.8 , annot = True , cbar = False ) plt.show() |
Выход:
Стандартизация
Стандартизация — это метод масштабирования признаков, который является неотъемлемой частью разработки признаков. Это уменьшает масштаб данных и упрощает обучение модели машинного обучения. Это уменьшает среднее значение до «0», а стандартное отклонение до «1».
Python3
scaler = StandardScaler() data = scaler.fit_transform(df) |
Сегментация
Мы будем использовать T-распределенное стохастическое встраивание соседей. Это помогает визуализировать многомерные данные. Он преобразует сходство между точками данных в совместные вероятности и пытается минимизировать значения для низкоразмерного встраивания.
Python3
from sklearn.manifold import TSNE model = TSNE(n_components = 2 , random_state = 0 ) tsne_data = model.fit_transform(df) plt.figure(figsize = ( 7 , 7 )) plt.scatter(tsne_data[:, 0 ], tsne_data[:, 1 ]) plt.show() |
Выход:
Конечно, есть некоторые кластеры, которые четко видны из двумерного представления данных. Давайте используем алгоритм KMeans, чтобы найти эти кластеры в самой многомерной плоскости.
KMeans Clustering также можно использовать для кластеризации различных точек на плоскости.
Python3
error = [] for n_clusters in range ( 1 , 21 ): model = KMeans(init = "k-means++" , n_clu
РЕКОМЕНДУЕМЫЕ СТАТЬИ |