1 votos

Algoritmo eficiente para calcular el coeficiente Beta

Estoy usando Python/Pandas. Usar bucles for anidados simples para calcular Beta para aproximadamente ~5k acciones durante ~5k días (ventana móvil de ~250 días) es extremadamente lento. ¿Existe alguna manera rápida y elegante de lograr este objetivo?

¡Gracias de antemano!

Editar: Simplemente utilizando Numpy en lugar de Pandas para todos los pasos intermedios, aceleraría todo el proceso en >10 veces.

0 votos

Mencionas bucles for anidados 'ingenuos', ¿qué crees que sería mejor? ¿Qué has intentado?

0 votos

¿Qué método estás utilizando para calcular Beta?

0 votos

Considera - además de otras soluciones propuestas - probar pandas.iteritems() y pandas.iterrows(). Estos iteradores por columna y por fila son bastante impresionantes.

3voto

lvmisooners Puntos 328

Es posible que encuentres útil este fragmento de código. Es el cálculo beta vectorizado utilizado por Zipline, un backtester de código abierto escrito en Python.

Se calcula sobre una ventana de tiempo, con datos de todos los activos durante ese período. Como mencionó Tim anteriormente, esto se puede calcular de manera eficiente utilizando numpy y multiplicación de matrices.

3voto

level1807 Puntos 445

No sé qué tan ingenuos sean tus bucles anidados, pero asumo que estás utilizando el cálculo OLS $\beta = (X’X)^{-1}X’Y$, donde $X$ contiene los retornos del índice y $Y$ contiene los retornos de la seguridad.

Si tienes datos para todos los períodos de tiempo de todas las seguridades, entonces $(X’X)^{-1}$ no cambiará para cada seguridad. La mejor solución sería usar numpy para calcular la multiplicación de matrices directamente para todas las seguridades. Alternativamente, puedes calcular $(X’X)^{-1}$ antes de entrar al bucle, y luego calcular $\beta$ para cada seguridad individualmente.

Si no tienes datos para todos los períodos de tiempo, entonces hay formas de acelerarlo, pero se vuelve más complicado.

0 votos

Gracias, este método sí reduce la cantidad de cálculos. ¿Puede manejar bien los valores vacíos?

0 votos

Esto realmente no maneja los valores vacíos, es por eso que mencioné los valores faltantes en mi respuesta. Si tiene valores vacíos, un buen primer paso para acelerar el proceso sería separar sus valores en aquellos con datos completos y aquellos con datos incompletos. Si tiene suerte, la cantidad de valores con datos completos superará por completo a aquellos con datos incompletos.

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