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

 
mytarmailS #:
어차피 비어 있을 텐데

네, 원하지 않는다면요.

 
mytarmailS #:
타겟팅이 있는 머신 러닝이 작동하지 않고 원샷 학습이 작동하지 않는 것은 슬픈 일입니다....

대칭 특징을 제거하여 편향을 줄이세요.

예를 들어 증분을 절대 증분(변동성)으로 대체합니다.

때때로 도움이 됩니다.

 
Maxim Dmitrievsky #:

대칭 기능을 제거하여 편향성을 줄입니다.

예를 들어 증분을 절대 증분(변동성)으로 대체합니다.

때로는 도움이 됩니다.

아니요, 그보다 훨씬 더 복잡합니다.
 
Aleksey Vyazmikin #:

제 아이디어는 여러 통계적 특징을 통해 안정적인 양자 세그먼트를 선택하는 모델을 얻는 것입니다. 누구나 이 프로젝트에 참여할 수 있습니다.

왜 이 양자들에 집착하는 건가요?...?

그것에 대해 지적인 것은 아무것도 없습니다. 예를 들어 10000개의 줄을 100개의 조각으로 나누면, 즉 정렬하여 아래쪽부터 100개의 줄을 세어 100번째 줄과 다음이 일치하면(즉, 반복되면) 모두 첫 번째 조각으로 참조합니다. 중복이 있는 경우 다음 100개 + 중복이 있는 경우 두 번째 퀀텀에서 줄을 입력하기 시작합니다. 행이 다 떨어질 때까지 계속 반복합니다.

하나의 트리에도 이러한 양자 세그먼트(중복이 있는 정렬된 문자열 100개)보다 훨씬 더 많은 유용한 정보(데이터에 대해 학습되었기 때문에)가 포함되어 있습니다.

 
Forester #:

이 퀀트에 왜 그렇게 집착하나요? ....

그 안에는 지적인 것이 전혀 없습니다. 예를 들어 10000 줄을 100 개로 나누고, 즉 정렬하고 아래쪽에서 100 줄을 세고 다음 줄이 100 번째 줄과 일치하면 (즉, 반복) 모두 첫 번째 조각으로 참조합니다. 중복이 있는 경우 두 번째 퀀텀에서 다음 100개 + 중복된 줄을 입력하기 시작합니다. 그리고 줄이 다 떨어질 때까지 계속 반복합니다.

하나의 트리에도 이러한 양자 세그먼트(중복이 있는 100개의 정렬된 줄)보다 훨씬 더 많은 유용한 정보(데이터에 대해 학습되었기 때문에)가 포함되어 있습니다.

퀀텀 세그먼트는 캣부스트 모델을 구축하는 벽돌입니다. 처음에 제가 이해했듯이 이러한 방식으로 메모리 절약 및 일반적인 계산 가속화 문제가 해결되었습니다. 부수적 인 이득은 예측 지표 조합의 변형을 줄이는 것이며, 일반적으로 훈련의 속도와 품질에 기여하는 다중 상관성을 줄이는 단계가 이루어집니다. 또한 부분적으로는 데이터 드리프트 문제도 해결됩니다.

저는 양자 세그먼트 데이터에서 확률적 추정의 잠재력을 탐구하는 또 다른 방법도 생각해 볼 수 있습니다. 제안하신 양자화 방법(실제로는 이 프로세스의 목적이 동질적인 그룹(아날로그-클러스터링)을 선별하는 것이라고 상상하는 것이 좋습니다)을 예제 수에 따라 데이터를 20개의 동일한 양자 세그먼트로 나누면 각 양자 세그먼트에 5%의 데이터만 남는다는 것이 드러납니다. CatBoost는 기본적으로 254개의 구분 기호, 즉 255개의 세그먼트를 생성합니다. 그런 다음 이 세그먼트로부터 트리를 구축합니다. 모든 양자 세그먼트가 똑같이 유용하다고 가정하고, 의사 결정 트리를 구축하는 방법에 따라 그룹을 하위 그룹으로 분할하여 그 중간 위치를 결정해야 합니다. 분할은 루트 및 기타 예측자 모두에 의해 수행됩니다. 하나의 트리를 사용하더라도 6개의 분할 후 최종 목록에 양성 클래스 "1"의 원래 예시 중 몇 개가 남을까요? 분할 선택은 누적된 퀀텀 분할 횟수라는 지표를 기반으로 한다는 점을 고려해야 합니다. 트리 구성 방법 자체를 고려하면 예측자를 양자 세그먼트로 더 정성적으로 분할할수록 리프에서 동일한 정확도를 얻기 위해 더 적은 분할이 필요하다는 것이 분명해집니다. 모든 분할은 가설이며 모든 가설이 참일 수는 없다는 점에 유의하세요. 따라서 양자 세그먼트가 클래스 중 하나에 더 많이 속할 가능성을 고려하여 분할을 수행하면 비슷한 정확도를 달성하기 위해 분할 횟수를 줄이고, 따라서 잠재적으로 잘못된 가설(분할)의 수를 줄일 수 있습니다. 또한 예측자를 전 세계 3개 지역(2개는 클래스 소속, 1개는 불확실성)으로 즉시 분할할 수 있다면 평균적으로 모델 크기가 작아지고 통계적 성능도 향상되어 더 견고해질 것으로 예상됩니다.

