Keras时间序列:建议在LSTM中包含静态和动态变量

时间:2018-09-24 07:21:01

标签: python keras time-series lstm forecasting

我正在研究与银行相关的用例,需要预测客户的储蓄帐户余额。我既有过去12个月的时间相关数据,也有静态数据。

与时间相关的数据,例如每月的储蓄帐户余额,定期存款余额,共同基金余额,已完成的贷方总金额,已完成的借方总金额等。

静态数据包括年龄,性别,地区,职业,婚姻状况等。

我正在尝试使用LSTM预测未来3个月的储蓄帐户余额,但均方根值会变差。请在下面找到我当前正在使用的LSTM体系结构以及python代码:Network Architecture

# Model Development
main_input = Input(shape=(X_train_dynamic.shape[1], X_train_dynamic.shape[2]))
encoded1 = LSTM(10,return_sequences=True,activation='tanh')(main_input)
encoded = LSTM(10,activation='tanh')(encoded1)
auxiliary_input = Input(shape=(X_train_static.shape[1],))
output_auxiliary = Dense(10, activation='tanh')(auxiliary_input)
x = concatenate([encoded, output_auxiliary])
decoded = RepeatVector(y_train.shape[1])(x)
#decoded = RepeatVector(y_train.shape[1])(encoded)
main_output = LSTM(1, return_sequences=True,activation='tanh')(decoded)   # return_sequences=True gives Many to Many relationship
model = Model(inputs=[main_input,auxiliary_input], outputs=[main_output])
#model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output])
model.compile(optimizer='adam', loss='mean_squared_error')
history = model.fit([X_train_dynamic, X_train_static], [y_train],
                validation_data=([X_test_dynamic, X_test_static], y_test), 
                epochs=50, batch_size=128)

对于这种架构,我没有获得良好的结果,如果在此之后有一定的成功机会,我愿意尝试新事物。我无法共享确切的数据集,但很乐意提供其他可能有帮助的东西。

1 个答案:

答案 0 :(得分:1)

如果在测试/验证数据上只能得到较差的结果,那么在为各层添加退出层或正则化参数时值得。但是,如果问题本身在于训练数据,则可以应用一些减少偏差的技术。