トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3154

 
Aleksey Nikolayev #:

Aleksey Vyazmikinが提唱するアプローチに似た論文。分類木の代わりに「差分木」が構築され、各葉が事象の異なる確率(例えば火災の頻度)に対応する。要するに、これはクラスタリングの一種である。

私はこの論文にざっと目を通しただけなので、詳しく説明する用意はない。

記事をありがとう!

翻訳して読みました。

数式で書かれたアルゴリズムを、もっと理解しやすい言語に翻訳するのを手伝ってもらえませんか?そして、このツリー構築法のコードを書いてみようと思います。

 
Maxim Dmitrievsky #:
私はあなたの具体的な質問に具体的に答えた。それはあなた自身の問題だ。なぜ私が質問されたのかさえ不思議だ。私が興味を持っていたトピックとは何の関係もない。

うーん、このスレッドでは、A-Bテストの発展形である隆起モデルについて報告されていますね。つまり、ターゲットが新しいインパクトから変化したときのインパクトを推定するための手法なんだ。ですから、求める予測因子の影響の起点を設定することは当然だと思います。ここで、この問題についてのあなたの考えを聞きたかったのです。重要でないと考える理由も含めて。

 
Maxim Dmitrievsky #:
なぜ傑作をゴミと呼ぶのか?私はアレクセイと同じように、あなたの最上級の言葉を含めて無料で提供した。しかし、私はコドバズに送られた。そして今、クレーマーである彼は私を罵倒して回っている。

文句を言うのは誰だ?誰が私を罵倒しているのか?

もし私なら、その非難には根拠がない。私は、私の目標を達成するために必要な場合に限り、公平に、好ましくない人たちを排除するためにエネルギーを費やす。

手っ取り早いので、検証のために予測値を出すことを申し出た。

私は先ほど、ZZのデータで予測値を大量に使っていると書き、その要点まで説明した。pythonで書き直すのは逆効果です。

 
Aleksey Vyazmikin #:

記事をありがとう!

翻訳して読んだよ。

数式で書かれたアルゴリズムをもっと理解しやすい言語に翻訳するのを手伝ってもらえませんか?そして、このツリー構築法のコードを書いてみようと思います。

その記事の10ページに、擬似コードの形での実装がある。最後から2番目のページの付録には、R言語での実装と記事で使用したデータへの参照があります。

一般論として、mql5では決定木をどのように実装するのですか?配列やテンプレートを通してですか?

 
Aleksey Vyazmikin #:

うーん、このスレッドでアップリフトモデルについて報告されていますが、これはA-Bテストの発展形です。つまり、新しい影響力から対象が変化したときの影響力を推定する手法ですね。ですから、求める予測因子の影響力の起点を設定することは当然だと思います。ここで、この問題についての考えをお聞きしたいと思いました。重要でないと考える理由も含めて。

無作為化実験の標本はランダムに決定される。まさに冒頭の

無作為に取引を開始し、対照群で対応する結果があり、テスト群という別のサブサンプルで構築されたモデルがあります。このようなモデルを使った場合、コントロール・グループにとってプラスになるかどうか、その効果を判断する必要がある。もしそうなら、提案された方法の1つでモデルをアップリフトします。

新しいデータで検定するだけでは、データに偏りがあることが多いので、効果を決定することはできません。したがって、式は2つの和 ATE + Biasとなります。さらに進んで、ケース・バイ・ケースであるCATEを定義し、より良い扱いを受けたものだけを選択し、残りはトレーディングにおいて無視/スキップすることもできる。

Sanychの用語では、非定常の中から定常を探す。
 
Aleksey Vyazmikin #:

クレーマーは誰だ?悪口を言っているのは誰だ?

もし私のことなら、その非難には根拠がない。私は、自分の目標を達成するために必要な場合に限り、公平に、望ましくないものを排除するためにエネルギーを費やす。

手っ取り早いので、検証のために予測値を出すことを申し出た。

私は先ほど、ZZのデータで予測値を大量に使っていると書き、その要点まで説明した。これをpythonに書き換えるのは逆効果だ。

あなたは子供のように文句を言い、私を罵る
そして、少量ですべてが生産的ですか?)
 
