目录

GLM基础(四):SAS计算车险纯保费示例

数据说明

数据名:SwedishMotorInsurance

行数:2182,列数:7

变量名称 说明
Kilometres 车辆的行驶距离分组,有5个level,取值为1-5
Zone 地理区域分区, 有7个分类,取值为1-7
Bonus 司机的历史索赔分级,和NCD近似,有7个level,取值为1-7
Make 此处指车辆种类,有9个分类,取值为1-9
Insured 承保的风险单位数,“已赚保单年”在该行分类下的汇总,取值0.01从到127687.3
Claims 案件数量
Payment 总赔款

数据示例:

Kilometres Zone Bonus Make Insured Claims Payment
1 1 1 1 455.13 108 392491
1 1 1 2 69.17 19 46221
1 1 1 3 72.88 13 15694

数据来源: Frees, Edward W. Regression modeling with actuarial and financial applications. Cambridge University Press, 2009.

输入数据

PROC IMPORT 步骤:

  1. DATAFILE=REFFILE 指定要导入的CSV文件的路径和文件名。
  2. DBMS=CSV 指定要导入的文件类型为CSV格式。
  3. OUT=glm.swe 指定导入后创建的数据集的名称为 “glm.swe”。
  4. GETNAMES=YES 指定导入的CSV文件的第一行包含变量名。
  5. RUN; 执行 PROC IMPORT 步骤。

PROC CONTENTS 用于查看导入的数据集 “glm.swe” 的变量名、类型、长度等。

 1/*指定REFFILE作为要导入的CSV文件的路径*/
 2FILENAME REFFILE '/[文件路径]/SwedishMotorInsurance.csv';
 3
 4PROC IMPORT DATAFILE=REFFILE
 5	DBMS=CSV
 6	OUT=glm.swe;
 7	GETNAMES=YES;
 8RUN;
 9
10PROC CONTENTS DATA=glm.swe; RUN;

分别拟合索赔频率和索赔强度

纯保费 = 出险率 * 案均赔款 = 索赔频率 * 索赔强度

索赔频率 = 出险率 = 案件数量 / 已赚件数

索赔强度 = 案均赔款 = 总赔款 / 案件数量

新建变量索赔频率frequency和索赔强度severity作为GLM模型的目标变量。

1data glm.swe;
2set glm.swe;
3severity=Payment/Claims;
4frequency=Claims/Insured;
5run;

索赔频率泊松模型

data=glm.swe; 指定数据集。

class kilometres(ref="2") zone(ref="1") bonus make; 指定分类变量,SAS默认使用字母降序最大值(例如Z)作为base level(reference level)。应使用观测数最多的level作为base,默认base不符合则使用ref强制指定。

model frequecy = kilometres zone bonus make 指定frequency是因变量,kilometres zone bonus make是自变量。

/dist=poisson link=log; 使用泊松分布和log link function。

ods output parameterestimates=glm.frequency; 将参数估计结果输出指定数据集。在SAS中,ODS代表"Output Delivery System",用于控制和管理输出结果的格式、位置和样式。ODS允许将SAS过程和过程输出以多种不同的格式输出,例如HTML、PDF、RTF、Excel等。

weight insured; 指定使用 “insured” 变量作为权重。

run; 执行 proc genmod 步骤。

1proc genmod data=glm.swe;
2class kilometres(ref="2") zone(ref="1") bonus make;
3model frequency = kilometres zone bonus make/dist=poisson link=log;
4ods output parameterestimates=glm.frequency;
5weight insured;
6run;
对应的R代码

指定reference level:

1swe$Kilometres <- relevel(swe$Kilometres, ref = "2")

拟合模型,输出结果应与SAS一致。

1freq <- glm(frequency ~ Kilometres + Zone + Bonus + Make, 
2    family = poisson, data = swe, weights = Insured)

索赔强度伽马模型

使用的语句和前述模型一致,目标变量替换为severity,指定分布为gamma

weight claims; 指定使用 “claims” 变量作为权重。

1proc genmod data=glm.swe;
2class kilometres(ref="2") zone(ref="1") bonus make;
3model severity = kilometres zone bonus make/dist=gamma link=log;
4ods output parameterestimates=glm.severity;
5weight claims;
6run;
对应的R代码

Gamma分布的canonical link是inverse function,但此处选择了log link function。

log link function通常用于处理正数响应变量,如计数数据或severity等级。

inverse link function通常用于处理正数响应变量的倒数,例如某些测量的时间间隔。如果此处选择inverse link,参数的magnitude将会非常小。

1sev <- glm(severity ~ Kilometres + Zone + Bonus + Make, 
2    family = Gamma(link = "log"), data = swe, weights = Claims)