Predicción de mercado basada en indicadores macroeconómicos

 

Entonces, la tarea es predecir el índice S&P 500 en función de los indicadores económicos disponibles.

Paso 1: Encuentra los indicadores. Los indicadores están disponibles públicamente aquí: http://research.stlouisfed.org/fred2/ Hay 240.000 de ellos. El más importante es el crecimiento del PIB. Este indicador se calcula trimestralmente. De ahí nuestro paso - 3 meses. Todos los indicadores para un período más corto se recalculan para un período de 3 meses, el resto (anual) se descarta. También descartamos indicadores para todos los países excepto Estados Unidos e indicadores que no tienen un historial profundo (al menos 15 años). Entonces, con un trabajo minucioso, filtramos un montón de indicadores y obtenemos alrededor de 10 mil indicadores. Formulamos una tarea más específica de predecir el índice S&P 500 uno o dos trimestres adelante, teniendo disponibles 10 mil indicadores económicos con un período trimestral. Hago todo en MatLab, aunque es posible en R.

Paso 2: Convertir todos los datos a formato estacionario por diferenciación y normalización. Hay muchos métodos aquí. Lo principal es que los datos originales se pueden restaurar a partir de los datos convertidos. Sin estacionariedad, ningún modelo funcionará. La serie S&P 500 antes y después de la conversión se muestra a continuación.

Paso 3: Elige un modelo. Tal vez una red neuronal. Se puede hacer una regresión lineal multivariable . Puede hacer una regresión polinomial de múltiples variables. Después de probar modelos lineales y no lineales, llegamos a la conclusión de que los datos tienen tanto ruido que no tiene sentido ingresar a un modelo no lineal. El gráfico y(x), donde y = S&P 500 yx = uno de 10 mil indicadores, es una nube casi circular. Así, formulamos la tarea aún más específicamente: predecir el índice S&P 500 con uno o dos trimestres de anticipación, teniendo 10 mil indicadores económicos con un período trimestral, usando regresión lineal multivariable.

Paso 4: Seleccionamos los indicadores económicos más importantes de 10 mil (reducir la dimensión del problema). Este es el paso más importante y difícil. Digamos que tomamos la historia del S&P 500 hasta 30 años (120 trimestres). Para representar el S&P 500 como una combinación lineal de indicadores económicos de varios tipos, basta con tener 120 indicadores para describir con precisión el S&P 500 durante estos 30 años. Además, los indicadores pueden ser absolutamente cualquiera para crear un modelo tan preciso de 120 indicadores y 120 valores S&P 500. Por lo tanto, debe reducir la cantidad de entradas por debajo de la cantidad de valores de función descritos. Por ejemplo, estamos buscando los 10-20 indicadores de entrada más importantes. Tales tareas de describir datos con una pequeña cantidad de entradas seleccionadas de una gran cantidad de bases candidatas (diccionario) se denominan codificación dispersa.

Hay muchos métodos para seleccionar entradas de predictor. Los probé todos. Aquí están los dos principales:

  1. Clasificamos los 10.000 datos por su poder predictivo S&P 500. El poder predictivo se puede medir por coeficiente de correlación o información mutua.
  2. Revisamos los 10 mil indicadores en la parte inferior y elegimos el que dio el modelo lineal y_mod = a + b*x1 que describe el S&P 500 con el error más pequeño. Luego seleccionamos la segunda entrada nuevamente enumerando los 10 mil -1 indicadores restantes para que describa el resto y - y_mod = c + d*x2 con el menor error. Etc. Este método se llama regresión por pasos o búsqueda de correspondencia.

Aquí están los 10 indicadores principales con el coeficiente de correlación más alto con el S&P 500:

ID de serie Retraso corr. Información mutua
'PPICRM' 2 0.315 0.102
'CWUR0000SEHE' 2 0.283 0.122
'CES1021000001' uno 0.263 0.095
'B115RC1Q027SBEA' 2 0.262 0.102
'CES1000000034' uno 0.261 0.105
'A371RD3Q086SBEA' 2 0.260 0.085
'B115RC1Q027SBEA' uno 0.256 0.102
'CUUR0000SAF111' uno 0.252 0.117
'CUUR0000SEHE' 2 0.251 0.098
'USMINE' uno 0.250 0.102

