2.3 知识发现过程实例分析
2.3.1 实例背景
本实例的实现基于上述智能体的知识发现模型,以某社保项目为实验环境,利用其运行两年多的数据进行数据挖掘,在此过程中实现了模型中提出的部分功能。在社会保险应用系统项目中,根据保险业务的具体情况,挖掘保险业务涉及的数据资源,发现其潜在的数据关系及隐藏的知识,提高保险业务的管理水平,降低风险。
保险本身是一项风险业务,保险公司的一项重要工作就是进行风险评估,风险评估对保险公司的正常运作起着至关重要的作用。保险公司从参保单位获得保金,并为参保单位的职工提供保险。保费和保单的设计都需要比较详细的风险分析,保险公司成功的一个关键因素是在设置具有竞争力的保费和覆盖风险之间保持平衡,保费过高意味着失去市场,而保费过低又影响公司的盈利。评估一项保险投资组合的效果如何,既需要对该投资组合进行整体分析,又需要进行投资组合内部分析。通过整体分析可以判断以前的投资组合是否盈利,而通过投资组合内部的详细分析,可以揭示该投资组合在哪些领域盈利大、哪些领域损失大。整体分析可在总保费和总索赔的基础上用统计的方法来实现,而对其内部的分析则需要更复杂、更精确的方法。
将保险风险分析中一些反复、交互式、探索性的工作看成一种KDD过程,利用一些正规的分析方法,获得这一领域中专家所具有的直觉知识,这是数据挖掘技术和社保应用紧密结合的切入点。
一个保险公司投资组合数据库包含用户购买的保单集合。一个保单确保一个标的物的价值不会失去。当标的物损失或丢失时,根据保单,要进行索赔以作为补偿。一个保单在一定的时间内有效,保单的有效时间被称为风险期。在任一时间,投资组合数据库中的保单所对应的风险都是不同的。
保费通常是通过对一些主要的因素(如驾驶员的年龄、车辆的类型等)进行多种分析和直觉判断来确定的。由于投资组合的数量很大,分析方法通常是粗略的。
一项投资组合的绩效通常用前几年的数据来评估。这种分析通常由承保人用来预测将来这项投资组合的绩效,并根据市场的变化和标的物的情况来调整保单等级。每年都要用这种分析来调整来年保费的设置规则。
设置保费有两种极端情况:所有保单都采用同一保费,每一保单根据自身的具体情况来单独设置保费。这两种极端情况都是不实用的。然而,一个好的保费设置应该是接近后者的。保险商更喜欢在设置保费时考虑更多的因素。
数据挖掘就是用来处理大型数据库的,因此它提供了进行保险投资组合数据库分析的环境。随着业务的增长,保险公司一方面要随时接受新参保的单位,另一方面要考虑新参保的单位相应险种的年度收支平衡情况。为了尽可能地为保险公司提供决策支持,采用“年度险金风险评估分类器”的方法来解决保险公司的这一决策分析问题。
利用数据挖掘的分类任务中的决策树方法,根据保险业务险种的不同,把保险业务分类器相应地分为五种,即“养老保险年度险金风险评估分类器”“医疗保险年度险金风险评估分类器”“工伤保险年度险金风险评估分类器”“生育保险年度险金风险评估分类器”“失业保险年度险金风险评估分类器”。这些分类器根据保险公司相应险种的历史记录,对各个已参保单位和新参保单位的年度险金征集额度与拨付额度的平衡程度进行预测。预测的目标类别是年度险金收支平衡的程度,如严重超支、一般超支、收支平衡、略有盈余、显著盈余等。形成分类器的预测变量可根据具体险种的不同特点选择不同数据库的表及表的相应属性列,如缴费比率、单位性质、行业性质、离退休职工比例等因素都可能作为某些分类器的预测变量。
当保险公司准备接受新的企事业单位参加保险时,保险公司就可以根据相应险种的年度险金收支平衡分类器对新参保单位进行年度险金收支平衡预测,从而判断针对该新参保单位保险公司收支平衡的大致范围。该分类器不仅可以对新参保单位进行预测,也可以对老的参保单位新一年的收支平衡进行预测。通过该分类器,保险公司还可以观察影响企业某一险种收支平衡的因素,并相应地做出调整[14][20]。
2.3.2 数据预处理
在数据预处理过程中,数据来源是某社会保险公司的实际历史数据,这些社保数据存放在Oracle 7.2数据库中,数据量为1.2GB,其中有关工伤保险的数据涉及近50个基本表、近300个不同的属性。社保历史数据的数据粒度在保单维上以个人保单分布为主、企业保单分布为辅;在时间维上基本以天为分布单位,少量数据以周和月为分布单位。这些历史数据中工伤保险数据的时间跨度近3年,涉及的保单总计近2万人次,覆盖9个不同行业的数百个企业和事业单位。下面以工伤保险为例说明实现过程[20]。
工伤保险的作用是使企业职工在遭受工伤事故和职业病伤害(简称工伤)时,获得医疗保障、生活保障和经济补偿,享受职业康复的权利。企业必须按照有关规定参加工伤社会保险,缴纳工伤保险费用。浮动费率的调整对工伤保险来说是收支平衡的一个关键因素,其实质是在设置对企业合理的保费和覆盖风险之间保持平衡。
在数据预处理阶段进行了计算企业的工资总额水平、计算各级工伤残和死亡水平、计算企业的拨付应缴比、消除由于噪声产生的数据失真、消除数据中的冗余信息、推导计算缺值数据、消除数据中的重复记录、消除“脏”数据、完成数据格式转换等工作。
数据预处理包含如下几个过程。
·数据抽取过程:根据工伤保险收支平衡分类器预定义的数据处理要求,从原始数据库中抽取相应年份的数据,并根据业务需求进行各种统计工作。
·数据清洗过程:根据工伤保险收支平衡分类器预定义的数据处理要求,对原始数据库中的数据进行清洗,该过程在数据抽取更新的过程中完成。
·格式转换过程:从数据集市中把已经经过数据预处理的数据转换成MLC++所要求的*.name和*.test格式的文件,为数据挖掘做好准备。
·数据验证过程:根据工伤保险收支平衡分类器预定义的数据处理要求,对原始数据库中的数据进行数据验证,该过程在数据抽取更新的过程中完成。
经过数据预处理,得到保险公司索赔信息的数据字典(该表中的独立变量既有离散属性,也有连续属性,连续属性还没有进行离散化),如图2.11所示。
图2.11 工伤保险索赔信息数据字典
在构造工伤保险年度险金分类器的过程中,我们尽可能地选取有关的独立变量。但是,在这些独立变量中不可避免地会有一些与目标变量无关的属性,如果把所有的变量全部作为数据挖掘算法的输入,将会导致算法生成许多复杂、无用的分类规则。因此,有必要对这些选取的独立变量进行特征选择。
特征选择就是在给出的记录集的所有属性中选择那些与目标类别强相关的属性的过程。特征选择可以减少算法输入的独立变量,使算法执行时间显著减少,可以去掉与目标变量不相关的独立变量,有助于提高算法生成规则的精确度,并大大减少生成规则的数量。
对生成的数据表进行了特征选择处理,各属性的分类能力直方图如图2.12所示。所选的20个属性的分类能力的分布范围是[0.4,37.8]。经过反复测试,我们把特征选择的阈值定义为15,结果有7个属性被过滤出来。
图2.12 各属性分类能力直方图
把目标分为两类,其中0代表支大于收,1代表收支平衡。数据挖掘的结果生成了一棵在各节点分别根据独立变量做决策的多叉树。本实例系统利用的数据挖掘算法是SGI在1997年2月公布的Windows NT操作系统下的MLC++2.0,利用其中的不同分类算法,形成了多个工伤保险年度险金收支平衡分类器,并取得了较高的精度。例如:利用ID3算法生成的分类器的精度如图2.13所示(其中采样频率为70%)。
图2.13 利用ID3算法生成的分类器的精度
模型的结果精度为89.1892%。在生成模型的过程中,算法选取的训练集的实例有77个,测试集的实例有37个,把37个测试集实例用混淆矩阵进行处理的结果是有33个实例是正确的,4个实例是错误的。该测试结果表明数据预处理过程是准确、有效的。
2.3.3 特征选择
1.算法实现
特征选择(Feature Selection)也称特征子集选择(Feature Subset Selection,FSS)或属性选择(Attribute Selection),是指从已有的M个特征(Feature)中选择N个特征,使得系统的特定指标最优化。它是从原始特征中选择一些最有效特征以降低数据集维度的过程,是提高学习算法性能的一个重要手段,也是模式识别中关键的数据预处理步骤。对于一个学习算法来说,好的学习样本是训练模型的关键。
此外,需要区分特征选择与特征提取。特征提取(Feature Extraction)是指利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法。特征选择过程一般包括产生过程、评价函数、停止准则、验证过程四部分。算法实例如下[23]:
2.运行结果
特征选择分为几类:过滤式特征选择、单变量特征选择、包裹式特征选择、嵌入式特征选择。过滤式特征选择算法根据方差进行选择,方差越小,代表该属性识别能力越差,可以剔除。单变量特征选择算法选择3个特征,指标使用的是方差分析F值,返回的是一个布尔值组成的数组,该数组只是那些被选择的特征。包裹式特征选择算法选择svm作为评定算法,选择两个特征进行特征排名,被选出特征的排名为1。嵌入式特征选择算法本身作为组成部分嵌入学习算法,将样本划分成较小的子集,选择特征的依据通常是划分后子节点的纯度,划分后子节点越纯,则说明划分效果越好。可见决策树生成的过程也就是特征选择的过程,算法运行结果如图2.14~图2.17所示。
图2.14 过滤式特征选择结果
图2.15 单变量特征选择结果
图2.16 包裹式特征选择结果
图2.17 嵌入式特征选择结果