
Вступление
Для темы исследования хотелось взять что-то интересное и актуальное. В России достаточно много данных по e-commerce, в частности по Wildberries и Ozon, на которых я и мои знакомые регулярно что-то заказываем.
В сервисе аналитики Sellmonitor нашлась возможность бесплатно скачать подходящие данные. Как оказалось, существуют нюансы, связанные с оценкой продаж — сервисы аналитики точнее оценивают продажи товаров со складов самого маркетплейса, поэтому нужно было взять что-то небольшого размера (чтобы было выгодно продавцам хранить на складах Озона, а не у себя) и при этом популярное.
Выбор пал на блеск для губ. Я скачала данные о топ-5000 товаров (по выручке за месяц) в этой категории. И попробовала вытащить оттуда разные интересные факты.
Что у меня в данных
Датасет содержит информацию о 4550 товарах (блесках для губ) с Ozon и включает данные:
— Общие данные: название товара, бренд, артикул, магазин. — Финансовые метрики: цена, цена со скидкой, выручка за месяц, продажи за месяц (в шт.). — Характеристики товара: объем (мл), вес (г), цвет, страна производства. — Метрики популярности: рейтинг, количество отзывов, отзывы за месяц. — Логистика: наличие на складе, модели работы (FBO, FBS, Retail).
Типы графиков, использованные в анализе
В ходе исследования я использовала следующие типы визуализации:
1. Scatter plot (диаграмма рассеяния) — для анализа зависимости между двумя переменными (цена и продажи). Дополнительно использовала линию регрессии для визуализации общего тренда. 2. Bar chart (столбчатая диаграмма) — для сравнения значений между категориями (выручка по ценовым сегментам). 3. Heatmap (тепловая карта) — для визуализации двумерной матрицы данных (комбинации объема и цены). 4. Horizontal bar chart (горизонтальная столбчатая диаграмма) — для сравнения категорий с длинными названиями (топ-10 брендов, популярность цветов).
Как я анализировала данные
Я начала с базового исследования данных. Использовала df.info () для оценки структуры данных, типов переменных и заполненности полей. Затем df.describe () для получения статистических характеристик числовых переменных для понимания целостности данных.
Получилось, что датасет содержит 4550 записей, 25 столбцов. Обнаружены пропуски в некоторых полях (например, в поле «Бренд» — 278 пропусков из 4550), но в целом данные пригодны для анализа.
Всего товаров: 4550 Средняя цена: 691.64 руб. Медианная цена: 380.00 руб. Средние продажи за месяц: 79 шт. Общая выручка за месяц: 150.21 млн руб.
Зависимость продаж от цены
Первый вопрос, который меня заинтересовал: есть ли связь между ценой товара и объемом продаж? Чем дороже блеск, тем больше его покупают, или наоборот?
Я построила scatter plot (диаграмму рассеяния), где по оси X — цена, по Y — продажи. Первоначальный график получился не очень информативным из-за выбросов — был товар с экстремально высокой ценой. Я отфильтровала данные по 99-му перцентилю, чтобы убрать эти выбросы и увидеть общую картину.
Затем добавила линию регрессии для визуализации общего тренда.
Почему scatter plot? Этот тип графика позволяет визуализировать распределение точек данных и выявить наличие корреляции между переменными. Каждая точка представляет товар, и можно увидеть, где они концентрируются, а где разбросаны. Линия регрессии помогает понять общий тренд зависимости.
Результат показал, что рынок четко сегментирован по цене: есть дешевые блески с хорошими продажами, средний сегмент и премиум. Между сегментами прослеживаются четкие границы (явно различимые «столбики» на графике).
Распределение выручки по ценовым сегментам
Увидев сегментацию на первом графике, мне стало интересно: в каком ценовом диапазоне сосредоточена основная выручка? Возможно, дешевые блески хорошо продаются, но приносят меньше денег, или наоборот?
Я разделила все товары на ценовые категории: до 350 рублей, 350-700, 700-1050 и так далее. Затем посчитала суммарную выручку в каждой категории и визуализировала результаты в виде столбчатой диаграммы.
Почему bar chart? Столбчатая диаграмма идеально подходит для сравнения значений между категориями. Она позволяет легко сравнить выручку в разных ценовых сегментах и выявить наиболее прибыльные диапазоны. Это интуитивно понятный способ визуализации.
Результаты показали, что не всегда самые дорогие товары приносят больше всего денег. Наибольшая выручка сосредоточена в сегментах до 350 рублей (51.39 млн руб.) и 350-700 рублей (48.88 млн руб.). Также появилась интересная гипотеза, почему в диапазоне 1400-2100 руб. выручка меньше чем в более дорогих, я думаю, что люди покупают либо дешевое, либо уже что-то более премиальное и дорого.
Матрица выручки по объему и цене
В датасате так-же были данные о характеристиках товара, поэтому было интересно уточнить, а какая комбинация объема продукта и цены приносит больше всего денег? Возможно, маленькие блески по высокой цене работают иначе, чем большие по низкой цене?
Я создала группы по объему (0-3 мл, 3-5 мл и так далее) и построила матрицу, где по одной оси — объем, по другой — ценовой сегмент. В каждой ячейке — суммарная выручка. Визуализировала это в виде тепловой карты.
Почему heatmap? Тепловая карта позволяет эффективно визуализировать двумерную матрицу данных, где интенсивность цвета соответствует значению выручки. Это помогает быстро выявить «горячие» и «холодные» зоны — комбинации параметров, которые работают лучше всего. Это намного нагляднее, чем таблица с цифрами.
Этот график получился очень информативным и наглядным. Он показывает, что оптимальные комбинации — это средние объемы (3-12 мл) в среднем ценовом сегменте (до 700 руб.).
Ключевые находки из матрицы: Наибольшая выручка (21.36 млн руб.) приходится на комбинацию: объем 8-12 мл и ценовой сегмент 350-700 руб. Второе место (14.64 млн руб.) — объем 8-12 мл в сегменте до 350 руб. Третье место (14.32 млн руб.) — объем 3-5 мл в сегменте 350-700 руб.
Топ-10 брендов по выручке
Ну и конечно же интересно: а какие бренды лидируют по выручке?
Я посчитала суммарную выручку по каждому бренду, отсортировала по убыванию и выбрала топ-10. Затем построила горизонтальную столбчатую диаграмму.
Почему горизонтальная? Горизонтальная ориентация удобна для отображения названий брендов, так как они могут быть длинными. Это улучшает читаемость графика и позволяет легко сравнить значения между брендами.
Результаты показали, что лидером является бренд MIXIT с выручкой почти 16 млн рублей за месяц. Топ-3 бренда (MIXIT, Eveline Cosmetics, tellmi) генерируют более 38 млн руб., что составляет около 25% от общей выручки рынка.
Получились следующие данные: Топ-10 брендов по выручке: 1. MIXIT: 15.98 млн руб. 2. Eveline Cosmetics: 13.05 млн руб. 3. tellmi: 9.35 млн руб. 4. JEANMISHEL: 9.23 млн руб. 5. B.COLOUR PROFESSIONAL: 9.14 млн руб. 6. Clarins: 8.65 млн руб. 7. LUXVISAGE: 8.02 млн руб. 8. DIVAGE: 7.74 млн руб. 9. Vivienne Sabo: 5.06 млн руб. 10. Belor Design: 2.81 млн руб.
Результат подтверждают мои собственные наблюдения — бренд MIXIT рекламируют во всех запрещенных соцсетях в невероятном кол-ве. Оказывается это приносит должный результат.
Популярность цветов у топ-10 брендов
Помимо объема, можно было попробовать проанализировать цвет блесков: какие наиболее популярны среди лидирующих брендов?
Основная проблема заключалась в том, что цвета в данных записаны по-разному: где-то «карамель», где-то «nude», где-то просто номер «03». Нужно было унифицировать эти данные.
Я написала функцию классификации цветов, которая определяет группу по названию: нюдовые, розовые, красные, прозрачные или другие. Затем применила эту функцию ко всем товарам из топ-10 брендов и посчитала выручку по каждой группе цветов.
Почему горизонтальный bar chart? Аналогично предыдущему анализу, горизонтальная ориентация удобна для отображения категорий цветов и сравнения их популярности. Кроме того, цветные столбцы визуально соответствуют самим цветам блесков.


Популярность цветов у топ-10 брендов (в выручке): Другие (числовые оттенки): 36.48 млн руб. Розовые: 27.32 млн руб. Нюдовые: 18.48 млн руб. Красные: 6.75 млн руб. Прозрачные: 0.001 млн руб.
Немного странно выглядит результат для прозрачных блесков, я даже пошла изучать глазами датасет и сам озон — оказалось, что производители не пишут «прозрачный», так как любой цвет в целом полупрозрачный на губах, поэтому они добавляют в название что-то другое.
Технические детали реализации
Регрессионный анализ: для выявления тренда и зависимости между ценой и объемом продаж. Линейная регрессия использовалась через функцию sns.regplot (), которая автоматически подбирает линию наилучшего приближения. Перцентили: для обработки выбросов применялся 99-й перцентиль. Данные, превышающие этот порог по цене или продажам, были отфильтрованы для более корректной визуализации. Группировка и агрегация: использовались методы groupby () для группировки данных по категориям (бренды, ценовые сегменты, цветовые группы) и агрегации метрик (сумма выручки, средние значения). Категоризация данных (binning): непрерывные переменные (цена, объем) были разбиты на категориальные группы с помощью pd.cut () для более удобного анализа и визуализации. Сводные таблицы (pivot tables): для анализа взаимосвязи между двумя категориальными переменными (объем и цена) использовались сводные таблицы, которые затем визуализировались в виде тепловых карт.
Настройка визуализации
Я создала кастомную цветовую палитру в стиле блесков для губ — розовые, красные, нюдовые оттенки. Считаю, что такая стилизация отлично подходит для этого исследования.


Основные выводы исследования
В результате исследования удалось обнаружить интересные факты и понятно их визуализировать.
Рынок сегментирован — есть четкие ценовые ниши. Рынок не однороден, а имеет структуру с различными сегментами.
Не всегда дороже = больше денег — средний ценовой сегмент иногда приносит больше выручки, чем премиум.
Есть оптимальные комбинации — определенные сочетания объема и цены работают лучше других.
Цвета имеют значение — нюдовые и розовые оттенки действительно самые популярные, что соответствует общим трендам в косметике.