Aquí están los 10 indicadores principales con la mayor información mutua con el S&P 500:

ID de serie Retraso corr. Información mutua
'CPILEGSL' 3 0.061 0.136
'B701RC1Q027SBEA' 3 0.038 0.136
'CUSR0000SAS' 3 0.043 0.134
'GDPPOT' 3 0.003 0.134
'NGDPPOT' 5 0.102 0.134
'OTHSEC' 4 0.168 0.133
'LNU01300060' 3 0.046 0.132
'LRAC25TTUSM156N' 3 0.046 0.132
'LRAC25TTUSQ156N' 3 0.046 0.131
'CUSR0000SAS' uno 0.130 0.131

El retraso es el retraso de la serie de entrada con respecto a la serie simulada del S&P 500. Como se puede ver en estas tablas, los diferentes métodos para elegir las entradas más importantes dan como resultado diferentes conjuntos de entradas. Dado que mi objetivo final es minimizar el error del modelo, elegí el segundo método de selección de entrada, es decir enumeración de todas las entradas y selección de la entrada que dio el menor error.

Paso 5: Elija un método para calcular el error y los coeficientes del modelo. El método más simple es el método COEX, razón por la cual la regresión lineal que usa este método es tan popular. El problema con el método RMS es que es sensible a valores atípicos, es decir estos valores atípicos afectan significativamente los coeficientes del modelo. Para reducir esta sensibilidad se puede utilizar la suma de los valores absolutos de los errores en lugar de la suma de los cuadrados de los errores, lo que conduce al método de mínimos módulos (MLM) o regresión robusta. Este método no tiene una solución analítica para los coeficientes del modelo a diferencia de la regresión lineal. Por lo general, los módulos se reemplazan por funciones de aproximación suaves/diferenciables y la solución se lleva a cabo mediante métodos numéricos y lleva mucho tiempo. Probé ambos métodos (regresión ajustada y MHM) y no noté mucha ventaja de MHM. En lugar de MHM, tomé un desvío. En el segundo paso de obtener datos estacionarios al diferenciarlos, agregué una operación de normalización no lineal. Es decir, la serie original x[1], x[2], ... x[i-1], x[i] ... primero se convierte en una serie de diferencias x[2]-x[1] . .. x [i]-x[i-1] ... y luego cada diferencia se normaliza reemplazándola con sign(x[i]-x[i-1])*abs(x[i]-x[ i-1] )^u, donde 0 < u < 1. Para u=1, obtenemos el método COSE clásico con su sensibilidad a los valores atípicos. En u=0, todos los valores de la serie de entrada se reemplazan por valores binarios +/-1 casi sin valores atípicos. Para u=0.5, obtenemos algo cercano a MNM. El valor óptimo de u se encuentra entre 0,5 y 1.

Cabe señalar que uno de los métodos populares para convertir datos a una forma estacionaria es reemplazar los valores de la serie con la diferencia en los logaritmos de estos valores, es decir log(x[i]) - log(x[i-1]) o log(x[i]/x[i-1]). La elección de tal transformación es peligrosa en mi caso, ya que el diccionario de 10 mil entradas tiene muchas filas con cero y valores negativos. El logaritmo también tiene el beneficio de reducir la sensibilidad del método RMS a los valores atípicos.Esencialmente, mi función de transformación sign(x)*|x|^u tiene el mismo propósito que log(x), pero sin los problemas asociados con cero y valores negativos.

Paso 6: Calcule la predicción del modelo sustituyendo los datos de entrada nuevos y calculando la salida del modelo utilizando los mismos coeficientes del modelo que se encontraron mediante regresión lineal en los segmentos de historial anteriores. Aquí es importante tener en cuenta que los valores trimestrales de los indicadores económicos y el S&P 500 vienen casi simultáneamente (con una precisión de 3 meses). Por lo tanto, para predecir el S&P 500 para el próximo trimestre, el modelo debe construirse entre el valor trimestral actual del S&P 500 y las entradas retrasadas al menos 1 trimestre (Lag>=1). Para predecir el S&P 500 con un trimestre de anticipación, el patrón debe construirse entre el valor trimestral actual del S&P 500 y las entradas retrasadas al menos 2 trimestres (Lag>=2). Etc. La precisión de las predicciones disminuye significativamente con el aumento de la demora superior a 2.

