system: [SYSTEM]

user: 3. 择优定兵模型设计 3.1. 业务理解 由于女兵的征兵工作与男兵的征兵工作有所不同，且女兵需要征集的人数较少，本文仅对男兵的择优定兵进行分析和研究。 人工定兵的流程是：每年征兵工作开始后，由市级、县级武装部层层布置征兵任务，基层武装部通过全国征兵网、公安部门收集所有适龄男青年的信息，并通过摸底对数据进行更新和完善，督促符合当年应征报名条件的适龄青年在网上进行应征报名。应征青年经过目测初检、体格检查、政治考核后成为双合格青年，也就是最后定兵的待定兵员。定兵的兵员择优过程指的就是将双合格青年根据评判标准进行综合考虑，按定兵的优先顺序进行排序，再根据当年的定兵指标，确定当年的定兵人选。定兵流程图见图2。 图1. 数据挖掘流程 图2. 定兵流程图 本文将数据挖掘应用在征兵工作中，通过分类模型，将应征青年分到定兵类和不定兵类，为定兵工作人员提供定兵的辅助决策。通过不断的优化模型，提高定兵类的召回率，如果模型的定兵类召回率可以达到100%，即保证通过模型分到不定兵类里的应征青年在实际定兵时一定不会被选中，则可以直接淘汰掉被分到不定兵类的应征青年，从而减少了体检，政审和定兵的工作量，大大提高了定兵工作的效率。 一个好的择优定兵模型可以为武装部工作人员提供定兵的智能分析和辅助决策，减少工作量，提高效率，减少人为操作的差错。模型经过不断的训练和调优，可以达到较高的准确率，再将每年退兵人员的退兵原因进行收集整理，并添加到模型中，如适当增加退兵原因对应属性在整个模型中的重要程度，可以有效减少退兵率。 3.2. 数据理解 征兵工作中的数据来源较多，包括公安部门、医院、全国征兵网、学校、居民委员会、武装部走访调查等等，且数据的存储格式多样。例如，从公安部门导入的公民基本信息，是以光盘介质存储的excel表格，需要人工导入到数据库中；存储在智慧国防业务系统中的数据以关系型数据库Mysql存储，智慧国防大数据平台中的数据又存储在非关系型数据库HBase中。兵员数据的数据类型既包括了数值型的结构化数据，如年龄、身高、体重等，又包括了文本类型的非结构化数据，如走访调查过程中记录的一些描述性文字。 3.3. 数据准备 数据准备要完成数据清洗，数据集成，数据转换和数据归约等工作，最终将数据处理成能够满足数据挖掘模型需要的数据集形式 [ 3 ] 。 数据清洗时通过处理缺失值，光滑噪声数据，识别或删除离群点，解决数据的不一致性。在择优定兵的数据集中，存在一些属性值缺失的情况，比如有的待定兵员学历为高中及以下，在专业名称和专业代码属性上的值就为空，在数据清洗时可以通过将缺失值替换为0的方法来处理。 数据集成用来处理来自多个数据源的数据，同一概念的属性在不同的数据库中可能具有不同的名字，导致不一致性和冗余。 数据转换的目的是对数据进行规范化处理、连续变量的离散化以及变量属性的构造，将数据转化为适当的形式，以满足数据挖掘任务及算法的需要。包括1、平滑2、聚集3、数据概化4、规范化，包括最小–最大规范化、零–均值规范化、小数定标规范化等5、属性构造。在待定兵员的属性中，有一些属性的值为非数值型，例如政治面貌这一属性，属性值包括中共党员，共青团员和群众，将该属性值进行数值化编码，中共党员替换为1，共青团员替换为2，群众替换为3，则一方面减少了数据存储所占空间，另一方面也便于模型对该属性值的分析利用。 数据归约目的是获得比原始数据小但不破坏数据完整性的挖掘数据集，该数据集可以得到与原始数据相同的挖掘结果。数据归约的方法：1) 数据立方体聚集：把聚集的方法用于数据立方体；2) 维归约：检测并删除不相关、弱相关或冗余属性；3) 数据压缩：选择正确的编码压缩数据集；4) 数值压缩：用较小的数据表示数据，或采用较短的数据单位、数据模型代表数据；5) 离散化和概念分层生成：使连续的数据离散化，用确定的有限个区段值代替原始值，概念分层是指用较高层次的概念替换低层次的概念，以此来减少取值个数。 3.4. 模型选择 数据挖掘模型分为描述性模型(关联规则分析、聚类算法等)和预测模型(回归和分类)两种。兵员择优定兵问题属于预测任务，即通过对样本数据(历史数据)的输入值和输出值关联性的学习，得到预测模型，再利用该模型对未来的输入值进行输出值预测。分类和回归作为预测模型，其区别在于，分类适合预测类别标号，即预测目标属性是离散的、无序的；而回归则适合用于建立连续型函数模型，即预测目标属性是连续的值。将待定兵员分为定兵和不定兵两个类别属于分类问题。 常用的分类算法包括： 决策树算法自上而下的树状结构，生成一系列规则进行分类。其中的C4.5算法使用信息增益率来选择属性，在树构造过程中进行剪枝，并且能够对不完整数据进行处理。 随机森林算法是用随机的方式建立一个森林，森林里面有很多决策树组成，且每一棵决策树之间没有关联。对于每个需要分类的样本，随机森林中的每一棵决策树分别对该样本所属的类进行判断，然后采取投票，哪个类被选择最多，就预测这个样本属于哪一类 [ 4 ] 。 逻辑回归算法适合解决二分类问题。它在线性回归基础上引入了sigmod函数，它的取值在[0，1]之间，代表属于某一类的概率。 支持向量机算法，简称SVM，是一种监督式学习的方法中。支持向量机将向量映射到一个更高维的空间里，尝试找到一个最大间隔超平面。 K最近邻分类算法(k-Nearest Neighbor， kNN)，是最简单的分类算法之一。该方法的思路是：在特征空间中，如果一个样本的k个最相似样本多数属于某一个类别，那么也将该样本分到这一类别。 3.5. 模型评估与模型优化 评价一个模型的好坏，需要看它能否在评价指标上达到可接受的水平；是否有较强的泛化能力，能够适应更广泛的数据集。 训练有监督的机器学习模型，比如分类模型，需要将数据集划分为训练集、验证集和测试集，以选出效果最好的，泛化能力最佳的模型。 训练集用来拟合模型，通过设置分类器的参数，训练分类模型。 验证集用来在训练集训练出的多个模型中找出效果最佳的模型。使用各个模型对验证集数据进行预测，并记录模型的准确率、召回率等，按照我们的分类评价指标选出效果最佳的模型所对应的参数，作为模型最终的参数。 测试集是用来衡量选出的最优模型的性能和分类泛化能力。通过训练集和验证集得出最优模型后，使用测试集进行模型预测，得到的分类结果与评价指标，作为评估模型性能的依据。测试数据绝对不能用来训练模型，否则，只能证明训练好的模型能够拟合原始数据，而不能保证模型在新样本上有很好的表现，因为模型很可能出现了过拟合。 还有一种办法是将数据集分成训练集和测试集，然后对训练集采取k-fold交叉验证，k可以取5、10等等。即将训练集分成k份，每次都用其中的k − 1份来训练模型，剩下的一份用来验证训练出的模型，并记录分类的结果和准确率、召回率等相关评价指标，然后再从这k份中取另一份作为验证集，剩下的k − 1份做训练集，直到所有的k份都做过验证集则交叉验证结束。计算这k个模型的准确率均值，并以准确率最高的模型使用的超参数作为最终模型的超参数 [ 5 ] 。 对于二分类器，分类结果可以分为以下四种，由这四个指标组成了混淆矩阵。 1) 真正类(True Positive， TP)：被模型预测为正类的正样本。 2) 假正类(False Positive， FP)：被模型预测为正类的负样本。 3) 假负类(False Negative， FN)：被模型预测为负类的正样本。 4) 真负类(True Negative， TN)：被模型预测为负类的负样本。 分类模型的评价指标包括： 1) 正确率(Precision)，TP/(TP + FP)，给出的是预测为正类的样本中实际为正样本的比例。 2) 召回率(Recall)，TP/(TP + FN)，给出的是预测为正类的真实正样本占所有真实正样本的比例。 3) 准确率(accuracy)，(TP + TN)/(P + N)，即模型预测正确的样本占所有样本的比例。 F1分数同时考虑了分类模型的准确率和召回率，可以看作是模型准确率和召回率的一种加权平均，F1分数的分布在0~1之间。 F 1 = 2 P r e c i s i o n ∗ R e c a l l P r e s i c i o n + R e c a l l ROC曲线是一系列threshold下的(FPR， TPR)数值点的连线。 其中， FPR = F P N ， TPR = T P P 我们的目标是较小的FPR以及较大的TPR，所以ROC曲线越接近最上角，该分类器的性能越好。 AUC (Area Under Curve) 被定义为ROC曲线下的面积，显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y = x这条直线的上方，所以AUC的取值范围一般在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好，而作为一个数值，对应AUC更大的分类器效果更好。 如果用完全没有参与模型训练的测试集来测试模型，能够得到较好的分类结果，就说明模型具有较好的泛化能力，也说明所选择的训练样本具备一定的代表性，能够体现整个数据集的整体特性。 可以采用以下几种方法提高分类模型的性能 [ 6 ] 。 1) 增加更多数据。 数据量越多，训练出的模型越具有普适性，越能代表数据的普遍特性，更多的数据允许数据进行更多的“自我表达”，当数据多到能对几乎整个样本空间进行充分覆盖，从而减弱对理论和模型的依赖时，这样的数据就足够“大”了。较大的数据量也可以防止过拟合现象发生。 2) 特征选择。 特征选择是指选择获得相应模型和算法最好性能的特征集，工程上常用的方法有以下： ① 计算每一个特征与因变量的相关性：工程上常用的手段有计算皮尔逊系数和互信息系数，皮尔逊系数只能衡量线性相关性而互信息系数能够很好地度量各种相关性，但互信息系数的计算相对复杂一些，得到相关性之后就可以通过排序选择特征了； ② 构建单个特征的模型，通过模型的准确性为特征排序，借此来选择特征； ③ 通过L1正则项来选择特征：L1正则方法具有稀疏解的特性，因此天然具备特征选择的特性，但是要注意，L1没有选到的特征不代表不重要，原因是两个具有高相关性的特征可能只保留了一个，如果要确定哪个特征重要应再通过L2正则方法交叉检验； ④ 训练能够对特征打分的预选模型：Random Forest和Logistic Regression等都能对模型的特征打分，通过打分获得相关性后再训练最终模型； ⑤ 通过特征组合后再来选择特征：如对用户id和用户特征组合来获得较大的特征集再来选择特征，这种做法在推荐系统和广告系统中比较常见，这也是所谓亿级甚至十亿级特征的主要来源，原因是用户数据比较稀疏，组合特征能够同时兼顾全局模型和个性化模型。 3) 使用多种算法。 使用正确的机器学习算法是获得更高准确率的理想方法。最终结论的得出来自于经验和不断尝试。有时候，有些算法比其他算法更适合特定类型的数据。因此，我们应该构建所有有关的模型，并检测其表现，再从中选取相对较优的模型。比如，可以尝试偏最小二乘回归算法，该算法可以很好地解决自变量之间的多重共线性问题。 4) 集成模型。 集成模型是把多个弱模型的结果组合在一起，以获得更好的结果。它可以通过Bagging (Bootstrap Aggregating)和Boosting来实现。 5) 交叉验证。 交叉验证是将原始数据进行分组，一部分作为训练集，另一部分作为验证集，首先用训练集对模型进行训练，再利用验证集来测试训练集得到的模型。如十折交叉验证，将数据集分成十份，轮流将其中9份作为训练数据，1份作为测试数据，进行试验，每次试验都会得出相应的正确率，10次结果的正确率的平均值作为对算法精度的估计，一般还需要进行多次10折交叉验证，再求其均值，作为对算法准确性的估计。 在本文中，由于数据量的采集存在一定限制，只能在尽可能的情况下增加数据量，避免训练出的模型存在过拟合现象。 在兵员择优定兵的场景下，将每个小的属性视为一个特征，建立逻辑回归模型，如现实表现方面中的几个属性1、家庭条件2、家教(严格)；3、吃苦耐劳程度；4、学校成绩；5、尊敬师长；6、有上进心。通过特征选择，选出对最终排序结果贡献不大的特征，可以简化模型，减少收集数据时需要收集的属性值，减少工作量。 采用多种分类模型如逻辑回归模型、kNN模型、决策树模型、SVM模型、随机森林模型、GBDT模型及VotingClassifier集成分类模型建立定兵模型，并对比分类结果，再从中选择在定兵类召回率、F1分数、ROC_AUC等评价指标上表现最优的模型作为最后的定兵模型。