Прогнозирование временных рядов: анализ - PullRequest
1 голос
/ 15 января 2020

Я использую RNN с LSTM для прогнозирования эффективности для единицы оборудования. Учитывая набор данных, я работаю, является чувствительным и поэтому не может быть помещен здесь. Но подобный набор данных доступен здесь: https://www.kaggle.com/nafisur/dataset-for-predictive-maintenance.

PM_train.txt показывает данные от различных датчиков в разное время жизни:

1 1 0.0023 0.0003 100.0 518.67 643.02 1585.29 1398.21 14.62 21.61 553.90 2388.04 9050.17 1.30 47.20 521.72 2388.03 8125.55 8.4052 0.03 392 2388 100.00 38.86 23.3735  
1 2 -0.0027 -0.0003 100.0 518.67 641.71 1588.45 1395.42 14.62 21.61 554.85 2388.01 9054.42 1.30 47.50 522.16 2388.06 8139.62 8.3803 0.03 393 2388 100.00 39.02 23.3916  
1 3 0.0003 0.0001 100.0 518.67 642.46 1586.94 1401.34 14.62 21.61 554.11 2388.05 9056.96 1.30 47.50 521.97 2388.03 8130.10 8.4441 0.03 393 2388 100.00 39.08 23.4166  
1 4 0.0042 0.0000 100.0 518.67 642.44 1584.12 1406.42 14.62 21.61 554.07 2388.03 9045.29 1.30 47.28 521.38 2388.05 8132.90 8.3917 0.03 391 2388 100.00 39.00 23.3737  
1 5 0.0014 0.0000 100.0 518.67 642.51 1587.19 1401.92 14.62 21.61 554.16 2388.01 9044.55 1.30 47.31 522.15 2388.03 8129.54 8.4031 0.03 390 2388 100.00 38.99 23.4130  
1 6 0.0012 0.0003 100.0 518.67 642.11 1579.12 1395.13 14.62 21.61 554.22 2388.00 9050.96 1.30 47.26 521.92 2388.08 8127.46 8.4238 0.03 392 2388 100.00 38.91 23.3467 

Постстройка В этой модели я использую функции для различного оборудования и прогнозирую эффективность (t = 1 месяц, 2, 3, 6, 12… в будущем).

В идеале, когда я прогнозирую эффективность единицы оборудования, это (= эффективность) должно уменьшаться со временем. Но когда я использую свою модель, для примерно 15% населения эффективность сначала увеличивается (при t = 1 месяц), а затем начинает снижаться.

У меня меняется количество параметров, пробовал разные потери функции, скорость обучения, функция активации и т. д. но, кажется, ничего не работает. Что можно сделать? Что может быть не так?

Vanilla RNN/LSTM: (I have tried a lot of parameters on this)
model = Sequential()
model.add(LSTM(units = 12, return_sequences = True, input_shape=(X_train.shape[1], X_train.shape[2])))  
model.add(Dropout(0.15))

model.add(LSTM(units = 6))
model.add(Dropout(0.15))

model.add(Dense(units = 1))

model.compile(optimizer = 'adam', loss = 'mean_squared_error')
model.fit(X_train, Y_train, batch_size = 128, epochs = 100)
...