R/SupportFunctions_III_SummaryResults.R

Defines functions Summary_Results_Incurred Summary_Results

Documented in Summary_Results Summary_Results_Incurred

#' @title Summary_Results
#' @description It generates a summary of the results obtained by the paid MackNet model.
#' @param Cumulative.T Cumulative payments triangle.
#' @param Original.Cumulative.T.Val Upper and lower cumulative payment triangle. This information is needed to obtain the error generated by the paid MackNet model.
#' @param Reservest.D It contains the total reserves sampled by the MackNet model.
#' @param Reservest_1.D It contains the total reserves in t+1 sampled by the MackNet model.
#' @param Payments.D It contains the total following year payments sampled by the MackNet model.
#' @param Reservest.D.Vector It contains the reserves by accident year sampled by the MackNet model.
#' @param Payments.D.Vector It contains the following year payments by accident year sampled by the MackNet model.
#' @param Reservest_1.D.Vector It contains the reserves by accident year sampled by the MackNet model.
#' @param Ultimatest.D.Vector It contains the ultimate cost by accident year sampled by the MackNet model.
#' @param Ultimatest.D It contains the ultimate cost sampled by the MackNet model.
#' @param TrianglesBackup This array contains all the triangles sampled by the MackNet model.
#' @param Simulations Number of triangle samples to be produced by the MackNet model.
#' @return The formula generates the following outputs: \itemize{
#' \item \code{CDR} Claims Development Result distribution function.
#' \item \code{CDR_Convergence} Mean convergence of the Claim Development Result
#' \item \code{Summary} Summary of the results obtained
#' }
#' @import keras
#' @import abind
#' @export

