保险业客户流失预测模型的建立与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
保险业客户流失预测模型的建立与实现
摘要:通过分析选择决策树作为保险业客户流失预测模型实现的手段,给出了决策树实现流失预测的算法设计,通过流程图及相应数据结构的说明,介绍了算法实现要点,最后的实验结果表明所建立的预测模型具有良好的准确率。
关键词:保险;客户流失;预测模型;决策树
保险业是我国发展最快的行业之一。
各保险企业一方面投入大量时间、人力、财力去发展新客户,另一方面因客户流失管理的不完善导致现有客户流失。
如何保留住既有客户,如何从这些客户获得最大的收益,就要采用科学的方法来进行分析和判断。
本文结合保险业务规则,对基于数据挖掘的流失预测模型进行了合理分析和应用,使企业对流失客户能够采取更有效的营销策略。
1预测模型的算法选择与建立
在众多的挖掘算法中,本文采用决策树算法来实现,原因在于:同其它方法相比,决策树方法构造树的速度快,决策树模式简单、容易理解,树能很容易地转换为SQL 语句,从而可同数据库进行有效地连接,获得相似甚至更好的精度。
本文提出了将决策树技术运用到客户流失分析中,进而找到判定的关键因
素。
决策树方法是利用信息论中的互信息(信息增益)寻找数据库中具有最大信息量的属性字段,建立决策树的一个结点,再根据该属性字段的不同取值建立树的分支,在每个分支子集中重复建立树的下层结点和分支的过程。
从商业的角度,决策树可以看作是对原始数据的分割(每个分割必须是树的叶子),分割是基于某个特定的理由而做出的。
决策树技术对于客户流失问题的优点是显而易见的。
它可以通过高效的算法生成非常明确的规则集合,并能够采用树形结构对规则应用的先后顺序进行定义。
对于保险公司的管理者,特别是客户服务部门的管理者和CRM的使用者来说,明确、简洁、可解释性强的规则集合无疑对其制定客户战略决策具有非常高效的辅助能力。
根据客户为公司带来的已有价值或是潜在价值(价值包括收益和风险),对客户群体进行细分,基本上每一个客户都会不同程度地为公司创造价值和带来风险。
投保人购买保险缴纳保费是公司取得收益的来源,被保险人则是公司风险产生的源头。
挖掘数据模型的设计就是要通过一些外在表象信息字段间接发现其与客户流失决策之间的关联性。
将投保人与公司发生行为进一步分解,可得到应缴保费总额、首期缴纳保费额、缴费方式、投保期限、投保件数、投保人收入、投保人职业、经济状况、投保意识、保全率预测、道德评价等参数、以往投保情况、理赔情况。
将被保险人属性进一步分解,可得到被保险人健康状
况、年龄、以往病史、以往意外伤害经历、道德评价参数、以往投保经历、理赔经历、额外死亡率(ME值) 。
综合分析得出寿险客户完全互斥的价值属性因素,客户正价值属性(即客户收益属性)包括保费总额、投保人经济状况、投保人保险意识、投保人道德水平、平均年缴保费额等。
客户负价值属性(即客户风险属性)包括理赔数额、被保险人健康状况、被保险人道德水平、额外死亡率(ME值)、被保险人职业类别等,这些因素对流失的影响有大有小,随数据和地区而有较大差异,因此建模时需要具体问题具体分析。
除了原始数据外,还有一些根据原始数据转换、集成、规范化后生成的衍生字段,最终得到的数据挖掘模型如表1所示。
2系统实现
2.1数据结构设计
决策树的存储采用多杈树的形式,双向链表结构、结点的结构定义如下,数据挖掘模型如表1所示。
表1数据挖掘模型序号字段名数据类型能否为NULL1客户号Int(4)FALSE2年龄Int(4)FALSE3性别Int(1)FALSE4学历char(8)FALSE5职业char(8)FALSE6收入Int(8)FALSE7婚姻状态char(2)FALSE8空白期char(20)FALSE9标准化保费Int(8)FALSE10保单号char(20)FALSE11保单类型char(20)FALSE12保单状态booleanFALSE13分公司编号Char(4)FALSE14中支代码Char(8)FALSE15服务部编号
Char(4)FALSE16险种代码Char(8)FALSE17附加险标识Char(8)FALSE18单期保费Int(20)FALSE19累计保费Int(20)FALSE20保额Int(20)FALSE21营销员编号Char(8)FALSE22营销员类型Char(4)FALSE23佣金Int(10)FALSE24险种交费年期平均值Int(4)FALSE25险种保费年期最大值Int(4)FALSE26险种保费年期最小值Int(4)FALSE27险种保费年期平均值Int(4)FALSE struct TreeNode
{
int iAttID;//当前节点的属性标识
int iAttVal;//当前节点属性的值
int iLabelVal;//当前节点是叶节点时的标签类属性值
float fProb;//当前节点是叶节点时分类的概率
bool bEndFlag;//叶节点标识
int iChildNum;//当前节点的孩子数目
struct treeNodeSnd**next;//指向当前节点的孩子节点的指针数组,当指针为空时表示为叶结点
struct treeNodeSnd*parent;//指向当前节点的父节点的指针
};
数据宽表的配置信息由以下结构进行存储
struct DataConfigInfo
{
char cTableName[MAX_NAME_LEN];//宽表表名
char cLabelField[MAX_NAME_LEN];//类标签属性字段名
char cAttName[MAX_FIELD_NUM][MAX_NAME_LEN];//存放属性名称
char cCntnusAttName[MAX_FIELD_NUM];//连续型数据值属性名
int iCntAttDivNum[MAX_FIELD_NUM];//连续值属性在用C4.5算法离散化时,用来测试的划分数
bool bIsCntnus[MAX_FIELD_NUM];//与属性字段名称的位置一一对应,存放相应的字段是否为连续型数值
};
属性值及其对应的类标签值统计信息由以下结构进行存储
struct LabelValueNode
{
int iValue;//当前属性值下的类标签值
int iNum;//当前属性值下该类的数目
struct LabelValueNode *nxtLabel;//标签链的下一个标签属性值情况的指针
};
struct AttributeNode
{
int iValue;//当前属性值
int iNum;//当前属性值在样本中出现的次数
bool bIsCntnus; //当前属性值是否为连续值
double dDivPoint; //对连续值属性的值划分点
LabelValueNode *nxtLabel;//关于当前属性值的标签属性值出现的情况链指针
struct AttributeNode *nxtAttV al; //当前属性的下一个值节点
};
2.2流程设计
总体上分为七个模块部分,关系如图1所示:
图1决策树实现总体流程
各模块实现功能说明:
(1)读取初始化参数。
该部分参数从配置文件中读取,包括宽表表名、类标签字段名、属性字段名、连续值字段名,信息熵阀值等,把读进来的值存到DataConfigInfo 类型的全局变量sDataConfigInfo 中以及其他相应的变量中,待后续使用。
(2)连续型属性值离散化。
从全局变量sDataConfigInfo 中读出连续型属性集合,对集合中每个成员实施算法C4.5 中离散化方法,用以下SQL 语句完成主要操作:“select max(当前属性字段),min(当前属性字段),count(*) from 宽表group by 当
前属性字段”,用返回来的三个值加上sDataConfigInfo 的成员iCntAttDivNum 来求出每一个待测点,然后调用求信息熵函数,求出每个划分的信息熵,待全部测完后,找出使信息熵最大的划分点记录下来。
(3)统计各个属性值情况。
对于连续值属性首先它的信息熵增益值要大于指定阀值,否则将该属性忽略。
对于连续值属性与离散值属性分别用以下SQL 语句实现主要操作,对于连续值属性:"select count(case when 某属性字段<= 该字段的分隔值then 1 else 0 end),count(case when 某属性字段> 该字段的分隔值then 1 else 0 end) from 宽表;连续值属性链上只有两个节点,分别用'0'和'1'表示,用语句的返回值把每个节点上的其它内容填上。
对于离散值属性:“select 某属性字段,count(某属性字段) from 宽表group by 某属性字段order by 某属性字段”用返回的值先生成链表,根据返回的记录条数,生成相应节点数的链表,把一部分值先添上,然后再用下条语句的返回值把属性链中的其他内容添上“select 某属性字段、标签字段、count(*) from 宽表group by 某属性字段、标签字段order by 某属性字段、标签字段”。
(4)求出所有属性的信息熵增益值。
根据以上步骤求得的属性的统计信息,对于离散型属性字段,调用求信息熵函数,求得每个属性的信息熵增益值,根据先前给定的阀值,去掉对决策意义不大的属性字段,留下用来建树的属性字段。
(5)构建决策树与剪枝。
对各个属性的信息熵增益进行从大到小排序,然后按信息熵增益由高到低的顺序分别用其对应的属性创建树节点。
先创建一个空的根节点,然后用增益值最高属性的不同取值分别创建其孩子节点,该属性有几种取值就创建几个孩子节点,然后再对每个孩子节点应用信息熵增益次高的属性创建下一层孩子节点。
对于树剪枝,采用先剪枝的方法,或者达到指定的分类精度,或者达到指定的深度,树便不再继续生长,叶子的分类采用多数表决的方法,对从叶子到根节点这一条分枝上出现的正样本与负样本做比较决定最终的分类。
(6)决策树存储。
决策树存储采用数据库表的形式,每个节点占用一条记录,字段格式如表2所示。
3实验结果
本研究中的流失决策树模型研究收到了预期的研究表 2 字段格式字段名类型说明NodeIDInteger当前节点标识ParentIDInteger当前节点的父节点的标识AttNamevarchar(64)属性名AttValueinteger属性值EndFlagchar(1)叶节点标识LabelFlagchar(1)类标识CurDepthInteger当前节点深度ChildNumInteger当前节点的孩子数NOTESvarchar(255)说明效果。
在对用户资料与保单进行预处理之后,生成挖掘宽表,每个用户一条记录,然后再对挖掘宽表做抽样处理,取得1万条作为训练数据,另取5000条作为测试数据,其中正例样本581条,
负例样本4419条。
调用决策树生成程序创建决策树,决策树建好之后,可以直接对测试数据集进行测试,也可以存储在数据库决策表中,待以后直接从决策表生成决策树,对用户数据进行测试。
决策树判别结果填到宽表中相应字段中,包括分类结果以及相应的概率情况,然后再用其它工具展现给决策者。
流失分类测试结果:
测试样本数:5000
样本类别:正样本(流失)、负样本(非流失)表3测试结果预测类别预测正样本预测负样本测样本总数包含实际正样本25845303 包含实际负样本4346544697 实际样本总数预30146995000从表3中可以看出,在测试的5000 个样本中共有88 个样本被错分,错误率为1.76%。
在流失的303个样本中有258个样本被正确分类,正例样本的准确率达到85.14%;在未流失的4697个样本中被错误贴上“流失”类标签的有43,占总样本数的9.15%。
最终此训练模型为301个样本贴上“流失”的类标签,其余的4699个样本被分为“未流失”类,预测模型具有较好的准确率。
参考文献:
[1]孙细明,张晓鹏.基于信息嫡的决策树算法实现[J].计算机与数字工程,2005(11).
[2]桂现才,彭宏.基于决策树的保险客户流失分析[J].计算机工程与设计,2005(8).
[3]闫禹,冯海文.保险业CRM中数据挖掘技术的应用研究[J].辽宁大学学报,2009(3).。