Archivo de la categoría: Banca

Calendario de días laborales con Pandas

Es habitual escuchar que un científico de datos es un estadístico que trabaja con Python. En parte, tiene razón. Sin embargo, quien ha trabajado dentro del mundo académico sabe que para un estadístico las vacas son esféricas y los meses tienen 365,25/12 días. En cambio, en el mundo real, ni hay dos vacas iguales ni un mes igual a otro.
Sirva esta entrada para poner en valor todo aquel trabajo adicional y tiempo dedicado por aquellos que trabajan con datos y huyen de simplificaciones estadísticas, ya se denominen científicos de datos o cómo quieran llamarse.

Series temporales con Pandas

Pandas, como se ha visto aquí, es la librería por excelencia para el manejo de datos ya que permite trabajar fácilmente con tablas numéricas y series temporales.
Una utilidad disponible en Pandas en relación a las series temporales es crear directamente rangos de fechas con la función pd.date_range(), la cual utiliza los siguientes parámetros (no todos obligatorios):

  • start: Inicio del rango. Límite izquierdo para generar fechas.
  • end: Fin del rango. Límite derecho para generar fechas.
  • period: Número de periodos a generar
  • freq: Frecuencia de las proyecciones. Entre otros:
    • D: Diaria (por defecto)
    • Y: Anual
    • M: Mensual
  • closed: Si queremos excluir el inicio (closed=’right’) o el final (closed=’left’)
  • name: Nombre del DatetimeIndex resultante (por defecto ninguno)

Ejemplo básico de una serie temporal

import pandas as pd
s = pd.date_range(start='2019-01-01', periods=12, freq='M')
df = pd.DataFrame(s, columns=['Fecha'])
print(df)
        Fecha
0  2019-01-31
1  2019-02-28
2  2019-03-31
3  2019-04-30
4  2019-05-31
5  2019-06-30
6  2019-07-31
7  2019-08-31
8  2019-09-30
9  2019-10-31
10 2019-11-30
11 2019-12-31

Crear una serie temporal con los últimos días laborales de cada mes

En determinados ámbitos, principalmente financiero y actuarial, resulta especialmente útil manejar rangos de fechas en donde los días de la serie correspondan al primer o último día laboral del mes (por ejemplo, cuando proyectamos pagos de cupones o rentas).
Para ello, la función pd.date_range() dispone de diferentes valores para el parámetro frecuencia. En el siguiente ejemplo, ‘BM’ corresponde con BusinessMonthEnd (último día laboral del mes):

import pandas as pd
s = pd.date_range('2019-01-01', periods=12, freq='BM')
df = pd.DataFrame(s, columns=['Fecha'])
print(df)
        Fecha
0  2019-01-31
1  2019-02-28
2  2019-03-29
3  2019-04-30
4  2019-05-31
5  2019-06-28
6  2019-07-31
7  2019-08-30
8  2019-09-30
9  2019-10-31
10 2019-11-29
11 2019-12-31

Aunque si queremos mayor exactitud, debemos tener en cuenta los días festivos (por ejemplo, si calculamos costes que dependan de los días exactamente transcurridos entre cupón y cupón, un 1 día entre 20 representa un 5% de error). Conocer los días festivos dentro de un periodo de tiempo es especialmente útil cuando estimamos usos y comportamientos humanos (transporte público, asistencias médicas, cargas en servidores informáticos…). En el sector asegurador, dichos patrones pueden afectar directamente en las reservas contables, por ejemplo, a la hora de calcular los costes incurridos pero no declarados (IBNR). De hecho, en algunas compañías aseguradoras es habitual que se incrementen ligeramente los ratios de siniestralidad los años bisiestos simplemente por disponer de un día natural más que el resto.

En el siguiente ejemplo introducimos una lista con un par de días festivos simplemente para ver el funcionamiento: el 31 de mayo (Día de Castilla-La Mancha) y 28 de febrero (Día de Andalucía). Posteriormente calculamos los días transcurridos entre pagos si estos se produjeran el último día de mes:

