Iae intro glm_practica

66
Tarificación GLM en Autos y Hogar con SAS: Introducción a los modelos lineales generalizados (GLM) PRÁCTICA SAS Instituto de Actuarios Españoles 9-13 de marzo, 2015

Transcript of Iae intro glm_practica

Page 1: Iae intro glm_practica

Tarificación GLM en Autos y Hogar con SAS: Introducción a los modelos lineales generalizados (GLM)

PRÁCTICA SAS

Instituto de Actuarios Españoles

9-13 de marzo, 2015

Page 2: Iae intro glm_practica

Índice

Práctica 1: Introducción a los modelos GLM

Práctica 2: Modelos de Frecuencia: modelización de la sobre dispersión

Práctica 3: ¿Sobre dispersión ó exceso de ceros? ¿Cómo detectar el exceso de ceros?

Práctica 4: Modelos de Coste Medio: ajuste del coste medio

Práctica 5: Ajuste del Burning Cost con una distribución Tweedie

Page 3: Iae intro glm_practica

PRÁCTICA 1

Introducción a los modelos GLM

Page 4: Iae intro glm_practica

Un conjunto de datos SAS: persinj.sas7bdat

Nombre: persinj.sas7bdat

This data set contains information on 22036 settled personal injury insurance

claims. These claims arose from accidents occurring from July 1989 through to

January 1999. Claims settled with zero payment are not included.

Varible Definition

total settled amount

inj1, ..., inj5 injury 1,..., injury 5 coded as

1 = no injury

2, 3, 4, 5 = injury severities

6 = fatal injury

9 = not recorded

legrep legal representation (0 = no, 1 = yes)

accmonth accident month (1 = July 1989, ..., 120 = June 1999)

repmonth reporting month (as above)

finmonth finalization month (as above)

op_time operational time

Page 5: Iae intro glm_practica

Código SAS: “intro.sas”

*Algunas modificaciones sobre el conjunto de datos original;

data Persinj;

set pricing.Persinj;

where total gt 40 and total le 85000;

repdelay = repmonth - accmonth;

setdelay = finmonth - accmonth;

logtotal = log(total);

label repdelay = "Report delay"

setdelay = "Settlement delay"

logtotal = "Log of settlement amount";

run;

*Seleccionamos una muestra aleatoria simple de 200 observaciones; proc surveyselect data = Persinj out = Persinj

method = SRS sampsize = 200 seed = 1980;

run;

Page 6: Iae intro glm_practica

Análsis univariante del Incurrido

*Calculamos algunos estadísticos sobre el Incurrido;

title "Estadísticos de sumarización para el Incurrido";

proc means data=Persinj maxdec=2 min max mode median

mean std n nmiss skewness kurtosis;

var total;

run;

Resultado de la ejección:

Page 7: Iae intro glm_practica

Análsis univariante del Incurrido (cont.)

*Creación de un histograma de frecuencia para el Incurrido;

ods graphics on;

title "Histograma del Incurrido";

proc univariate data=Persinj ;

var total;

histogram / nmidpoints=18;

run;

*Diagrama de caja para el Incurrido;

title "Diagrama de caja del Incurrido";

proc sgplot data=Persinj noautolegend;

title 'Distribution of settled amount';

vbox total / datalabel;

run;

Page 8: Iae intro glm_practica

Análsis univariante del Incurrido (cont.)

Page 9: Iae intro glm_practica

Modelo lineal estándar (proc REG): sólo para el intercepto

*MODELO LINEAL ESTÁNDAR SÓLO PARA EL INTERCEPTO;

*Ajuste del modelo;

proc reg data = Persinj plots=residualhistogram;

model total = ;

output out=res residual=row_res;

run;

*Análisis de residuos;

proc univariate data = res;

var row_res;

run;

Page 10: Iae intro glm_practica

Modelo lineal estándar (proc REG): sólo para el intercepto

Page 11: Iae intro glm_practica

Modelo lineal estándar (proc REG): sólo para el intercepto

Page 12: Iae intro glm_practica

Modelo GLM (proc GENMOD): sólo intercepto

*MODELO GLM SÓLO PARA EL INTERCEPTO;

* Función de error: Normal;

* Link: identity;

proc genmod data = Persinj /*plots = all*/;

model total = / dist=normal link=id;

output out=res_dev resdev=dev_res;

run;

* Análisis de residuos para el modelo GLM;

proc univariate data = res_dev;

var dev_res;

histogram dev_res / normal kernel;

