#python #tensorflow #keras #lstm
#python #тензорный поток #keras #lstm
Вопрос:
Я хочу использовать LSTM в TensorFlow 2.0 для прогнозирования всех расходов клиентов в следующем месяце (возможно, это не обычный вариант использования LSTM). Мои данные содержат данные о ежемесячных расходах клиентов 10 тыс.
Формат:
Customer ID, time(yyyymm), target(spending), age, gender, all other features.....
customer 1, 201912, 100
customer 1, 201911, 200
...
customer 1, 201402, 300
customer 1, 201401, 100
customer 2, 201912, 0
....
customer 2, 201401, 50
customer 3, 201912, 100
....
customer 10k, 201401
Он имеет 4 измерения для ввода LSTM: (10k customers * 60 months samples * 3 timesteps (quarterly) * 100 features)
.
Обычно LSTM принимает 3 измерения: (nb_samples, timesteps, features)
Моя проблема:
Наверное, я все еще не уверен, каков правильный подход к моим данным.Я поместил свой начальный код ниже, но я не думаю, что некоторые из моих недооценок верны:
lstm_input = tf.keras.layers.Input(shape=(60,3,100), name='lstm_input')
x = tf.keras.layers.LSTM(64, name='lstm_0',return_sequences=True)(lstm_input)
x = tf.keras.layers.GlobalMaxPooling1D()(x)
....
Что я должен изменить, чтобы мои данные соответствовали модели LSTM или RNN?
Обновить
Я думаю, может быть, мне нужно сделать ввод, как показано ниже? Или я должен даже использовать RNN / LSTM для его моделирования?
[ Month1 Month2 ... Month60
customer 1: [[fe1(1,1)...fe100(1,1)], [fe1(1,2)...fe100(1,2)],... ,[fe1(1,60)...fe100(1,60)]]
customer 2: [[fe1(2,1)...fe100(2,1)], [fe1(2,2)...fe100(2,2)],... ,[fe1(2,60)...fe100(2,60)]]
....
customer N: [[fe1(n,1)...fe100(n,1)], [fe1(n,2)...fe100(n,2)],... ,[fe1(n,60)...fe100(n,60)]]
]
Ответ №1:
Возможно, это наблюдение помогает. Для каждого клиента получите общие расходы за каждый месяц. Таким образом, у вас есть постоянное количество временных шагов (60 месяцев) и 10 тыс. выборок. Я полагаю, вы знаете все термины, описанные здесь.
Я также не понимаю * 3 (квартальную) часть, данные отбираются в триместрах?
Комментарии:
1. Хорошо, я думаю, моя первоначальная мысль была неправильной. Изначально я рассматриваю * 3 (ежеквартально) как временной шаг. Теперь я чувствую, что должен удалить это и сделать окончательный входной массив как 3d (10k, 60 месяцев, 100 функций) и передать его в LSTM. Я не знаю, является ли это хорошей практикой?