В этой статье мы рассмотрим подробное руководство о том, как использовать Python и LazyPredict, чтобы найти лучшую модель машинного обучения для прогнозирования цены закрытия биткойнов. Мы рассмотрим все, от получения данных с помощью yfinance до оценки моделей и прогнозов. Независимо от того, являетесь ли вы энтузиастом криптовалюты или практиком в области обработки данных, это руководство предоставит вам инструменты, необходимые для начала работы с прогнозированием цен на криптовалюту.

Отказ от ответственности:

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

Шаг 1: Получите данные BTC

Мы будем использовать пакет yfinance для получения данных BTC. Данные поезда будут с 01.11.2017 по 31.12.2022, а тестовые данные будут за весь январь 2023 года.

#Install necessary packages
!pip install yfinance lazypredict
import yfinance as yf

# Retrieve BTC data
ticker = "BTC-USD"
start_date = "2017-11-01"
end_date = "2022-12-31"

btc_data = yf.download(ticker, start=start_date, end=end_date)

# Split data into training and testing sets
train_data = df.loc[:'2022-12-31']
test_data = df.loc['2023-01-01':]

Шаг 2: Предварительная обработка данных

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

import pandas as pd

# Create target variable
train_data['target'] = train_data['Close'].shift(-1)
train_data.dropna(inplace=True)

Далее мы разделим данные на функции (X) и целевые (y) переменные.

# Split training data into input and output variables
X = train_data.drop('target', axis=1)
y = train_data['target']

Шаг 3: Ленивый прогноз

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

from lazypredict.Supervised import LazyRegressor
from sklearn.model_selection import train_test_split

# Split input and output variables into training and validation sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=24)

# Find top three algorithms
reg = LazyRegressor(verbose=0, ignore_warnings=False, custom_metric=None)
models, predictions = reg.fit(X_train, X_test, y_train, y_test)

# Check the Result
models

Это выведет три лучшие модели вместе с их показателями производительности. Мы примем к сведению эти модели для следующего шага.

Шаг 4: Предскажите цены BTC за последние 30 дней

Теперь, когда мы определили три лучшие модели, мы будем использовать их для прогнозирования цен на BTC за последние 30 дней и сравнить их с фактической ценой, показав сравнение графиков.

# Split data into train and test sets
X_train = X[:-30]
X_test = X[-30:]
y_train = y[:-30]

# Predict with top 3 models
from sklearn.linear_model import HuberRegressor
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lars

model1 = HuberRegressor()
model2 = Ridge()
model3 = Lars()

models = [model1, model2, model3]
predictions = []

for model in models:
    model.fit(X_train, y_train)
    preds = model.predict(X_test)
    predictions.append(preds)

# Plot actual and predicted prices
import matplotlib.pyplot as plt

actual_prices = test_data["Close"]
plt.plot(actual_prices.index, actual_prices.values, label="Actual")

for i, preds in enumerate(predictions):
    plt.plot(actual_prices.index, preds, label=f"Model {i+1}")

# Remove year from x-axis labels
import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%m-%d')

plt.gca().xaxis.set_major_formatter(myFmt)

plt.legend()
plt.xlabel("Date")
plt.ylabel("BTC Price (USD)")
plt.title("Actual vs Predicted BTC Prices (January 2023)")
plt.show()

Это отобразит фактические цены BTC вместе с прогнозируемыми ценами из трех лучших моделей.

Шаг 6: Предложения по улучшению модели

Основываясь на сравнении графиков, мы видим, что модели не очень точно предсказывают цены BTC. Есть несколько способов улучшить модель:

  • Разработка функций: мы можем попробовать создать новые функции на основе существующих данных, чтобы помочь модели лучше отражать основные шаблоны.
  • Настройка гиперпараметров: мы можем попробовать настроить гиперпараметры моделей, чтобы повысить их производительность.
  • Методы ансамбля: мы можем попробовать объединить прогнозы нескольких моделей, чтобы получить более точный прогноз.
  • Использование большего количества данных: мы можем попробовать использовать больше данных для обучения моделей, что может помочь им лучше фиксировать основные закономерности.

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

Вы можете найти полную реализацию в моем репозитории GitHub.