0.引言
现手头有500个左右的企业财务数据,共有12个特征,如:净资产收益率(年度)、总资产报酬率(年度)、成本费用利润率(年度)等等。本文目标是通过深度学习的方式来自动预测某一企业是否具有风险。
首先通过人工鉴别的方式,给150个企业做出标签:0代表无风险,1代表有风险。这150个企业是训练集,剩下350个企业是测试集。(按照机器学习的通常原则,一般是60%的训练集,20%的验证集,20%的测试集,但是由于人工鉴别费时费力,暂时先给150个企业做出标签,如果效果不错,就多做一些标签,增加训练集。)
然后训练出模型,最后使用模型对剩下350个企业进行测试。
1 配置环境
1.1 安装anaconda
不要装太新的,conda3.6或者3.7兼容性比较好。相关链接:
https://blog.csdn.net/u012318074/article/details/77075209
1.2 安装pytorch
由于数据量并不大,建议安装cpu版本的,这样可以避免安装GPU的相关驱动等复杂步骤。
在命令行中敲入:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
1.3 安装编译器pycharm
pycharm有社区版本和专业版本。社区版本免费,专业版本需要收费,运行此模型,社区版本的足够了。相关链接:
https://blog.csdn.net/ifubing/article/details/104137585
2 训练模型
2.1 文件组织结构
其中文件夹data下面是数据,model下面是模型。
2.2 新建项目
2.3 训练代码
import pandas as pd
import numpy as np
import torch
from torch.functional import F
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden)
self.predict = torch.nn.Linear(n_hidden, n_output)
def forward(self, x_input):
x_hidden = F.relu(self.hidden(x_input))
x_predict = self.predict(x_hidden)
return x_predict
# 定义网络
if __name__ == '__main__':
train = pd.read_csv('./data/train_data.csv', encoding="gb18030")
data = train.values
data = data[:, 3:16]
# 选取标签和特征值
data = data.astype(float)
# 转化为浮点数
data = torch.from_numpy(data)
# 转化为张量
x = data[:, (1, 2, 4, 5, 7, 8, 10, 11)].type(torch.FloatTensor)
# print(x[0])
# 此时的x代表每一个公司各方面的值,一共160个公司,现在只选择8个特征
y = data[:, 0].type(torch.LongTensor)
# 把标签也转化为张量
# print(y)
net = Net(8, 20, 2)
opt = torch.optim.SGD(net.parameters(), lr=0.001, weight_decay=0.01)
# 加了一个正则化 \lambda=0.01
loss_func = torch.nn.CrossEntropyLoss()
for step in range(200):
# print("the step is: " + str(step))
out = net(x)