File size: 2,053 Bytes
0262268
 
09f6668
 
0262268
 
 
 
 
218f038
0262268
09f6668
218f038
 
09f6668
0262268
09f6668
 
0262268
218f038
 
0262268
218f038
0262268
 
 
 
218f038
 
0262268
218f038
0262268
09f6668
 
 
 
 
218f038
09f6668
 
 
 
0262268
09f6668
 
 
 
 
 
218f038
09f6668
218f038
09f6668
 
 
218f038
09f6668
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# train_autogluon.py
from autogluon.timeseries import TimeSeriesPredictor, TimeSeriesDataFrame
from utils_vol import fetch_close_series, realized_vol, rv_to_autogluon_df

def train_bolt_small(
    ticker="AAPL",
    start="2015-01-01",
    interval="1d",
    prediction_length=30,
    time_limit=900,              # Sekunden (15 Min). Bei Bedarf anpassen.
):
    """
    Trainiert Chronos-Bolt-Small auf CPU via AutoGluon mit CPU-freundlichen Limits.
    Explizite Business-Day-Frequenz ('B') verhindert Frequency-Fehler.
    """
    print(f"[AutoFT] Lade {ticker} ...")
    close = fetch_close_series(ticker, start=start, interval=interval)
    rv = realized_vol(close)

    # tidy DataFrame: columns = item_id, timestamp, target
    df = rv_to_autogluon_df(rv)

    # TimeSeriesDataFrame mit expliziter Frequenz erzeugen
    tsdf = TimeSeriesDataFrame.from_data_frame(
        df,
        id_column="item_id",
        timestamp_column="timestamp",
        # KEIN target_column-Argument in AG 1.4.0 – 'target' wird implizit erkannt
        freq="B",
    )
    # auf reguläres Business-Day-Gitter bringen (Lücken = NaN)
    tsdf = tsdf.convert_frequency("B")

    predictor = TimeSeriesPredictor(
        path="/mnt/data/AutogluonChronosBoltSmall",
        prediction_length=prediction_length,
        eval_metric="WQL",
        freq="B",
        verbosity=2,
    )

    predictor.fit(
        train_data=tsdf,
        enable_ensemble=False,
        num_val_windows=1,
        hyperparameters={
            "Chronos": {
                "model_path": "autogluon/chronos-bolt-small",
                "fine_tune": True,
                "fine_tune_steps": 200,     # klein halten für CPU
                "fine_tune_lr": 1e-4,
                "context_length": 128,      # klein halten für CPU
                "quantile_levels": [0.1, 0.5, 0.9],
            }
        },
        time_limit=time_limit,               # harter Cap, damit HF nicht timeoutet
    )

    print("✅ Training abgeschlossen. Modellpfad:", predictor.path)
    return predictor