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

Ассалямуалейкум Вр. Вб.

Привет, ребята, добро пожаловать обратно в мою среду!!!

На этот раз я сделаю свою вторую статью о методах машинного обучения с использованием алгоритмов модели Linear Regression, Random Forest и XG Boost для прогнозирования продаж. Мы будем работать с одним из известных наборов данных под названием Store Item Demand and Forecasting Challenge. Если вы не знаете об этом, ознакомьтесь со статьей ниже!!!!

Введение в прогнозирование продаж

Зачем прогнозировать продажи?

Прогнозирование продаж является важным аспектом бизнес-планирования и управления, поскольку оно позволяет компаниям прогнозировать будущий спрос, эффективно распределять ресурсы и минимизировать затраты. Точные прогнозы продаж могут привести к увеличению доходов, повышению удовлетворенности клиентов и принятию обоснованных решений. Методы машинного обучения (ML) все чаще используются для улучшения прогнозирования продаж, поскольку они могут анализировать огромные объемы данных и выявлять закономерности, которые традиционные статистические методы могут не заметить. Модели алгоритма машинного обучения, используемые в этом тесте, — это линейная регрессия, случайный лес и XG Boost для алгоритмов прогнозирования с настройкой гиперпараметра с использованием параметров num_boost_round и Early_stopping_rounds для получения наилучшего гиперпараметра. В этой статье я покажу вам, как создать пошаговую модель машинного обучения. Я затрону следующие темы:

  • Сбор данных
  • Подготовка данных
  • Выбор модели
  • Обучение модели
  • Оценка модели
  • Настройка гиперпараметров
  • Развертывание модели
  • Предсказание модели
  • Заключение

Основы машинного обучения

Машинное обучение — это разновидность искусственного интеллекта, которая позволяет компьютерам учиться и принимать решения без явного программирования. Проще говоря, машинное обучение — это использование алгоритмов, которые позволяют компьютеру учиться на данных. Эти алгоритмы позволяют компьютеру получать входные данные, а затем использовать статистический анализ для определения выходных данных. Машинное обучение позволяет компьютеру выбирать собственные выходные данные без явного программирования. Чем больше данных машина должна обработать, тем точнее она сможет предсказать правильный результат.

Интенсивное использование статистического анализа и отсутствие зависимости от явного программирования — вот что отличает машинное обучение от других типов программирования. Машинное обучение уникально еще и потому, что оно позволяет компьютерам улучшать собственные функциональные возможности.

Благодаря машинному обучению машины могут использовать данные, которые вы создаете, взаимодействуя с ними, чтобы понять вас. Затем они могут использовать свое понимание вас, чтобы предсказать ваше поведение. Компьютер может использовать это для создания предложений для вас (как в случае с нашим примером Netflix). Он также может поднять тревогу, если вы отклонитесь от того, что машина ожидает от вас, как в нашем примере с кредитной картой. Существует три основных типа машинного обучения:

Контролируемое обучение

Алгоритм обучается на размеченном наборе данных, где предоставляются пары ввода-вывода. Цель состоит в том, чтобы изучить сопоставление входных и выходных данных, которое затем можно использовать для прогнозирования новых, невидимых данных.

Обучение без учителя

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

Обучение с подкреплением

Алгоритмы учатся, взаимодействуя с окружающей средой и получая обратную связь в виде вознаграждений или штрафов. Цель состоит в том, чтобы изучить оптимальную политику, которая максимизирует совокупное вознаграждение с течением времени.

Библиотеки Python для машинного обучения

Существует множество библиотек Python для реализации моделей машинного обучения. Некоторые популярные библиотеки включают в себя:

Scikit-learn

Scikit-learn — это библиотека с открытым исходным кодом, которая предоставляет простые и эффективные инструменты для интеллектуального анализа и анализа данных. Он включает в себя различные алгоритмы машинного обучения, такие как классификация, регрессия, кластеризация и уменьшение размерности.

TensorFlow

TensorFlow — это библиотека машинного обучения с открытым исходным кодом, разработанная Google. Он предназначен для глубокого обучения и может использоваться для различных задач, таких как распознавание изображений, обработка естественного языка и обучение с подкреплением.

Керас

Keras — это высокоуровневый API нейронных сетей, написанный на Python и способный работать поверх TensorFlow, Microsoft Cognitive Toolkit или Theano. Он ориентирован на удобство использования, модульность и расширяемость.

