Admite regresión vectorial para predicción de series de tiempo multivariadas


22

¿Alguien ha intentado la predicción de series de tiempo utilizando la regresión de vectores de soporte?

Entiendo las máquinas de vectores de soporte y entiendo parcialmente la regresión de vectores de soporte, pero no entiendo cómo se pueden usar para modelar series de tiempo, especialmente series de tiempo multivariadas.

He tratado de leer algunos documentos, pero son de un nivel demasiado alto. ¿Alguien puede explicar en términos simples cómo funcionarían, especialmente en relación con series de tiempo multivariadas?

EDITAR: Para elaborar un poco, déjenme intentar explicarlo con un ejemplo de precio de acciones.

Digamos que tenemos precios de acciones por N días. Luego, para cada día podríamos construir un vector de características, que, en un caso simple, podría ser el precio del día anterior y el precio del día actual. La respuesta para cada vector de características sería el precio del día siguiente. Por lo tanto, dado el precio de ayer y el precio de hoy, el objetivo sería predecir el precio de los próximos días. Lo que no entiendo es, digamos que tenemos datos de capacitación de seis meses, ¿cómo le daría mayor énfasis a los vectores de características más recientes?


¿Puedes publicar los documentos a los que te refieres?
Ram Ahluwalia

1
Predicción de series de tiempo con una máquina de regresión de vectores de soporte local, Rodrigo Fernández, svms.org/regression/Fern.pdf Regresión de vectores de soporte para pronósticos de series de tiempo financieras, Wei Hao y Songnian Yu, springerlink.com/index/946802600u4552m8.pdf
raconteur

Respuestas:


18

En el contexto de la regresión de vectores de soporte, el hecho de que sus datos sean una serie de tiempo es principalmente relevante desde un punto de vista metodológico; por ejemplo, no puede hacer una validación cruzada k-fold, y debe tomar precauciones cuando ejecute backtests / simulaciones.

Básicamente, la regresión vectorial de soporte es una técnica de regresión discriminativa muy parecida a cualquier otra técnica de regresión discriminativa. Le da un conjunto de vectores de entrada y respuestas asociadas, y se ajusta a un modelo para tratar de predecir la respuesta dado un nuevo vector de entrada. Kernel SVR, por otro lado, aplica una de las muchas transformaciones a su conjunto de datos antes del paso de aprendizaje. Esto le permite recoger tendencias no lineales en el conjunto de datos, a diferencia de, por ejemplo, la regresión lineal. Un buen núcleo para comenzar probablemente sería el RBF gaussiano: tendrá un hiperparámetro que puede ajustar, así que pruebe un par de valores. Y luego, cuando tenga una idea de lo que está sucediendo, puede probar otros núcleos.