Paso 7: Comprueba la precisión de las predicciones sobre el historial anterior. La técnica original descrita anteriormente (colocar cada entrada en el historial anterior, elegir la entrada que da el MSD más pequeño y calcular la predicción a partir del valor nuevo de esa entrada) produjo una predicción MSD que era incluso peor que las predicciones aleatorias o nulas. Me hice esta pregunta: ¿por qué una entrada que encaja bien en el pasado debería tener una buena capacidad de predicción para el futuro? Tiene sentido seleccionar las entradas del modelo en función de su error de predicción anterior, en lugar de basarse en el error de regresión más pequeño de los datos conocidos.

Al final, mi modelo se puede describir paso a paso así:

  1. Subiendo datos económicos de stlouisfed (alrededor de 10 mil indicadores).
  2. Preobrazeum datos a una forma estacionaria y normalizar.
  3. Elegimos un modelo lineal del índice S&P 500, resuelto analíticamente por el método RMS (regresión lineal).
  4. Elegimos la duración del historial (1960 - Q2 2015) y lo dividimos en un segmento de entrenamiento (1960 - Q4 1999) y un segmento de prueba (Q1 2000 - Q2 2015).
  5. Comenzamos las predicciones desde 1960 + N + 1, donde N*4 es el número inicial de valores trimestrales conocidos del S&P 500.
  6. Sobre los primeros N datos, se construye un modelo lineal y_mod = a + b*x para cada indicador económico, donde y_mod es el modelo S&P 500 yx es uno de los indicadores económicos.
  7. Predecimos N + 1 barra con cada modelo.
  8. Calculamos los errores de predicción de N + 1 barras por cada modelo. Recordamos estos errores.
  9. Aumentamos el número de valores conocidos de S&P 500 en 1, es decir N + 1, y repita los pasos 6-9 hasta llegar al final del segmento de entrenamiento (Q4 1999). En este paso, hemos almacenado errores de predicción desde 1960 + N +1 hasta el cuarto trimestre de 1999 para cada indicador económico.
  10. Comenzamos a probar el modelo en el segundo período de la historia (Q1 2000 - Q2 2015).
  11. Para cada una de las 10 mil entradas, calculamos el error estándar de las predicciones para 1960 - Q4 1999.
  12. De 10 mil entradas, seleccionamos la que tuvo la predicción de RMS más baja para 1960 - Q4 1999.
  13. Construimos un modelo lineal y_mod = a + b*x para cada indicador económico para 1960 - Q4 1999.
  14. Predecimos Q1 2000 por cada modelo.
  15. La predicción de la entrada seleccionada con el RMS más bajo de predicciones para el intervalo de tiempo anterior (1960 - Q4 1999) se elige como nuestra predicción principal del Q1 2000.
  16. Calculamos los errores de predicción de todas las entradas para el primer trimestre de 2000 y los agregamos al RMS de las mismas entradas para el período de tiempo anterior (1960 - cuarto trimestre de 1999).
  17. Pase al segundo trimestre de 2000 y repita los pasos 12 a 17 hasta llegar al final del área de prueba (segundo trimestre de 2015) con el valor desconocido del S&P 500, cuya predicción es nuestro objetivo principal.
  18. Acumulamos errores de predicción para Q1 2000 - Q4 2014 hechos por entradas con la desviación estándar más baja de predicciones en los segmentos anteriores. Este error (err2) es nuestro modelo de error de predicción fuera de muestra.

En resumen, la elección de un predictor depende de su RMS de predicciones anteriores del S&P 500. No hay que mirar hacia el futuro. El predictor puede cambiar con el tiempo, pero al final del segmento de prueba, básicamente deja de cambiar. Mi modelo seleccionó PPICRM con un retraso de 2 trimestres como la primera entrada para predecir el segundo trimestre de 2015. A continuación se muestra la regresión lineal del S&P 500 con la entrada PPICRM(2) seleccionada para 1960 - cuarto trimestre de 2014. Círculos negros - regresión lineal. Círculos multicolores: datos históricos de 1960 - Q4 2014. El color del círculo indica la hora.