예를 들어 예측 변수가 RSI 오실레이터이고 참가자의 중요한 행동이 70, 50, 30 수준에서 발생하며 그 이상의 모든 것은 시장 참가자의 의사 결정에 영향을 미치지 않는다고 가정해 보겠습니다. 그렇다면 이 세 가지 값을 나머지 개체군으로부터 분리하는 방식으로 퀀텀 테이블을 구축하는 것이 합리적입니다. 그렇지 않으면 분할 중 하나가 무작위로 클래스 멤버십의 양자 세그먼트에 더 많은 예를 갖게 되고 잘못된 가설에 대한 잘못된 규칙을 얻게 됩니다.

정량화된 예측자 점수로 막대형 차트를 그리고 각 열에 대해 클래스 멤버십 확률 '1'의 곡선을 그릴 수 있습니다. 곡선이 직선이 될 가능성이 더 높다면 그러한 예측자를 벤치마킹할 것입니다. 제 생각에 좋은 예측자는 경사진 선이거나 일부 열에 스파이크가 있는 것입니다.

정량화를 통해 가격 변동 확률에 영향을 미치는 불연속적인 이벤트를 찾고 있다고 말할 수 있습니다.

 
규칙은 정확히 다음과 같이 나뉩니다.
RSI>69 & RSI<71....
이것이 바로 정량화입니다.
나무 AMO를 가지고 나무로 나누고 올바른 나무를 뽑아내는 것입니다.

무슨 양자화요? 말도 안 되는 소리, 한심하네요.

코드 세 줄로 모든 게 해결되는데...
그리고 당신은 미친 교수처럼 몇 년 동안 이 정량화 작업을 해왔어요.
 
mytarmailS #:
규칙은 다음과 같이 나뉩니다.
RSI>69 & RSI<71....
이것이 모든 정량화입니다...
나무 AMO를 가지고 나무로 나누고 올바른 나무를 꺼내면...

무슨 정량화? 그런 헛소리를 하다니, 한심하군.

세 줄의 코드로 모두 해결됩니다...
그리고 당신은 미친 교수처럼 몇 년 동안 이 양자화 매체를 만지작거리고 있죠.

퀀트 테이블을 만드는 방법에는 여러 가지가 있습니다. 실제로 예제 비율에 대한 시트에 주어진 제약 조건을 사용하여 단일 예측자에 대한 트리를 구축하는 기성 패키지를 통해 할 수 있다고 생각합니다. 그 패키지가 무엇이고 필요한 형식으로 데이터를 가져오는 방법은 모르겠습니다.

중요한 것은 단순히 분할하는 것이 아니라 새 데이터에서 클래스 멤버십이 유지될 확률을 높일 수 있는 이 양자 분할을 평가하기 위한 기준을 찾는 것입니다.

이 작업을 하는 이유 - 이것이 정성적 모델을 구축하는 열쇠이기 때문입니다.

시간이 오래 걸리는 이유 - 많은 실험과 테스트 스크립트가 필요하기 때문입니다. OpenCL에 대한 이해가 조금 있고 코드가 비디오 카드에서 부분적으로 계산되기 때문에 시간이 걸리고 많은 것을 공부해야 합니다.

 
Aleksey Vyazmikin #:

중요한 것은 단순히 파티셔닝을 하는 것이 아니라 새로운 데이터에서 클래스 멤버십이 지속될 가능성을 높일 수 있는 이 양자 컷오프를 평가하는 기준을 찾는 것입니다.

