LSTM с несколькими записями для одного и того же временного штампа

Вопрос или проблема

У меня есть набор данных, в котором есть несколько записей для одних и тех же временных меток, и я хочу использовать LSTM для прогнозирования следующей временной метки, основываясь на предыдущих 5 временных шагах. Из https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/ я понял, как работать с многофакторными временными рядами, и в блоге он изменил форму временного ряда таким образом, чтобы мы могли прогнозировать следующий шаг на основе предыдущих временных шагов. Но в моем случае есть несколько записей для одного и того же временного шага, и когда я делаю изменение формы, это создает неправильные отношения, так как предполагается, что время является последовательным, но на самом деле это один и тот же временной шаг. В этом сценарии как мне следует структурировать мои данные для обучения?

Данные представляют собой набор данных COVID с заголовком ниже:

Точная_Дата_Эпизода, Возрастная_Группа, Пол_Клиента, Информация_О_Приобретении_Случая, Город_Отчета_PHU, Связанный_Спалах, Результат1

2020-03-30, 70 лет, МУЖ. , OB, Стратфорд, Да, Фатально

У меня такая же проблема, но с другими данными, вы нашли решение?

Ответ или решение

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

При работе с временными рядами и использованием рекуррентных нейронных сетей, таких как LSTM (Long Short-Term Memory), важно корректно структурировать входные данные. В вашем случае, когда наблюдаются несколько записей для одного временного штампа, обычные методы подготовки данных могут привести к неправильному восприятию модели зависимости временных рядов, поскольку они предполагают хронологическую последовательность.

1. Понимание структуры данных

Ваш набор данных включает в себя несколько важнейших полей:

  • Accurate_Episode_Date: Временной штамп
  • Age_Group: Возрастная группа
  • Client_Gender: Пол клиента
  • Case_AcquisitionInfo: Информация о получении случая
  • Reporting_PHU_City: Город отчета
  • Outbreak_Related: Отношение к вспышке
  • Outcome1: Исход

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

2. Агрегация данных

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

  • Среднее: Например, средний возраст группы клиентов.
  • Сумму: Суммирование случаев, относящихся к одной категории.
  • Моду или медиану: Для нахождения наиболее частых или центральных значений.

Используйте группировки по временным отметкам, чтобы консолидировать данные. Например:

import pandas as pd

# Чтение данных
data = pd.read_csv('your_data.csv')

# Пример агрегации: получение среднего возраста по дате для каждой категории
aggregated_data = data.groupby(['Accurate_Episode_Date']).agg({
    'Age_Group': 'mean',  # Здесь требуется преобразование к числовому значению
    'Client_Gender': pd.Series.mode,
    'Case_AcquisitionInfo': 'count',  # Количество случаев
    # Добавьте необходимые меры для других полей
}).reset_index()

3. Формирование выборки для LSTM

После выполнения агрегации данных вы можете перейти к формированию входных данных для LSTM. Вам нужно создать последовательности (наборы) временных рядов, используя функцию TimeseriesGenerator. Пример:

import numpy as np
from keras.preprocessing.sequence import TimeseriesGenerator

# Предположим, что 'aggregated_data' содержат нужные столбцы
# Преобразование данных для LSTM
data_values = aggregated_data['Target'].values  # 'Target' - переменная, которую вы хотите прогнозировать
data_values = data_values.reshape(-1, 1)

# Создание генератора временных рядов
n_input = 5  # 5 предыдущих временных этапов
generator = TimeseriesGenerator(data_values, data_values, length=n_input, batch_size=1)

4. Обучение модели LSTM

Следующим шагом будет создание и обучение модели LSTM. Вот пример простейшей архитектуры:

from keras.models import Sequential
from keras.layers import LSTM, Dense

model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_input, 1)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')

# Обучение модели
model.fit(generator, epochs=50)

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...