Анализ временных рядов цены биткойнов в Python с помощью fbprophet ?!
Анализирует цену биткойнов в Python с помощью fbprophet?
Предупреждение: эта публикация не является рекомендацией инвестировать или не инвестировать в биткойны. Если вы хотите узнать об этом больше, поищите сертифицированного специалиста с опытом работы в этой области!
Мотивация: я изучал временные ряды и, увидев простоту использования библиотеки Python для анализа временных рядов, fbprophet, я решил применить его к набору данных, через LinkedIn я получил новость о том, что виртуальная валюта биткойн имеет значение 100 тысяч, и это заставило меня подумать, используя fbprophet, какова будет стоимость этой валюты через год?
Биткойн?
Это децентрализованная виртуальная валюта, не контролируемая центральным банком, производимая тысячами компьютеров по всему миру, 1 биткойн стоит 98 278,07 реалов (5 декабря 2020 г.).
Как получить значения биткойнов в формате временных рядов?
Чтобы использовать fbprophet, нужен временной ряд, я начал исследовать и нашел API Coinbase (платформа для торговли криптовалютой) и использование HTTP-запроса с помощью параметра даты можно узнать цену биткойна по отношению к реальной на эту дату.
Чтобы сделать это еще проще, существует библиотека, которая помогает использовать Coinbase API в 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 - это процедура для прогнозирования данных временных рядов на основе аддитивной модели, в которой нелинейные тенденции корректируются с учетом годовой, еженедельной и ежедневной сезонности в дополнение к эффектам праздников. Лучше всего работает с временными рядами с сильными сезонными эффектами и несколькими сезонами исторических данных. Пророк устойчив к отсутствующим данным и изменениям в тенденциях и обычно хорошо справляется с выбросами. ”
#FBprophet - это библиотека Python с открытым исходным кодом для анализа временных рядов, поддерживаемая командой разработчиков Facebook.
Установка библиотеки:
!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, мы смогли получить 5 декабря 2021 года сумму в 82 239,37 реалов, то есть девальвацию. в размере 16 030,70 реалов в год.
НО,
Модель не смогла предсказать недавний максимум биткойна, и неопределенность значений видна в конце прогнозируемого года, что делает этот прогноз ненадежным.
Лично я не думаю, что этот ценовой прогноз полезен при рассмотрении такого рынка, который может вмешаться, но будет интересно проследить за ним и посмотреть, как и могут ли алгоритмы Facebook что-то предсказать.
ПРИМЕЧАНИЕ. Facebook недавно запустил NeuralProphet, библиотеку для анализа временных рядов с использованием нейронных сетей, вдохновленных FBProphet и AR-Net с использованием PyTorch.
# Я думаю, что это совсем недавно, с учетом изменений и доработок, которые будут использоваться…
Использованная литература:
# Спасибо за чтение! :)