BP網絡能學習和存儲大量的輸入輸出模式映射關系,而無需事前揭示描述這種映射關系的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網絡的權值和閾值,使網絡的誤差平方和最小。BP神經網絡模型拓撲結構包括輸入層(input)、隱層(hidden layer)和輸出層(output layer)。
就好比一個有記憶能力的“黑箱”,我們通過已有的輸入輸出數據去訓練“黑箱”,找到輸入輸出間的相關關系并用“黑箱”記錄下來。再用這個訓練好的“黑箱”去模擬未知的輸出值。
本文主要用到MATLAB中的神經網絡工具箱。通過MATLAB編程,調用神經網絡工具箱,實現模型的搭建。
本文從權威國際船舶期刊clarkson周報上提取了近五年(2011~2015年)每周的交易數據(clarkson有記錄的交易),并分交易年度、交易船型做了分類。每一條交易信息都記錄了交易船舶的船型(Vessel Type)、船名(Vessel name)、載重噸(DWT)、建造年份(Blt.)、造船廠(Yard)、成交時間(Date)、成交價(US $m.)、買方(Buyers)、船齡(成交年減建造年),并記錄了交易披露當期所在周的對應船舶新造船價格(Newbuliding Prices)以及一年期期租費率(Timecharter Rates)還有每一條交易信息出處的期刊號方便查證。
對于數據的選取,前期做了大量測試,包括各種船型,各個交易時間段的測試。不管選取的數據是哪些,我們所要構建的模型的主體框架是明確的。即一個y=f(X1.X2…Xn)式的多輸入單輸出函數,只是這個函數對應關系比較復雜,正是我們要找的“黑箱子”,Xn表示第n個輸入變量,y則表示模擬船價。現僅以2014年Bulk船型的交易為例說明。
首先,對于2014年Bulk船型的所有交易信息,我們剔除掉同一條船多次交易的數據(因為這些重復數據是沒必要的,選取一條保留即可),剔除掉同一相似船但成交價差異很大的數據(這相當于輸入x后輸出了兩個y),剔除掉跳躍性很大的數據(如相似狀況的船成交價都為1,但這條船成交價為100),最終保留267組數據。隨機選取其中228組數據做訓練,剩下39組數據做測試。
對于Xn的選取,除了船齡和載重噸這兩個必有的重要變量外,本文作者嘗試加入了各種變量期望能得到更加精確的結果,包括BDI指數,經濟狀況指數等等,但多次試驗所得結果遠不如只用兩變量理想,故在宏觀經濟環境和船舶市場都不存在較大波動的區間范圍,可考慮選擇兩變量輸入來模擬船價。最終,本文作者選取一年之內的交易信息作為時間區段(因時間跨度如果太長,將難以反映船價的波動)。輸入變量僅選取船齡(成交年減建造年)、載重噸(DWT)這兩個,采用單隱層三層結構,隱層節點數為10,神經網絡結構如圖1所示。
各層之間的連接函數為tansig,訓練步數為1000,學習率0.1,訓練目標0.00001。a、b分別為輸入的船齡和載重噸,p為輸出的船價。

圖1 模型結構
用MATLAB編程構建模型,以選取的228組訓練數據訓練模型,訓練結果如圖2~3所示。

圖2
將剩下的39組數據作為測試,用訓練好的模型模擬船價,再與實際成交價對比,比較誤差大小,隨機選取其中一部分結果如圖4所示。
第一列為模型模擬價,第二列為實際成交價,第三列為誤差值。標紅的表示該組數據模擬值和實際值誤差較大。可以看到,模型模擬結果與實際成交價誤差基本在20%以內,少部分數據誤差甚至在2%以內,但也存在個別結果誤差較大。我們知道船舶的交易存在一定的特殊性,不可避免的有些船舶的交易因買賣雙方談判能力、船舶本身狀況、船舶制造商等而存在較大的偏離。我們能獲取的交易信息有限,再加上很多數據是無法量化的,所以訓練數據和測試數據的選取并不能完全排除掉這些特殊交易。因此,存在個別數據的較大誤差是難以避免的。對于普遍性的交易,模型可用于評估的初步價值估算,以及最終評估結果的驗證。如果評估結果與模型模擬值存在較大差別,那么就需要找出交易的特殊性給予說明。

圖3
當船價在一定時間內存在較大波動,而可選區間可用數據又太少時,就需要給模型加入變量,使之既能反映宏觀的船價波動趨勢,又能反映微觀的每一艘具體交易船的交易價格(要與該艘船成交價有很強相關性)。在引入了多個變量進行試驗后,最終發現已獲取的數據中只有新造船價格(Newbuliding Prices)這一變量能滿足上述要求。
在這里特別說明下關于添加變量,由于我們的模型是要模擬每一條具體的交易船的成交價,所以所選的每一個變量必須與該條交易緊密關聯,如果添加的變量哪怕只有一個變量是只反映宏觀經濟因素而沒有反映微觀成交因素的話,模型模擬效果就會變得粗糙而無法精確的模擬出船價,最終的結果會造成很大誤差。因此在變量的選取上,微觀關聯性是必須的,宏觀相關性可有可無。當加入的變量越多時,模型失真的可能性也越大,所以并不是變量越多模型越精確,存在一個最優變量數。

圖4

圖5
最終,本文作者選取了三變量(船齡、載重噸、新造船價格)來延展模型適用區間并提高精度。現仍以Bulk船型為例來說明。
選擇近三年(2013~2015)所有Bulk船型交易數據,仍按前述Bulk船型的要求篩掉不合理數據,最終保留343組合理數據,隨機選擇其中300組數據做訓練,剩下43組數據做測試。
而關于第三個變量新造船價格(Newbuliding Prices),數據來源于每一艘船交易當周clarkson周報上新造船價格板塊,該板塊將每一種船型按載重噸范圍分檔,每一船型的每檔都會有一個當周的新造船平均價格。對于每一艘交易船,我們通過數據來源的周報上找到對應船型對應載重噸當周新造船價格來賦值第三個變量。
由于采用了三輸入一輸出結構,模型變得更加復雜。在經過了反復試驗后,本文作者測試出相對最優結構,采用了雙隱層共四層結構,第一隱層有10個節點,第二隱層有30個節點,訓練步數定為1000,學習率0.01,訓練目標為0.000001,模型結構如圖5所示。
其中,a、b、c分別代表輸入的船齡、載重噸、新造船價格,p代表模型輸出的船價。
300組數據訓練模型部分結果如圖6~9所示。
用剩下43組數據做測試,結果如圖10。
第一列為實際成交價,第二列為模型模擬值,第三列為誤差百分比。可以看到,模擬結果與實際值相比已經沒有大的跳躍點了,且誤差基本控制在20%以內。最關鍵在于,此模型已經可以跨時間區間使用,不再僅限于短時間適用。

圖6

圖7

圖8

圖9
由前述試驗,可以得出船價模擬的兩個方法:
1. 當短期內(宏觀經濟環境和船價市場波動能忽略不計的區間)可獲取的交易數據足夠達到訓練所需最少數據組數時,可以采用兩變量(船齡、載重噸)輸入來模擬船價,數據的組合訓練能使模型模擬值和實際值誤差基本控制在20%以內,存在極少數跳躍點。

圖10
2. 當短期內不能獲取足夠多的數據,而船價市場或者宏觀經濟存在較大波動時,可以采用三變量(船齡、載重噸、新造船價格)輸入來模擬船價,數據的組合能使模擬值和實際值誤差基本控制在20%以內,而且適用范圍不受時間和船舶市場波動限制。
以上兩種方法結合使用,可使船模型運用于實際評估中的不同情況。當然,船舶市場價格變動就像股票價格的隨機波動一樣,是不可完全預測的,模型模擬也因實際情況的差異,誤差是不可避免的。
我們看到,模型的結果還存在著一定的誤差,未來希望能找到方法使模型更加精確的模擬船價,縮小誤差。數據的選取目前也還難以剔除掉部分特殊交易,下一步希望能找到識別特殊交易的方法,使訓練數據更加適用。
除此之外,BP神經網絡這一工具也可以更多的運用到市場法評估中去,特別是需要批量估值的評估實踐中可以使工作效率大幅提升。只要從市場上獲取到與資產價值相關性較強的多組數據,通過BP神經網絡訓練模型找出相關關系,就可以用于模擬資產價值評估。

《風鈴》 韶涵