Портфельный проект Data Science с использованием AWS

Введение

В этой статье я хочу представить вам полное портфолио проекта по науке о данных. В этом проекте я хочу выполнить аналитику розничных данных с использованием веб-службы Amazon и различных алгоритмов машинного обучения. Полный код, включая предложение проекта и окончательный отчет по проекту, можно найти в моем репозитории Github.

Определение

Аналитика данных розничной торговли (RDA) в настоящее время используется в магазинах, чтобы лучше предсказать количество товаров, которые могут быть проданы, и, следовательно, лучше оценить, сколько товаров должно быть произведено. Это очень важно, потому что количество проданных товаров может сильно меняться в течение года. Например, люди склонны покупать больше вещей перед Рождеством, чем в течение обычной, а не праздничной недели. Это легко увидеть по квартальной выручке Amazon на Statista. Квартальная выручка Amazon всегда является наибольшей в четвертом квартале, что указывает на то, что люди потребляют в четвертом квартале больше, чем в другие. Это очевидно из-за того, что Рождество приходится на четвертый квартал, а также на Черную пятницу, что также приводит к большому потреблению во всем мире. Если в магазине будет слишком мало товаров до Рождества, потенциальный доход будет упущен. Но если в магазине слишком много товаров, потребуется слишком много места для хранения, а хранение стоит денег, поэтому компания снова потеряет деньги. Таким образом, RDA может использоваться для того, чтобы попытаться оптимизировать производство продуктов, чтобы всегда было доступно оптимальное количество.

Постановка задачи

Цель этого проекта - спрогнозировать еженедельные продажи магазина в масштабе всего отдела. Это должно помочь оптимизировать производственный процесс и, следовательно, увеличить доход при одновременном снижении затрат. Должна быть возможность вводить данные о прошлых продажах из отдела и получать прогнозируемые еженедельные продажи.

Метрики

Целевые данные - это числовые данные. Следовательно, среднеквадратичная ошибка (RMSE) может использоваться для получения наиболее эффективных методов машинного обучения. Уравнение 1 показывает формулу для вычисления RMSE. Чтобы лучше понять масштаб RMSE, можно использовать нормализованное RMSE. Нормализованная RMSE вычисляется путем деления RMSE на стандартное отклонение целевой переменной. Кроме того, можно использовать оценку R-Squared. Оценка R-Squared представляет собой процент отклонения, который может представить модель. Оценка R-Squared вычисляет квадрат ошибки каждой точки, деленный на «фиктивную» ошибку оценки, которая только предсказывает среднее значение всех целевых переменных. Уравнение 2 показывает формулу для вычисления R-Squared.

Исследование данных

Для этого проекта используется набор данных RDA от Kaggle. Набор данных содержит исторические данные о продажах из 45 магазинов, расположенных в разных регионах. Каждый магазин делится на отделы. Сами данные хранятся в таблице Excel. Лист Excel содержит три вкладки. Первая вкладка содержит данные из магазинов. Второй содержит функции, а третий - данные о продажах.

магазины

Всего есть данные 45 магазинов. У каждого магазина свой тип и размер, которые также указаны в таблице Excel. Информация, содержащаяся в таблице Excel, анонимна. На рисунке 1 показана статистика размеров магазинов. Всего существует три разных типа магазинов (A, B и C).

Функции

Функции связаны с магазином. Рисунок 2 содержит все доступные функции и краткое описание каждой из них, а рисунок 3 содержит статистику некоторых функций. Данные для MarkDown1 - MarkDown5 очень неполны, и их необходимо отбросить или применить другие методы для обработки отсутствующих данных.

Продажи

В каждом магазине также хранятся исторические данные о продажах. Данные о продажах собирались с пятого февраля 2010 года до первого ноября 2012 года. Рисунок 4 содержит все функции, связанные с данными продаж, а рисунок 5 содержит некоторую статистику еженедельных продаж.

Исследовательская визуализация

