基于Logistic回归的上市公司ROE预测
目录
前言
当数据集的响应变量(因变量)不再是连续值,而是分类型(或者叫离散型)数据时,经典线性模型(要求响应变量必须是连续型变量)则不适用了。而有一类模型,拓展了经典线性模型的应用条件,使其应用范围更加广泛,这类模型就是:广义线性模型。
广义线性模型要求响应变量服从指数族分布(常见的正态分布、泊松分布、伯努利分布、伽马分布等等都属于这种分布),并通过一个非线性连接函数将响应变量与自变量的线性组合连接起来。常见的广义线性模型如:泊松回归模型、Logistic回归模型、Probit回归模型等等。
当响应变量为二分类变量时,首先会想到大名鼎鼎的Logistic回归模型了!因此本文将通过一个案例介绍Logistic回归模型的应用!
同时,本文案例数据存在样本比例不平衡问题,将介绍两个常见的解决办法。
基于Logistic回归的上市公司ROE预测
ROE,英文全称为Return on Equity,净资产收益率,是企业净利润与净资产的比值,可以较好地反映企业盈利能力。股神巴菲特曾经说过“如果非要我用一个指标进行选股,我会选择ROE,那些ROE能常年持续稳定在20%以上的公司都是好公司,投资者应当考虑买入”。
毕竟ROE能够保持在20%以上的公司只有少数!
本文案例目的是根据上市公司当年的财务数据预测下一年的ROE能否大于10%(响应变量,数值为0和1)。
数据指标如下:
- 下一年净资产收益率>=10%(01变量,1表示大于等于10%,0表示小于10%)
- 当年净资产收益率
- 资产周转率
- 利润率
- 债务资本比率
- 成长速度(%)
- 市倍率
- 收入质量
- 资产规模
- 存货率
具体指标含义这里不详细展开。
(本文数据来源于网络)
导入相关库
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
读取并查看数据基本情况
data = pd.read_csv('ROE_predict.csv',encoding = 'gbk')#数据表涉及中文字符需设置支持中文字符
data.head()
输出:
#查看数据维度
data.shape
输出:
(2432, 10)
以上输出可以看出数据共10个指标、2432条记录。
data.info()
输出:
数据不存在缺失值。
划分自变量与因变量
y = data.iloc[:,0]
x = data.iloc[:,1:]
#查看样本比例
y.sum()
输出:
158
根据结果可以看出:
- 因变量y中正例数量只有158,负例数量为2432-158 = 2274,样本比例严重不平衡;
- 后续建模时需要对样本不均衡问题进行处理,以免影响模型的预测结果。
查看数据相关性
在使用logistic回归模型时,需要对数据进行多重共线性检验。
- 多重共线性是指回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。
- 一般可以通过计算各指标的方差膨胀因子(VIF)进行检验。本文直接查看自变量之间是否存在高度相关关系进行判断。
计算相关矩阵
corr = data.corr(method = 'pearson')
绘制相关性热力图
plt.subplots(figsize=(8,8)) #设置画面大小
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题-设置字体为黑体
# plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
sns.heatmap(corr,annot=True,vmax=1,square=True,cmap="Reds")
plt.title('相关性热力图')
plt.show