请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化平台 帖子:3364736 新帖:0

基本面量化研究--钢铁行业景气度预测--修改版

Peace发表于:5 月 10 日 07:48回复(1)

本文内容

前几天在社区看到了这篇基本面量化研究:【量化课堂】基本面量化研究--钢铁行业景气度预测,在仔细研读完代码之后觉得有些地方还可以进行优化,所以就自作主张写了这篇文章,希望可以帮助到大家。感谢聚宽~

最终的复现结果分析大致与研报相同,但是对于某些指标的分析结论稍有不同,详见代码说明。

说明

本文基于【量化课堂】基本面量化研究--钢铁行业景气度预测进行修改,详细的说明位于代码注释中,可以直接clone到自己的研究中直接运行。如果有不合理的地方还请大家多多包涵,欢迎讨论!

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime 
import statsmodels.api as sm
import warnings
warnings.filterwarnings("ignore")

数据的导入¶

steel_fd_data = pd.read_excel('钢铁基本面数据.xls',index_col=0)
steel_fd_data.columns.tolist()
['表观消费量:钢材:当月值',
 'M2:同比',
 '房屋新开工面积:累计值',
 '房屋新开工面积:累计同比',
 '房屋竣工面积:累计值',
 '房屋竣工面积:累计同比',
 '固定资产投资完成额:累计值',
 '固定资产投资完成额:累计同比',
 '商品房销售面积:累计值',
 '商品房销售面积:累计同比',
 '固定资产投资完成额:基础设施建设投资:累计值',
 '固定资产投资完成额:基础设施建设投资:累计同比',
 '房地产开发投资完成额:累计值',
 '房地产开发投资完成额:累计同比',
 '产量:汽车:当月值',
 '产量:汽车:当月同比',
 '钢材价格综合指数',
 '钢铁行业:大中型企业:销售收入:累计值',
 '钢铁行业:大中型企业:利润总额:累计值']
###由于数据是wind直接下来的,所以不太干净,先预处理一下、去掉一些注释行
steel_fd_data = steel_fd_data[1:-2]
##数据钢材表观消费量为主,截断此数据开始之前的日期,此数据从2004年1月开始
steel_fd_data = steel_fd_data[steel_fd_data.index>=datetime.datetime(2004,1,1)]

将当年累计值转化为当月值,并计算TTM环比增速¶