import pandas as pd
fiestas = ['2019-02-28','2019-05-31']
es_holidays = pd.tseries.offsets.CustomBusinessMonthEnd(holidays=fiestas)
s = pd.date_range('2019-01-01', periods=12, freq=es_holidays)
df = pd.DataFrame(s, columns=['Fecha'])
df['n_dias'] = df['Fecha'].diff().dt.days.fillna(0)
print(df)
        Fecha  n_dias
0  2019-01-31     0.0
1  2019-02-27    27.0
2  2019-03-29    30.0
3  2019-04-30    32.0
4  2019-05-30    30.0
5  2019-06-28    29.0
6  2019-07-31    33.0
7  2019-08-30    30.0
8  2019-09-30    31.0
9  2019-10-31    31.0
10 2019-11-29    29.0
11 2019-12-31    32.0

(Como puede observarse, el 28-2 y 31-5 no aparecen en el calendario de pagos)

Reglas de cálculo para los días festivos

Por último, existe la opción de escribir reglas para calcular los días festivos (ya que normalmente estos son trasladados al siguiente día laboral). En ciertos países, como Estados Unidos, existen leyes al respecto (como la Uniform Monday Holiday Act of 1968), cuyas reglas están incluidas en Pandas y pueden consultarse haciendo un print(USFederalHolidayCalendar.rules).

Sin embargo, en muchos otros países no existen reglas para determinar los festivos del año (como ocurre en España), sino que cada año las fiestas laborales son fijadas por normativa. No obstante, vamos a aventurarnos a crear las reglas del calendario laboral español con la premisa de que los festivos que caigan en domingo se pasan al lunes siguiente (instrucción observance=sunday_to_monday). Posteriormente, mostramos los días laborales de diciembre para comprobar su funcionamiento.

from pandas.tseries.holiday import *
from pandas.tseries.offsets import CustomBusinessDay

class EsBusinessCalendar(AbstractHolidayCalendar):
   rules = [
     Holiday('Año Nuevo', month=1, day=1, observance=sunday_to_monday),
     Holiday('Epifanía del Señor', month=1, day=6, observance=sunday_to_monday),
     Holiday('Viernes Santo', month=1, day=1, offset=[Easter(), Day(-2)]),
     Holiday('Día del Trabajador', month=5, day=1, observance=sunday_to_monday),
     Holiday('Asunción de la Virgen', month=8, day=15, observance=sunday_to_monday),
     Holiday('Día de la Hispanidad', month=10, day=12, observance=sunday_to_monday),
     Holiday('Todos los Santos', month=11, day=1, observance=sunday_to_monday),
     Holiday('Día Constitución', month=12, day=6, observance=sunday_to_monday),
     Holiday('Inmaculada Concepción', month=12, day=8, observance=sunday_to_monday),	    
     Holiday('Navidad', month=12, day=25, observance=sunday_to_monday)
   ]

es_BD = CustomBusinessDay(calendar=EsBusinessCalendar())
s = pd.date_range('2019-12-01', end='2019-12-31', freq=es_BD)
df = pd.DataFrame(s, columns=['Fecha'])
print(df)
        Fecha
0  2019-12-02
1  2019-12-03
2  2019-12-04
3  2019-12-05
4  2019-12-10
5  2019-12-11
6  2019-12-12
7  2019-12-13
8  2019-12-16
9  2019-12-17
10 2019-12-18
11 2019-12-19
12 2019-12-20
13 2019-12-23
14 2019-12-24
15 2019-12-26
16 2019-12-27
17 2019-12-30
18 2019-12-31

(Se aprecia como el domingo 8 de diciembre es reemplazado por el lunes 9)

Así, una vez creado nuestro calendario de fiestas nacionales, podemos utilizarlo para conocer las fiestas de próximos años, por ejemplo para el año 2020:

calendar = EsBusinessCalendar()
print(calendar.holidays(start='2020-01-01', end='2020-12-31'))
DatetimeIndex(['2020-01-01', '2020-01-06', '2020-04-10', '2020-05-01',
               '2020-08-15', '2020-10-12', '2020-11-02', '2020-12-07',
               '2020-12-08', '2020-12-25'],
              dtype='datetime64[ns]', freq=None)

Las fiestas regionales o locales pueden ser incluidas de la misma manera, aunque hay que tener en cuenta que en ciertas comunidades es costumbre trasladar ciertas fiestas al 19 de marzo o el jueves del Corpus en vez de al siguiente lunes (en ese caso habría que crear una nueva función basada en la función de Pandas sunday_to_monday).

