Анализ цены биткоина на 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.