![](https://habrastorage.org/getpro/habr/upload_files/d26/205/65d/d2620565dcc8ba2a6e90e2156c897c57.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/dee/d1e/c22/deed1ec2279068171bc3357e9d9aac65.jpg)
Автор статьи: Жанна Боташева
Выпускница курса Machine Learning. Basic
Всем привет! Вот и я добралась до Хабра :).
Хочу поделиться своей проектной работой, которую написала в рамках курса OTUS "Machine Learning.Basic".
Итак, нас ждет путешествие в увлекательный мир шопинга в Стамбуле!
Целью работы было получить представление о тенденциях и моделях покупок в Стамбуле и определить наиболее оптимальную модель для анализа данных.
Языком разработки выступил Python, средой - Jupyter Notebook (anaconda3).
Для данной работы я использовала информацию о покупках в 10 различных торговых центрах в период с 2021 по 2023 год. Датасет содержит данные различных возрастных групп и полов, что дает комплексное представление о покупательских привычках в Стамбуле. Набор данных включает в себя важную информацию, такую как номера счетов, идентификаторы клиентов, возраст, пол, способы оплаты, категории продуктов, количество, цена, даты заказа и расположение торговых центров.
![](https://habrastorage.org/getpro/habr/upload_files/b46/cde/aab/b46cdeaab2e84a9be5ecb1c8c718ce68.png)
Посмотрим на полный список доступных признаков:
![](https://habrastorage.org/getpro/habr/upload_files/882/214/208/8822142081c71c768bad1afe537e5d71.png)
invoice_no
: Номер счета.customer_id
: Номер клиента.gender
: Пол.age
: Возраст клиентов.category
: Категории приобретаемого товараquantity
: Количество каждого продукта (элемента) на транзакцию.price
: Цена товара за единицу в турецких лирах (TL).payment_method
: Способа оплаты (наличными, кредитной картой или дебетовой картой), используемого для транзакции.invoice_date
: Дата выставления счета. День, когда была создана транзакция.shopping_mall
: Названия торгового центра, в котором была совершена транзакция.
Пропусков в данных нет, 6 категориальных (invoice_no
, customer_id
, gender
, category
, payment_method
, invoice_date
, shopping_mall
) и 3 количественных признаков (age
, quantity
, price
).
Предобработка
А теперь рассмотрим уникальность значений:
![](https://habrastorage.org/getpro/habr/upload_files/472/bae/f21/472baef2150dbc4a84f27e225bc7a0de.png)
Каждый номер клиента и номер счета уникальный, значит, не было повторов, из чего следует, что невозможно анализировать покупки на основе клиентов. Удалим данные столбцы:
![](https://habrastorage.org/getpro/habr/upload_files/2e7/137/67b/2e713767b10be59cab9b58346a878298.png)
Признак invoice_data
указан некорректно. Добавим дополнительно 3 столбца с указанием года, месяца и дня:
![](https://habrastorage.org/getpro/habr/upload_files/3ed/6cc/752/3ed6cc75274aab1d1d132528575db64e.png)
Возраст клиентов анализируется от 18 до 69 лет, количество каждого продукта варьирует от 1 до 5, самая дешевая и дорогая покупка составляют 5,23 и 5250 TL соответственно.
![](https://habrastorage.org/getpro/habr/upload_files/7e4/18c/c2b/7e418cc2b7503e7b0d1b460e069eca12.png)
Объединим age
в возрастные группы и выведем общую сумму расходов(price
*quantity
):
![](https://habrastorage.org/getpro/habr/upload_files/e00/4df/b46/e004dfb4678508503f5596c1e80090fc.png)
Визуализация данных
Дальше можно приступить к визуализации данных.
Думаю, ни для кого не секрет и все согласны с тем фактом, что женщины тратят больше :) Построим гистограмму зависимости трат от пола покупателей:
![](https://habrastorage.org/getpro/habr/upload_files/b71/227/c6b/b71227c6b1023e22ff8283b802d267ab.png)
Код:
g_p = data.groupby('gender')[['price']].sum().reset_index()
sns.barplot(x='gender',y='price',data= g_p)
plt.ylabel('Общая сумма расходов')
plt.xlabel('Пол')
plt.title('Сумма расходов мужчин и женщин на покупки')
plt.ticklabel_format(style='plain',axis='y')
plt.show()
Категория товара влияет на сумму покупки, причем наибольшее влияние оказывает категория «Technology», за которым следуют «Shoes» и «Clothing».
![](https://habrastorage.org/getpro/habr/upload_files/1dd/f6b/bc4/1ddf6bbc43ceb3aa6a231c2b91d6abba.png)
![](https://habrastorage.org/getpro/habr/upload_files/9af/0c8/f88/9af0c8f8851d82c9dd294e1eb0f1d149.png)
Код:
cat_p =data.groupby('category')[['price']].sum().reset_index()
plt.figure(figsize=(10,5))
sns.barplot(x='category',y='price',data=cat_p)
plt.title('Траты по категориям')
plt.ylabel('Общая сумма')
plt.xlabel('Категория')
plt.ticklabel_format(style='plain',axis='y')
plt.show()
![](https://habrastorage.org/getpro/habr/upload_files/d57/a11/acf/d57a11acf02a05df220c0534aa0a8acb.png)
Код:
sns.boxplot(x='total', y='category', data=data)
plt.title('Box Plot продаж по категориям приобретаемого товара')
plt.ylabel('Категория товара')
plt.xlabel('Общая стоимость')
plt.show()
Признаки «gender», «payment method» существенно не влияют на покупательское поведение в этом наборе данных.
![](https://habrastorage.org/getpro/habr/upload_files/5fa/bed/40e/5fabed40eb6c41cdbfd5371e3189a183.png)
Код:
pay_p =data.groupby('payment_method')[['price']].sum().reset_index()
sns.barplot(x='payment_method',y='price',data=pay_p)
plt.title('Соотношение платежей в зависимости от способа оплаты')
plt.ticklabel_format(style='plain',axis='y')
plt.ylabel('Общая сумма')
plt.xlabel('Способ оплаты')
plt.show()
![](https://habrastorage.org/getpro/habr/upload_files/169/e9a/8e9/169e9a8e9c5f1a4ffeee56603d69433f.png)
Код:
fig, ax = plt.subplots(figsize=(12, 8))
sns.countplot(data=data, x='payment_method', hue='gender', palette='Set1', ax=ax)
ax.set_title('Распределение продаж по способу оплаты и полу')
ax.set_xlabel('Способ оплаты')
ax.set_ylabel('Продажи')
plt.show()
Представители возрастной группы 25 - 44 года тратят на покупки больше остальных:
![](https://habrastorage.org/getpro/habr/upload_files/c0b/745/bec/c0b745bec75338978cfbfc89640f04a0.png)
Код:
sns.histplot(data=data, x='age_group')
plt.title('Распределение по возрасту и количеству покупок')
plt.ylabel('Покупки')
plt.xlabel('Возрастные группы')
plt.show()
Наибольшее количество покупок наблюдается в торговых центрах «Istanbul», «Kanyon» и «Metrocity».
![](https://habrastorage.org/getpro/habr/upload_files/990/af0/cbf/990af0cbf57841d1c50c42f4ba25e594.png)
Код:
colors = ['red', 'orange', 'yellow', 'green','blue', 'purple','lightblue' ,'black', 'brown', 'lightgreen']
data_mall = data.groupby("shopping_mall")["total"].sum()
data_mall.plot(kind="bar",figsize=(14, 8),color=colors)
plt.title('Распределение доходов')
plt.ylabel('Доход')
plt.xlabel('Торговый центр')
plt.show()
![](https://habrastorage.org/getpro/habr/upload_files/354/7f3/fc7/3547f3fc7b77bf4a5fdac7e78ba4e279.png)
Код:
data['invoice_date'] = pd.to_datetime(data['invoice_date'])
data.set_index('invoice_date', inplace=True)
mall_total = data.groupby(['shopping_mall', pd.Grouper(freq='M')])['total'].sum()
mall_total = mall_total.reset_index()
mall_total = mall_total.pivot(index='invoice_date', columns='shopping_mall', values='total')
mall_total.plot(figsize=(15, 5),color=colors)
plt.title('Ежемесячный доход торгового центра')
plt.ylabel('Доход')
plt.xlabel('Месяц')
plt.show()
Как ни странно, больше всего продаж совершается по понедельникам:
![](https://habrastorage.org/getpro/habr/upload_files/c20/7c3/654/c207c36546e2eee3967a9818587e268a.png)
Код:
data_sorted_weekday = data.sort_values(['day'], ascending=True, axis=0, inplace=False)
ax = data_sorted_weekday['dayofweek'].value_counts()\
[data_sorted_weekday['dayofweek'].unique()]\
.plot(kind='line',figsize=(20,10),alpha=1.0)
ax.set_title('Самый прибыльный день в неделе')
ax.set_ylabel('Число оплат')
ax.set_xlabel('День')
Построение модели
Для сравнения были использованы четыре модели:
линейная регрессия;
деревья решений;
LGBMRegressor
;CatBoostRegressor
.
![](https://habrastorage.org/getpro/habr/upload_files/846/497/e9d/846497e9d0bfff9d7a6d2b3fdeff2a22.png)
Таким образом, делаем следующие выводы:
Лучший целевой показатель продемонстрировала модель CatBoostRegressor.
Самый активный день для совершения покупок – понедельник.
Больше расходов наблюдается у покупателей прекрасного пола, однако здесь пол, так же, как и способ оплаты, особо не влияют на покупательское поведение.
Категория товара определяет сумму покупки, самые большие показатели в «Technology», «Shoes» и «Clothing».
Больше покупок обнаружено у представителей возрастной группы от 25 до 44 лет.
Самые популярные торговые центры в плане покупок: «Istanbul», «Kanyon» и «Metrocity».
Значит, мы можем использовать модель CatBoostRegressor для дальнейших прогнозов общего дохода, используя в качестве входных данных профиль целевых клиентов (пол, возрастная группа, категория покупаемых товаров).
Спасибо за внимание :)
Подробнее о курсе, в рамках которого я подготовила проект, можно узнать тут.
Комментарии (3)
ishumitcu
20.10.2023 15:49-1понедельник на турецком базарный день вроде
aborouhin
20.10.2023 15:49-1Pazartesi - "после базарного", а pazar, "базарный" - это воскресенье. Но вообще уличные базары тут скорее по пятницам, а в ТЦ в выходные ездят. Так что что за аномалия с понедельниками - это скорее вопрос к тому, а откуда вообще анализируемый датасет взялся и насколько он репрезентабелен.
aborouhin
Я правильно понимаю, что тот малозначительный факт, что инфляция в Турции с 2021 по 2023 год даже по официальным данным составила процентов 150, а реальный рост потребительских цен - явно больше 200%, в исследовании был проигнорирован? :)