TF 2.0 LSTM: как использовать для прогнозирования расходов?

#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. Я не знаю, является ли это хорошей практикой?