机器学习--基于主成分分析(PCA)的优质股票推荐

文章介绍了如何利用PCA(主成分分析)从大量的股票中挑选优质股。PCA用于处理数据的相关性,通过转换生成无关联的新特征,保留主要信息。文章提供了获取股票数据的Python代码,涉及Tushare库,以及数据预处理和集成步骤。通过PCA计算综合得分,对股票进行排名,以辅助投资决策。
摘要由CSDN通过智能技术生成

一、背景

     在证券市场股票很多,就比如在我们国内某证券市场就有三千多只股票,那如何作为一个新手,我们如何从这三千多只股票中选出几只优质股票进行投资呢?如果我们一个一个的去了解每只股票对应公司的资产,营收情况等情况显然很费事,并且不容易综合比较出优质股。那么这时就计算机帮忙,帮我们选出优质股票。具体怎么帮呢?这就涉及到了我们今天要说的内容PCA优质股票推荐

二、主成分分析PCA原理

    主成分分析PCA本质是用来选取主要成分的,即主要特征的。并不是用来做优质股票选取的。那我们如何就使用PCA来完成优质股票推荐呢?

1.PCA作用

我们拿到一堆预先处理好的数据(即做过空值填充,分布不平衡处理等)后,首先取其中与我们特定任务有关的一部分字段(即部分数据,如:X1,X2,X3,X4),这些数据之间可能存在着相关性,即数据之间存在着内部联系。 那么这些字段我们是不能直接拿来用的,要先去掉他们的相关性。那如何去掉这些相关性呢?常见的一种手段就是PCA

     PCA的思路是保持特征尽量不变(主体成分,这里一般指方差)的情况下,用一些不存在相关性的字段(Y1,Y2,Y3)代替原来的字段(X1,X2,X3,X4)。其中Y1,Y2,Y3保留的特征(即方差)依次从大到小。在大多数情况下,原来可能一百多个字段X,PCA分析后,只需要几个字段Y就能保留原来大部分的特征。

      那怎么就能使用PCA来做排名呢?比如收入有很多因素构成,原来用X1,X2,X3,X4,因素之间存在着相关性,我们现在用Y1,Y2,Y3来表达。那现在看哪个城市人的收入高,把每个城市对应的Y1,Y2,Y3值加起来就可以表示该城市的收入情况了,但前面我们又说过他们三字段保留的特征多少不一样,Y1更重要些,所以我们不能直接让他三相加,而是把他三乘以PCA得到的他三权重值再求和,这样就可以表达每个城市的收入情况了,从而进行排名。

三、数据获取

     我们这里从Tushare金融大数据社区获取数据。这里的数据我们不能直接离线下载。需要使用代码去获取(前提我们要在该网站注册了,有一定的积分)。

我们首先去Tushare网站注册并完善资料,就有了120积分,就可以有权限下载数据了

其次,我们在python开发环境中安装对应的Tushare库,即pip install  tushare

接下来我们就可以写代码去获取数据了(获取每个公司的营收,资产和财务的部分字段)

import tushare as ts
import pandas as pd
#tushare API 初始化
#you token就是我们在tushare注册后,tushare给我们的一个下载币,登陆网站找到自己的下载币名字
ts.set_token('you token')
#构造一个实例对象,去获取社区中的数据
pro = ts.pro_api()
#股票基本信息获取,并保持为Excel文件  fields就是指定需要哪些字段
stkcode = pro.stock_basic(exchange='', list_status='L', 
                          fields='ts_code,symbol,name,area,industry')
stkcode.to_excel('stkcode.xlsx')
#从利润表中获取营业收入、营业利润、利润总额、净利润指标数据
income= pro.income_vip(period='20221231',
        fields='ts_code,revenue,operate_profit,total_profit,n_income_attr_p')

income=income.drop_duplicates(subset=['ts_code'])
#从资产负债表中获取资产总计、固定资产指标数据
balance = pro.balancesheet_vip(period='20221231',
                               fields='ts_code,total_assets,fix_assets')
balance=balance.drop_duplicates(subset=['ts_code'])
#从财务指标表中获取净资产收益率、每股净资产、每股资本公积、每股收益指标数据
indicator=pro.fina_indicator_vip(period='20221231',
                                 fields='ts_code,roe,bps,capital_rese_ps,eps')
indicator=indicator.drop_duplicates(subset=['ts_code'])
#数据集成,以代码为键,内连接,并把集成后的数据导出Excel
tempdata=pd.merge(income,balance,how='inner',on='ts_code')
Data=pd.merge(tempdata,indicator,how='inner',on='ts_code')
Data.to_excel('Data.xlsx')

有了这些字段以后,我们就可以使用PCA来完成优质股票的推荐了

#读取数据,其中第0列为标识列(股票代码)
import pandas as pd
data=pd.read_excel('Data.xlsx')
#筛选指标值大于0的数据以及去掉nan值
data=data[data>0]
data=data.dropna()
#数据标准化,注意标准化的数据需要去掉第0列(股票代码,标识列),这里数据标准化方法采用均值-方差法,
from sklearn.preprocessing import StandardScaler  
X=data.iloc[:,1:]
scaler = StandardScaler()
scaler.fit(X) 
X=scaler.transform(X)  
#对标准化之后的指标数据X做主成分分析,提取其主成分,要求累计贡献率在95%以上
from sklearn.decomposition import PCA  
pca=PCA(n_components=0.95)           #累计贡献率为95%
Y=pca.fit_transform(X)                #满足累计贡献率为95%的主成分数据
gxl=pca.explained_variance_ratio_   #贡献率
#综合得分等于提取的各个主成分与其贡献率的加权求和
import numpy as np
F=np.zeros((len(Y)))       #预定义综合得分数组F
for i in range(len(gxl)):
    f=Y[:,i]*gxl[i]         #第i个主成分与第i个主成分贡献率的乘积
    F=F+f                     #数组累积求和
fs1=pd.Series(F,index=data['ts_code'].values) #构建序列,值为综合得分F,index为股票代码
Fscore1=fs1.sort_values(ascending=False)   #结果排名,降序

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘同敏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值