Modelling claim frequency R 問題



  • library(ggplot2)
    library(dplyr)
    library(class)
    library(MASS)
    library(caret)
    library(devtools)
    library(countreg)
    library(forcats)
    library(AER)
    library(pscl)
    install.packages("countreg", repos="http://R-Forge.R-project.org")
    #Attaching data for modeling
    data(dataCar)
    data1 <- dataCar
    #Data Cleaning & Pre-processing
    data2 <- unique(data1)
    data3 <- data2[data2\$veh_value > quantile(data2\$veh_value, 0.0001),] 
    data4 <- data3[data3\$veh_value < quantile(data3\$veh_value, 0.999), ]
    #Regrouping vehicle categories
    top9 <- c('SEDAN','HBACK','STNWG','UTE','TRUCK','HDTOP','COUPE','PANVN','MIBUS')
    data4\$veh_body <- fct_other(data4\$veh_body, keep = top9, other_level = 'other')
    #Converting catagorical variables into factors
    names <- c('veh_body' ,'veh_age','gender','area','agecat')
    data4[,names] <- lapply(data4[,names] , factor)
    str(data4)
    ##data partition - original data
    data <- data4
    data_partition <- createDataPartition(data\$numclaims, times = 1,p = 0.8,list = FALSE)
    str(data_partition)
    training <- data[data_partition,]
    testing  <- data[-data_partition,]
    #Re-sampling
    sample1 <- subset(data4, numclaims!=0)
    sample2 <- data4[ sample( which(data4\$numclaims==0), 
                              round(0.9*length(which(data4\$numclaims==0)))), ]
    sample3 <- data4[ sample( which(data4\$numclaims==0), 
                              round(0.1*length(which(data4\$numclaims==0)))), ]
    y <- rnbinom(n = 6323, mu = 1, size = 3) # n value should be equal to sample 3
    sample3\$numclaims <- y
    df_sample <- rbind(sample1,sample2,sample3)
    

    我在學習怎麼用R 去模擬claim frequency 在網上看見這個例子 開始在最後的

    y <- rnbinom(n = 6323, mu = 1, size = 3) # n value should be equal to sample 3
    sample3\$numclaims <- y
    df_sample <- rbind(sample1,sample2,sample3)
    

    我在學習怎麼用R 去模擬claim frequency 在網上看見這個例子 開始在y <- rnbinom(n = 6323, mu = 1, size = 3) # n value should be equal to sample 3 sample3\$numclaims <- y df_sample <- rbind(sample1,sample2,sample3)
    我在學習怎麼用R 去模擬claim frequency 在網上看見這個例子 開始在最後的random negative binomial simulation 裡面 mu=1 和 size=3 是怎麼得出的呢?
    還有df_sample 是什麼意思?
    有大神可以指教一下? 抱歉 新手用R 嘗試自己理解



  • Hi Sunseeker,

    很荣幸解答你的问题。我想这不仅仅是一个R相关的问题,更是一个建模思路上的问题

    我查阅了一下万能的互联网,发现这个Model Claim Frequency来源于这个网站

    里面着重讲到了一个概念,叫做"over-dispersion",意思就是实际上某变量的波动性比拟合的分布的波动性要高。这是保险理赔数据常常会出现的一个问题。

    不过幸运的是,由于原本数据集的特性,over-dispersion没有造成很大影响,Poission分布拟合的效果还是不错的:
    b98f1efb-6aaa-4c47-963c-074e5fd0914f-image.png

    为了探究over-dispersion"会带来的影响,作者拿出了10%的数据,把这些数据里面的理赔量手动调整成负二项分布。这里面的sample 3就是原本数据里面拿出的10%的数据。df_sample是把这10%的数据和别的数据放回到了一起。mu和size的值不需要太关注,因为这就是一个数据模拟而已。这整个过程叫做Resample。

    sample3 <- data4[ sample( which(data4\$numclaims==0), 
                              round(0.1*length(which(data4\$numclaims==0)))), ]
    y <- rnbinom(n = 6323, mu = 1, size = 3) # n value should be equal to sample 3
    sample3\$numclaims <- y
    df_sample <- rbind(sample1,sample2,sample3)
    

    最后,用resample后的数据来看,Negative Binominal的拟合效果果然更好。
    62338306-0619-4ec4-85ee-640ad3f94560-image.png

    希望这个解答了你的问题。欢迎讨论~


登录后回复