Nuestro calendario puede ser utilizado también en otras librerías como Prophet. Prophet es una librería avanzada de machine learning creada por Facebook, enfocada a modelos de regresión no lineales de datos a lo largo del tiempo, la cual requiere un listado de días festivos que debe ser proporcionado por el usuario.

Lecciones de economía de un ignorante. La prima de riesgo (y la madre que la parió)

El término prima de riesgo está todo el día y a todas horas en los informativos españoles. La bolsa baja porque la prima de riesgo sube, ahora baja, ahora estamos por encima de Italia, luego por debajo, los franceses asustados,… En fin “los mercados” nos tienen asustados porque están locos, algunos llaman a esto volatilidad que suena más técnico. Y los menos puestos os preguntaréis ¿que es la prima de riesgo?  Pues aquí estoy yo para transmitir mi ignorancia. Me centro en la zona Euro.

Resulta que, los países necesitan emitir deuda para financiarse ¿el motivo? No os lo cuento porque me meto en un jardín muy peligroso sino que le pregunten a Obana. En fin, que necesitan emitir deuda soberana. Antes del Euro (el verdadero problema) los tipos que compraban esa deuda soberana estaban más preocupados en una depreciación de la moneda que en el riesgo de impago. Pero luego vino la unión monetaria en Europa y entonces pasó lo que está pasando ahora. Había que medir el riesgo de invertir en deuda de un país ya que la depreciación de la moneda no era el mayor problema, ahora los mercados tenían que calcular la probabilidad de no recuperar su inversión.

Como en todos los negocios, cuando no sabemos que hacer, hacemos un ranking. Y como país con menor probabilidad de impago aparecía Alemania. Por otro lado, la falta de talento les llevó a pensar en el gap (Valle-Inclán diría diferencia) entre  la deuda alemana y la deuda de otro país. Pero existen muchos tipos de emisiones de deuda sobre todo en función del plazo, desde meses a 30 años. Pero se emplean los bonos del estado a 10 años.

Con todo esto la prima de riesgo es la diferencia del bono a 10 años de un país con el bono aleman. Si Alemania paga un 2% por sus bonos a 10 años y España paga un 6% la diferencia es de un 4% pero se mide en valor absoluto por 100 luego la diferencia es de 400 puntos básicos. Y esto es lo que nos tiene asustados.

¿Cómo podemos seguir una serie histórica de la prima de riesgo? Por ejemplo con Bloomberg o Tradingeconomics. Tenemos que buscar Spain Government Bond 10 Year Yield y en poco tiempo entenderemos mejor qué es la prima de riesgo. En Bloomberg tenemos el GSPG10YR:IND (de momento desconozco como descargar los datos con R) y tendremos:

bono-espana-10-anos.png

Y arriba a la izquierda tenemos Add a comparison, allí ponemos GDBR10:IND trigger del bono aleman y…

prima-de-riesgo-espana-alemania.png

Eso que se ve a la derecha del gráfico con forma de embudo es lo que está llenando Telediarios y lo que está haciendo temblar a los mercados. Es la diferencia que se paga por el bono aleman (en verde) con el bono español (en naranja). En fin, creo que se explica de forma sencilla  y que tenéis mecanismos para realizar un seguimiento de esta información, por otro lado creo que no he sido duro con el sistema financiero actual que nunca se sabe quién puede leer estas líneas. Incluso me despido sin llamar cabestros a los dirigentes de los bancos centrales. Saludos.

Lecciones de economía de un ignorante. Poniendo fecha a la intervención de España

España no es Grecia, España no es Irlanda y por supuesto España no es Portugal. En realidad España es como las tres anteriores juntas y va a ser intervenida por el BCE a no ser que se volviera a la peseta. Los motivos son los de siempre pero me gustaría destacar el problema del endeudamiento:

Este gráfico de Mckinsey pone los pelos de punta. El gasto público disparado y el gasto privado disparado, esto es culpa de un modelo de estado que no se sostiene (desde los tiempos de Solchaga) y de un modelo de crecimiento demasiado arriesgado (desde los tiempos de Rato). El lío no sólo se debe a una burbuja yo creo que es una falta de rigor técnico y que va a llevar a la intervención de España. Un amigo mío decía: “si le debes 5.000 euros al banco tienes un problema, si le debes 300.000 el problema lo tiene el banco”. Si cae España cae un modelo económico. No cae un modelo político porque ese nunca ha llegado a funcionar.

