论文网
首页 理科毕业电气毕业正文

基于随机森林算法的B2B客户分级系统的设计

  • 投稿薛梧
  • 更新时间2015-09-11
  • 阅读量678次
  • 评分4
  • 36
  • 0

李军

(陕西邮电职业技术学院,陕西咸阳712000)

摘要:对分类数据挖掘算法进行研究,发现随机森林算法精度高、训练速度快、支持在线学习,因此提出在系统中使用该算法。针对随机森林算法抗噪声能力一般的问题,采用Bagging方法随机选择几组历史客户分级数据作为算法的训练数据,通过随机森林算法训练出分级模型,并通过这个模型对新客户数据进行自动分级。

教育期刊网 http://www.jyqkw.com
关键词 :随机森林;企业对企业;客户分级;系统设计

中图分类号:TN919.6+4?34 文献标识码:A 文章编号:1004?373X(2015)15?0099?05

收稿日期:2015?02?04

0 引言

近年来,随着全球经济的高速发展,人民生活水品也在不断提高,对企业的商品或服务的要求也在日益提升;而企业也认识到提高客户的满意度和维持客户的忠诚度可以为企业带来更大的利润。于是不同领域的学者们越来越关注客户关系管理(Customer Relationship Management,CRM)这个管理理念。在客户关系管理中,客户取代了产品的质量,成为企业关注的重点,如何吸引和保持有经济价值的客户是CRM 的中心。在CRM中最核心的功能就是客户分级,客户分级就是指企业根据客户的重要程度、贡献程度以及潜在价值等指标对客户进行衡量与分级。

电子商务中,企业面对的关系主要包括两种:企业与客户之间的关系(Business to Customer,B2C)和企业之间的关系(Business to Business,B2B)。在当前使用的客户分级系统中,主要存在以下问题:

(1)普通的B2C 客户分级系统无法处理B2B 模式的客户分级。

(2)现有的B2B 客户分级系统分级精度较低,抗噪声能力一般。

(3) 目前的客户分级系统没有与产品销售结合起来。

(4)在系统使用过程中,需要有一种灵活的权限管理方式来保证系统的安全性。

本文通过对上述问题的分析,以企业的实际需求出发,采用数据挖掘中的随机森林分类算法实现客户分级,并通过客户对产品满意度模型估算产品销售成功率。其中,随机森林算法是分级的基础,使系统可以在多个不同层面的分级依据上互不干扰地得到训练模型,完成分级算法。通过使用随机森林算法,可以使分级算法具有更强的抗噪声能力,并能降低算法的过拟合。

1 客户分级系统的分析

以B2B环境下企业的客户分级作为研究对象,通过历史的客户分级数据建立分级模型,并按照分级模型完成对新客户的分级,同时,系统还具有客户对产品满意度的分析模型,直观地辅助用户决策。系统具有比较高的准确性和抗噪声能力。

1.1 客户分级系统的需求描述

用户使用系统后,首先将历史输入系统中。当需要销售一件产品的时候,如果目标客户已经在历史数据中,系统可以给出推荐的客户,选定目标客户后,可以查看客户的等级,针对不同的客户准备不同的销售手段。同时,可以根据客户对产品、对公司的历史满意度、对购买产品的影响力构建客户对产品的满意度模型,从面积来推断产品销售的成功率,同时也可以找到主要争取方向。如果目标客户不在历史数据中,用户需要把客户的信息输入系统,通过历史数据选择特征值,然后按照历史数据训练出分级模型。

1.2 客户分级系统的分析模型

为了明确系统与用户之间的交互关系,本文采用用例图来说明客户与客户分级系统各个用例之间的交互。

(1)系统角色分析

根据对基于随机森林的B2B客户分级系统的分析,本系统的主要角色有3个:系统管理员、员工用户、领导用户。

系统管理员:主要负责对系统的维护;管理数据库参数,通过系统提供的接口修改数据库表的设置;对用户的组织结构进行管理,通过系统提供的接口管理导航栏的显示;设置权限并对用户进行配置。

员工用户:可以对客户信息进行操作,不能删除客户信息;根据历史客户信息进行分级建模;通过建立好的分级模型对新客户进行分级;新建产品销售,如果审批通过可以建立产品的客户满意度模型。

领导用户:可以查看所有数据信息,包括客户信息、产品销售信息等;审查员工用户提出的新产品销售申请,并做出批复。

(2)系统管理员用例分析

