- Hoy en día es casi imposible entrar en una conferencia de trading cuantitativo sin ser bombardeado con panfletos de proveedores de datos y mesas redondas sobre el sentimiento de las noticias. Nuestro equipo de QTS ha hecho un verdadero esfuerzo en el pasado tratando de extraer valor de dichos datos, con resultados muy pobres. Pero el dilema central de la prueba de datos alternativos pre-procesados es este: ¿la falta de resultados interesantes en este campo se debe a la falta de alfa en dichos datos, o es defectuoso el pre-procesamiento de datos por parte del proveedor?
- Artículo publicado en Hispatrading 59.
Como muchos traders cuantitativos o quants, no tenemos tiempo para construir nosotros mismos un motor de procesamiento de lenguaje natural para convertir las noticias en puntuaciones de sentimiento y relevancia. Por eso, confiamos en un proveedor de datos para que haga el trabajo por nosotros. El hecho de que no hubiéramos podido extraer hasta entonces mucho alfa de los proveedores usados hasta entonces no significa que el sentimiento de las noticias sea, en general, inútil.
Así que fue con cierta emoción que escuchamos hace unos años que Two Sigma, el fondo de cobertura de más de 42 mil millones de dólares, estaba patrocinando un competición de sentimiento de noticias en Kaggle, facilitando datos de sentimiento gratuitos de Thomson-Reuters para su prueba. Esos datos comenzaron a partir de 2007 y cubren alrededor de 2.000 acciones estadounidenses (aquellas con un volumen de trading diario en dólares de aproximadamente 1 millón de dólares o más), y se complementan con el precio y el volumen de esas acciones proporcionadas por Intrinio. Así, podremos buscar alfa de una fuente líder en la industria de datos de sentimiento de noticias.
El criterio de evaluación de la competencia es el ratio Sharpe de una cartera de posiciones en bolsa estilo market neutral o neutral de mercado construida por el usuario durante 10 días. (Por neutrales de mercado, nos referimos a beta cero. Aunque esa no es la forma en que lo dijo Two Sigma, se puede demostrar estadística y matemáticamente que su criterio es equivalente a esta idea.) Este es convenientemente el ratio Sharpe del «alfa», o exceso de rendimiento, de una estrategia de trading que utiliza el sentimiento de las noticias.
Puede parecer sencillo generar una estrategia de trading simple para probar el alfa con puntuaciones de sentimiento de noticias pre-procesadas, pero esta prueba fue inusualmente engorrosa, lo que hizo que llevara tiempo. Veamos algunas quejas comunes de los usuarios de Kaggle. Antes de nada, tenemos que decir que, efectivamente comprobamos que estas quejas son una realidad:
- Como a nadie se le permite descargar los datos de noticias en sus propios ordenadores para su análisis, la investigación solo se puede realizar a través de Jupyter Notebook que se ejecuta en los servidores de Kaggle. Como cualquiera que haya probado Jupyter Notebook sabe, es una gran plataforma de colaboración y presentación en tiempo real, pero una plataforma de depuración muy difícil de manejar
- Jupyter Notebook no solo es una herramienta que deja mucho que desear al realizar una investigación eficiente para el desarrollo de software, sino que solo se nos permite usar 4 CPU y una cantidad muy limitada de memoria para la investigación. El acceso a la GPU está bloqueado, así que buena suerte ejecutando tus modelos de Deep Learning o aprendizaje profundo. Incluso el simple pre-procesamiento de datos mató nuestros núcleos (debido a problemas de memoria) tantas veces que puso nuestra paciencia al límite.
- Kaggle mata un núcleo si se deja inactivo durante unas horas. Buena suerte entrenando un modelo de aprendizaje automático de la noche a la mañana y no levantarse a las 3 a.m. para guardar los resultados justo a tiempo.
- No se puede cargar ningún dato suplementario en el núcleo. Olvídate de usar tu índice de mercado favorito como entrada o de cubrir tu cartera con tu ETP favorito.
- No hay una «base de datos maestra de valores» para especificar un identificador único para cada empresa y vincular los datos de noticias con los datos de precios.
El último punto requiere cierta elaboración. Los datos de precios utilizan dos identificadores para una empresa, assetCode y assetName, ninguno de los cuales se puede utilizar como su identificador único. Un nombre de activo, como Alphabet, puede asignarse a múltiples códigos de activos como GOOG.O y GOOGL.O. Necesitamos hacer un seguimiento de GOOG.O y GOOGL.O por separado porque tienen diferente historial de precios. Esto presenta dificultades que no están presentes en bases de datos como CRSP, y requiere que diseñemos nuestro propio algoritmo para crear un identificador único. Lo hicimos averiguando para cada nombre de activo si los historiales de sus múltiples códigos de activo se superpusieron en el tiempo. Si es así, tratamos cada código de activo como un identificador único diferente. Si no, entonces acabamos de usar el último código de activo conocido como identificador único. En este último caso, también comprobamos que «unir» los múltiples códigos de activos tenía sentido al comprobar que la brecha entre el final de uno y el comienzo del otro era pequeña, y que los precios tenían sentido. Con solo alrededor de 150 casos, todos estos podrían ser revisados externamente. Por otro lado, los datos de noticias solo tienen assetName como identificador único, ya que presumiblemente diferentes clases de acciones como GOOG.O y GOOGL.O se ven afectadas por las mismas noticias en Alphabet. Por lo tanto, cada noticia se asigna potencialmente a múltiples historiales de precios.
Los datos de precios también tienen bastante ruido, y los los usuarios de Kaggle pasaron mucho tiempo reemplazando los malos datos por otros buenos de fuentes externas. (Como se señaló anteriormente, esto no se puede hacer de forma algorítmica, ya que los datos no se pueden descargar ni cargar en el núcleo. El lento proceso manual de corrección de los datos incorrectos parecía diseñado para torturar a los participantes.) Es más difícil determinar si los datos de las noticias contenían datos malos, pero al menos, los gráficos de series temporales de las estadísticas de algunas de las características importantes del sentimiento de las noticias no revelaron interrupciones estructurales (a diferencia de las de otro proveedor que probamos anteriormente).
Para evitar el exceso de ajuste, primero probamos las dos características numéricas de noticias más obvias: Sentimiento y Relevancia. El primero varía de -1 a 1 y el segundo de 0 a 1 para cada noticia. La forma más sencilla y sensata de combinarlos en una sola característica es multiplicarlos juntos. Pero dado que puede haber muchas noticias para una acción por día, y solo estamos haciendo una predicción una vez al día, necesitamos alguna forma de añadir esta característica en uno o más días. Calculamos un promedio móvil simple de esta característica durante los últimos 5 días (5 es el único parámetro de este modelo, optimizado sobre los datos de entrenamiento de 20070101 a 20141231). Por último, el modelo predictivo también es tan simple como podemos imaginar: si la media móvil es positiva, compre la acción y hágalo en corto si es negativa. La asignación de capital en todas las señales de trading es uniforme. Como mencionamos anteriormente, el criterio de evaluación de esta competencia significa que tenemos que entrar en tales posiciones en el mercado abierto el día t+1 después de que todos los datos de sentimiento de las noticias para el día t se conocieran a medianoche (en la zona horaria UTC). La posición tiene que mantenerse durante 10 días de negociación, y salir en el mercado abierto el día t+11, y cualquier beta neta de la cartera tiene que estar cubierta con la cantidad adecuada del índice de mercado. El alfa en el conjunto de validación de 20150101 a 20161231 es de aproximadamente el 2,3 % anual, con una alentadora proporción de Sharpe de 1. El alfa en el conjunto de pruebas fuera de la muestra de 20170101 a 20180731 es un poco más bajo con un 1,8 % anual, con un ratio Sharpe de 0,75. Podrías pensar que esto es solo una pequeña disminución, hasta que eches un vistazo a sus respectivas curvas de capital:
Un cliché en la ciencia de datos confirmado: una imagen vale más que mil palabras. (¿Quizás hayas oído hablar del Cuarteto de Anscombe?) Con mucho gusto invertiríamos en una estrategia que se viera así en el conjunto de validación, pero de ninguna manera lo haríamos por eso en el conjunto de pruebas. ¿Qué tipo de sobreajuste hemos hecho para el conjunto de validación que causó tanta «varianza» (en el sentido de sesgo-varianza) en el conjunto de pruebas? La respuesta honesta es: Nada. Como comentamos anteriormente, la estrategia se especificó basándose solo en el conjunto de entrenamiento, y el único parámetro (5) también se optimizó exclusivamente en esos datos. El conjunto de validación es efectivamente un conjunto de pruebas fuera de la muestra, no es diferente del «conjunto de pruebas». Hicimos la distinción entre la validación y los conjuntos de pruebas en este caso en previsión de la optimización de hiperparámetros de aprendizaje automático, que en realidad no se utilizó para esta sencilla estrategia de noticias.
Comentaremos más sobre este deterioro en el rendimiento para el conjunto de pruebas más adelante. Por ahora, abordemos otra pregunta: ¿Pueden las características categóricas mejorar el rendimiento en el conjunto de validación? Comenzamos con 2 características categóricas que están más pobladas en todas las noticias y que son más intuitivamente importantes: headlineTag y audiencias.
La función headlineTag es un solo token (p. ej. «BUZZ»), y hay 163 fichas únicas. La función de audiencia es un conjunto de tokens (p. ej. {‘O’, ‘OIL’, ‘Z’}), y hay 191 tokens únicos. La forma más natural de lidiar con tales características categóricas es usar «codificación única»: cada uno de estos tokens obtendrá su propia columna en la matriz de características, y si una noticia contiene dicho token, la columna correspondiente obtendrá un valor «Verdadero» (de lo contrario, es «Fal»). La codificación directa también nos permite agregar estas características en múltiples noticias durante algún período de retrospectiva. Para hacer eso, decidimos usar el operador de quirófano para agregarlos durante el día de negociación más reciente (en lugar del retroceso de 5 días para las características numéricas). Es decir, siempre y cuando una noticia contenga un token dentro del día más reciente, estableceremos esa función diaria en True. Antes de intentar construir un modelo predictivo utilizando esta matriz de características, comparamos la importancia de sus características con otras características existentes utilizando un bosque aleatorio impulsado, como se implementa en LightGBM.
Estas características categóricas no se encuentran en ninguna parte de las 5 características principales en comparación con las características de precio (devoluciones). Pero lo que es más sorprendente, ¡LightGBM arrojó el código de activos como la característica más importante! Esa es una falacia común de usar los datos de entrenamiento para la clasificación de la importancia de las características (el problema es destacado por Larkin). Si un clasificador sabe que GOOG tenía un gran ratio Sharpe en la muestra, ¡por supuesto que va a predecir que GOOG tendrá un rendimiento residual positivo pase lo que pase! La forma correcta de calcular la importancia de la característica es aplicar la precisión de disminución media (MDA) utilizando datos de validación o con validación cruzada (consulte nuestro núcleo que demuestra que el código de activos ya no es una característica importante una vez que lo hacemos). Alternativamente, podemos excluir manualmente las características que permanecen constantes a lo largo del historial de una acción de la clasificación de importancia de las características. Una vez que lo hemos hecho, encontramos que las características más importantes son
En comparación con las características de precios, estas características de noticias categóricas son mucho menos importantes, y encontramos que agregarlas a la simple estrategia de noticias anterior no mejora el rendimiento.
Así que volvamos a la pregunta de por qué nuestra simple estrategia de noticias sufrió tal deterioro de rendimiento, desde la validación hasta el conjunto de pruebas. (Debemos tener en cuenta que no somos solo nosotros los que no pudimos extraer mucho valor de los datos de las noticias. La mayoría de los otros núcleos publicados por otros usuarios de Kaggle tampoco han mostrado ningún beneficio en la incorporación de características de noticias en la generación de alfa. Las características de precios complicadas con complicados algoritmos de aprendizaje automático son utilizadas por muchos de los principales concursantes que han publicado sus núcleos.) Ya hemos descartado el sobreajuste, ya que no hay información adicional extraída del conjunto de validación. Las otras posibilidades son la mala suerte, el cambio de régimen o la desintegración alfa. Comparando las dos curvas de rentabilidad, la mala suerte parece una explicación poco probable. Dado que la estrategia utiliza solo características de noticias, y no características macroeconómicas, de precios o de estructura de mercado, el cambio de régimen también parece poco probable. La desintegración alfa parece un probable culpable, con eso nos referimos a la desintegración de la alfa debido a la competencia de otros traders que utilizan las mismas características para generar señales. Un artículo académico publicado hace algunos años (Beckers, 2018) apoya esta idea. Basado en un metaestudio de la mayoría de las estrategias publicadas utilizando datos de sentimiento de noticias, el autor encontró que tales estrategias generaron un ratio de información de 0,76 de 2003 a 2007, pero solo 0,25 de 2008-2017, ¡una caída del 66 %!
¿Significa eso que deberíamos abandonar el sentimiento de las noticias como una característica para la generación de ideas de trading? No necesariamente. Nuestro horizonte predictivo está limitado a ser de 10 días. Ciertamente, uno debería probar otros horizontes si dichos datos están disponibles. Cuando dimos un resumen de nuestros descubrimientos en una conferencia, un miembro de la audiencia sugirió que el sentimiento de las noticias todavía puede ser útil si tenemos cuidado al elegir qué país (¿India?), o qué sector (¿acciones relacionadas con defensa?), o qué capitalización de mercado (¿penny stocks?) lo aplicamos. Solo hemos aplicado la investigación a las acciones de EE. UU. en las 2000 primeras según su capitalización de mercado, debido a las restricciones impuestas por Two Sigma, pero no hay razón por la que tenga que cumplir con esas restricciones en su propia investigación al estudiar el sentimiento generado por las noticias.