Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 2835

 
Maxim Dmitrievsky #:
Na genética, pegamos variáveis e as maximizamos em um critério. Não é possível fazer isso aqui, porque se trata de uma classificação. Não há relação entre lucro e rótulos de classe. Na melhor das hipóteses, você obterá um resultado absurdo. É por isso que esses critérios são colocados em eval_metrics

Não há felicidade na vida).

 
Aleksey Nikolayev #:

Não há felicidade na vida)

Mesmo com o nome loss f-ma, é a perda f-ma entre os valores de referência e o modelo.

De que lado está a manga na forma de lucro
 
Maxim Dmitrievsky #:
Mesmo a partir do nome perda ph-y é a perda ph-y entre os valores de referência e o modelo

De que lado está a manga de lucro aqui?

Na verdade, estamos passando da área de MO para a área mais geral de otimização. Ainda assim, "ganhar o máximo possível" não é exatamente o mesmo que "estar certo sempre que possível".

 
Andrey Dik #:

1. v

2. aqui está uma figura, como uma curva de alguma função de aprendizado hipotética.

Você está convencido de que a grade irá parar no extremo local 1? Ou talvez 2? Ou o quê, 3, como no meio? Portanto, não sabemos antecipadamente quantos extremos locais existem, pode haver 100500 ou até mais. É por isso que é importante tentar encontrar o maior de todos os extremos locais que o algoritmo é capaz de atingir.

Isso é muito bonito e comprovável no sentido de justificar a busca por um máximo global.

Mas isso é histórico.

E se adicionarmos uma barra à direita? Ainda seria bonito? Ou entraria em colapso? O mercado não é estacionário. Você acredita no testador? Ele o encontra, é lindo, colorido...

 
Maxim Dmitrievsky #:
Na genética, pegamos variáveis e as maximizamos em um critério. Não é possível fazer isso aqui, porque se trata de uma classificação. Não há relação entre lucro e rótulos de classe. Na melhor das hipóteses, você obterá um resultado absurdo. É por isso que esses critérios são colocados em eval_metrics.
A qualidade da classificação pode ser avaliada de alguma forma, portanto, maximizar essa avaliação é o objetivo da otimização.
 
Maxim Dmitrievsky #:
Mesmo a partir do nome perda ph-y é a perda ph-y entre os valores de referência e o modelo

De que lado está a manga de lucro aqui?

há uma manga

 
Andrey Dik #:
A qualidade da classificação pode ser avaliada de alguma forma, portanto, maximizar essa avaliação é o objetivo da otimização
Bem, a perda entre o original e o treinado é minimizada. É possível adicionar uma pequena dedução na forma de lucro normalizado, é claro, para tentar, mas isso é necessário?
 
СанСаныч Фоменко #:

Muito bom e comprovável no sentido de justificar a busca por um máximo global.

Mas isso está na história.

E se adicionarmos uma barra à direita? A beleza permaneceria? Ou ela entraria em colapso? O mercado não é estacionário. Você acredita no testador? Ele a encontra, é linda, colorida...

Não importa se está na história ou no futuro. E o testador em si não tem nada a ver com isso.

O que importa é a propriedade de um algoritmo (um algoritmo de otimização individual ou como parte de uma grade) de encontrar o ótimo global de um critério de avaliação. Enfatizo - o critério de avaliação. O critério de avaliação não é necessariamente e/ou apenas o lucro. Pode ser qualquer coisa, por exemplo, o critério de avaliação do trabalho em OOS não é um critério (minimizar a diferença entre amostra e OOS)? - é apenas uma ideia. Os critérios podem ser qualquer coisa e de qualquer complexidade. É importante entender que o critério "Lucro" é uma coisa discreta e muito granulosa, por isso as pessoas tentam criar critérios de avaliação mais suaves e monotônicos, o que geralmente melhora a qualidade da otimização em si e do treinamento em neurônica em particular.

Então, voltando ao que eu desenhei na imagem altamente artística - uma ilustração clara do fato de que, em condições em que nem o número nem as características dos extremos locais são conhecidos, a única saída é procurar o máximo possível por aquele que é possível em condições de recursos computacionais limitados.

Platô - sim, existe essa noção, mas ela não está relacionada à otimização, é uma questão de classificar conjuntos semelhantes de parâmetros por algum atributo. Procurar um platô estável é uma tarefa complexa separada.

 

Finalmente consegui minha própria função de perda, a derivada é representada como um produto de Sharpe, erro e pesos.

is_max_optimal=False indica que o valor está diminuindo, mas como também multipliquei por -1, o oposto é verdadeiro.

class SharpeObjective(object):
  def calc_ders_range(self, approxes, targets, weights):
    assert len(approxes) == len(targets)
    if weights is not None:
      assert len(weights) == len(approxes)

    result = []
    for index in range(len(targets)):
      preds = [approxes[i] for i in range(len(targets))]
      preds = [i if i>0 else -1*i for i in preds]
      sharpe = np.mean(preds)/np.std(preds)
      der1 = targets[index] - approxes[index]
      der2 = -1

      if weights is not None:
        der1 = -1 * sharpe * der1 * weights[index]
        der2 = der2 * weights[index]

      result.append((der1, der2))
    return result

class Sharpe(object):
    def get_final_error(self, error, weight):
        return error

    def is_max_optimal(self):
        return False

    def evaluate(self, approxes, target, weight):
        assert len(approxes) == 1
        assert len(target) == len(approxes[0])
        preds = np.array(approxes[0])
        target = np.array(target)
        preds = [i if i > 0 else -1*i for i in preds]
        sharpe = np.mean(preds)/np.std(preds)
        return sharpe, 0

model = CatBoostRegressor(learning_rate=0.1, loss_function=SharpeObjective(), eval_metric=Sharpe())
 
Evgeni Gavrilovi #:

Por fim, obteve sua própria função de perda, a derivada é representada como um produto de Sharpe, erro e pesos.

is_max_optimal=False indica que o valor está diminuindo, mas como eu também multipliquei por -1, o oposto é verdadeiro.

Os resultados do treinamento melhoraram?)