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

Введение

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

Для этого исследования я выбрал четырнадцать параметров в качестве входных характеристик, таких как код типа посетителя, возрастной диапазон, активный год обращения и т. д. Затем я использовал эти входные функции для изучения контролируемой модели машинного обучения, XGBoost, для прогнозирования общего количества покупок посетителем. . Эта прогностическая модель обеспечивает управление библиотекой и инструмент для принятия решений.

Данные

Данные были взяты из интегрированной библиотечной системы (ILS) DataSF. Данные состоят из исторического использования инвентарных предметов посетителями. Он состоял из более чем 423 тысяч наблюдений 15 переменных. Целевая переменная (Total Checkout) была непрерывной. Четырнадцать предикторов представляли собой смесь непрерывных и категориальных (номинальных и логических) переменных. На рис. 1 ниже показан моментальный снимок данных.

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

Для обработки/предварительной обработки данных я использовал библиотеки pandas и NumPy. Проблемы в наборе данных включали: отсутствующие значения и значения «Нет», пробелы в именах столбцов и неправильные типы данных для некоторых столбцов.

Я изменил имена столбцов, чтобы удалить пробелы. Хотя существует множество способов импутации данных, в этом исследовании я проигнорировал наблюдения с пропущенными значениями. Кроме того, я проигнорировал наблюдения со значением «Нет» для переменной «Активный год обращения». Наконец, я изменил типы данных следующих четырех столбцов с объекта на int: Circulation_Active_Year, Supervisor_District, Outside_of_County, Provided_Email_Address.

Исследовательский анализ данных

Для исследовательского анализа данных я построил график корреляции. Я обнаружил, что большинство предикторов имеют низкую корреляцию. Самая высокая корреляция (0,59) наблюдалась между Total_Renewals и Total_Checkouts. Поскольку корреляция между предикторами была меньше 0,8, методика уменьшения размерности не требовалась.

Затем я построил гистограмму цели. Очевидно, выбросы и распределение цели требовали внимания.

Есть много способов справиться с выбросами. В этом исследовании я игнорировал наблюдения с целевым значением выше 99-го квантиля.

Чтобы улучшить целевое распределение, я применил к цели логарифмическое преобразование. Распределение выглядело лучше после преобразования журнала.

Затем, чтобы использовать логические предикторы в моделях, я закодировал логические столбцы как целые числа (0 и 1). Для категориальных предикторов я использовал однократное кодирование. После предварительной обработки окончательный набор данных (рис. 5) содержал 268372 строки и 165 столбцов.

Из обработанного фрейма данных я создал два фрейма данных — один из предикторов (X), а другой — цель (Y).

Наконец, для проведения контролируемого обучения я разделил кадры данных X и Y на обучающий набор (90%) и тестовый набор (10%).

Методология

Я использовал методы обучения с учителем (XGBoost) для обучения и прогнозирования. Для этого я использовал библиотеку xgboost и ее методы для обучения модели на обучающем наборе данных. Чтобы найти лучшую скорость обучения, я использовал метод поиска по сетке. Наконец, я оценил модель, предсказав целевые значения в тестовом наборе данных и найдя R-квадрат с помощью sklearn.

Результаты

Результат работы модели показан в таблице 1.

На рис. 6 показано фактическое и прогнозируемое значение Total Checkouts по модели XGBoost. Хотя модель пропускает несколько пиков, она является хорошей базовой моделью и неплохо прогнозирует общее количество покупок, совершенных посетителями.

Заключение

В этом исследовании я использовал 14 предикторов (сочетание числовых, номинальных и логических значений), чтобы обучить модель контролируемого машинного обучения XGBoost прогнозировать общее количество покупок посетителями библиотеки. Я использовал метод поиска по сетке, чтобы найти лучшую скорость обучения. Наконец, я оценил модель с помощью R-квадрата и обнаружил, что R-квадрат равен 0,72. Хотя модель пропустила несколько пиков, она является хорошей базовой моделью и неплохо спрогнозировала общее количество покупок, совершенных посетителями.

Дальнейшие шаги

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