上市公司财务风险识别在线实验闯关

第1关 筛选出风险企业相关财务特征变量(X)及构造风险标识变量(Y)

'''企业财务风险预警是企业风险预警系统的一个重要组成部分。企业财务风险判断标准如下:

1)连续两年年报显示净利润为负值;

2)当年净资产收益率或者总资产净利润率为负值,满足条件之一即为风险企业,记为1,

   否则为非风险企业(两个条件同时不满足),记为0。

其财务特征变量如下:流动比率、速动比率、现金比率、产权比率、利息保障倍数、

盈利现金比率、总资产报酬率、净资产收益率、存货周转率、应收账款周转率、总资产周转率、

主营业务鲜明率、资本保值增值率、净资产增长率,依次表示为x1~x14

请读取“2018年财务指标数据.xlsx”,其字段依次为:

Stkcd(股票代码)、净利润2017、净利润2018、净资产收益率、总资产净利润率、x1~x14

任务如下:

1.筛选出风险企业及财务特征变量(自变量X),

2.同时构造风险标识变量(因变量Y=1)

3.用一个数据框表示,记为B1.

'''

def return_values():

    import pandas as pd

    A=pd.read_excel('2018年财务指标数据.xlsx')

    df=A.dropna()

    df=df.set_index('Stkcd')

    #1.区分ST公司和非ST公司

    #ST公司,选出前四个指标中任意一个小于0的公司,然后添加到B1,并在B1添 加列标为1

    B1=[]

    for i in range(len(df)):

        if (df.iloc[i,0]<0 and df.iloc[i,1]<0) or df.iloc[i,2]<0 or df.iloc[i,3]<0:

            B1.append(df.iloc[i,4:])

    B1=pd.DataFrame(B1)

    B1.insert(loc=14, column='y', value=1)


 

#1.区分ST公司和非ST公司

#ST公司,选出前四个指标中任意一个小于0的公司,然后添加到B1,并在B1添加列标为1

    return B1

第2关 随机筛选出与风险企业数量相同的非风险企业的X和Y,并与上一关结果合并处理

'''在上一关基础上,随机筛选出与风险企业数量相同的非风险企业,

包括财务特征变量(自变量X),同时构造非风险标识变量(因变量Y=0),用一个数据框表示,记为B0

并与上一关的结果B1,进行垂直合并,获得完整的训练数据集B,其中B要求是numpy数组,

即B的前14列为自变量,最后一列为因变量'''

def return_values():

    import pandas as pd

    import step2_1

    B1=step2_1.return_values()

    A=pd.read_excel('2018年财务指标数据.xlsx')

    df=A.dropna()

    df=df.set_index('Stkcd')

    B0=[]

    for i in range(len(df)):

        if df.iloc[i,0]>0 and df.iloc[i,1]>0 and df.iloc[i,2]>0 and df.iloc[i,3]>0:

            B0.append(df.iloc[i,4:])

    B0=pd.DataFrame(B0)

#随机取和B1一样行数的数据

    B0=B0.sample(n=len(B1), replace=True,  random_state=10, axis=0)

    B0.insert(loc=14, column='y', value=0)

#合并B1和B,并提取出这些样本公司的代码

    B = pd.concat([B0, B1], axis = 0)

#随机取和B1一样行数的数据

#合并B1和B,并提取出这些样本公司的代码

    return B.values

第3关 对X进行标准化、主成分分析和提取主成分

'''在上一关的基础上,对自变量进行极差标准化,即数据隐射到[0,1]区间上,

经过标准化后的自变量进行主成分分析,要求累计贡献率在95%以上,同时提取主成分,

提取的主成分记为xz,同时返回因变量y的值,其中xz和y均为numpy数组'''

def return_values():

    import step2_2

    import pandas as pd

    B=step2_2.return_values()

    from sklearn.preprocessing import MinMaxScaler

    min_max_scaler = MinMaxScaler()

    min_max_scaler.fit(B[:,:14])

    X1=min_max_scaler.transform(B[:,:14])

    X1=pd.DataFrame(X1)

    from sklearn.decomposition import PCA

    pca=PCA(n_components=0.95)

    pca.fit(X1)#调用pca对象中的fit()方法,对待分析的数据进行拟合训练

    xz=pca.transform(X1)#调用pca对象中的transform()方法,返回提取的主成分

#xz=pd.DataFrame(XZ)

    y=B[:,14]

    return (xz,y)

第4关 基于支持向量机的上市公司财务风险识别模型构建

'''利用上一关的结果xz(自变量经过标准化、主成分分析和提取主成分后的特征数据)和y(因变量)

,按75%和25%划分训练集和测试集,构建支持向量机模型(核函数为高斯核),

返回模型准确率rv和预测准确率rs'''

import numpy as np

from sklearn.svm import SVC

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score

def return_values():

    import step2_3

    r = step2_3.return_values()

   

    # 假设r是一个包含xz和y的元组 (xz, y)

    xz, y = r[0], r[1]

   

    # 划分训练集和测试集

    X_train, X_test, y_train, y_test = train_test_split(

        xz, y, test_size=0.25, random_state=42

    )

   

    # 构建支持向量机模型(高斯核)

    model = SVC(kernel='rbf', random_state=42)

   

    # 训练模型

    model.fit(X_train, y_train)

   

    # 计算模型在训练集上的准确率

    rv = model.score(X_train, y_train)

   

    # 进行预测

    y_pred = model.predict(X_test)

   

    # 计算预测准确率

    rs = accuracy_score(y_test, y_pred)

   

    return (rv, rs)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值