Настройка гиперпараметров

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

Различные типы гиперпараметров в XGBoost

В XGBoost есть два основных типа гиперпараметров: специфичные для дерева и специфичные для задачи обучения. Специфичные для дерева гиперпараметры управляют построением и сложностью деревьев решений:

  • max_depth : максимальная глубина дерева. Более глубокие деревья могут фиксировать более сложные закономерности в данных, но также могут привести к переоснащению.
  • min_child_weight : минимальная сумма веса экземпляра (гессен), необходимая для дочернего элемента. Это можно использовать для управления сложностью дерева решений, предотвращая создание слишком маленьких листьев.
  • subsample : процент строк, используемых для построения каждого дерева. Уменьшение этого значения может предотвратить переоснащение за счет обучения на меньшем подмножестве данных.
  • colsample_bytree : процент столбцов, используемых для построения каждого дерева. Уменьшение этого значения может предотвратить переоснащение путем обучения подмножеству функций.

Гиперпараметры для конкретных задач обучения контролируют общее поведение модели и процесс обучения:

  • эта (также известная как скорость обучения): уменьшение размера шага, используемое в обновлениях для предотвращения переобучения. Более низкие значения делают модель более надежной за счет меньших шагов.
  • гамма: минимальное снижение потерь, необходимое для создания дальнейшего раздела на листовом узле дерева. Более высокие значения увеличивают регуляризацию.
  • лямбда: член регуляризации L2 по весам. Более высокие значения увеличивают регуляризацию.
  • альфа: член регуляризации L1 по весам. Более высокие значения увеличивают регуляризацию.

Этапы создания модели прогнозирования продаж

Сбор данных

В этом руководстве вы узнаете, как прогнозировать продажи с помощью машинного обучения и обучения с подкреплением. Для обучения моделей машинного обучения мы будем использовать алгоритмы Linear Regression, Random Forest Regressor и XGBoost Regressor. Однако мы будем использовать рекуррентную нейронную сеть на основе LSTM для построения модели обучения с подкреплением. Наконец, мы оценим и сравним производительность всех моделей на тестовых данных, используя различные показатели, включая среднеквадратичную ошибку, среднюю абсолютную ошибку и оценку R2. Для построения моделей мы будем использовать данные прогнозирования спроса на товары в магазинах 10 розничных магазинов, которые доступны на Kaggle. Этот набор данных содержит около 913 000 записей в обучающем наборе данных, каждая из которых отражает количество товаров, продаваемых в конкретном магазине ежедневно с 2013 по 2017 год включительно. Затем, вот набор данных, который содержит:

  • date: Дата продажи данных. Никаких праздничных эффектов или закрытия магазинов.
  • магазин: идентификатор магазина
  • предмет: идентификатор предмета
  • продажи: количество товаров, проданных в определенном магазине в определенную дату.

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

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

Давайте сначала импортируем все библиотеки на основе Python, необходимые для чтения/обработки данных и для построения моделей машинного обучения, а также рекуррентной нейронной сети на основе LSTM:

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from xgboost import XGBRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

Загрузите набор данных с сайта Kaggle и поместите его в домашнюю директорию проекта. Теперь вы можете прочитать набор данных, используя функцию Pandas read_csv:

store_sales = pd.read_csv('store_sale.csv')
store_sales.head(10)

Во-первых, давайте проверим, есть ли в наборе данных нулевые значения:

store_sales.info()

Вот вывод:

Итак, у нас есть 913000 строк данных без значений NULL ни в одном из столбцов. Поскольку мы будем иметь дело с общей продажей товаров во всех магазинах, нам нужно игнорировать столбцы, представляющие идентификатор магазина и идентификатор товара:

store_sales = store_sales.drop(['store','item'], axis=1)

Столбец «дата» в наборе данных имеет тип данных «объект». Итак, нам нужно преобразовать его в тип данных DateTime, чтобы его можно было использовать для дальнейших вычислений:

store_sales['date'] = pd.to_datetime(store_sales['date'])

Вместо того, чтобы предсказывать продажи на следующий день, мы будем обучать модели прогнозировать продажи в следующем месяце. Итак, нам нужно преобразовать нашу дату в период «Месяц», а затем просуммировать количество товаров, проданных за каждый месяц:

store_sales['date'] = store_sales['date'].dt.to_period('M')
monthly_sales = store_sales.groupby('date').sum().reset_index()

