На фоне повсеместного распространения методов машинного обучения (МО) бинарная логистическая регрессия становится мощным инструментом, предлагающим значительные возможности для точных прогнозов и углубленной интерпретации в различных областях. Это исследование вращается вокруг набора данных, основанного на рекламе в социальных сетях. Он использует возможности логистической регрессии для анализа двоичного результата — в частности, «куплено» и «не куплено» — на основе демографических атрибутов по 400 гипотетическим записям. Исследование не только подчеркивает значимость и относительное влияние каждого коэффициента, но также и их соответствующую надежность. Одновременно проект углубляется в точность прогнозов, сопровождаясь тщательной очисткой, исследованием и визуализацией данных, и все это направлено на достижение основной цели.
Динамика логистической регрессии
Логистическая регрессия — это форма регрессионного анализа, используемая для прогнозирования результата категориальной зависимой переменной на основе одной или нескольких переменных-предикторов. Результат обычно является двоичным.
С другой стороны, линейная регрессия используется для прогнозирования непрерывной зависимой переменной. Основное различие между ними заключается в том, какой результат они предсказывают. Тем не менее, основополагающие принципы остаются в значительной степени последовательными, основанными на концепции наиболее подходящей линии. В линейной регрессии мы моделируем взаимосвязь между зависимыми и независимыми переменными как y=β0+β1x1+…+βnxn.
В контексте логистической регрессии это линейное уравнение преобразуется для прогнозирования вероятности принадлежности данного экземпляра к определенной категории. Преобразование достигается за счет сигмовидной (т. е. логистической) функции. Сигмоидальная функция, представленная как σ(z)=1/e^(−z) отображает любые введите «z» в значение от 0 до 1, что сделает его подходящим для представления вероятности.
Как видно из рисунка выше, точность прогнозирования улучшается, если зависимая переменная основана на категориальных показателях с двоичными результатами, поскольку точки идеально группируются вокруг S-образной кривой, не подвергаясь значительным ошибкам прогнозирования.
Масштаб и цели проекта
Проект реализуется на основе использования 400 гипотетических рекламных записей в социальных сетях, при этом покупка, а не покупка (т. е. переменная «Куплено») является зависимой переменной, а «Возраст», «Ориентировочная зарплата» и «Пол» являются предикторами. . Цель проекта — понять, какие из этих демографических переменных оказывают наибольшее влияние на решение о покупке, в то время как процесс МО будет подвергаться проверке точности модели, а также статистической значимости коэффициентов модели. Проект реализуется через Jupyter Notebook на Python Pyodide, который позволяет загружать наборы данных с помощью средства прямой «загрузки».
- Исследование и очистка данных
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 для переменных пола, возраста и предполагаемой зарплаты соответственно.
Заключение
Результаты показывают, что второй кластер, выявленный в описательной статистике, потенциально сформировал общую картину, сделав возраст доминирующим и наиболее значимым положительным предиктором решения о покупке. Основываясь на этих выводах, можно предположить, что углубленный анализ потребительских знаний будет иметь решающее значение для того, чтобы не пропустить «скрытых» индивидуумов кластера, что требует более прогрессивных и индуктивных подходов, а не сосредоточения внимания исключительно на позитивистско-ориентированных и дедуктивных методах. и подходы, ориентированные на обобщения, в брендинге и коммуникационном дизайне. Другими словами, предположение или обобщение, основанное на обратной зависимости между возрастом и решениями о покупке на основе социальных сетей, приведет к значительным негативным финансовым последствиям и доле рынка.