19 votos

¿Cómo agrupar poblaciones y construir una matriz de afinidad?

Mi objetivo es encontrar racimos de las poblaciones. La matriz de "afinidad" definirá la "cercanía" de los puntos. Esta artículo ofrece un poco más de información. El objetivo final es investigar la "cohesión" dentro de los ETFs y entre ETFs similares en busca de posibilidades de arbitraje. A la larga, si todo va bien, esto podría conducir a la creación de una herramienta para la modelización o valoración del riesgo. Actualmente el proyecto se encuentra en la fase de propuesta/POC, por lo que los recursos son limitados.

He encontrado este Python ejemplo para la agrupación con los relacionados docs . El código utiliza correlaciones de la diferencia de precios de apertura y cierre como valores para la matriz de afinidad. Yo prefiero utilizar la media de los rendimientos y la desviación estándar de los mismos. Esto se puede visualizar como un espacio bidimensional con la media y la desviación estándar como dimensiones. En lugar de la correlación, calcularía la "distancia" entre los puntos de datos (acciones) y rellenaría la matriz de afinidad con las distancias. La elección de la función de distancia sigue siendo una cuestión abierta. ¿Es válido calcular la distancia entre los puntos de datos en lugar de las correlaciones?

Si es así, ¿puedo ampliar este enfoque con más dimensiones, como la rentabilidad de los dividendos o ratios como el precio/beneficio?

Realicé algunos experimentos con diferentes números de parámetros y diferentes funciones de distancia que dieron como resultado diferentes números de clusters que van desde 1 hasta más de 300 para una muestra de 900 acciones. La muestra consiste en valores de gran y mediana capitalización que cotizan en la Bolsa de Nueva York y en el NASDAQ. ¿Existe una regla general para el número de conglomerados que se debe esperar?

4 votos

@Tal: ¿Cómo puedo votar negativamente el comentario de Tal? No es la primera vez que veo que Tal publica un comentario ofensivo. ¿Puede alguien detenerlo? I AMOR este sitio pero se siente torturando viendo los comentarios tan subjetivos y ofensivos de Tal. Por cierto, Navi, creo que sé lo que intentas hacer y también creo que es válido.

0 votos

@Alchemist déjame intentar reformularlo. Navi, ¿puedes aclarar cuál es el objetivo del procedimiento de agrupación? ¿Para qué vas a utilizar estos clusters? ¿Es un modelo de riesgo, una previsión de rendimientos, la construcción de una cartera, etc.? Eso marcará una gran diferencia a la hora de determinar si es válido o no. Además, el enfoque de sustituir una matriz de correlación (¿afinidad?) por una función de distancia más general está bien fundamentado (véase Mahalanobis ), aunque no estoy seguro de lo que propones exactamente, ¿puedes aclararlo con una ecuación?

3 votos

@Alchemist: no se pueden bajar los comentarios, pero sí bandera de los mismos. Ver el PREGUNTAS FRECUENTES .

13voto

mendicant Puntos 489

Debería considerar un algoritmo de aprendizaje no supervisado, como el K-nearest neighbor ('KNN').

KNN medirá la distancia entre las observaciones en su espacio. Usted puede y probablemente debería considerar funciones de distancia alternativas (además de la euclidiana) particularmente si usted está agrupando en características tales como retornos que tienen valores atípicos. Hay bastantes algoritmos de clustering no supervisado por ahí - ver aquí . Con estos algoritmos se pueden incluir ciertamente características como las de las acciones. También puede incluir las betas de los valores con respecto a varios factores de riesgo. Esto le permitiría capturar las distancias en el espacio de correlación, ya que una matriz de covarianza basada en valores puede expresarse como el : producto cruzado de (betas de los factores) * matriz de covarianza de los rendimientos de los factores * transpuesta(betas de los factores).

Yo dedicaría tiempo a pensar en la elección adecuada de las características (¿qué características son estables? ¿qué características predicen el riesgo o la rentabilidad? ¿qué conjuntos de características aportan fuentes de información únicas? ¿cuáles son las invariantes?) y la elección de la función de distancia.

Además, si está mezclando características con diferentes escalas de unidades (es decir, rendimientos, betas, varianzas) entonces necesita normalizar/preprocesar sus entradas, de lo contrario las características con la mayor varianza serán la base principal para la agrupación. Como alternativa, puede limitarse a una clase de características para su agrupación, de modo que tenga más intuición para interpretar los resultados.

0 votos

Me gusta mucho esta respuesta. Ya he probado diferentes funciones de distancia con distinto éxito. En el artículo arxiv.org/abs/1110.5847 He vinculado a una función de distancia se menciona. ¿Qué opinas de esta función? Debido a los recursos limitados, necesito tener una métrica de distancia práctica performant.

0 votos

Depende de su aplicación. Si va a encontrar una matriz de covarianza (que puede expresarse en términos de un modelo factorial lineal), entonces el uso de un algoritmo que descubre la estructura no lineal no le ayuda. Sin embargo, si se utiliza un algoritmo de este tipo para agrupar individuos similares y luego construir, digamos, diferentes , regresiones polinómicas o modelos de regresión con términos de interacción, dentro de cada grupo podría valer la pena utilizar esta técnica de agrupación. A primera vista, el algoritmo parece interesante; considere su escenario de aplicación.

5voto

Macho Matt Puntos 595

