Проще говоря, мы говорим, покупает ли пользователь в социальной сети после того, как кликнул по объявлению, отображаемому на сайте, продукт или нет. Это могло бы быть действительно полезно для компании, продающей продукт.
Допустим, это автомобильная компания, которая заплатила сайту социальной сети (для простоты предположим, что теперь ее Facebook) за показ рекламы своего недавно выпущенного продукта. Теперь, поскольку компания в значительной степени полагается на успех своего недавно выпущенного автомобиля, она не оставит камня на камне, пытаясь рекламировать автомобиль.
Что может быть лучше, чем рекламировать его прямо сейчас на самой популярной платформе. если мы будем рекламировать его только правильной аудитории. Это может помочь в увеличении продаж, так как мы будем показывать рекламу автомобиля только избранной аудитории.
Вот где вы входите…
Автомобильная компания нанял вас в качестве специалиста по данным, чтобы определить правильную аудиторию, которой вы должны рекламировать автомобиль
, и выяснить людей, которые с наибольшей вероятностью купят автомобиль, на основе определенных характеристик, которые описывают тип пользователей, которые приобрели автомобиль
ранее, нажав на объявление.

Так кто же читатели этой статьи?

Вы можете быть тем, кто только что закончил MOOC по машинному обучению, или начинающим специалистом по данным, ищущим более практичный / практический проект, основанный на машинном обучении.

Это также может быть актуально, если вы хотите совместить некоторые бизнес-аспекты с машинным обучением.

К. Ближайшие соседи (к-Н.Н.)

Вежливое введение…

Алгоритм k-NN является одним из самых простых из всех алгоритмов машинного обучения. Входные данные состоят из k ближайших обучающих примеров в пространстве функций, а выходные данные зависят от того, используется ли k -NN для классификации или регрессии:

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

В регрессии k-NN выходными данными является значение свойства объекта. Это значение является средним из значений его k ближайших соседей.

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

КАК РАБОТАЕТ АЛГОРИТМ?

Шаг 1) Выберите количество K соседей
Шаг 2) Возьмите K ближайших соседей новой точки данных в соответствии с Евклидовым расстоянием
Шаг 3) Среди этих K соседей подсчитайте количество точки данных в каждой категории
Шаг 4) Назначьте новую точку данных той категории, в которой вы подсчитали наибольшее количество соседей.

…… Теперь ваша модель готова !!

Чего мы ждем? Начнем !!

Часть 1 - Предварительная обработка данных

Импорт библиотек

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Импорт набора данных

Набор данных содержит информацию о пользователях на сайте социальной сети, и, используя эту информацию в качестве функций для нашей модели машинного обучения, мы пытаемся предсказать, перейдет ли конкретный пользователь после нажатия на рекламу на сайте социальной сети к покупке определенного продукта или нет. .
У этой конкретной социальной сети есть бизнес-клиент, который, как упоминалось ранее, является автомобильной компанией, которая рекламирует себя, размещая объявления на сайте социальной сети. Теперь работа социальной сети заключается в сборе информации о том, Пользователь купил продукт или нет. Зависимая переменная в данном случае - Purchased, которая равна 1, если пользователь покупает машину, и 0 в противном случае.
Итак, цель здесь - создать классификатор, который поместил бы каждого пользователя в правильную категорию с помощью предсказывая, покупает он продукт или нет.

dataset = pd.read_csv('Social_Network_Ads.csv')

печать первых нескольких записей набора данных

print(dataset.head())

Следующие характеристики будут рассматриваться как независимые переменные…
… 1) Возраст
… 2) Ориентировочная зарплата
Теперь некоторые из вас может быть интересно, что набор данных также содержит еще 3 столбца, и почему мы оставляем их?
Ответ на этот вопрос довольно прост ... и скоро мы увидим причину того, почему каждый из них удаляется.
… 1) UserId - UserId не влияет на то, приобретет ли пользователь Автомобиль или нет
… 2) Пол - некоторые могут сказать, что Gender сыграет свою роль, но это действительно субъективное обсуждение.
Более того, поскольку пол - это категориальная переменная, нам пришлось бы использовать для этого Variable Encoder.

X = dataset.iloc[:, [2, 3]].values

Сохранение зависимой переменной в y, т.е. Purchased, которая равна 1, если пользователь покупает машину, и 0 в противном случае.

y = dataset.iloc[:, 4].values

Вот как на самом деле выглядит набор данных ...

Разделение набора данных на обучающий набор и тестовый набор

Импорт библиотеки перекрестной проверки, которая теперь известна как ModelSelection в новых версиях Python

from sklearn.model_selection import train_test_split

Мы разделяем данные на 75% данных для обучения и 25% для тестирования наших данных.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

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

Масштабирование функций

Импорт библиотек

from sklearn.preprocessing import StandardScaler

Создание стандартного скалярного объекта класса предварительной обработки

sc = StandardScaler()

Масштабирование X_train путем подгонки объекта Standard Scalar к нашей матрице функций X_train

X_train = sc.fit_transform(X_train)

Масштабирование X_test на той же основе

X_test = sc.transform(X_test)

Чтобы на самом деле увидеть разницу и подтвердить, что они почти в одном масштабе, при желании вы можете…

print(X_train)
print(X_test)

Часть 2 - Примерка нашего к-н. Модель

Примерка K-NN на тренировочном наборе

Итак, нам нужно импортировать библиотеку scikit.neighbours, и из нее мы будем импортировать классификатор KNN.

from sklearn.neighbors import KNeighborsClassifier

Создание объекта класса…
Осмотрите классификатор, нажав Ctrl + Q, чтобы отобразить документацию, и, соответственно, просмотреть все параметры с их определением
→ Нет ближайших соседей = 5 (по умолчанию)
→ Задайте метрику как «Минковский», а степень как «2» для использования евклидова расстояния для кН. Н. == ›установите p = 2

classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)

Теперь мы подгоняем объект классификатора к нашему обучающему набору.

classifier.fit(X_train, y_train)

Часть 3 - Прогнозирование результатов набора тестов

Поскольку классификатор соответствует набору данных, мы можем предсказать результаты набора тестов.

y_pred = classifier.predict(X_test)

Отображение прогнозируемых значений

print(y_pred)

Теперь, чтобы рассчитать точность нашей модели…

c=0
for i in range(0,len(y_pred)):
    if(y_pred[i]==y_test[i]):
        c=c+1
accuracy=c/len(y_pred)
print("Accuracy is")
print(accuracy)

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

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

Часть 4 - Визуализация данных и матрица неточностей

Визуализация результатов тренировочного набора

from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('K-NN (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

Итак, теперь после выполнения приведенного выше кода должно появиться что-то подобное ...

Как может быть видно на недавно открытом графике обучающего набора, у нас есть нелинейный классификатор, который очень хорошо соответствует данным.

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

Визуализация результатов набора тестов

from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('K-NN (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

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

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

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

Ура !! Итак, вы только что построили k-N.N. Модель для прогнозирования продаж продукта, рекламируемого в социальных сетях. Автомобильная компания, которая наняла вас в качестве специалиста по данным, теперь сможет принять мудрое решение о таргетинге на правильную аудиторию, чтобы рекламировать свой новый автомобиль и вас. было бы причиной его огромных продаж. Что ж, надеюсь, вы уже чувствуете гордость !! :П

Надеюсь, вам понравился мой учебник! Я прикрепляю ссылки github (теперь Gitlab: P) к коду и набору данных.

Https://github.com/Sid-darthvader/Predicting_Product_Sales_through_ads_on_SocialMedia_using_k-N.N.

Кто знает, что ваша модель может просто помочь вам рекламировать следующую модель Tesla; P

Литература - курс машинного обучения Кирилла Еременко и Хаделин де Понтевес