Python数据分析案例31——中国A股的月份效应研究(方差分析,虚拟变量回归)

案例背景

本次案例是博主本科在行为金融学课程上做的一个小项目,最近看很多经管类的学生作业都很需要,我就用python来重新做了一遍。不弄那些复杂的机器学习模型了,经管类同学就用简单的统计学方法来做模型就好。


研究目的

有效市场假说是现代金融证券市场的理论基础之一,根据这一理论,投资者买卖股票市场是很难通过主动管理去获得超额收益,而且平均时间段的收益应该也没有显著性的差异。​

但在我国市场明显存在着一个春节效应,即股市二月份的收益率一般远要高于一年中其他月份的收益率。而且中国股市还有一句老话,叫做五穷六绝七翻身,意思是五月六月的收益率低,而七月的收益率就有所上升。国外学者研究中,一些成熟的股票市场也会出现着这样一种季节性的或是周末性的效应​。这种违背了有效市场假说的现象,一般应该与人的心理会有联系,研究范围属于行为金融学范围。

本文以上证综合指数为例,选取收盘价作为样本数据,对其进行实证分析研究,检验中国股市是否呈现在了月份效应,根据这一分析,可以对股票投资策略上提出一定的建议​。


数据

既然研究中国股市,那就用最有代表性的A股上证指数吧,十多年了还是3000点不保.....

使用akshare的api接口进行获取数据,当然本项目的全部代码和数据文件还是可以这样获取,需要的同学可以看看:数据


代码实现

导入包:

import akshare as ak
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
 
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号

数据获取 

然后获取上证指数的数据 

# 获取上证指数的日K线数据
df_300= ak.stock_zh_index_daily(symbol="sh000001")
df_300 

##储存

df_300.to_excel('data.xlsx',index=False)

换成别的数据文件都可以,别的股票或者指数....


 数据转化

要换成自己的数据文件就再读取一遍就好了,命名为df_300,后面一样用。

既然研究月份,那么得需要先计算每个月的收益率,转化日K为月份

# 转换日期格式并设置为索引
df_300['date'] = pd.to_datetime(df_300['date'])
df_300.set_index('date', inplace=True)
df=df_300.resample('M').ffill()

 使用每个月的收盘价

df['monthly_return']=df['close'].pct_change().fillna((0))
df

最后一列就是每个月的收益率了,但是这样一条数据不直观,这样看比较好:
 

data=pd.DataFrame()
data['monthly_return']=df['monthly_return']
data['year'] = df.index.year
data['month'] = df.index.month
data = data.pivot_table(index='year', columns='month', values='monthly_return').iloc[1:-1,:]
data

这样就可以清楚地看见每年每个月的收益率了。

描述性统计

描述性统计也很方便:

data.describe()

 

每个月的收益率和均值方差,一目了然。

简单做个t检验,来看看哪几个月的收益率存在显著性差异

import scipy.stats as stats
for i in range(len(data.columns)):
    for j in range(i + 1, len(data.columns)):
        t_statistic, p_value = stats.ttest_ind(data[data.columns[i]], data[data.columns[j]])
        if p_value < 0.05:
            print(f"0.05的显著性水平下,{data.columns[i]}月和{data.columns[j]}月有显著性差异")

画出每个月的箱线图:

#查看特征变量的箱线图分布
columns = data.columns.tolist() # 列表头
dis_cols = 4                   #一行几个
dis_rows = len(columns)
plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))
 
for i in range(len(columns)):
    plt.subplot(dis_rows,dis_cols,i+1)
    sns.boxplot(data=data[columns[i]].to_numpy(), orient="v",width=0.5)
    plt.xlabel(columns[i],fontsize = 20)
plt.tight_layout()
plt.show()

这样看不直观,数据变一下画小提琴图:
 

df['month']=df.index.month
df1=df[['month','monthly_return']]

画图 

fig = plt.figure(figsize=(14, 6), dpi=256)  # 指定绘图对象宽度和高度
ax = sns.violinplot(x='month',y='monthly_return',width=0.8,saturation=0.9,lw=0.8,palette="Set2",orient="v",inner="box",data=df1)
#plt.xlabel((['月份' + str(i+1) for i in range(13)]),fontsize=10)
plt.ylabel('monthly_return', fontsize=16)
plt.show()

可以看到基本上每个月的收益率均值都是0附近,5月和8月的方差较大,这和历史上的某些“股灾”“金融风暴”有关。


方差分析

我们要研究的是不同月份之间的股市收益率差异,就是分类型自变量是否对数值型因变量有显著性影响,那么就是方差分析的范围了。

原假设:不同月份之间的股市收益率相同。

备择假设:不同月份之间的股市收益率存在显著性不同。

先导入包:
 

import statsmodels.api as sm
from statsmodels.formula.api import ols
from statsmodels.stats.multicomp import pairwise_tukeyhsd

进行方差分析:

df1['month']= df1['month'].astype('category')
model = ols('monthly_return ~ month', data=df1).fit()
anova_results = sm.stats.anova_lm(model, typ=1)
anova_results

 

我们可以看到F值只有0.61,p值为0.8,远远不显著,说明每个月的收益率没有显著性差异。

接受原假设,即不能说明每个月的收益有显著性差异。

得到这个结果我是很惊讶的,因为我本科做的是显著的呀,奇怪,从2019年到2023年就变得不显著了???

我不死心,用虚拟变量回归的方法再试了一次。


虚拟变量回归

虚拟变量就是0和1这种哑变量,计算机里面又叫独立热编码,如果我们想表示12个月份,那么就生成一个12维的X,表示1月就第一个x为1,其他为0,表示2月就第二个x为1,其他为0.....以此类推。然后用这些X去和收益率y进行回归。
注意,在实际操作中只能生成k-1个变量,不然会陷入“虚拟变量陷阱”,即形成完美的多重共线性。

所以我删除了一月,用一月作为基准月份:

# 创建月份虚拟变量
df1 = pd.get_dummies(df1, columns=['month'], prefix='month', drop_first=True)

# 构建线性回归模型,一月作为基准月份被省略
formula = 'monthly_return ~ ' + ' + '.join([col for col in df1.columns if col.startswith('month_')])
model = ols(formula, data=df1).fit()

# 输出模型结果
model_summary = model.summary()
model_summary

只看F值,好吧还是不显著,F值对应的p有0.8,远远不显著 。再看每个虚拟变量的t值,也没有一个显著。。。丫的,我不甘心,但是这就是现实。。我也没办法变得显著了。


之后我还尝试使用沪深300指数,我发现也是不显著。这说明,不同月份之间的A股收益率确实不存在显著性差异,那些幻想说2月份春节收益率高的,不存在....可能是某写个别的年份2月收益率高(例如2019),但是整体来看,A股30多年,不存在那些月份会有离谱的收益率。。。

虽然不显著,但是这个研究还是有意义的,起码说明了A股股市在月份效应上真的没啥规律。


 当然,这案例换一下数据,换一个效应都还是很好模仿的。例如可以用个股的数据,或者某个行业的数据,研究节假日效应,季节效应,等等,都是虚拟变量,都是方差分析可以做的。


创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~(需要定制代码可私信)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/313474.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm社区医疗保健监控系统+vue论文

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统社区医疗保健信息管理难度大&#xff0c;容错率低&#x…

生成式人工智能研究焦点:揭秘基于扩散的模型

生成式人工智能研究焦点&#xff1a;揭秘基于扩散的模型 文章目录 生成式人工智能研究焦点&#xff1a;揭秘基于扩散的模型去噪扩散是什么让扩散发挥作用&#xff1f;采样生成图像的设计选择以更少的步骤理顺流程在低噪音水平下步骤高阶求解器可实现更准确的步骤训练降噪器的设…

Lagrange对偶法

这里写自定义目录标题 5.1.1 The Lagrangian5.1.2 The Lagrange dual function5.2 The Lagrange dual problem5.2.3 Strong duality and Slater’s constraint qualification5.2.3 Strong duality and Slater’s constraint qualification5.5.3 KKT optimality conditions Lagr…

C 语言每日一题——旋转数组的最小数字

一、题目内容 提供一下该OJ题的链接&#xff1a;旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com) 二、题目分析 通过示例1可知&#xff0c;我们写代码的目的是在数组中找到一个最大值&#xff0c;并且返回来&#xff1b; 我们很容易的会想到创建一个变量&#xff1a;int…

天软特色因子看板 (2024.1 第6期)

该因子看板跟踪天软特色因子A04001(当日趋势强度)&#xff0c;该因子为反映股价走势趋势强弱&#xff0c;用以刻画股价走势趋势强弱&#xff0c;abs(值)越接近1&#xff0c;趋势 性越强&#xff0c;符号代表涨跌方向。 今日为该因子跟踪第6期&#xff0c;跟踪其在SW801040 (申万…

深入理解UML中的继承关系

深入理解UML中的继承关系 在面向对象的设计中&#xff0c;继承关系是构建清晰、可维护系统的关键。统一建模语言&#xff08;UML&#xff09;提供了一种标准化的方法来可视化这些关系。本文将深入探讨UML中的继承关系&#xff0c;并探讨它如何在代码中体现。 什么是继承关系&a…

如何修复DLL错误或丢失的问题,这里提供几种方法

DLL错误是指DLL文件的任何错误&#xff0c;一种以.dll文件扩展名结尾的文件。 DLL错误可能出现在微软的任何操作系统中&#xff0c;包括Windows 10、Windows 8、Windows 7、Windows Vista和Windows XP。 DLL错误尤其麻烦&#xff0c;因为存在许多这样类型的文件&#xff0c;所…

pyx文件编译为pyd/so文件(分别在windows/linux系统下)

