可能很多人都有听过或用过Z-Score模型,该模型是国外Altman教授在1968年开发,用来分析、判断一家企业破产的可能性。后来,Altman教授等人对Z-Score模型进行了二次开发,即Zeta信用风险模型。

Zeta模型从Z-Score模型的5个变量增加到了7个,分别是:

1.资产报酬率,采用税息前收益/总资产衡量。

2.收入的稳定性,采用对X在5-10年估计值的标准误差指标作为这个变量的度量。

3.债务偿还,可以用人们所常用的利息保障倍数(覆盖率)即利税前收益/总利息偿付来度量。

4.积累盈利,可以用公司的留存收益(资产减负债/总资产)来度量。

5.流动比率,可以用人们所熟悉的比率衡量。

6.资本化率,可以用普通股权益/总资本。

7.规模,可以用公司总资产的对数形式来度量。

PS:以上信息来源于百度百科

出于商业机密,Zeta模型的变量系数没有公开(其实公开了也不适用于当下的A股),网上能获取的相关信息也不多,但我们在知网上查到了一篇应用该模型的论文:《基于ZETA模型的我国上市公司信用风险度量研究》。今天就是以其作为本次策略研究的参考。

论文中对相关变量进行了一些调整,同时基于Fisher判别分析求得了一系列变量系数并得出相关结论:

最后的模型为:

其中,由于未进行变量标准化,模型需要多一个常数项,常数项为-4.526,变量3的系数为0;模型的阈值有两个,我们选用第二类错误更低的阈值:0.45。当模型ZETA值低于0.45时,可以认为该公司是ST类型公司,有较大信用风险。

所以,我们可以设计一个简单的反向策略,每月月底计算ZETA,买入ZETA值低于阈值的股票,回测设置如下:

  • 回测时间:2017-01-01至2022-08-29(月底换股)

  • 回测品种:全A股(停牌股和一年以内的次新股)

  • 初始资金:100万

  • 手续费:0.0008(双边万三佣金+单边千一印花税,共千1.6,即双边万8)

  • 滑点:0.00123(双边千1.23)

不过,当程序刚开始运行时我们就发现,模型筛选出来的股票数量过多。平均竟有上千只股票,而这与实际情况是很不相符的。反过来审视论文,发现问题可能出现在以下几个方面。

首先,论文中的样本数量可能过少,实验组和检验组各只有23只ST股票,同时作为对照的46只相应行业的非ST股票的选取规则并没有披露。

其次,从模型拟合出来的系数来看,变量4的系数为负跟生活经验相悖,没有人期望“留存收益/总资产”比值越低越好吧?再者,这些样本只是2017年的ST股票,在模型正确的条件下也只能反应2017年的情况。

所以对于我们而言,该模型的结果应用性并不是很强。不过论文的思路还是挺好的,可以借鉴。

下面,我们保留该论文中设计的七个变量,重新计算变量系数,并且每月月底滚动更新该系数。

如何计算模型的变量系数呢?ZETA模型本质来说是一个多元线性方程,常见的方法有判别分析、Logistic回归、聚类、神经网络等。这里我们采用Logistics回归。

回归的目标为ST和非ST,用T-1期的变量和T期ST状态做模型训练,再基于训练出来的模型和T期的变量去预测T+1期的ST状态;随后等权买入模型预测的ST股(为避免退市异常,在个股退市前十个交易日卖出持仓)。

调整后重新运行回测,结果如下:

根据回测结果来看,整体是亏损的,但并没有个人想象中的持续亏损

查询策略具体持仓之后发现,今年6月份以来垃圾股持续火热,例如持仓中的*ST顺利和*ST西源,红红火火恍恍惚惚竟然都走出了翻倍行情......只是,当潮水退去,才知道谁在裸泳。

下附部分策略源码供预览,完整源码已分享至掘金量化社区,需要的可以自行下载研究。

传送门:https://bbs.myquant.cn/thread/3140

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import os
import math
import pickle
import datetime
import numpy as np
import pandas as pd
import statsmodels.api as sm# 策略中必须有init方法
def init(context):context.to_buy = []context.delisted_date = pd.DataFrame()# 每日定时任务schedule(schedule_func=algo, date_rule='1d', time_rule='14:50:00')def algo(context):# 当前时间strtoday = context.now.strftime("%Y-%m-%d %H:%M:%S")# 下一个交易日next_date = get_next_trading_date(exchange='SZSE', date=today)# 上一个交易日last_date = get_previous_trading_date(exchange='SHSE', date=context.now)# 每月最后一个交易日,换股if today[5:7]!=next_date[5:7]:all_stocks,all_stocks_str,context.delisted_date = get_normal_stocks(context.now)# 注:get_fundamentals_n中end_date对标的是财报季度最后一天,而非财报发布日期,所以获取的数据会有未来数据,要先剔除# EBITdata1 = get_fundamentals_n(table='deriv_finance_indicator', symbols=all_stocks, end_date=last_date, fields='EBIT', count=3, df=True).set_index('symbol')data1 = data1[data1['pub_date']<context.now].sort_values(['symbol','end_date'])data1 = data1.groupby(['symbol']).filter(lambda x: len(x)>=2)ebit_t = data1.groupby(['symbol'])['EBIT'].apply(lambda df:df.iloc[-1]).sort_values()# EBIT t期ebit_t1 = data1.groupby(['symbol'])['EBIT'].apply(lambda df:df.iloc[-2]).sort_values()# EBIT t-1期# 总资产、总负债、流动资产、流动负债

