丁方一
(吉林財經(jīng)大學(xué)管理科學(xué)與信息工程學(xué)院,吉林 長春 130117)
工程產(chǎn)品價格的變化與工程領(lǐng)域的發(fā)展動態(tài)有著千絲萬縷的聯(lián)系,對工業(yè)經(jīng)濟(jì)不斷增長有著非常重要的影響。產(chǎn)品價格的行情走勢一直是投資者們關(guān)注的核心問題,正確的價格走勢判斷不僅對投資者做出正確的投資決策有利,而且對促進(jìn)資源有效配置,增強(qiáng)市場的有效性具有重要意義。產(chǎn)品市場出現(xiàn)后,人們開始對工程產(chǎn)品價格波動進(jìn)行研究,掌握產(chǎn)品價格波動的規(guī)律。
在產(chǎn)品價格預(yù)測問題中,由于傳統(tǒng)BP 神經(jīng)網(wǎng)絡(luò)忽略產(chǎn)品價格變化過程中的時序性,因此對于產(chǎn)品價格的預(yù)測效果不明顯;而RNN 神經(jīng)網(wǎng)絡(luò)具有較好的記憶能力,能夠很好的刻畫某一時刻對于后續(xù)時刻的影響,特別適用于處理需要考慮時間相關(guān)因素的問題?;诋a(chǎn)品價格分析預(yù)測的研究現(xiàn)狀,本文將采用RNN 算法解決目前存在的缺陷,將高度非線性的輸入層和輸出層進(jìn)行建模,結(jié)合工程產(chǎn)品的基本指標(biāo)對未來情況進(jìn)行預(yù)測與分析。本文主要敘述了建立RNN 神經(jīng)網(wǎng)絡(luò)的過程和參數(shù)的選取,輸出評價尺度和產(chǎn)品趨勢預(yù)測走勢圖,突出RNN 神經(jīng)網(wǎng)絡(luò)處理時間序列問題的優(yōu)越性。該算法為產(chǎn)品取值的預(yù)測提供了較好的解決策略,提高了預(yù)測的精度。
數(shù)據(jù)來源于python 爬蟲在線爬取,數(shù)據(jù)一共有7 個特征,分別是時間、初始價格、最終價格、最高價格、最低價格、成交量、產(chǎn)品代碼,本文選取初始價格作為研究對象進(jìn)行研究。
本文選取某工程產(chǎn)品公司從2010 年至2020 年的每日產(chǎn)品價格和成交量,共計(jì)2426 個數(shù)據(jù)。同時,為了測試python 的數(shù)據(jù)訓(xùn)練,以前2126 天的初始價格作為訓(xùn)練集,后300 天的初始價格作為測試集,對其進(jìn)行歸一化處理。對訓(xùn)練集進(jìn)行打亂,同時將訓(xùn)練數(shù)據(jù)調(diào)整為數(shù)組格式。
3.1.1 網(wǎng)絡(luò)結(jié)構(gòu)
循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的結(jié)構(gòu)如圖1 所示。
圖1 RNN 結(jié)構(gòu)圖
XTt+1表示在t+1 時刻的真實(shí)輸入。
隱藏層在每一時刻的輸出都會被傳輸?shù)较乱粫r刻,所以每一時刻的網(wǎng)絡(luò)都會保留上一時刻的某些歷史信息,并結(jié)合當(dāng)前時刻的網(wǎng)絡(luò)狀態(tài),發(fā)送到下一時刻。在產(chǎn)品價格預(yù)測模型中,將2010-2020 年時間序列數(shù)據(jù)作為輸入,可將預(yù)測日某一時刻信息傳至下一時刻,體現(xiàn)了預(yù)測數(shù)據(jù)間的時間相關(guān)性。因此,較于傳統(tǒng)神經(jīng)網(wǎng)絡(luò),循環(huán)神經(jīng)網(wǎng)絡(luò)可以降低預(yù)測誤差。
3.1.2 求解過程
t=1 時,通用初始化輸入s0=0,隨機(jī)初始化W、U、V,得到公式如下:
圖1 中t-1,t,t+1 表示時間序列,x 表示輸入樣本。st表示樣本在時間t 處的記憶,W 表示輸入的權(quán)重,U 表示此刻輸入的樣本的權(quán)重,V 表示輸出的樣本權(quán)重。
該網(wǎng)絡(luò)中有一個特殊的單元即記憶單元,記憶單元是RNN 的關(guān)鍵所在。其計(jì)算公式為
由表達(dá)式可以看出,更新步長的計(jì)算可以從梯度均值和梯度平方兩個角度自適應(yīng)調(diào)整,而不是直接由當(dāng)前梯度決定。
Adam 優(yōu)化算法主要具有以下顯著優(yōu)勢:很適合應(yīng)用于數(shù)據(jù)和參數(shù)規(guī)模極大的場景;更新的步長能夠被限制在大致的范圍內(nèi);能自動調(diào)整學(xué)習(xí)率;適用于梯度稀疏或梯度有較大噪聲的問題。
3.1.4 關(guān)鍵參數(shù)選取
設(shè)置正確的神經(jīng)網(wǎng)絡(luò)訓(xùn)練參數(shù),對提高模型準(zhǔn)確率具有重要的意義。
學(xué)習(xí)率LR 在神經(jīng)網(wǎng)絡(luò)中是最難調(diào)的全局參數(shù):如果設(shè)置太大,可能會出現(xiàn)loss 振蕩,學(xué)習(xí)也難以收斂;設(shè)置過小,那么訓(xùn)練的過程將大大增加。綜合考慮,本實(shí)驗(yàn)選取LR=0.001。
BATCH_SIZE 是指一次訓(xùn)練所選取的樣本數(shù)。Batch Size 影響模型的優(yōu)化程度和速度,也直接影響GPU 內(nèi)存的使用。綜合模型性能及GPU 內(nèi)存等因素,本實(shí)驗(yàn)選取BATCH_SIZE=200。
在設(shè)置BATCH_SIZE=200,學(xué)習(xí)率(LR)=0.001 的情況下,進(jìn)行epoch 調(diào)整實(shí)驗(yàn)。綜合考慮計(jì)算機(jī)算力、誤差衰減等情況,將epoch 的值設(shè)為200。
構(gòu)建模型時,設(shè)置return_sequence 參數(shù)為True,可以返回一系列數(shù)據(jù),便于RNN 的堆疊;使用Dropout 函數(shù)可以防止數(shù)據(jù)過擬合;在配置訓(xùn)練方法時,使用Adam 優(yōu)化器。優(yōu)化器的任務(wù)是在每一個epoch 中計(jì)算損失函數(shù)的梯度, 進(jìn)而更新參數(shù),從而使損失函數(shù)快速準(zhǔn)確逼近最小值。設(shè)置損失函數(shù)為mse,網(wǎng)絡(luò)評價指標(biāo)為accuracy。在訓(xùn)練模型時,設(shè)置batch_size 值為200,epochs 值為200,設(shè)置validation_data,用來在每個epoch 之后,驗(yàn)證一次驗(yàn)證集,以便及早發(fā)現(xiàn)問題。模型訓(xùn)練過程如圖2。
圖2 RNN 算法流程圖
模型訓(xùn)練完成后,即可輸出真實(shí)值與預(yù)測值對比曲線。訓(xùn)練結(jié)果如表1。
表1 訓(xùn)練結(jié)果
4.1.1 均方誤差
為了衡量模型的誤差與精度,需要對模型進(jìn)行定量評估。引入均方誤差函數(shù),均方誤差(MSE)是一種常用的損失函數(shù),廣泛運(yùn)用于回歸問題,可用來檢測模型預(yù)測值和真實(shí)值之間的偏差。MSE 值越小,模型的預(yù)測效果越好;反之,預(yù)測效果越差。計(jì)算公式如下。
4.1.3 平均絕對誤差
平均絕對誤差(MAE)是所有單個觀測值偏離算術(shù)平均值的絕對值的平均值。平均絕對誤差可以避免誤差相互抵消,從而能夠準(zhǔn)確反映實(shí)際預(yù)測誤差。MAE 的值越小,模型預(yù)測效果越好;反之,預(yù)測效果越差。計(jì)算公式如下。
4.1.6 輸出結(jié)果
輸出模型預(yù)測值和真實(shí)值的均方誤差,平方根誤差,可釋方差得分,平均絕對誤差,R2擬合優(yōu)度。如表2。
表2 評價尺度
通過監(jiān)聽loss 的變化來判斷訓(xùn)練情況,如果loss 的變化趨勢是一開始迅速下降,到一定值后趨于穩(wěn)定不再下降,通常就說明模型表現(xiàn)良好,訓(xùn)練完成。本模型測試結(jié)果符合條件。結(jié)果如圖3。
圖3 模型的訓(xùn)練集與測試集的loss 圖
輸出預(yù)測值與真實(shí)值的對比曲線,可以看出模型擬合效果較好,真實(shí)值與預(yù)測值的擬合曲線在很大程度上接近甚至重合。結(jié)果如圖4。
圖4 隨著時間推移的產(chǎn)品價格預(yù)測值和真實(shí)值
本實(shí)驗(yàn)采用收斂性和精確性作為評價標(biāo)準(zhǔn)。
4.4.1 收斂性:該模型設(shè)置epochs 值比較大,從loss 圖中可以看出,模型在最初運(yùn)行之后的損失值開始大幅度下降,隨后在接近0 值的位置小幅度震蕩,說明模型損失較小。
4.4.2 精確性:從預(yù)測圖中可以看出預(yù)測值與真實(shí)值非常接近,最大差值在50 元左右,對于該工程產(chǎn)品這類單個價格高的產(chǎn)品來說,這個誤差是可以接受的。模型的可釋方差得分約為0.92,說明預(yù)測值與真實(shí)值差距不大;同時,擬合優(yōu)度R2 高達(dá)84.2%,擬合效果很好。
綜上所述,模型預(yù)測效果較好,可以用來作為產(chǎn)品價格預(yù)測的參考方法。
本文提出了基于遞歸神經(jīng)網(wǎng)絡(luò)的方法對未來工程產(chǎn)品價格行情進(jìn)行預(yù)測,以產(chǎn)品價格的初始價格作為訓(xùn)練指標(biāo),運(yùn)用Python 工具對數(shù)據(jù)進(jìn)行預(yù)處理,采用RNN 算法調(diào)整訓(xùn)練數(shù)據(jù)。在模型的調(diào)試中,配置了訓(xùn)練方法,對模型的學(xué)習(xí)率和批尺寸進(jìn)行了優(yōu)化,同時選取了適合的epoch 以達(dá)到一定的訓(xùn)練效果。實(shí)驗(yàn)結(jié)果表明,在學(xué)習(xí)率為0.001,批尺寸為200,epoch 為200 的情況下,該模型的可釋方差得分為0.92,比較接近1,說明預(yù)測值與真實(shí)值的誤差較??;模型的訓(xùn)練準(zhǔn)確率可以達(dá)到84.2%。在未來的工作中,將會考慮到產(chǎn)品價格走勢變化的差異,以及用戶配置情況的不同對模型的影響。