Янв. 7, 2018 - Только что провел еще одну ночь, так как я не мог спать из-за некоторых ошибок. Меня убивает Apache Spark, это единственный компонент в моей системе, который по какой-то причине случайно зависает / выходит из строя без каких-либо журналов / ошибок. Я обыскал весь Интернет, встретил несколько человек, которые сообщили об одной и той же проблеме, но не нашел единого решения. Apache Spark не так популярен, поскольку он используется только для обработки и анализа очень больших данных (такими крупными организациями, как eBay,…).

Кроме того, я также играл с Tensorflow (который на данный момент казался слишком сложным), поэтому я переключился на Keras для машинного обучения и создания прогнозов. Я потратил много часов, пытаясь понять Keras, преобразование numpy массивов и т. Д., Но в конце концов взломал код.

В моем случае все сводится к обучению нейронной сети (мозга) путем подачи в нее исторических данных. Итак, когда у вас есть «мозг», вы можете кормить его новыми данными, и он будет предсказывать новый результат. Идея состоит в том, чтобы скормить ему текущую цену и текущий ажиотаж, чтобы он предсказал ажиотаж и цену следующего часа:

Нижний график - мои реальные данные (черный = цена BTC). Я тренировал «мозг», используя его почасовые данные, до тех пор, пока зона, отмеченная красным, не вводилась в мозг для тренировки. Когда этап обучения был завершен, я вставил красную зону, и она воспроизвела ее довольно хорошо, как вы можете видеть на верхней диаграмме (зеленая линия).

В течение следующих нескольких дней я ' Я буду продолжать играть с Керасом и посмотреть, как я могу оптимизировать его, чтобы делать прогнозы выше среднего на ближайшее будущее. Мне также нужно разобраться в этой штуке с Apache Spark. Этим утром я пришел со своей n-й гипотезой о том, что может вызвать его зависание / зависание. Давай попробуем ...

9 января 2018 г. Последние несколько дней я пытался изолировать код в своей настройке Apache Spark. Через несколько часов он просто продолжает вылетать без каких-либо кодов ошибок или подсказок. Я думаю, что это может быть исключение нехватки памяти, какой-то фрагмент кода накапливает память, а сборщик мусора не очищает его. Я также обновился до Spark v2.2.1 (у меня была 2.2.0), и он, похоже, работает быстрее, но все равно вылетает (так что, скорее всего, это связано с чем-то в моем собственном коде).

Помимо вышесказанного, я потратил некоторое время на то, чтобы возиться с частью машинного обучения, чтобы делать прогнозы. Я сделал несколько улучшений, чтобы повысить его точность и мое собственное понимание алгоритма. Вот диаграмма, созданная Keras (фреймворк машинного обучения):

Зеленая линия: реальная цена BTC (в долларах США). Для обучения системы использовался диапазон [0, 59].
Красная линия: прогноз цены BTC ($ USD). Я позволил ему начать прогнозирование с x = 51 (используя данные из зеленой линии). Мы ясно видим, что алгоритм прогнозирования хорошо следует за трендом цены до x = 60, после чего он использует смесь своих собственных прогнозов и некоторых исторических данных, чтобы делать новые прогнозы (= дикие предположения).
Желтая линия: реальный Hype%
Пурпурная линия: предсказание Hype%, здесь она следует за реальной тенденцией Hype до x = 59, с этого момента он делает дикие догадки.

К счастью, мы можем подтвердить / сравнить эти догадки с реальностью:

x = 56 на предыдущем графике - это пик «01 января, 02:00».

Когда мы сравниваем дикие догадки с историческими данными, мы видим, что цена действительно снизилась. Но он снова начал расти намного позже (1 января 11:00) - тогда как наш алгоритм показал его рост намного раньше.

То же самое и с Hype: он действительно вырос, но прогноз показал что он достигнет определенного пика и упадет, но на самом деле был очень большой всплеск, который произошел позже, чем предполагалось.

Мы можем сделать вывод, что краткосрочные прогнозы довольно точны, но долгосрочные одни (например, более 3 часов) - нет. В любом случае, я думаю, что это уже серьезный прогресс !!

Я надеюсь, что очень скоро исправлю эту ошибку Apache Spark, чтобы я мог начать собирать больше данных, а затем расширить их до многих других монет.

11 января 2018 г. Я всю ночь до утра играл с машинным обучением Keras. Раньше наша система учитывала только два параметра: исторический ажиотаж и цена. Теперь я скорректировал код, чтобы использовать «неограниченное» количество новых параметров на лету. Поэтому я добавил количество положительных и отрицательных настроений - теперь у него есть 4 параметра, по которым можно делать прогнозы. А поскольку у меня было более 18 часов согласованных данных (благодаря Spark), у меня есть несколько хороших графиков, которые я могу вам показать:

(изображение с более высоким разрешением: https://i.imgur.com/PxLvUBZ.png)
*) это диаграмма с 10-минутным интервалом (x-метки на изображении неверны) - каждая точка ровно 10 минут друг от друга. Дата и время по оси X начинаются точно с: 2018–01–10 09:00 (часовой пояс EST).

Слегка блеклые линии (сероватые и оранжевые) представляют соответственно сверху вниз: Цена BTC, социальный ажиотаж, положительный / отрицательный тренд. Два последних на самом деле не имеют значения, поскольку шкала Y слишком велика, и я не собираюсь прогнозировать положительные / отрицательные настроения в любом случае. Но меня интересует ажиотаж и цена. Я нарисовал зеленую рамку, чтобы указать, какие области были созданы / предсказаны машиной. И, как видите, они представляют собой теоретическое расширение реальных данных. Система сообщает нам, что ажиотаж будет продолжать колебаться вверх и вниз, в то время как цена будет неуклонно расти.

Однако этот прогноз является чисто случайным, и я выбрал его, потому что хотел бы увидеть рост цен. . На самом деле есть четыре основных параметра, с которыми мне нужно поиграть, и каждый из них может иметь совершенно разные результаты в предсказании. Это: количество скрытых нейронов, размер пакета, количество эпох и размер окна. Моя следующая задача - изучить и научиться находить оптимальные параметры, тогда я смогу делать более реалистичные / точные прогнозы.

12 января 2018 г. Вчера я потратил несколько часов, играя с параметрами нейронной сети (RNN). В первую очередь я проверял различия в результатах в размерах окон и количестве функций / параметров (например, социальных сигналов, настроений и т. Д.), Чтобы предсказать цену. Взгляните на эти графики…

*) Моя RNN может делать прогнозы на основе последовательностей, например учитывая данные за прошлые t: 3 часа, он затем прогнозирует t + 1
*) «Размер окна» означает, сколько временных интервалов (часов) нужно оглядываться назад (= размер последовательности).

Размер окна = 1 и один параметр (только цена):

Размер окна = 1 и использование 2 функций (упоминания в соцсетях и цена)

Из двух приведенных выше графиков мы видим, что прогнозируемые значения очень плавные. Таким образом, использование размера окна 1 не является хорошей моделью прогнозирования. Причина в том, что каждый прогноз имеет определенную ошибку, и в каждом прогнозе мы используем предыдущий прогноз для вычисления следующего, поэтому ошибка растет экспоненциально (ошибка за ошибкой).

Давайте использовать размер окна из 20 и только одна особенность (цена):

Это выглядит более реалистично, не так ли.
И теперь с двумя функциями: цена и упоминания в социальных сетях (осталось 20 окон):

Это выглядит даже лучше. Давайте попробуем использовать 4 функции: цена, упоминания в социальных сетях, количество отрицательных настроений, количество положительных настроений (окно = 20):

* на этом графике есть дополнительная известная точка данных (в то время как на всех вышеприведенных графиках нет), это моя ошибка, потому что система всегда использует самые свежие данные. Но это никак не влияет на то, что будет дальше.

А как эти прогнозы соотносятся с реальностью? Через несколько часов я узнал реальную цену, чтобы сравнить ее с прогнозами.
Вот график реальной цены:

(Я скрыл все остальные графики, потому что были пробелы из-за сбоев Spark).

Теперь я использовал немного Photoshop, чтобы поместить реальные данные поверх прогнозов. . Вот диаграмма с двумя характеристиками:

А вот тот, который имеет 4 функции:

Мы видим, что прогнозы с использованием двух характеристик лучше (по форме) напоминают реальную цену, однако амплитуда ее пиков ниже реальных данных.
Тем не менее, это хорошие новости, у нее есть два интересных региона, это имеет пик, совпадающий с пиком реальных данных, а затем красивое падение, похожее на падение реальных данных.

Я думал, что график с 4 характеристиками будет даже лучшим представлением реальных данных, но не совсем. Это были случайные взлеты и падения, которые вообще не следовали за ценой. Возможно, мне нужно настроить некоторые другие параметры, чтобы он лучше предсказывал. Когда я писал этот пост, я получил свой пакет:

Думаю, из этой книги я узнаю много полезного (надеюсь).

Спасибо за внимание!
- Илья Неволин