基于机器学习的IT项目进度管理系统的设计与实现
2023-04-06刘伟煜王磊张虎韩丹陈靖琚赵兵
刘伟煜 王磊 张虎 韩丹 陈靖 琚赵兵
关键词:机器学习;IT项目;进度管理
0 引言
近年来,随着业务量增长以及人工智能[1]、大数据[2]、区块链[3]等技术不断取得突破创新,各行业加快推进数字化转型升级建设,在IT项目投入的预算逐年增长,而IT行业相比于传统行业,具有技术含量高、需求更新快、人员变动频繁等特点,所以需要实施科学规范的项目管理[4]来达到保障IT工程质量、缩短项目工期和降低项目成本的目的。项目进度管理是项目管理的重要组成部分,目前IT项目的进度管理存在如下问题,第一管理的自动化水平不高,主要采用人工手动管理方式,通过预设的规则和工具进行人为评判打分,这种方式受主观影响大且人力成本高,严重依赖管理人员的经验水平。第二管理过程中缺少预测性的量化指标,量化指标是利用管理过程中产生的数据加工得来的,通过量化指标可以直观地观察项目目标是否符合预期。而目前进度管理中所形成的量化指标大多只能对项目的现有阶段进行分析评判,较少存在可用于预测项目下一阶段运行情况的前瞻性指标。然而项目的实施过程通常存在惯性,历史的项目指标数据与后续的产生的指标数据之间存在联系,简单地将历史数据用于统计分析,利用率不高。
本系统旨在设计一种基于机器学习的IT项目进度管理系统,通过机器学习等人工智能技术,基于项目管理过程中产生的历史数据构建模型,用于预测项目在后续进度方面的量化指标,进而达到提前研判项目的运行方向,合理安排资源供应的目的。本系统的使用能够减少项目管理中人为干预的风险,降低项目管理的成本,并可以生成量化指标,持久监控项目进度情况。
1 机器学习算法应用
机器学习[5]是人工智能的核心,機器学习算法常用于解决回归、分类、聚类等几大类问题,决策树、线性回归等传统统计学方法和深度学习、强化学习等新型方法都可以归类于机器学习范畴。本系统使用了逻辑回归算法来构建模型。
1.1 逻辑回归算法介绍
逻辑回归[6]是常用于解决分类问题的经典算法,具有原理简单、调参方便和模型结果的可解释性强等特点。逻辑回归属于广义的线性模型,通过sigmoid函数的转化,逻辑回归算法的输出取值被映射[0,1]区间内,当取值大于临界值时为一类,取值小于临界值时为另一类,从而达到0-1二分类的目的。逻辑回归的损失函数是对数似然损失函数,可以通过梯度下降法和牛顿法求解损失函数中的系数,求解系数的过程就是基于样本数据训练模型的过程。
逻辑回归算法的使用步骤如下:第一步收集数据,本系统从关系型数据库中获取历史项目数据;第二步准备数据,将第一步获取的项目数据进行清洗和转换,准备可用于模型训练的特征数据;第三步选取特征,提取适用于模型输入的最优特征,在减少模型训练耗时的同时能最大程度提高模型的精确度;第四步训练模型,找到回归系数;第五步测试模型,主要从拟合度、精确度和准确度等方面来评价模型的效果;第六步适用模型,给定输入数据,模型可以预测出一个概率数值。
根据逻辑回归模型,可以预测在不同的自变量情况下,因变量发生某种情况的概率,并且逻辑回归预测的概率结果可以较好地转换成对应的量化数值。所以本系统选择逻辑回归算法用于构建项目进度评分卡模型。
1.2 项目进度评分卡模型的介绍
进度评分卡可以量化项目的进度情况。在项目管理中,影响项目进度的变量有很多,例如项目需求人员到岗情况、项目资金实际投入情况和项目在之前的节点是否发生过逾期、IT项目周期内的功能点完成情况。这些影响变量的权重不一样。如表1所示,在评分卡中,这些权重不一的影响变量根据权重大小和条件情况被赋予不同的分值。
例如项目进行到某一阶段,采样得到的指标为A=70%,B=98%,C=‘从未出现,D=80%,根据表1的评分标准计算得到项目的总得分为300+49+60+68+47=524。项目的得分越高则说明项目当前进度情况越健康,出现延期的概率越小。项目的得分越低则说明项目存在延期的风险越高,需要重点关注并进行相应干预。传统评分卡中的各变量分配的分值是根据专家经验由一定人工预设规则估算得来的,受人为干扰影响大。本系统通过机器学习模型计算出评分卡中各个变量指标的分值,得到分值更加客观准确。
1.3 项目进度评分卡模型的构建
与一般的机器学习模型训练流程类似,评分卡模型的构建包含数据准备、特征选择、模型开发等通用步骤,在完成模型开发和评价之后,需要增加评分卡分数校准步骤,将模型计算的概率值转化为分数,具体流程如图1所示。
在项目实施过程中通过系统设计的Web平台进行数据埋点,以及手动输入数据的方式来采集适用于建模的基础数据,例如项目资金、项目人员、项目工作量等对项目进度有影响或者产生关联的各项数据。数据准备是整个评分卡模型开发流程中最耗时的前置工作,它的目的是创建包含开发评分卡模型所需要的所有要素的唯一数据集,需要进行大量的数据清洗及转换工作。数据准备完成后进行特征选择,从建模变量中选择预测能力较强的少数特征变量。所采用的技术手段包括单变量特征选择和方差特征选择。
模型开发是将分析筛选得到的特征变量的训练样本输入到逻辑回归算法,通过变化算法函数系数求得最小的逻辑回归损失函数值,此时得到的函数系数即为基于此训练样本的最佳分类模型。由于模型是基于有限样本训练的,采用KS[7]、AUC[8]值等指标综合评价模型的分类准确性和泛化能力,以KS值为例,如果KS值太低,说明模型的区分度太低,分类不准确,如果KS值太高,则模型可能存在过拟合,对新样本的预测能力不一定会好。此时需要重新采样源头数据或者对模型训练参数进行调整。当模型建立并通过检验后,模型计算的结果是概率值,即项目进度发生逾期的概率,取值范围是0~1。
通过计算概率的方式将逻辑回归模型输出的概率值进行放大转化成标准评分卡的分数值。这一过程称为建模流程中的评分卡分数校准。通过以上步骤可以建立用于量化项目进度完成情况的评分卡,项目评分卡上线后还需要进行监测与反馈,将项目评分卡的预测表现与项目实际的进度运行情况相比较,并根据项目的运行情况对评分卡模型进行调整甚至重新训练。
2 系统的设计与实现
2.1 架构设计
如图2所示,本系统架构设计分为四个层次:用户进行操作和交互的前端层、处理请求转发和逻辑处理的后端层、持久化和管理数据的数据层、进行模型训练的模型层。各层之间独立分离,前端层负责页面样式和内容渲染,展示模型预测效果,提供表单接收用户交互输入的请求数据。后端层对前端请求进行路由,提供相应的业务逻辑处理方法,并调用数据层的数据供给接口。前后端可以独立开发和部署,提高了系统开发效率并且数据传输和渲染的流程更加清晰。数据层将对不同类型数据库的增删改查等交互操作封装成接口,提供给后端层调用。模型层实现了模型训练和评分卡校准等评分卡构建过程,向后端层提供接口。由于模型的开发使用Python语言,而Web平台的开发使用Java语言,本系统采用两种方式实现两者之间的交互和调用。第一种方式是以数据库为中间过渡手段,将中间结果暂存到数据库中,例如将模型预测的结果存储在数据库中,由Web平台采用jdbc的方式读取。第二种是通过exec函数在进程层面操作服务器执行指定的Python脚本,此时Python脚本的计算结果可以通过Java的字节流或者字符流回传到后端层,再由后端层处理后反馈给前端层,由前端层渲染展示到用户页面。以上为基于机器学习的IT项目进度管理系统的架构设计,实现了系统的业务逻辑和模型数据处理逻辑。
2.2 前端设计
本系统采用Vue+Html+CSS技术进行前端页面展示,通过Nginx提供高性能页面资源访问。系统设计的项目进度影响变量数据上传页面如图3所示,项目进度数据可以以文件的方式上传,用户上传的文件会在前端进行后缀名的校验,只允许上传以xlsx、xls和csv结尾的文件,上传成功后页面弹出成功上传提示框。项目进度影响变量数据查询结果页面如图4所示,该页面详细展示了之前录入成功的各个项目进度影响变量在项目不同节点的明细数据。项目进度评分结果页面如图5所示,用户在前端输入项目名称或者项目编号,系统前端层接收到查询请求后进行身份验证和安全校验,核验通过后将请求转发给后端层,后端层控制器将请求分发到对应的业务处理方法,业务处理方法调用模型层提供的评分卡接口,评分卡接口提供类似表1所示项目评分卡分值,业务处理方法实现的业务逻辑是根据评分卡计算汇总各个影响变量的分值得到项目进度评分。本系统启动定时任务每间隔固定时间训练模型,所以评分卡接口提供的各个项目进度影响变量对应的分值也会定时更新。
2.3 后端设计
本系统利用Springboot搭建后端层服务,有以下几个优点,第一Springboot遵循约定大于配置的思想,本系统的开发过程没有编写烦琐的XML配置文件,省去了大量冗余代码。第二Springboot以应用场景为单元集成了大量常用的第三方库,每一种场景对应一个启动器starter,启动器包含了大量默认配置和所需要依赖的jar包,本系统数据层使用了Postgresql、Redis和Elasticsearch等技术组件在Springboot中都提供了对应的场景启动器,可以提供几乎零配置的开箱即用的服务。例如Postgresql对应的持久层框架是Myba?tis,在传统的SSM框架中使用Mybatis需要整合大量的XML 配置,使用Springboot 开发只需要添加mybatis-spring-boot-starter 启动器,配置相关的数据库驱动和连接池依赖即可。
后端层架构采用的是分层设计模式,主要分成控制器层、业务逻辑层和数据访问层。前端层的请求由控制器层路由转发到业务逻辑层进行处理,处理后返回的结果也由控制器层按照查询链路反馈到前端层。业务逻辑层实现了项目进度影响变量数据录入和维护、评分卡查询、项目进度评分分值计算、模型管理、历史数据维护等模块,并调用数据访问层的接口实现数据持久化。数据访问层主要调用数据层的数据供给接口,将查询结果返回给业务逻辑层。
2.4 模型层设计
模型训练使用了开源的Sklearn(Scikit-learn) [9]机器学习库实现,Sklearn(Scikit-learn) 是使用Python语言编写的机器学习库,它具有分类、回归、聚类等机器学习方法,实现了支持向量机、梯度提升和决策树等经典算法,在数据预处理阶段使用了Python自带的numpy 和pandas 包,训练后的模型使用Pickle 方式保存。
2.5 数据层设计
本系统运行过程中处理的数据主要来源于以下三方面,第一是系统的输入数据,例如用于构建评分卡的项目进度相关数据,这些数据可以采用手工导入方式,如手动输入和利用Excel表格录入相关信息,也可以通过程序预先埋点的方式收集数据。第二是系统加工生成的中间数据,例如训练好的评分卡模型需要暂存,方便后续使用。第三是系统用于展示的结果数据,系统的前端程序需要基于这部分数据进行页面的渲染和图表的绘制。本系统根据数据的类型和应用场景依次使用了关系型数据库Postgresql和缓存数据库Redis和文档数据库Elasticsearch,其中系统录入的非结构化数据存储在Elasticsearch,利用DSL[10]语法实现比传统Sql更复杂和定制化的查询逻辑。项目进度评分等需要频繁查询的数据和评分排名结果存储在Redis中,有效提高查询效率。
3 结论
目前IT项目进度管理主要采用人工手动管理方式,受主观影响大且人力成本高,严重依赖管理人员的经验水平。IT项目进度管理过程中缺少预测性的量化指標,项目管理中产生的数据往往用于简单的统计分析,利用率不高。本系统采用Sklearn框架来训练评分卡模型,配合前后端分离的方式实现Web平台,有效提升了开发效率。本系统的评分卡模型实现了一套适用于项目进度管理的打分规则,规则的分值不是由人为经验主观预估的,而是通过模型计算得到,更加科学客观,可用于辅助指导项目进度计划管理。使用本系统的模型可以有效提高项目进度管理的智能化水平,减少人力成本,合理分配资源,提高管理的效率。