曾文玄,高啟文,陳新超
(1.福建醫科大學 信息中心,福建 福州 350122;2.福建醫科大學 后勤管理處,福建 福州 350122;3.福建醫科大學 教務處,福建 福州 350122)
新時期指導我國扶貧工作的重要思想是精準扶貧,“精準資助”也成為現階段我國貧困生資助等教育扶貧工作的新任務[1]。作為貧困生資助的首要環節,貧困生認定涉及有效識別貧困生這一根本問題,是資助工作的重要基礎,是促進教育公平的關鍵環節[2]。
目前,大多數高校的貧困生資格認定流程為:學生個人自愿填寫家庭經濟貧困申請表以及承諾書,附上地方政府出具的貧困證明一同交由班級評議小組民主評議,輔導員對申請資助的學生進行一對一談話,最后對學生是否貧困進行綜合判定。這類認定過程存在以下問題。
(1)經常出現“假貧困”現象。稅收可以最直接、最客觀和最準確地反映個人和家庭經濟情況,但我國的收入申報制度和稅收制度尚未完善,側面了解公民的收入和家庭經濟狀況暫時無法完全實現[3]。而對學生家庭實地調查走訪的成本太高,所以貧困生認定過程中過于依靠申報者的自律,容易出現虛假材料;而監督懲處開具虛假貧困證明行為的力度較弱,使得遞交貧困證明的公信力下降,很難獲取真實可靠的相關數據,貧困生認定中不可避免出現“假貧困”現象。
(2)真困難學生自我主動“屏蔽”貧困。在實際工作中發現,有很多家庭經濟貧困的學生由于家庭具體情況、性格等原因,不愿意讓同學知曉自己的家庭經濟情況而放棄貧困資助,寧愿省吃儉用或者東挪西借也不愿意申報,自我主動“屏蔽”貧困[4]。
(3)認定工作受主觀影響過大。在貧困生認定中,特別是班級民主評議小組評議過程中,普遍存在受主觀影響較大、標準不夠客觀清晰、判定方法合理性不足和人為操作性較大等問題。
近年來高校信息化建設不斷發展,已經進入“智慧校園”階段。在大面積、長期覆蓋的信息化環境中,高校建立的各業務管理系統積累了各類反映學生行為特征的海量數據,如生活消費一卡通數據、教務教學及綜合測評數據和學工系統學生信息數據等[5]。這些數據都是學生現實生活的數字化表現,通過對其中包含的學生個人相關信息、在校學業情況和生活消費等數據進行分析挖掘,可以得到反映學生基本行為特征的精準數據,基于這些精準數據采用全神經網絡進行學習訓練,獲得的高校貧困生輔助認定模型具有較高的預測能力,可以為智慧校園背景下高校貧困生認定工作提供更為精準、客觀的支撐,較好地解決現有高校貧困生認定環節中存在的問題[6]。
2015年11月,谷歌發布第二代基于人工智能網絡學習的系統——TensorFlow,它由 Google Brain團隊開發和維護,是基于Python的開源機器學習框架。其本質是采用數據流圖(Data Flow Graphs)進行數據分析和處理,將復雜的數據結構向復雜的人工智能神經網中傳輸。TensorFlow可以在只調用一個TensorFlow API的前提下將深度神經網絡的計算部署到任意數量的CPU或GPU的服務器、PC終端或移動設備和網頁上,實現多層級結構。TensorFlow 還可以提供除Python之外其他編程語言的接口,如Java、JavaScript、Go、R和C/C++ 等,可以應用在音頻處理、推薦系統和自然語言處理和圖形分類等各種場景,是深受市場歡迎的主流機器學習框架[7]。Tensorflow具有適用于多種開發語言、有各方面強大支持,具有高移植性,比Torch/Theano擁有更好的計算圖表可視性。
人工神經網絡(Artificial Neural Networks, ANNs)簡稱神經網絡(NNs)或連接模型,是一種模仿動物神經網絡行為特征,進行分布式并行信息處理的算法數學模型。這種網絡依靠系統的復雜程度,通過調整內部大量節點之間相互連接的關系,從而達到處理信息的目的[8]。
一個全連接神經網絡的結構,包含輸入層(樣本數據)、隱藏層(自己設定層數)和輸出層(預測目標),一個神經網絡結構只有一個輸入層和一個輸出層,輸入層和輸出層之間的都是隱藏層。每一層神經網絡都有若干神經元,層與層之間神經元相互連接,且下一層神經元連接上一層所有的神經元,而層內神經元不產生任何連接[9],全連接神經網絡結構如圖1所示。
可設計一個最簡單的神經網絡來方便理解,它只有一個神經元,簡單全連接神經網絡的結構如圖2所示。

