阿里天池競賽 A股上市公司營收預測 使用LSTM模型做時序預測
參賽結束了,最後結果一百多名,先把清洗好的資料和預測演算法檔案記錄下來。
使用的完全程式碼和資料
程式碼註釋如下
# -*- encoding:utf-8 -*-
import pandas as pd
import numpy as np
import sys
from keras.layers.core import Dense, Activation, Dropout
from keras.layers.recurrent import LSTM
from keras.models import Sequential
from sklearn.preprocessing import MinMaxScaler
# 視窗長度
LEN_SEQ = 2
np.random.seed(0)
def load_one(data, x):
global LEN_SEQ
#ticker = data.query("TICKER_SYMBOL=="+str(x)) # 個股
#ticker = data.query("TICKER_SYMBOL==1 or TICKER_SYMBOL==5")
ticker =data.loc[data['TICKER_SYMBOL']==x]
#ticker = data.query("[email protected]")
print('query the data')
#print(ticker)
arr = ticker.ix[:,[1,2,3,4]] # 矩陣
# print(arr)
# 做時序差分
train, label = [], []
b_size = 4
for i in range(LEN_SEQ,0,-1):
train.append(arr.shift(i))
label += [('var%d(t-%d)' % (j+1,i)) for j in range(b_size)]
for i in range(LEN_SEQ):
train.append(arr.shift(-i))
if i ==0:
label += [('var%d(t)' %(j+1)) for j in range(b_size)]
else:
label += [('var%d(t+%d)'%(j+1,i)) for j in range(b_size)]
Train = pd.concat(train,axis=1)
Train.dropna(inplace=True)
#Train.columns = label
return Train
def build_model():
model = Sequential()
model.add(LSTM(20,input_shape=(1,15)))
model.add(Dense(1))
model.compile(loss='mae',optimizer='adam')
return model
def predict_point_by_point(model, data):
values = data.values
train_X,train_y = values[:,:-1],values[:,-1]
#test_X,test_y = values[:,:-1],data[:,-1]
train_X = train_X.reshape((train_X.shape[0],1,train_X.shape[1]))
#test_X = test_X.reshape(test_X,shape[0],LEN_SEQ,test_X.shape[1])
LSTM = model.fit(train_X,train_y,epochs=20,batch_size=3)
return model
#在金融的這份資料裡,沒有2018年q2的資料,也就是t+1的cogs,operateprofit,nincome都沒有,無法去預測目標,也就是revenue的值。所以我們需要先對每個單列做出預測,這裡我們仍然用lstm對2018q2的這三列預測,再加上向前的三次記錄,共十五列來做預測
def create_trainX_trainy(data, look_back=1):
trainX, trainy = [], []
for i in range(len(data)-look_back-1):
a = data[i:(i+look_back)]
trainX.append(a)
trainy.append(data[i + look_back])
return np.array(trainX), np.array(trainy)
def predict_useone_column(column):
trainX,trainy = create_trainX_trainy(column)
trainX = np.reshape(trainX,(trainX.shape[0],1,trainX.shape[1]))
model = Sequential()
model.add(LSTM(20,input_shape=(1,1)))
model.add(Dense(1))
model.compile(loss='mae',optimizer='adam')
model.fit(trainX,trainy,epochs=20,batch_size=1)
return model
def main():
dic = {}
data = pd.read_csv("./datanew.csv", header=0)
data.drop('END_DATE',1,inplace=True)
#print(data.head(),data.columns)
data.fillna(0.00001,inplace=True)
#print(temp.isnull().count())
#temp.fillna(0.000001,inplace=True)
# 做minmax
#scaler = MinMaxScaler(feature_range=(0,1))
#data_scaled = pd.DataFrame(scaler.fit_transform(temp),columns=['TICKER_SYMBOL','REVENUE','COGS','OPERATE_PROFIT','N_INCOME'])
tickers = data['TICKER_SYMBOL'].unique()
#train, label, b_size = [], [], []
#按股訓練,先出q2的前三列
for i in tickers: # 按股迴圈
print(i)
train = load_one(data,i)
if train.index.values ==[]:
continue
#print(train)
#for j in [train.ix[:,12],train.ix[:,13],train.ix[:,14]]:
# predict_useone_column(model,column)
# train.ix[]
#print(train.values.shape)
# print(train.head())
# 做模型
# print(i)
model = build_model()
# 做預測
#dic[str(i)] = "預測數值"
#LSTM = predict_point_by_point(model,train)
#print(data.loc[data['TICKER_SYMBOL']==i]['COGS'].values)
cogs_model=predict_useone_column((data.loc[data['TICKER_SYMBOL']==i])['COGS'].values)
operate_model=predict_useone_column((data.loc[data['TICKER_SYMBOL']==i])['OPERATE_PROFIT'].values)
nincome_model=predict_useone_column((data.loc[data['TICKER_SYMBOL']==i])['N_INCOME'].values)
pre2018q2 = np.array(list(train.iloc[-1,3:15].values))
cogs = cogs_model.predict(np.reshape(np.array(pre2018q2[9]),(1,1,1)))
operate = operate_model.predict(np.reshape(np.array(pre2018q2[10]),(1,1,1)))
nincome = nincome_model.predict(np.reshape(np.array(pre2018q2[11]),(1,1,1)))
pre2018q2 = np.append(pre2018q2,[cogs,operate,nincome])
#print(pre2018q2)
pre2018q2 = np.reshape(pre2018q2,(1,1,15))
model_after_train = predict_point_by_point(model,train)
pre_revenue = model_after_train.predict(pre2018q2)[0][0]
#print(pre_revenue,len(pre_revenue))
dic[str(i)] = pre_revenue
#train = pd.DataFrame()
result = pd.DataFrame(columns=['ticker_symbol','predict_revenue'])
result['ticker_symbol'] = dic.keys()
result['predict_revenue'] = dic.values()
result.to_csv('./predict.csv')
if __name__ == "__main__":
sys.exit(main())
相關推薦
阿里天池競賽 A股上市公司營收預測 使用LSTM模型做時序預測
參賽結束了,最後結果一百多名,先把清洗好的資料和預測演算法檔案記錄下來。 使用的完全程式碼和資料 程式碼註釋如下 # -*- encoding:utf-8 -*- import pandas as pd import numpy as np import sys f
FDDC2018金融演算法挑戰賽01-A股上市公司季度營收預測
我所用到的資料 1、income_gb_2代表的是我從天池原有的income_statement中的general business匯出的,balance_gb_2和cash_gb_2 首亦然。 2、 Macro為巨集觀資料,Market為市場資料 匯入相關包,
競賽資訊|A股上市公司公告資訊抽取
(本內容轉載自公眾號“科技與Python”) A股上市公司公告資訊抽取 大賽背景 在金融領域,每24小時都會產生大約2.5億位元組的資
python抓取動態資料 A股上市公司基本資訊
1.背景 之前寫的抓取A股所有上市公司資訊的小程式在上交所網站改版後,需要同步修改 pyton2.7.9 2.分析過程 以抓取宇通客車【600066】資訊為例 紅框中的內容是需要抓取的資訊,檢視網頁原始碼 可以看到公司資訊並沒有直接寫到html中,使用chrome “
爬取網易財經全部A股上市公司年報
首先要找到所有A股上市公司的股票程式碼,將東方財富網列表中所有的股票的程式碼(6位數字號)取下來 <a target="_blank" href="http://quote.eastmoney.com/sh500001.html">基金金泰(500001
聯商網:2018上半年零售上市公司營收排行榜
據聯商網統計資料顯示,2018年上半年,我國127家零售業上市公司共實現營收10957.54億元,淨利潤729億元。 備註: 1、圖表為不完全統計,榜單按企業營收排名,資料來源為該上市公司財報。 2、貨幣單位為人民幣,美元、港幣按匯率轉換成人民幣。 3、標
A股成“香餑餑”!李彥宏、丁磊、王小川表態回A股上市為哪般?
A股 這幾天有關上市的消息突然多了起來,除了小米或將在A+H股兩地上市備受關註之外,李彥宏、丁磊、王小川等互聯網大佬在政協大會舉行期間,也紛紛表露了對回到A股上市的個人看法。之所以現在A股成為互聯網企業眼中的“香餑餑”,在於A股變革在即,有可能讓這些互聯網企業享受到更多福利和利益。 此前,包括百度、網易、阿裏
利用Python視覺化來檢視中國環保股上市公司!排名第一的居然是?
1. 提取所有股票程式碼 1import tushare as ts 2# 獲取所有股票列表 3data = ts.get_stock_basics() 4print(data.head()) 5# 返回資料如下,所有列值可以參考:ht
獲取美股上市公司股票資料
最近半年算是徹底被樑博坑了,被帶入美股,開始一頓操作猛如虎,毫無經驗的我,被按在低谷使勁的摩擦,閒下來想想,有沒有辦法規範炒股的操作呢?因為我很多次都是誤操作才導致虧錢。慢慢接觸了量化交易,通過訓練歷史資料,修正策略模型,有可能在正股中盈利;我虧的是在期權上,期權的風險遠高於正股,期權一晚上的漲幅可
阿里天池競賽分享
最近參加阿里天池的“網路影象的文字檢測”挑戰賽,終於結束,最終排名第181,總共是1424只隊伍參加。第一次參加機器學習挑戰賽,成績不是很理想,今天把一些體悟寫一下,希望對後來參加的人有用。一、賽題簡介在網際網路世界中,圖片是傳遞資訊的重要媒介。特別是電子商務
10行程式碼爬取全國所有A股/港股/新三板上市公司資訊
作者 高階農民工 已獲原作者授權,如需轉載,請聯絡原作者。 摘要:我們平常在瀏覽網頁中會遇到一些表格型的資料資訊,除了表格本身體現的內容以外,可能還想透過表格背後再挖掘些有意思或者有價值的資訊。這時,可用python爬蟲來實現。本文采用pandas庫中的read_h
【附上解釋】爬取A股所有上市公司的資訊並存儲到資料庫或者是csv檔案中
輸入到mysql版 輸出會有警告,但是不影響。 附上了詳細的解釋~ import pandas as pd import requests import random from bs4 import BeautifulSoup import pymysql f
阿里天池大資料競賽——口碑商家客流量預測 A
阿里天池大資料競賽——口碑商家客流量預測的競賽已經結束了,作為一個剛參加這種專案競賽的純小白來說,走了不少的彎路,在資料處理的過程上花費了大量的時間和功夫,最後得到的效果也不好,不過從這個過程還是學習到
54家國內主要百貨上市公司上半年營收排行榜
2018年零售行業最為關注的熱點問題就是消費升級和消費降級,“負重前行”的百貨行業也依然是零售行業關注的重點,2018年上半年,百貨行業的整體運營情況又是如何呢? 國內54家百貨上市公司的2018年上半年財報,根據財報,上半年54家上市公司合計實現營業收入2492.91億元,合計歸
小米推遲上市和A股大跌,背後有什麼共同原因?
矽谷Live / 實地探訪 / 熱點探祕 / 深度探討本文由華商韜略原創 首發於微信公眾號:華商
【天池競賽系列】阿里移動推薦演算法思路解析
賽題地址:http://tianchi.aliyun.com/competition/information.htm?raceId=1 登入即可下載資料 從4月到7月,學習了很多也收穫了很多 題目就不多說了,一句話表達就是根據過去一個月的行為預測14年12月19
阿里天池大資料競賽
《阿里移動推薦演算法》 2014年是阿里巴巴集團移動電商業務快速發展的一年,例如2014雙11大促中移動端成交佔比達到42.6%。相比PC時代,移動端網路的訪問是隨時隨地的,具有更豐富的場景資料,比如使用者的位置資訊、使用者訪問的時間規律等。本次大賽以阿里巴巴移動電商平
證監會回應“IPO放寬”傳言:嚴把上市公司入口關
全國金融工作會議將直接融資放到重要位置後,有觀點認為IPO或進一步放寬。對此,證監會新聞發言人常德鵬在21日例行發布會上表示,證監會將嚴把上市公司入口關,加大整頓資本市場秩序力度,繼續嚴厲打擊欺詐發行。 常德鵬表示,證監會將認真貫徹落實習近平總書記在全國金融工作會議中關於“要把發展直接融資放
python3爬取上市公司基本數據
http fin form lis 爬蟲 sts 獲取網頁 bs4 ise 目前,我國滬深A股上市公司的數量為3524家[2018/05/31],如果能夠從某個財經網站上批量獲取這些公司的基本信息,將對研究工作起到一定幫助。進行這項工作之前,先讓我們梳理一下我們的數據及其來
選出某上市公司過去分紅情況
ram -o lse 是我 spa AR lB water 如何 股票分紅都是真金白銀,簡單來說,上市公司分配股利的方式主要有轉增股本和派發現金股利,其中現金股利比較好理解,就是上市公司直接派發給股民的現金紅利;轉增股本卻來自於資本公積,不受公司年度可分