我们接上文,先用LR预测一下某只股票的涨跌,看看效果怎样。
上文链接:
昂刺鱼:用python做股票数据分析(兴趣篇)zhuanlan.zhihu.com
首先我们还是导入需要的库,并载入某只股票的交易数据。
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split #分割训练集和测试集
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
df_ori=pd.read_csv('./stock_data/000001.csv') #载入原始数据
接着,我们还是用上文中的函数生成一些移动平均数:
def make_ma(i,j,df,price='close'):
df_out=pd.DataFrame()
for _ in range(i,j+1):
df_out['ma_'+str(_)]=df_ori[price].rolling(_).mean()
df_out['res']=np.where(df_ori['change']>0,1,0)
return df_out
df_done=make_ma(3,200,df_ori) # 生成3日到200日的移动平均线作为训练特征
df_done=df_done[1000:] # 考虑到上市之初易出异常数据,故丢弃股票上市前1000个交易日的数据,上市之初的行为我们后面有机会再分析
好了,现在df_done就是我们处理好的数据,然后我们再用train_test_split函数,将df_done分成train_x,test_x,train_y,test_y四个部分,其中测试集占比0.3
col=df_done.columns[0:-1]
train_x,test_x,train_y,test_y=train_test_split(df_done[col],df_done['res'],test_size=0.3)
最后我们使用sklearn提供的LR模型进行预测打分。
lr=LogisticRegression(solver='liblinear')
lr.fit(train_x,train_y)
predict=lr.predict(test_x)
print(lr.score(test_x,test_y))
LogisticRegression模型的参数网上到处都说,不一一列举。
结果显示,分数接近于0.55-0.6,也就是有接近60%的胜率,对金融预测来说,这已经是非常令人兴奋的事情了,何况这仅仅只是一个最最粗糙的单一模型而已。事实是不是真的如此呢,有没有哪里是有问题的?我们下回分解。
下一篇,我们还会用svm来预测同样的数据,并比较两者的区别和联系,为后面优化我们的模型提供一些依据。
获取所有A股股票日线数据,关注公_众_号,回复‘stockdata‘即可。