久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

教程 | 如何用Python和機(jī)器學(xué)習(xí)炒股賺錢?

 mikeywangtao 2017-07-04

原標(biāo)題:教程 | 如何用Python和機(jī)器學(xué)習(xí)炒股賺錢,?

選自Hackernoon

作者:Ga?tan Rickter

機(jī)器之心編譯

參與:熊貓

相信很多人都想過讓人工智能來幫你賺錢,,但到底該如何做呢?瑞士日內(nèi)瓦的一位金融數(shù)據(jù)顧問 Ga?tan Rickter 近日發(fā)表文章介紹了他利用 Python 和機(jī)器學(xué)習(xí)來幫助炒股的經(jīng)驗(yàn),,其最終成果的收益率跑贏了長期處于牛市的標(biāo)準(zhǔn)普爾 500 指數(shù),。雖然這篇文章并沒有將他的方法完全徹底公開,但已公開的內(nèi)容或許能給我們帶來如何用人工智能炒股的啟迪,。機(jī)器之心對(duì)本文進(jìn)行了編譯介紹,,代碼詳情請(qǐng)?jiān)L問原文。

我終于跑贏了標(biāo)準(zhǔn)普爾 500 指數(shù) 10 個(gè)百分點(diǎn),!聽起來可能不是很多,,但是當(dāng)我們處理的是大量流動(dòng)性很高的資本時(shí),對(duì)沖基金的利潤就相當(dāng)可觀,。更激進(jìn)的做法還能得到更高的回報(bào),。

這一切都始于我閱讀了 Gur Huberman 的一篇題為《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的論文。該研究描述了一件發(fā)生在 1998 年的涉及到一家上市公司 EntreMed(當(dāng)時(shí)股票代碼是 ENMD)的事件:

「星期天《紐約時(shí)報(bào)》上發(fā)表的一篇關(guān)于癌癥治療新藥開發(fā)潛力的文章導(dǎo)致 EntreMed 的股價(jià)從周五收盤時(shí)的 12.063 飆升至 85,,在周一收盤時(shí)接近 52,。在接下來的三周,它的收盤價(jià)都在 30 以上,。這股投資熱情也讓其它生物科技股得到了溢價(jià),。但是,這個(gè)癌癥研究方面的可能突破在至少五個(gè)月前就已經(jīng)被 Nature 期刊和各種流行的報(bào)紙報(bào)道過了,,其中甚至包括《泰晤士報(bào)》,!因此,僅僅是熱情的公眾關(guān)注就能引發(fā)股價(jià)的持續(xù)上漲,,即便實(shí)際上并沒有出現(xiàn)真正的新信息,。」

在研究者給出的許多有見地的觀察中,,其中有一個(gè)總結(jié)很突出:

「(股價(jià))運(yùn)動(dòng)可能會(huì)集中于有一些共同之處的股票上,,但這些共同之處不一定要是經(jīng)濟(jì)基礎(chǔ),。」

我就想,,能不能基于通常所用的指標(biāo)之外的其它指標(biāo)來劃分股票,。我開始在數(shù)據(jù)庫里面挖掘,,幾周之后我發(fā)現(xiàn)了一個(gè),,其包含了一個(gè)分?jǐn)?shù),描述了股票和元素周期表中的元素之間的「已知和隱藏關(guān)系」的強(qiáng)度,。

我有計(jì)算基因組學(xué)的背景,,這讓我想起了基因和它們的細(xì)胞信號(hào)網(wǎng)絡(luò)之間的關(guān)系是如何地不為人所知。但是,,當(dāng)我們分析數(shù)據(jù)時(shí),,我們又會(huì)開始看到我們之前可能無法預(yù)測的新關(guān)系和相關(guān)性。

選擇出的涉及細(xì)胞可塑性,、生長和分化的信號(hào)通路的基因的表達(dá)模式

和基因一樣,,股票也會(huì)受到一個(gè)巨型網(wǎng)絡(luò)的影響,其中各個(gè)因素之間都有或強(qiáng)或弱的隱藏關(guān)系,。其中一些影響和關(guān)系是可以預(yù)測的,。

我的一個(gè)目標(biāo)是創(chuàng)建長的和短的股票聚類,我稱之為「籃子聚類(basket clusters)」,,我可以將其用于對(duì)沖或單純地從中獲利,。這需要使用一個(gè)無監(jiān)督機(jī)器學(xué)習(xí)方法來創(chuàng)建股票的聚類,從而使這些聚類之間有或強(qiáng)或弱的關(guān)系,。這些聚類將會(huì)翻倍作為我的公司可以交易的股票的「籃子(basket)」,。

首先我下載了一個(gè)數(shù)據(jù)集:http://54.174.116.134/recommend/datasets/supercolumns-elements-08.html,這個(gè)數(shù)據(jù)集基于元素周期表中的元素和上市公司之間的關(guān)系,。

然后我使用了 Python 和一些常用的機(jī)器學(xué)習(xí)工具——scikit-learn,、numpy、pandas,、matplotlib 和 seaborn,,我開始了解我正在處理的數(shù)據(jù)集的分布形狀。為此我參考了一個(gè)題為《Principal Component Analysis with KMeans visuals》的 Kaggle Kernel:https://www./arthurtok/principal-component-analysis-with-kmeans-visuals

import numpy as np

import pandas as pd

from sklearn.decomposition

import PCA

from sklearn.cluster

import KMeans

import matplotlib.pyplot as plt

import seaborn as sb

np.seterr(divide=\'ignore\', invalid=\'ignore\')

# Quick way to test just a few column features

# stocks = pd.read_csv(\'supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv\', usecols=range(1,16))

stocks = pd.read_csv(\'supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv\')

print(stocks.head())

str_list = []

for colname, colvalue in stocks.iteritems():

if type(colvalue[1]) == str:

str_list.append(colname)

# Get to the numeric columns by inversion

num_list = stocks.columns.difference(str_list)

stocks_num = stocks[num_list]

print(stocks_num.head())

輸出:簡單看看前面 5 行:

概念特征的皮爾遜相關(guān)性(Pearson Correlation),。在這里案例中,,是指來自元素周期表的礦物和元素:

stocks_num = stocks_num.fillna(value=0, axis=1)

X = stocks_num.values

from sklearn.preprocessing import StandardScaler

X_std = StandardScaler().fit_transform(X)

f, ax = plt.subplots(figsize=(12, 10))

plt.title(\'Pearson Correlation of Concept Features (Elements & Minerals)\')

# Draw the heatmap using seaborn

sb.heatmap(stocks_num.astype(float).corr(),linewidths=0.25,vmax=1.0, square=True, cmap='YlGnBu', linecolor=\'black\', annot=True)

sb.plt.show()

輸出:(這個(gè)可視化例子是在前 16 個(gè)樣本上運(yùn)行得到的)??吹皆刂芷诒碇械脑睾蜕鲜泄娟P(guān)聯(lián)起來真的很有意思,。在某種程度時(shí),我想使用這些數(shù)據(jù)基于公司與相關(guān)元素或材料的相關(guān)性來預(yù)測其可能做出的突破,。

測量「已解釋方差(Explained Variance)」和主成分分析(PCA)

已解釋方差=總方差-殘差方差(explained variance = total variance - residual variance),。應(yīng)該值得關(guān)注的 PCA 投射組件的數(shù)量可以通過已解釋方差度量(Explained Variance Measure)來引導(dǎo),。Sebastian Raschka 的關(guān)于 PCA 的文章對(duì)此進(jìn)行了很好的描述,參閱:http:///Articles/2015_pca_in_3_steps.html

# Calculating Eigenvectors and eigenvalues of Cov matirx

mean_vec = np.mean(X_std, axis=0)

cov_mat = np.cov(X_std.T)

eig_vals, eig_vecs = np.linalg.eig(cov_mat)

# Create a list of (eigenvalue, eigenvector) tuples

eig_pairs = [ (np.abs(eig_vals[i]),eig_vecs[:,i]) for i in range(len(eig_vals))]

# Sort from high to low

eig_pairs.sort(key = lambda x: x[0], reverse= True)

# Calculation of Explained Variance from the eigenvaluestot = sum(eig_vals)

var_exp = [(i/tot)*100 for i in sorted(eig_vals, reverse=True)]

cum_var_exp = np.cumsum(var_exp)

# Cumulative explained variance# Variances plot

max_cols = len(stocks.columns) - 1plt.figure(figsize=(10, 5))

plt.bar(range(max_cols), var_exp, alpha=0.3333, align=\'center\', label=\'individual explained variance\', color = \'g\')

plt.step(range(max_cols), cum_var_exp, where=\'mid\',label=\'cumulative explained variance\')

plt.ylabel(\'Explained variance ratio\')

plt.xlabel(\'Principal components\')

plt.legend(loc=\'best\')

plt.show()

輸出:

從這個(gè)圖表中我們可以看到大量方差都來自于預(yù)測主成分的前 85%,。這是個(gè)很高的數(shù)字,,所以讓我們從低端的開始,先只建模少數(shù)幾個(gè)主成分,。更多有關(guān)分析主成分合理數(shù)量的信息可參閱:http:///ev/principal-component-analysis

使用 scikit-learn 的 PCA 模塊,,讓我們?cè)O(shè) n_components = 9。代碼的第二行調(diào)用了 fit_transform 方法,,其可以使用標(biāo)準(zhǔn)化的電影數(shù)據(jù) X_std 來擬合 PCA 模型并在該數(shù)據(jù)集上應(yīng)用降維(dimensionality reduction),。

pca = PCA(n_components=9)

x_9d = pca.fit_transform(X_std)

plt.figure(figsize = (9,7))

plt.scatter(x_9d[:,0],x_9d[:,1], c=\'goldenrod\',alpha=0.5)

plt.ylim(-10,30)

plt.show()

輸出:

這里我們甚至沒有真正觀察到聚類的些微輪廓,所以我們很可能應(yīng)該繼續(xù)調(diào)節(jié) n_component 的值直到我們得到我們想要的結(jié)果,。這就是數(shù)據(jù)科學(xué)與藝術(shù)(data science and art)中的「藝術(shù)」部分,。

現(xiàn)在,我們來試試 K-均值,,看看我們能不能在下一章節(jié)可視化任何明顯的聚類,。

K-均值聚類(K-Means Clustering)

我們將使用 PCA 投射數(shù)據(jù)來實(shí)現(xiàn)一個(gè)簡單的 K-均值。

使用 scikit-learn 的 KMeans() 調(diào)用和 fit_predict 方法,,我們可以計(jì)算聚類中心并為第一和第三個(gè) PCA 投射預(yù)測聚類索引(以便了解我們是否可以觀察到任何合適的聚類),。然后我們可以定義我們自己的配色方案并繪制散點(diǎn)圖,代碼如下所示:

# Set a 3 KMeans clustering

kmeans = KMeans(n_clusters=3)

# Compute cluster centers and predict cluster indices

X_clustered = kmeans.fit_predict(x_9d)# Define our own color map

LABEL_COLOR_MAP = {0 : \'r\',1 : \'g\',2 : \'b\'}

label_color = [LABEL_COLOR_MAP[l] for l in X_clustered]

# Plot the scatter digram

plt.figure(figsize = (7,7))

plt.scatter(x_9d[:,0],x_9d[:,2], c= label_color, alpha=0.5)

plt.show()

輸出:

這個(gè) K-均值散點(diǎn)圖看起來更有希望,,好像我們簡單的聚類模型假設(shè)就是正確的一樣,。我們可以通過這種顏色可視化方案觀察到 3 個(gè)可區(qū)分開的聚類。

當(dāng)然,,聚類和可視化數(shù)據(jù)集的方法還有很多,,參考:https:///kGy3ra

使用 seaborn 方便的 pairplot 函數(shù),我可以以成對(duì)的方式在數(shù)據(jù)框中自動(dòng)繪制所有的特征,。我們可以一個(gè)對(duì)一個(gè)地 pairplot 前面 3 個(gè)投射并可視化:

# Create a temp dataframe from our PCA projection data 'x_9d'

df = pd.DataFrame(x_9d)

df = df[[0,1,2]]

df[\'X_cluster\'] = X_clustered

# Call Seaborn\'s pairplot to visualize our KMeans clustering on the PCA projected data

sb.pairplot(df, hue=\'X_cluster\', palette=\'Dark2\', diag_kind=\'kde\', size=1.85)

sb.plt.show()

輸出:

構(gòu)建籃子聚類(Basket Clusters)

你應(yīng)該自己決定如何微調(diào)你的聚類,。這方面沒有什么萬靈藥,具體的方法取決于你操作的環(huán)境,。在這個(gè)案例中是由隱藏關(guān)系所定義的股票和金融市場,。

一旦你的聚類使你滿意了,你就可以設(shè)置分?jǐn)?shù)閾值來控制特定的股票是否有資格進(jìn)入一個(gè)聚類,,然后你可以為一個(gè)給定的聚類提取股票,,將它們作為籃子進(jìn)行交易或使用這些籃子作為信號(hào)。你可以使用這種方法做的事情很大程度就看你自己的創(chuàng)造力以及你在使用深度學(xué)習(xí)變體來進(jìn)行優(yōu)化的水平,,從而基于聚類或數(shù)據(jù)點(diǎn)的概念優(yōu)化每個(gè)聚類的回報(bào),,比如 short interest 或 short float(公開市場中的可用股份)。

你可以注意到了這些聚類被用作籃子交易的方式一些有趣特征,。有時(shí)候標(biāo)準(zhǔn)普爾和一般市場會(huì)存在差異,。這可以提供本質(zhì)上基于「信息套利(information arbitrage)」的套利機(jī)會(huì),。一些聚類則和谷歌搜索趨勢相關(guān)。

看到聚類和材料及它們的供應(yīng)鏈相關(guān)確實(shí)很有意思,,正如這篇文章說的一樣:https://www./en/2017/05/04/zooming-in-10-materials-and-their-supply-chains/

我僅僅使用該數(shù)據(jù)集操作了 Cobalt(鈷),、Copper(銅)、Gallium(鎵)和 Graphene(石墨烯)這幾個(gè)列標(biāo)簽,,只是為了看我是否可能發(fā)現(xiàn)從事這一領(lǐng)域或受到這一領(lǐng)域的風(fēng)險(xiǎn)的上市公司之間是否有任何隱藏的聯(lián)系,。這些籃子和標(biāo)準(zhǔn)普爾的回報(bào)進(jìn)行了比較。

通過使用歷史價(jià)格數(shù)據(jù)(可直接在 Quantopian,、Numerai,、Quandl 或 Yahoo Finance 使用),,然后你可以匯總價(jià)格數(shù)據(jù)來生成預(yù)計(jì)收益,,其可使用 HighCharts 進(jìn)行可視化:

我從該聚類中獲得的回報(bào)超過了標(biāo)準(zhǔn)普爾相當(dāng)一部分,這意味著你每年的收益可以比標(biāo)準(zhǔn)普爾還多 10%(標(biāo)準(zhǔn)普爾近一年來的漲幅為 16%),。我還見過更加激進(jìn)的方法可以凈掙超過 70%?,F(xiàn)在我必須承認(rèn)我還做了一些其它的事情,但因?yàn)槲夜ぷ鞯谋举|(zhì),,我必須將那些事情保持黑箱,。但從我目前觀察到的情況來看,至少圍繞這種方法探索和包裝新的量化模型可以證明是非常值得的,,而其唯一的缺點(diǎn)是它是一種不同類型的信號(hào),,你可以將其輸入其它系統(tǒng)的流程中。

生成賣空籃子聚類(short basket clusters)可能比生成買空籃子聚類(long basket clusters)更有利可圖,。這種方法值得再寫一篇文章,,最好是在下一個(gè)黑天鵝事件之前。

如果你使用機(jī)器學(xué)習(xí),,就可能在具有已知和隱藏關(guān)系的上市公司的寄生,、共生和共情關(guān)系之上搶占先機(jī),這是很有趣而且可以盈利的,。最后,,一個(gè)人的盈利能力似乎完全關(guān)乎他在生成這些類別的數(shù)據(jù)時(shí)想出特征標(biāo)簽(即概念(concept))的強(qiáng)大組合的能力。

我在這類模型上的下一次迭代應(yīng)該會(huì)包含一個(gè)用于自動(dòng)生成特征組合或獨(dú)特列表的單獨(dú)算法,。也許會(huì)基于近乎實(shí)時(shí)的事件,,這可能會(huì)影響那些具有只有配備了無監(jiān)督學(xué)習(xí)算法的人類才能預(yù)測的隱藏關(guān)系的股票組。

原文鏈接:https:///unsupervised-machine-learning-for-fun-profit-with-basket-clusters-17a1161e7aa1

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多