Python有以下几种类型的文件&#xff1a; py&#xff1a;Python控制台程序的源代码文件pyx&#xff1a;是Python语言的一个编译扩展&#xff0c;它实际上是Cython语言的源代码文件&#xff08;可以理解为既支持Python语言也支持C/C&#xff09;。pyc&#xff1a;Python字节码文…

关于lora的理解

非常推荐看参考中的文章&#xff0c;对lora的原理和代码&#xff0c;包括细节都讲得很清楚&#xff01; 参考&#xff1a;【OpenLLM 007】大模型炼丹术之小参数撬动大模型-万字长文全面解读PEFT参数高效微调技术 - 知乎 (zhihu.com)图解大模型微调系列之&#xff1a;大模型低秩…

创新技术高精度直线模组技术优势及应用详解

近年来&#xff0c;随着工业自动化转型升级不断提速&#xff0c;市场对优质直线模组的需求量直线上升&#xff0c;而直线模组拥有单体运动速度快、重复定位精度高、本体质量轻、占设备空间小、寿命长等优势&#xff0c;在机械设备领域备受青睐。作为深耕工业自动化产品市场多年…

软件测试最新项目合集【商城、外卖、银行、金融等等.......】

​项目一&#xff1a;ShopNC商城 项目概况&#xff1a; ShopNC商城是一个电子商务B2C电商平台系统&#xff0c;功能强大&#xff0c;安全便捷。适合企业及个人快速构建个性化网上商城。 包含PCIOS客户端Adroid客户端微商城&#xff0c;系统PC后台是基于ThinkPHP MVC构架开发的…

谁在成为大模型的“AI运营”?

在过去的一段时间里&#xff0c;“AI-native”成为所有工具的一个显著探索趋势&#xff0c;不论是算力集群的智算中心&#xff0c;还是数据库侧的向量数据库&#xff0c;再或者是不断进化的算法&#xff0c;都在以一种更适配大模型架构的方式被推演出来。 那么&#xff0c;大模…

四川云汇优想教育咨询有限公司引领电商未来

四川云汇优想教育咨询有限公司&#xff0c;一家在电商服务领域崭露头角的领军企业&#xff0c;致力于为广大客户提供最优质、最全面的电商服务。作为业界翘楚&#xff0c;云汇优想凭借其卓越的服务品质和强大的技术实力&#xff0c;在激烈的市场竞争中独树一帜&#xff0c;赢得…

【数据库原理】(24)数据库安全性策略

数据库安全性是数据库管理系统&#xff08;DBMS&#xff09;中一个至关重要的方面。它指的是保护数据库免受非授权访问和恶意操作&#xff0c;包括数据泄露、修改、破坏等。 多层安全模型 在典型的计算机系统安全模型中&#xff0c;安全措施被设置在不同层级&#xff1a; 应用…

第11章 GUI Page489~494 步骤三十 保存画板文件02 实现存盘函数SaveFile

工程添加新头文件 tool_4_save_load.hpp 增加源文件 tool_4_save_load.cpp IItem类增加保存到流的接口&#xff1a; 在直线&#xff0c;圆&#xff0c;十字形&#xff0c;方框&#xff0c;文字类中实现这个接口 回到主框架窗口&#xff0c;实现保存文件的函数SaveFile 首先封…

win7用什么录屏软件好?这款软件请你收好

随着科技的不断进步&#xff0c;屏幕录制在工作和娱乐中变得越来越普遍。对于使用windows 7操作系统的用户来说&#xff0c;选择一款适合的屏幕录制软件尤为重要。可是win7用什么录屏软件好呢&#xff1f;在本文中&#xff0c;我们将介绍三款适用于win 7系统的录屏软件。通过详…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS依托统计学处理数据的应用场景

《SPSS统计学基础与实证研究应用精解》1.4 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解1.4节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

2023年网络安全事件处罚盘点,文件销毁 硬盘销毁 物料销毁

《中华人民共和国网络安全法》是我国第一部全面规范网络空间安全管理方面问题的基础性法律&#xff0c;是我国网络空间法治建设的重要里程碑&#xff0c;《中华人民共和国网络安全法》从2013年下半年提上日程&#xff0c;到2016年年底颁布&#xff0c;自2017年6月1日起施行&…

VScode远程连接开发嵌入式开发板

在做嵌入式开发时&#xff0c;很多时候需要远程连接或者远程调试设备&#xff0c;这时可以通过VScode上的插件来很方便的进行远程连接和调试。 ssh远程连接嵌入式开发板&#xff1a; 1、安装vscode ssh远程插件&#xff1a;Remote-SSH。 2、点击""&#xff0c;输入…

Cesium 实战 - 模型亮度调整,自定义着色器(CustomShader)完美解决模型太暗的问题

Cesium 实战 - 自定义视频标签展示视频 模型变暗问题以往通过光线解决问题模型变暗原理解决问题完整代码在线示例在 Cesium 项目中,添加模型是比较基础的功能,Cesium 支持 glTF(GBL) 格式。 在实际应用中,经常会遇到模型特别暗的情况,对比而言,其他三维环境添加是正常的…