Сегментация клиентов с использованием неконтролируемого машинного обучения в Python
В современную эпоху компании прилагают все усилия, чтобы сделать своих клиентов счастливыми. Они запускают новые технологии и услуги, чтобы клиенты могли больше использовать их продукты. Они стараются быть на связи с каждым из своих клиентов, чтобы они могли предоставить товары соответственно. Но практически поддерживать связь со всеми очень сложно и нереально. Итак, вот вам и использование сегментации клиентов.
Сегментация клиентов означает сегментацию клиентов на основе их схожих характеристик, поведения и потребностей. Это в конечном итоге поможет компании во многих отношениях. Например, они могут запустить продукт или соответствующим образом улучшить его функции. Они также могут ориентироваться на определенный сектор в соответствии со своим поведением. Все это приводит к повышению общей рыночной стоимости компании.
Сегментация клиентов с использованием неконтролируемого машинного обучения в Python
Сегодня мы будем использовать машинное обучение для реализации задачи сегментации клиентов.
Импорт библиотек
Библиотеки, которые нам потребуются:
- Pandas — эта библиотека помогает загружать фрейм данных в формате 2D-массива.
- Numpy — массивы Numpy работают очень быстро и могут выполнять большие вычисления.
- Matplotlib/Seaborn — эта библиотека используется для рисования визуализаций.
- Sklearn — этот модуль содержит несколько библиотек с предварительно реализованными функциями для выполнения задач от предварительной обработки данных до разработки и оценки моделей.
Python3
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sbfrom sklearn.preprocessing import StandardScaler, LabelEncoderfrom sklearn.cluster import KMeansimport warningswarnings.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 TSNEmodel = 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
РЕКОМЕНДУЕМЫЕ СТАТЬИ |