Чтобы вернуться от типа «Период» к типу «Дата и время», нам нужно преобразовать результирующий столбец «дата» в тип данных с отметкой времени:

monthly_sales['date'] = monthly_sales['date'].dt.to_timestamp()
monthly_sales.head(10)

Вот вывод:

Теперь мы также можем визуализировать ежемесячные продажи товаров:

plt.figure(figsize=(15,5))
plt.plot(monthly_sales['date'], monthly_sales['sales'])
plt.xlabel('Date')
plt.xlabel('Sales')
plt.title("Monthly Customer Sales")
plt.show()

Вот вывод:

Поскольку наши данные демонстрируют тенденцию к увеличению с течением времени, нам необходимо сделать эти данные стационарными, чтобы улучшить фазу обучения моделей обучения. Мы можем просто вызвать diff для столбцов «продажи», чтобы сделать наши данные о продажах канцелярскими:

monthly_sales['sales_diff'] = monthly_sales['sales'].diff()
monthly_sales = monthly_sales.dropna()
monthly_sales.head(10)

Вот вывод:

plt.figure(figsize=(15,5))
plt.plot(monthly_sales['date'], monthly_sales['sales_diff'])
plt.xlabel('Date')
plt.xlabel('Sales')
plt.title("Monthly Customer Sales Diff")
plt.show()

Вот вывод:

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

Для этого руководства мы сохраним количество месяцев ретроспективного анализа равным 12, т. е. данные о продажах за предыдущие 12 месяцев будут использоваться для прогнозирования продаж в следующем 13-м месяце.

Во-первых, нам нужно удалить столбцы «дата» и «продажа» в наборе данных, поскольку мы будем иметь дело только со стационарными данными о продажах для обучения нашей модели машинного обучения, а также модели обучения с подкреплением:

supverised_data = monthly_sales.drop(['date','sales'], axis=1)

Теперь нам нужно подготовить контролируемые данные, чтобы данные о продажах за предыдущие 12 месяцев рекламировались как входные функции, а данные о продажах за 13 месяцев использовались в качестве выходных данных для моделей контролируемого обучения:

for i in range(1,13):
    col_name = 'month_' + str(i)
    supverised_data[col_name] = supverised_data['sales_diff'].shift(i)
supverised_data = supverised_data.dropna().reset_index(drop=True)
supverised_data.head(10)

Вот вывод:

Теперь разделите эти данные на обучающие и тестовые данные:

train_data = supverised_data[:-12]
test_data = supverised_data[-12:]
print('Train Data Shape:', train_data.shape)
print('Test Data Shape:', test_data.shape)

Вот вывод:

Следующим шагом является масштабирование значений функций, чтобы ограничить их диапазоном (-1,1) с помощью MinMaxScaler():

scaler = MinMaxScaler(feature_range=(-1,1))
scaler.fit(train_data)

Вот вывод:

train_data = scaler.transform(train_data)
test_data = scaler.transform(test_data)

В контролируемом DataFrame первый столбец соответствует выходным данным, а остальные столбцы действуют как входные функции:

X_train, y_train = train_data[:,1:], train_data[:,0:1]
X_test, y_test = test_data[:,1:], test_data[:,0:1]
y_train = y_train.ravel()
y_test = y_test.ravel()
print('X_train Shape:', X_train.shape)
print('y_train Shape:', y_train.shape)
print('X_test Shape:', X_test.shape)
print('y_test Shape:', y_test.shape)

Вот вывод:

На последнем этапе предварительной обработки данных мы создадим кадр данных прогноза, чтобы объединить прогнозируемые цены продажи всех обученных алгоритмов:

sales_dates = monthly_sales['date'][-12:].reset_index(drop=True)
predict_df = pd.DataFrame(sales_dates)
predict_df

Вот вывод:

Нам также необходимо извлечь фактические ежемесячные значения продаж за последние 13 месяцев, поскольку они соответствуют набору тестовых данных. Эти значения позже будут использоваться для нахождения прогнозируемых цен продажи из прогнозируемой разницы продаж с помощью обученных моделей:

act_sales = monthly_sales['sales'][-13:].to_list()

Теперь мы закончили основную часть обработки данных и подготовки их для использования в моделях. Далее нам просто нужно обучить алгоритмы на данных обучения и оценить их на данных тестирования.