# 例如这个房屋新开工面积就是一个当年累计值
steel_fd_data['房屋新开工面积:累计值'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f69922b93c8>
# 这些字段的数据需要调整为当月值
need_adjust_columns = ['房屋新开工面积:累计值','房屋竣工面积:累计值','商品房销售面积:累计值','固定资产投资完成额:累计值',
                       '固定资产投资完成额:基础设施建设投资:累计值','房地产开发投资完成额:累计值']

steel_fd_data['month'] = steel_fd_data.index.map(lambda x:x.month)
# 这些列都是一月份缺失数据的
# 填充规则,将二月份的数据平分给一月份
for column in need_adjust_columns:
    if column != '固定资产投资完成额:基础设施建设投资:累计值': 
        steel_fd_data[column.split(':')[0]] = steel_fd_data[column] - steel_fd_data[column].shift(1)
        steel_fd_data.ix[steel_fd_data['month']<=2,column.split(':')[0]] = steel_fd_data[steel_fd_data['month']<=2][column].fillna(method='backfill')/2
    else:# 这个名称分为了三段
        steel_fd_data[column.split(':')[1]] = steel_fd_data[column] - steel_fd_data[column].shift(1)
        steel_fd_data.ix[steel_fd_data['month']<=2,column.split(':')[1]] = steel_fd_data[steel_fd_data['month']<=2][column].fillna(method='backfill')/2
# 将累计值转化为当月值结果对比
steel_fd_data[['房屋新开工面积:累计值','房屋新开工面积']].head(20)
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
房屋新开工面积:累计值 房屋新开工面积
指标名称
2004-01-31 00:00:00 NaN 3713.72
2004-02-29 00:00:00 7427.45 3713.72
2004-03-31 00:00:00 12899.5 5472.09
2004-04-30 00:00:00 17412.1 4512.52
2004-05-31 00:00:00 22495.8 5083.75
2004-06-30 00:00:00 28036.7 5540.93
2004-07-31 00:00:00 32763 4726.26
2004-08-31 00:00:00 36900.2 4137.19
2004-09-30 00:00:00 41070.3 4170.1
2004-10-31 00:00:00 44987.7 3917.37
2004-11-30 00:00:00 49015.6 4027.97
2004-12-31 00:00:00 60413.9 11398.2
2005-01-31 00:00:00 NaN 3749.05
2005-02-28 00:00:00 7498.1 3749.05
2005-03-31 00:00:00 14096.6 6598.5
2005-04-30 00:00:00 19570.9 5474.33
2005-05-31 00:00:00 25066 5495.12
2005-06-30 00:00:00 31175.2 6109.2
2005-07-31 00:00:00 37128.2 5952.96
2005-08-31 00:00:00 41714.9 4586.69
# 发现每年的年末都有有一波高峰,周期性很明显
steel_fd_data['房屋新开工面积'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f69922493c8>
steel_fd_data.columns.tolist()
['表观消费量:钢材:当月值',
 'M2:同比',
 '房屋新开工面积:累计值',
 '房屋新开工面积:累计同比',
 '房屋竣工面积:累计值',
 '房屋竣工面积:累计同比',
 '固定资产投资完成额:累计值',
 '固定资产投资完成额:累计同比',
 '商品房销售面积:累计值',
 '商品房销售面积:累计同比',
 '固定资产投资完成额:基础设施建设投资:累计值',
 '固定资产投资完成额:基础设施建设投资:累计同比',
 '房地产开发投资完成额:累计值',
 '房地产开发投资完成额:累计同比',
 '产量:汽车:当月值',
 '产量:汽车:当月同比',
 '钢材价格综合指数',
 '钢铁行业:大中型企业:销售收入:累计值',
 '钢铁行业:大中型企业:利润总额:累计值',
 'month',
 '房屋新开工面积',
 '房屋竣工面积',
 '商品房销售面积',
 '固定资产投资完成额',
 '基础设施建设投资',
 '房地产开发投资完成额']
#取出接下来需要用的主要数据
data_columns_list = steel_fd_data.columns.tolist()
clean_data = steel_fd_data[data_columns_list[:2]+data_columns_list[-6:]+['产量:汽车:当月值']]
#去除第一行
clean_data = clean_data[1:]

对数据进行滚动TTM处理,并取其环比值¶

# 查看有无缺失值
np.sum(clean_data.isnull())
表观消费量:钢材:当月值    4
M2:同比           0
房屋新开工面积         0
房屋竣工面积          0
商品房销售面积         0
固定资产投资完成额       0
基础设施建设投资        0
房地产开发投资完成额      0
产量:汽车:当月值       8
dtype: int64
# 对于缺失数据,使用线性插值法进行填充
# 因为插值需要保证数据是数值类型的,所以第一步是检查数据格式
clean_data.dtypes
表观消费量:钢材:当月值    object
M2:同比           object
房屋新开工面积         object
房屋竣工面积          object
商品房销售面积         object
固定资产投资完成额       object
基础设施建设投资        object
房地产开发投资完成额      object
产量:汽车:当月值       object
dtype: object
# 转换成数值类型,然后进行线性插值
clean_data = clean_data.apply(pd.to_numeric, errors='ignore').interpolate()
# 再次检查是否填充完毕
np.sum(clean_data.isnull())
表观消费量:钢材:当月值    0
M2:同比           0
房屋新开工面积         0
房屋竣工面积          0
商品房销售面积         0
固定资产投资完成额       0
基础设施建设投资        0
房地产开发投资完成额      0
产量:汽车:当月值       0
dtype: int64
clean_data.columns.tolist()
['表观消费量:钢材:当月值',
 'M2:同比',
 '房屋新开工面积',
 '房屋竣工面积',
 '商品房销售面积',
 '固定资产投资完成额',
 '基础设施建设投资',
 '房地产开发投资完成额',
 '产量:汽车:当月值']
# 将其中几个字段名称进行修改
clean_data.rename(columns={'表观消费量:钢材:当月值':'钢铁消费量', '产量:汽车:当月值':'汽车产量'}, inplace=True)
# 计算TTM环比
TTM_columns = ['钢铁消费量','房屋新开工面积','房屋竣工面积','商品房销售面积','固定资产投资完成额',
               '基础设施建设投资','房地产开发投资完成额','汽车产量']
for column in TTM_columns:
    clean_data[column+'TTM'] = pd.rolling_sum(clean_data[column],12)
    clean_data[column+'TTM_环比'] = clean_data[column+'TTM']/clean_data[column+'TTM'].shift(1)-1
clean_data['钢铁消费量TTM_环比'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f69809a4f98>
clean_data.dropna(inplace=True)
clean_data['钢铁消费量TTM_环比'].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7f698097a5c0>
use_columns = [i+'TTM_环比' for i in TTM_columns]+['M2:同比']
use_data = clean_data[use_columns]
use_data.rename(columns={'M2:同比':'M2'}, inplace=True)
use_data.head()
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
钢铁消费量TTM_环比 房屋新开工面积TTM_环比 房屋竣工面积TTM_环比 商品房销售面积TTM_环比 固定资产投资完成额TTM_环比 基础设施建设投资TTM_环比 房地产开发投资完成额TTM_环比 汽车产量TTM_环比 M2
指标名称
2005-02-28 -0.000472 0.000584 0.004978 0.004880 0.007856 0.009637 0.009591 -0.014028 13.90
2005-03-31 0.013396 0.018623 0.001301 0.013639 0.017402 0.015259 0.018514 0.002215 14.00
2005-04-30 0.014007 0.015611 0.004857 0.002352 0.016376 0.015913 0.015805 0.011738 14.10
2005-05-31 0.022261 0.006574 0.007454 0.004619 0.021045 0.017042 0.015986 0.008005 14.60
2005-06-30 0.017512 0.009022 0.012890 0.008926 0.029078 0.023981 0.023294 0.018741 15.67

钢铁基本面数据之间的关系以及领先与滞后¶

def plot_line_chart(x_axis,y1_axis,y2_axis,label1,label2):
    Fig = plt.figure(figsize=(10,8))
    Ax = Fig.add_subplot(111)
    lines = Ax.plot(x_axis,y1_axis,'r-',x_axis,y2_axis,'b-')
    lines[0].set_label(label1)
    lines[1].set_label(label2)
    Ax.legend(loc = 0)

def plot_line_chart_double_yaxis(x_axis,y1_axis,y2_axis,label1,label2):
    
    Fig = plt.figure(figsize=(10,8))
    Ax = Fig.add_subplot(111)
    Ax.plot(x_axis,y1_axis,'r-')
    Ax.set_ylabel(label1)
    
    Ax_ = Ax.twinx()
    Ax_.plot(x_axis,y2_axis,'b-')
    Ax_.set_ylabel(label2)
    
def calculate_lag(data,column1,column2):
    
    regre_results=[]
    for i in range(-5,6):
        reg_data = pd.concat([data[column1],data[column2].shift(i)],axis =1)
        reg_data.dropna(inplace=True)
        x=reg_data[column1]
        y=reg_data[column2]
        x=sm.add_constant(x)   
        est=sm.OLS(y,x)
        results=est.fit()
        r2 = results.rsquared 
        coef = results.params[1]
        p = results.pvalues[1]
        corr = reg_data[column1].corr(reg_data[column2])
        
        regre_results.append([i,corr,coef,p,r2])
        
    regre_df = pd.DataFrame(regre_results,columns=['领先期','相关系数','回归系数','P值','R方'])
    
    return regre_df
use_data.columns.tolist()
['钢铁消费量TTM_环比',
 '房屋新开工面积TTM_环比',
 '房屋竣工面积TTM_环比',
 '商品房销售面积TTM_环比',
 '固定资产投资完成额TTM_环比',
 '基础设施建设投资TTM_环比',
 '房地产开发投资完成额TTM_环比',
 '汽车产量TTM_环比',
 'M2']

房屋新开工面积TTM_环比与钢铁消费量TTM_环比¶

表格结果分析:
房屋新开工面积TTM_环比 是 滞后指标,滞后期为1-4个月

plot_line_chart(use_data.index,use_data['房屋新开工面积TTM_环比'],use_data['钢铁消费量TTM_环比'],'房屋新开工面积TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'房屋新开工面积TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.126047 0.055103 1.268809e-01 0.015888
1 -4 0.141348 0.062033 8.552678e-02 0.019979
2 -3 0.173413 0.076744 3.382052e-02 0.030072
3 -2 0.332663 0.147447 3.001462e-05 0.110665
4 -1 0.390191 0.173109 6.719274e-07 0.152249
5 0 0.485121 0.215750 2.083811e-10 0.235342
6 1 0.503813 0.222825 3.679643e-11 0.253828
7 2 0.523003 0.230715 5.615558e-12 0.273532
8 3 0.501635 0.220896 6.190644e-11 0.251638
9 4 0.513514 0.225888 2.127479e-11 0.263697
10 5 0.495942 0.217580 1.461706e-10 0.245959

房屋竣工面积TTM_环比与钢铁消费量TTM_环比¶

表格分析结果:
房屋竣工面积TTM_环比 与 钢铁消费量TTM_环比 相关性不大

plot_line_chart_double_yaxis(use_data.index,use_data['房屋竣工面积TTM_环比'],use_data['钢铁消费量TTM_环比'],'房屋竣工面积TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'房屋竣工面积TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.203270 0.102262 0.013218 0.041319
1 -4 0.230686 0.116520 0.004648 0.053216
2 -3 0.176435 0.089753 0.030790 0.031129
3 -2 0.145939 0.074360 0.073773 0.021298
4 -1 0.122498 0.062285 0.132720 0.015006
5 0 0.173254 0.088336 0.032219 0.030017
6 1 0.082710 0.041921 0.311042 0.006841
7 2 0.082575 0.041706 0.313460 0.006819
8 3 0.090130 0.045411 0.272701 0.008123
9 4 0.094849 0.047739 0.249887 0.008996
10 5 0.115257 0.057887 0.163039 0.013284

商品房销售面积TTM_环比与钢铁消费量TTM_环比¶

表格结果分析:
商品房销售面积TTM_环比 是 同步指标,无明显超前滞后期

plot_line_chart_double_yaxis(use_data.index,use_data['商品房销售面积TTM_环比'],use_data['钢铁消费量TTM_环比'],'商品房销售面积TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'商品房销售面积TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.246995 0.063440 2.475042e-03 0.061006
1 -4 0.274957 0.070905 6.896373e-04 0.075601
2 -3 0.321229 0.083616 6.121392e-05 0.103188
3 -2 0.356137 0.092837 7.190734e-06 0.126834
4 -1 0.372290 0.097128 2.324996e-06 0.138600
5 0 0.405141 0.105988 2.050294e-07 0.164139
6 1 0.327268 0.085116 3.864367e-05 0.107105
7 2 0.232753 0.060307 4.028086e-03 0.054174
8 3 0.212670 0.054979 8.979286e-03 0.045229
9 4 0.090489 0.023371 2.724178e-01 0.008188
10 5 0.045774 0.011790 5.806520e-01 0.002095

固定资产投资完成额TTM_环比与钢铁消费量TTM_环比¶

表格分析结果:
固定资产投资完成额TTM_环比 是 同步指标,无明显超前滞后期

plot_line_chart_double_yaxis(use_data.index,use_data['固定资产投资完成额TTM_环比'],use_data['钢铁消费量TTM_环比'],'固定资产投资完成额TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'固定资产投资完成额TTM_环比','钢铁消费量TTM_环比')
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.386332 0.415637 1.236304e-06 0.149253
1 -4 0.384985 0.415229 1.247428e-06 0.148213
2 -3 0.396616 0.429392 5.046680e-07 0.157304
3 -2 0.426959 0.459096 4.577798e-08 0.182294
4 -1 0.442755 0.474280 1.119161e-08 0.196032
5 0 0.465429 0.496001 1.345593e-09 0.216624
6 1 0.432713 0.459870 2.585176e-08 0.187241
7 2 0.402603 0.426317 2.979895e-07 0.162089
8 3 0.359957 0.380237 6.060424e-06 0.129569
9 4 0.301622 0.318786 1.853434e-04 0.090976
10 5 0.280497 0.298619 5.542898e-04 0.078679

基础设施建设投资TTM_环比与钢铁消费量TTM_环比¶

表格分析结果:
基础设施建设投资TTM_环比 是 超前指标,超前期为4-5个月

plot_line_chart_double_yaxis(use_data.index,use_data['基础设施建设投资TTM_环比'],use_data['钢铁消费量TTM_环比'],'基础设施建设投资TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'基础设施建设投资TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.402876 0.360659 3.845358e-07 0.162309
1 -4 0.374372 0.336316 2.557383e-06 0.140154
2 -3 0.358128 0.324786 6.807534e-06 0.128255
3 -2 0.349846 0.317461 1.066601e-05 0.122392
4 -1 0.337364 0.306527 2.135338e-05 0.113814
5 0 0.297842 0.271317 1.846651e-04 0.088710
6 1 0.242294 0.219652 2.634230e-03 0.058706
7 2 0.183528 0.165746 2.409053e-02 0.033682
8 3 0.128403 0.115681 1.173620e-01 0.016487
9 4 0.082257 0.074041 3.186160e-01 0.006766
10 5 0.009047 0.008148 9.130961e-01 0.000082

房地产开发投资完成额TTM_环比与钢铁消费量TTM_环比¶

表格结果分析:
房地产开发投资完成额TTM_环比 是 滞后指标,滞后期为0-3个月

plot_line_chart_double_yaxis(use_data.index,use_data['房地产开发投资完成额TTM_环比'],use_data['钢铁消费量TTM_环比'],'房地产开发投资完成额TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'房地产开发投资完成额TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.124772 0.115537 1.307995e-01 0.015568
1 -4 0.163873 0.152242 4.582558e-02 0.026854
2 -3 0.218811 0.204373 7.142375e-03 0.047878
3 -2 0.331466 0.309397 3.218582e-05 0.109870
4 -1 0.383876 0.358370 1.049948e-06 0.147361
5 0 0.470661 0.439436 8.292250e-10 0.221522
6 1 0.478121 0.444093 4.682444e-10 0.228599
7 2 0.483024 0.447330 3.355396e-10 0.233312
8 3 0.482676 0.445978 3.973843e-10 0.232976
9 4 0.462805 0.427243 2.805053e-09 0.214188
10 5 0.488993 0.451863 2.865088e-10 0.239115

汽车产量TTM_环比与钢铁消费量TTM_环比¶

表格结果分析:
汽车产量TTM_环比 是 同步指标,略微有些落后,并且相关性很高

plot_line_chart_double_yaxis(use_data.index,use_data['汽车产量TTM_环比'],use_data['钢铁消费量TTM_环比'],'汽车产量TTM_环比','钢铁消费量TTM_环比')
calculate_lag(use_data,'汽车产量TTM_环比','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.282429 0.164877 5.054564e-04 0.079766
1 -4 0.407012 0.238445 2.588688e-07 0.165659
2 -3 0.478268 0.282551 6.025241e-10 0.228740
3 -2 0.594436 0.351324 8.512394e-16 0.353354
4 -1 0.642506 0.380220 4.565764e-19 0.412814
5 0 0.741318 0.440027 6.160130e-28 0.549552
6 1 0.708591 0.422751 1.760315e-24 0.502101
7 2 0.713119 0.424498 9.434435e-25 0.508538
8 3 0.642257 0.381379 8.151257e-19 0.412494
9 4 0.549699 0.326155 3.860028e-13 0.302169
10 5 0.471175 0.279036 1.504345e-09 0.222006

M2与钢铁消费量TTM_环比¶

表格结果分析:
M2同比 是 超前指标,超前期为0-2个月

plot_line_chart_double_yaxis(use_data.index,use_data['M2'],use_data['钢铁消费量TTM_环比'],'M2','钢铁消费量TTM_环比')
calculate_lag(use_data,'M2','钢铁消费量TTM_环比') 
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
领先期 相关系数 回归系数 P值 R方
0 -5 0.608843 0.001176 2.222386e-16 0.370689
1 -4 0.660688 0.001271 4.831039e-20 0.436509
2 -3 0.686992 0.001323 2.840658e-22 0.471958
3 -2 0.712457 0.001363 1.089249e-24 0.507595
4 -1 0.720944 0.001370 1.153564e-25 0.519760
5 0 0.721544 0.001364 6.947252e-26 0.520626
6 1 0.700000 0.001316 1.078811e-23 0.489999
7 2 0.654241 0.001226 8.305599e-20 0.428031
8 3 0.593654 0.001111 1.182569e-15 0.352425
9 4 0.523507 0.000979 7.369345e-12 0.274060
10 5 0.435921 0.000813 3.063614e-08 0.190027

总结¶

经过前面的一番检验:

0.房屋竣工面积TTM_环比 相关性不高

1.房屋新开工面积TTM_环比、房地产开发投资完成额TTM_环比都是钢材表观消费量的滞后指标

2.商品房销售面积TTM_环比、固定资产投资完成额TTM_环比、汽车产量TTM_环比与钢材表观消费量基本同步

3.基础设施建设投资TTM_环比、M2为领先指标,领先期分别为4-5个月,0-2个月

因此,对于钢铁表观消费量的预测,可以使用基础设施建设投资TTM_环比、M2指标

use_data.columns.tolist()
['钢铁消费量TTM_环比',
 '房屋新开工面积TTM_环比',
 '房屋竣工面积TTM_环比',
 '商品房销售面积TTM_环比',
 '固定资产投资完成额TTM_环比',
 '基础设施建设投资TTM_环比',
 '房地产开发投资完成额TTM_环比',
 '汽车产量TTM_环比',
 'M2']

钢材表观消费量TTM环比 预测¶

###以前一年数据作为样本进行滚动回归,得到回归系数,以此系数预测下一个月钢材表观消费量TTM环比增速
###基础设施建设投资、M2的领先期分别选为4个月、1个月
testdata = use_data[['钢铁消费量TTM_环比','基础设施建设投资TTM_环比','M2']]
def predict_TTM_growth(testdata,y_var,x_var,x_lag,regre_period = 12):
    
    x_var_lag = []
    for x,lag in zip(x_var,x_lag):
        testdata[x+'_lag'+str(lag)] = testdata[x].shift(lag)
        x_var_lag.append(x+'_lag'+str(lag))
    use_testdata = testdata[[y_var] + x_var_lag]
    use_testdata.dropna(inplace=True) 
    use_testdata[y_var+'_预测'] = np.NaN
    
    corr_chart = use_testdata[x_var_lag].corr()
    print (corr_chart)
    for i in range(regre_period,len(use_testdata)):
    
        train_data = use_testdata[i-regre_period:i]
        y = train_data[y_var]
        x = train_data[x_var_lag]
        x = sm.add_constant(x)
        est = sm.OLS(y,x)
        results = est.fit()
    
        predict_data = use_testdata[i:i+1]
        predict_x = predict_data[x_var_lag]
        predict_x = sm.add_constant(predict_x, has_constant='add')
        use_testdata.iloc[i, -1] = results.predict(predict_x).values[0]
    
    return use_testdata
predict_data = predict_TTM_growth(testdata,'钢铁消费量TTM_环比',['基础设施建设投资TTM_环比','M2'],[4,1])
                     基础设施建设投资TTM_环比_lag4   M2_lag1
基础设施建设投资TTM_环比_lag4             1.000000  0.525639
M2_lag1                         0.525639  1.000000
predict_data.head()
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
钢铁消费量TTM_环比 基础设施建设投资TTM_环比_lag4 M2_lag1 钢铁消费量TTM_环比_预测
指标名称
2005-06-30 0.017512 0.009637 14.60 NaN
2005-07-31 0.020197 0.015259 15.67 NaN
2005-08-31 0.022381 0.015913 16.30 NaN
2005-09-30 0.018619 0.017042 17.34 NaN
2005-10-31 0.019170 0.023981 17.92 NaN
predict_data.tail()
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
钢铁消费量TTM_环比 基础设施建设投资TTM_环比_lag4 M2_lag1 钢铁消费量TTM_环比_预测
指标名称
2017-06-30 0.000906 0.005905 9.6 0.000080
2017-07-31 0.003643 0.012569 9.4 0.002650
2017-08-31 0.001135 0.012859 9.2 0.003357
2017-09-30 -0.000705 0.011618 8.9 0.001858
2017-10-31 -0.003060 0.019808 9.2 0.002830
predict_data.dropna(inplace=True)
plot_line_chart(predict_data.index,predict_data['钢铁消费量TTM_环比'],predict_data['钢铁消费量TTM_环比_预测'],'钢材消费量TTM环比','钢材消费量TTM环比预测')

全部回复

0/140

量化课程

    移动端课程