La respuesta de Quant Guy ya es bastante informativa para tu pregunta.

Sólo para añadir algunas otras cosas: en lugar de averiguar la elección de las características por su propio cerebro, también podría utilizar las técnicas de aprendizaje automático para ayudar en la extracción de las "características" para su propósito específico, por ejemplo, el modelado de riesgo o la previsión de los rendimientos o la construcción de la cartera como se menciona por Tal.

Echa un vistazo a Análisis de componentes principales y el aprendizaje múltiple (por ejemplo isomap ). Aún más interesante, el Aprendizaje de características no supervisado y aprendizaje profundo . Los dos primeros métodos tienen una implementación en scikit-learn, la biblioteca que se está estudiando actualmente.

Los dos primeros métodos mencionados anteriormente, podrían ayudarle no sólo a extraer los componentes más importantes de sus características, sino también a visualizar su clustering dado que su dimensión de características es mayor que 2.

0 votos

Gracias por los enlaces. El PCA es la base de la agrupación espectral, ¿no es así? No estoy familiarizado con el término "Deep Learning". ¿Qué significa? Tengo una lista de unos 20 parámetros que podrían considerarse para el conjunto de características. No estoy seguro de si los algoritmos de scikit-learn son de orden O(n) o superior.

2voto

Chris Bunch Puntos 639

En lugar de sugerir técnicas de agrupación alternativas, como han hecho Quant Guy y Flake (un gran consejo, por cierto), ofreceré mi opinión sobre el método que has propuesto.

Sobre las características utilizadas para agrupar las poblaciones: Usted propone utilizar las estadísticas de la muestra (media y desviación estándar de los rendimientos). Le sugiero que utilice la totalidad de los rendimientos ( no precio) serie. Por ejemplo, si los rendimientos de la acción A en dos días sucesivos son (+1%,-1%) y los rendimientos de la acción B son (-1%,+1%), su método clasificaría a estas dos muy estrechamente sobre la base de la media y la desviación estándar, cuando en realidad deberían estar bastante separadas, particularmente si la mayoría de los pares de acciones en su muestra están correlacionados positivamente (lo que creo que es la gran mayoría). Las posibles elaboraciones de este método incluyen los rendimientos ajustados a la volatilidad, los rendimientos ajustados a la beta del mercado y el exceso de rendimientos en relación con algún modelo de riesgo. Yo evitaría utilizar demasiadas características ajenas a la rentabilidad, en particular los fundamentos como la rentabilidad por dividendos o el PER, pero podría introducir el tamaño (capitalización de mercado) y el sector. Si su muestra es exclusivamente de ETFs, reitero mi consejo de evitar todos los fundamentos, incluyendo el tamaño y la industria (que son irrelevantes para los ETFs amplios y potencialmente engañosos para los estrechos).

En la función de distancia: La función a la que se hace referencia en el documento que has enlazado parece muy complicada, por lo que no puedo comentarla, pero en general deberías considerar que si utilizas más de un tipo de entrada (por ejemplo, rendimientos y fundamentos), deberías ponderar al alza las diferencias que deberían estar cerca y a la baja las que se espera que estén lejos, utilizando algo como Mahalanobis.

Sobre el número de racimos: Tendrá que pensar más en su muestra para averiguar el número óptimo de clusters. Si se observa todo el mercado, creo que las técnicas estadísticas suelen ser buenas para identificar no más de unas 5 fuentes de variación independientes. Suponiendo que cada una de ellas tenga 2 estados potenciales, eso implica $2^5=32$ racimos. Si se repite el análisis utilizando sólo los ETF de la muestra, dado el solapamiento, yo optaría por un número aún menor, tal vez 10 grupos.

Mucha suerte. Tu pregunta ahora tiene sentido para mí; las ediciones ayudaron inmensamente.

0voto

guest Puntos 1

Una vez intenté hacer algo parecido. Mi idea era encontrar cestas de acciones que se comportaran de forma similar.

Los valores similares, a mi entender, son valores que varían juntos de forma temporal, es decir, si van en la misma dirección por una cantidad similar en los mismos días, entonces se pueden considerar similares.

Lo que me funcionó fue esto:

1) Elegí un año de datos de las acciones de interés.

2) Se ha calculado la correlación entre las variaciones diarias únicamente, generando una matriz de correlación con un valor de 1 en toda la diagonal principal.

3) Transformar las columnas en vectores de características (también podrían haber sido las líneas)

4) Introducir esos vectores en un simple Kmeans (he utilizado la implementación de Apache Spark)

5) Empezando por K = 2, seguí iterando hasta que mi suma de errores al cuadrado dentro del conjunto encontró un valle (en mi caso, el mejor K fue 6).

6) Ahí estaban los grupos, curiosamente separados por sectores, con los bancos en un grupo, los siderúrgicos en otro, etc. Básicamente, agrupé los valores que más se correlacionan con el mismo conjunto de otros valores.

Sin embargo, sólo lo he probado para un conjunto de acciones brasileñas.

0voto

David Rickman Puntos 2787

Quizá le interese un artículo de Marcos López de Prado titulado Creación de carteras diversificadas que superan los resultados de la muestra , en Journal of Portfolio Management, 2016

Utiliza una técnica de agrupación (descrita en el documento) para agrupar valores con el fin de formar una cartera diversificada de paridad de riesgo

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