照著R語言和深度學(xué)習(xí)第三章 “3.6預(yù)測(cè)房價(jià):一個(gè)回歸的例子” 做了一遍,用同樣的數(shù)據(jù)又跑了一遍OLS作對(duì)比,算是對(duì)深度學(xué)習(xí)多了點(diǎn)理解。
1. 數(shù)據(jù)
數(shù)據(jù)來自1970年代中期波士頓,內(nèi)生變量是郊區(qū)房屋的價(jià)格中位數(shù),外生變量包括房屋特征、住房所在區(qū)域的特征等13個(gè)變量。書里沒有具體說明數(shù)據(jù)來源,也沒有變量名或者標(biāo)簽,估計(jì)是截面數(shù)據(jù),否則應(yīng)該包括年份變量。訓(xùn)練樣本404個(gè),測(cè)試樣本102個(gè)。
2. 模型設(shè)置
- 層和網(wǎng)絡(luò)
- 一共三層
- 前兩層輸出都是64,使用relu激活
- 第三層輸出為1,沒有定義激活函數(shù)(即默認(rèn)為線性模型)
- 優(yōu)化器:rmsprop
- 損失:均誤方差(MSE,mean squared error,與OLS的目標(biāo)函數(shù)一樣)
- 監(jiān)控目標(biāo):平均絕對(duì)誤差(MAE,mean absolute error)。監(jiān)控MSE結(jié)果應(yīng)該不會(huì)差很多,選擇MAE大概是為了和內(nèi)生變量單位保持一致,比MSE更容易解釋。
3. 模型訓(xùn)練
- 因?yàn)槭切颖荆扇×薑折驗(yàn)證(K = 4)
- 在每輪訓(xùn)練中
- 迭代次數(shù)為100(epochs = 100)
- 迭代次數(shù)遠(yuǎn)高于前兩個(gè)例子,大概是因?yàn)闃颖玖刻?/li>
- 每批樣本為1 (batch_size = 1)
- 不知道batch_size的設(shè)置原則,以及這里為什么設(shè)置成1,后面的章節(jié)需要注意一下這個(gè)問題
- 查了一下,batch_size = 1會(huì)影響收斂速度
- 模型跑下來,四折平均MAE為2.8左右,高于書里的2.38
- 迭代次數(shù)為100(epochs = 100)
- 按照書里將迭代次數(shù)設(shè)為500又跑了一次,花了很多時(shí)間(10分鐘的樣子),遠(yuǎn)高于第三章的前兩個(gè)例子(上萬樣本、張量展開后需要1G 空間)
- 精確度表現(xiàn)確實(shí)好了一些,但仍然不如書上的數(shù)字
- MAE最低點(diǎn)的位置跟書上差不多,都在120次迭代出現(xiàn)
4. 測(cè)試
- epochs = 80, batch_size = 16
- MAE是3左右,比書里高了0.5,是個(gè)不小的差距
- 試過epochs = 100/120, batch_size = 4/8,MAE也只降到2.8
- 降低batch_size特別影響速度
5. OLS模型
為了保持可比性,也是用訓(xùn)練樣本跑的回歸,然后使用回歸系數(shù)對(duì)測(cè)試樣本進(jìn)行預(yù)測(cè),然后計(jì)算MAE,結(jié)果為3.3,就是說精度比深度學(xué)習(xí)方法低了10%。
為了省事,沒有用K折方法,由于K折驗(yàn)證降低樣本量,估計(jì)使用K折或者bootstrap會(huì)進(jìn)一步降低精度。
由于不知道自變量的定義,無法采用更有效的模型,比如傳統(tǒng)的房價(jià)模型會(huì)把某幾個(gè)變量做交叉或者做二次項(xiàng),這類模型會(huì)獲得更高的精度,用這些更好的模型作對(duì)比會(huì)更有意義,畢竟深度學(xué)習(xí)模型是高度非線性的。曾經(jīng)用美國的數(shù)據(jù)跑過,調(diào)一下模型可以使R平方從65%提高到80%,那么把精度再提高10%也許不算難事。
6. 結(jié)論與若干細(xì)節(jié)
- 研究問題的影響
住房市場(chǎng)是很成熟的市場(chǎng),每個(gè)變量的影響在交易過程中已經(jīng)被考慮得很充分,也就是說市場(chǎng)已經(jīng)給每個(gè)變量制定了合理的價(jià)格。這些價(jià)格的形成來自買家與賣家(也許還有中介)的討價(jià)還價(jià)過程,也就是來自人的計(jì)算。人在討價(jià)還價(jià)時(shí)不會(huì)做特別復(fù)雜的計(jì)算,非常可能就是靠大腦中的線性模型計(jì)算,比如100平米的房子比50平米貴兩倍。這種情況下,OLS和深度學(xué)習(xí)取得相同的效果是可以理解的。
但這不是說深度學(xué)習(xí)是多此一舉,更好的解釋是,如果真實(shí)的模型是線性的,那么深度學(xué)習(xí)這個(gè)黑箱最終給出的也是個(gè)線性模型。對(duì)于更復(fù)雜的市場(chǎng),或許深度學(xué)習(xí)更有優(yōu)勢(shì)。 - 樣本量的影響
即便真實(shí)的世界定價(jià)是非線性的,想從幾百個(gè)樣本當(dāng)中提取復(fù)雜的非線性關(guān)系,恐怕也不容易。 - 運(yùn)行速度
大概是batch_size的影響,深度學(xué)習(xí)跑得很慢,而OLS基本上是一個(gè)命令搞定,回車敲下去,立刻出結(jié)果。再一次,樣本量如果夠大(再大的樣本OLS還是非常快),batch_size設(shè)置大一些,速度可能不再是個(gè)問題,而且還可能獲得OLS抓不到的效應(yīng)。 - 對(duì)世界的理解
OLS可以看到每個(gè)變量的影響,而且還需要我們思考變量是否內(nèi)生,以確定因果關(guān)系。深度學(xué)習(xí)目的卻只在預(yù)測(cè),無法提供對(duì)世界的理解。經(jīng)濟(jì)學(xué)知識(shí)(以及其他社會(huì)科學(xué)知識(shí))和計(jì)量經(jīng)濟(jì)學(xué)方法,對(duì)于理解世界來說,仍然不可缺少。好的深度學(xué)習(xí)模型仍然需要和專業(yè)知識(shí)合作——至少輸入哪些變量、生成哪些新變量還是需要專家來決定吧。
現(xiàn)在我明白了Susan Athey為什么會(huì)結(jié)論機(jī)器學(xué)習(xí),或者AI,并不能用來揭示因果關(guān)系,只是在模型選擇上提供幫助。 - 幾個(gè)細(xì)節(jié)問題
(1)為了讓模型跑得更快,深度學(xué)習(xí)通常會(huì)把因變量進(jìn)行標(biāo)準(zhǔn)化變換,每個(gè)變量增加1,意味著增加一個(gè)標(biāo)準(zhǔn)差。如果是在OLS當(dāng)中做這種變換,回歸系數(shù)的解釋需要跟著調(diào)整。但深度學(xué)習(xí)并不在意回歸系數(shù),只要因變量不做標(biāo)準(zhǔn)化,預(yù)測(cè)結(jié)果的單位是保持不變的。(當(dāng)然OLS的預(yù)測(cè)也不會(huì)跟著因變量標(biāo)準(zhǔn)化而變化。)
(2)OLS通常要考慮的內(nèi)生性、樣本選擇等問題,原因是一旦出現(xiàn)上述問題,對(duì)系數(shù)的估計(jì)會(huì)出現(xiàn)不一致——也就是說樣本一旦改變,估計(jì)結(jié)果會(huì)發(fā)生顯著變化。機(jī)器學(xué)習(xí)雖然不考慮這些問題,但通過使用測(cè)試樣本,可以對(duì)估計(jì)結(jié)果一致性做出反應(yīng),也就是說過擬合。或許機(jī)器學(xué)習(xí)方法能夠?yàn)橛?jì)量的結(jié)果提供一些參考,這個(gè)問題就有待計(jì)量經(jīng)濟(jì)學(xué)家去回答了。
Update
(2021.9.23)
TensorFlow for R網(wǎng)站給出了波士頓房價(jià)變量說明,所給的代碼也比書里更詳細(xì),值得讀。