Вопрос или проблема
Я использую Python, и у меня есть пример набора данных следующего вида:
columns = ['product_id', 'market_value2015', 'market_value2016',
'market_value2017', 'market_value2018', 'market_value2019',
'market_value2020', 'market_value2021', 'retired'],
где market_value2015...2021
— это числа с плавающей запятой
, а retired — это логическое значение
.
Цель состоит в том, чтобы обучить нейронную сеть, которая предсказывает, будет ли продукт снят с производства или нет.
Изначально моя идея заключалась в том, чтобы использовать переменные с плавающей запятой с 2015 по 2020 год для предсказания снятия с производства в 2021 году, рассматривая эти переменные как временные ряды, но я застрял, так как никогда не сталкивался с таким набором данных раньше. Поэтому я не знаю, как заставить нейронную сеть понять, что переменные с плавающей запятой имеют концепцию времени с 2015 по 2020 год, так как они всегда находятся на одном уровне. Надеюсь, это понятно.
С точки зрения модели концепции “времени” не существует.
То, что вы пытаетесь сделать, — это использовать вектор признаков $x_t$, для $t$, который варьируется от 2015 до 2020 года (почему не 2021 год тоже?).
Это не проблема прогнозирования временных рядов, а скорее классификация (бинарная) временных рядов. Каждый пример — это временной ряд с результатом снятия с производства или нет.
Как насчет того, чтобы попробовать оформить эксперимент следующим образом?
‘product_id’ | ‘Год’ | ‘market_value’ | ‘retired’
01222 | 2015 | 20.0 | Да
01222 | 2016 | 19.0 | Да
01222 | 2017 | 18.0 | Да
01222 | 2018 | 17.0 | Да
. . . .
. . . .
01222 | 2021 | 12.0 | Да
В качестве альтернативы, снятый с производства продукт должен испытывать ухудшение в течение лет. Таким образом, предполагаем линейный паттерн ухудшения с 2015 по 2021 год:
‘product_id’ | наклон | y-срез | ‘retired’
01222 | 2 | 0 | Да
Кроме того, эти данные — это “панельные данные”, короткие временные ряды для уникального productid, а не обычная проблема временных рядов. Поэтому не вводите колонку product id в нейронную сеть или ML, используя такое представление. Вы не хотите, чтобы каждое изделие рассматривалось отдельно! Вместо этого замените его на целочисленное значение, если это возможно, возможно, на некоторые характеристики продукта.
Наконец, вероятно, RNN не будут наиболее полезными для этих коротких панельных данных, возможно, CNN (они могут захватывать продольные паттерны) или, возможно, LSTNets.
Ответ или решение
Как обрабатывать данный временной ряд?
Работа с временными рядами может быть сложной задачей, особенно когда форматы данных, как в вашем случае, не совсем типичны. Вы используете набор данных, состоящий из значений рыночной стоимости товаров за несколько лет, с целью предсказать, будет ли товар снят с производства в следующем году. Давайте детально разберем, как можно подходить к этой задаче, используя методы машинного обучения на Python.
1. Структурирование данных: из широкого формата в длинный
Ваши исходные данные представляют собой таблицу, где годы представлены в виде отдельных столбцов. Это создаёт ограничение, так как модели, основанные на машинном обучении, не распознают временные зависимости из сформированных столбцов. Чтобы предотвратить это, мы можем преобразовать данные в длинный формат, где каждая запись будет представлять собой уникальную комбинацию product_id
, Year
, market_value
и retired
. Пример формата:
| product_id | Year | market_value | retired |
|------------|------|--------------|---------|
| 01222 | 2015 | 20.0 | Yes |
| 01222 | 2016 | 19.0 | Yes |
| 01222 | 2017 | 18.0 | Yes |
| 01222 | 2018 | 17.0 | Yes |
| 01222 | 2019 | 15.0 | No |
| 01222 | 2021 | 12.0 | Yes |
2. Преобразование данных для модели
В преобразованном формате мы можем использовать Year
как временную переменную, а показатели рыночной стоимости — в качестве признаков для предсказания. Важно, что целевой столбец retired
будет давать возможность классифицировать товары как "снятые" или "неспособные к снятию".
3. Выбор модели
Для данной задачи целесообразно использовать модели, которые могут учитывать временные зависимости в ваших данных. Рассмотрим несколько подходящих архитектур:
-
Сверточные нейронные сети (CNN): Они показывают хорошие результаты при работе с временными рядами, так как могут извлекать длинные зависимости из данных.
-
Рекуррентные нейронные сети (RNN): Хотя они обычно подходят для более протяженных последовательностей, их эффективность может снижаться на коротких временных рядах, как в вашем случае.
-
LSTM Networks: Если вы хотите рассмотреть рецидив-контекст, LSTM может быть полезным, но применимо к вашим небольшим временным рядам — это может быть неправильно.
Для вашей задачи имеет смысл начать с CNN, так как их способность к извлечению паттернов в данных поможет создать более качественную модель.
4. Нормализация и предобработка данных
Перед подачей данных в модель важно выполнить нормализацию: масштабируйте значения рыночной стоимости, чтобы они находились в одном диапазоне. Это облегчит обучение модели и улучшит ее производительность. Используйте, например, StandardScaler
или MinMaxScaler
из библиотеки sklearn
.
5. Обучение модели
После обработки данных и выбора архитектуры можно приступать к обучению модели. Используйте кросс-валидацию для обеспечения надежности модели и избежания переобучения. Рассмотрите возможность использования различных метрик для оценки модели, например, F1-score, точность, полнота и ROC-AUC.
Заключение
Работа с временными рядами требует внимательного построения и обработки данных. Преобразование в длинный формат и использование подходящих архитектур машинного обучения помогут вам достичь необходимого результата в предсказании снятия товаров с производства. Эта структура данных откроет новые горизонты для понимания и применения временных паттернов в ваших задачах.
Если у вас возникнут дополнительные вопросы или потребуется помощь в дальнейшем, не стесняйтесь обращаться!