Predicciones estacionarias del S&P 500 (línea roja):

Predicciones del S&P 500 en forma cruda (línea roja):

El gráfico muestra que el modelo predice el crecimiento del S&P 500 en el segundo trimestre de 2015. Agregar una segunda entrada aumenta el error de predicción:

1 err1=0,900298 err2=0,938355 PPICRM (2)

2 err1=0.881910 err2=0.978233 PERMISO1 (4)

donde err1 es el error de regresión. Es obvio que decrece a partir de la adición de una segunda entrada. err2 es el error de predicción de la raíz cuadrada media dividido por el error de predicción aleatorio. Es decir, err2>=1 significa que la predicción de mi modelo no es mejor que las predicciones aleatorias. err2<1 significa que la predicción de mi modelo es mejor que las predicciones aleatorias.

PPICRM = Índice de Precios al Productor: Materiales Crudos para Procesamiento Posterior

PERMISO1 = Nuevas Unidades de Vivienda Privada Autorizadas por Permisos de Construcción - En Estructuras con 1 Unidad

El modelo descrito anteriormente se puede reformular de esta manera. Reunimos a 10 mil economistas y les pedimos que pronostiquen el mercado para el próximo trimestre. Cada economista viene con su propia predicción. Pero en lugar de elegir una predicción basada en la cantidad de libros de texto que han escrito o la cantidad de premios Nobel que han ganado en el pasado, esperamos unos años recopilando sus predicciones. Después de un número significativo de predicciones, vemos qué economista es más preciso y comenzamos a creer sus predicciones hasta que algún otro economista lo supera en precisión.

Federal Reserve Economic Data - FRED - St. Louis Fed
Federal Reserve Economic Data - FRED - St. Louis Fed
  • fred.stlouisfed.org
Download, graph, and track 240,000 economic time series from 77 sources.
 
gpwr:
Continuará...
¿No es vergonzoso que el gobierno de EE.UU. en general y el Comité de Mercado Abierto en particular hayan sido sospechosos en repetidas ocasiones de falsificar y manipular las estadísticas macroeconómicas del mercado laboral y del PIB de EE.UU. con el fin de influir en los mercados financieros?
 
Demi:
¿No es confuso que el gobierno de EE.UU. en general y el Comité de Mercado Abierto en particular hayan sido sospechosos en repetidas ocasiones de falsificar y manipular las estadísticas macroeconómicas del mercado laboral y del PIB de EE.UU. con el fin de influir en los mercados financieros?
Sí, es vergonzoso. También es desconcertante que los datos publicados se ajusten muchas veces después de su publicación. Pero, por otro lado, los operadores reaccionan a los datos que les proporciona el gobierno de EE.UU., moviendo el mercado en una dirección u otra, tanto si esos datos son falsos como si son incompletos o prematuros. Por tanto, la técnica de predicción del mercado basada en estos datos debería, en principio, funcionar.
 
gpwr:
Sí, es confuso. También es confuso el hecho de que los datos publicados se ajustan muchas veces después de su publicación. Pero, por otro lado, los operadores reaccionan a los datos que les da el gobierno de EE.UU., moviendo el mercado en una dirección u otra, tanto si esos datos son falsos como si son incompletos o prematuros. Por tanto, la técnica de predicción del mercado basada en estos datos debería, en principio, funcionar.

¿Sólo le interesa el S&P o sólo lo toma como ejemplo?

Es que el S&P tiene un patrón de movimiento peculiar, no muy diferente al de la relación de divisas.

 
Urain:

¿Sólo le interesa el S&P o sólo lo toma como ejemplo?

Es que el S&P tiene un patrón de movimiento peculiar, no muy diferente de la relación entre las divisas.

Se toma como ejemplo por la facilidad de encontrar datos de entrada (disponibles públicamente). Cualquier cosa puede ser modelada de esta manera: la economía rusa, los tipos de cambio, etc. Los precios del mercado son los más difíciles de predecir porque hay mucho ruido en ellos. Predecir los procesos físicos es mucho más fácil.
 
