Сегментация клиентов или кластеризация полезны по-разному. Его можно использовать для целевого маркетинга. Иногда при построении прогнозной модели более эффективно кластеризовать данные и строить отдельную прогнозную модель для каждого кластера. В этой статье я объясню, как я сделал это для создания кластеров с использованием модели k-средних, развернутой с помощью Flask.

Алгоритм K-средних

AndreyBu, который имеет более 5 лет опыта в машинном обучении и в настоящее время обучает людей своим навыкам, говорит, что цель K-средних проста: сгруппировать похожие точки данных вместе и выявить лежащие в основе закономерности. Для достижения этой цели K-means ищет фиксированное количество (k) кластеров в наборе данных .

Давайте посмотрим, как работает алгоритм машинного обучения K-средних с использованием языка программирования Python. Мы будем использовать библиотеку Scikit-learn и некоторые случайные данные, чтобы проиллюстрировать простое объяснение кластеризации K-средних.

Шаг 1. Импортируйте библиотеки

import pandas as pdimport numpy as np

from sklearn import preprocessingimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans
import Flask, request, jsonify, render_template

Как видно из приведенного выше кода, мы импортируем в наш проект следующие библиотеки:

  • Панды для чтения и написания электронных таблиц
  • Numpy для проведения эффективных вычислений
  • Matplotlib для визуализации данных
  • Sklearn для языка программирования Python
  • Фляга для развертывания

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

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

Вот шаги, которые я выполнил:

  1. удалить повторяющиеся строки
  2. заменить отсутствующие значения средним, медианным или режимом функции
  3. преобразовать категориальную переменную в числовые данные с помощью кодировщика меток
  4. ограничить диапазон переменных с помощью масштабирования функций
def Preproceesing():
    d.drop_duplicates(keep='first')
    d.x1.fillna(d.x1.mean(), inplace=True) # x1 example 
    le = preprocessing.LabelEncoder() #label encoder
    le.fit(d.x1)
    d.x1=le.transform(d.x1)
    in_max_scaler = preprocessing.MinMaxScaler() #feature scaling
    scaled_array = min_max_scaler.fit_transform(d)  
    d = pd.DataFrame(scaled_array,columns=d.columns)
    return d

Шаг 3. PCA для визуализации данных

Для многих приложений машинного обучения это помогает иметь возможность визуализировать ваши данные, вы можете использовать PCA, чтобы уменьшить эти 4-мерные данные до 2-х или 3-х измерений, чтобы вы могли строить и, надеюсь, лучше понимать данные.

def PCA(d):
    pca = PCA()
    pca.fit(d)
    pca_samples = pca.transform(d)
    return pca_samples

Шаг 4: моделирование

Вот код для обучения k-средних и поиска центроида:

clusterer = KMeans(n_clusters=4,random_state=42,n_init=10).fit(d)
       centers = clusterer.cluster_centers_
       labels= clusterer.predict(d)

Чтобы определить оптимальное количество кластеров для k-средних, метод локтя является одним из самых популярных методов определения этого оптимального значения k.

Мы должны выбрать значение k в «изгибе», то есть в точке, после которой искажение / инерция начинает линейно уменьшаться.

Как мы можем сказать, что показатель качества кластеризации хорош?

значение силуэта является мерой того, насколько объект похож на его собственный кластер (сплоченность) по сравнению с другими кластерами (разделение). Силуэт варьируется от -1 до +1, где высокое значение указывает, что объект хорошо соответствует своему собственному кластеру и плохо соответствует соседним кластерам. Если большинство объектов имеют высокое значение, то конфигурация кластеризации подходит. Если многие точки имеют низкое или отрицательное значение, то в конфигурации кластеризации может быть слишком много или слишком мало кластеров.

from sklearn.metrics import silhouette_score
silhouette_score(d,labels)

Шаг 4: развертывание

Для нашего приложения мы определим маршрут @ app.route (’/ clustering’), для вызова нашей модели, как показано в приведенном ниже коде:

app = Flask(__name__)
app.config["DEBUG"] = True
@app.route('/clustering')
def predict():
    data= pd.read_csv('dataset.csv')
    data=prepross(data)
    data=pca(data)
    clusterer = KMeans(n_clusters=4,random_state=42,n_init=10).fit(d)
    centers = clusterer.cluster_centers_
    labels= clusterer.predict(d)
    return jsonify(labels)

if __name__ == '__main__':
      app.run(debug='true' )

чтобы проверить это, сохраните файл как app.py и запустите его. API по умолчанию будет работать на порту 5000. Затем используйте Postman или просто команду на терминале, набрав:

C:\Users\USER\Desktop\media\heroku> python app.py

Его легко понять, особенно если вы ускорите обучение с помощью Учебника по кластеризации K-средних. Он быстро предоставляет результаты обучения. Таким образом, вы можете прийти к осмысленным выводам и рекомендациям, используя кластеризацию k-средних для создания кластеров клиентов.

Если вы хотите поиграть с моим исходным кодом, вы можете найти его здесь.