劉偉煜 王磊 張虎 韓丹 陳靖 琚趙兵
關(guān)鍵詞:機(jī)器學(xué)習(xí);IT項(xiàng)目;進(jìn)度管理
0 引言
近年來,隨著業(yè)務(wù)量增長以及人工智能[1]、大數(shù)據(jù)[2]、區(qū)塊鏈[3]等技術(shù)不斷取得突破創(chuàng)新,各行業(yè)加快推進(jìn)數(shù)字化轉(zhuǎn)型升級建設(shè),在IT項(xiàng)目投入的預(yù)算逐年增長,而IT行業(yè)相比于傳統(tǒng)行業(yè),具有技術(shù)含量高、需求更新快、人員變動頻繁等特點(diǎn),所以需要實(shí)施科學(xué)規(guī)范的項(xiàng)目管理[4]來達(dá)到保障IT工程質(zhì)量、縮短項(xiàng)目工期和降低項(xiàng)目成本的目的。項(xiàng)目進(jìn)度管理是項(xiàng)目管理的重要組成部分,目前IT項(xiàng)目的進(jìn)度管理存在如下問題,第一管理的自動化水平不高,主要采用人工手動管理方式,通過預(yù)設(shè)的規(guī)則和工具進(jìn)行人為評判打分,這種方式受主觀影響大且人力成本高,嚴(yán)重依賴管理人員的經(jīng)驗(yàn)水平。第二管理過程中缺少預(yù)測性的量化指標(biāo),量化指標(biāo)是利用管理過程中產(chǎn)生的數(shù)據(jù)加工得來的,通過量化指標(biāo)可以直觀地觀察項(xiàng)目目標(biāo)是否符合預(yù)期。而目前進(jìn)度管理中所形成的量化指標(biāo)大多只能對項(xiàng)目的現(xiàn)有階段進(jìn)行分析評判,較少存在可用于預(yù)測項(xiàng)目下一階段運(yùn)行情況的前瞻性指標(biāo)。然而項(xiàng)目的實(shí)施過程通常存在慣性,歷史的項(xiàng)目指標(biāo)數(shù)據(jù)與后續(xù)的產(chǎn)生的指標(biāo)數(shù)據(jù)之間存在聯(lián)系,簡單地將歷史數(shù)據(jù)用于統(tǒng)計(jì)分析,利用率不高。
本系統(tǒng)旨在設(shè)計(jì)一種基于機(jī)器學(xué)習(xí)的IT項(xiàng)目進(jìn)度管理系統(tǒng),通過機(jī)器學(xué)習(xí)等人工智能技術(shù),基于項(xiàng)目管理過程中產(chǎn)生的歷史數(shù)據(jù)構(gòu)建模型,用于預(yù)測項(xiàng)目在后續(xù)進(jìn)度方面的量化指標(biāo),進(jìn)而達(dá)到提前研判項(xiàng)目的運(yùn)行方向,合理安排資源供應(yīng)的目的。本系統(tǒng)的使用能夠減少項(xiàng)目管理中人為干預(yù)的風(fēng)險(xiǎn),降低項(xiàng)目管理的成本,并可以生成量化指標(biāo),持久監(jiān)控項(xiàng)目進(jìn)度情況。
1 機(jī)器學(xué)習(xí)算法應(yīng)用
機(jī)器學(xué)習(xí)[5]是人工智能的核心,機(jī)器學(xué)習(xí)算法常用于解決回歸、分類、聚類等幾大類問題,決策樹、線性回歸等傳統(tǒng)統(tǒng)計(jì)學(xué)方法和深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等新型方法都可以歸類于機(jī)器學(xué)習(xí)范疇。本系統(tǒng)使用了邏輯回歸算法來構(gòu)建模型。
1.1 邏輯回歸算法介紹
邏輯回歸[6]是常用于解決分類問題的經(jīng)典算法,具有原理簡單、調(diào)參方便和模型結(jié)果的可解釋性強(qiáng)等特點(diǎn)。邏輯回歸屬于廣義的線性模型,通過sigmoid函數(shù)的轉(zhuǎn)化,邏輯回歸算法的輸出取值被映射[0,1]區(qū)間內(nèi),當(dāng)取值大于臨界值時為一類,取值小于臨界值時為另一類,從而達(dá)到0-1二分類的目的。邏輯回歸的損失函數(shù)是對數(shù)似然損失函數(shù),可以通過梯度下降法和牛頓法求解損失函數(shù)中的系數(shù),求解系數(shù)的過程就是基于樣本數(shù)據(jù)訓(xùn)練模型的過程。
邏輯回歸算法的使用步驟如下:第一步收集數(shù)據(jù),本系統(tǒng)從關(guān)系型數(shù)據(jù)庫中獲取歷史項(xiàng)目數(shù)據(jù);第二步準(zhǔn)備數(shù)據(jù),將第一步獲取的項(xiàng)目數(shù)據(jù)進(jìn)行清洗和轉(zhuǎn)換,準(zhǔn)備可用于模型訓(xùn)練的特征數(shù)據(jù);第三步選取特征,提取適用于模型輸入的最優(yōu)特征,在減少模型訓(xùn)練耗時的同時能最大程度提高模型的精確度;第四步訓(xùn)練模型,找到回歸系數(shù);第五步測試模型,主要從擬合度、精確度和準(zhǔn)確度等方面來評價模型的效果;第六步適用模型,給定輸入數(shù)據(jù),模型可以預(yù)測出一個概率數(shù)值。
根據(jù)邏輯回歸模型,可以預(yù)測在不同的自變量情況下,因變量發(fā)生某種情況的概率,并且邏輯回歸預(yù)測的概率結(jié)果可以較好地轉(zhuǎn)換成對應(yīng)的量化數(shù)值。所以本系統(tǒng)選擇邏輯回歸算法用于構(gòu)建項(xiàng)目進(jìn)度評分卡模型。
1.2 項(xiàng)目進(jìn)度評分卡模型的介紹
進(jìn)度評分卡可以量化項(xiàng)目的進(jìn)度情況。在項(xiàng)目管理中,影響項(xiàng)目進(jìn)度的變量有很多,例如項(xiàng)目需求人員到崗情況、項(xiàng)目資金實(shí)際投入情況和項(xiàng)目在之前的節(jié)點(diǎn)是否發(fā)生過逾期、IT項(xiàng)目周期內(nèi)的功能點(diǎn)完成情況。這些影響變量的權(quán)重不一樣。如表1所示,在評分卡中,這些權(quán)重不一的影響變量根據(jù)權(quán)重大小和條件情況被賦予不同的分值。
例如項(xiàng)目進(jìn)行到某一階段,采樣得到的指標(biāo)為A=70%,B=98%,C=‘從未出現(xiàn),D=80%,根據(jù)表1的評分標(biāo)準(zhǔn)計(jì)算得到項(xiàng)目的總得分為300+49+60+68+47=524。項(xiàng)目的得分越高則說明項(xiàng)目當(dāng)前進(jìn)度情況越健康,出現(xiàn)延期的概率越小。項(xiàng)目的得分越低則說明項(xiàng)目存在延期的風(fēng)險(xiǎn)越高,需要重點(diǎn)關(guān)注并進(jìn)行相應(yīng)干預(yù)。傳統(tǒng)評分卡中的各變量分配的分值是根據(jù)專家經(jīng)驗(yàn)由一定人工預(yù)設(shè)規(guī)則估算得來的,受人為干擾影響大。本系統(tǒng)通過機(jī)器學(xué)習(xí)模型計(jì)算出評分卡中各個變量指標(biāo)的分值,得到分值更加客觀準(zhǔn)確。
1.3 項(xiàng)目進(jìn)度評分卡模型的構(gòu)建
與一般的機(jī)器學(xué)習(xí)模型訓(xùn)練流程類似,評分卡模型的構(gòu)建包含數(shù)據(jù)準(zhǔn)備、特征選擇、模型開發(fā)等通用步驟,在完成模型開發(fā)和評價之后,需要增加評分卡分?jǐn)?shù)校準(zhǔn)步驟,將模型計(jì)算的概率值轉(zhuǎn)化為分?jǐn)?shù),具體流程如圖1所示。
在項(xiàng)目實(shí)施過程中通過系統(tǒng)設(shè)計(jì)的Web平臺進(jìn)行數(shù)據(jù)埋點(diǎn),以及手動輸入數(shù)據(jù)的方式來采集適用于建模的基礎(chǔ)數(shù)據(jù),例如項(xiàng)目資金、項(xiàng)目人員、項(xiàng)目工作量等對項(xiàng)目進(jìn)度有影響或者產(chǎn)生關(guān)聯(lián)的各項(xiàng)數(shù)據(jù)。數(shù)據(jù)準(zhǔn)備是整個評分卡模型開發(fā)流程中最耗時的前置工作,它的目的是創(chuàng)建包含開發(fā)評分卡模型所需要的所有要素的唯一數(shù)據(jù)集,需要進(jìn)行大量的數(shù)據(jù)清洗及轉(zhuǎn)換工作。數(shù)據(jù)準(zhǔn)備完成后進(jìn)行特征選擇,從建模變量中選擇預(yù)測能力較強(qiáng)的少數(shù)特征變量。所采用的技術(shù)手段包括單變量特征選擇和方差特征選擇。
模型開發(fā)是將分析篩選得到的特征變量的訓(xùn)練樣本輸入到邏輯回歸算法,通過變化算法函數(shù)系數(shù)求得最小的邏輯回歸損失函數(shù)值,此時得到的函數(shù)系數(shù)即為基于此訓(xùn)練樣本的最佳分類模型。由于模型是基于有限樣本訓(xùn)練的,采用KS[7]、AUC[8]值等指標(biāo)綜合評價模型的分類準(zhǔn)確性和泛化能力,以KS值為例,如果KS值太低,說明模型的區(qū)分度太低,分類不準(zhǔn)確,如果KS值太高,則模型可能存在過擬合,對新樣本的預(yù)測能力不一定會好。此時需要重新采樣源頭數(shù)據(jù)或者對模型訓(xùn)練參數(shù)進(jìn)行調(diào)整。當(dāng)模型建立并通過檢驗(yàn)后,模型計(jì)算的結(jié)果是概率值,即項(xiàng)目進(jìn)度發(fā)生逾期的概率,取值范圍是0~1。
通過計(jì)算概率的方式將邏輯回歸模型輸出的概率值進(jìn)行放大轉(zhuǎn)化成標(biāo)準(zhǔn)評分卡的分?jǐn)?shù)值。這一過程稱為建模流程中的評分卡分?jǐn)?shù)校準(zhǔn)。通過以上步驟可以建立用于量化項(xiàng)目進(jìn)度完成情況的評分卡,項(xiàng)目評分卡上線后還需要進(jìn)行監(jiān)測與反饋,將項(xiàng)目評分卡的預(yù)測表現(xiàn)與項(xiàng)目實(shí)際的進(jìn)度運(yùn)行情況相比較,并根據(jù)項(xiàng)目的運(yùn)行情況對評分卡模型進(jìn)行調(diào)整甚至重新訓(xùn)練。
2 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2.1 架構(gòu)設(shè)計(jì)
如圖2所示,本系統(tǒng)架構(gòu)設(shè)計(jì)分為四個層次:用戶進(jìn)行操作和交互的前端層、處理請求轉(zhuǎn)發(fā)和邏輯處理的后端層、持久化和管理數(shù)據(jù)的數(shù)據(jù)層、進(jìn)行模型訓(xùn)練的模型層。各層之間獨(dú)立分離,前端層負(fù)責(zé)頁面樣式和內(nèi)容渲染,展示模型預(yù)測效果,提供表單接收用戶交互輸入的請求數(shù)據(jù)。后端層對前端請求進(jìn)行路由,提供相應(yīng)的業(yè)務(wù)邏輯處理方法,并調(diào)用數(shù)據(jù)層的數(shù)據(jù)供給接口。前后端可以獨(dú)立開發(fā)和部署,提高了系統(tǒng)開發(fā)效率并且數(shù)據(jù)傳輸和渲染的流程更加清晰。數(shù)據(jù)層將對不同類型數(shù)據(jù)庫的增刪改查等交互操作封裝成接口,提供給后端層調(diào)用。模型層實(shí)現(xiàn)了模型訓(xùn)練和評分卡校準(zhǔn)等評分卡構(gòu)建過程,向后端層提供接口。由于模型的開發(fā)使用Python語言,而Web平臺的開發(fā)使用Java語言,本系統(tǒng)采用兩種方式實(shí)現(xiàn)兩者之間的交互和調(diào)用。第一種方式是以數(shù)據(jù)庫為中間過渡手段,將中間結(jié)果暫存到數(shù)據(jù)庫中,例如將模型預(yù)測的結(jié)果存儲在數(shù)據(jù)庫中,由Web平臺采用jdbc的方式讀取。第二種是通過exec函數(shù)在進(jìn)程層面操作服務(wù)器執(zhí)行指定的Python腳本,此時Python腳本的計(jì)算結(jié)果可以通過Java的字節(jié)流或者字符流回傳到后端層,再由后端層處理后反饋給前端層,由前端層渲染展示到用戶頁面。以上為基于機(jī)器學(xué)習(xí)的IT項(xiàng)目進(jìn)度管理系統(tǒng)的架構(gòu)設(shè)計(jì),實(shí)現(xiàn)了系統(tǒng)的業(yè)務(wù)邏輯和模型數(shù)據(jù)處理邏輯。
2.2 前端設(shè)計(jì)
本系統(tǒng)采用Vue+Html+CSS技術(shù)進(jìn)行前端頁面展示,通過Nginx提供高性能頁面資源訪問。系統(tǒng)設(shè)計(jì)的項(xiàng)目進(jìn)度影響變量數(shù)據(jù)上傳頁面如圖3所示,項(xiàng)目進(jìn)度數(shù)據(jù)可以以文件的方式上傳,用戶上傳的文件會在前端進(jìn)行后綴名的校驗(yàn),只允許上傳以xlsx、xls和csv結(jié)尾的文件,上傳成功后頁面彈出成功上傳提示框。項(xiàng)目進(jìn)度影響變量數(shù)據(jù)查詢結(jié)果頁面如圖4所示,該頁面詳細(xì)展示了之前錄入成功的各個項(xiàng)目進(jìn)度影響變量在項(xiàng)目不同節(jié)點(diǎn)的明細(xì)數(shù)據(jù)。項(xiàng)目進(jìn)度評分結(jié)果頁面如圖5所示,用戶在前端輸入項(xiàng)目名稱或者項(xiàng)目編號,系統(tǒng)前端層接收到查詢請求后進(jìn)行身份驗(yàn)證和安全校驗(yàn),核驗(yàn)通過后將請求轉(zhuǎn)發(fā)給后端層,后端層控制器將請求分發(fā)到對應(yīng)的業(yè)務(wù)處理方法,業(yè)務(wù)處理方法調(diào)用模型層提供的評分卡接口,評分卡接口提供類似表1所示項(xiàng)目評分卡分值,業(yè)務(wù)處理方法實(shí)現(xiàn)的業(yè)務(wù)邏輯是根據(jù)評分卡計(jì)算匯總各個影響變量的分值得到項(xiàng)目進(jìn)度評分。本系統(tǒng)啟動定時任務(wù)每間隔固定時間訓(xùn)練模型,所以評分卡接口提供的各個項(xiàng)目進(jìn)度影響變量對應(yīng)的分值也會定時更新。
2.3 后端設(shè)計(jì)
本系統(tǒng)利用Springboot搭建后端層服務(wù),有以下幾個優(yōu)點(diǎn),第一Springboot遵循約定大于配置的思想,本系統(tǒng)的開發(fā)過程沒有編寫煩瑣的XML配置文件,省去了大量冗余代碼。第二Springboot以應(yīng)用場景為單元集成了大量常用的第三方庫,每一種場景對應(yīng)一個啟動器starter,啟動器包含了大量默認(rèn)配置和所需要依賴的jar包,本系統(tǒng)數(shù)據(jù)層使用了Postgresql、Redis和Elasticsearch等技術(shù)組件在Springboot中都提供了對應(yīng)的場景啟動器,可以提供幾乎零配置的開箱即用的服務(wù)。例如Postgresql對應(yīng)的持久層框架是Myba?tis,在傳統(tǒng)的SSM框架中使用Mybatis需要整合大量的XML 配置,使用Springboot 開發(fā)只需要添加mybatis-spring-boot-starter 啟動器,配置相關(guān)的數(shù)據(jù)庫驅(qū)動和連接池依賴即可。
后端層架構(gòu)采用的是分層設(shè)計(jì)模式,主要分成控制器層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層。前端層的請求由控制器層路由轉(zhuǎn)發(fā)到業(yè)務(wù)邏輯層進(jìn)行處理,處理后返回的結(jié)果也由控制器層按照查詢鏈路反饋到前端層。業(yè)務(wù)邏輯層實(shí)現(xiàn)了項(xiàng)目進(jìn)度影響變量數(shù)據(jù)錄入和維護(hù)、評分卡查詢、項(xiàng)目進(jìn)度評分分值計(jì)算、模型管理、歷史數(shù)據(jù)維護(hù)等模塊,并調(diào)用數(shù)據(jù)訪問層的接口實(shí)現(xiàn)數(shù)據(jù)持久化。數(shù)據(jù)訪問層主要調(diào)用數(shù)據(jù)層的數(shù)據(jù)供給接口,將查詢結(jié)果返回給業(yè)務(wù)邏輯層。
2.4 模型層設(shè)計(jì)
模型訓(xùn)練使用了開源的Sklearn(Scikit-learn) [9]機(jī)器學(xué)習(xí)庫實(shí)現(xiàn),Sklearn(Scikit-learn) 是使用Python語言編寫的機(jī)器學(xué)習(xí)庫,它具有分類、回歸、聚類等機(jī)器學(xué)習(xí)方法,實(shí)現(xiàn)了支持向量機(jī)、梯度提升和決策樹等經(jīng)典算法,在數(shù)據(jù)預(yù)處理階段使用了Python自帶的numpy 和pandas 包,訓(xùn)練后的模型使用Pickle 方式保存。
2.5 數(shù)據(jù)層設(shè)計(jì)
本系統(tǒng)運(yùn)行過程中處理的數(shù)據(jù)主要來源于以下三方面,第一是系統(tǒng)的輸入數(shù)據(jù),例如用于構(gòu)建評分卡的項(xiàng)目進(jìn)度相關(guān)數(shù)據(jù),這些數(shù)據(jù)可以采用手工導(dǎo)入方式,如手動輸入和利用Excel表格錄入相關(guān)信息,也可以通過程序預(yù)先埋點(diǎn)的方式收集數(shù)據(jù)。第二是系統(tǒng)加工生成的中間數(shù)據(jù),例如訓(xùn)練好的評分卡模型需要暫存,方便后續(xù)使用。第三是系統(tǒng)用于展示的結(jié)果數(shù)據(jù),系統(tǒng)的前端程序需要基于這部分?jǐn)?shù)據(jù)進(jìn)行頁面的渲染和圖表的繪制。本系統(tǒng)根據(jù)數(shù)據(jù)的類型和應(yīng)用場景依次使用了關(guān)系型數(shù)據(jù)庫Postgresql和緩存數(shù)據(jù)庫Redis和文檔數(shù)據(jù)庫Elasticsearch,其中系統(tǒng)錄入的非結(jié)構(gòu)化數(shù)據(jù)存儲在Elasticsearch,利用DSL[10]語法實(shí)現(xiàn)比傳統(tǒng)Sql更復(fù)雜和定制化的查詢邏輯。項(xiàng)目進(jìn)度評分等需要頻繁查詢的數(shù)據(jù)和評分排名結(jié)果存儲在Redis中,有效提高查詢效率。
3 結(jié)論
目前IT項(xiàng)目進(jìn)度管理主要采用人工手動管理方式,受主觀影響大且人力成本高,嚴(yán)重依賴管理人員的經(jīng)驗(yàn)水平。IT項(xiàng)目進(jìn)度管理過程中缺少預(yù)測性的量化指標(biāo),項(xiàng)目管理中產(chǎn)生的數(shù)據(jù)往往用于簡單的統(tǒng)計(jì)分析,利用率不高。本系統(tǒng)采用Sklearn框架來訓(xùn)練評分卡模型,配合前后端分離的方式實(shí)現(xiàn)Web平臺,有效提升了開發(fā)效率。本系統(tǒng)的評分卡模型實(shí)現(xiàn)了一套適用于項(xiàng)目進(jìn)度管理的打分規(guī)則,規(guī)則的分值不是由人為經(jīng)驗(yàn)主觀預(yù)估的,而是通過模型計(jì)算得到,更加科學(xué)客觀,可用于輔助指導(dǎo)項(xiàng)目進(jìn)度計(jì)劃管理。使用本系統(tǒng)的模型可以有效提高項(xiàng)目進(jìn)度管理的智能化水平,減少人力成本,合理分配資源,提高管理的效率。