Вопрос или проблема
У меня есть временной ряд данных с более чем одной записью за одну дату. Количество записей в одну дату не одинаково.
У меня есть 3 входных признака: фраза, стоимость и вес. Моя цель – предсказать ‘Стоимость’. Я использовал Keras texts_to_sequences для работы с текстовым входом в колонке ‘фраза’.
У меня есть следующие вопросы:
- как включить колонку Фраза в модель LSTM
- как обработать несколько записей за одну дату
- какая будет форма входных данных
- как мне структурировать модель, чтобы 1-й слой был слоем Embedding, 2-й – Dense и так далее.
Вот пример данных:
Вот обработанные данные:
Пожалуйста, помогите мне.
- Ваши фразы очень короткие, вам будет достаточно кодирования “мешка слов” вместо последовательности.
2-3. Если вы хотите прогнозировать общую стоимость за день, вы можете просто суммировать все признаки, включая BoW, за дату, а затем сделать предсказание временного ряда на полученных данных.
- Попробуйте просто LSTM, предсказывающий следующую дату на основе последовательности прошлых дат.
Ответ или решение
Вопрос: Использование LSTM с встраиванием слов и множественными записями за один день
Введение
Работа с временными рядами, имеющими несколько записей за один день, требует тщательного подхода к обработке и моделированию данных. В вашем случае необходимо учитывать три ключевых признака: phrase
, cost
и weight
, с целью предсказания cost
.
В данной статье я дам рекомендации по включению столбца phrase
в модель LSTM, расскажу, как обработать множественные записи за один день, опишу форму входных данных и предложу структуру модели.
1. Включение столбца phrase
в модель LSTM
Для начала, первым шагом является преобразование текстовых данных в числовой формат, так как нейронные сети требуют численные данные. Использование функции texts_to_sequences
из Keras позволяет эффективно преобразовать текст в последовательность целых чисел.
После этого целесообразно применить слой встраивания (Embedding Layer) для преобразования индексов слов в более низкоразмерные векторные представления. Это улучшает представление текстовых данных, добавляя контекст к словам.
Пример кода для предварительной обработки текста:
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
tokenizer = Tokenizer()
tokenizer.fit_on_texts(phrases) # phrases - ваш столбец с фразами
sequences = tokenizer.texts_to_sequences(phrases)
max_sequence_length = max(len(seq) for seq in sequences)
padded_sequences = pad_sequences(sequences, maxlen=max_sequence_length)
2. Работа с множественными записями за один день
Для обработки нескольких записей с одной и той же датой, можно применить агрегацию данных. Это например может быть сумма или среднее значение затрат и веса. Кроме того, вы можете объединить встраивания фраз, используя подход "мешка слов" (Bag of Words), или представление TF-IDF (Term Frequency-Inverse Document Frequency), если текстовая информация является слишком короткой.
Пример кода для агрегации данных:
import pandas as pd
aggregated_data = data.groupby('date').agg({
'cost': 'sum',
'weight': 'mean',
'phrase': ' '.join
}).reset_index()
3. Формат входных данных
Форма входных данных будет определяться выбранным подходом к обработке текстовых данных. Если вы используете встраивание для фраз, форма ввода будет (число_документов, max_sequence_length)
, где число_документов
– это количество записей, подаваемых в модель.
- Для признаков
cost
иweight
вы можете использовать дополнительно другие входные данные, если потребуется, например, в сочетании с LSTM.
4. Структура модели
Структура вашей модели может быть простой, но эффективной, включающей слой встраивания, LSTM слой и полносвязный слой. Вот один из примеров:
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense
model = Sequential()
model.add(Embedding(input_dim=num_words, output_dim=embedding_dim, input_length=max_sequence_length))
model.add(LSTM(100))
model.add(Dense(1, activation='linear')) # Если предсказываем стоимость
model.compile(loss='mean_squared_error', optimizer='adam')
Заключение
Обработка временных рядов с несколькими записями в один и тот же день требует продуманной схемы предобработки и агрегации данных. Использование LSTM с встраиванием для текстов может значительно повысить качество предсказаний при правильной настройке модели. Не забывайте тестировать различные гиперпараметры и подходы для достижения наилучших результатов.