阿里天池竞赛 A股上市公司营收预测 使用LSTM模型做时序预测
参赛结束了,最后结果一百多名,先把清洗好的数据和预测算法文件记录下来。
使用的完全代码和数据
https://download.csdn.net/download/infent/10693927
代码注释如下
# -*- 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("TICKER_SYMBOL==@x")
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模型做时序预测相关推荐
- A股上市公司营收预测
A股上市公司营收预测 前言 背景 人员介绍 数据理解 数据准备 翻译利润表的变量名(吃了文化亏) 通过spss statistisc的自动线性建模分析出影响到营业收入的10个变量 建模(乱建的模) 模 ...
- access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜
对于腾讯来说,他们主力营收还是来自游戏,这点是毋庸置疑的. 市场研究公司Newzoo送出的最新报告显示,2018年排名前25的上市游戏公司,总营收首次超过1000亿美元(1073亿美元),而全球市场的 ...
- 阿里云代理商:阿里云跨分部抵销前营收267.6亿元,跨分部抵销后营收207.57亿元,抵销后营收环比增长达17.37%。
阿里云代理商聚搜云专业服务于阿里云ECS服务器采购.阿里云Ddos采购.阿里云waf采购.对象存储OSS.阿里云企业邮箱采购.阿里云国际站代理商.阿里云国际站充值.云安全中心(态势感知).阿里云高可用 ...
- 2021年三季度中国物流行业A股上市企业营收排行榜:*ST飞马于12月初成功摘星脱帽(附热榜TOP46详单)
榜单解读: 2021年三季度中国物流行业共有46家(截至2022年2月8日)A股上市企业披露三季报,总计营收23859.1亿元,同比增长89.33%(2020Q3共有44家物流上市企业),总计归属母公 ...
- Commvault公司营收增长 但本季度仍身陷亏损
Commvault公司已经连续第三季度实现业务复苏,不过其税后实际收益较上年同期仍然出现了更加严重的亏损状况. Commvault公司2017财年第一季度营收同比提升9.6%,达到1.524亿美元:上 ...
- 阿里财报:云计算年度营收133亿,季度营收连续12个季度翻番
北京时间5月4日晚间,阿里巴巴集团公布2018财年第四季度和全年财报,该季度内(2018年1月至3月底)阿里云营收43.85亿元,同比增长103%:2018财年(2017年4月至2018年3月底)营收 ...
- 2021年三季度中国医疗服务行业A股上市企业营收排行榜:国际医学于1月17日起戴帽,简称变更为“ST国医”(附热榜TOP37详单)
榜单解读: 2021年三季度中国医疗服务行业共有37家(截至2022年1月17日)A股上市企业披露三季报,总计营收944.7亿元,同比增长83.31%(2020Q3共有24家医疗服务上市企业) ...
- 2021年三季度中国家居用品行业A股上市企业营收排行榜:欧派家居、顾家家居排名前2位,且近五年第三季度的净利润均逐年递增(附热榜TOP61详单)
榜单解读: 2021年三季度中国家居用品行业共有61家(截至2022年1月19日)A股上市企业披露三季报,总计营收1576亿元,总计归属母公司净利润142.3亿元.61家家居用品上市企 ...
- 2021年三季度中国生物制品行业A股上市企业营收排行榜:智飞生物业绩突出,8家企业新上榜(附热榜TOP42详单)
榜单解读: 2021年三季度中国生物制品行业共有42家(截至2022年1月22日)A股上市企业披露三季报,总计营收986.9亿元,同比增长7.52%(2020Q3共有45家生物制品上市企业), ...
最新文章
- 风暴数码论坛教程--加入ROOT等文件及方法
- tf.nn.softmax_cross_entropy_with_logits中的“logits”到底是个什么意思?
- spring boot中修改默认端口号
- IE6/IE7下:inline-block不兼容的问题
- 文巾解题 17. 电话号码的字母组合
- 输出cglib以及jdk动态代理产生的class文件
- CodeForces - 1300D Aerodynamic(几何+思维)
- 24/100. Linked List Cycle
- How product extension field is involved in search scenario
- 2018-07-10 为Chrome和火狐浏览器编写扩展
- NVIDIA PhysX宣布正式开源 最强物理仿真引擎
- 【Python3网络爬虫开发实战】 1.7.1-Charles的安装
- 百度搜索引擎优化指南_百度SEO优化和其他搜索引擎优化用什么不同的地方
- 如何做好Web接口测试
- Python中被双下划线包围的魔法方法
- python数据分析系统_Python数据分析,系统步骤介绍!
- Android 模拟器中sd卡的创建 和文件的上传
- spring源码解析百度网盘下载
- Android加载超大图片
- 怕公司的新同事超过你怎么办
热门文章
- 三相异步电动机直接转矩控制系统的matlab/simulink实现
- git命令 腾讯云开发者平台 拉代码 提交代码
- Nonlinear Component Analysis as a Kernel Eigenvalue Problem
- 2022数学建模美赛C思路
- Z-Wave Battery Support Basics ZWAVE如何实时控制电池供电设备
- XTransfer欧美本地账户可以收哪些地区的币种?
- 最长公共子序列 (LCS) 详解+例题模板(全)
- 如何完成网课公号号搭建——小白教程!内附网课题库接口
- 3分钟搞定高逼格PPT封底——简约型
- 直流无刷电机驱动器资料 功能支持模式:有霍尔和无霍尔两种