В этой главе более подробно рассматриваются данные и все функции. На рисунке 6 показан анализ некоторых характеристик временных рядов. Первая строка содержит график температуры. Температура меняется год от года с максимумом где-то в июле и минимумом где-то в январе. Сама по себе температура, похоже, не влияет на еженедельные продажи. Во второй строке рисунка указана цена на топливо. Цена на топливо сильно выросла с января 2011 года по июль 2011 года. После этого цена на топливо колеблется вверх и вниз. Третья строка рисунка содержит индекс потребительских цен (ИПЦ), который неуклонно рос с начала временного ряда. В следующей строке отображается уровень безработицы, который неуклонно снижается с начала временного ряда. Функции ИПЦ и уровня безработицы имеют смысл, потому что, когда у людей больше рабочих мест, у них появляется больше денег для покупки вещей, и, следовательно, ИПЦ растет, потому что чем больше спрос, тем выше цены. Пятая строка рисунка содержит логические данные о том, праздничная это неделя или нет. Последняя строка содержит данные о продажах за неделю. Как видите, еженедельные данные о продажах не увеличиваются автоматически, если неделя является праздничной. Пики недельных продаж приходятся на ноябрь и декабрь. Пик в ноябре, возможно, связан с Черной пятницей, а пик в декабре, возможно, связан с Рождеством. В январе еженедельные продажи самые низкие.
Анализ магазинов представлен на Рисунке 7. График слева показывает, сколько магазинов каждого типа доступно. Магазины типа «А» являются наиболее распространенными, а магазины типа «С» - наименее распространенными. Посередине показан график еженедельных продаж по типам магазинов. В магазине типа «А» самая высокая медиана еженедельных продаж, а в магазине «С» - самая низкая. Это имеет смысл, если взглянуть на правильный график, который показывает коробчатую диаграмму размеров магазинов для каждого типа магазина. Здесь видно, что тип магазина «A» является самым большим, тип магазина «B» - вторым по величине, а тип магазина «C» - наименьшим. Таким образом, размер магазина напрямую зависит от объема продаж за неделю.

Алгоритмы и методы

Для решения Проблемы необходимо применить машинное обучение. Следует применять различные современные методы машинного обучения и использовать наиболее эффективные для окончательного приложения. В окончательном приложении пользователь должен иметь возможность ввести неделю и интересующий магазин, а также получить прогнозируемые еженедельные продажи в качестве вывода. В качестве алгоритмов машинного обучения должны применяться и оцениваться следующие алгоритмы:
1. Линейная регрессия
2. Регрессор дерева решений
3. Регрессор случайного леса
4. Регрессор XGBoost
Окончательная модель должна соответствовать модели еженедельных продаж. Он должен уметь обнаруживать пики во время Черной пятницы и Рождества и низкие значения в январе.

Линейная регрессия

Линейная регрессия - это метод машинного обучения, в котором делается попытка найти линейную функцию, объединяющую все входные функции, чтобы получить целевое значение. Поэтому предполагается, что взаимосвязь между входными характеристиками и целевым значением является линейной.

Регрессор дерева решений

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

Случайный лесной регрессор

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

Регрессор XGBoost

Алгоритм XGBoost Regressor - это оптимизированная версия случайного леса. Он использует методы повышения градиента, чтобы увеличить скорость обучения и производительность прогнозирования.

Контрольный показатель

Модель линейной регрессии используется в качестве эталонной модели. Обучается с использованием библиотеки scikit-learn. Среднеквадратичное значение еженедельных продаж составляет 21469,1, что очень велико и говорит нам о том, что еженедельные продажи не зависят линейно от входных характеристик. На рисунке 8 показаны 100 прогнозов и их истинные названия. Как видим, эталонная модель не может следовать структуре недельных продаж. На рисунке 11 показан код для обучения эталонной модели, ее развертывания и последующего получения результатов оценки.

Выполнение

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

Предварительная обработка данных

Блокнот 2_Create_Train_and_Test_Data.ipynb содержит код для предварительной обработки данных и создания данных для обучения, тестирования и проверки. В качестве первого шага предварительной обработки столбец IsHoliday преобразуется в целое из логического. Во-вторых, тип магазина преобразуется в категориальный столбец. Тип магазина A преобразуется в 0, B в 1 и C в 2. На следующем шаге столбец даты преобразуется в две отдельные функции. Первый - год, второй - неделя года. Следует использовать неделю года, потому что следует прогнозировать еженедельные продажи. После этого необходимо устранить большое количество пропущенных значений для столбцов уценки. Для удаления недостающих значений используется итеративный импьютер из библиотеки sklearn. Итеративный импьютер моделирует каждое пропущенное значение как функцию других характеристик и использует эту оценку для вменения. Функции и доступные значения столбцов уценки используются для обучения регрессионной модели. Затем пропущенные значения прогнозируются с использованием обученной регрессионной модели. Итерационный импьютер обучается только на обучающих данных, чтобы избежать утечки данных в данные проверки и проверки удержания. На рисунке 9 показан код для обучения итеративного импьютера с последующим вменением пропущенных значений.

