Как стать автором
Обновить

Прогнозируем курс EURUSD используя фундаментальные факторы

Уровень сложностиПростой

Я провел небольшое исследование о влиянии уровня безработицы, уровня инфляции и процентной ставки на обменный курс EURUSD. Это было довольно простое упражнение.

Данные

Прежде всего я подготовил данные. Это невероятно маленький набор данных (годовые данные с 2009 по 2017 год), к которому никто не должен относиться серьезно, но я думаю, что он достаточен для демонстрационных целей. В основном, я находил данные на Kaggle, а затем без каких-либо статистических тестов просто брал разницы первого порядка, вычитая текущее значение из предыдущего (насколько я помню, это нужно делать, чтобы сделать временной ряд стационарным).

eu_inf и us_inf — уровень инфляции, eu_unem и us _unem — уровень безработицы, а eu_ir и us_ir — процентные ставки ЕЦБ и ФРС соответственно.

+------------+--------+--------+---------+---------+-------+-------+----------------+
|    date    | eu_inf | us_inf | eu_unem | us_unem | eu_ir | us_ir |     eurusd     |
+------------+--------+--------+---------+---------+-------+-------+----------------+
| 01.01.2009 |   -2.7 |   -5.2 |    2.06 |    3.47 |  -1.5 | -0.04 |  0.03471052647 |
| 01.01.2010 |    1.1 |    3.4 |    0.53 |    0.38 |     0 |  0.06 |  -0.1025825739 |
| 01.01.2011 |      1 |    1.3 |    0.04 |   -0.68 |     0 | -0.11 | -0.03451800346 |
| 01.01.2012 |   -0.5 |   -1.7 |    1.18 |   -0.88 | -0.75 |  0.09 |  0.02716350555 |
| 01.01.2013 |   -1.1 |   -0.9 |    0.64 |    -0.7 |  -0.2 | -0.07 |  0.05823683739 |
| 01.01.2014 |   -0.9 |      0 |   -0.33 |    -1.2 |     0 |  0.03 |  -0.1648008823 |
| 01.01.2015 |   -0.5 |   -2.1 |   -0.76 |   -0.89 | -0.05 |  0.12 |  -0.1228066683 |
| 01.01.2016 |    0.1 |    1.3 |   -0.83 |   -0.41 |     0 |   0.3 | -0.04139769077 |
| 01.01.2017 |    1.5 |    1.2 |   -0.96 |   -0.51 |     0 |  0.12 | 0.006424665451 |
+------------+--------+--------+---------+---------+-------+-------+----------------+

Код

После очистки данных и выравнивания их по дате я сохранил их в Excel и загрузил через pandas, на всякий случай удалил NaN, чтобы точно не скопировать какие-нибудь пустые ячейки.

X — это все наши факторы — инфляция, процентная ставка, безработица, Y — обменный курс. Теперь нам нужно разделить эти данные на обучающую и тестовую выборку. Я выбрал Random Forest Regression, которая, вроде бы, лучше подходит для прогнозирования наборов временных рядов, и оценил модель.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error
import matplotlib.pyplot as plt

# Step 1: Load the data
data = pd.read_excel('eur_usd_data_3.xlsx', parse_dates=['date'])

# Step 3: Preprocessing
data = data.dropna()  # Drop rows with missing values
data['eurusd'] = data['eurusd'].shift(-1)  # Predict next day's rate
data = data.dropna()  # Drop rows again after shifting

# Step 4: Feature and Target
X = data.drop(columns=['date', 'eurusd'])
y = data['eurusd']

# Step 5: Split into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Step 6: Train the model
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# Step 7: Evaluate the model
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Absolute Error: {mae}")
print(f"Mean Squared Error: {mse}")

# Step 8: Plot predictions vs actual values
plt.figure(figsize=(10, 6))
plt.plot(y_test.values, label='Actual')
plt.plot(y_pred, label='Predicted')
plt.legend()
plt.title('EUR/USD Exchange Rate Prediction')
plt.show()

# Step 9: Feature Importance
feature_importance = pd.DataFrame({'Feature': X.columns, 'Importance': model.feature_importances_})
feature_importance = feature_importance.sort_values(by='Importance', ascending=False)
print(feature_importance)

Я думаю, что ошибка небольшая — MAE (Mean Absolute Error) 0.05, MSE(Mean Squared Error) 0.0025. А под графиком можно увидеть коэффиценты для каждого фактора.

Результаты

Итак, давайте сделаем прогноз на основе последних данных, опубликованных по состоянию на 29.12.2024. Это снова разница между последним и предыдущим значением.

Источник: https://tradingeconomics.com/euro-area/currency

Модель предполагает, что в 2025 году пара EURUSD будет торговаться на уровне 1,02791873. Это соответствует фундаментальным предпосылкам и ожиданиям рынка с точки зрения тренда. ЕЦБ хочет снизить ставки в следующем году, в то время как ФРС стал более осторожен в своих прогнозах, процентная ставка ЕЦБ ниже, чем процентная ставка ФРС, поэтому рынок ожидает, что евро будет слабее, чем доллар США.

Прогноз по EURUSD согласно модели
Прогноз по EURUSD согласно модели

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.