В этой статье мы рассмотрим подробное руководство о том, как использовать 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.