Z-Score模型的进阶版:Zeta模型相关推荐

  1. Tensorflow详解保存模型(进阶版一):如何有选择的保存变量

    当然掌握了基础版还不够,我们来看一下进阶版一:如何有选择的保存变量: 这里还要另外涉及两个函数: tf.variable_scope("xxx") 和 tf.get_variabl ...

  2. Tensorflow加载模型(进阶版):如何利用预训练模型进行微调(fintuning)

    我们要使用别人已经训练好的模型,就必须将.ckpt文件中的参数加载进来.我们如何有选择的加载.ckpt文件中的参数呢.首先我们要查看.ckpt都保存了哪些参数: 上代码: import tensorf ...

  3. 深度学习实战14(进阶版)-手写文字OCR识别,手写笔记也可以识别了

    大家好,我是微学AI,今天给大家带来手写OCR识别的项目.手写的文稿在日常生活中较为常见,比如笔记.会议记录,合同签名.手写书信等,手写体的文字到处都有,所以针对手写体识别也是有较大的需求.目前手写体 ...

  4. 深度学习实战13(进阶版)-文本纠错功能,经常写错别字的小伙伴的福星

    大家好,我是微学AI,我们在日常生活中,经常会写一些文稿,比如:会议纪要,周报,日报,汇报材料,这些文稿里我们会发现有时候出现拼写.语法.标点等错误:其中拼写错误的错别字占大部分. 经过初步统计:在微 ...

  5. 深度学习实战23(进阶版)-语义分割实战,实现人物图像抠图的效果(计算机视觉)

    大家好,我是微学AI,今天给大家带来深度学习实战23(进阶版)-语义分割实战,实现人物图像抠图的效果.语义分割是计算机视觉中的一项重要任务,其目标是将图像中的每个像素都分配一个语义类别标签.与传统的目 ...

  6. 深度学习实战22(进阶版)-AI漫画视频生成模型,做自己的漫画视频

    大家好,我是微学AI,今天给大家带来深度学习实战22(进阶版)-AI漫画视频生成模型. 回顾之前给大家介绍了<深度学习实战8-生活照片转化漫画照片应用>,今天我借助这篇文章的原理做一个AI ...

  7. 【进阶版】机器学习之集成学习介绍、随机森林模型经验贴(12)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 集成学习 个体与集成 Boosting Bagging与Ran ...

  8. 【进阶版】机器学习之模型性能度量及比较检验和偏差与方差总结(02)

    目录 欢迎订阅本专栏,持续更新中~ 本专栏前期文章介绍! 机器学习配套资源推送 进阶版机器学习文章更新~ 点击下方下载高清版学习知识图册 性能度量 最常见的性能度量 查准率/查全率/F1 ROC与AU ...

  9. Redis进阶之内存模型

    转载自   Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时, ...

最新文章

  1. 中国互联网的十一种盈利模式
  2. 20分钟教你搞懂Git!
  3. 看阿里高手使用Jmeter做功能测试的优缺点
  4. C语言两种导入头文件的区别
  5. MySQL——Access|SQL Server示例数据库Northwind导入到MySQL 8.0时出错解决方案
  6. 蓝桥杯 基础练习 高精度加法
  7. 解决datepicker设置选中日期setDate不生效问题
  8. 【同124】LeetCode 543. Diameter of Binary Tree
  9. 图片标注工具labeling的安装和使用
  10. JS 页面跳转,参数的传递
  11. ansys计算机热仿真,[计算机软件及应用]ansys热分析教程.ppt
  12. 单片机入门 - 模电、数电与单片机
  13. Python词频统计与杨辉三角
  14. 【魔改蜗牛星际】B双主板变“皇帝板”扩展到8个SATA口
  15. Linux学习笔记-shell脚本-log脚本函数
  16. 【排序算法】图解冒泡排序(多图+解决两种无效比较问题)
  17. buct oj 最大公共子序列问题
  18. 各种数学平均数之间的关系
  19. 视频网站的工作原理-->m3u8视频文件的提取与解析(理论)
  20. Tomcat源码解析:环境搭建

热门文章

  1. RapidMiner 生成分析
  2. Linux 安装 Nats
  3. android 电话状态的监听(来电和去电) PhoneStateListener和TelephonyManager
  4. C语言负数除以正数,与正数除以负数,正负有谁定呢?
  5. 安全防御 --- SSL VPN
  6. java 读取 指纹_java代码怎么获取数字的证书那一串20位指纹?
  7. SEO人员,都有哪些类型?
  8. n78java退出了_使你的N78能玩N73的所有JAVA游戏
  9. wxpython制作eml文件阅读器
  10. 解决开发气压胎压计芯片方案