Это третий проект Стамбульской академии наук о данных. Проект был о классификации.

Клиент доволен или нет?

В этом проекте я использовал данные из Kaggle. Эти данные представляют собой данные компании электронной коммерции в Бразилии, и в ней есть почти все таблицы (такие как заказы, отзывы, продукты и т. д.). В этом наборе данных я попытался определить, удовлетворен ли клиент или нет, основываясь на оценках клиентов. В этом проекте я загрузил данные из базы данных. После загрузки данных я подключил базу данных из блокнота jupyter и загрузил данные в python. Я закончил часть визуализации данных, подготовив интерактивную панель инструментов с помощью программы data tableu. Я пытался разработать свою модель с будущим инженером. Я попытался выбрать лучшую модель, сравнив около 10 алгоритмов классификации. Я попытался найти наилучшие параметры модели с помощью настройки модели и проверил успех моей модели. Здесь Github repoирассказываю все пошагово.

Первый шаг: загрузка данных в базу данных

В этом проекте я использовал postgresql. Прежде всего, вам нужно создать базу данных. После создания вы должны загрузить данные в эту базу данных. Я использовал оболочку postgresql для создания базы данных и создания таблиц.

CREATE DATABASE ecommerce;
\connect ecommerce;
CREATE TABLE name_freq(
 seller_id TEXT,
 seller_zip_code_prefix INT,
 seller_city INT,
 seller_state TEXT
);

Второй шаг:подключение базы данных из Jupyter Notebook

Есть два способа подключения базы данных из ноутбука. Один из них psycopg2, а другой sqlalchemy В этом проекте я использовал psycopg2

from psycopg2 import connect
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
params = {
 ‘host’: ‘***’,
 ‘user’: ‘***’,
 ‘port’ : 5432, #postgresql port
 ‘password’: ‘*****’
}
connection = connect(**params, dbname=’****’)

Третий этап:EDA (исследовательский анализ данных)

Это мой первый проект с использованием Tableau. Я не ожидал, что Tableau мне так понравится, но я не мог удержаться от создания интерактивной панели инструментов.



Как мы видим на приборной панели, многие клиенты из штата Сан-Паулу. Когда мы выбираем 2018 год с помощью фильтра, мы видим, что в этом году совершается больше всего покупок. Клиенты использовали кредитные карты больше, чем другие каждый год в качестве способа оплаты. Клиенты сделали больше покупок в каталогах «мебель_декор» в 2016 г., «кровати_ванна_стол» в 2017 г. и «здоровье_красота» в 2018 г. Оценка клиентов по отзывам за каждый год обычно составляет около 90%.

Четвертый шаг: разработка функций

Разработка признаков для лучшей модели — неизбежный конец для специалиста по данным. В зависимости от ситуации, объединение, умножение и деление двух или более столбцов может открыть путь к лучшей модели.

Мы все знаем, что иногда мы можем столкнуться с проблемами, когда переходим к части оплаты при совершении покупок на веб-сайте. Одна из таких проблем заключается в том, что наш платеж каким-то образом не подтверждается сайтом после совершения платежа. Подумав, что это может повлиять на удовлетворенность клиентов, я создал столбец с названием other_between_purcase. После создания колонки я понял, что поручительства у них есть до 1650 часов. Я сгруппировал их. После этого создаем 8 групп as;

< 1= 1

1 &‹ 5= 2

5 &‹= 10 = 3 и т. д.

На этот раз я попытался выяснить, прибыл ли груз вовремя. У меня есть столбцы, где заказ отдается курьеру, заказ доходит до покупателя и заказ считается доставленным. Используя эти столбцы, я создал таблицу, показывающую, дошел ли заказ до клиента вовремя. Если груз прибыл вовремя, я присваивал 0 значений, если не 1 значение.

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

Опять же, используя тот же столбец дат, я нашел сезон, в который был доставлен груз, и сгруппировал его.

Иногда это может повлиять на оценки, которые мы даем продавцам. Поскольку набор данных не дал мне оценок продавцов, я нашел и сгруппировал общее количество товаров, проданных продавцами, как показано в приведенном выше коде (например, x‹=50 = 1, x›50 и x‹=100). = 2 и т. д.).

Наконец, я сгруппировал столбец review_score, который является моим целевым столбцом, поместив тех, кто поставил 4 и 5 звезд, в одну группу, а остальных — в другую.

Пятый шаг: машинное обучение

Моей главной целью в этом проекте было использование алгоритмов классификации и сравнение. Я сравнил около 10 алгоритмов и попытался определить лучший алгоритм для набора данных.

Как видно из таблицы выше, показатели точности обучения и тестирования моделей очень хорошие. Но это то, что нам нужно? Как видно из раздела EDA, распределение в нашем целевом столбце, review_score, довольно несбалансированное. Поэтому нам было бы неправильно смотреть на показатели точности. Нам нужно больше внимания уделять точности, отзыву и F1. Но, как видно из таблицы, все эти оценки довольно низкие. Я выбираю алгоритм случайного леса, который, по моему мнению, имеет в среднем лучший результат, чем другие, и решил двигаться дальше.

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

Таким образом, есть два варианта несбалансированных распределенных наборов данных. Один из них является недостаточным, а другой - передискретизированным. В обоих методах основной принцип состоит в том, чтобы сделать целевую колонку сбалансированной. В этом проекте я предпочел использовать метод передискретизации.

После использования метода передискретизации наша точность, полнота и оценка F1 стали лучше, не лучше, но хорошо.

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

Когда мы изучаем таблицу важности функций, мы видим влияние созданных мной столбцов «доставка» и «счет_продавца» на модель. С другой стороны, это видно в столбцах, которые не влияют на модель. Эти столбцы должны быть удалены из модели во время оценки модели.

Шестой шаг: настройка модели

Настройка модели — один из самых важных шагов, потому что вы должны узнать, какие параметры модели лучше всего подходят для вас, до начала производства. Есть способ для этого. Один из них GridSearchCV, который иногда занимает несколько дней, другой RandomizedSearchCV, который длится почти 3 или 4 часа, так что вы можете посмотреть «Властелина колец» :). Я использовал RandomizedSearchCV.

'n_estimators': 1146,
'min_samples_split': 2,
'min_samples_leaf': 1,
'max_features': 'auto',
'max_depth': None,
'bootstrap': False

Это наиболее подходящие характеристики для моей модели.

Последний шаг: развертывание

На последнем этапе проекта я запустил в производство окончательную версию машинного обучения. Проверить это можно с помощью streamlit.

Для любых предложений и вопросов: [email protected]

Увидимся в следующий раз, а пока счастливого анализа.