1 votos

Calcular el rendimiento de los bonos en la pitón

Quiero ejecutar el método Newton en un gran conjunto de datos para calcular el rendimiento de los bonos. Abajo está el código que creé usando un bucle. Necesito ejecutarlo en ~50 millones de líneas y el bucle es bastante difícil de manejar. ¿Hay alguna forma más eficiente de ejecutarlo usando Pandas/Numpy/ect?

In:
from pandas import *
from pylab import *
import pandas as pd
import pylab as plt
import numpy as np
from scipy import *
import scipy

df = DataFrame(list([100,2,34.1556,9,105,-100]))
df = DataFrame.transpose(df)
df = df.rename(columns={0:'Face',1:'Freq',2:'N',3:'C',4:'Mkt_Price',5:'Yield'})
df2= df
df = concat([df, df2])
df = df.reset_index(drop=True)
df

Out:
    Face    Freq    N        C Mkt_Price  Yield
0    100     2   34.1556     9   105    -100
1    100     2   34.1556     9   105    -100

In:
def Px(Rate):
    return Mkt_Price - (Face * ( 1 + Rate / Freq ) ** ( - N ) + ( C / Rate ) * ( 1 - (1 + ( Rate / Freq )) ** -N ) )

for count, row in df.iterrows():
        Face = row['Face']
        Freq = row['Freq']
        N = row['N']
        C = row['C']
        Mkt_Price = row['Mkt_Price']
        row['Yield'] = scipy.optimize.newton(Px, .1, tol=.0001, maxiter=100)
df

Out:
    Face    Freq   N         C  Mkt_Price   Yield
0    100     2   34.1556     9   105       0.084419
1    100     2   34.1556     9   105       0.084419

1voto

Charles Chen Puntos 183

Por lo que sé, el método Newton es el preferido para el cálculo del rendimiento.

Se me ocurren dos ideas para optimizar el bucle:

  1. Ejecuta el bucle en paralelo.
  2. Utiliza el último rendimiento como valor inicial. Si tiene una buena estimación, el número de iteraciones necesarias para la optimización se reduce considerablemente. La forma de aprovechar al máximo el rendimiento calculado previamente depende de la estructura de sus datos. Si los bonos comparables están cerca en su conjunto de datos esto debería funcionar. Si no es el caso, puede hacer una ordenación estable de los atributos para que los bonos similares se agrupen.

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