Сегментация клиентов с использованием неконтролируемого машинного обучения в Python

Опубликовано: 14 Февраля, 2023

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

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

Сегментация клиентов с использованием неконтролируемого машинного обучения в 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