run;

Page 13: Iae intro glm_practica

Modelo GLM (proc GENMOD): N & sólo intercepto

Page 14: Iae intro glm_practica

Modelo GLM (proc GENMOD): sólo intercepto

• El valor estimado de la media del Incurrido es el mismo que antes 19811.20

• Desviaciones:

– pensemos en éste término como una distancia

– En el modelo GLM con distribución de error Normal los residuos de desviaciones son lo mismo que los residuos brutos (modelo clásico)

– Nota: en SAS a la Desviación se le llama “Scaled Deviance”

Page 15: Iae intro glm_practica

Modelo GLM (proc GENMOD): sólo intercepto

Page 16: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & sólo intercepto

*MODELO GLM SÓLO PARA EL INTERCEPTO;

* Función de error: Gamma;

* Link: identity;

proc genmod data = Persinj /*plots = all*/;

model total = / dist=gamma link=id;

output out=res_dev resdev=dev_res;

run;

* Análisis de residuos para el modelo GLM;

proc univariate data = res_dev;

var dev_res;

histogram dev_res / normal kernel;

run;

Page 17: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & sólo intercepto

Page 18: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & sólo intercepto

• El valor estimado de la media del Incurrido es el mismo que antes 19811.20

• El parámetro de dispersión ya no es la deviación estándar de los residuos, aunque es un escalar asociado

• La Desviación ha disminuido enormemente

• Los criterios AIC, AICC y BIC, que nos permiten comparar entre modelos

• Los residuos de desviaciones ahora sí son Normales

• La dispersión de los residuos es mucho más baja

Page 19: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & sólo intercepto

Page 20: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & Log & sólo intercepto

*MODELO GLM SÓLO PARA EL INTERCEPTO;

* Función de error: Gamma;

* Link: log;

proc genmod data = Persinj /*plots = all*/;

model total = / dist=gamma link=log;

output out=res_dev resdev=dev_res;

run;

* Análisis de residuos para el modelo GLM;

proc univariate data = res_dev;

var dev_res;

histogram dev_res / normal kernel;

run;

Page 21: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & Log & sólo intercepto

Page 22: Iae intro glm_practica

GLM (Proc GENMOD) – Gamma & Log & sólo intercepto

Page 23: Iae intro glm_practica

Análisis bivariante: Settlement Amount vs. Settlement Delay

*INTRODUCCIÓN DE UN FACTOR DE

RIESGO: settlement delay;

* Gráfico de dispersión

settlement amount vs. settlement

delay;

proc sgscatter data=Persinj;

compare x=setdelay y=total;

run;

Page 24: Iae intro glm_practica

Modelo lineal estándar (proc REG)

*MODELO GLM SÓLO PARA SETTLEMENT DELAY;

* Función de error: Normal;

* Link: identity;

proc reg data = Persinj plots = diagnostics(unpack ) ;

model total = setdelay ;

output out=residuals_std student=std_res;

run;

* Gráfico de residuos studentdized vs. settlement amount ;

proc sgscatter data=residuals_std;

compare x=setdelay y=std_res;

run;

Page 25: Iae intro glm_practica

Modelo lineal estándar (proc REG)

Page 26: Iae intro glm_practica

Settlement Amount vs. Sett. Delay: Ajuste por MCO

Page 27: Iae intro glm_practica

Gráfico de residuos: Residuos vs. Settlement delay

• El mismo gráfico que el anterior.

– Ahora el ajuste del modelo está representado por el valor cero

– Los residuos son las distancias verticales

• El gráfico indica que el modelo no es bueno:

– No hay simetría a ambos lados por encima y por debajo de cero (misma cantidad de observaciones)

– No hay simetría a la izquierda y a la derecha de 40 días de retraso en el cierre del siniestro

– Forma de embudo. A mayor retraso mayor variabilidad en el coste medio (Homoacedasticos)

– No sabemos si los residuos son grandes o pequeños (Normales 2 DT)

Page 28: Iae intro glm_practica

Gráfico de residuos Stu.: Residuos vs. Settlement delay

• Estandarizamos los residuos dividiendo éstos por una estimación de la desviación estándar de éstos (Studendized)

• Residuos normales se encuentran en un 95% a dos desviaciones típicas de su media (cero)

• Algunas observaciones superan el valor 4. Es muy improbable encontrar un residuo más allá de las 3 ó 4 DT si éstos siguen una distribución Normal

Page 29: Iae intro glm_practica

