彭義春, 張 捷, 覃左仕
(玉林師范學院 計算機科學與工程學院, 廣西 玉林 537000)
隨著互聯網的迅速發展和普及,網絡招聘基本取代傳統招聘形式,己成為招聘者和求職者的首選方式。 網絡招聘具有信息量大、不受時空限制、招聘成本低、便捷高效等優點;但也因信息量的激增和信息難以核實,帶來了信息爆炸、信息過剩、信息失真、薪水不透明等問題[1]。 因此,如何從琳瑯滿目的數據中提取有價值的信息成為關鍵。 若能通過某些方式了解到本行業中類似崗位的薪資范圍,就能對崗位的薪資是否合理有個準確的判斷,以及對未知薪資的崗位有一個預判。 薪資市場是一個較為復雜的非線性動力學系統,同時薪資數據中包含大量的關于職位本身的描述數據。 隨著人工智能算法的發展,灰色理論、樸素貝葉斯、doc2vec/word2vec[2]、回歸模型[3]、移動平均模型[4]、神經網絡、協同過濾[5]、深度學習[6]、K 最近鄰[7]、決策樹、支持向量機等機器學習算法已被廣泛應用于預測領域。 隨機森林算法具有處理高維樣本[8]、預測精度高、學習速度快、調節參數少及不產生過擬合[9]等優點,已被廣泛應用于回歸和分類問題。 近年來,也有學者將隨機森林算法用于薪資預測領域,如,文獻[10]中采用隨機森林模型預測和分析了云南省物流人才崗位薪資;文獻[11]提出了一種基于隨機森林模型對求職者和企業互惠就業推薦算法;文獻[12]采用隨機森林模型對農信金融企業員工工資進行預測等等。 本文在對比分析SVM、決策樹、隨機森林等機器學習算法的基礎上,提出了基于隨機森林的薪資預測模型。 經驗證結果表明,此模型在薪資預測中產生的誤差較小、效果較好,預測結果既能更好地幫助求職者選擇更適合自己的職位和判斷職位薪資的合理性,也能幫助招聘者制定合理的職位薪資,招聘到合適的人才。
隨機森林指的是利用多棵樹對樣本進行訓練并預測的一種分類器,屬于一種集成算法,在分類、回歸和聚類等方面應用效果較好。 本課題的薪資預測是回歸預測,需要用分類回歸樹(CART)作為基本單元進行構建森林,依次循環訓練每一棵CART,每棵CART 的訓練樣本都是從原始訓練集中進行可放回抽樣(Bootstrap)得到。 CART 較容易過擬合,但因隨機森林經過Bootstrap 和Aggregate(聚集)這2個過程(又被稱為袋裝Bagging)解決了過擬合問題,同時也因隨機性而增強了模型的泛化(Variance) 能力。 根據國內主流招聘網站招聘公告的職位描述,薪資預測關聯度較高的特征包括職位語言、職位類別、所屬城市、學歷、工作經驗、公司規模和所屬網站等。 對多個特征值需要收集所有特征的最佳切分點進行對比,選出最好的特征劃分點,采用平均或投票的方式對所有決策樹做集成操作。
假設共有M個樣本,n個特征的數據集,最多須構建t棵決策樹,每棵決策樹的特征個數為K,則隨機森林算法實現過程如下:
步驟1在訓練數據集所在的輸入樣本中,對每個樣本的每個特征進行遍歷,遞歸地將每個區域劃分為2 個子區域。利用公式(1) 計算n個特征及其相應切分點下的殘差平方和,找到一對(j,s),且滿足:分別最小化左子樹和右子樹的殘差平方和,并在此基礎上再次最小化二者之和[13]。 式(1) 的數學表示如下:

其中,R1、R2代表被劃分的2 個子集(回歸樹為二叉樹只有2 個子集),c1、c2分別表示R1和R2樣本的均值,j代表工作城市、職位名稱、職位類型等樣本特征,s表示劃分點,yi表示樣本目標變量的真實值。
步驟2用選定的(j,s) 來劃分區域,并決定相應的輸出值,求樣本均值公式[14]為:

步驟3繼續對2 個子區域調用步驟1、2,直到不能繼續劃分為止。
步驟4將輸入樣本劃分為M個區域,即:R1,R2,…,RM生成決策樹[15]。 其公式如下:

