Python数据分析案例22——财经新闻可信度分析(线性回归,主成分回归,随机森林回归)

article/2025/5/11 6:17:48

 本次案例还是适合人文社科领域,金融或者新闻专业。本科生做线性回归和主成分回归就够了,研究生还可以加随机森林回归,其方法足够人文社科领域的硕士毕业论文了。


案例背景

有八个自变量,['微博平台可信度','专业性','可信赖性','转发量','微博内容质量','时效性','验证程度','人际信任']   ,一个因变量: 投资信息可信度。

研究这八个自变量对因变量的影响。


数据读取

导入包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.preprocessing import StandardScaler
import statsmodels.formula.api as smf
plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False               #显示负号
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})

读取,我数据格式这里是spss 的sav格式,但是python也能读取。

# 读取数据清洗后的数据
spss = pd.read_spss('数据2.sav')
#spss

选取需要的变量,展示前五行

data=spss[['微博平台可信','专业性','可信赖性','转发量','微博内容质量','时效性','验证程度','人际信任','投资信息可信度']]
data.head()

取出列名称

columns1=data.columns

描述性统计,算一下均值方差分位数等等

data.describe()  #描述性统计

我这数据量并不多.... 

取出X和y

X=data.iloc[:,:-1]
y=data.iloc[:,-1]

 


画图展示

对八个自变量和一个因变量画箱线图 

column = data.columns.tolist() # 列表头
fig = plt.figure(figsize=(10,10), dpi=128)  # 指定绘图对象宽度和高度
for i in range(9):plt.subplot(3,3, i + 1)  # 2行3列子图sns.boxplot(data=data[column[i]], orient="v",width=0.5)  # 箱式图plt.ylabel(column[i], fontsize=16)
plt.tight_layout()
plt.show()

 

画核密度图

column = data.columns.tolist() # 列表头
fig = plt.figure(figsize=(10,10), dpi=128)  # 指定绘图对象宽度和高度
for i in range(9):plt.subplot(3,3, i + 1)  # 2行3列子图sns.kdeplot(data=data[column[i]],color='blue',shade= True)  plt.ylabel(column[i], fontsize=16)
plt.tight_layout()
plt.show()

 变量两两之间的散点图

sns.pairplot(data[column],diag_kind='kde')
#plt.savefig('散点图.jpg',dpi=256)

 变量之间的相关系数热力图

#画皮尔逊相关系数热力图
corr = plt.subplots(figsize = (14,14))
corr= sns.heatmap(data[column].corr(),annot=True,square=True)

 可以看到很多x之间的相关系数都挺高的,线性回归模型应该存在严重的多重共线性。


线性回归分析

导入包

import statsmodels.formula.api as smf

打印回归方程

all_columns = "+".join(data.columns[:-1])
print('x是:'+all_columns)
formula = '投资信息可信度~' + all_columns
print('回归方程为:'+formula)

拟合模型 

results = smf.ols(formula, data=data).fit()
results.summary()

 

 可以看到拟合优度还挺高,84%。再看每个变量的p值,0.05的显著性水平下,几乎都不显著.....

应该是多重共线性导致的。

还可以这样查看回归结果:

print(results.summary().tables[1])

系数p值什么的和上面一样。

对数回归 

在计量经济学里面有一种常用的手段就是将数据去对数,这样可以减小异方差等影响。我们来试试,取了对数再回归:

data_log=pd.DataFrame(columns=columns1)
for i in columns1:data_log[i]=data[i].apply(np.log)

拟合

results_log = smf.ols(formula, data=data_log).fit()
results_log.summary()

 也好不到哪去....只有时效性的p值小于0.05,是显著的,别的都不显著。

接下来使用主成分回归


主成分回归

主成分回归会压缩你的变量,弄出几个新的变量,这样变量之间的多重共线性就能处理掉了。

新的变量就是老变量的线性组合,但是不好解释,失去了经济或者新闻上的实际意义。

导包

from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import LeaveOneOut
from mpl_toolkits import mplot3d

