参赛结束了,最后结果一百多名,先把清洗好的数据和预测算法文件记录下来。

使用的完全代码和数据

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模型做时序预测相关推荐

  1. A股上市公司营收预测

    A股上市公司营收预测 前言 背景 人员介绍 数据理解 数据准备 翻译利润表的变量名(吃了文化亏) 通过spss statistisc的自动线性建模分析出影响到营业收入的10个变量 建模(乱建的模) 模 ...

  2. access游戏库不显示 ea_全球游戏公司营收一览:腾讯连续第六年霸榜

    对于腾讯来说,他们主力营收还是来自游戏,这点是毋庸置疑的. 市场研究公司Newzoo送出的最新报告显示,2018年排名前25的上市游戏公司,总营收首次超过1000亿美元(1073亿美元),而全球市场的 ...

  3. 阿里云代理商:阿里云跨分部抵销前营收267.6亿元,跨分部抵销后营收207.57亿元,抵销后营收环比增长达17.37%。

    阿里云代理商聚搜云专业服务于阿里云ECS服务器采购.阿里云Ddos采购.阿里云waf采购.对象存储OSS.阿里云企业邮箱采购.阿里云国际站代理商.阿里云国际站充值.云安全中心(态势感知).阿里云高可用 ...

  4. 2021年三季度中国物流行业A股上市企业营收排行榜:*ST飞马于12月初成功摘星脱帽(附热榜TOP46详单)

    榜单解读: 2021年三季度中国物流行业共有46家(截至2022年2月8日)A股上市企业披露三季报,总计营收23859.1亿元,同比增长89.33%(2020Q3共有44家物流上市企业),总计归属母公 ...

  5. Commvault公司营收增长 但本季度仍身陷亏损

    Commvault公司已经连续第三季度实现业务复苏,不过其税后实际收益较上年同期仍然出现了更加严重的亏损状况. Commvault公司2017财年第一季度营收同比提升9.6%,达到1.524亿美元:上 ...

  6. 阿里财报:云计算年度营收133亿,季度营收连续12个季度翻番

    北京时间5月4日晚间,阿里巴巴集团公布2018财年第四季度和全年财报,该季度内(2018年1月至3月底)阿里云营收43.85亿元,同比增长103%:2018财年(2017年4月至2018年3月底)营收 ...

  7. 2021年三季度中国医疗服务行业A股上市企业营收排行榜:国际医学于1月17日起戴帽,简称变更为“ST国医”(附热榜TOP37详单)

        榜单解读: 2021年三季度中国医疗服务行业共有37家(截至2022年1月17日)A股上市企业披露三季报,总计营收944.7亿元,同比增长83.31%(2020Q3共有24家医疗服务上市企业) ...

  8. 2021年三季度中国家居用品行业A股上市企业营收排行榜:欧派家居、顾家家居排名前2位,且近五年第三季度的净利润均逐年递增(附热榜TOP61详单)

        榜单解读:     2021年三季度中国家居用品行业共有61家(截至2022年1月19日)A股上市企业披露三季报,总计营收1576亿元,总计归属母公司净利润142.3亿元.61家家居用品上市企 ...

  9. 2021年三季度中国生物制品行业A股上市企业营收排行榜:智飞生物业绩突出,8家企业新上榜(附热榜TOP42详单)

        榜单解读: 2021年三季度中国生物制品行业共有42家(截至2022年1月22日)A股上市企业披露三季报,总计营收986.9亿元,同比增长7.52%(2020Q3共有45家生物制品上市企业), ...

最新文章

  1. 风暴数码论坛教程--加入ROOT等文件及方法
  2. tf.nn.softmax_cross_entropy_with_logits中的“logits”到底是个什么意思?
  3. spring boot中修改默认端口号
  4. IE6/IE7下:inline-block不兼容的问题
  5. 文巾解题 17. 电话号码的字母组合
  6. 输出cglib以及jdk动态代理产生的class文件
  7. CodeForces - 1300D Aerodynamic(几何+思维)
  8. 24/100. Linked List Cycle
  9. How product extension field is involved in search scenario
  10. 2018-07-10 为Chrome和火狐浏览器编写扩展
  11. NVIDIA PhysX宣布正式开源 最强物理仿真引擎
  12. 【Python3网络爬虫开发实战】 1.7.1-Charles的安装
  13. 百度搜索引擎优化指南_百度SEO优化和其他搜索引擎优化用什么不同的地方
  14. 如何做好Web接口测试
  15. Python中被双下划线包围的魔法方法
  16. python数据分析系统_Python数据分析,系统步骤介绍!
  17. Android 模拟器中sd卡的创建 和文件的上传
  18. spring源码解析百度网盘下载
  19. Android加载超大图片
  20. 怕公司的新同事超过你怎么办

热门文章

  1. 三相异步电动机直接转矩控制系统的matlab/simulink实现
  2. git命令 腾讯云开发者平台 拉代码 提交代码
  3. Nonlinear Component Analysis as a Kernel Eigenvalue Problem
  4. 2022数学建模美赛C思路
  5. Z-Wave Battery Support Basics ZWAVE如何实时控制电池供电设备
  6. XTransfer欧美本地账户可以收哪些地区的币种?
  7. 最长公共子序列 (LCS) 详解+例题模板(全)
  8. 如何完成网课公号号搭建——小白教程!内附网课题库接口
  9. 3分钟搞定高逼格PPT封底——简约型
  10. 直流无刷电机驱动器资料 功能支持模式:有霍尔和无霍尔两种