Как разработать алгоритм для анализа криптовалют
С взрывным ростом популярности криптовалют выросло и количество попыток понять механизм их работы, отличия друг от друга и список инструментов, которые могут помочь в прогнозировании их движения на рынке. Так, многие игроки обращаются к количественному анализу и криптовалютным моделям, представленным в виде Excel-таблиц со множеством вводных данных, как к одному из самых надежных инструментов для оценки и прогнозирования тенденций крипторынка. Однако, по мнению Даниеля Чена, основателя проекта OpenToken и ведущего инженера компании Andreessen Horowitz, данные модели крайне редко отображают действительное положение вещей на рынке.
Проблема с криптовалютными моделями
На создание и обработку данных в криптовалютных таблицах уходят бесчисленные часы и силы. Тем не менее существует несколько причин, по которым ведущие игроки крипторынка не используют подобные модели в собственных оценочных методиках. Одной из них является отсутствие объективного временного критерия о том, что именно пытается доказать данная модель — движение курса криптовалют на неделю, на год или на декаду? Также стоит учитывать, что представленный набор характеристик не всегда может быть прогнозируемым — уверены ли мы, что количество пользователей Telegram у определенной криптовалюты влияет на движение ее цены в будущем? В крипто-пространстве очень легко попасть в так называемый «карго-культ» анализа (термин, используемый для обозначения псевдонауки), когда сложные модели прогноза не проходят тест на объективность при тестировании целей и гипотез, на которых они построены.
Даниель Чен подробно разобрал работу криптовалютных моделей, представленных на рынке сегодня, а также описал критерии, на которые необходимо обращать внимание при создании собственной модели. Более того, для тестирования таких моделей Чен написал простой код, находящийся в открытом доступе.
Работая с цифрами
Для наглядного примера Чен рассмотрел популярную криптовалютную таблицу CRV Crypto Research, в которой представлены данные 51 крупнейшей криптовалюты на крипторынке. Данная таблица является одной из наиболее подробных, поскольку она отслеживает такие критерии криптовалют, как частота использования базы исходного кода (на Github), активность членов сообщества (подписчики в Reddit и Telegram-каналах), листинг на криптобиржах, присутсвие в соцсетях и СМИ (количество постов в твиттере и упоминаний в новостях) и так далее.
Имея такие данные, можно использовать простой код для их чтения и перевода из таблицы CVS в более удобный для работы формат. Таким образом, Чен представл матрицу входных данных и список значений, которые он хотел бы протестировать и найти возможную корреляцию между ними.
Однако, перед тем как начать работу с цифрами, стоит иметь в виду один важный аспект. В приведенной таблице 51 строка и 21 столбец, где содержится достаточно большое количество данных для анализа. Тем не менее, для того чтобы получить по-настоящему полезные результаты, необходимо намного больше вводных данных. К примеру, база данных ImageNet, используемая для обучения компьютерных визуальных алгоритмов, имеет более 14 миллионов изображений.
Главной проблемой в таблице CVS является ее размерность, которая заключается в количестве строк в соотношении к количеству столбцов. Самым оптимальным вариантом была бы таблица с большим количество строк и маленьким количеством столбцов. Например, в Netflix Challenge — открытом соревновании на лучший алгоритм предсказания оценки фильмов — набор данных состоял из 1.4 миллиона строк и трех столбцов (пользователь, фильм, рейтинг).
Чем сложнее модель и чем больше в ней столбцов, тем больше выборки данных нужно ей предоставить (или строк), чтобы получить по-настоящему достоверные результаты. Для чего Чен выработал правило — строк должно быть минимум в десять раз больше, чем столбцов. А к таблицам, которые имеют приблизительно одинаковое количество строк и столбцов, стоит относиться с осторожностью.
В представленном примере 51 строка не мешает, однако, для того чтобы не усложнять объяснение и при этом не терять статистическую значимость, необходимо проверить корреляцию между парами данных, что также называется двумерной линейной регрессией.
Рассмотрим данные
В представленном разделе приведены цифры и графики, полученные в результате регрессии для следующих значений (для того чтобы не разбираться в анализе графиков, можно перейти сразу к выводу в «Какую модель все же стоит использовать» ниже):
Число коммитов и Рыночная капитализация R^2: 0.138249
Число участников и Рыночная капитализация R^2: 0.130249
Число коммитов в месяц и Рыночная капитализация R^2: 0.002144
Число участников в месяц и Рыночная капитализация R^2: 0.091301
Число участников в топовых Telegram-каналах и Рыночная капитализация R^2: 0.159053
Число пользователей Reddit и Рыночная капитализация R^2: 0.806415
Листинг на криптобиржах и Рыночная капитализация R^2: 0.298320
Число в ТОП-5 биржах и Рыночная капитализация R^2: 0.150254
Число хэштегов в твитах (30 дней) и Рыночная капитализация R^2: 0.368655
Число новостных упоминаний (30 дней) и Рыночная капитализация R^2: 0.771270
Число подписчиков в твиттере и Рыночная капитализация R^2: 0.443522
Значения справа — это коэффициенты детерминации или квадрат коэффициента корреляции выборки. Коэффициент детерминации рассматривают, как правило, в качестве основного показателя, отражающего меру качества регрессионной модели, описывающей связь между зависимыми и независимыми переменными модели. Пока вводные данные отвечают определенным заданным характеристикам, мы можем считать, что в строках представлено наиболее вероятное значение корреляции.
Например, в строке «Число коммитов и Рыночная капитализация» R² равно 0.138249, и она будет выглядеть следующим образом:
Наверное, нам это не очень подойдет, так как мы стремимся увидеть следующий график с вводными данными:
Чем ближе значение R² к единице, тем сильнее корреляция. К счастью, в строке «Число пользователей Reddit и Рыночная капитализация» значение R² ближе — 0.81, а в «Число новостных упоминаний (30 дней) и Рыночная капитализация» — 0.77. Рассмотрим первый график к «Число пользователей Reddit и Рыночная капитализация»:
Итак мы видим, что несмотря на то, что значение R² уже ближе к желаемому, график все равно выглядит совсем не так, как нам нужно. Это произошло в связи с тем, что данные пострадали от гетероскедастичности — неоднородности наблюдений, выражающейся в неодинаковой дисперсии случайной ошибки регрессионной модели. Наличие гетероскедастичности может привести к негативным последствиям: оценки уравнения нормальной линейной регрессии остаются несмещенными и состоятельными, но при этом теряется эффективность. Однако, эту проблему можно легко исправить, упорядочив данные согласно логарифмической шкале. Теперь график выглядит более корреляционным:
Число коммитов и Рыночная капитализация R^2: 0.083247
Число участников и Рыночная капитализация R^2: 0.094291
Число коммитов в месяц и Рыночная капитализация R^2: 0.091181
Число участников в месяц и Рыночная капитализация R^2: 0.151921
Число участников в топовых Telegram-каналах и Рыночная капитализация R^2: 0.130186
Число пользователей Reddit и Рыночная капитализация R^2: 0.357688
Листинг на криптобиржах и Рыночная капитализация R^2: 0.303370
Число в ТОП-5 биржах и Рыночная капитализация R^2: 0.395840
Число хэштегов в твитах (30 дней) и Рыночная капитализация R^2: 0.426500
Число новостных упоминаний (30 дней) и Рыночная капитализация R^2: 0.484609
Число подписчиков в твиттере и Рыночная капитализация R^2: 0.353295
Но это повлияло на значение корреляции: так, R² в строке «Число пользователей Reddit и Рыночная капитализация» снизился с 0.81 до 0.36. Однако новые значения — это не обязательно плохо. Чтобы проверить степень этого «не обязательно плохо», можно провести проверку статистических гипотез коэффициентов регрессий. Если кратко, то статистическая гипотеза позволит сравнить вашу модель с параллельной ей моделью. Если в результате проверки становится очевидно, что добавление значения «пользователи Reddit» существенно улучшает модель, то мы можем с уверенностью сказать, что они взаимосвязаны.
Для этого случая нам также необходимо рассмотреть р-значение — величину, используемую при тестировании статистических гипотез. Данная величина получается из F-теста, также называемого критерием Фишера, который показывает, насколько вероятно то, что наши данные были получены случайным путем, а также взаимосвязь между значениями «пользователи Reddit» и «Рыночная капитализация». Таким образом, получается, что если р-значение очень маленькое, то шансов того, что наши данные были получены случайным путем, практически нет, и какая-то взаимосвязь между значениями должна быть.
Большинство академических исследований стремятся найти р-значение меньше 0.05 или 0.01:
Число коммитов и Рыночная капитализация р-значение: 0.074861
Число участников и Рыночная капитализация р-значения: 0.057240
Число коммитов в месяц и Рыночная капитализация р-значения: 0.061724
Число участников в месяц и Рыночная капитализация р-значения: 0.014175
Число участников в топовых Telegram-каналах и Рыночная капитализация р-значения: 0.009292
Число пользователей Reddit и Рыночная капитализация р-значения: 0.000004
Листинг на криптобиржах и Рыночная капитализация р-значения: 0.000028
Число в ТОП-5 биржах и Рыночная капитализация р-значения: 0.000001
Число хэштегов в твитах (30 дней) и Рыночная капитализация р-значения: 0.000000
Число новостных упоминаний (30 дней) и Рыночная капитализация р-значения: 0.000000
Число подписчиков в твиттере и Рыночная капитализация р-значения: 0.000007
Из чего мы можем сделать вывод, что популярность криптовалют может быть связана с ее рыночной капитализацией. А активность разработчиков является чуть менее пригодной. Данные р-значения указывают на общую тенденцию точечных отметок, которые стремятся двигаться вверх и направо. Но что это значит и как это влияет на решение о покупке криптовалют? Стоит покупать криптовалюты, которые находятся вверху справа, а значит, они имеют наибольшее количество пользователей Reddit и рыночную капитализацию? Или стоит вложиться в криптовалюты, которые находятся над уровнем линии тренда, поскольку их рыночная капитализация пропорционально выше на каждого пользователя Reddit?
Мы детально рассмотрели корреляцию — взаимосвязь между двумя значениями. Однако, когда дело касается составления прогнозов, встает вопрос корреляционной зависимости с причинно-следственной связью: ведет ли высокое упоминание в СМИ к высокой рыночной капитализации или же высокая рыночная капитализация влияет на упоминание в новостях?
Для того чтобы не запутаться в логике собственных гипотез, можно провести достаточно быструю проверку. Вместо того, чтобы сравнивать эти факторы с рыночной капитализацией, мы можем сравнить их с изменениями, произошедшими в рыночной капитализации с момента создания таблицы. Запуская код с новыми данными (по состоянию на 13 февраля 2018 года), мы видим, что графики уже выглядят менее показательно и информативно:
Это становится еще более очевидно, если убрать все резко отклоняющиеся значения:
Мы получаем негативную корреляцию! Согласно этому графику, увеличение пользователей Reddit ведет к понижению рыночной капитализации. Причиной тому является, скорее, ввод ошибочных данных, а не их обратная зависимость, о чем можно судить по последнему набору р-значений:
Число коммитов и Рыночная капитализация р-значение: 0.839070
Число участников и Рыночная капитализация р-значения: 0.709478
Число коммитов в месяц и Рыночная капитализация р-значения: 0.227949
Число участников в месяц и Рыночная капитализация р-значения: 0.615143
Число участников в топовых Telegram-каналах и Рыночная капитализация р-значения: 0.019781
Число пользователей Reddit и Рыночная капитализация р-значения: 0.810512
Листинг на криптобиржах и Рыночная капитализация р-значения: 0.311267
Число в ТОП-5 биржах и Рыночная капитализация р-значения: 0.512172
Число хэштегов в твитах (30 дней) и Рыночная капитализация р-значения: 0.930046
Число новостных упоминаний (30 дней) и Рыночная капитализация р-значения: 0.698512
Число подписчиков в твиттере и Рыночная капитализация р-значения: 0.821432
Большинство полученных значений превышают те, что допустимы при статистической значимости, и являются почти полностью случайными. Таким образом, единственный вывод, к которому мы пришли — это то, что нам не удалось сделать предполагаемый прогноз.
Какую модель все же стоит использовать?
Из полученного анализа вводных данных мы можем с уверенностью сказать только одно — таблица CRV не дает достаточных данных для создания по-настоящему надежного прогноза движения цены.
Поэтому для построения собственной криптовалютой модели, предоставляющей надежный прогноз, необходимо начать с формулировки целей и основополагающих гипотез. Убедитесь, что эти факторы можно протестировать, и, что еще более важно, — они поддаются верификации или же наоборот — опровержению. Если все работает, то у вас в распоряжении будет модель, протестированная на ретроспективных данных, которая станет надежным инструментом с прогнозирующей способностью. Если модель не работает, то надо вернуться к начальным шагам и планированию и пересмотреть вводные данные.
Пытаясь зачастую предугадать цену актива, игроки рынка обращаются к автокорреляционной функции, которая рассматривает зависимость взаимосвязи между функцией (сигналом) и ее сдвинутой копией от величины временного сдвига. На рынке существует совокупность инструментов прогнозирования, например, технический анализ, который доказывает такую зависимость, а также обратная ему гипотеза эффективного рынка, согласно которой вся существенная информация немедленно и в полной мере отражается на рыночной курсовой стоимости активов.
Так, на рынке ценных бумаг принято считать, что цены активов следуют случайному процессу, называемому мартингалом в теории случайных процессов, согласно которому наилучшим предсказанием поведения процесса в будущем является его настоящее состояние. Согласно этой точке зрения, цены на рынке акций невозможно предугадать. Однако, это не обязательно должно случиться с рынком криптовалют. Возможно, уже сейчас существуют прогнозируемые сигналы движения курса криптовалют (например, прошлая цена, активность пользователей в соцсетях и так далее), однако, их анализ еще не опубликован.
И итоге можно сделать три важных вывода:
Данные, которые на первый взгляд кажутся важными, скорее всего, играют не столь большую роль.
Легко поддаться самообману и поверить в собственную модель или стратегию. Часто мы ищем повторяющуюся линию поведения там, где ее нет. Чтобы избежать этого, всегда необходимо проводить анализ вводных данных.
Количественный анализ тяжело составить правильно. Поиск корреляции — важный первый шаг. Однако, для прогноза будущей цены необходимо собрать намного больше данных и провести более детальную работу.
В заключении Даниель Чен также предоставил ссылку на написанный им код, благодаря которому можно протестировать различные криптовалютные модели и их вводные данные.