原創(chuàng)文章第356篇,專注“個人成長與財富自由、世界運作的邏輯與投資"。 今天繼續(xù),昨天的文章完成了Autogluon機器訓練金融數(shù)據(jù)的通用流程: ModelTrainer:基于AutoGluon的多因子合成AI量化通用流程 今天加上tensorflow(keras)的深度神經(jīng)網(wǎng)絡模型。 若是預測5天后的漲跌:訓練集能到74.6%,測試集54.3%,比1天的好。 若是10天的收益率,訓練集75.5%,測試集是57.6%。 預測20天的收益率,訓練集是84.6%,測試集是59.7%。 我修改了因子周期,基本也是這個規(guī)律。就是:“明天的漲跌很難預測,但一個月后的,準確率還是比較高”的。更遠的,可能就很容易出現(xiàn)過擬合。(訓練集擬合得特別好,但測試集還不如擲硬幣) 再做一組實驗,僅使用最原始的OHLCV數(shù)據(jù): 預測20天后的收益率,訓練集70.8%,測試集62.4%。 量化的好處之一就是做實驗,所以,我“人肉”做了不少實驗。 把因子簡化到只有一個“收盤價”,相當于用歷史收盤價序列,測試未來20天漲跌,測試集準確率還是63%。 我一狠心,使用隨機序列測試,你猜怎么著,準備率仍然高達49%。。。 然后在收盤價的基礎上,添加volume,準確率基本沒變化,若是添加其他 價量因子,比如roc_20,則準確率會下降。。。 使用tensorflow(keras)實現(xiàn)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 |
|