Summary_Results=function(Cumulative.T,Original.Cumulative.T.Val,Reservest.D,Reservest_1.D,Payments.D,Reservest.D.Vector,Payments.D.Vector,
                         Reservest_1.D.Vector,Ultimatest.D.Vector,Ultimatest.D,TrianglesBackup,Simulations){
  #----------------------------------------CDR analisis----------------------------------------#
  #CDR analisis
  CDR=mean(Reservest.D)-Reservest_1.D-Payments.D
  #CDR convergence
  Mean.Convergence=Percentile.Convergence=0
  for (i in 1:Simulations){
    Mean.Convergence[i]=mean(CDR[1:i]);Percentile.Convergence[i]=quantile(CDR[1:i],0.005)
  }
  #CDR analisis per accident year
  Reserve.Mean.AY=apply(Reservest.D.Vector,1,mean); sum(Reserve.Mean.AY)-mean(Reservest.D)
  CDR.Mean.AY=apply(Reserve.Mean.AY-Payments.D.Vector-Reservest_1.D.Vector,1,mean)
  CDR.SD.AY=apply(Reserve.Mean.AY-Payments.D.Vector-Reservest_1.D.Vector,1,sd)
  CDR.Percentile.AY=apply(Reserve.Mean.AY-Payments.D.Vector-Reservest_1.D.Vector,1,quantile,probs=0.005)
  #CDR final table
  table=rbind(cbind(CDR.Mean.AY,CDR.SD.AY,CDR.Percentile.AY),cbind(mean(CDR),sd(CDR), quantile(CDR,0.005)))
  table=as.data.frame(table,row.names = c(1:dim(Cumulative.T)[1],"Total"))
  table$Risk=table$CDR.Percentile.AY-table$CDR.Mean.AY
  #---------------------------------Reserves and payment analysis------------------------------#
  #Reserves and payment analisis per accident year
  Reserve.Mean.AY=apply(Reservest.D.Vector,1,mean)
  Reserve.Mean.t1.AY=apply(Reservest_1.D.Vector,1,mean)
  Payment.Mean.AY=apply(Payments.D.Vector,1,mean)
  #Reserves and payments final table
  table2=rbind(cbind(Payment.Mean.AY,Reserve.Mean.AY,Reserve.Mean.t1.AY),cbind(mean(Payments.D),mean(Reservest.D),mean(Reservest_1.D)))
  Final.Table=cbind(table,table2)
  #----------------------------------Individual Backtest result--------------------------------#
  Percentiles.Dist=Individual.backtest(TrianglesBackup,Full.Incremental(Original.Cumulative.T.Val))
  set.seed(33433);Theoretical=runif(10000)
  ks.Individual.Test=c(rep(0,dim(Final.Table)[1]-1),ks.test(Percentiles.Dist,y="punif")$p.value)
  Final.Table=cbind(Final.Table,ks.Individual.Test)
  #-----------------------------------------LOB Backtest---------------------------------------#
  Percentiles.LoB.Backtest=LoB.Backtest(Reservest.D,Reservest.D.Vector,Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val)))
  Percentiles.LoB.Backtest.Payments=LoB.Backtest(Payments.D,Payments.D.Vector,Payment.Vector(Full.Incremental(Original.Cumulative.T.Val)))
  Percentiles.LoB.Backtest.Reserve.t1=LoB.Backtest(Payments.D,Reservest_1.D.Vector,Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val)))
  Risk.Between.Reserve=Final.Table$Risk/Final.Table$Reserve.Mean.AY
  Final.Table=cbind(Final.Table,Percentiles.LoB.Backtest,Percentiles.LoB.Backtest.Payments,Percentiles.LoB.Backtest.Reserve.t1,Risk.Between.Reserve)
  #--------------------------------------MSE Calculation---------------------------------------#
  #The MSE of the predicted reserves and payments is calculated
  SE.Reserves=c(((Reserve.Mean.AY-Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2,
                ((sum(Reserve.Mean.AY)-sum(Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val)))))^2)
  SE.Payments=c(((Payment.Mean.AY-Payment.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2,
                ((sum(Payment.Mean.AY)-sum(Payment.Vector(Full.Incremental(Original.Cumulative.T.Val)))))^2)
  SE.Reserves.t1=c(((Reserve.Mean.t1.AY-Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2,
                   ((sum(Reserve.Mean.t1.AY)-sum(Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val)))))^2)
  Ratio.Reserves=c(((Reserve.Mean.AY-Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val)))/Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val)))^2,
                   ((sum(Reserve.Mean.AY)-sum(Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val))))/sum(Reserve.t.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2)
  Ratio.Payments=c(((Payment.Mean.AY-Payment.Vector(Full.Incremental(Original.Cumulative.T.Val)))/Payment.Vector(Full.Incremental(Original.Cumulative.T.Val)))^2,
                   ((sum(Payment.Mean.AY)-sum(Payment.Vector(Full.Incremental(Original.Cumulative.T.Val))))/sum(Payment.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2)
  Ratio.Reserves.t1=c(((Reserve.Mean.t1.AY-Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val)))/Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val)))^2,
                      ((sum(Reserve.Mean.t1.AY)-sum(Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val))))/sum(Reserve.t_1.Vector(Full.Incremental(Original.Cumulative.T.Val))))^2)
  Final.Table=cbind(Final.Table,SE.Reserves,SE.Payments,SE.Reserves.t1,Ratio.Reserves,Ratio.Payments,Ratio.Reserves.t1)
  #----------------------------------Ult MSE Calculation---------------------------------------#
  Ultimate = c(apply(Ultimatest.D.Vector,1,mean),sum(apply(Ultimatest.D.Vector,1,mean)))
  UltimateVal = c(Original.Cumulative.T.Val[,dim(Original.Cumulative.T.Val)[1]],sum(Original.Cumulative.T.Val[,dim(Original.Cumulative.T.Val)[1]]))
  SE.Ult=(Ultimate-UltimateVal)^2
  Ratio.Ult=((Ultimate-UltimateVal)/UltimateVal)^2
  Percentiles.LoB.Backtest.Ult=LoB.Backtest(Ultimatest.D,Ultimatest.D.Vector,Original.Cumulative.T.Val[,dim(Original.Cumulative.T.Val)[1]])
  Final.Table=cbind(Final.Table,SE.Ult,Ratio.Ult,Percentiles.LoB.Backtest.Ult)
  #------------------------------------RR MY Calculation---------------------------------------#
  RR_MY=c(apply(Reservest.D.Vector-Reserve.Mean.AY,1,quantile,probs=0.995),quantile(Reservest.D,0.995)-mean(Reservest.D))
  RR_SD=c(apply(Reservest.D.Vector-Reserve.Mean.AY,1,sd),sd(Reservest.D))
  Final.Table=cbind(Final.Table,RR_MY,RR_SD)
  return(list(CDR=CDR,CDR_Convergence=Mean.Convergence,Summary=Final.Table))
}