其中,c代表對應區域的平均值;I代表是否符合條件,符合為1,否則為0。
步驟5采用有放回抽樣, 從原數據集中經過M次抽樣,獲得有M個樣本的數據集(可能有重復樣本)。 從n個特征里,采用無放回抽樣原則,去除K個特征作為輸入特征。 對新數據集重復上述過程t次,構建t棵決策樹[16]。
步驟6對生成的t棵決策樹采用求平均的方法,最終得到一個隨機森林模型。
隨機森林構建流程如圖1 所示。

圖1 隨機森林構建流程圖Fig.1 Flow chart of random forest construction
采用Python 爬蟲技術爬取了獵聘網、拉勾網、Boss 直聘和前程無憂四大主流招聘網站2021 年1月~5 月的IT 行業招聘信息。 為了提高薪資預測過程的高效性和結果的精準性,采用Pandas、Numpy模塊,對爬取到的數據信息進行離群值檢測、缺失值處理、異常值處理、字段分割、標簽編碼、重復值剔除等數據預處理。 為了將文本類型的數據轉換成數字型數據,首先遍歷去重后的每一特征值的字符并給其賦一序列號,然后再次遍歷此文件,把序列號映射回原來沒有去重的列,相同文本則對應同一個序列號。 最后,將處理過的數據以csv 文件格式保存并存儲到MySQL 數據庫中。
通過數據清洗后,將數據集劃分為標簽和特征值,并按照比例劃分訓練集和測試集。 先運用sklearn 模塊構建決策樹、線性回歸、SVM、隨機森林四個經典算法的預測模型,并觀察模型在訓練集的準確度(accuracy) 表現。 再分別對數據進行標準化處理和數據平滑處理,獲取各算法模型的準確度表現,見表1。

表1 4 種模型對不同格式數據訓練得分對比Tab.1 Comparison of training scores of four models on different format data
由表1 中數據可見,數據標準化處理對于線性回歸、決策樹和隨機森林模型的結果基本沒什么影響,只有SVM 略微提高,但依舊是負數;但對預測值數據平滑處理后,4 個算法模型得分都有明顯上升,尤其是SVM 算法,從負數提升到0.89,而線性回歸算法的得分僅有0.216,說明線性回歸算法并不適用于本課題的場景。
對比真實值與預測值的誤差,可用來評估模型預測結果的準確率。 圖2(a)~(c)分別為決策樹、隨機森林和SVM 回歸結果可視化圖。 對圖2 分析可知,決策樹的準確率最高(0.957 85),除了部分預測值和真實值相差較大外,絕大多數與實際偏差不大,其次是隨機森林(準確率為0.897 60),最后為SVM(準確率為0.889 93)。

圖2 3 種算法的回歸結果比較Fig.2 Comparison of regression results for the three algorithms
預測結果的準確性并不能完全判定一個算法模型效果的好壞,還需要觀察模型的擬合優度和泛化能力。R2值是最常用的回歸模型擬合程度的指標,其值的計算方法如下。
設y為待擬合數據,y的均值為,擬合函數計算結果為,則:
(1)總體平方和SST:

(2)殘差平方和SSE:

(3)擬合度公式R2:

在Python 中,通過記錄訓練集、測試集在訓練和測試過程的R2值,并繪制如圖3 所示的曲線圖。圖3(a)~(c)分別為決策樹、SVM 和隨機森林的訓練集與測試集R2值圖。

