Original size 1140x1600

Analyzing Marketing Responses

PROTECT STATUS: not protected
8

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

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

Для исследований были выбран датасет «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
8
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