Z计分模型

2019-04-13  本文已影响0人  hwang_zhic

本文描述的是Z计分模型,该模型主要用于预测企业财务失败或破产的可能性,也可用于判定企业经营的状况,是目前在财务分析中最常用的一种模型。

目录

1.Z计分模型简介:主要说明Z计分模型是什么,解决什么问题。
2. Z计分模型应用分析的前期准备:主要说明Z计分模型里的特征含义,以及Z值的用途。
3. Z计分模型程序分析:主要说明Z计分模型数据来源和最终的结果分析
4. 总结:总结一下该模型的优势和劣势,再与之前的KMV模型比较看看有何优劣势。

1. Z计分模型简介

1968年,关国纽约大学教授爱德华·奥特曼利用多变量分析技术对企业的财务状况进行判别分析,他首先选择了1946年至1965年间33家破产的制造业企业,再通过抽样选取了跟其配对的33家正常经营的企业作为样本,运用22个财务指标通过数理统计进行分析筛选,最终建立了从企业资产的流动性、获利能力、财务结构、偿债能力和发展能力等方而综合反映企业财务状况的著名5变量模型,即Z计分模型。

研究表明,我国上市公司大部分支持Z计分模型的有效性,企业管理者可运用Z计分模型进行财务分析,促进其改善经营管理,防范财务风险,避免企业发生财务危机甚至破产;外部投资者、债权人等利益相关者可利用其评价企业,并可作为投资等相关决策的依据。

总的来说,Z计分模型是根据企业的财务指标数据,经过各种数理统计后得到5个变量并确定相关系数的一个著名5变量模型,并且该模型对我国大部分上市公司有一定效果。

Z计分模型的判别函数如下:
Z = 0.012 * X1 + 0.014 * X2 + 0.033 * X3 + 0.006 * X4 + 0.999 * X5

2. Z计分模型应用分析的前期准备

Z计分模型主要用于预测企业财务失败或破产的可能性,也可用于判定企业经营的状况,是目前在财务分析中最常用的一种模型,故本文首先用z计分模型来进行判别分析。先根据z计分模型分别计算三家乳品企业的z值,再按z值对企业进行比较和分析。
其中:
(1)X1=营运资金/资产总额=(流动资产一流动负债)/资产总额
该比率反映企业资产的流动性和分布状况,比率越高说明资产的流动性越强,财务失败的可能越小
(2)X2=留存收益/资产总额=(股东权益一股本一资本公积)/资产总额
该比率反映企业的积累水平,比率越高说明企业的积累水平越高,财务失败的可能越小
(3)X3=息税前利润/资产总额=(利润总额+利息费用)/资产总额
该比率反映企业的获利水平,比率越高说明企业的获利能力越强,财务失败的可能越小
(4)X4=股东权益市价/负债总额=(已上市流通股数收盘价+未上市流通股数每股净资产)/负债总额
该比率反映企业所有者权益(或净产)与企业债务之间的关系,比率越高,说明企业所有者权益越高或净资产越高,企业财务失败的可能性就越小
(5)X5=营业收入/资产总额:
该比率反映企业总资产的周转速度或营运能力,比率越高说明企业的资产利用率越高,效果也越好。

PS:X3中的利息费用无法直接从年报中获取,故以财务费用代替,对结果应无实质性影响;X4中的每股市价以股票当年股市收盘价计算。

阿尔特曼经过统计分析和计算最后确定了借款人违约的临界值Zo=2.675。如果Z<2.675,借款被划入违约组;反之,如果Z≥2.675,则借款人被划入非违约组。当1.81<Z<2.99,阿尔特曼发现此时的判断失误比较大,称该重叠区域为未知区(zoneofignorance)或称灰色区域(grayarea)。

3. Z计分模型程序分析

3.1 模型数据

上面已经介绍了模型特征的定义,那么接下来就是准备这些数据了,所需数据如下:
X1:流动资产流动负债资产总额
X2:股东权益股本资本公积资产总额
X3:利润总额财务费用资产总额
X4:收盘价已上市流通股数流通股股数每股净资产负债总额
X5:营业收入资产总额
数据从锐思数据库得到,部分数据如下图所示:
数据库下载:http://www2.resset.cn/product/

图3.1.1
image.png

可以清楚的看到这都是一些上海上市的白酒公司,并且数据是16年~18年的第三季报。数据都是直接从表中得到。因为面板有限,更多具体的数据就不一一展示了。

3.2 模型执行结果分析

该模型代码比较简单,代码和数据可以从最下方码云链接下载。
代码主要分3部分:
1:读取和处理数据;
2:编写Z值函数;
3:绘制图形。