系统管理员主要负责系统的一些设置,为了便于管理员对系统、数据库进行管理,本文系统提供了一些简单且实用的接口,使不是很了解数据库及网站的用户能方便地对数据库表格、导航栏等进行操作。同时,系统管理员可以对用户进行配置,并赋予他们权限。从角色分析中可以得到系统管理员的主要动作有:登陆,对系统进行设置,对用户进行设置。其中系统设置包括数据库表管理、导航栏管理;用户配置包括权限配置和用户组织结构管理。系统管理员的用例图如图1所示。

(3)员工用户用例分析

员工用户是系统的主要使用者,每个用户都可以自定义一个快速的导航栏,对客户信息进行管理,包括数据的录入,也可以训练分级模型,并对新客户进行分级,同时还可以对产品销售进行管理,包括新建产品销售、建立客户满意度模型和产品销售分析。员工用户的用例图如图2所示。

(4)领导用户用例分析

领导用户是对员工用户提出的产品销售方案进行审核的人员的总称,可以查看所有产品信息和客户信息,除此之外,还能对员工客户提出的产品销售方案进行审批。领导用户的用例图如图3所示。

(5)系统总用例图

通过逐个对系统角色进行用例分析后,得到系统的整体用例图,由于登陆、自定义导航栏等都是所有角色共有的,就不在整体用例图中体现,如图4所示。

2 客户分级系统的设计

通过上文对系统的需求分析,可以得出系统的设计,主要论述B2B 客户分级系统的概要设计和详细设计,概要设计主要论述客户分级系统的软件体系结构和功能模块结构,详细设计则主要论述系统关键模块设计。

2.1 客户分级系统的概要设计

系统的概要设计主要包括系统的软件体系架构和功能模块。

2.1.1 客户分级系统的软件体系架构

针对上文所述的系统功能需求和性能需求,得出了系统的主要架构,如图5所示。

本文系统采用B/S框架设计,用户在浏览器端进行浏览,通过网络访问到服务器上进行相关的数据操作。

通过图5 可以看出,系统主要通过管理用户信息、客户分析和产品销售信息为用户取得利益。

用户是系统的使用者,系统采用用户信息管理、权限管理等对用户进行管理,确保系统的使用者。而客户是系统关注的目标,是系统最重要的对象,系统通过客户信息管理、客户分级来对客户进行管理,使用户能得到自己想要的信息。产品销售是关联用户及客户的通道,系统通过产品信息管理、产品销售分析对产品销售进行管理,使用户在得到客户信息后能合理使用这些信息,为自己获取更多的利益。

2.1.2 客户分级系统的功能模块结构

本文对系统进行了模块设计,主要包括5 个部分,如图6所示。系统主要分成5个部分:基础功能、系统设置、用户配置、客户管理和产品销售管理。

基础功能主要是登陆和注销,由于是系统最基础的功能,就不在系统功能层次模块图中特意画出。

系统设置里有库表设置、导航栏设置和数据字典。库表设置里可以对数据库的表格进行操作,方便用户对数据库进行操作。导航栏设置里可以对导航栏进行操作,导航栏数据储存在数据库,方便用户对导航栏进行操作。

用户配置是对用户信息进行操作,包括对用户基本数据的操作、对用户企业组织结构的操作和对用户权限的配置。

客户分级是对客户信息的操作。由于是B2B系统,系统关心的客户有2个部分:企业客户和个人客户。同样,企业客户也包含了组织结构,企业客户通过组织结构与个人客户联系在一起。训练模型是根据已经分级的历史数据建立分级模型,通过客户分析功能对未分级的企业客户进行分级。

产品销售管理是对产品信息的操作。用户通过新建产品销售方案以后,可以找到客户管理中的数据,通过对这些数据的查看辅助产品销售正常进行。建立客户满意度模型是找出对销售有影响力的客户,建立客户对产品的满意度模型,通过产品销售分析功能里的数值变迁来辅助销售。

2.2 系统关键模块设计

2.2.1 算法的总体设计

为了便于描述算法的结构,本文给出了随机森林算法涉及的主要类图关系,其中包括10个主要类,如图7所示。

Classifier类是分类算法的抽象类,该类包括build?Classifier()和classifyInstance()两个主要的方法。build?Classifier()是训练分类模型,classifyInstance()是对测试数据进行分类。

RandomTree类是随机树,该类是单个随机决策树,包括gain(),splitData()和graph()等方法。gain()用于计算信息增益,splitData()是将数据集按属性节点进行划分。graph()是输出分类决策树图形。

RandomForest类将多个RandomTree进行Bagging组合,其中setNumTrees()方法用于设置树的个数。set?MaxDepth()方法用于设置树的深度。

Bagging 类是负责对训练数据集进行抽样,setBag?SizePercent()方法用于设置抽样的比例,resampleWith?Weights()是带有权重性质进行抽样。