동일한 캣버스터의 코드를 살펴본 적이 있나요? 사용하고 있습니다. 타사 패키지를 사용하지 않습니다. 그러나 이것은 매우 작은 함수입니다 (제가 설명한 것보다 훨씬 간단하며 중복 수만큼 분리 지점을 이동하지 않습니다).
나는 무엇이 나오는지에 대한 의견을 썼습니다. 입력은 정렬 된 열입니다.

static THashSet<float> GenerateMedianBorders(
    const TVector<float>& featureValues, const TMaybe<TVector<float>>& initialBorders, int maxBordersCount) {
    THashSet<float> result;
    ui64 total = featureValues.size(); //число строк в столбце
    if (total == 0 || featureValues.front() == featureValues.back()) { // проверки
        return result;
    }

    for (int i = 0; i < maxBordersCount; ++i) { // цикл по числу квантов
        ui64 i1 = (i + 1) * total / (maxBordersCount + 1); // номер строки начала кванта номер i
        i1 = Min(i1, total - 1); // не больше числа строк 
        float val1 = featureValues[i1]; // значение в строке i1
        if (val1 != featureValues[0]) { // если != значению в 0-й строке, чтобы не было дубля с 0-й строкой
            result.insert(RegularBorder(val1, featureValues, initialBorders)); // сохранить значение в массив границ разделяющих кванты (не смотрел, но очевидно, что дубликаты пропустит и не создаст им квант)
        }
    }
    return result;
}

보시다시피 모든 것이 매우 간단하며 여기에는 지적 인 것이 없습니다. 예를 들어 100 행만 계산하면됩니다.
약간 더 복잡한 변형은 중복 수로 이동할 수 있으며 퀀타의 크기를 최적화 할 수도 있습니다 (예 : 10000 행 중 9000 개의 중복이있는 경우 간단한 함수는 11 퀀타가됩니다: 처음 1000개 행에서 10개, 11번째 행에서 나머지 9000개의 중복, 또는 처음 1000개 행을 99개의 퀀타 + 1개의 퀀텀으로 9000개의 중복으로 나눌 수 있습니다).
그러나 필요한 문자열 수를 세는 것과 같은 단순한 계산이 기본입니다.

원본 (더 복잡한 변형이 있습니다) https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp
이 페이지에서 일주일 동안 기능을 공부하고 몇 년을 절약하세요.

추신 다음 양자에는 정확히 100 개의 문자열이 없지만 315 또는 88 또는 4121 인 주된 이유는 매우 까다로운 공식 ( 이 양자 세그먼트의 평가 기준을 검색하는 데 사용하려는 예측력에 따라 문자열이 결합되는 경우)이 아니라 단순히 중복 된 수에 있기 때문입니다.
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
  • catboost
  • github.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 
물에 빠진 것이 분명한데 자살을 즐기는 사람을 구조해야 할까요?
당신이 그에게 도움의 손길을 내밀면 그는 그것을 거부하고 당신과 논쟁을 벌이며 스스로 빠져나오려고 노력하지 않고 다음과 같이 자신의 조건을 지시합니다:
"당신이 직접 나를 구해주고, 내가 좋아하는 음악에 맞춰 머리 위로 나를 안고 물 밖으로 끌어내든지, 아니면 그렇게 하지 말든지.
그리고 나서 당신은 나를 구할 의지가 전혀 없군요.


 
Forester #:

같은 캣버스터의 코드를 보긴 하셨나요? 사용하고 있잖아요. 타사 패키지를 사용하지 않습니다. 그러나 이것은 매우 작은 함수입니다 (내가 설명한 것보다 훨씬 간단하며 중복 수만큼 분리 지점을 이동하지 않습니다).
나는 무엇이 나오는지에 대한 의견을 썼습니다. 입력은 정렬 된 열입니다.

물론 나는 그것을 보았다. 또한 MQL5에서 모든 정량화 방법을 재현하는 작업에 대한 비용을 지불 할 준비가되었습니다. 지금까지 시도가 성공하지 못했는데 시도해 보시겠습니까?

포레스터 #:

보시다시피 모든 것이 매우 간단하며 여기에는 지적인 것이 없습니다. 예를 들어 100 줄만 세면됩니다.

가장 간단한 방법을 알려 주셨습니다-예, 어렵지 않습니다.

게다가 제가 독창적 인 정량화 방법이나 그와 비슷한 것이 있다고 썼습니까? 제가 쓴 내용과 어떻게 모순되나요?

사유: