成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「數(shù)據(jù)游戲」:使用嶺回歸預(yù)測(cè)招商銀行的股價(jià)

vboy1010 / 1871人閱讀

摘要:作者,數(shù)據(jù)游戲優(yōu)勝隊(duì)伍成員前陣子報(bào)名參加了數(shù)據(jù)游戲比賽,題目是預(yù)測(cè)月號(hào)星期三招商銀行的股價(jià),截止時(shí)間是在月號(hào)星期天。

作者:Max,「數(shù)據(jù)游戲」優(yōu)勝隊(duì)伍成員

前陣子報(bào)名參加了「數(shù)據(jù)游戲」比賽,題目是預(yù)測(cè)5月15號(hào)(星期三)招商銀行的股價(jià),截止時(shí)間是在5月12號(hào)(星期天)。在本次預(yù)測(cè)中,我用到的是嶺回歸。

嶺回歸

嶺回歸是回歸的一種,它解決回歸中重大疑難問題:排除多重共線性,進(jìn)行變量的選擇,在存在共線性問題和病態(tài)數(shù)據(jù)偏多的研究中有較大的實(shí)用價(jià)值。按照度娘百科的解釋:嶺回歸是一種專用于共線性數(shù)據(jù)分析的有偏估計(jì)回歸方法,實(shí)質(zhì)上是一種改良的最小二乘估計(jì)法,通過放棄最小二乘法的無偏性,以損失部分信息、降低精度為代價(jià)獲得回歸系數(shù)更為符合實(shí)際、更可靠的回歸方法,對(duì)病態(tài)數(shù)據(jù)的擬合要強(qiáng)于最小二乘法。

多重共線性指線性回歸模型中的解釋變量之間由于存在精確相關(guān)關(guān)系或高度相關(guān)關(guān)系而使模型估計(jì)失真或難以估計(jì)準(zhǔn)確。

由于嶺回歸涉及的數(shù)學(xué)知識(shí)比較復(fù)雜,且文章篇幅有限,這里不過多展開。

數(shù)據(jù)獲取

本次數(shù)據(jù)是通過 Tushare 的 get_hist_data() 獲取的。Tushare 是一個(gè)免費(fèi)、開源的 python 財(cái)經(jīng)數(shù)據(jù)接口包。python 安裝 tushare 直接通過 pip install tushare 即可安裝。

import tushare as ts
data = ts.get_hist_data("600848")

運(yùn)行之后可以查看它的前后幾行數(shù)據(jù)。按照 tushare 官方的說明,get_hist_data() 只能獲取近3年的日線數(shù)據(jù),而他的返回值的說明是這樣的:

date:日期;

open:開盤價(jià);

high:最高價(jià);

close:收盤價(jià);

low:最低價(jià);

volume:成交量;

price_change:價(jià)格變動(dòng);

p_change:漲跌幅;

ma5:5日均價(jià);

ma10:10日均價(jià);

ma20:20日均價(jià);

v_ma5:5日均量;

v_ma10:10日均量;

v_ma20:20日均量

均價(jià)的意思大概就是股票 n 天的成交價(jià)格或指數(shù)的平均值。均量則跟成交量有關(guān)。至于其他的返回值,應(yīng)該是一下子就能明白的吧。在獲得數(shù)據(jù)之后,我們查看一下描述性統(tǒng)計(jì),通過data.describe()查看是否存在什么異常值或者缺失值。

這樣看來似乎除了由于周末以及節(jié)假日不開盤導(dǎo)致的當(dāng)天的數(shù)據(jù)缺失以外,并沒有其他的缺失和異常。但是這里我們不考慮節(jié)假日的缺失值。

數(shù)據(jù)預(yù)處理

由于獲取的數(shù)據(jù)是按日期降序排序,但本次預(yù)測(cè)跟時(shí)間序列有關(guān),因此我們需要把順序轉(zhuǎn)一下,讓它按照日期升序排序。

data1 = data[::-1]

處理完順序之后,我們要做一下特征值的選擇。由于 volume 以及均量的值很大,如果不進(jìn)行處理的話,很可能對(duì)整體的預(yù)測(cè)造成不良影響。由于時(shí)間有限,而且考慮到運(yùn)算的復(fù)雜度,這里我沒有對(duì)這些特征進(jìn)行處理,而是直接將它們?nèi)サ袅?。至于均價(jià),我是按照自己的理解,和10日均價(jià)、20日均價(jià)相比,5日均價(jià)的范圍沒那么大,對(duì)近期的預(yù)測(cè)會(huì)比另外兩個(gè)要好,因此保留5日均價(jià)。接著,我用 sklearn.model_selection 的 cross_val_score,分別查看除 "open", "close", "high", "low", "ma5" 以外的其他剩余屬性對(duì)預(yù)測(cè)值的影響。發(fā)現(xiàn) 、 "p_change"、"price_change"這兩個(gè)屬性對(duì)預(yù)測(cè)結(jié)果的影響不大,為了節(jié)省內(nèi)存,增加運(yùn)算速度,提高預(yù)測(cè)的準(zhǔn)確性,也直接把它們?nèi)サ袅恕M炅酥?,查看前后三行?shù)據(jù)。

data1 = data1[["open","high","low","ma5","close"]]
data1.head(3), data1.tail(3)

建模預(yù)測(cè)

由于提交截止日期是周日,預(yù)測(cè)的是周三,因此需要先對(duì)周一周二的信息進(jìn)行預(yù)測(cè)。在這里我突然想到一個(gè)問題,是用前一天的所有數(shù)據(jù)來訓(xùn)練模型以預(yù)測(cè)當(dāng)天的 close 比較準(zhǔn)確,還是用當(dāng)天除了 close 以外的其他數(shù)據(jù)來訓(xùn)練模型以訓(xùn)練當(dāng)天的 close 比較準(zhǔn)呢?為了驗(yàn)證這個(gè)問題,我分別對(duì)這兩種方法做了實(shí)驗(yàn)。

為了減少代碼量,定義了一個(gè)函數(shù)用以評(píng)估模型的錯(cuò)誤率。

def get_score(X_train, y_train):
    ridge_score = np.sqrt(-cross_val_score(ridge, X_train, y_train, cv=10, scoring="neg_mean_squared_error"))
    return np.mean(ridge_score)

用前一天的所有數(shù)據(jù)來當(dāng)訓(xùn)練集

y_train = data1["close"].values[1:]
X_train = data1.values[:-1]
score = get_score(X_train, y_train)

輸出結(jié)果大約為0.469,這個(gè)錯(cuò)誤率就比較大了,不太合理,更何況還要預(yù)測(cè)其他特征值作為測(cè)試數(shù)據(jù)。

用當(dāng)天除了 close 以外的其他數(shù)據(jù)來當(dāng)訓(xùn)練集

data2 = data1[:]
y_train = data2.pop("close").values
X_train = data2.values
score = get_score(X_train, y_train)

輸出結(jié)果大約為0.183,跟第一個(gè)相比簡(jiǎn)直好多了。所以,就決定是你了!

接下來建模并把模型保存下來:

y_train = data1["close"]
X_train = data1[["open", "high", "low", "ma5"]]
close_model = ridge.fit(X_train, y_train)
joblib.dump(ridge, "close_model.m")

在預(yù)測(cè)之前呢,我們先拿訓(xùn)練集的后8組數(shù)據(jù)做一下測(cè)試,做個(gè)圖看看:

scores = []
for x in X_train[-8:]:
    score = close_model.predict(np.array(x).reshape(1, -1))
    scores.append(score)
x = np.arange(8)
fig, axes = plt.subplots(1, 1, figsize=(13, 6))
axes.plot(scores)
axes.plot(y_train[-8:])
plt.xticks(x, data1.index[-8:].values, size=13, rotation=0)

看到這樣子我還是相對(duì)比較放心的,不過,這個(gè)模型的訓(xùn)練值除了 close 以外的屬性都是已知的,要預(yù)測(cè)三天后的還得預(yù)測(cè)前兩天的測(cè)試值。

def get_model(s):
    y_train = data1[s].values[1:]
    X_train = data1.values[:-1]
    model = ridge.fit(X_train, y_train)
    return model
def get_results(X_test):
    attrs = ["open", "high", "low", "ma5"]
    results = []
    for attr in attrs:
        result = get_model(attr).predict(X_test)
        results.append(result)
    return results

接下來預(yù)測(cè)三天的股價(jià):

X_test = data1[-1:].values
for i in range(3):
    results = get_results(X_test)
    close = close_model.predict(np.array(results).reshape(1, -1))
    print(close)
    results.append(close)
    X_test = np.array(results).reshape(1, -1)
print("5月15日招商銀行關(guān)盤時(shí)的股價(jià)為:" + str(round(close[0], 2)))

輸出結(jié)果為:

[33.46370029]
[33.4532047]
[33.43836721]

5月15日招商銀行關(guān)盤時(shí)的股價(jià)為:33.44

總結(jié)

雖然預(yù)測(cè)結(jié)果是這樣子,但感覺這樣預(yù)測(cè)似乎很菜啊。畢竟預(yù)測(cè)的每個(gè)值都會(huì)有偏差,多個(gè)偏差累加起來就很多了,這讓我有點(diǎn)害怕。不知道存不存在不預(yù)測(cè)其他值直接預(yù)測(cè)close的方法,或者說直接預(yù)測(cè)5月15號(hào)的而不用先預(yù)測(cè)13、14號(hào)的方法。雖然我知道有種算法是時(shí)間序列算法,但不是很懂。希望哪位大神看了能給我一些建議,指點(diǎn)迷津。

對(duì)于一個(gè)自學(xué)數(shù)據(jù)分析的在校學(xué)生,苦于沒有項(xiàng)目經(jīng)驗(yàn),正好趕上這次的「數(shù)據(jù)游戲」,能利用此次機(jī)會(huì)操作一波真的很不錯(cuò)。既能學(xué)到東西,獲勝的話還能得到獎(jiǎng)品。

Ad Time

學(xué)習(xí)更多數(shù)據(jù)科學(xué)知識(shí)請(qǐng)關(guān)注微信公眾號(hào):read_csv

參與數(shù)據(jù)科學(xué)活動(dòng)請(qǐng)加 QQ 群:759677734

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/20040.html

相關(guān)文章

  • 數(shù)據(jù)游戲」:使用回歸預(yù)測(cè)招商銀行股價(jià)

    摘要:作者,數(shù)據(jù)游戲優(yōu)勝隊(duì)伍成員前陣子報(bào)名參加了數(shù)據(jù)游戲比賽,題目是預(yù)測(cè)月號(hào)星期三招商銀行的股價(jià),截止時(shí)間是在月號(hào)星期天。 作者:Max,「數(shù)據(jù)游戲」優(yōu)勝隊(duì)伍成員 前陣子報(bào)名參加了「數(shù)據(jù)游戲」比賽,題目是預(yù)測(cè)5月15號(hào)(星期三)招商銀行的股價(jià),截止時(shí)間是在5月12號(hào)(星期天)。在本次預(yù)測(cè)中,我用到的是嶺回歸。 嶺回歸 嶺回歸是回歸的一種,它解決回歸中重大疑難問題:排除多重共線性,進(jìn)行變量的選...

    沈建明 評(píng)論0 收藏0
  • 數(shù)據(jù)游戲」:使用 ARIMA 算法預(yù)測(cè)三日后招商銀行收盤價(jià)

    摘要:作者天瓊,數(shù)據(jù)游戲優(yōu)勝隊(duì)伍成員介紹本文整理記錄了參與的一次小型數(shù)據(jù)分析競(jìng)賽數(shù)據(jù)游戲,競(jìng)賽目標(biāo)是預(yù)測(cè)年月日股閉市時(shí)招商銀行的股價(jià)。日發(fā)現(xiàn)的數(shù)據(jù)有錯(cuò)誤,需要手工矯正日該數(shù)據(jù)恢復(fù)正常。而函數(shù),是對(duì)樣本外的數(shù)據(jù)進(jìn)行預(yù)測(cè)。 作者:天瓊,「數(shù)據(jù)游戲」優(yōu)勝隊(duì)伍成員 介紹 本文整理記錄了參與的一次小型數(shù)據(jù)分析競(jìng)賽「數(shù)據(jù)游戲」,競(jìng)賽目標(biāo)是預(yù)測(cè)2019年5月15日A股閉市時(shí)招商銀行600036的股價(jià)。 主...

    xcc3641 評(píng)論0 收藏0
  • 數(shù)據(jù)游戲」:使用 ARIMA 算法預(yù)測(cè)三日后招商銀行收盤價(jià)

    摘要:作者天瓊,數(shù)據(jù)游戲優(yōu)勝隊(duì)伍成員介紹本文整理記錄了參與的一次小型數(shù)據(jù)分析競(jìng)賽數(shù)據(jù)游戲,競(jìng)賽目標(biāo)是預(yù)測(cè)年月日股閉市時(shí)招商銀行的股價(jià)。日發(fā)現(xiàn)的數(shù)據(jù)有錯(cuò)誤,需要手工矯正日該數(shù)據(jù)恢復(fù)正常。而函數(shù),是對(duì)樣本外的數(shù)據(jù)進(jìn)行預(yù)測(cè)。 作者:天瓊,「數(shù)據(jù)游戲」優(yōu)勝隊(duì)伍成員 介紹 本文整理記錄了參與的一次小型數(shù)據(jù)分析競(jìng)賽「數(shù)據(jù)游戲」,競(jìng)賽目標(biāo)是預(yù)測(cè)2019年5月15日A股閉市時(shí)招商銀行600036的股價(jià)。 主...

    Nino 評(píng)論0 收藏0
  • 機(jī)器學(xué)習(xí)之多項(xiàng)式回歸與模型泛化

    摘要:還提供了,將多項(xiàng)式特征數(shù)據(jù)歸一化和線性回歸組合在了一起,大大方便的編程的過程。在機(jī)器學(xué)習(xí)算法中,主要的挑戰(zhàn)來自方差,解決的方法主要有降低模型復(fù)雜度降維增加樣本數(shù)使用驗(yàn)證集模型正則化。 多項(xiàng)式回歸 多項(xiàng)式回歸使用線性回歸的基本思路 非線性曲線如圖: showImg(https://segmentfault.com/img/bVbkn4q?w=372&h=252); 假設(shè)曲線表達(dá)式為:$y...

    huhud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<