想找一下几个主成分回归,要用几个主成分会好一些:

model = PCA()
model.fit(X)
#每个主成分能解释的方差
model.explained_variance_
#每个主成分能解释的方差的百分比
model.explained_variance_ratio_
#可视化
plt.plot(model.explained_variance_ratio_.cumsum(), 'o-')
plt.xlabel('Principal Component')
plt.ylabel('Cumulative Proportion of Variance Explained')
plt.axhline(0.9, color='k', linestyle='--', linewidth=1)
plt.title('Cumulative PVE')

可以看到当主成分个数为4时就能解释原始数据的90%以上了(坐标轴上是3是因为从0 开始的..)

 下面采用四个主成分进行回归分析:

将X转化为4个主成分矩阵,查看数据形状。

model = PCA(n_components = 4)
model.fit(X)
X_train_pca = model.transform(X)
X_train_pca.shape

 

25是我的样本量,4是主成分个数。(25个确实少了....) 

 变成数据框:(主成分得分矩阵)

columns = ['PC' + str(i) for i in range(1, 5)]
X_train_pca_df = pd.DataFrame(X_train_pca, columns=columns)
X_train_pca_df.head()

上面只展示了前5行。

还可以计算主成分核载矩阵,显示了原始变量和主成分之间的关系。

pca_loadings= pd.DataFrame(model.components_.T, columns=columns,index=columns1[:-1])
pca_loadings

 

 打印主成分回归方程

X_train_pca_df['财经信息可信度']=y
all_columns = "+".join(X_train_pca_df.columns[:-1])
print('x是:'+all_columns)
formula = '财经信息可信度~' + all_columns
print('回归方程为:'+formula)

拟合模型

results = smf.ols(formula, data=X_train_pca_df).fit()
results.summary()

 

 只有第一个和第四个主成分是显著的。

打印查看:

print(results.summary().tables[1])

 主成分回归效果也一般。

这种传统的统计学模型——参数模型,线性模型,限制和假定太多了,不好用。

一遇见多重共线性,异方差等问题就G了

 下面采用非参数的回归方法——随机森林,可以避免多重共线性的影响,得到变量的重要特征排序。


 

随机森林回归

像随机森林,支持向量机,梯度提升这种机器学习模型放在人文社科领域都是降维打击。人文社科领域用的还是老一套的传统统计学模型,效果都不太好。

随机森林回归在统计、计算机等学科里面都是很简单的模型了,但若在人文社科学科,这种模型写在论文里面肯定算高级的了。

先将数据标准化

# 数据标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
data = scaler.transform(data)
data[:5]

 取出X和y

airline_scale = data
airline_scale.shapeX=airline_scale[:,:-1]
y=airline_scale[:,-1]
X.shape,y.shape

 拟合模型:

from sklearn.ensemble import RandomForestRegressor
model = RandomForestRegressor(n_estimators=5000, max_features=int(X.shape[1] / 3), random_state=0)
model.fit(X,y)
model.score(X,y)

上面这段代码生成了一个含有5000棵决策树的随机森林模型,拟合,评价。

拟合优度高达95%!! 

查看真实值和拟合值对比的图:

pred = model.predict(X)
plt.scatter(pred, y, alpha=0.6)
w = np.linspace(min(pred), max(pred), 100)
plt.plot(w, w)
plt.xlabel('pred')
plt.ylabel('y_test')
plt.title('模型预测的财经信息可信度和真实值对比')

 

 很接近。

计算变量的重要性:

model.feature_importances_
sorted_index = model.feature_importances_.argsort()plt.barh(range(X.shape[1]), model.feature_importances_[sorted_index])
plt.yticks(np.arange(X.shape[1]), columns1[:-1][sorted_index],fontsize=14)
plt.xlabel('Feature Importance',fontsize=14)
plt.ylabel('Feature')
plt.title('特征变量的重要性排序图',fontsize=24)
plt.tight_layout()

可以看到,对于 投资信息可信度这样因变量,信息的时效性,转发量,平台可信度是最重要的,其次就是人际信任,可信赖性等等变量。

上面是每个变量对于y的重要性,

下面画出每个变量分别是怎么影响y的,偏依赖图:

X2=pd.DataFrame(X,columns=columns1[:-1])
from sklearn.inspection import PartialDependenceDisplay
#plt.figure(figsize=(12,12),dpi=100)
PartialDependenceDisplay.from_estimator(model, X2,['时效性','转发量','微博平台可信'])
#画出偏依赖图

我们可以很清楚得看到,时效性,转发量,微博平台可信度,三个变量的取值变化是怎么影响y的变化的,明显不是一个线性的关系,虽然大致的方向是正相关,但是影响的程度是一个非线性的关系,先慢后快再慢。


总结 

本次用了三种方法做了一个财经新闻领域的回归问题,每个方法都有优缺点吧,但是效果肯定还是机器学习的模型好。有的同学肯定在想机器学习模型怎么没有p值什么的,怎么看显不显著?

其实机器学习的方法没有参数估计和假设检验的,没有p值什么的,所以做不了统计推断,这也是它的一个缺点。传统的线性回归,主成分回归,虽然可以统计推断,但是效果很差。

看每个人的需求做什么样的模型了,但是在人文社科的论文写一歌机器学习的模型还是算得上创新吧。


http://chatgpt.dhexx.cn/article/hR46wTMn.shtml

相关文章

matlab实现主成分回归

主成分回归就是先对数据进行主成分分析,再进行多元线性回归。 主成分分析参考上篇博客,蹦篇博客介绍多元线性回归及其MATLAB实现。 多元线性回归是一种常用的线性建模方法。如果有两个或两个以上的自变量,就称为多元回归。事实上,…

R语言主成分回归(PCR)、 多元线性回归特征降维分析光谱数据和汽车油耗、性能数据

最近我们被客户要求撰写关于主成分回归的研究报告,包括一些图形和统计输出。 什么是PCR?(PCR PCA MLR) • PCR是处理许多 x 变量的回归技术 • 给定 Y 和 X 数据: • 在 X 矩阵上进行 PCA – 定义新变量&#xff1…

主成分回归python实现

主成分分析python实现 这是我一直都想写的内容,但是迟迟没有动手开始写,主要的原因是没有理解python中PCA降维后再进行回归时应该要怎么做。再网上查了很多资料,也没有这方面的讲解,书上也是讲到了PCA降维就结束了。以下是我使用…

基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比(生信数基实验作业)

基于R语言的主成分回归(PCR)与Lasso回归在水稻基因组预测中的对比 0 引言 全基因组选择是 21 世纪动植物育种的一种重要的选择策略,其核心就是全基因组预测,即基于分布在整个基因组上的多样性分子标记来对育种值进行预测&#x…

SPSS 特征筛选、主成分回归

小数据 → y:连续性变量 → x:6个以内 → 理论 → 验证 → 统计分析; 大数据 → y:分类变量 → x:15个以内 → 探索 → 数据挖掘; 一、X的选择流程 业务(业务专家):运…

R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化

概述和定义 在本文中,我们将考虑一些线性模型的替代拟合方法,除了通常的 普通最小二乘法。这些替代方法有时可以提供更好的预测准确性和模型可解释性。最近我们被客户要求撰写关于模型选择的研究报告,包括一些图形和统计输出。 主成分分析P…

主成分分析应用之主成分回归

主成分回归分析 对于OXY数据集的变量解释如下: 对上述数据进行回归模型的拟合,得到模型: 从模型的显著性检验结果看出:除了常数项以及β3显著,其他变量系数都不通过显著性检验。同时,从模型整体拟合效果来看…

高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据...

全文链接:http://tecdat.cn/?p23378 在本文中,我们将使用基因表达数据。这个数据集包含120个样本的200个基因的基因表达数据。这些数据来源于哺乳动物眼组织样本的微阵列实验(点击文末“阅读原文”获取完整代码数据)。 相关视频 …

主成分回归分析实战教程

本文介绍主成分回归分析(Principal Components Regression),并通过示例展示其实现过程。 给定p个预测变量和响应变量,多元线性回归使用如最小二乘法获得最小误差平方和(RSS): RSS Σ ( y i – y ^ i ) 2 {Σ(y_i – ŷ_i)^2} Σ(yi​–y^​…

机器学习——数据的共线性问题(岭回归、LASSO回归、逐步回归、主成分回归)

一、如何检验共线性 容忍度(Trlerance):容忍度是每个自变量作为因变量对其他自变量进行回归建模时得到的残差比例,大小用1减得到的决定系数来表示。容忍度的值介于0和1之间,如果值越小,说明这个自变量与其…

TI的CC2530单片机检测不同类型的方波

之前仅检测过一个引脚上一种方波信号,现在要再引脚上区分三种不同的波形。着实头大了好一会儿。 要检测的三种波形如下图所示: 每种波形的持续长度为500us,时间间隔为10ms. 比如我们在P0_2上检测这个波形,首先要对P0_2进行初始化操作&#…

单片机|CC2530实验入门

本教程为实验入门,手把手教你编译一个工程 一、USB驱动 仿真器设备的连接 【说明】USB接口不够可以使用USB集线器扩展,且互相不会干扰,非常方便。 由于用到了CC仿真器(smart RF04EB),需要相关驱动。连接…

CC2530单片机延时函数实际测试

因为要检测不同的波形,所以对时间要求很高,但是发现Zstack本身提供的微秒级的延时其实有误差。 因此特地写了测试函数,然后用示波器观察了时间。详细如下: 先说CC2530与普通8051单片机时钟的不同,CC2530的每个指令是一…

ZigBee无线传感——CC2530单片机定时器1PWM输出

定时器1(16位) 时器1是一个独立的16位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM功能。 定时器有五个独立的捕获/比较通道。每个通道定时器使用一个I/O引脚。定时器用于范围广泛的控制和测量应用&am…

基于ZigBee cc2530单片机多传感器的智能阳台仿真设计与实现

文章目录 摘 要:关键词:ZigBee 、语音识别、智能家居、传感器 0.引言1.概述2.系统总体设计2.1系统组成2、系统使用流程3、开发环境 2.2系统传感器构成2.3系统数据库设计 3.系统详细设计与实现4.系统测试结果5&#xff…

CC2530单片机精确延时的时间分析

CC2530单片机精确延时的时间分析 IAR 仿真时如何得知运行周期for循环的时间计算使用反汇编工具计算延时时间验证讨论CC2530与普通8051单片机时钟的不同 IAR 仿真时如何得知运行周期 关于这个问题,网上有很多好文章,讲得很清楚。IAR的操作很简单&#xf…

嵌入式cc2530单片机ZigBee-流水灯的实验

嵌入式cc2530单片机ZigBee 单片机是一种集成电路芯片,包含中央处理器CPU、随机存储器RAM、只读存储器ROM、输入输出I/O接口、中断控制系统、定时/计数器和通信等多种功能部件 其针脚定义如下: 1.0 --P0、P1各8个针脚(1字节8位,…

快速学会CC2530单片机基础点灯

使用的软件是IAR 使用的板是经常提到的小黑板 上面四个灯分别是 D3 ---> P1_0 D4 ---> P1_1 D5 ---> P1_3 D6 ---> P1_4 #include <ioCC2530.h>//引用CC2530头文件 #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4//为了方便使用&…

CC2530单片机开发--串口

题目 源码下载链接https://download.csdn.net/download/czx20020728/85975522?spm1001.2014.3001.5503

【CC2530入门教程-06】CC2530的ADC工作原理与应用

【CC2530入门教程-06】CC2530的ADC工作原理与应用 【CC2530入门教程-05】CC2530的串行接口原理与应用 【CC2530入门教程-04】CC2530的定时/计数器原理与应用 【CC2530入门教程-03】CC2530的中断系统及外部中断应用 【CC2530入门教程-02】CC2530的通用I/O端口输入和输出控制…