Multi-Target Demo II: Die MultiTask-Pipeline mit demo10-Daten
Diese Seite ist die aktualisierte Fassung des Multi-Task-Target-Demos. Sie steuert die komplette Pipeline direkt über die Klasse MultiTask aus spotforecast2.multitask.multi (Version >= 3.9.0 erforderlich, installiert über PyPI oder GitHub). Eine MultiTask-Instanz wird mit einer ConfigMulti und den Laufzeit-Parametern konstruiert; anschließend durchläuft sie die Pipeline-Schritte — Datenaufbereitung, Ausreißerbehandlung, Imputation, exogene Merkmale, Training, Prognose, Aggregation — und die Methode MultiTask.run() gibt das aggregierte Prediction-Package zurück, aus dem sich die Prognose als DataFrame entnehmen lässt.
Vorbereitung
Bereitstellen des DataFrames df aus dem mitgelieferten Demo-Datensatz demo10.csv (11 Zielreihen, stündlich, ca. zwei Jahre):
Private Daten nicht in versionierten Seiten ausführen
Diese Seite wird versioniert, in CI gerendert und veröffentlicht — auch die _freeze/-Ausführungsergebnisse liegen im Repository. Eine Zelle, die gegen private Daten läuft, bettet deren Werte in die veröffentlichte Dokumentation ein. Für lokale Läufe mit privaten Daten (z. B. /Users/bartz/spotforecast2_data/demo10.csv) das folgende Muster ausschließlich in einem nicht versionierten Dokument (z. B. unter local/) verwenden; auf GitHub greift dann automatisch der mitgelieferte Demo-Datensatz:
from spotforecast2_safe.data.fetch_data import fetch_data, get_package_data_hometry: df = fetch_data(filename="/Users/bartz/spotforecast2_data/demo10.csv")exceptFileNotFoundError:# Fallback auf den mitgelieferten Demo-Datensatz (z. B. für Tests auf GitHub) df = fetch_data(filename=str(get_package_data_home() /"demo10.csv"))
Konfiguration
Konfiguration der Parameter und des Cache-Verzeichnisses. Seit Version 3.9.0 werden Trainings- und Validierungsfenster als pd.Timedelta über die ConfigMulti-Felder train_size und delta_val gesetzt; die früheren Parameter train_days / val_days existieren nicht mehr. Alle weiteren Schlüsselwortargumente des MultiTask-Konstruktors werden als **overrides an config.set_params() weitergereicht — unbekannte Parameter führen zu einem expliziten ValueError statt zu stillem Ignorieren. Da diese **overrides die übergebene ConfigMulti direkt mutieren, legt jeder Task-Abschnitt unten eine eigene frische ConfigMulti an, damit sich Einstellungen nicht zwischen den Abschnitten vermischen.
Die Werte sind für eine schnell und offline rendernde Demo-Seite verkleinert. In Produktion: persistentes Cache-Verzeichnis (z. B. ~/.spotforecast2_cache/cache), train_size von zehn Jahren, 25 Optuna-Trials, und die hier deaktivierten Optionen use_exogenous_features / use_outlier_detection typischerweise eingeschaltet (Wetter-Features benötigen Netzzugriff).
Importieren der Pipeline-Klasse und ihrer Konfiguration:
from spotforecast2.multitask.multi import MultiTaskfrom spotforecast2_safe.configurator.config_multi import ConfigMulti
Production
Optuna
Tunen der Hyperparameter (wöchentlich):
cfg_optuna = ConfigMulti()cfg_optuna.data_frame_name = PROJECT_NAME # Projektname = Cache-/Modell-Namespacemt_optuna = MultiTask( cfg_optuna, task="optuna", dataframe=df, cache_home=CACHE_HOME, log_level=40,# ab hier: **overrides, werden via config.set_params() gesetzt train_size=TRAIN_SIZE, delta_val=DELTA_VAL, n_trials_optuna=N_TRIALS_OPTUNA, use_exogenous_features=False, use_outlier_detection=False,)# Pipeline-Schritte in fester Reihenfolge:mt_optuna.prepare_data()mt_optuna.detect_outliers()mt_optuna.impute()mt_optuna.build_exogenous_features()result_optuna = mt_optuna.run(show=False)# MultiTask.run() liefert das aggregierte Prediction-Package;# die Prognose liegt unter result_optuna["future_pred"]:forecast_optuna = result_optuna["future_pred"].to_frame("forecast")forecast_optuna.head()
forecast
2021-12-24 22:00:00+00:00
1998.730889
2021-12-24 23:00:00+00:00
1806.574009
2021-12-25 00:00:00+00:00
1735.236008
2021-12-25 01:00:00+00:00
1707.990166
2021-12-25 02:00:00+00:00
1698.098677
Lazy
Model-Fit und Prediction mit den besten Hyperparametern aus Optuna, ohne erneutes Tuning (täglich oder stündlich). Wurde die Optuna-Phase noch nicht ausgeführt, startet lazy automatisch mit den Standardparametern. Mit run(show=True) ließen sich zusätzlich interaktive Grafiken pro Ziel und für die Aggregation anzeigen; hier bleibt das mit run(show=False) ausgeschaltet, um die Seite schlank zu halten. Eine eigene frische ConfigMulti stellt sicher, dass keine Einstellungen aus dem Optuna-Abschnitt hereinlecken.
Nur Vorhersage, ohne Tuning oder Fit. Die Schritte optuna oder lazy müssen bereits einmal gelaufen sein, damit die Modelle im Cache vorliegen (auto_save_models=True ist der Standard).
Löschen der Cache-Daten für das Projekt. Mit dry_run=True wird nur angezeigt, welche Dateien gelöscht würden, ohne sie tatsächlich zu entfernen.
cfg_clean = ConfigMulti()cfg_clean.data_frame_name = PROJECT_NAMEmt_clean_dry = MultiTask( cfg_clean, task="clean", cache_home=CACHE_HOME, dry_run=True, log_level=40,)mt_clean_dry.run() # dry_run=True: zeigt nur an, was gelöscht würde
[clean] Dry run — would delete: /tmp/tmp3poge5iz
Would remove: logging
Would remove: models
Would remove: tuning_results