Con una serie temporal, un paso de importación es determinar cuál será su "vector de características" ; cada se llama una "característica" y se puede calcular a partir de datos presentes o pasados, y cada , la respuesta, será el cambio futuro durante un período de tiempo de lo que intente predecir. Haga un inventario por ejemplo. Tienes precios con el tiempo. Tal vez sus características son a.) El diferencial 200MA-30MA yb.) La volatilidad de 20 días, por lo que calcula cada en cada punto en el tiempo, junto con , el (digamos) el rendimiento de la semana siguiente en ese stock . Por lo tanto, su SVR aprende cómo predecir el retorno de la semana siguiente en función de la propagación actual de MA y el volumen de 20 días. (Esta estrategia no funcionará, así que no lo hagasXXyoyyoXtyt

Si los documentos que leyó fueron demasiado difíciles, probablemente no quiera intentar implementar un SVM usted mismo, ya que puede ser complicado. IIRC hay un paquete "kernlab" para R que tiene una implementación de Kernel SVM con varios núcleos incluidos, por lo que proporcionaría una forma rápida de comenzar a funcionar.


@ Jason, gracias por la respuesta. Estoy confundido acerca de cómo hacer que los datos antiguos sean menos importantes durante el entrenamiento, es decir, cómo dar al último ejemplo 100 ejemplos, en lugar de los últimos 10,000 ejemplos. Además, tengo algo de experiencia trabajando con SVM en Python, así que estoy buscando usar eso.
raconteur

Realmente no puede utilizar todos los datos pasados ​​como su vector de características; tienes que transformarlo de alguna manera en una característica significativa. Por ejemplo, considere promediar los últimos 20 valores de la serie de tiempo, o el valor actual de la serie dividido por el promedio móvil. Estas son características que indican en un número simple una característica de importación del conjunto de datos. Presente (digamos) 10 características que cree que serán lo más predictivas posible. Por lo tanto, para hacer que los datos antiguos sean menos importantes, los haría menos importantes al definir sus características (es decir, usar promedios móviles más cortos).
William

@ Jason, déjame intentar explicarte con un ejemplo del precio de las acciones. Digamos que tenemos precios de acciones por N días. Luego, para cada día podríamos construir un vector de características, que, en un caso simple, podría ser el precio del día anterior y el precio del día actual. La respuesta para cada vector de características sería el precio del día siguiente. Por lo tanto, dado el precio de ayer y el precio de hoy, el objetivo sería predecir el precio de los próximos días. Lo que no entiendo es, digamos que tenemos datos de capacitación de seis meses, ¿cómo le daría mayor énfasis a los vectores de características más recientes?
raconteur

2
Oh, ya veo lo que quieres decir ahora. La respuesta corta es, no puede, al menos no sin reingeniería del SVM para comprender la noción de actualidad. Un SVM se define en términos de pares xy, no pares xy ordenados, por lo que la función objetivo que minimiza es una función de dichos pares. OTOH, puede ejecutar varios SVM por separado, uno con el mes pasado, uno con el año pasado y otro con los últimos dos años, y luego hacer un promedio ponderado de las respuestas que obtiene en función de su preferencia personal por las recientes vs . datos antiguos (por ejemplo, 0.7 * mes pasado + 0.2 * año pasado + 0.1 * últimos 2 años).
William

@William ... ¿tiene alguna recomendación sobre qué algoritmos de aprendizaje automático serían mejores para la predicción de series temporales (el mismo problema que preguntó el raconteur) que no sea SVM? ¿La respuesta sería diferente cuando se aplica en un dominio diferente? por ejemplo, precio de las acciones frente a la previsión cadena de suministro (previsión de la demanda de los productos que vendemos) ..
Lam

1

Mi respuesta personal a la pregunta que me hicieron es "sí". Puede ver como un profesional o una estafa que hay una infinidad de opciones de características para describir el pasado. Intente elegir características que correspondan a cómo podría describir de manera concisa a alguien lo que el mercado acaba de hacer [por ejemplo, "el precio está en 1.4 "no le dice nada si no está relacionado con algún otro número]. En cuanto al objetivo de la SVM, los más simples son la diferencia de precios y la relación de precios durante dos días consecutivos. Como estos corresponden directamente al destino de un comercio hipotético, parecen buenas opciones.

Tengo que estar en desacuerdo pedagógicamente con la primera declaración de Jason: puede hacer una validación cruzada de k-fold en situaciones como la descrita por raconteur y es útil (con la condición de que lo explique). La razón por la que es estadísticamente válido es que las instancias del objetivo en este caso no tienen una relación intrínseca: son diferencias o proporciones disjuntas. Si opta por utilizar los datos a una resolución más alta que la escala del objetivo, habría motivos para preocuparse de que aparezcan instancias correlacionadas en el conjunto de entrenamiento y el conjunto de validación, lo que comprometería la validación cruzada (por el contrario, al aplicar el SVM no tendrá instancias disponibles cuyos objetivos se superpongan con el que le interesa).

Lo que sí reduce la efectividad de la validación cruzada es si el comportamiento del mercado está cambiando con el tiempo. Hay dos formas posibles de lidiar con esto. La primera es incorporar el tiempo como una característica (no he encontrado esto muy útil, quizás porque los valores de esta característica en el futuro son todos nuevos). Una alternativa bien motivada es usar la validación de avance (lo que significa probar su metodología en una ventana de tiempo deslizante y probarla en el período justo después de esta ventana. Si el comportamiento cambia con el tiempo, el dicho atribuido a Niels Bohr " La predicción es muy difícil, especialmente sobre el futuro "es especialmente apropiado. Existe cierta evidencia en la literatura de que el comportamiento de los mercados financieros cambia con el tiempo, generalmente volviéndose más eficiente,

¡Buena suerte!


Velcome a nuestro sitio!
kjetil b halvorsen

0

Hay un ejemplo de Quantum Financier para usar un SVM para pronosticar series financieras. Se podría convertir fácilmente de un sistema de clasificación (largo / corto) a un sistema de regresión.


1
QUERIDO DIOS POR FAVOR, nadie use esa estrategia! Así es como Wall St fuma a los principiantes :( El truco más antiguo del libro es adaptar un modelo estadístico utilizando algunos análisis técnicos básicos como RSI para que los novatos piensen que han encontrado oro.
William

1
@Jason de la publicación original "También quiero dejar en claro que no creo que este sea un buen sistema". Sin embargo, es un buen ejemplo de cómo ajustar una máquina de vectores de soporte a una serie de tiempo.
Zach
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.