На фоне повсеместного распространения методов машинного обучения (МО) бинарная логистическая регрессия становится мощным инструментом, предлагающим значительные возможности для точных прогнозов и углубленной интерпретации в различных областях. Это исследование вращается вокруг набора данных, основанного на рекламе в социальных сетях. Он использует возможности логистической регрессии для анализа двоичного результата — в частности, «куплено» и «не куплено» — на основе демографических атрибутов по 400 гипотетическим записям. Исследование не только подчеркивает значимость и относительное влияние каждого коэффициента, но также и их соответствующую надежность. Одновременно проект углубляется в точность прогнозов, сопровождаясь тщательной очисткой, исследованием и визуализацией данных, и все это направлено на достижение основной цели.

Динамика логистической регрессии

Логистическая регрессия — это форма регрессионного анализа, используемая для прогнозирования результата категориальной зависимой переменной на основе одной или нескольких переменных-предикторов. Результат обычно является двоичным.

С другой стороны, линейная регрессия используется для прогнозирования непрерывной зависимой переменной. Основное различие между ними заключается в том, какой результат они предсказывают. Тем не менее, основополагающие принципы остаются в значительной степени последовательными, основанными на концепции наиболее подходящей линии. В линейной регрессии мы моделируем взаимосвязь между зависимыми и независимыми переменными как y=β0​+β1​x1​+…+βnxn​.

В контексте логистической регрессии это линейное уравнение преобразуется для прогнозирования вероятности принадлежности данного экземпляра к определенной категории. Преобразование достигается за счет сигмовидной (т. е. логистической) функции. Сигмоидальная функция, представленная как σ(z)=1/e^(z)​ отображает любые введите «z» в значение от 0 до 1, что сделает его подходящим для представления вероятности.

Как видно из рисунка выше, точность прогнозирования улучшается, если зависимая переменная основана на категориальных показателях с двоичными результатами, поскольку точки идеально группируются вокруг S-образной кривой, не подвергаясь значительным ошибкам прогнозирования.

Масштаб и цели проекта

Проект реализуется на основе использования 400 гипотетических рекламных записей в социальных сетях, при этом покупка, а не покупка (т. е. переменная «Куплено») является зависимой переменной, а «Возраст», «Ориентировочная зарплата» и «Пол» являются предикторами. . Цель проекта — понять, какие из этих демографических переменных оказывают наибольшее влияние на решение о покупке, в то время как процесс МО будет подвергаться проверке точности модели, а также статистической значимости коэффициентов модели. Проект реализуется через Jupyter Notebook на Python Pyodide, который позволяет загружать наборы данных с помощью средства прямой «загрузки».

  1. Исследование и очистка данных
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.impute import SimpleImputer

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

После загрузки данных переменная «Пол» преобразуется в числовые значения.

df['Gender'] = df['Gender'].map({'Female': 0, 'Male': 1})

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

null_values = df.isnull().sum()
print(null_values[null_values > 0])
Age                7
EstimatedSalary    6
dtype: int64

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

imputer_num = SimpleImputer(strategy='mean')  
imputer_cat = SimpleImputer(strategy='most_frequent')  
df[['Age', 'EstimatedSalary']] = imputer_num.fit_transform(df[['Age', 'EstimatedSalary']])
df['Gender'] = imputer_cat.fit_transform(df[['Gender']])

Эти два основных принципа были реализованы, в результате чего были исключены 13 нулевых значений с соответствующими цифрами, основанными на процедуре вменения (т. е. среднее значение для числовых значений, наиболее часто для категориальных показателей).

2. Описательная статистика

Описательная статистика основана на двух основных элементах: центральной тенденции (например, среднем, медиане) и значениях дисперсии (например, дисперсии), которые обеспечивают важную основу для процесса статистического вывода.

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(14, 6))
axes[0].hist(df['Age'], bins=10, alpha=0.7, color='blue')
axes[0].set_title('Distribution of Age')
axes[0].set_xlabel('Age')
axes[0].set_ylabel('Frequency')

axes[1].hist(df['Estimated Salary'], bins=10, alpha=0.7, color='green')
axes[1].set_title('Distribution of Estimated Salary')
axes[1].set_xlabel('Estimated Salary')
axes[1].set_ylabel('Frequency')

plt.tight_layout()  
plt.show()

