
Típico gráfico de dos ejes de barras y líneas donde las barras miden una exposición y las líneas una frecuencia; en el mundo actuarial son muy habituales y son muy útiles para ver proporciones dentro de grupos a la vez que representamos el tamaño del grupo. Los datos habituales del curso de GLM for insurance data:
import pandas as pd
import io
import requests
# Lectura de un dataset con número de siniestros de una cartera de automóviles
url = 'http://www.businessandeconomics.mq.edu.au/our_departments/Applied_Finance_and_Actuarial_Studies/acst_docs/glms_for_insurance_data/data/claimslong.csv'
s = requests.get(url).content
df = pd.read_csv(io.StringIO(s.decode('utf-8')))
df.head()
Ya tenemos un data.frame con nuestros datos leyendo directamente del CSV; ahora preparamos los datos para representarlos:
frecuencia = pd.DataFrame((df['claim']).groupby(df['period']).mean())
exposicion = pd.DataFrame((df['claim']).groupby(df['period']).count())
No tenemos un campo «exposición» en los datos; asumo que la exposición es igual al número de registros, así que la frecuencia será la media de los siniestros y la exposición el total de registros. El análisis lo hacemos por el campo period: es el campo por el que agrupamos y ahora solo tenemos que realizar el gráfico:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = exposicion['claim'].plot(kind='bar', grid=True)
ax2 = ax.twinx()
ax2.plot(frecuencia['claim'].values, linestyle='-', linewidth=2.0, color='red')
plt.show()
El eje principal es ax y representa la exposición en barras; con ax.twinx() añadimos un eje secundario, ax2, que será la línea que contiene la frecuencia. No es un código Python complejo y es un tipo de gráfico que nos ofrece mucha información. En breve, GLM con Python (espero).