在我正在进行的一个项目中,我使用了来自成功或破产/清算公司的年度财务报告数据(多个类别)。在此之前,我在AWS Sagemaker上使用多重线性回归算法(具体来说,是用于逻辑回归/分类问题的AWS股票算法 – ‘Linear Learner’算法)创建了一个表现相当不错的模型。
这个模型仅基于输入的一组年度数据,生成一个简单的“公司状况良好”或“公司看起来会破产”的二元预测;例如:
query input: {data:[{"Gross Revenue": -4000,"Balance Sheet": 10000,"Creditors": 4000,"Debts": 1000000 }]}inference output: "in good health" / "in bad health"
我通过忽略每家公司的数据来自哪一年,将所有年度财务报告数据(即一家公司一年的财务数据为一行输入)以及“良好”或“不好”的标签一起用于训练这个模型。一个良好的公司是指那些已经存在了一段时间但没有破产的公司,一个不好的公司是指最终被发现破产的公司;例如:
label | Gross Revenue | Balance Sheet | Creditors | Debts |
---|---|---|---|---|
good | 10000 | 20000 | 0 | 0 |
bad | 0 | 5 | 100 | 10000 |
bad | 20000 | 0 | 4 | 100000000 |
因此,我在训练输入中使用了这些多个特征(总收入,资产负债表…)以及标签(好/坏),来创建我的第一个模型。
我希望在新的模型中使用与之前相同的特征作为输入(总收入,资产负债表…),但覆盖多个年度;例如,获取2020年和2019年的数值,并将这些(以及最终的公司状态“良好”或“不好”)作为新模型的单一输入。然而,我对以下问题不确定:
- 这种使用逻辑回归机器学习的方法是否不合适?即,是否有更合适的算法我应该考虑?
- 尝试使用与之前相同的技术,但将两年的数据合并为一行输入是否可以,还是完全错误的做法?例如:
label | Gross Revenue(2019) | Balance Sheet(2019) | Creditors(2019) | Debts(2019) | Gross Revenue(2020) | Balance Sheet(2020) | Creditors(2020) | Debts(2020) |
---|---|---|---|---|---|---|---|---|
good | 10000 | 20000 | 0 | 0 | 30000 | 10000 | 40 | 500 |
bad | 100 | 50 | 200 | 50000 | 100 | 5 | 100 | 10000 |
bad | 5000 | 0 | 2000 | 800000 | 2000 | 0 | 4 | 100000000 |
我个人认为,随着时间推移状况变差的公司(即2020年的财务状况比2019年差)应该更可能被判定为“不好”/可能破产,因此我希望,如果我输入如上所示的数据(即早期年度的数据在输入行中排在后期年度数据之前),我的训练工作最终会创建一个在进行预测时对早期年度数据赋予更大权重的模型。
更新:
使用长短期记忆循环神经网络(LSTM RNN)是我认为可以尝试的一个潜在途径,但这似乎通常仅用于多个日期的多变量数据;我的数据每个公司只有2到3个日期的多变量数据。我希望尝试使用我拥有的所有公司的数据,覆盖这些少量日期的数据进行训练。
回答:
我曾经在R中开发了一种所谓的遗传时间序列。我使用遗传算法从多变量数据中筛选出最佳解决方案,这些解决方案适用于差异上的VAR或VECM。你的数据似乎更像是宏观经济或金融数据,而非用户中心数据,VAR或VECM似乎很合适。(当然,也可以以相同的方式处理时间序列数据,以便我们使用LSTM或其他方法,但这些方法非常常见)然而,我不知道差异上的VAR或VECM是否适用于二元分类标签。或许如果你计算一个度量结果,然后将其标签编码为分类特征(或先将其标签化为分类),那么VAR或VECM也可能是合适的。
不过,你可以将所有年度数据点添加到每家公司的单个数据点中来预测其生存情况,但这样你会失去很多洞察。如果你对与神经网络或弹性网(也可用于时间序列)略有不同的时间序列机器学习感兴趣,请告诉我。我们可以一起研究一些方案。或者我可以给你贴一些资源。
总结:1.)可以使用LSTM、弹性网(时间点可以是虚拟变量或作为横截面面板处理),或者你可以使用差异上的VAR和VECM,但输出变量会有所不同
2.)这是可能的,但你会随着时间失去信息。