圖3 3 種算法的R2結果比較Fig.3 Comparison of R square for the three algorithms
經對比分析可見,決策樹在訓練集表現得很好,但在測試集表現較差,過擬合問題最嚴重;SVM 的擬合效果較好,但仍存在過擬合問題;隨機森林的擬合效果最好,但R2值不高,必須通過參數調優來提高擬合度。
綜合上述預測準確率和擬合度對比分析結果得出:決策樹預測模型雖然預測的準確率最高,但擬合效果不佳,模型在預測新的數據集時準確率會大大下降,得到的預測結果不準確;SVM 預測模型擬合效果一般,準確率最低,且模型響應時間長,運用到實際應用中,用戶體驗會大打折扣;隨機森林的準確率較高,特別是擬合效果最佳。 因此,本研究最終采用隨機森林算法構建職位薪資預測模型。
隨機森林是一種機器學習算法,算法參數的設置不僅影響模型的預測準確率,而且影響模型的訓練效果的好壞。 因此,模型構建之前對參數調優很有必要。 其參數擇優包括框架的參數擇優和決策樹的參數擇優。 本文采用改進的網格搜索(GridSearch)法[17]來完成參數調優。 具體步驟如下:
(1)確定決策樹個數n_estimators和劃分時考慮的最大特征數max_features范圍。 先設定步長(即 權 重 縮 減 系 數ν, 取 值 范 圍 為(0,1]), 在n_estimators和max_features坐標系上建立二維網格。 網格節點就是相應的n_estimators和max_features的參數對。
(2)對網格節點上的每一組參數構建隨機森林,并利用OOB 數據估計殘差平方均值。
(3) 選 擇 誤 差 最 小 參 數n_estimators和max_features。 若誤差或者步長滿足要求,則輸出最優參數和殘差平方均值,否則縮小步長。 重復上述步驟,繼續搜索。
在Python 中,通過GridSearchCV()方法并使用十折交叉驗證法求得模型的最佳參數組合,先增大n_estimators以提高模型擬合能力。 這里當n_estimators =110,擬合能力再無明顯提升時,則再按照步長為1 增大max_features來提高每個子模型的擬合能力, 進一步提高模型的擬合能力。 當max_features =5 時對應的擬合優度最大,殘差平方均值最小。 見表2。

表2 隨機森林參數表Tab.2 Parameter table of random forest
表1 中,前三行為框架參數,后四行為決策樹參數。
將得到的最佳參數組合代入算法模型中,求出模型的平均絕對誤差、均方誤差、R2值和袋外樣本得分。 職位薪資預測模型參數調優前后的模型預測效果對比,見表3 。

表3 參數調優前后評估指標對比Tab.3 Comparison of evaluation indicators before and after parameter tuning
從表3 可明顯得出,參數調優后模型的平均絕對誤差、均方誤差均有所下降,模型準確率更高。R2值從0.596 上升到0.921,模型擬合效果較好;袋外樣本得分由原先的-2.343 提升到0.651,模型泛化能力顯著增強。 對比結果說明,參數調優后的職位薪資預測模型是十分有效的模型。
通過繪制參數調優前后模型的學習曲線,觀察模型具體的擬合程度,如圖4 所示。 參數調優前,職位薪資預測模型誤差較大,過擬合程度較為嚴重;參數調優后,職位薪資預測模型學習曲線收斂,誤差減小,過擬合程度明顯下降。

圖4 參數調優前后模型學習曲線Fig.4 Learning curve of model before and after parameter tuning
職位薪資預測模型是以職位名稱(jobName)、職位 類 別(jobType)、 工 作 城 市(jobCity)、 學 歷(jobEdu)和工作經驗(jobExper)為特征構建。 為了構建預測模型,首先須確定各特征在模型中的權重。 鑒于特征之間的相關性以及對薪資非線性影響的特點,采用熵值法確定各個特征在模型中的權重[18]。 步驟如下:
(1)設數據有n行記錄,m個特征列,則數據可用一個n × m的矩陣A表示:

(2)數據歸一化處理:

(3)計算第j項指標下第i條記錄所占比重:

(4)計算第j項指標的熵值:

(5)計算第j項指標的差異系數:

(6)計算第j項指標的權重:

在Python 中,使用Pandas 和Numpy 庫求出各特征的權重,見表4。

表4 各特征在薪資中的重要性和權重Tab.4 The importance and weight of each feature in salary
由此可見,這5 個特征的重要性都達90%以上。將這5 個影響因素指標作為隨機森林模型的最優輸入特征變量,最后做預測的特征中權重性排在最高的為工作城市,其次崗位類別,學歷、工作經驗和職業類型的重要程度基本相同。 因此,工作城市和崗位是職位薪資高低的重要影響因素。
在對比分析線性回歸、SVM、隨機森林、決策樹等幾種經典的機器學習算法后,因隨機森林具有精度高、穩定性好、學習速度快等優勢,故而選擇隨機森林構建職位薪資預測模型,并以IT 行業為例,對職位薪資進行了模擬預測分析。 結果表明,隨機森林模型能合理有效地預測薪資,可作為中短期職位薪資預測的新途徑。
然而,爬取的招聘信息時間間隔較短,數量有限,變量的類型上也有出入;另外薪資高低也受到外界客觀因素的影響等。 因此,隨機森林模型對這些因素數據的預測效果不太理想,有待進一步深入研究。