В конце концов, набор данных для поезда, тестирования и проверки создается и сохраняется в отдельных файлах csv. Размер тестового набора составляет 10% от всех данных, а размер набора для проверки составляет 30% от остальных данных.

Обучение

Блокнот 3_Training_and_Deployment.ipynb содержит весь обучающий код. Я начал с загрузки данных обучения, проверки и тестирования в S3 (рисунок 10).

Затем я обучил эталонную модель. Тестовая модель линейной регрессии создается и обучается с использованием библиотеки sklearn. Код для обучения находится в скрипте train_linear_regression.py в исходной папке, которая также используется как точка входа для объекта оценки sklearn sagemaker в записной книжке. Впоследствии эталонная модель была развернута и оценена. В ходе оценки я вычислил нормализованное RMSE, оценку R-Square и построил график с первыми 100 предсказаниями теста (рисунок 11). Кроме того, я построил первые 100 прогнозов относительно реальных значений, используя библиотеку matplotlib.

После этого я обучил регрессору дерева решений и регрессору случайного леса. Для обоих я использовал библиотеку sklearn, и оба имеют отдельные сценарии обучения в исходной папке в качестве точки входа. Дерево решений и случайный лес имеют много разных гиперпараметров. Чтобы найти наилучшее соответствие, я использовал библиотеку skopt для создания байесовского оптимизатора. Байесовский оптимизатор принимает в качестве входных данных объект оценки sklearn, словарь с именами гиперпараметров в качестве ключа и их диапазоны значений в качестве значений, целое число, указывающее, сколько итераций должно быть выполнено, и количество складок, используемых для перекрестной проверки. На рисунке 12 показан код для поиска оптимального регрессора дерева решений. Я использовал размер кратной перекрестной проверки 5, и байесовский оптимизатор выполнил 7 итераций.

На рисунке 13 показан код для поиска оптимального регрессора случайного леса. Размер свертки перекрестной проверки снова составил 5, и байесовский оптимизатор выполнил 10 итераций. Регрессор случайного леса дополнительно использует все четыре ядра процессора для ускорения обучения.

Для обеих обученных моделей я вычислил нормализованное среднеквадратичное значение и оценку R-квадрата. И в качестве последнего оценщика я обучил регрессор XGBoost. Регрессор XGBoost обучается с использованием уже созданного контейнера от Sagemaker. Опять же, оценщик XGBoost имеет множество гиперпараметров. Чтобы найти лучшие комбинации, я использовал библиотеку «HyperparameterTuner» от Sagemaker. На рисунке 14 показан код для поиска оптимального регрессора XGBoost и его оценки. Я обучил 20 различных оценщиков XGBoost и нашел и развернул наиболее эффективные. После развертывания я снова вычислил нормализованное RMSE и оценку R-Square, а также визуализацию первых 100 тестовых прогнозов.

Результаты

На рисунке 16 показаны первые 100 прогнозов обученного регрессора дерева решений по сравнению с наземными метками истинности. Как видно, регрессор дерева решений уже может следовать модели еженедельных продаж. Рисунок 15 содержит RMSE и оценку R-Square.

На рисунке 17 показаны первые 100 прогнозов обученной модели случайного леса. Случайный лес снова может следовать структуре еженедельных продаж, но регрессор случайного леса имеет немного большее нормализованное RMSE при том же R-квадрате, что и модель дерева решений.

На рисунке 18 показаны первые 100 прогнозов обученной модели XGBoost, у которой были лучшие комбинации гиперпараметров согласно байесовской оптимизации. Модель XGBoost также имеет самый низкий нормализованный RMSE и самый высокий показатель R-Square и, следовательно, является лучшим средством оценки производительности среди всех обученных моделей.

Модель XGBoost имеет более чем в десять раз больший показатель R-Square, чем эталонная модель. Нормализованное RMSE в пять раз меньше RMSE эталонной модели. Оценка R-Square составляет 0,96, что означает, что окончательная модель может представлять 96% дисперсии, указанной в наборе тестовых данных. RMSE по-прежнему составляет 19% стандартного отклонения от недельных продаж. Но диапазон еженедельных продаж также очень велик, с минимальными недельными продажами на уровне -4989 и максимальными недельными продажами на уровне 693099,4 (см. Рисунок 5). Взглянув на рисунок 18, можно увидеть, что окончательная модель изучила базовую структуру и, следовательно, может использоваться в качестве предиктора, но все же необходимо учитывать потенциальные выбросы в рассматриваемом прогнозе.