Итак, приступим к самой интересной части…

Выбор модели, обучение и прогнозирование

Прогнозируйте продажи с помощью линейной регрессии

Линейная регрессия пытается найти линейную связь между набором входных переменных и выходной переменной. Веса, связанные с входными переменными, обновляются на этапе обучения, чтобы прогнозируемый результат хорошо соответствовал желаемому результату. Чтобы обучить линейную регрессию, мы можем просто вызвать ее с помощью scikit-learn и передать данные обучения. Более того, мы можем использовать функцию «предсказания» модели линейной регрессии, чтобы получить прогнозируемые результаты с использованием тестовых данных:

linreg_model = LinearRegression()
linreg_model.fit(X_train, y_train)
linreg_pred = linreg_model.predict(X_test)

Чтобы преобразовать предсказанные значения обратно в их исходный масштаб, нам нужно вызвать функцию «inverser_transform» MinMaxScaler. Для этого нам нужно создать матрицу тестового набора, содержащую все входные характеристики тестовых данных и прогнозируемый результат вместо реального вывода:

linreg_pred = linreg_pred.reshape(-1,1)
linreg_pred_test_set = np.concatenate([linreg_pred,X_test], axis=1)
linreg_pred_test_set = scaler.inverse_transform(linreg_pred_test_set)

После того, как мы восстановили масштаб прогнозируемого вывода для разницы продаж, нам нужно рассчитать прогнозируемые значения продаж на основе значений разницы и добавить их к прогнозируемому фрейму данных, который мы создали ранее:

result_list = []
for index in range(0, len(linreg_pred_test_set)):
    result_list.append(linreg_pred_test_set[index][0] + act_sales[index])
linreg_pred_series = pd.Series(result_list,name='linreg_pred')
predict_df = predict_df.merge(linreg_pred_series, left_index=True, right_index=True)

Поскольку мы рассчитали прогнозируемые значения продаж для тестовых данных, теперь мы можем оценить различные показатели для обученной модели линейной регрессии, сравнив прогнозируемые значения продаж с фактическими значениями продаж:

linreg_rmse = np.sqrt(mean_squared_error(predict_df['linreg_pred'], monthly_sales['sales'][-12:]))
linreg_mae = mean_absolute_error(predict_df['linreg_pred'], monthly_sales['sales'][-12:])
linreg_r2 = r2_score(predict_df['linreg_pred'], monthly_sales['sales'][-12:])
print('Linear Regression RMSE: ', linreg_rmse)
print('Linear Regression MAE: ', linreg_mae)
print('Linear Regression R2 Score: ', linreg_r2)

Вот вывод:

Модель выглядит довольно хорошо в прогнозировании стоимости продаж. Давайте визуализируем прогнозы по сравнению с фактическими значениями:

plt.figure(figsize=(15,7))
plt.plot(monthly_sales['date'], monthly_sales['sales'])
plt.plot(predict_df['date'], predict_df['linreg_pred'])
plt.title("Customer Sales Forecast using Linear Regression")
plt.xlabel("Date")
plt.ylabel("Sales")
plt.legend(["Original Sales", "Predicted Sales"])
plt.show()

Вот вывод:

Прогнозируйте продажи с помощью регрессора случайного леса

Случайный лес — это ансамбль деревьев решений, в котором конечное выходное значение определяется средним значением выходных данных всех деревьев решений, составляющих модель случайного леса. Мы можем указать количество деревьев решений, используя «n_estimators», и максимальную глубину для каждого дерева решений, используя «max_depth». После того, как мы указали параметры случайного леса, мы можем подогнать модель к обучающим данным и спрогнозировать значения разницы продаж на выходе:

rf_model = RandomForestRegressor(n_estimators=100, max_depth=20)
rf_model.fit(X_train, y_train)
rf_pred = rf_model.predict(X_test)

Теперь нам нужно вернуть исходную шкалу прогнозируемых значений продаж, используя функцию «inverse_transform» функции MinMaxScaler():

rf_pred = rf_pred.reshape(-1,1)
rf_pred_test_set = np.concatenate([rf_pred,X_test], axis=1)
rf_pred_test_set = scaler.inverse_transform(rf_pred_test_set)

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

result_list = []
for index in range(0, len(rf_pred_test_set)):
    result_list.append(rf_pred_test_set[index][0] + act_sales[index])