Цифры показывают, что характеристики распределения заработной платы и возраста немного асимметричны. С другой стороны, наиболее частые наблюдения группируются вокруг среднего и медианного значений.

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

colors = {0:'red', 1:'green'}
plt.scatter(df['Age'], df['EstimatedSalary'], c=df['Purchased'].map(colors), alpha=0.6)
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.title('Age vs. EstimatedSalary (Green: Purchased, Red: Not Purchased)')
plt.show()

Можно заметить, что три основных кластера определяют решения о покупке: i) люди с высокой зарплатой и низким возрастом, ii) люди с высоким возрастом и низкой зарплатой и iii) люди с высокой зарплатой и пожилым возрастом. Таким образом, хотя третий и первый кластеры можно рассматривать как представляющие собой логическую основу, сочетание низкой заработной платы и высокого возраста дает важные указания на потенциально доминирующую роль возраста в принятии решений о покупке для вышеупомянутых данных.

plt.boxplot([df[df['Purchased']==0]['Age'], df[df['Purchased']==1]['Age']])
plt.xticks([1,2], ['Not Purchased', 'Purchased'])
plt.ylabel('Age')
plt.title('Age Distribution by Purchase Decision')
plt.show()

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

3. Инференциальный статистический анализ: ML

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

X = df[['Gender', 'Age', 'EstimatedSalary']]
y = df['Purchased']

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

sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

classifier = LogisticRegression(random_state=42)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

cm = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)

print("Confusion Matrix:")
print(cm)
print(f"Accuracy: {accuracy * 100:.2f}%")

На основе приведенного выше сценария выходные данные матрицы путаницы представлены ниже:

Confusion Matrix:
[61  2]
[ 9 28]
Accuracy: 89.00%

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

Кривая ROC и значение AUC 0,97 также указывают на значительную надежность предложенной модели, что подтверждает надежность интерпретации коэффициентов и их статистическую значимость.

3.1 Относительная сила коэффициентов

coefficients = classifier.coef_

import numpy as np
odds = np.exp(coefficients)

features = ['Gender', 'Age', 'EstimatedSalary']
for feature, odd in zip(features, odds[0]):
    print(f"Odds ratio for {feature}: {odd:.2f}")

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

Odds ratio for Gender: 1.09
Odds ratio for Age: 5.82
Odds ratio for EstimatedSalary: 2.73

При этом цифры показывают, что пол оказывает ограниченное влияние на формирование решения о покупке. С другой стороны, увеличение переменной возраста на одну единицу приводит к увеличению шансов на 5,82 при условии, что все остальные переменные постоянны. Кроме того, замечено, что предполагаемая зарплата оказывает заметное положительное влияние на решение о покупке: коэффициент увеличивается на 2,73 при увеличении ориентировочной зарплаты на одну единицу.

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

3.2 Статистическая значимость

Однако важно также исследовать статистическую значимость коэффициентов.

import pandas as pd
import statsmodels.api as sm

X = df[['Gender', 'Age', 'EstimatedSalary']]
y = df['Purchased']

X = sm.add_constant(X)

model = sm.Logit(y, X).fit()

# Print the model summary
print(model.summary())

В целях исследования статистической значимости моделирование должно осуществляться в форме уравнений, в которой импортируется файл statmodels.api и модель выполняется с включением константы. Судя по сводке модели, все три переменные имеют статистическую значимость 0,04, 0,00 и 0,00 для переменных пола, возраста и предполагаемой зарплаты соответственно.

Заключение

Результаты показывают, что второй кластер, выявленный в описательной статистике, потенциально сформировал общую картину, сделав возраст доминирующим и наиболее значимым положительным предиктором решения о покупке. Основываясь на этих выводах, можно предположить, что углубленный анализ потребительских знаний будет иметь решающее значение для того, чтобы не пропустить «скрытых» индивидуумов кластера, что требует более прогрессивных и индуктивных подходов, а не сосредоточения внимания исключительно на позитивистско-ориентированных и дедуктивных методах. и подходы, ориентированные на обобщения, в брендинге и коммуникационном дизайне. Другими словами, предположение или обобщение, основанное на обратной зависимости между возрастом и решениями о покупке на основе социальных сетей, приведет к значительным негативным финансовым последствиям и доле рынка.