Instance 类代表单条数据记录,而Attribute 类则是单个数据属性。Instances类是数据集。Filter类是过滤器的抽象类,useFilter()是使用设定的过滤器对数据集进行过滤。Discretize类是正则化类,负责将连续性数据进行离散化,以便供决策树进行分类。

Evaluation 类是评估器,负责对分类算法的分类效果进行评估,其中crossValidateModel()方法是交叉验证方法。

算法整体流程如下:

步骤1:系统从数据库采集训练数据,去除掉不必要的属性。

步骤2:对数据进行预处理。

步骤3:设置随机森林树的个数和单个随机树的深度。

步骤4:设置Bagging抽样比例。

步骤5:从样本集中进行Bagging抽样。

步骤6:训练随机树。

步骤7:查看训练是否完成,如果完成就继续,如果没有完成则回到步骤5继续进行。

步骤8:对训练模型进行交叉验证,检查模型误差是否低于期望值,如果低于期望值则返回到步骤5重新训练,如果不低于期望值就保存训练模型,算法结束。

在训练随机森林模型过程中,首先从数据库中读取数据集,然后对数据集进行预处理。预处理主要包括选择部分属性和过滤不完全的记录,然后对数据集进行正则离散化,离散化的目的是为了让决策树能够处理连续性数据。预处理之后,需要对训练参数进行设置,包括设置随机决策树个数,树的最大深度以及Bagging抽样比例等。根据Bagging抽样比例和随机种子,计算出抽取的记录集,然后再针对该抽样子集进行训练单个决策树。在预定的M 个随机决策树都训练完成后,对训练后的模型进行交叉验证,如果模型误差小于期望误差范围,则保存训练后的随机森林模型,否则重新训练模型。

2.2.2 数据获取和训练模型建立

客户信息有很多,形式也多种多样。在小型企业中,客户信息主要靠人员去记忆,大部分的客户相关信息都是由客户经理去记忆整理,客户与公司之间的关系主要靠客户经理去维持;而在大型企业中,客户信息通过纸质和电子信息记录下来,所有有权限的人员都可以查看这些信息。

正是由于客户信息的多样性,获取客户信息的方式也具有多样性。在本文系统中,客户信息的获取是依靠获取数据库中的客户信息得到的,所以将客户信息记录进数据库中也是系统成立的关键。

数据获取和训练模型建立是客户分级的基础,只有建立了正确的模型,客户分级才能正确地进行。由于这是系统最核心的部分,如果要满足系统的性能需求,必须提高这部分过程的性能。所以,数据获取和训练模型建立部分需要满足以下条件:

(1)正确率

系统采用随机森林算法,由多棵随机树构成,特征值的选取和训练模型都是采用多数投票的方式得出,可以避免一些个别现象的发生,从而提高分级的正确率。

(2)抗噪声能力

系统采用Bagging方法随机获取数据的属性,而随机森林算法是随机获取数据,本身就有较强的抗噪声能力,避免了个别现象的发生,还防止随机树的过拟合,提高了分级算法的抗噪声能力。

(3)分级速度

系统把训练分级模型和客户分级独立开来,只有首次运行、经过一段时间使用后分级正确度下降或者用户觉得要重新建模的时候才进行分级模型的训练,训练得到的分级模型保存在服务器上,等到对新客户分级的时候可以直接调用,从而提高分级速度。

(4)处理规模能力

系统采用随机森林算法,数据获取全部都是随机的,对大规模数据的处理也是比较优秀的,对于使用系统的企业来说,系统对数据的处理能力完全能符合他们的要求。针对系统的需求,结合随机森林分类算法和Bagging方法,对系统的数据获取和训练模型建立进行了设计。

客户信息主要从数据库中获取,但是为了提高分级算法的效率,系统需要对数据进行一些处理,去除一些不需要的属性。然后,系统要对数据进行预处理,把线性数据离散化,通过填写缺失的值、光滑噪声数据、识别或删除离群点并解决不一致性来“清理”数据,达到格式标准化,异常数据清除,错误纠正,重复数据的清除,并通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。所有数据达到挖掘的标准后,就进行特征值的选择,按照Bagging方法,有放回地取出相当于属性总个数数量的属性,并随机选择数据进行建模,分裂方法采用信息增益的方法。当节点的数据都属于同一类的时候,就成功生成一棵随机树,经过数棵随机树的多数投票方式决定最后的分级模型,最后把这个模型导出,保存在服务器上。

2.2.3 客户分级

客户分级是指通过训练出来的分级模型,对新客户进行分级,同时,系统还负责对错误率进行统计,及时进行反馈。系统主要关注的是分级的正确率,系统统计错误的分级结果,将错误的分级结果进行反馈,然后对训练模型进行调整。在性能方面,由于这是用户使用频率最高的功能之一,所以要求响应时间要短。针对系统的需求,对系统的客户分级模块进行了设计。