rf_pred_series = pd.Series(result_list, name='rf_pred')
predict_df = predict_df.merge(rf_pred_series, left_index=True, right_index=True)

Теперь мы можем оценить метрики модели, сравнив прогнозируемую сумму продажи с фактической стоимостью продажи:

rf_rmse = np.sqrt(mean_squared_error(predict_df['rf_pred'], monthly_sales['sales'][-12:]))
rf_mae = mean_absolute_error(predict_df['rf_pred'], monthly_sales['sales'][-12:])
rf_r2 = r2_score(predict_df['rf_pred'], monthly_sales['sales'][-12:])
print('Random Forest RMSE: ', rf_rmse)
print('Random Forest MAE: ', rf_mae)
print('Random Forest R2 Score: ', rf_r2)

Вот вывод:

Чтобы визуализировать прогнозируемые значения продаж по сравнению с фактическими продажами товаров, мы можем построить фактические значения продаж и прогнозируемые суммы продаж для тестовых данных следующим образом:

plt.figure(figsize=(15,7))
plt.plot(monthly_sales['date'], monthly_sales['sales'])
plt.plot(predict_df['date'], predict_df['rf_pred'])
plt.title("Customer Sales Forecast using Random Forest")
plt.xlabel("Date")
plt.ylabel("Sales")
plt.legend(["Original Sales", "Predicted Sales"])
plt.show()

Вот вывод:

Прогноз продаж с использованием регрессора XGBoost

Алгоритм XG Boost — это алгоритм повышения градиента, в котором эффекты одного дерева решений используются для указания параметров обучения следующего дерева решений, если только последнее дерево решений не генерирует окончательное выходное значение. Окончательное выходное значение на самом деле является совокупным значением всех деревьев решений, включенных в регрессор XGBoost. Мы можем указать количество деревьев решений, используя «n_estimators», и скорость обучения каждого дерева решений, используя «learning_rate»:

xgb_model = XGBRegressor(n_estimators=100, learning_rate=0.2, objective='reg:squarederror')
xgb_model.fit(X_train, y_train)
xgb_pred = xgb_model.predict(X_test)

Когда у нас есть прогнозы разницы продаж, нам нужно преобразовать эти прогнозы обратно в их первоначальный масштаб:

xgb_pred = xgb_pred.reshape(-1,1)
xgb_pred_test_set = np.concatenate([xgb_pred,X_test], axis=1)
xgb_pred_test_set = scaler.inverse_transform(xgb_pred_test_set)

Теперь последний шаг — преобразовать немасштабированные прогнозы разницы продаж в прогнозы продаж товаров и добавить результат в прогнозируемый фрейм данных:

result_list = []
for index in range(0, len(xgb_pred_test_set)):
    result_list.append(xgb_pred_test_set[index][0] + act_sales[index])
xgb_pred_series = pd.Series(result_list, name='xgb_pred')
predict_df = predict_df.merge(xgb_pred_series, left_index=True, right_index=True)

Мы можем оценить производительность регрессора XGB на тестовом наборе данных, используя различные показатели:

xgb_rmse = np.sqrt(mean_squared_error(predict_df['xgb_pred'], monthly_sales['sales'][-12:]))
xgb_mae = mean_absolute_error(predict_df['xgb_pred'], monthly_sales['sales'][-12:])
xgb_r2 = r2_score(predict_df['xgb_pred'], monthly_sales['sales'][-12:])
print('XG Boost RMSE: ', xgb_rmse)
print('XG Boost MAE: ', xgb_mae)
print('XG Boost R2 Score: ', xgb_r2)

Вот вывод:

Давайте также визуализируем, как прогнозируемые продажи соотносятся с фактическими продажами за последние 12 месяцев:

plt.figure(figsize=(15,7))
plt.plot(monthly_sales['date'], monthly_sales['sales'])
plt.plot(predict_df['date'], predict_df['xgb_pred'])
plt.title("Customer Sales Forecast using XG Boost")
plt.xlabel("Date")
plt.ylabel("Sales")
plt.legend(["Original Sales", "Predicted Sales"])
plt.show()

Вот вывод:

Оценка и развертывание модели

Сравнение прогнозов продаж с использованием алгоритмов машинного обучения

Поскольку мы предсказали продажи товаров, обучив четыре разные модели, давайте сравним производительность всех моделей с точки зрения среднеквадратичной ошибки, средней абсолютной ошибки и оценки R2:

