Исходный размер 1140x1600

Analyzing Marketing Responses

PROTECT STATUS: not protected

Оглавление: — вводная — этапы работы — итоговые графики

Вводная часть

Для исследований были выбран датасет "Marketing Campaign", который содержит данные о маркетинговых кампаниях. Взят с сайта kaggle.com (https://www.kaggle.com/datasets/rodsaldanha/arketing-campaign)

Он включает информацию о клиентах, их покупках, доходах, реакции на рекламу и других метриках. У данного датасета 312 тысяч просмотров и 46,1 тысяч загрузок, так что, будучи продуктовым дизайнером, мне стало интересно его проанализировать.

Были выбраны несколько видов графиков для визуализации конкретных типов данных:

  1. Гистограммы для распределения клиентов по возрасту

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

  1. Столбчатые диаграммы для сравнения категорий

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

  1. Box Plot для анализа распределений и выбросов

Почему: Box Plot позволяет визуализировать распределение данных, медиану, квантили и выбросы. Это полезно для сравнения доходов между разными группами (например, по уровню образования).

  1. Scatter Plot для корреляций

Почему: Scatter Plot идеально подходит для визуализации взаимосвязи между двумя числовыми переменными (например, доход и траты).

Этапы работы

Шаг 1: Скачивание датасета

  1. Загрузила файл с сайта: https://www.kaggle.com/datasets/rodsaldanha/arketing-campaign

  2. Перенесла файл "marketing_campaign.csv" в папку "data" в папке проекта "Neural networks project"

Шаг 2: Установка необходимых библиотек

В терминале:

pip install pandas matplotlib seaborn

Шаг 3: Загрузка данных и предварительный анализ

Указываем путь к файлу, задаем разделитель и предварительно проверяем первые строки, информацию о данных и наличие пропущенных значений:

import pandas as pd import matplotlib.pyplot as plt import seaborn as sns

file_path = '/Users/daryapivovarova/Downloads/Neural networks project/data/marketing_campaign.csv'

df = pd.read_csv(file_path, sep=';')

print(df.head())

print(df.info())

print(df.isnull().sum())

Шаг 4: Обработка пропущенных значений

Заполняем пропуски в столбце Income медианным значением, это поможет сохранить распределение данных:

df['Income'] = df['Income'].fillna(df['Income'].median())

print(df['Income'].isnull().sum()) # Должно быть 0

Шаг 5: Настройка стиля графиков

вдохновлялась этим референсом (слева) и собрала палитру цветов (справа)

import matplotlib.pyplot as plt import seaborn as sns

plt.rcParams['font.family'] = 'sans-serif' plt.rcParams['font.sans-serif'] = ['Helvetica'] plt.rcParams['font.weight'] = 'bold'

colors = ["#ED400E", "#EE6C99", "#F5BD02", "#456C4F", "#0499A5", "#1469B4", "#8B85B9"]

background_color = "#f8f8f2" plt.rcParams['axes.facecolor'] = background_color plt.rcParams['figure.facecolor'] = background_color

plt.rcParams['axes.titlesize'] = 16 plt.rcParams['axes.titleweight'] = 'bold' plt.rcParams['axes.labelsize'] = 10 plt.rcParams['xtick.labelsize'] = 10 plt.rcParams['ytick.labelsize'] = 10

Шаг 6: Анализ данных

  1. Распределение клиентов по возрасту

plt.figure(figsize=(10, 6)) sns.histplot(df['Year_Birth'], bins=30, color=colors[0]) plt.title("Distribution of Customers by Age", fontsize=16, fontweight='bold') plt.xlabel("Year of Birth", fontsize=10) plt.ylabel("Number of Customers", fontsize=10) plt.show()

  1. Количество клиентов, отреагировавших на кампанию

plt.figure(figsize=(8, 6)) response_counts = df['Response'].value_counts() sns.barplot(x=response_counts.index, y=response_counts.values, palette=colors[:2]) plt.title("Response to Marketing Campaign", fontsize=16, fontweight='bold') plt.xlabel("Response (1 = Yes, 0 = No)", fontsize=10) plt.ylabel("Number of Customers", fontsize=10) plt.show()

  1. Средний доход по уровню образования

plt.figure(figsize=(12, 6)) sns.boxplot(x='Education', y='Income', data=df, palette=colors) plt.title("Average Income by Education Level", fontsize=16, fontweight='bold') plt.xlabel("Education Level", fontsize=10) plt.ylabel("Income", fontsize=10) plt.xticks(rotation=45) plt.show()

  1. Зависимость между количеством детей и реакцией на кампанию

plt.figure(figsize=(10, 6)) sns.countplot(x='Kidhome', hue='Response', data=df, palette=colors[:2]) plt.title("Campaign Response by Number of Children", fontsize=16, fontweight='bold') plt.xlabel("Number of Children", fontsize=10) plt.ylabel("Number of Customers", fontsize=10) plt.legend(title="Response", labels=["No", "Yes"], fontsize=10) plt.show()

  1. Топ-5 продуктов, которые чаще всего покупают

product_columns = ['MntWines', 'MntFruits', 'MntMeatProducts', 'MntFishProducts', 'MntSweetProducts', 'MntGoldProds'] product_totals = df[product_columns].sum().sort_values(ascending=False)

plt.figure(figsize=(10, 6)) sns.barplot(x=product_totals.index, y=product_totals.values, palette=colors) plt.title("Top 5 Products by Sales Volume", fontsize=16, fontweight='bold') plt.xlabel("Product Category", fontsize=10) plt.ylabel("Total Purchases", fontsize=10) plt.xticks(rotation=45) plt.show()

  1. Корреляция между доходом и суммарными тратами

df['TotalSpent'] = df[product_columns].sum(axis=1)

plt.figure(figsize=(10, 6)) sns.scatterplot(x='Income', y='TotalSpent', data=df, color=colors[4]) plt.title("Correlation Between Income and Total Spending", fontsize=16, fontweight='bold') plt.xlabel("Income", fontsize=10) plt.ylabel("Total Spending", fontsize=10) plt.show()

  1. Распределение клиентов по семейному положению

plt.figure(figsize=(10, 6)) marital_counts = df['Marital_Status'].value_counts() sns.barplot(x=marital_counts.index, y=marital_counts.values, palette=colors) plt.title("Distribution of Customers by Marital Status", fontsize=16, fontweight='bold') plt.xlabel("Marital Status", fontsize=10) plt.ylabel("Number of Customers", fontsize=10) plt.xticks(rotation=45) plt.show()

Итоговые графики

Исходный размер 1000x600

Основная масса клиентов родилась в период с 1960 по 1980 год. Это указывает на то, что большая часть аудитории — люди в возрасте 40–60 лет. Молодежь и пожилые люди представлены в меньшей степени.

Исходный размер 800x600

Большинство клиентов не отреагировали на маркетинговую кампанию. Только около 15–20% аудитории положительно откликнулась на кампанию. Низкая вовлеченность и недост. релевантность компании для ЦА.

Исходный размер 1200x600

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

Исходный размер 1000x600

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

Исходный размер 1000x600

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

Analyzing Marketing Responses
Проект создан 23.03.2025
Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную...
Показать больше