Я провел небольшое исследование о влиянии уровня безработицы, уровня инфляции и процентной ставки на обменный курс 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 согласно модели