代码如下:

"""
    功能:Z评分模型

"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 读取上市公司数据
data_xls_1 = pd.read_excel("白酒上市公司交易额表.xls")
data_xls_2 = pd.read_excel("白酒上市公司营收.xls")

# 读取上市公司数据
data_1 = data_xls_1.ix[:,
         ['收盘价_Clpr', '流通股_Trdshr', '已上市流通股_Lsttrdshr',
          '年收益率_Yrret', '年无风险收益率_Yrrfret', '每股净资产(元/股)_NAPS', '日期_Date']].values

# print("data_1", data_1)
data_2 = data_xls_2.ix[:,
         ['流动负债合计(元)_Totcurlia', '非流动负债合计(元)_TotNcurlia', '负债合计(元)_Totlia',
          '营业收入(元)_Incmope', '资本公积(元)_Capsur', '所有者权益合计(元)_TotSHE',
          '利润总额(元)_Totalprf', '财务费用(元)_Finexp', '实收资本(或股本)(元)_Shrcap',
          '流动资产合计(元)_Totcurass', '非流动资产合计(元)_TotNcurass', '资产总计(元)_Totass', '截止日期_EndDt']].values

# 公司数据
# 收盘价_Clpr
Clpr_list = data_1[:, 0]
# print("Clpr_list", Clpr_list)
# 流通股_Trdshr
Trdshr_list = data_1[:, 1]
# print("Trdshr_list", Trdshr_list)
# 已上市流通股_Ltrdshr
Ltrdshr_list = data_1[:, 2]
# print("Ltrdshr_list", Ltrdshr_list)
# 每股净资产
NAPS_list = data_1[:, 5]
# print("NAPS_list", NAPS_list)
# 日期_Date
date_list = data_1[:, 6]
# print("date_list", date_list)
# print(date_list)
# date_year = date[1].year
# print(date_year)
# 股权市场价值列表
E_list = (Clpr_list * Ltrdshr_list) + (Trdshr_list - Ltrdshr_list) * NAPS_list
# print("E_list", E_list)
# 流动负债合计(元)_Totcurlia
SD_list = data_2[:, 0]
# print(SD_li)
# 非流动负债合计(元)_TotNCurLia
LD_list = data_2[:, 1]
# print(LD_li)
# 负债合计(元)_TotLia
D_list = data_2[:, 2]
# print("D_list:", D_list)
# 营业收入(元)_Incmope
Income_list = data_2[:, 3]
# 资本公积(元)_Capsur
Reserve_list = data_2[:, 4]
# 所有者权益合计(元)_TotSHE
Own_E_list = data_2[:, 5]
# 利润总额(元)_Totalprf
Totalprf_list = data_2[:, 6]
# 财务费用(元)_Finexp
Finexp_list = data_2[:, 7]
# 实收资本(或股本)(元)_Shrcap
Shrcap_list = data_2[:, 8]
# 流动资产合计(元)_Totcurass
Totcurass_list = data_2[:, 9]
# 非流动资产合计(元)_TotNcurass
TotNcurass_list = data_2[:, 10]
# 资产总计(元)_Totass
Totass_list = data_2[:, 11]
# 截止日期_EndDt
EndDt_list = data_2[:, 12]


def Z_count(X):
    """
        功能:计算Z值并返回
    """
    Z = 0.012 * X[0] + 0.014 * X[1] + 0.033 * X[2] + 0.006 * X[3] + 0.999 * X[4]
    return Z


def read_data():
    """
        功能:读取数据
    """
    pass


def X_count(i):
    """
        功能:计算x1~x5的值
    """
    x1 = (Totcurass_list[i] - SD_list[i]) / Totass_list[i]
    x2 = (Own_E_list[i] - Shrcap_list[i] - Reserve_list[i]) / Totass_list[i]
    x3 = (Totalprf_list[i] + Finexp_list[i]) / Totass_list[i]
    x4 = E_list[i] / D_list[i]
    x5 = Income_list[i] / Totass_list[i]
    # print("[x1, x2, x3, x4, x5]", [x1, x2, x3, x4, x5])
    return [x1, x2, x3, x4, x5]


def main():
    """
        主函数
    """

    Company_name = ["新疆伊力特实业股份有限公司",
                    "安徽金种子酒业股份有限公司",
                    "贵州茅台酒股份有限公司",
                    "河北衡水老白干酒业股份有限公司",
                    "舍得酒业股份有限公司",
                    "四川水井坊股份有限公司",
                    "山西杏花村汾酒厂股份有限公司",
                    "安徽迎驾贡酒股份有限公司",
                    "江苏今世缘酒业股份有限公司",
                    "安徽口子酒业股份有限公司",
                    "金徽酒股份有限公司"]
    Z_list = []
    number = 0

    for i in range(int(data_1.shape[0])):
        X = X_count(i)
        Z = Z_count(X)

        Z_list.append(Z)
        Z_list_length = len(Z_list)

        if Z_list_length == 3:
            plt_tle = Company_name[number] + "16年到18年Z值统计"
            # 绘制条形图
            rects1 = plt.bar(x=range(1, 6, 2), height=Z_list, width=1, alpha=0.8, color='red')
            plt.ylim(0, 1)  # y轴取值范围
            plt.ylabel("数量")
            # 设置x轴坐标点显示
            tick_labels = ["2016", "2017", "2018"]
            tick_pos = np.arange(1, 7, 2)
            plt.xticks(tick_pos, tick_labels)
            plt.title(plt_tle, size=16)
            plt.xlabel("年份", size=10)
            plt.ylabel("Z值", size=10)
            plt.legend()     # 设置题注
            plt.show()
            # Z列表初始化
            Z_list = []
            number += 1


分析一下结果,部分结果如下图:

图3.2.1
图3.2.2
图3.2.3
图3.2.4
图3.2.5
图3.2.6
图3.2.7
图3.2.8
图3.2.9
图3.2.10
图3.2.11

首先这些公司都是非ST公司。从结果可以看到,基本上所有公司都大于2.675,这表明大部分公司都划分到了非违约组,不过还是有2个公司中的一些年份进入到了灰色区域,即1.81<Z<2.99,该区域表示判断错误可能性增大。虽然这与这些公司的非ST状态大致相对应,但是无法判断该模型的具体的准确度。

4. 总结

4.1 Z评分模型的优势

Z评分模型是一个为以会计资料为基础的多变量信用评分模型。
(1)由Z评分模型所计算出的z值可以较为明确地反映借款人(企业)在一定时期内的信用状况(违约或不违约、破产或不破产),因此,他可以作为借款人经营前景好坏的早期预警系统
(2)由于Z评分模型具有较强的操作性、适用性以及较强的预测能力,它们一经推出便在许多国家和地区得到推广和使用并取得了显著效果,成为当代预测企业违约或破产的核心分析方法之一。

4.2 Z评分模型的不足

Z评分模型的优势在于它的便捷性,只要通过财务数据的分析就可以得到该公司的风险状况。但是该模型却忽略了对市场数据因素的分析,造成了该模型在多个方面存在不足:
(1)首先,由于该模型缺少对市场数据的分析使该模型的预测结果存在滞后性,不能及时反映评价公司的信用变化。
(2)其次,该模型仅考虑了两个比较极端的情况(违约与不违约),而对于负债重整或是虽然发生违约但是回收率很高的情况就没有做另外较详细的分类。
(3)其次,该模型的理论基础不强,比如为什么这几个财变量值得考虑而另外一些因素则不值得考虑。虽然该模型在实证上得到了一定的支持,但是并不能在理论上给出合理的解释。
(4)再次,权数显然不是固定的,必须经常调整。就算调整,那又该多长时间调整,调整的频率如何确定这些问题模型本身无法给出合理的答案。同时这种调整需要较大的数据库作为支撑,而这又是一件很费时效的工作。
(5)最后,该模型没有考虑系统性风险的影响,该模型根本无法预测像2008年的金融危机这样的系统风险,而这种危机显然会对企业的违约率造成不同程度的影响。

总的来说,该模型简单易操作,但相关变量需要及时调整。因此该模型适合早期使用,当需要具体违约概率时需要其他更好的模型,比如KMV模型等等。

4.3 Z评分模型与KMV模型的优劣分析

Z评分模型是一个相对简单而有效的风险管理工具,能够粗略地估计出公司的经营状况,但是无法达到很精确的程度。而KMV模型具有较好的应用前景,能够满足我国风险量化管理的要求,但是就目前我国信用风险KMV与Z评分模型在我国信用风险管理中的应用市场的现状来看,该模型还无法取得大规模的应用。KMV模型若要在我国取得更广泛更深远的应用,还需要对模型本身做进一步的改进,同时也需要我国金融市场的进一步发展。

本文章的数据、代码和参考文章码云地址:https://gitee.com/hwang_zc/zscore_model

参考文献:KMV与Z评分模型在我国信用风险管理中的应用——基于我国一般上市公司的实证比较;刘义超

上一篇 下一篇

猜你喜欢

热点阅读