트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 3154

 
Aleksey Nikolayev #:

알렉세이 비아즈미킨이 홍보한 것과 유사한 접근 방식을 사용한기사입니다. 분류 트리 대신 "차이 트리"가 구성되며, 각 리프는 이벤트의 다른 확률(예: 화재 빈도)에 해당합니다. 본질적으로 이것은 클러스터링의 일부 변형입니다.

지나가면서 훑어보기만 했기 때문에 기사를 자세히 설명 할 준비가되지 않았다고 즉시 말할 것입니다.

기사 주셔서 감사합니다!

번역하고 읽었습니다.

수식 형태의 알고리즘을 더 이해하기 쉬운 언어로 번역하는 데 도움을 줄 수 있습니까? 그리고 저는이 나무를 만드는 방법의 코드를 작성하려고 노력할 것입니다.

 
Maxim Dmitrievsky #:
원하는 질문에 구체적으로 답변해 드렸습니다. 그건 당신이 알아서 하세요. 제가 왜 그런 질문을 받았는지도 이상합니다. 제가 관심 있는 주제와는 전혀 관련이 없는 질문이었거든요.

이 스레드에서 A-B 테스트의 발전된 형태인 상승도 모델에 대해 보고하셨군요. 따라서 이 방법은 목표가 새로운 영향에서 변경되었을 때 영향을 추정하도록 설계되었습니다. 따라서 찾고자 하는 예측 변수의 영향력의 시작점을 설정해야 하는 것은 당연한 일입니다. 이 문제에 대한 여러분의 생각을 듣고 싶었습니다. 중요하지 않다고 생각하는 이유도 포함해서요.

 
Maxim Dmitrievsky #:
왜 걸작을 쓰레기라고 부르나요? 나는 알렉세이처럼 당신의 최상급을 포함하여 무료로 제공했습니다. 하지만 저는 고도바즈에 보내졌어요. 그리고 이제 그 불평꾼이 제 이름을 부르며 뛰어 다니고 있습니다.

불평하는 사람이 누구죠? 누가 저를 욕하나요?

저라면 그 비난은 근거가 없습니다. 저는 공정하게 목표를 달성하기 위해 필요한 경우에만 바람직하지 않은 것을 제거하는 데 에너지를 쏟을 것입니다.

저는 빠른 검증을 위해 예측값을 제공하겠다고 제안했습니다.

앞서 ZZ의 데이터에 예측자를 대량으로 사용한다고 썼고, 그 요점도 설명했습니다. 파이썬으로 다시 작성하는 것은 비생산적입니다.

 
Aleksey Vyazmikin #:

기사 작성해 주셔서 감사합니다!

번역해서 읽어보세요.

수식 형태의 알고리즘을 더 이해하기 쉬운 언어로 번역하는 데 도움을 주실 수 있나요? 그리고 저는이 나무를 만드는 방법의 코드를 작성하려고 노력할 것입니다.

기사 10 페이지에는 의사 코드 형태의 구현이 있습니다. 두 번째 페이지의 부록에는 R 언어의 구현과 기사에 사용 된 데이터에 대한 참조가 있습니다.

일반적으로 mql5에서 의사 결정 트리를 어떻게 구현하나요? 배열이나 템플릿을 통해?

 
Aleksey Vyazmikin #:

이 스레드에서 A-B 테스트의 발전된 형태인 상승도 모델에 대해 보고하셨습니다. 따라서 이 방법은 타겟이 새로운 영향력에서 변경될 때 영향력을 추정하도록 설계되었습니다. 따라서 찾고자 하는 예측 변수의 영향력의 시작점을 설정해야 한다는 것은 분명합니다. 이 문제에 대한 여러분의 생각을 듣고 싶었습니다. 중요하지 않다고 생각하는 이유도 포함해서요.

무작위 실험에서 샘플은 무작위로 결정됩니다. 책의 맨 처음입니다.

무작위로 거래를 개시하고 그에 따른 결과를 대조군으로 하고, 또 다른 하위 표본인 테스트 그룹을 기반으로 구축한 모델이 있습니다. 우리는 그러한 모델을 사용한 효과가 대조군에 긍정적인지 여부를 확인해야 합니다. 그렇다면 제안된 방법 중 하나로 모델을 개선합니다.

단순히 새로운 데이터에 대해 테스트하는 것만으로는 데이터에 편향이 있는 경우가 많기 때문에 효과를 확인할 수 없습니다. 따라서 공식은 ATE + Bias의 두 가지 합입니다. 여기서 더 나아가 사례별로 CATE를 정의하고 더 나은 대우를 받을 수 있는 것만 선택하고 나머지는 거래에서 무시하거나 건너뛸 수 있습니다.

산치의 용어를 빌리자면 고정되지 않은 것에서 고정된 것을 찾는 것입니다.
 
Aleksey Vyazmikin #:

불만 제기자는 누구인가요? 누가 이름을 부르고 있나요?

저에 대한 비난이라면 근거 없는 비난입니다. 저는 공정하게 목표를 달성하는 데 필요한 경우에만 바람직하지 않은 것을 제거하는 데 에너지를 쏟을 것입니다.

저는 빠른 검증을 위해 예측값을 제공하겠다고 제안했습니다.

앞서 ZZ의 데이터에 예측자를 대량으로 사용한다고 썼고, 그 요점까지 설명했습니다. 이것을 파이썬으로 다시 작성하는 것은 비생산적입니다.

당신은 불평하고 어린애처럼 저에게 이름을 부릅니다.
그리고 소량의 모든 것이 생산적이라고요?)
 
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의 아이디어는 여기에서 가져옵니다.

이 기사는 입력에 대한 매우 중요한 지식, 즉 수요-공급의 탄력성을 사용합니다. 따라서 과잉 피팅의 지속적인 냄새가납니다.

우리는 그러한 기본적인 견적 데이터가 없으며, 또한 탄력성이 작동하지 않을 가능성이 높습니다. 자산의 가격은 0에서 하늘 높이까지 다양 할 수 있습니다.

게시하신 코드와 인과관계 접근법 자체는 MKL-5 테스터에서 실행한 후에만 가치가 있으며, 반드시 포워드로 실행해야 합니다.

 

탄력성을 조정해도 새 데이터에서는 전혀 작동하지 않았습니다. 하지만 훈련에서는 잘 작동했습니다.

이유를 파악 중입니다...

작동은 했지만 원하는 방식이 아니었기 때문일 수 있습니다.


 
Maxim Dmitrievsky #:

탄력성을 조정해도 새 데이터에서는 전혀 작동하지 않았습니다. 훈련에서는 잘 작동했지만요.

이유는 밝혀지고 있습니다...

작동은 했지만 원하는 방식이 아니었기 때문일 수 있습니다.


그래프는 기온과 --> 아이스크림 구매처럼 명확한 원인과 결과를 보여주지 않습니다.
사유: