Original size 1140x1600

Analyzing Marketing Responses

PROTECT STATUS: not protected

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

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

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

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

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

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

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

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

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

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

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

4. 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 ()

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

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 ()

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

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 ()

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

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 ()

5. Топ-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 ()

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

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 ()

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

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 ()

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

Original size 1000x600

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

Original size 800x600

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

Original size 1200x600

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

Original size 1000x600

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

Original size 1000x600

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

Original size 1000x600

Наблюдается положительная корреляция между доходом клиентов и их суммарными тратами. Чем выше доход клиента, тем больше он тратит на продукты.

Original size 1000x600

Большинство клиентов состоят в отношениях. Клиенты, которые указали статус «Single», представлены в меньшей степени. Это указывает на то, что ЦА — это люди в партнерских или семейных отношениях.

Analyzing Marketing Responses
We use cookies to improve the operation of the HSE website and to enhance its usability. More detailed information on the use of cookies can be fou...
Show more