Использование машинного обучения на реальных данных.

Вступление

Криптовалюты в представлении не нуждаются. То, что когда-то было зарезервировано для сообществ ботаников на форумах онлайн-чата, теперь почти стало мейнстримом. С другой стороны, ICO менее известны.

Первоначальное предложение монет, обычно называемое ICO или продажей токенов, представляет собой средство сбора средств, при котором токены в недавно выпущенной криптовалюте обмениваются среди общественности на другие криптовалюты, такие как Биткойн или Эфириум.

Они предназначены для финансирования проектов криптовалюты на ранних стадиях, однако это довольно рискованные инвестиции, поскольку более 10% денег, собранных в ходе ICO, были потеряны или взломаны и только 10% выпущенных токенов ICO используются после ICO. в реальных экосистемах токенов, а остальные просто торгуются.

До недавнего времени в ICO было очень мало регулирования, и рынок процветал, а финансирование ICO быстро росло. Как видно ниже, это особенно характерно для конца 2017 и начала 2018 года. С тех пор этот рост быстро замедлился, так как весь рынок криптовалют стал довольно медвежьим.

Непредсказуемость ICO и криптовалют в целом создает интересную и сложную проблему - можем ли мы моделировать такое поведение и даже предсказывать его?

Более конкретно:

Можем ли мы использовать машинное обучение для прогнозирования успеха / цены ICO?

Давайте разберемся.

Методология

  1. Выберите входы и выходы.
  2. Соберите и объедините данные.
  3. Подготовьте данные.
  4. Изучите и попытайтесь понять данные.
  5. Выберите модель машинного обучения.
  6. Измерьте производительность модели.
  7. Сохраните модель.
  8. Используйте модель, чтобы делать прогнозы.

1. Выбор входов и выходов

Входы

Выбор правильных входов и выходов (в случае машинного обучения с учителем) имеет решающее значение для успеха алгоритмов машинного обучения. Должна быть какая-то корреляция между входными данными и тем, что вы пытаетесь предсказать-результат. Лучший способ сделать это - попытаться получить некоторые знания в предметной области. Я провел небольшое исследование различных аспектов ICO, чтобы понять, что может повлиять на их будущую стоимость.

Основными предложенными факторами ICO, влияющими на их эффективность, были следующие:

  • Качество команды разработчиков - лучшая команда, лучшее качество продукта ICO.
  • Популярность в социальных сетях, например количество подписчиков в Twitter - больше известности у ICO, тем больше шансов на получение финансирования.
  • Факторы, касающиеся конкретно ICO: цена, общий объем предложения, рыночная капитализация…
  • Факторы, относящиеся к рынку в период запуска ICO - был ли рынок криптовалюты успешным в то время, когда было запущено ICO?

Затем я создал список функций, которые, по моему мнению, могут повлиять на ценность ICO, и проверил, могу ли я собрать эти данные из любых источников, и создал окончательный список входов.

К сожалению, может быть сложно собрать определенные данные численно - например, измерить качество команды разработчиков, которая работала над ICO - вы измеряете многолетний опыт? Это действительный показатель качества?

Кроме того, довольно сложно найти данные по другим показателям, таким как популярность ICO на момент его запуска. Например, трудно получить исторические данные Twitter, даже используя Wayback Machine, который не индексирует каждую страницу, что затрудняет получение количества подписчиков Twitter при запуске ICO.

Окончательный список используемых функций:

  • Цена в долларах.
  • Цена в BTC.
  • Общий объем предложения.
  • Рыночная капитализация - количество токенов, которые можно приобрести во время продажи токенов.
  • Доступный запас
  • Снято в долларах.
  • Цена Ethereum при запуске.
  • Цена биткойнов при запуске.
  • Месяц запуска ICO.
  • Дата запуска ICO - например, 8-е число месяца.
  • Страна, в которой было запущено ICO.
  • Продолжительность ICO в днях.

Выходы

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

Окончательный результат:

Цена ICO через шесть месяцев.

Примеры некоторых данных, собранных в ходе ICO

Полный набор данных доступен здесь.

2. Сбор и агрегирование данных.

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

Использовался спокойный API, написанный на C # в соответствии с базовой структурой dotnet. Этот API объединяет данные с разных сайтов и сохраняет их в базе данных Mongo.

Некоторые данные, такие как страна, из которой было запущено ICO, приходилось собирать вручную, поскольку они не всегда были доступны из определенного источника, и поэтому приходилось использовать несколько веб-сайтов. Данные были собраны по 2 885 ICO.

3. Подготовка данных

После того, как данные были собраны и сохранены в базе данных Mongo, их нужно было преобразовать в пригодный для использования набор данных. Все данные, собранные из различных источников, были агрегированы с использованием представлений базы данных.

Как уже упоминалось, данные были собраны по 2 885 ICO, но эти данные были скудными, и поэтому требовалась подготовка данных.

После очистки данных у нас появилась информация о 189 ICO. Наконец, это было дополнительно отфильтровано, чтобы включить только данные об ICO, которые существуют более шести месяцев, и в итоге мы получили 109 ICO в нашем наборе данных.

Проблемы, возникшие при подготовке данных:

  • Нечистые данные

Обнаружены недопустимые значения для дат начала и окончания ICO, продолжительности ICO и месяца ICO, они были устранены путем ручной корректировки этих полей.

  • Отсутствующие данные

Обычный подход к обработке отсутствующих данных часто заключается в использовании среднего или медианного значения. Однако из-за редкости данных (менее 10% данных содержали большинство обязательных полей) этот подход не применялся.

Вместо этого были выбраны данные с большинством обязательных полей, а затем недостающие значения, такие как страна, в которой было запущено ICO, были вручную собраны с различных веб-сайтов.

  • Противоречивые данные

Некоторые данные были противоречивыми, например, у веб-сайтов были разные даты начала и окончания для ICO или страны, в которой он был запущен. Это было обработано путем проверки нескольких источников и взятия значений, которые были согласованы.

  • Категориальные данные

Одно горячее кодирование было применено к полям категориальных данных - ICO
Дата, месяц запуска ICO и страна ICO.

Рабочий процесс для этапов сбора данных и подготовки

4. Изучение и попытка понять данные.

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

Цена ICO в USD / BTC при запуске была тесно связана с будущей ценой ICO через шесть месяцев (очевидно!), В то время как другие исходные данные не были тесно связаны с выходом.

Кроме того, было важно убедиться, что распределение данных ICO является репрезентативным для текущего рынка, чтобы иметь модель, которая хорошо обобщается. Это было достигнуто, и собранные данные коррелируют со статистикой, относящейся к распределению ICO по странам.

5. Выбор модели машинного обучения

Риджевая регрессия

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

Это означает, что наша регрессионная модель подвержена переобучению и мультиколлинеарности.

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

Чтобы этого избежать, мы применяем регуляризацию. В нашем случае мы применяем регрессию гребня (L2-регуляризацию), которая штрафует очень большие веса. Подробнее о Ридж-регрессии можно прочитать здесь.

Формула регрессии гребня:

Нейронная сеть

Мы также использовали нейронную сеть для сравнения результатов с результатами, полученными с помощью регрессионной модели.

Для нейронной сети мы использовали функцию активации tanh, а для решателей мы использовали Решатель Адама, а также Решатель градиентного спуска.

6. Измерение производительности модели.

Использовались два показателя производительности - RSquared (R²) и Среднеквадратичная ошибка (rMSE).

измеряет процент отклонения, который может объяснить модель. Высокий показатель R² обычно хорошо, но не всегда, так как это может означать, что ваша модель чрезмерно соответствует данным. Подробнее про R² можно прочитать здесь.

rMSE, измеряет корень из средней квадратичной ошибки, достигаемой нашей моделью (ошибка - разница между значениями, предсказанными нашей моделью, и фактическими значениями).

Результаты

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

На графиках показан прогнозируемый результат против измеренного результата. Это отображает корреляцию между тем, что было предсказано, и тем, что было измерено. Значения, близкие к пунктирной линии, указывают на лучшую корреляцию.

Модель линейной регрессии получила оценку rMSE 0,86 и оценку R² 0,62.

Модель нейронной сети получила оценку rMSE 0,58 и оценку R² 0,73.

7. Сохранение модели.

Когда у нас есть модель, которой мы довольны, мы должны сохранить модель, чтобы мы могли повторно использовать ее для будущих прогнозов.

Я использовал Joblib, вспомогательный класс Python, который является частью пакета SciPy и предоставляет утилиты для конвейерных операций. Это упрощает сохранение и загрузку моделей.

8. Использование модели для прогнозов.

После того, как у вас есть сохраненная модель, вы можете загрузить эту модель и делать прогнозы без повторного обучения модели.

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

Заключение и последние мысли

Машинное обучение в реальном мире во многом зависит от ваших данных. Часто вы тратите больше времени на очистку, подготовку и агрегирование данных, чем на работу с моделью.

В этой статье нам удалось создать модель, которая может достаточно хорошо прогнозировать стоимость ICO. Мы также показали общие шаги, которым можно следовать, чтобы применить машинное обучение к реальным проблемам.

Спасибо, что прочитали эту статью, дайте мне знать, если у вас есть какие-либо мысли или комментарии. :)

Со мной можно связаться в Твиттере и или здесь.

Исходный код

Весь исходный код доступен в dockerized формате. Модель машинного обучения также содержит ссылку на Google Colab.