分级模型保存在服务器上。系统读取服务器上的分级模型,如果没有找到模型,会对用户进行提示。然后系统会让用户选择需要分级的新客户,如果没有可分级的客户,系统则对用户进行提示。客户分级以后,系统会记录分级的结果,并显示在浏览器上。用户浏览分级结果以后,发现结果有错误,可以进行修改,系统自动记录修改情况,如果错误率达到预设值,就会反馈给训练器,重新进行训练。

以下针对具体每一步进行设计:

(1)读取训练模型

分级速度是系统重要的一个性能,每次分级都重新建立一次分级模型会消耗很多时间,所以系统把分级模型保存在服务器中,要进行对新客户的分级必须先从服务器上读取分级模型。

系统采用JAVA 文件管理读取文件的形式读取文件,读取后将模型载入系统中,准备开始分级。读取代码如下所示:

RandomForest rs=(RandomForest)SerializationHelp?er.read("D:\\train.model");

其中,RandomForest就是随机森林类;rs 是类中的一个实体;D:\\train.model是模型在服务器中的保存地址。

在读取的过程中,如果发现保存地址中没有分级模型,系统会提示用户还没有进行训练,并跳转至训练模型界面。

(2)挑选分级客户

挑选还没有分级的客户以进行分级。系统经过数据库查找后返回未分级的客户数据,如果系统中不存在未分级的客户数据,就提示用户不存在未分级客户。客户数据以列表的形式显示在浏览器上,系统支持多个客户数据,有复选框和全选的选项。

(3)客户分级

对挑选的客户进行分级。系统读取训练模型后,对传入的客户数据进行分级,系统支持多个客户数据,具有处理多个数据的功能。

(4)记录分级结果

系统记录分级结果,并将结果展示。系统得到了分级结果后,将结果记录进入数据库,并将结果展示给用户,使用户看到自己想得到的结果。

(5)反馈错误

如果分级出现错误,并且错误率达到一定数值以上,系统自动把错误反馈给训练器。

由于客户分级是对新客户进行预测,所以发生错误在所难免。用户在发现错误之后,可以通过直接修改的方式对分级结果进行操作,但是在操作的同时,系统自动将分级错误记录进数据库,并查看数据库中同样的错误记录数量是否已经达到一定数值,如果已经达到,就把信息反馈给训练器,并提醒用户应该重新建立新的分级模型。

3 结语

本文从企业的实际需求出发,进行了客户分级分析,采用数据挖掘中的随机森林分类算法实现客户分级,给出了基于随机森林的B2B客户分级系统的总体结构图,并对关键模块中的客户分级模块进行了详细设计。

教育期刊网 http://www.jyqkw.com
参考文献

[1] 姜斌,罗阿理,赵永恒.基于随机森林的激变变星候选体的数据挖掘[J].光谱学与光谱分析,2012,32(2):510?513.

[2] 李宝东,宋瀚涛.数据挖掘在客户关系管理(CRM)中的应用[J].计算机应用研究,2002,19(10):71?74.

[3] 张喆,常桂然,黄小原.数据挖掘技术在CRM中的应用[J].中国管理科学,2003,11(1):53?59.

[4] 王海波,仲秋雁.基于数据挖掘的客户关系管理体系结构研究[J].大连理工大学学报:社会科学版,2004,25(2):42?46.

[5] 傅翠晓,黄丽华.我国B2B电子商务服务模式的分类探讨[J].中国科技论坛,2010(10):100?106.

[6] 陈卫华,朱仲英.数据挖掘在CRM中的应用[J].微型电脑应用,2001,17(10):26?28.

[7] 陈海珍,黄德才,郭海东,等.数据挖掘技术在CRM 中的应用[J].计算机工程,2003,29(7):189?191.

[8] 赵小欢,夏靖波,李明辉.基于随机森林算法的网络流量分类方法[J].中国电子科学研究院学报,2013(2):184?190.

[9] 马昕,王雪,杨洋.基于随机森林算法的大学生移动情况的预测[J].江苏科技大学学报:自然科学版,2012,26(1):86?90.

[10] 胡宏,陈彦萍.基于随机森林算法的混合入侵检测系统研究[J].西安文理学院学报:自然科学版,2013,16(3):68?71.

[11] 张洪强,刘光远,赖祥伟.随机森林算法在肌电的重要特征选择中的应用[J].计算机科学,2013,40(1):200?202.

作者简介:李军(1974—),男,陕西延安人,工程硕士,讲师。研究方向为计算机信息系统、计算机应用研究。