分享

Keras(Tensorflow) vs AutoGluon对沪深300指数20日收益率预测对比(代码+数据)

 AI量化实验室 2023-10-17 发布于北京

原创文章第356篇,专注“个人成长与财富自由、世界运作的逻辑与投资"。

今天继续,昨天的文章完成了Autogluon机器训练金融数据的通用流程:

ModelTrainer:基于AutoGluon的多因子合成AI量化通用流程

今天加上tensorflow(keras)的深度神经网络模型。

若是预测5天后的涨跌:训练集能到74.6%,测试集54.3%,比1天的好。

若是10天的收益率,训练集75.5%,测试集是57.6%。

预测20天的收益率,训练集是84.6%,测试集是59.7%。

我修改了因子周期,基本也是这个规律。就是:“明天的涨跌很难预测,但一个月后的,准确率还是比较高”的。更远的,可能就很容易出现过拟合。(训练集拟合得特别好,但测试集还不如掷硬币)

再做一组实验,仅使用最原始的OHLCV数据:

预测20天后的收益率,训练集70.8%,测试集62.4%。

量化的好处之一就是做实验,所以,我“人肉”做了不少实验。

把因子简化到只有一个“收盘价”,相当于用历史收盘价序列,测试未来20天涨跌,测试集准确率还是63%。

我一狠心,使用随机序列测试,你猜怎么着,准备率仍然高达49%。。。

然后在收盘价的基础上,添加volume,准确率基本没变化,若是添加其他 价量因子,比如roc_20,则准确率会下降。。。

使用tensorflow(keras)实现DNN,来看看效果:

TfModel(ModelBase):
    (dimhl=hu=optimizer=Adam(=)):
        model = Sequential()
        model.add(Dense(hu=dim=))
        _ (hl):
            model.add(Dense(hu=))
        model.add(Dense(=))
        model.compile(==optimizer=[])
        model

    (df_traindf_testlabel=):
        cols = (df_train.columns).copy()
        cols.remove(label)

        df_train.dropna(=)

        train_data = df_train[cols]

        mustd = train_data.mean()train_data.std()
        train_ = (train_data - mu) / std
        (train_)

        model = .create_model(=(cols)==)
        model.fit(train_df_train[label]===cw(df_trainlabel))


        ()
        test_data = df_test[cols]
        mustd = test_data.mean()test_data.std()
        test_ =  (test_data - mu) / std
        (model.evaluate(test_df_test[label]))

测试集准确率是57.3%。

添加正则和Dropout防止过拟合:

(dimhl=hu=dropout=rate=regularize=reg=l1()optimizer=Adam(=)):
    regularize:
        reg = model = Sequential()
    model.add(Dense(hu=dim=reg=))
    dropout:
        model.add(Dropout(rate=))
    _ (hl):
        model.add(Dense(hu==reg))
        dropout:
            model.add(Dropout(rate=))
    model.add(Dense(=))
    model.compile(==optimizer=[])
    model

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多