gpwr:
Sí, es confuso. También es confuso el hecho de que los datos publicados se ajustan muchas veces después de su publicación. Pero, por otro lado, los operadores reaccionan a los datos que les da el gobierno de EE.UU., moviendo el mercado en una dirección u otra, tanto si esos datos son falsos como si son incompletos o prematuros. Por tanto, la técnica de predicción del mercado basada en estos datos debería, en principio, funcionar.

Bien, echemos un vistazo. Yo también lo he hecho.

Una prueba de insinuación persistente

 
gpwr:

Así pues, la tarea de predecir el índice S&P 500 a partir de los datos económicos disponibles.

Un tema muy interesante. Intenté hacer indicadores basados en el archivo de datos: empleo, construcción de viviendas nuevas, ventas de viviendas nuevas, etc. Y ya sabes, puedes ver a simple vista que algunos datos tienen cierta correlación con la bolsa. Pero no parece haber correlación con el mercado de divisas. He utilizado algunas estadísticas básicas de Estados Unidos.

¿No cree que ha elegido demasiados tipos de datos? En mi opinión, hay que excluir de los datos que valen la pena lo que no es importante, lo que afecta al mercado.

Sin embargo, no estoy familiarizado con el análisis neural. He empezado a leer sobre ello, pero no he encontrado ninguna explicación clara de su funcionamiento.

 
El algoritmo de regresión ayudará a predecir cualquier indicador a partir de cualquier dato, aunque no haya una relación evidente entre ellos
 
forexman77:

Es un tema bastante interesante. Intenté hacer indicadores basados en el archivo de datos: empleo, construcción de viviendas nuevas, ventas de viviendas nuevas, etc. Y ya sabes, puedes ver a simple vista que algunos datos tienen cierta correlación con la bolsa. Pero no parece haber correlación con el mercado de divisas. He utilizado algunas estadísticas básicas de Estados Unidos.

¿No cree que ha elegido demasiados tipos de datos? En mi opinión, hay que excluir de los datos que valen la pena los que afectan al mercado.


La cantidad grande o pequeña de datos de entrada es relativa.

La otra es más importante.

Todas las entradas se dividen en dos categorías:

  • los que tienen un impacto en la variable objetivo
  • los que no tienen influencia o tienen poca influencia.

Utilizo deliberadamente la palabra influencia en lugar de correlación. La correlación es una herramienta vacía porque la correlación siempre tiene algún valor y ningún valor es NA, lo que es fundamental para determinar el impacto de los datos brutos en la variable objetivo.

Las variables que no tienen (tienen un impacto bajo - nótese que es una característica cualitativa) son ruido para determinar el efecto sobre la variable objetivo. El escollo aquí es que al comenzar con una cantidad no determinada algorítmicamente, este ruido "obstruye" las variables importantes y entonces las variables "importantes" no pueden ser extraídas algorítmicamente de esta cantidad agregada.

Por lo tanto, hay que mirar manualmente toda la lista de variables de entrada y decidir intuitivamente, o basándose en alguna otra consideración, que "es probable que esta variable de entrada afecte y esta otra no".

Conozco varias docenas de algoritmos para determinar la importancia de las variables, que he probado en un conjunto de mi documento y libro (hasta 100 variables de entrada). El resultado es exactamente el descrito. Seleccioné manualmente alguna lista, y luego la filtré con el algoritmo y obtuve la lista. Y el valor de tal lista es fundamental: los modelos que utilizan tal conjunto de datos de entrada "influyentes" (utilizando 3 tipos diferentes de modelos) NO tienen la propiedad de sobreaprendizaje, que es el principal problema. El sobreajuste es la principal consecuencia de utilizar datos de entrada "ruidosos".

PS.

La estacionariedad no juega ningún papel en mis modelos, que son randomForest, ada, SVM.

 
gpwr:

...

.... Ningún modelo funcionará sin estacionalidad.

...

La exigencia de estacionariedad es muy rígida y totalmente injustificada.

.

Y los modelos "no estacionarios" funcionan bien ;)

 
transcendreamer:
Un algoritmo de regresión puede predecir cualquier indicador a partir de cualquier dato, aunque no exista una relación explícita entre ellos
Esto puede decirse de cualquier modelo, no sólo de regresión sino también de modelos neuronales, ARMA y otros. Si no hay relación entre las entradas y las salidas, cualquier modelo generará una predicción, sólo que inexacta.
Razón de la queja: