DevGang
Авторизоваться

Анализ цены биткоина на Python с помощью fbprophet

Предупреждение: эта публикация не является рекомендацией инвестировать или не инвестировать в биткойны, если вы хотите узнать о ней больше, поищите сертифицированного специалиста с опытом работы в этой области, пожалуйста!

Мотивация: я изучал временные ряды и, увидев простоту использования библиотеки Python для анализа временных рядов, fbprophet, я решил применить его к набору данных, через LinkedIn я получил новость о том, что виртуальная валюта биткойн имеет значение 100 тысяч, и это заставило меня подумать, используя fbprophet, какова будет стоимость этой валюты через год?

Биткойн

Это децентрализованная виртуальная валюта, не контролируемая центральным банком, производимая тысячами компьютеров по всему миру, 1 биткойн стоит 98 278,07 реалов (5 декабря 2020 г.).

Как получить значения биткойнов в формате временных рядов?

Чтобы использовать fbprophet, необходим временной ряд, я начал исследовать и нашел API-интерфейс coinbase (платформа для торговли криптовалютой), и, используя HTTP-запрос с параметром даты, можно узнать цену биткойна по отношению к реальной на эту дату.
Чтобы сделать это еще проще, существует библиотека, которая помогает использовать API coinbase в Python:

Я использовал среду Google Colab с включенным графическим процессором (видеокартой)…

Установка библиотеки Coinbase через PIP:

!pip install coinbase

Создайте ключ доступа к API в базе монет, а затем замените xpto123 предоставленными значениями:

api_key =  'xpto123'
api_secret = 'xpto123'

Импортируем библиотеку в Python:

from coinbase.wallet.client import Client
client = Client(api_key, api_secret)

Поскольку я собираюсь использовать даты, я импортировал библиотеку Datetime:

import datetime

Я создал функцию для получения реальной стоимости биткойна в определенный день:

def price_bitcoin_in_day(date_search):
    return float((client.get_spot_price(currency_pair='BTC-BRL', 
      date=date_search)).amount)

Я создал функцию для получения значений биткойнов за диапазон дней:

import pandas as pd
#days = number of days searcheddef
data_bitcoin_price_in_days(days):
  # The first surveyed date is today (December 5, 2020)  date_search = datetime.date.today() 

  #price is the price in reais found.  
price = price_bitcoin_in_day(date_search)  
  #creating the list with the first values
  data = [{'day': date_search, 'price': price}]  
  # informing the number of days to be searched
  for i in range(1, days):    
      print(i)       
      # Previous day's date
      date_search = date_search - datetime.timedelta(days=1)    
      #Researching the price...
      price = price_bitcoin_in_day(date_search)      
      #Added the new values searched and their dates to the list
      data = data + [{'day' : date_search, 'price' : price}]  

#returned the complete list
return data

Поиск за последние 10 лет (4015 дней):

dados = data_bitcoin_price_in_days(4015)

Мне нравится использовать фрейм данных (структура данных библиотеки Pandas), поэтому я превратил список в фрейм данных:

df_dados = pd.DataFrame(dados)

FBprophet

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

FBprophet - это библиотека Python с открытым исходным кодом для анализа временных рядов, поддерживаемая командой разработчиков Facebook.

https://facebook.github.io/prophet/

Установка библиотеки:

!pip install fbprophet

Импорт библиотеки:

import Prophet

Переименовывая столбцы, fbprophet принимает фреймы данных только в этом формате:

df_dados.rename(columns = {'day':'ds', 'price':'y'}, inplace = True)

Обучение модели:

m = Prophet(changepoint_prior_scale=0.15, daily_seasonality=True)
m.fit(df_dados)

Создание дат на следующие 365 дней:

future = m.make_future_dataframe(periods=365)
future.tail()

Прогнозирование стоимости биткойнов на следующие 365 дней:

forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

Отображение в виде графика:

from fbprophet.plot import plot_plotly, plot_components_plotly
plot_plotly(m, forecast)

Цель здесь - использовать FBProphet, полагая, что Биткойн предоставит интересный набор данных.

Используя библиотеку FBProphet, мы смогли получить прогноз на сумму 82 239,37 реалов 5 декабря 2021 года, то есть девальвацию на 16 030,70 реалов за один год.

НО,

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

ПРИМЕЧАНИЕ. Facebook недавно запустил NeuralProphet, библиотеку для анализа временных рядов с использованием нейронных сетей, вдохновленных FBProphet и AR-Net с использованием PyTorch.

https://github.com/ourownstory/neural_prophet

Источник:

#Python #Data Science #Machine Learning
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В подарок 100$ на счет при регистрации

Получить