9 votos

Definición de una función objetivo para la tarea de aprendizaje automático del comercio

Un ejemplo simplificado. Dado:

  • series temporales de precios de los activos
  • distancias fijas para parar y apuntar.

Una función de estas entradas tiene dos posibles valores de salida: $1$ si es probable que el precio alcance el objetivo antes del stop y $0$ de lo contrario. Esta función se implementa mediante aprendizaje automático, por ejemplo, una red neuronal.

Para un objetivo y un stop razonables y del mismo tamaño, la tasa de ganancias factible será cercana a $\frac{1}{2}$ . La mayoría de las veces el resultado no es predecible y la opción correcta es no abrir una posición. De vez en cuando las probabilidades son ligeramente mejores que $\frac{1}{2}$ ; esto es cuando quiero que el algoritmo de salida de un $1$ . Recogiendo cerezas.

Al plantear esto como un clasificador binario, parece que el ampliamente utilizado pérdida de entropía cruzada binaria

  1. penaliza fuertemente las clasificaciones erróneas seguras
  2. recompensa débilmente ser legítimamente más confiado

y no es necesariamente apropiado en este caso.

Para ser entrenable mediante el descenso de gradiente estocástico, esta red neuronal necesita producir una salida continua $\in(0;1)$ y la función objetivo debe tener una derivada útil. Por eso, contar ganadores y perdedores no sirve de nada. La función objetivo debe sopesar de forma diferente las decisiones seguras y las menos seguras de la red.

¿Cómo lo afrontaría?

He aquí una pregunta similar probablemente mejor escrito.

0 votos

Esta pregunta parece contradictoria en su descripción. Por encima de la función tiene dos posibles valores de salida {0,1} - pero la función es una red neuronal, que normalmente, como usted afirma a continuación tiene una salida continua en (0,1). ¿Ha parametrizado su red neuronal para que la salida sea sólo {0,1} en la capa final, es eso un requisito?

0 votos

@Emma, gracias por los consejos. Es sólo un simple ResNet .

0 votos

@Attack68, en realidad es habitual tener una salida continua, el entrenamiento no sería factible de otra forma. Para la inferencia, la salida sólo se compara con el umbral.

7voto

TrXuk Puntos 81

El código siguiente está escrito en Mathematica Wolfram .

Por ejemplo, tenemos unos datos de entrenamiento. Y estamos tratando de predecir: largo (1) o corto (0).

SeedRandom[0];
n = 10000;
X = RandomReal[{-1, 1}, {n, 100, 5}];
Y = RandomInteger[{0, 1}, n];

net = NetChain\[
  {
   LongShortTermMemoryLayer\[64\],
   SequenceLastLayer\[\],
   ElementwiseLayer\[Ramp\],
   LinearLayer\[2\],
   SoftmaxLayer\[\]
   },
  "Input" -> {100, 5},
  "Output" -> NetDecoder\[{"Class", {0, 1}}\]
  \]

enter image description here

SeedRandom[0];
netT = NetTrain[
  net,
  X -> Y,
  All,
  LossFunction -> CrossEntropyLossLayer["Index"],
  BatchSize -> 64, MaxTrainingRounds -> 10, TargetDevice -> "GPU"
  ]

enter image description here

cm = ClassifierMeasurements[netT["TrainedNet"], X -> Y]

enter image description here

cm["ConfusionMatrixPlot"]

enter image description here

cm["Precision"]

<|0->0.569919,1->0.580981|>

cm["Recall"]

<|0->0.641173,1->0.506965|>

Ajuste del umbral

proba = netT["TrainedNet"][X, "Probabilities"];
proba0 = Lookup[proba, 0];
proba1 = Lookup[proba, 1];

PairedHistogram\[Pick\[proba0, Y, 0\], Pick\[proba0, Y, 1\]\]

enter image description here

Table[
  {
    Select[Pick[proba0, Y, 0], # >= i &] // Length,
    Select[Pick[proba0, Y, 1], # >= i &] // Length
    } // {i, ##, N[#[[1]]/(#[[1]] + #[[2]])]} &,
  {i, 0.5, 0.7, 0.01}
  ] // MatrixForm

enter image description here

PairedHistogram[Pick[proba1, Y, 1], Pick[proba1, Y, 0]]

enter image description here

Table[
  {
    Select[Pick[proba1, Y, 1], # >= i &] // Length,
    Select[Pick[proba1, Y, 0], # >= i &] // Length
    } // {i, ##, N[#[[1]]/(#[[1]] + #[[2]])]} &,
  {i, 0.5, 0.7, 0.01}
  ] // MatrixForm

enter image description here

Cálculo de las pérdidas y ganancias previstas

EV[p_] := p*80 - (1 - p)*100 - 4

Plot\[
 {
   Select\[Pick\[proba0, Y, 0\], # >= x &\] // Length,
   Select\[Pick\[proba0, Y, 1\], # >= x &\] // Length
   } // EV\[#\[\[1\]\]/(#\[\[1\]\] + #\[\[2\]\])\]\*(#\[\[1\]\] + #\[\[2\]\]) &,
 {x, 0.5, 0.7}
 \]

enter image description here

Plot[
 {
   Select[Pick[proba1, Y, 1], # >= x &] // Length,
   Select[Pick[proba1, Y, 0], # >= x &] // Length
   } // EV[#[[1]]/(#[[1]] + #[[2]])]*(#[[1]] + #[[2]]) &,
 {x, 0.5, 0.7}
 ]

enter image description here

0 votos

¡Impresionante! Así que su mensaje es - "la pérdida de entropía cruzada lo hará muy bien"?

1 votos

@Xpector ¡Exactamente! Pero después de entrenar la red, deberías ajustar manualmente el umbral óptimo para operar. Depende de su EV. En mi ejemplo: 80 puntos es el beneficio medio, -100 es la pérdida media, -4 son las comisiones.

4voto

Simon Puntos 106

Mientras leía esto me di cuenta de que sería una aplicación muy buena para el metaetiquetado. La idea detrás del meta-etiquetado es construir un modelo secundario que determine si las señales {0, 1} del modelo primario son correctas o no.

De este modo, el modelo secundario emite un valor entre 0 y 1 que indica el grado de confianza que tiene en que el modelo primario sea correcto o no. Este resultado se puede pasar a un algoritmo de tamaño de apuesta que asigna el resultado a un tamaño de posición. La idea central es que queremos tomar posiciones grandes en operaciones que probablemente sean ciertas y posiciones más pequeñas en operaciones en las que no estamos seguros.

Para dar alguna intuición detrás de esto. Tomemos como ejemplo una estrategia de seguimiento de tendencia. Las estrategias de cruce de medias móviles son conocidas por su bajo rendimiento cuando el mercado se mueve lateralmente. La naturaleza entrecortada causa muchas comisiones de transacción.

El modelo secundario detectará que bajo ciertas condiciones de volatilidad y quizás una baja auto correlación, estamos en una tendencia lateral y por lo tanto la señal del modelo primario (un 1 en este caso) es probable que sea falsa y por lo tanto le asigna una baja probabilidad.

Encontrará más información sobre esta técnica en el capítulo 3 de Avances en aprendizaje automático financiero . Aquí encontrará un ejemplo de metaetiquetado Metaetiquetado de datos MNIST .

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X