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