- Вопрос или проблема
- Ответ или решение
- 1. Подготовка данных
- a. Структурирование данных
- b. Кодирование категориальных переменных
- 2. Методы анализа
- a. Комплексный анализ с использованием ML
- b. Модели временных рядов
- 3. Показатели и метрики анализа
- 4. Вопросы для анализа и прогноза
- 5. Ресурсы для дальнейшего изучения
- Заключение
Вопрос или проблема
У меня есть ежемесячные снимки (3 года) всех данных контрактов. Они включают следующую информацию:
- Статус контракта [Категориальный]: Предложен, отслеживается, отправлен, выигран, проигран и т.д.
- Этапы контракта [Категориальный]: Поиск, вовлеченность, отслеживание, отправлено и т.д.
- Продолжительность контракта [Дата/Время]: месяцы и годы
- Дата начала тендера [Дата/Время]: Дата (Но это меняется, когда контракты задерживаются)
- Стоимость контракта [Числовой]: Стоимость контракта в местной валюте
- Прогнозирование будущих доходов [Числовой]: Разбивка стоимости валюты дохода на следующие 5 лет (это значение доступно для всех контрактов, независимо от того, выиграны или проиграны)
У меня также есть другая информация о контрактах, такая как идентификатор, название, описание и т.д.
Ответы, которые я пытаюсь получить:
- Общая стоимость контрактов, которые меняют статус из месяца в месяц
- Общая стоимость контрактов, которые меняют этапы из месяца в месяц
- Средняя задержка даты начала контрактов
- Прогнозирование будущих доходов (5 лет) на основе изменения статуса и средней задержки
Проблемы, с которыми я сталкиваюсь с этими данными:
-
Это не временной ряд, это ежемесячный снимок, поэтому я могу либо преобразовать его в ежемесячный временной ряд и накапливать доходы на основе каждого статуса и этапов, либо считать общее количество всех контрактов.
-
Должен ли я накапливать данные по контрактам или оставить их в виде отдельных контрактов? В последнем случае, как мне передать это в любую модель? Тогда это не будет временным рядом.
Основная проблема с поиском правильного подхода:
-
Я не уверен, какие подходы использовать для ответа на очень разные вопросы. Некоторые значения являются категориальными, а некоторые числовыми. Я не уверен, является ли это проблемой прогнозирования или проблемой предсказания ‘изменения события’. Или смесь обоих?
-
Как мне совместить эти очень разные категориальные переменные с числовым значением дохода в любую модель.
Методы, которые я изучал:
-
Я читал о моделях прогнозирования, таких как ARIMA (в основном данные о продажах). Она использует временные ряды для прогнозирования доходов на основе исторических данных. Я не уверен, является ли это действительным в данном случае, потому что у меня есть контракты, которые меняют статус, и я не уверен, как использовать это в модели ARIMA. Или нужно ли это делать. Я также не уверен, есть ли у данных сезонность. Выигрыш или проигрыш контрактов не является сезонным событием.
-
Я также изучал примеры простого экспоненциального сглаживания (SES) и экспоненциального сглаживания Хольта-Уинтерса (HWES) и нашел ту же проблему при расчете средних задержек или прогнозировании будущего дохода. Текущие данные не являются унивариантными.
-
Я посмотрел на следующие ответы: https://stats.stackexchange.com/questions/246151/difference-between-time-series-prediction-vs-point-process-prediction и это заставило меня думать, что, возможно, моя проблема не относится к предсказанию временных рядов.
-
Лучший подход к прогнозированию числового значения на основе временных рядов и категориальных данных?: Это заставило меня подумать, что, возможно, мне стоит рассмотреть RNN и LSTM.
-
Как предсказать непрерывную переменную, когда все ваши независимые переменные категориальны: Или моя проблема похожа на эту.
Извините за длинный пост. Я пытаюсь сделать проблему как можно более ясной. У меня нет идеи, какой будет лучший подход к решению этой проблемы и какие данные подать в модель. Я также потерян в том, как структурировать данные, чтобы максимально эффективно использовать все переменные.
Я был бы благодарен, если вы сможете помочь мне предложить какие-либо хорошие методы или учебные ресурсы, чтобы я мог ответить на вопросы. Спасибо за ваше время!
Если вы хотите использовать нейронные сети, этот пост на Kaggle может помочь: https://www.kaggle.com/c/m5-forecasting-accuracy/discussion/159052
В нем представлен короткий список ресурсов для категориальных вложений и LSTM (как мне кажется).
Если вы думаете, что ваш набор данных имеет периодические закономерности, и вам нужно лишь ответить на ваши вопросы (не запускать модель). Я бы посмотрел на FB Prophet: https://facebook.github.io/prophet/docs/quick_start.html#python-api
Он извлекает периодические компоненты и подгоняет их с помощью синусоидальных и косинусоидальных волн. Вы также можете добавить дополнительные регрессоры, т.е. переменные с одним кодом.
Для прогнозирования временных рядов на основе как числовых, так и категориальных данных, Light GBM доказал свою ценность в конкурсах Kaggle. Победители как конкурса M5, так и конкурса по прогнозированию продаж продуктового магазина Corporación Favorita использовали Light GBM.
Ответ или решение
Для успешного прогнозирования будущего дохода на основе данных, которые вы предоставили, требуется применение различных методов и подходов. Ваши данные содержат как категориальные, так и числовые значения, что требует внимательного подхода. Рассмотрим несколько методов, которые помогут вам в этом процессе.
1. Подготовка данных
a. Структурирование данных
Начните с преобразования данных, чтобы они были годными для анализа. Так как данные представляют собой месячные мгновенные снимки, целесообразно создать временной ряд. Это можно сделать, объединив данные по статусам контрактов и их стадиям, чтобы отразить изменения по месяцам. Возможно, будет полезно добавить столбцы, отражающие изменения статуса от месяца к месяцу.
b. Кодирование категориальных переменных
Для того чтобы использовать категориальные переменные в моделях, вам нужно преобразовать их в числовой формат. Это можно осуществить с помощью методов кодирования, таких как:
- One-Hot Encoding: создаст новые бинарные переменные для каждой категории;
- Label Encoding: присваивает каждой категории уникальный номер.
2. Методы анализа
a. Комплексный анализ с использованием ML
Для прогноза будущего дохода можно рассмотреть использование методов машинного обучения. Вот несколько подходящих алгоритмов:
- LightGBM: данный метод оказался очень эффективным для прогнозирования на конкурсах Kaggle. Он хорошо справляется с данными, содержащими как временные, так и категориальные переменные.
- Random Forest Regression: данный алгоритм может быть полезен для анализа сложных взаимодействий между переменными и даст возможность избежать проблемы переобучения.
- Gradient Boosting: другой мощный метод, который может эффективно работать с разнородными данными.
b. Модели временных рядов
Хотя ваши данные не являются стандартными временными рядами, вы все равно можете использовать методы временных рядов, такие как:
- ARIMA: это будет полезно, если у вас есть достаточно данных по контрактам, изменяющим статус. Можно использовать предобработанные данные для создания временного ряда.
- Facebook Prophet: если ваши данные проявляют периодические закономерности, этот инструмент может помочь учитывать часовые, недельные и другие сезонные эффекты.
3. Показатели и метрики анализа
При анализе и прогнозировании необходимы четкие метрики для оценки результатов. Рассмотрите возможность вычисления следующих показателей:
- Общая стоимость контрактов, меняющих статус и стадию;
- Среднее время задержки начала контрактов;
- Прогноз доходов на 5 лет, основанный на изменениях статуса и средних задержках.
4. Вопросы для анализа и прогноза
Ваши запросы о прогнозах могут быть формализованы в виде следующих вопросов:
- Каковы тенденции изменения статусов контрактов?
- Существуют ли какие-либо статистические зависимости между фазами заключения контрактов и их будущей стоимостью?
- Есть ли очевидные аномалии или задержки в запуске контрактов?
5. Ресурсы для дальнейшего изучения
Вот несколько ресурсов, которые могут помочь вам углубиться в различные методы и подходы:
- Документация LightGBM: LightGBM Documentation
- Статья по Facebook Prophet: Prophet Quick Start
Заключение
Ваши данные требуют комплексного подхода к анализу и прогнозированию. Подготовка и структурирование данных являются первоочередными шагами перед тем, как применять модели. Использование алгоритмов машинного обучения в сочетании с методами временных рядов позволит вам эффективно прогнозировать будущее значение контрактов, учитывая их динамику и изменения. Не забывайте проверять результаты своих моделей на валидационных наборах данных для обеспечения надежности прогнозов.