Algunos pensarán que soy más pesimista que Shopenhauer pero es claro que España cae. Bien saliendo del euro (poco probable) bien a través de una intervención (segura). Ahora lo emocionante es que la persona que escribe estas líneas se va a atrever a ponerle fecha a esa intervención, aunque no descarto al 100% la vuelta a la peseta. La intervención se llevará a cabo en junio de 2012 ¿los motivos? Vencimientos de deuda, imposibilidad de reducir la tasa de paro y un crecimiento muy por debajo de lo esperado lo que convertirá a España en un país interesante para especular, no para invertir. Por cierto, que esta situación provocará un éxodo de profesionales del que hablaré otro día.

Stadistical data warehouse del European Central Bank con R y los depósitos a pérdidas

Más ejemplos de uso del paquete de R XML. Vamos a leer datos del data warehouse del European Central Bank. Si dais una vuelta por la web tendréis interesantes datos económicos de los países de la Unión Europea. A modo de ejemplos vamos a leer los datos de los tipos de interés medios a 12 meses que se están dando por los bancos en España y la evolución del Euribor a 6 meses.
– Report Tipos:    http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=124.MIR.M.ES.B.L22.F.R.A.2250.EUR.N
– Report Euribor:    http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=143.FM.M.U2.EUR.RT.MM.EURIBOR6MD_.HSTA

Vamos a generar el siguiente gráfico comparativo:

interes-vs-euribor.PNG

Comenzamos el trabajo con R:

require(XML)
pag="http://sdw.ecb.europa.eu/quickview.do?SERIES_KEY=124.MIR.M.ES.B.L22.F.R.A.2250.EUR.N"
depos=readHTMLTable((((pag))))
#str(depos)
#Creamos un data frame legible
aux1=data.frame(depos[6])
#Eliminamos títulos
aux1=aux1[4:nrow(aux1),]
#Prefiero trabajar con 2 df
mes=as.vector(aux1$NULL.V1)
#Transformo un factor de R a número
valor=as.data.frame(as.numeric(
levels(aux1$NULL.V2)[aux1$NULL.V2]))
#Creo el df final
depos=data.frame(cbind(mes,valor))
#No quiero factores por ningún sitio
depos$mes=as.character(depos$mes)
str(depos)
names(depos)=c("mes","interes")
head(depos)

Es un código sucio, no me he preocupado mucho por él. Con la función readHTMLTable leemos la tabla del report que nos ofrece el BCE. STR es muy importante porque nos quedaremos Seguir leyendo Stadistical data warehouse del European Central Bank con R y los depósitos a pérdidas

Monográfico. Un poco de PROC LOGISTIC

El PROC LOGISTIC es un procedimiento de SAS que nos ha dado muchas satisfacciones a los dinosaurios como el ahora escribiente. La regresión logística es uno de los modelos de regresión más utilizados y es bien conocido por todos mis lectores (bastante más inteligentes que yo). El problema es muy sencillo hemos de clasificar una población dividida en dos partes a partir de unas variables independientes. Su aplicación es muy extensa: patrones de fuga, propensiones a compra, salud, fraude,… Con este monográfico pretendo acercaros en 3 minutos a las sentencias básicas en SAS para crear un modelo de regresión logística y proponer gráficos y validaciones. En la línea habitual del blog partimos de una simulación y analizamos la sintaxis, evitamos poner las salidas para no “cargar” la entrada con tablas de poca utilidad. El ejemplo es el que sigue:

data datos;
do id_cliente=1 to 20000;
edad=min(65,ranpoi(4,45));
pasivo=ranuni(4)*10000+ranuni(12)*(10000*(edad-5));
compras=round(pasivo/(ranexp(423)*1000));
vinculacion=max(1,ranpoi(2,round(pasivo/300000)+1));
recibos=ranpoi(1,2);
provincia=min(52,ranpoi(123,28));
output;
end;
run;

