# Forex Wechselkurs Prognose ## Projektbeschreibung Prognostiziert zukünftige Wechselkurse für wichtige Währungspaare (EUR/USD, GBP/USD, AUD/USD, USD/CHF, USD/JPY) mithilfe von Machine Learning-Modellen und Wirtschaftsindikatoren. Das Projekt kombiniert Finanzmarktdaten mit makroökonomischen Variablen zur Vorhersage von Währungsbewegungen. ## Installation & Setup ### Voraussetzungen PIP !pip install yfinance pandas_datareader gradio matplotlib scikit-learn statsmodels # Abhängigkeiten installieren pip install -r requirements.txt # Web-App starten python app.py ``` Die Gradio-App startet auf: http://127.0.0.1:7860 ### Vollständige Analyse ausführen ```bash jupyter notebook project.ipynb ``` ## Ergebnisse Linear Regression erwies sich als das beste Modell für alle Währungspaare und erreichte R²-Werte über 0,89 für alle Paare. Das Modell für AUD/USD zeigte die beste Performance mit einem R² von 0,9291. ARIMA-Modelle zeigten durchweg schlechte Performance mit stark negativen R²-Werten, was auf deren Ungeeignetheit für diese Datenstruktur hinweist. ## Name & URL | Name | URL | |------|-----| | Gradio App | Lokale Anwendung (http://127.0.0.1:7860) | | Code | GitHub Repository | ## Datenquellen und Features pro Quelle | Datenquelle | Features | |-------------|----------| | Yahoo Finance | EUR/USD, GBP/USD, AUD/USD, USD/CHF, USD/JPY (Schlusskurse) | | FRED (Federal Reserve Economic Data) | CPI (Verbraucherpreisindex), FEDFUNDS (Leitzins), UNRATE (Arbeitslosenquote) | ## Erstellte Features | Feature | Beschreibung | |---------|--------------| | lag_1, lag_2, lag_3 | Verzögerte Werte (1, 2 und 3 Tage) für alle Währungspaare | | ma_3, ma_7, ma_14 | Gleitende Durchschnitte (3, 7, 14 Tage) für Kurse und Wirtschaftsdaten | | std_7, std_14 | Standardabweichung (7 und 14 Tage) für Volatilitätsmessung | | CPI_lag1, Rate_lag1, Unemployment_lag1 | Verzögerte Wirtschaftsindikatoren | | month, quarter, day_of_week, day_of_year | Zeitbasierte Features | | target | Verschobener Zielwert (nächster Tag) für jedes Währungspaar | ## Modelltraining ### Datenmenge * Insgesamt 2.557 Tageswerte pro Währungspaar (2015-2025) * 5 Währungspaare × 3 Modelle = 15 trainierte Modelle ### Datenaufteilung (Train/Test) * Zeitbasierte Aufteilung: Training bis 31.12.2023, Test ab 01.01.2024 * Verwendung von TimeSeriesSplit für zeitreihengerechte Validierung ## Performance | Nr. | Modell | Performance | Features | Beschreibung | |-----|--------|-------------|----------|--------------| | 1 | Random Forest (EUR/USD) | R²: 0,8947, RMSE: 0,0072 | Alle technischen + fundamentalen Features | Gute Performance, robust | | 2 | Linear Regression (EUR/USD) | R²: 0,9168, RMSE: 0,0064 | Alle Features | Beste Performance für EUR/USD | | 3 | Random Forest (GBP/USD) | R²: 0,8760, RMSE: 0,0083 | Alle Features | Solide Performance | | 4 | Linear Regression (GBP/USD) | R²: 0,8959, RMSE: 0,0076 | Alle Features | Beste Performance für GBP/USD | | 5 | Random Forest (AUD/USD) | R²: 0,7959, RMSE: 0,0079 | Alle Features | Schwächere Performance | | 6 | Linear Regression (AUD/USD) | R²: 0,9291, RMSE: 0,0047 | Alle Features | **Bestes Gesamtmodell** | | 7 | Random Forest (USD/CHF) | R²: 0,9088, RMSE: 0,0064 | Alle Features | Starke Performance | | 8 | Linear Regression (USD/CHF) | R²: 0,9248, RMSE: 0,0058 | Alle Features | Beste Performance für USD/CHF | | 9 | Random Forest (USD/JPY) | R²: 0,2209, RMSE: 4,1909 | Alle Features | Schwache Performance bei JPY | | 10 | Linear Regression (USD/JPY) | R²: 0,9236, RMSE: 1,3126 | Alle Features | Sehr gute Performance | | 11 | ARIMA (alle Paare) | R²: -36.703.921 (Durchschnitt) | Nur Zeitreihe | Durchweg schlechte Performance | **Bestes Modell**: Linear Regression für AUD/USD mit R² = 0,9291 und einer Richtungsgenauigkeit von 51,1% ## Feature Importance (Top Features - Random Forest) **Wichtigste Features über alle Währungspaare:** - **ma30**: Gleitender 30-Tage-Durchschnitt (höchste Vorhersagekraft) - **lag1**: Vorheriger Tageskurs - **month**: Saisonale Effekte - **day_of_year**: Jahreszeit-Indikatoren - **CPI/Rate Features**: Makroökonomische Indikatoren ## Technische Hinweise ### Bekannte Einschränkungen - ARIMA-Modelle zeigten extrem schlechte Performance aufgrund der Forex-Datencharakteristika - Verwendung von Random Walk als Baseline für Vergleichszwecke - Feature Engineering fokussiert auf technische und makroökonomische Indikatoren ### Dateistruktur ``` ├── project.ipynb # Hauptanalyse & Training ├── app.py # Gradio Web-App für Deployment ├── requirements.txt # Python-Abhängigkeiten ├── final_dataset.csv # Verarbeiteter Datensatz ├── best_forex_model.pkl # Trainiertes Modell └── README.md # Projektdokumentation ``` ### Dependencies (requirements.txt) ``` yfinance==0.2.61 pandas_datareader==0.10.0 gradio==5.21.0 matplotlib==3.9.3 scikit-learn==1.6.1 statsmodels==0.14.4 pandas==2.2.3 numpy==2.2.6 ```