Modelo GLM (proc GENMOD) con Gamma

*MODELO GLM SÓLO PARA SETTLEMENT DELAY;

* Función de error: Gamma;

* Link: log;

proc genmod data = Persinj /*plots=all*/;

model total = setdelay / dist=gamma link=log;

output out=residuals_std stdresdev=std_res;

run;

* Gráfico de residuos standarized vs. settlement amount ;

proc sgscatter data=residuals_std;

compare x=setdelay y=std_res;

run;

Page 30: Iae intro glm_practica

Modelo GLM (proc GENMOD)

Page 31: Iae intro glm_practica

Gráfico de residuos Std.: Residuos vs. Settlement delay

• Se trata de los residuos estandarizados

• Residuos normales se encuentran en un 95% a dos desviaciones típicas de su media (cero). En éste sentido el gráfico es más correcto

• Sin embargo, vemos que no son simétricos a ambos lados de los 40 día de retraso. Cierta forma de embudo invertido ésta vez

• Hemos sobre compensado con un modelo Gamma

• Quizás con un modelo intermedio mejore. Poisson?

Page 32: Iae intro glm_practica

Modelo GLM (proc GENMOD) con Poisson

*MODELO GLM SÓLO PARA SETTLEMENT DELAY;

* Función de error: Gamma;

* Link: log;

proc genmod data = Persinj /*plots=all*/;

model total = setdelay / dist=poisson link=log;

output out=residuals_std stdresdev=std_res;

run;

* Gráfico de residuos standarized vs. settlement amount ;

proc sgscatter data=residuals_std;

compare x=setdelay y=std_res;

run;

Page 33: Iae intro glm_practica

Modelo GLM (proc GENMOD)

Page 34: Iae intro glm_practica

Gráfico de residuos Std.: Residuos vs. Settlement delay

• Usamos Poisson con link logarítmico

• Las desviaciones son muy distintas al modelo Gamma ya que están medidas con otra escala distinta

• El modelo no es incorrecto

• Sin embargo, no lo vamos a usar por tener unas desviaciones tan distintas.

• De hecho los estadísticos de AIC y BIC no nos permiten comparar

• El gráfico de residuos mejora ligeramente

• El Gamma parece la mejor opción…estamos trabajando con datos reales….hay que llegar a un compromiso

Page 35: Iae intro glm_practica

Incluimos una nueva variable: Legal representation

• La variable “legal representation”:

– 1 cuando en el proceso de cierre del siniestro un abogado ha intervenido en el proceso.

– 0 en caso contrario

• Obviamente cuando un abogado ha estado involucrado el coste medio será mayor debido a que el incurrido finalmente pagado al cliente será mayor

Page 36: Iae intro glm_practica

Incluimos una nueva variable: Legal representation

• El mismo gráfico que el anterior pero en escala logarítmica

Page 37: Iae intro glm_practica

Modelo GLM (proc GENMOD)

* LEGAL REPRESENTATION;

* Legal representation?;

proc sgscatter data=Persinj;

compare x=setdelay y=total /group=legrep;

run;

* Legal representation in log scale;

proc sgscatter data=Persinj;

compare x=setdelay y=logtotal /group=legrep /*reg*/;

run;

* Legal Representation: Fitted Values;

proc genmod data = Persinj /*plots=all*/;

class legrep;

model total = setdelay legrep/ dist=gamma link=log ;

effectplot / obs ;

run;

Page 38: Iae intro glm_practica

Modelo GLM (proc GENMOD)

Page 39: Iae intro glm_practica
Page 40: Iae intro glm_practica

Gamma Log GLM - Legal Representation?

*Legal Representation: Linear Predictor;

proc genmod data = Persinj /*plots=all*/;

class legrep;

model total = setdelay legrep/ dist=gamma link=log ;

effectplot / obs link ;

run;

• La sentencia “effectplot” genera un gráfico de efectos que muestra el comportamiento de un factor de riesgo continuo (setdelay) frente a los niveles de otro factor de riesgo de clasificación (legrep). El objetivo es hacer más sencilla la interpretación del modelo

• La opción “obs” muestra además las observaciones originales

• La opción “link” muestra el predictor sin transformación

Page 41: Iae intro glm_practica

• Tenemos dos líneas de regresión, con y sin abogado

• Notar que los siniestros en la parte inferior del gráfico no están recogidos por ninguno de los dos modelos

– Quizás necesitemos otro factor de riesgo que sea capaz de explicar dichos siniestros de menor cuantía