Conjunto de datos SAS con 20000 clientes de Banca Personal de una entidad bancaria que están en proceso de desvinculación. Otra entidad se ha puesto en contacto con rvaquerizo@analisisydecision.es y le han realizado un modelo de potencial de pasivo, un modelo de Share of Wallet de clientes que está funcionando a las mil maravillas y detectan que esta entidad les está provocando una reducción de pasivo y desvinculación de algunos de sus clientes. Lo detectan gracias al mecanismo de alarmas que diseñó rvaquerizo@analisisydecision.es (un poco de publicidad que todo esto sale de mi tiempo y mi bolsillo). El equipo comercial se pone en marcha Seguir leyendo Monográfico. Un poco de PROC LOGISTIC

Excelente descripción de los PIAS

Leído en Bancos y Cajas On Line:

 http://www.bancosycajasonline.com/2010/06/09/planes-individuales-de-ahorro-sistematico-pias/


Hoy repasamos los planes individuales de ahorro sistemático (PIAS), que son productos financieros con formato de seguro de vida ahorro, comercializados por entidades bancarias y de seguros, que permiten recibir una renta mensual vitalicia, por un importe conocido de antemano y que cobraremos cuando nosotros decidamos. Además podemos hacerlos líquidos en cualquier momento

Recomendable lectura.

Lecciones de economía de un ignorante. “la Caixa” a colocar preferentes

No tengo palabras, creía que eran rumores, estoy a punto de llorar. Hoy empiezan a colocar deuda subordinada otra vez en “la Caixa” y 2.000 millones ampliables a 3.000 nada menos:

http://www.abc.es/agencias/noticia.asp?noticia=252786

¿Qué probabilidades hay de quiebra de “la Caixa”? Ninguna, pero ahí no está el riesgo. La deuda subordinada como las participaciones preferentes no son una inversión exenta de riesgo. Si os lo digo yo a lo peor no os lo creéis pero si os lo dicen desde rankia.com empezaréis a tomarlo más en serio. En 2009 se emitieron más de 13.000 millones en participaciones preferentes. Yo no considero una estafa colocar este tipo de híbridos pero si considero que no se cuenta toda la verdad sobre estos productos (en la oficina suelen rellenar los cuestionarios del MiFID al cliente por si alguien pregunta por él, se trata de colocar).  ¿Qué opinará la CNMV al respecto de estos engaños? Pues debe ser que no opina nada, como no son una estafa no pasa nada. Engañamos pero no estafamos.

Por cierto, prefiero las emisiones de Ruiz Mateos. Bajo mi prisma tienen menos riesgo porque a esa gente no les sale NADA mal y se dedican a dar trabajo a “cascoporro”. Si luego no pagan a la seguridad social y eso no pasa nada, al fin y al cabo lo hace casi todo el mundo en la economía española. Engañar es muy español, estafar es de sinvergüenzas lo malo es que la línea que separa la estafa del engaño es muy fina.

Lecciones de economía de un ignorante. Las Cajas serán bancos

Muy rápido que no tengo tiempo. Un mensaje que yo mismo me iré comentando. Las cajas se van a ir reordenando. Me preocupa que las reordene el  FROB (Fondo de Reestructuración Ordenada Bancaria). ¿Por qué me preocupa? Porque una política económica de intervención va a favorecer que las Cajas de Ahorro vean las cuotas participativas como el mecanismo con el que llevar a cabo su reestructuración y esta reestructuración convertirá Cajas en bancos.

Más sencillo, las Cajas se unen porque unas están jodidas y otras menos, como al final no podemos hacernos cargo de las ayudas del FROB tenemos que emitir unos títulos en un mercado secundario. Estos títulos son las cuotas participativas que al final tendrán que dar derechos políticos sobre las Cajas con lo cual pasaríamos de Caja a banco porque ya no está politizada y responde a sus inversores, los mendas lerendas que tienen participativas.

¿Soy un amante de las grandes conspiraciones? Quizá, pero es evidente que los movimientos de fusiones entre Cajas dan que pensar y sobre todo entre Cajas de distinta Comunidad Autónoma. Además, incluso, hay alguna Caja que ha comprado una división de banca privada. La verdad es que soy un ignorante en estos temas, pero estopuede verlo hasta el novio de Falete.