#' @title Summary_Results_Incurred
#' @description It generates a summary of the results obtained by the incurred MackNet model.
#' @param Cumulative.T Cumulative payments triangle.
#' @param Original.Cumulative.T.Val.Incurred Upper and lower incurred cost triangle. This information is needed to obtain the error generated by the paid MackNet model.
#' @param Reservest.D It contains the total reserves sampled by the MackNet model.
#' @param Reservest.D.Vector It contains the reserves by accident year sampled by the MackNet model.
#' @param Ultimatest.D.Vector It contains the ultimate cost by accident year sampled by the MackNet model.
#' @param Ultimatest.D It contains the ultimate cost sampled by the MackNet model.
#' @param Ultimatest_1.D.Vector It contains the ultimate cost in t+1 by accident year sampled by the MackNet model.
#' @param Ultimatest_1.D It contains the ultimate cost in t+1 sampled by the MackNet model.
#' @param TrianglesBackup This array contains all the triangles sampled by the MackNet model.
#' @param Simulations Number of triangle samples to be produced by the MackNet model.
#' @return The formula generates the following outputs: \itemize{
#' \item \code{CDR} Claims Development Result distribution function.
#' \item \code{CDR_Convergence} Mean convergence of the Claim Development Result
#' \item \code{Summary} Summary of the results obtained
#' }
#' @import keras
#' @import abind
#' @export

Summary_Results_Incurred=function(Cumulative.T,Original.Cumulative.T.Val.Incurred,Reservest.D,Reservest.D.Vector,
                                  Ultimatest.D,Ultimatest.D.Vector,Ultimatest_1.D,Ultimatest_1.D.Vector,TrianglesBackup,Simulations){
  #----------------------------------------CDR analisis----------------------------------------#
  #CDR analisis
  CDR=Ultimatest.D-Ultimatest_1.D
  #CDR convergence
  Mean.Convergence=Percentile.Convergence=0
  for (i in 1:Simulations){
    Mean.Convergence[i]=mean(CDR[1:i]);Percentile.Convergence[i]=quantile(CDR[1:i],0.005)
  }
  #CDR analisis per accident year
  Reserve.Mean.AY=apply(Reservest.D.Vector,1,mean)
  CDR.Mean.AY=apply(Ultimatest.D.Vector-Ultimatest_1.D.Vector,1,mean)
  CDR.SD.AY=apply(Ultimatest.D.Vector-Ultimatest_1.D.Vector,1,sd)
  CDR.Percentile.AY=apply(Ultimatest.D.Vector-Ultimatest_1.D.Vector,1,quantile,probs=0.005)
  #CDR final table
  table=rbind(cbind(CDR.Mean.AY,CDR.SD.AY,CDR.Percentile.AY),cbind(mean(CDR),sd(CDR), quantile(CDR,0.005)))
  table=as.data.frame(table,row.names = c(1:dim(Cumulative.T)[1],"Total"))
  table$Risk=table$CDR.Percentile.AY-table$CDR.Mean.AY
  #---------------------------------Reserves and payment analysis------------------------------#
  #Reserves and payment analisis per accident year
  Reserve.Mean.AY=apply(Reservest.D.Vector,1,mean)
  #Reserves and payments final table
  table2=rbind(cbind(Reserve.Mean.AY),cbind(mean(Reservest.D)));Final.Table=cbind(table,table2)
  #----------------------------------Individual Backtest result--------------------------------#
  Percentiles.Dist=Individual.backtest(TrianglesBackup,Full.Incremental(Original.Cumulative.T.Val.Incurred))
  set.seed(33433);Theoretical=runif(10000)
  ks.Individual.Test=c(rep(0,dim(Final.Table)[1]-1),ks.test(Percentiles.Dist,y="punif")$p.value)
  Final.Table=cbind(Final.Table,ks.Individual.Test)
  #-----------------------------------------LOB Backtest---------------------------------------#
  Percentiles.LoB.Backtest=LoB.Backtest(Reservest.D,Reservest.D.Vector,Original.Cumulative.T.Val.Incurred[,dim(Original.Cumulative.T.Val.Incurred)[1]]-LastDiagonal.Vector(Cumulative.T))
  Risk.Between.Reserve=Final.Table$Risk/Final.Table$Reserve.Mean.AY
  Final.Table=cbind(Final.Table,Percentiles.LoB.Backtest,Risk.Between.Reserve)
  #------------------------------------RR MY Calculation---------------------------------------#
  RR_MY=c(apply(Reservest.D.Vector-Reserve.Mean.AY,1,quantile,probs=0.995),quantile(Reservest.D,0.995)-mean(Reservest.D))
  RR_SD=c(apply(Reservest.D.Vector-Reserve.Mean.AY,1,sd),sd(Reservest.D))
  Final.Table=cbind(Final.Table,RR_MY,RR_SD)
  return(list(CDR=CDR,CDR_Convergence=Mean.Convergence,Summary=Final.Table))
}
EduardoRamosP/MackNet documentation built on Sept. 26, 2020, 9:21 a.m.