最近接了一个私活,指导学妹完成毕业设计。核心思想就是利用SVM模型来预测股票涨跌,并完成策略构建,自动化选择最优秀的股票进行资产配置。
在做这个项目的过程中,我体会到想成为一个合格的数据分析或者数据挖掘工程师不仅技术要过关,还需要了解所要挖掘数据涉及到的领域的相关知识。举个例子,在做数据预处理的时候,不知道超额收益率是怎么个意思,查阅资料才了解,超额收益率是股票行业里的一个专有名词,指大于无风险投资的收益率,在我国无风险投资收益率即是银行定期存款。
也稍微打个小广告,简书上如果有需要做毕业设计的同学可以找我私聊哦。而且如果只是简单咨询一些技术问题,学长会很热心得解答。
废话少说,言归正传。这里有关SVM、PCA等等这些与项目相关的数学知识不会提及,我以后会在算法专题里详细描述。
本项目用pycharm + anaconda3.6开发,涉及到的第三方库有pandas,numpy,matplotlib,skllearn。
流程图
Quotation Flowchart.jpg
参数设置
class Para:
method = 'SVM' #模型选择为SVM
month_in_sample = range(1, 7 + 1) #训练集数据对应月份
month_test = range(8, 12 + 1) #测试集数据对应月份
percent_select = [0.3, 0.3] #正反例股票选取比例
percent_cv = 0.1 #交互验证机占样本内数据比例
path_data = 'C:/my python/python code/stock predict/Datas/Tests/Tests/' #输入数据文件路径
path_result = 'C:/my python/python code/stock predict/Datas/Results/' #输出数据文件路径
seed = 42 #random seed设置随机种子,制造伪随机数
svm_kernel = 'linear' #支持向量机的核函数类型
svm_c = 0.01 #线性支持向量机的惩罚系数
para = Para()
这个就是参数的初始化,没有什么要说的。
数据读取以及标记
#function: label data
#3数据标记
def label_data(data):
data['return_bin'] = np.nan #在data表格最后添加一列,并命名为return_bin,这一列将记录每个样本的标签
data = data.sort_values(by = '超额收益', ascending = False) #将整个表格按照return列的值降序排列
n_stock_select = np.multiply(para.percent_select, data.shape[0]) #选取的股票个数
n_stock_select = np.around(n_stock_select).astype(int) #将上行所选取的股票个数取整,注意n_stock_select是个含有两个整数的列表
data.iloc[0:n_stock_select[0],-1] = 1
data.iloc[-n_stock_select[1]:, -1] = 0 #这两行将表现好的股票标签置1,差的置0
data &