– Quizás debamos eliminarlos de la muestra original

Page 42: Iae intro glm_practica

PRÁCTICA 2

Modelos de Frecuencia: el problema de la sobre dispersión

Page 43: Iae intro glm_practica

Un código SAS para hacer la práctica…

Nombre: moped_frq_base.sas7bdat

This data set contains information on 287 observations about moped coverage.

Note: to create the dataset run the first step of the code called

overdispersion.sas

Varible Definition

num_claims number of claims (moped - yer)

urbanicity rural or urban

Type over or under 60 kg

age age of the driver

veh_age LT1, les than a year. MT1, more than a year

Page 44: Iae intro glm_practica

Modelo original de Poisson

proc genmod data=over.moped_frq_base;

class urbanicity (param=ref ref='Urban') type (param=ref ref='Under')

veh_age (param=ref ref='LT1');

model num_claims = urbanicity type age veh_age / dist=poi link=log type3;

estimate 'Rural vs. Urban Urbanicity' urbanicity 1;

estimate 'Non-Under vs. Under' type 1;

estimate 'MT1 vs. LT1' veh_age 1;

estimate 'Age' age -1;

title 'Poisson Regression Model of Number of Claims Data';

run;

Page 45: Iae intro glm_practica

Modelo original de Poisson

Scaled Deviance > 1

es un claro signo de

sobre dispersión

Scaled Pearson > 1

es un claro signo de

sobre dispersión

Los errores estándar

son excesivamente

pequeños al no poder

recoger la sobre

dispersión

La probabilidad de que

el estimador sea

significativo se

incrementa: sobre

estimamos la

significación

Los estimadores

siguen siendo

consistentes

Cuando

usamos

Poisson el

parámetro

de escala

es 1

Page 46: Iae intro glm_practica

Modelo de Poisson con factor de dispersión multiplicativo

* corrección de la sobre dispersión con ajuste SE;

proc genmod data=over.moped_frq_base;

class urbanicity (param=ref ref='Urban') type (param=ref ref='Under')

veh_age (param=ref ref='LT1');

model num_claims = urbanicity type age veh_age / dist=poi link=log pscale type3;

title 'Poisson Regression Model of Number of Claims Data with SE Adjustment';

run;

Page 47: Iae intro glm_practica

Modelo de Poisson con factor de dispersión multiplicativo

Los valores de la

Desviación y Pearson Chi-

Square son los mismos.

Pero los escalados han

cambiado.

El parámetro

de escala es

la raíz

cuadrada de

3.4170

Esta es la estimación del

factor multiplicativo de

dispersión

Toma el valor 1 porque

hemos seleccionado un

parámetro de dispersión

Chi-cuadrado de Pearson

Los parámetros de

estimación no

cambian pero se han

inflado los errores

estándar

La probabilidad de que

el estimador sea

significativo se

decrece: ya no sobre

estimamos la

significación

Page 48: Iae intro glm_practica

Modelo con Binomial Negativa

proc genmod data=over.moped_frq_base;

class urbanicity (param=ref ref='Urban') type (param=ref ref='Under')

veh_age (param=ref ref='LT1');

model num_claims = urbanicity type age veh_age / dist=nb link=log type3;

estimate 'Rural vs. Urban Urbanicity' urbanicity 1;

estimate 'Non-Under vs. Under' type 1;

estimate 'MT1 vs. LT1' veh_age 1;

estimate 'Age' age -1;

title 'Negative Binomial Regression Model of Number of Claims Data';

run;

Page 49: Iae intro glm_practica

Modelo con Binomial Negativa

El parámetro

de dispersión

estimado es

mucho mayor

que cero. Por

lo tanto la

sobre

dispersión es

evidente

Los estadísticos de

ajustes escalados están

cerca de 1, el modelo

binomial negativo es

correcto.

Los parámetros de

estimación no

cambian pero se han

inflado los errores

estándar

Page 50: Iae intro glm_practica

PRÁCTICA 3

¿Sobre dispersión ó exceso de ceros? ¿Cómo detectar el exceso de ceros?

Page 51: Iae intro glm_practica

Un código SAS para hacer la práctica…

Nombre: moped_frq_base.sas7bdat

This data set contains information on 287 observations about moped coverage.

Note: to create the dataset run the first step of the code called

count_reg.sas

Varible Definition

num_claims number of claims (moped - yer)

urbanicity rural or urban

Type over or under 60 kg

age age of the driver