def R_learner():
    dataset = get_prices()
    dataset = labeling(dataset)

    data = dataset[dataset.index < FORWARD].copy()
    data['treatment'] = data['labels'].apply(lambda x: np.random.choice([0, 1], p=[0.2, 0.8])) // случайно выбрал элементы для лечения


    X = data[data['treatment'] == 1]
    X = X[X.columns[1:-2]]
    X_t = data[data['treatment'] == 0]
    X_t = X_t[X_t.columns[1:-2]]

    y = data[data['treatment'] == 1]
    y = y[y.columns[-2]]
    y_t = data[data['treatment'] == 0]
    y_t = y_t[y_t.columns[-2]]

    treat_m = CatBoostClassifier(iterations=1000,
                                depth=6,
                                custom_loss=['Accuracy'],
                                eval_metric='Accuracy',
                                verbose=False,
                                use_best_model=True,
                                task_type='CPU')
    treat_m.fit(X, y, eval_set=(X_t, y_t),
                    early_stopping_rounds=50, plot=False) // обучил модель на этих примерах, остальные попали в валидацию

    data['y_t'] = [x[0] < 0.5 for x in treat_m.predict_proba(data[data.columns[1:-2]])] // теперь метки классов - это предсказания обученной модели
    data['y_t'] = data['y_t'].astype(float)
    
    # perform residualisation
    debias_m = CatBoostClassifier(iterations = 5,
                                    max_depth = 1,
                                    early_stopping_rounds = 2,
                                    verbose = False) // эта модель определяет смещение в оценках тритмента
    denoise_m = CatBoostClassifier(iterations = 5,
                                    max_depth = 1,
                                    early_stopping_rounds = 2,
                                    verbose = False) // эта модель определяет смещение в оценках целевой

    t_diff = data['treatment'] - cross_val_predict(debias_m, 
                                                data[data.columns[1:-3]], 
                                                data[data.columns[-2]], 
                                                method='predict_proba', cv=5)[:, 0] // определяем тритмент эффект

    y_diff =  data['y_t'] - cross_val_predict(denoise_m, 
                                                data[data.columns[1:-3]], 
                                                data[data.columns[-1]], 
                                                method='predict_proba', cv=5)[:, 0] // определяем байес

    # create the weights
    w = t_diff ** 2 // новые веса для модели
    # create the transformed target
    y_debias = (y_diff / t_diff).apply(lambda x: 1 if x > 0.0 else 0) // новые метки без смещения

    data['weights'] = w
    data['y_debias'] = y_debias
    data = data.drop(['labels', 'treatment', 'y_t'], axis=1)


    X = data[data.columns[1:-2]]
    y = data[data.columns[-2:]]

    train_X, test_X, train_y, test_y = train_test_split(
            X, y, train_size=0.5, test_size=0.5, shuffle=True)

    train_data = Pool(
        data=train_X,
        label=train_y[train_y.columns[1]],
        weight=train_y[train_y.columns[0]] // добавляем веса к обучению
    )

    eval_data = Pool(
        data=test_X,
        label=test_y[test_y.columns[1]],
        weight=test_y[test_y.columns[0]]
    )

    # learn final model with train and validation subsets
    model = CatBoostClassifier(iterations=1000,
                                depth=6,
                                learning_rate=0.1,
                                custom_loss=['Accuracy'],
                                eval_metric='Accuracy',
                                verbose=False,
                                use_best_model=True,
                                task_type='CPU')

    model.fit(X= train_data, eval_set=eval_data,
                early_stopping_rounds=50, plot=False) // учим новую модель с обесшумленными метками и дополнительными весами

    return model

このアプローチは新しいデータではうまくいかない。どうやら、何をトリテントにするのか、何との関係でトリテントにするのかをうまく定義できなかったようだ。)

R-learnerのアイデアはここから 引用した。
 
Maxim Dmitrievsky #:

このアプローチは新しいデータではうまく いかない。どうやら、何をトリテントにするのか、何との関係でトリテントにするのかをうまく定義できなかったようだ。)

R-learnerのアイデアはここから 引用した。

この記事では、需給の弾力性というインプットに関する非常に重要な知識を使っている。それゆえ、オーバーフィッティングの臭いが消えない。

私たちはそのような基本的な相場データを持っていません。さらに、弾力性は機能しない可能性が高いです:資産の価格はゼロから空高くまで変化する可能性があります

あなたが投稿したコードと因果関係のアプローチ自体は、MKL-5テスターで実行した後、そして必然的にフォワードで実行した後にのみ価値があります。

 

弾力性を調整しても、新しいデータではまったく機能しなかった。トレーンでは問題なかった。

ータはータはータはータはータはータはー

うまくいったかもしれないが、思い通りにいかなかったからだ。


 
Maxim Dmitrievsky #:

弾力性を調整しても、新しいデータではまったく機能しなかった。トレーンでは問題なかったが。

理由は解明されつつあるが...。

うまくいったかもしれないが、あなたが望むようなやり方ではなかったからだ。


グラフは気温と→アイスクリームを買うというような明確な因果関係を示していない。
理由: