Никогда в жизни не писал нейронные сети, но встала задача и надо ее решить.
Мне нужно, чтобы нейросеть умела прогнозировать какое кол-во товара и в какой день некий клиент закажет, на основании его прошлых заказов. Т.е., анализировать интервалы между прошлыми заказами и заказываемое кол-во.
Реализовал следующим образом:
Для обучения беру по 10 заказов, сортирую по дате, и 1 следующий как правильный ответ. (в сумме 5400+ таких связок)
Дату привожу к UNIX таймстепму и делю на 10млрд, чтобы получить что-то вроде
0.1526995496
.
Кол-во делю на 10000 (пока не придумал как более правильно нормализовать данные).
На вход подаю массив, где чередуются дата и кол-во по каждому заказу
[0.1526995496, 0.2, 0.1526995637, 0.4, 0.1526995809, 1.0...]
На выходе массив с датой и кол-вом
[0.1536585814, 0.0001]
Активатор у первого слоя ReLu, у выходного Linear.
Оптимизатор Adam, лосс MAE
(пробовал всё подряд)
model = Sequential()
model.add(Dense(units=20, activation=act.relu))
model.add(Dense(units=2, activation=act.linear))
model.compile(optimizer=opt.Adam(), loss=ls.mae, metrics=['accuracy'])
history = model.fit(np_input, np_output, batch_size=1000, epochs=500, validation_split=0.2)
График обучения выдает полнейший бред вроде такого (синяя это history['loss'], желтая accuracy)
Результат тоже не удовлетворительный
Previous orders:
2019-12-06 12:14:27 - 4.0
2019-12-10 11:25:44 - 2.0
2019-12-16 14:24:47 - 4.0
2020-01-03 13:16:28 - 4.0
2020-01-17 13:04:57 - 10.0
2020-03-27 14:25:57 - 2.0
2020-10-30 14:57:39 - 2.0
2020-11-09 15:00:24 - 3.0
2020-11-20 11:30:43 - 2.0
2021-01-06 11:20:15 - 1.0
Answer:
Date: 2020-01-02 14:58:58.516617
Amount: 13.0
Это самый адекватный ответ. Но дата в прошлое ушла, кол-во аномальное какое-то.
Иногда говорит "Закажи -16000 товара в 2851 году".
В общем, вопрос то в чем. Как мне правильно подать на вход сети исторические данные? И вообще всё ли я правильно делаю?