linreg_stats = [linreg_rmse, linreg_mae, linreg_r2]
rf_stats = [rf_rmse, rf_mae, rf_r2]
xgb_stats = [xgb_rmse, xgb_mae, xgb_r2]
plt.figure(figsize=(15,7))
plt.plot(linreg_stats)
plt.plot(rf_stats)
plt.plot(xgb_stats)
plt.title("Model Comparison between Linear Regression, Random Forest, and XG Boost")
plt.xticks([0,1,2], labels=['RMSE','MAE','R2 Score'])
plt.legend(["Linear Regression", "Random Forest", "XG Boost"])
plt.show()

Вот вывод:

Судя по сравнительным кривым для трех показателей, XG Boost в целом работает лучше всего, за ним следует линейная регрессия. Random Forest немного отличается от других моделей, но его производительность можно настроить с помощью оптимизации гиперпараметров.

Настройка гиперпараметров XGBoost

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

Когда модель создается, она использует гиперпараметры по умолчанию для обучения модели. Чтобы установить гиперпараметры, параметры num_boost_round и Early_stopping_rounds используются для определения гиперпараметров, потому что по результатам оценки модели параметры num_boost_round и Early_stopping_rounds оказались лучшими.

import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
params = {
    # Parameters that we are going to tune.
    'max_depth':6,
    'min_child_weight': 1,
    'eta':.3,
    'subsample': 1,
    'colsample_bytree': 1,
    # Other parameters
    'objective':'reg:linear',
}
params['eval_metric'] = "mae"
num_boost_round = 999
model = xgb.train(
    params,
    dtrain,
    num_boost_round=num_boost_round,
    evals=[(dtest, "Test")],
    early_stopping_rounds=10
)
print("Best MAE: {:.2f} with {} rounds".format(
                 model.best_score,
                 model.best_iteration+1))

Вот вывод:

Как видите, мы остановились до достижения максимального количества повышающих раундов, потому что после 39-го дерева добавление дополнительных раундов не привело к улучшению MAE на тестовом наборе данных. Это MAE модели с параметрами по умолчанию и оптимальным количеством раундов повышения на тестовом наборе данных. Как видите, мы уже превзошли базовый уровень.

Заключение

В этом руководстве мы научили линейную регрессию, случайный лес и XG Boost прогнозировать количество товаров, проданных за следующий месяц, после ввода данных о продажах за предыдущие 12 месяцев. Обученные модели оценивались с использованием среднеквадратичной ошибки, средней абсолютной ошибки и оценки R2 между прогнозируемыми значениями продаж и фактическими значениями продаж в тестовом наборе данных.

Все модели смогли предсказать продажи клиентов со средней среднеквадратичной ошибкой около 17 000, средней абсолютной ошибкой около 13 500 и показателем R2 около 0,99. Все модели были построены в качестве проверки концепции для прогнозирования прогнозов продаж, и никакая оптимизация для повышения их эффективности не выполнялась. Этот учебник показал, что мы можем использовать алгоритмы машинного обучения и обучения с подкреплением для прогнозирования прогнозов продаж, которые могут быть действительно полезны для соответствующей настройки их бюджетов. Создание расширенной модели машинного обучения для прогнозирования продаж в Python включает несколько ключевых шагов, включая сбор данных, подготовку данных, выбор модели, обучение модели и оценку модели. Внимательно следуя этим шагам и используя соответствующие библиотеки Python, вы сможете разработать точную и эффективную модель прогнозирования продаж, которая поможет вашему бизнесу принимать обоснованные решения и достигать поставленных целей.

Спасибо ребята. Это все о прогнозировании продаж с использованием машинного обучения.
Извините, если есть неправильные слова и много ошибок, надеюсь, это будет полезно для всех нас. Берегите себя и будьте здоровы, ребята!!

Следите за новостями в следующей статье ❤❤

Вассаламуалейкум Вр. Вб.

Использованная литература :

[1] https://betterprogramming.pub/an-introduction-to-machine-learning-a4a6506c4bc7

[2] https://medium.com/@rithpansanga/optimizing-xgboost-a-guide-to-hyperparameter-tuning-77b6e48e289d

[3] https://python.plainenglish.io/how-to-create-a-machine-learning-model-in-python-for-sales-prediction-23e19098069

[4] https://www.kaggle.com/competitions/demand-forecasting-kernels-only/data?select=train.csv