veh_age LT1, les than a year. MT1, more than a year

Page 52: Iae intro glm_practica

¿Sobre dispersión ó exceso de ceros?

• Vamos a usar el procedimiento COUNTREG que pertenece al módulo SAS / ETS para analizar de nuevo el conjunto de datos moped_frq_base.sas7bdat

• En ocasiones podemos encontrar tanto evidencias de sobre dispersión como evidencias de exceso de ceros en nuestros datos. En ésta práctica vamos a mostrar cómo en éste conjunto de datos encontramos evidencias de ambos efectos.

• Además, en ésta práctica vamos a responder a la pregunta ¿Cuándo encontramos evidencias de excesos de ceros?

• El procedimiento PROC COUNTREG es capaz calcular directamente la estimación de las probabilidades de tener 0, 1, 2, ..., 10 siniestros para cada observación. Gracias a ésta característica podremos mostrar con claridad cuándo existen excesos de ceros por medio del contraste entre la probabilidad empírica y la predicha por el modelo. Para ello usamos la siguiente sentencia:

output out=predpoi probcount(0 to 10);

Para saber más: http://support.sas.com/kb/26/161.html

Page 53: Iae intro glm_practica

Función de error de Poisson en PROC COUNTREG

El código es el siguiente:

%let var = urbanicity type age veh_age ;

title "Test de bondad de ajuste bajo la distribución de Poission";

proc countreg data=moped_frq_base;

classes &var;

model Num_Claims = &var / dist=poisson /*offset = log_expos*/;

output out=predpoi probcount(0 to 10);

run;

Page 54: Iae intro glm_practica

Función de error de Poisson en PROC COUNTREG

En el gráfico de la derecha se muestran las probabilidades estimadas y observadas. Podemos observar claramente la presencia de exceso de ceros.

Page 55: Iae intro glm_practica

Función de error Binomial Negativa en PROC COUNTREG

El código es el siguiente:

%let var = urbanicity type age veh_age ;

title "Test de bondad de ajuste bajo la distribución Binomial

Negativa";

proc countreg data=moped_frq_base;

classes &var;

model Num_Claims = &var / dist=negbin /*offset = log_expos*/;

output out=prednb probcount(0 to 10);

run;

Page 56: Iae intro glm_practica

Función de error Binomial Negativa en PROC COUNTREG

Page 57: Iae intro glm_practica

Función de error Zero Inflated Poisson en PROC COUNTREG

• El código es el siguiente:

/*el símobolo ~ se consigue apretando la tecla ALT de la izquierda

del teclado y en

el teclado numérico se escribe 126 y se suelta la tecla ALT*/

title "Test de bondad de ajuste bajo la distribución Poisson con

exceso de ceros";

proc countreg data=moped_frq_base;

classes &var;

model Num_Claims = &var / dist=zip /*offset = log_expos*/;

zeromodel Num_Claims ~ &var;

output out=predzip probcount(0 to 10);

run;

Page 58: Iae intro glm_practica

Función de error Zero Inflated Poisson en PROC COUNTREG

Page 59: Iae intro glm_practica

Función de error ZINB en PROC COUNTREG

El código es el siguiente:

title "Test de bondad de ajuste bajo la distribución Binomial

Negativa con exceso de ceros";

proc countreg data=moped_frq_base;

classes &var;

model Num_Claims = &var / dist=zinb /*offset = log_expos*/;

zeromodel Num_Claims ~ &var;

output out=predzinb probcount(0 to 10);

run;

Page 60: Iae intro glm_practica

Función de error ZINB en PROC COUNTREG

Los modelos ZIP y ZINB suelen también utilizarse para solventar el problema de sobre dispersión además del problema de exceso de ceros. El modelo ZINB tiene un AIC muy similar al modelo NB. .

Page 61: Iae intro glm_practica

En resumen…

• Los modelos ZIP y ZINB suelen también utilizarse para solventar el problema de sobre dispersión además del problema de exceso de ceros. El modelo ZINB tiene un AIC muy similar al modelo NB.

Page 62: Iae intro glm_practica

PRÁCTICA 4

Modelos de Coste Medio: ajuste del coste medio

Page 63: Iae intro glm_practica

Práctica 4: Ajuste del coste medio

coste_medio_intro.sas

Page 64: Iae intro glm_practica

PRACTICA 5

Ajuste del Burning Cost con una distribución Tweedie

Page 65: Iae intro glm_practica

tweedie_intro.sas

Page 66: Iae intro glm_practica