圖2 簡單全連接神經網絡的結構Fig.2 Structure of a simple fully connected neural network

進行模型訓練的目的是使神經網絡的輸出和實際的輸出也就是標簽一樣,但出現這樣的效果之前,二者之間存在一定的差異,將這個“差異”設為參數e,表示誤差,模型輸出加上誤差之后即為真實標簽,記作y=wx+b+e。
當有n個輸入x和輸出y,即有n個誤差e。把n個誤差e都相加,表示誤差總量,為了避免殘差正負抵消,可取平方或取絕對值,此處取平方。這種誤差稱為“殘差”,是模型的輸出結果和真實結果之間的差值,損失函數Loss還可以稱為“代價函數cost”, 殘差表達式如下:
模型訓練的目的是找到合適的w和b,使得整個殘差盡可能小,殘差越小說明訓練的模型越好[11]。
首先采集與貧困生相關的數據并進行處理得到數據集,將此數據集作為樣本特征值輸入進行模型訓練,將是否為貧困生設置為模型的輸出標簽,神經網絡基于輸入的樣本數據進行學習訓練,根據學習到的知識(即模型)產生期望輸出,再將期望輸出結果與標簽值進行比較,如結果和標簽值一致則說明訓練結果準確。模型訓練結果有訓練精度(ACC)和損失值(LOSS)參數,精度越高(損失值越低)表明模型的性能越高,預測的結果越準確。通過對初始參數的調整設置,學習模型進行反復迭代學習,不斷地自我改進從而得到更高的精度,提高模型預測的能力。
功能的實現主要包含以下幾個步驟[12]:
①從校園一卡通系統、學工系統和教務系統抽取不同年級各專業學生的消費數據、綜合測評結果和個人家庭信息作為原始數據;
②清洗抽取的樣本數據,將與貧困生認定無關的數據項剔除;
③預處理得到的數據集,將源數據進行數據標準化、規范化處理,以得到模型訓練可用的數據集;
④利用樣本數據集和標簽數據,建立貧困輔助認定模型,模型訓練得到預測模型。
貧困生輔助認定總流程如圖3 所示。

圖3 貧困生輔助認定總流程Fig.3 Overall flowchart for auxiliary identification of poverty students
進行貧困生輔助認定模型訓練,需要先準備好可訓練的數據集作為訓練的樣本數據集,數據集的建模需經過以下幾個過程:采集數據源、數據屬性抽取、數據建模、數據均衡化、PCA因子分析和數據歸一化。貧困生輔助認定的數據準備流程如圖4 所示。
2.2.1 數據源及抽取
采用神經網絡訓練模型的過程中,首要關注的是樣本數據(輸入層)和標簽數據(輸出層),對應的是學生的基本行為特征和貧困生認定數據,本文主要從反映學生消費水平的消費行為習慣、在校學業情況(包括德、智和體各方面表現)、影響學生家庭經濟情況的學生親屬情況和個人信息等方面考慮確定數據源,并從中抽取相關數據,結合往年貧困生認定數據作為實驗樣本數據[13]。
(1)一卡通消費數據
本文采集的某校一卡通數據包含了2016—2019級4個年級所有在校本科生2020年9月份的消費數據,包括學號、校園卡號、食堂消費金額、超市消費金額、消費時間、消費類別名稱、消費類型碼、卡序號、消費地點、錢包余額和消費筆數計數等48個字段,數據量共35萬條。學生消費數據樣例如表1所示。

表1 學生消費數據樣例
從學生消費數據表中去除校園卡號、消費時間、消費類別名稱、消費類型碼、卡序號、消費地點、錢包余額和消費筆數等與學生消費行為習慣不相關的數據選項。抽取和模型相關的數據項包括學號、食堂消費金額和超市消費金額等數據。
(2)學生綜合測評結果
2019—2020學年的學生綜合評定情況包括學號、姓名、測評學年、學院、專業、班級、是否補考、現在年級、專業年級排名、綜測總分、德育測評成績、智育測評成績、體育測評成績、德育專業排名、智育專業排名和體育專業排名共16個字段,數據量共17.7萬余條。學生綜合測評結果樣例如表2所示。
在綜合測評結果表中,德育、智育和體育成績已經細化體現了綜測總分,所以去除學生綜測總分;保留比德育、智育和體育成績更有相對可比性的各項專業排名數據;去除與學業情況無關的學院、專業、班級、姓名和年級等數據;由于只采用一個學年的測評結果,將測評學年去除。最后從學生綜合測評結果表中抽取學生德育、智育和體育成績專業排名,專業年級排名、是否補考等數據項。
(3)學生親屬關系表
主要是對學生的親屬關系描述字段,包括學生學號、與本人關系、學生姓名、學生性別、親屬姓名、親屬性別和親屬婚姻情況共7個字段,數據量共14.5萬余條,學生親屬關系樣例如表3所示。

表3 學生親屬關系樣例Tab.3 Sample table of student family relationship
在親屬關系數據中,與本人關系字段反應出親屬是否健在,親屬是否健在是影響學生家庭經濟情況的重要因素,所以抽取與本人關系和學生學號2個數據項作為訓練數據。
(4)困難生認定信息表
2019—2020學年困難生申請信息包括審核狀態、學號、姓名、院系、現在年級、申請時間、評定學年、申請困難類型和評定困難類型共9個字段,數據量共2.6萬余條。困難生認定信息樣例如表4所示。
本文中2019—2020學年困難生認定信息表的數據主要作為模型的樣本數據使用。出現在此表中的均為貧困生,抽取可判斷出是否貧困生的學號、評定困難類型2個數據項作為訓練數據。
2.2.2 數據處理及標準化
前文從多數據源抽取的相關數據量較大,但并不是所有數據對于貧困生認定模型訓練都有意義。為了保證訓練結果可靠、使數據具有更強的泛化能力與適應性,在進行模型訓練之前需將抽取的大量數據中有價值的部分挖掘出來,對數據進行清洗降噪、分析和整合等處理,并將數據轉換,完成數據的標準化,得到模型可訓練的數據集。
①將抽取的消費數據按照學號統計出學生在2020年9月份的消費總金額,將數據泛化。
②抽取的綜合測評結果數據中,以7開頭的專升本學生數據中的年級專業排名數據中,排名有大量并列第一的情況,不具備參考性,予以清除。
③將親屬關系數據中與本人關系數據項進行建模,按照學號對應,此數據項值為兄弟姐妹的轉換為是有兄弟姐妹值為1,否則值為0[14];數據項值為父親的轉換為父親健在值為1,否則值為0;數據項值為母親的轉換為母親健在值為1,否則值為0。
④用2019—2020學年困難生認定信息和消費數據表數據,通過邏輯判斷來確定是否貧困生這個標簽值。在消費數據表中增加是否貧困生數據項,如果學生學號在貧困生認定表中出現,其對應為貧困生數值為1,否則為0。
將以上處理后的數據表通過學號這一字段關聯整合成一個貧困生輔助認定訓練數據集,數據集共有8 900余條數據。貧困生輔助認定訓練數據集如表5所示。

表5 貧困生輔助認定訓練數據集Tab.5 Training dataset for auxiliary identification of poverty students
⑤數據均衡化
為了保證模型訓練結果的可靠性,在不破壞原數據之間相對關系的前提下獲得更合理的數據集分布,需要對消費數據進行分布均衡化處理。
經以上處理后的數據集共有8 902條數據,包含了6 571條非貧困生數據和2 331條貧困生數據,正負樣本的比例為1∶3。為保留一定量的正向樣本,將貧困生消費數據分布中的離群值剔除,留取1 552條貧困生樣本數據,剔除后貧困生的月消費金額為0~900元,剔除的貧困生數據作為測試集使用。之后將非貧困生消費數據分布中的離群值剔除,因為正向樣本的比例偏少,所以根據欠采樣的方法,在學生月消費金額為0~900元的非貧困生中抽取一定量數據,使正負樣本比例接近1∶1,最終隨機采樣非貧困生消費數據1 613條[15]。
均衡前后學生月消費數據分布對比如圖5所示。藍色折線橫坐標跨越0~1 600分布,說明均衡前學生的月消費金額在0~1 600元均有分布,而且不均勻:月消費金額在1~100元有2 182個學生,而月消費金額在1 200~1 300、1 300~1 400、1 400~1 500、1 500~1 600元各個區間的分布學生數均為個位數;均衡后橙色折線橫坐標跨越0~900,說明學生月消費金額分布在0~900元的各個區間,橙色折線分布在整個圖縱向的下半部分,說明每個區間的學生分布數量相差不大。對比分析可見,均衡化后學生消費數據分布更加均衡。
另一方面,也可以通過計算學生消費數據分布的標準差來觀察均衡效果,學生消費數據分布均衡前后標準差如表6所示。由表6可以看出,學生消費數據分布均衡前后標準差從651.224 5降為281.268 8,說明均衡化效果較好。
⑥數據歸一化
數據歸一化方法一般是指將數據處理為[0,1]的實數。如學生月消費金額為20~700元,將其除以 1 000,即可實現歸一化為[0,1][16]。
對于每一個維度指標,令 min(x(j))和 max(x(j))分別為數據集的最小和最大指標值[17],可得尺寸參數x(j)為:
因此,每個記錄的值被映射到 [0,1]。利用(x(i),y(i)(i=1,2,…,q)規范化數據集,歸一化指標向量為x(i)∈R。
具體的歸一化算法實現如下:
scaler =MinMaxScaler()
scaler.fit(x_data) # 訓練
x_data = scaler.transform(x_data) # 此時輸出數組了
# print(x_data)
⑦PCA因子分析
通過PCA因子分析對數據進行降維度,做回歸分析,降維算法實現如下:
pca_model = PCA(n_components=9).fit(x_data) # 代表提取的主成分有9個特征
x_pca_data = pca_model.transform(x_data)
print(x_pca_data)
2.3.1 實驗環境
軟件環境:Python 3.6;CUDA 9.0;Tensorflow 2.4.0;Pandas 1.1.3。
硬件環境:macOS Catalina 10.15.7;Intel(R) Core(TM) i7-8569U CPU@ 2.80 GHz。
2.3.2 模型構建
由于預測的結果只有是否為貧困生,沒有對貧困生進行分類,3 163條數據量并不大,所以此處采用的是較為簡單的淺神經網絡,模型包含3層(輸入層、隱藏層、輸出層),描述如下:
①輸入層是9個維度的特征值,數據矩陣的大小為[n,9];
②隱藏層是2個全連接的ReLU層,每個ReLU層有64個神經元;
③輸出層只有2個輸出值:0或1,表示是否是貧困生。
具體的模型結構如圖6所示。
2.3.3 訓練參數
在算法模型訓練之初需要對模型的訓練參數進行初始化,主要包括學習率(lr)[18]、迭代次數(Epochs)[19]等。模型進行訓練的過程中,對比各個參數設置不同值的訓練結果,得到最優設置參數。
(1)在其他參數值相同的情況下,分別將學習率設置為0.1、0.01和0.001。當學習率設置為0.1時,ACC趨于80.45%收斂,ACC和LOSS的收斂效果均不理想;當學習率設置為0.01時,ACC趨于93.28%收斂,但LOSS的收斂效果不佳;當學習率設置為0.001時,LOSS趨向于0.1629 收斂,ACC趨向于93.14% 收斂且收斂效果好。不同學習率訓練過程對比如圖7所示。

(a)學習率為0.1的訓練過程

(b)學習率為0.01的訓練過程

(c)學習率為0.001的訓練過程
對比分析發現,迭代次數為1 500時,學習率為0.001的ACC值最高,收斂效果最好,模型的性能最好。不同學習率訓練過程數據對比如表7所示。

表7 不同學習率訓練過程對比Tab.7 Comparison of training process with different learning rates
(2)在其他參數值相同的情況下,分別將迭代次數設置為1 500、5 000和10 000。當迭代次數設置為10 000時,ACC和LOSS的收斂效果均不理想;當迭代次數設置為5 000時,ACC趨于96.38%收斂,但是LOSS的收斂效果不佳;當迭代次數設置為1 500時,LOSS趨向于0.162 9收斂,ACC趨向于93.14%收斂。不同迭代次數訓練過程對比如圖8所示。

(a)迭代次數為10 000的訓練過程

(b)迭代次數為5 000的訓練過程
綜合對比分析發現,迭代次數設置為1 500時模型的性能最好。不同迭代次數訓練過程數據對比如表8所示。

表8 不同迭代次數訓練過程對比Tab.8 Comparison of training process with different iterations
綜合2個訓練過程的對比,模型訓練的主要參數學習率設為0.001,迭代次數設為1 500。
2.3.4 模型算法
本文的模型算法實現如下:
(1)模型搭建
model =tf.keras.Sequential([
tf.keras.layers.Dense(64, activation=‘relu’, input_shape=(9,)), # 9維數據
tf.keras.layers.Dense(64, activation=‘relu’), # 每層隱藏層64組神經元
tf.keras.layers.Dense(1, activation=‘sigmoid’) # 激活函數
])
print(model.summary())
plot_model(model, to_file=‘model.png’)
(2)編譯與訓練,本模型使用的損失函數是binary_crossentropy
model.compile(loss=‘binary_crossentropy’,
optimizer=keras.optimizers.
Adam(lr=0.001),
metrics=[‘acc’]) # 設置學習率
history =model.fit(x_pca_data, y_data, epochs=1500) #設置迭代次數
hist =pd.DataFrame(history.history)
hist[‘epoch’] =history.epoch
(3)繪制損失函數和準確率圖像
def plot_his(hist):
migtime = hist[‘loss’]
delay = hist[‘acc’]
fig, ax =plt.subplots()
plt.xlabel(‘Epochs’)
plt.ylabel(‘ACC; LOSS’)
"""set interval for y label"""
yticks = range(10, 110, 10)
ax.set_yticks(yticks)
# """set min and max value for axes"""
#ax.set_ylim([10, 110])
#ax.set_xlim([58, 42])
x = hist["epoch"]
plt.plot(x, migtime, "-", label="ACC")
plt.plot(x, delay, "-", label="LOSS")
"""open the grid"""
plt.grid(True)
plt.legend(bbox_to_anchor=(1.0, 1), loc=1, borderaxespad=0.)
plt.show()
基于學生消費數據的貧困生認定模型訓練過程如圖9所示。由圖9可以看出,隨著迭代次數的增長,模型訓練LOSS和ACC均趨于平滑趨勢[20],當迭代次數超過1 500后,LOSS趨向于0.162 9收斂,ACC趨向于93.14%收斂。

圖9 貧困生認定模型訓練過程Fig.9 Training process of identification model for poverty students
隨機抽取20個測試集數據進行測試,測試準確率為90%,說明此模型的預測準確率較高,將此模型應用于貧困生判定,可以得到較為精準的結果。預測過程示意如圖10所示。

圖10 預測過程示意Fig.10 Prediction process
教育扶貧工作進入新階段,大數據、人工智能等新技術給新時期的高校資助工作帶來新的解決方案。本文利用智慧校園積累的海量學生數據和數據挖掘技術,深度學習訓練獲得的高校貧困生認定模型,預測準確度較高,為傳統的貧困生認定方式提供了更為客觀的支撐和有效補充,對于實現高校的“精準資助”和推進高校的管理工作具有一定的研究意義。但由于條件和時間有限,本文僅從是否為貧困生的角度去訓練輔助認定模型,未考慮貧困生認定等級分類問題,更為精準的認定模型仍有待后續探索和深入優化研究。