☰
机器学习检测会计欺诈:逻辑回归、SVM与AdaBoost实战对比
2026/10/26 23:09:48 网站建设 项目流程

1. 从一篇文献说起:会计欺诈检测为什么成了机器学习的主战场

会计欺诈这件事,在资本市场里从来不是新鲜话题。一家上市公司如果动了歪心思,通过虚增收入、隐瞒负债、操纵利润等手段粉饰报表,受伤的往往是最后知道真相的中小投资者。传统的审计手段依赖人工经验和抽样核查,面对动辄几百页的财报附注和成千上万条交易记录,效率低、覆盖面窄,而且审计师本身也可能被精心设计的舞弊手法蒙蔽。这就引出了一个很自然的问题:能不能让机器来帮忙识别那些"看起来不太对劲"的财务数据?

我最初接触这个方向,是因为看到一篇题为"以机器学习方法检测美国上市公司会计欺诈行为"的文献。这篇文献的核心思路并不复杂——把会计欺诈检测建模成一个二分类问题,用历史财务数据训练模型,让模型学会区分"欺诈公司"和"正常公司"。但真正让我觉得有意思的是,它没有只用一种算法,而是把逻辑回归、支持向量机(SVM)、AdaBoost等多种方法放在一起比较,还引入了集成学习的思路。这背后其实藏着一个很实际的问题:在会计欺诈这种极度不平衡、样本量有限、特征维度又高的场景下,到底哪种机器学习方法更靠谱?

这篇文章想做的事情,就是把这套方法论拆开揉碎,从问题定义、数据准备、特征工程、模型选型到结果解读,完整地走一遍。不管你是刚入门机器学习的学生,还是想了解财务风控实战的从业者,都能从中找到可以直接参考的东西。我不会只告诉你"用逻辑回归就行",而是会解释为什么在这个场景下逻辑回归有它的优势,SVM在什么条件下更合适,AdaBoost又是怎么通过组合弱分类器提升效果的。这些"为什么",才是真正决定你能不能把模型用对的关键。

2. 会计欺诈检测的问题本质:一个极度不平衡的分类任务

2.1 欺诈样本为什么总是"稀有事件"

在动手写任何代码之前,必须先搞清楚这个问题的数据特性。美国上市公司里,真正被认定存在会计欺诈的比例其实非常低。根据一些学术研究的统计,在几千家上市公司中,每年被查实并处罚的欺诈案例可能只有几十到上百家。这意味着如果你直接拿全量数据来训练模型,正负样本比例可能达到1:100甚至更极端。

这种极端不平衡会带来一个很隐蔽的陷阱:模型只要把所有样本都预测为"正常公司",准确率就能轻松达到99%以上。但这个模型毫无价值,因为它一个欺诈公司都抓不出来。我在实际做这类项目时,第一件事从来不是急着上模型,而是先看标签分布。如果欺诈样本占比低于5%,就必须在采样策略、损失函数或者评价指标上做特殊处理。

注意:不要被高准确率迷惑。在欺诈检测场景下,召回率(Recall)和AUC往往比准确率更能反映模型的真实能力。

2.2 标签的定义比特征更难

会计欺诈检测里,最棘手的问题其实不是算法,而是"什么算欺诈"。学术研究通常采用美国证券交易委员会(SEC)的执法行动作为标签来源——被SEC认定存在会计违规的公司标记为欺诈样本,其余为正常样本。但这个定义有几个天然缺陷。

第一,只有被"抓到"的才算欺诈,那些手法高明、尚未被发现的舞弊行为会被错误地标记为正常样本,这就是所谓的"标签噪声"。第二,SEC的调查和处罚有滞后性,一家公司可能在欺诈发生两三年后才被处罚,如果你用当年的财务数据去对应处罚年份的标签,时间上就对不齐。第三,部分公司可能存在轻微的会计差错,但并未构成主观故意的欺诈,这类边界案例很难界定。

我在处理这类数据时,通常会做一个时间窗口的对齐:用欺诈行为发生前一到两年的财务数据作为特征,而不是用被处罚当年的数据。这样做的逻辑是,欺诈行为往往在爆发前就已经在财务指标上留下痕迹,比如应收账款异常增长、毛利率显著高于同行、经营现金流与净利润持续背离等。

2.3 特征工程:从财报里挖出"危险信号"

会计欺诈检测的特征工程,本质上是在寻找那些"财务逻辑上说不通"的信号。文献中常用的特征大致可以分成几类:

  • 盈利能力指标:毛利率、净利率、资产回报率(ROA)、净资产收益率(ROE)。欺诈公司往往表现出异常高的盈利能力,尤其是毛利率显著高于行业均值。
  • 营运能力指标:应收账款周转率、存货周转率、总资产周转率。虚增收入的公司通常伴随应收账款周转率下降。
  • 偿债能力指标:流动比率、速动比率、资产负债率。隐藏负债的公司可能表现出异常的负债率下降。
  • 现金流指标:经营现金流与净利润的比值。这是识别欺诈的"黄金指标"之一,因为利润可以操纵,但现金流很难长期造假。
  • 增长指标:营收增长率、净利润增长率。欺诈公司常常需要维持一个"好看"的增长故事。

除了这些原始财务比率,还可以构造一些衍生特征,比如"应计项目"(Accruals),即净利润与经营现金流之间的差额。学术研究表明,应计项目高的公司更可能涉及盈余操纵。我在实际项目中会把这些特征做标准化处理,因为不同公司的规模差异巨大,直接拿绝对数值做输入会让模型偏向大公司。

3. 逻辑回归、SVM与AdaBoost:三种方法在这个场景下的真实表现

3.1 逻辑回归:简单但不容易过拟合的基线

逻辑回归是会计欺诈检测文献里出现频率最高的方法之一,原因很直接:它的输出是一个概率值,可以解释为"这家公司存在欺诈的可能性"。对于审计师或风控人员来说,一个可解释的概率比一个黑箱的类别标签更有价值。

逻辑回归的数学形式并不复杂。它假设欺诈的概率 ( p ) 与特征向量 ( x ) 之间满足:

[ \ln\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n ]

右边是特征的线性组合,左边是"对数几率"(log-odds)。这个公式的好处是,每个特征的系数 ( \beta_i ) 可以直接解读为:该特征每增加一个单位,欺诈的对数几率变化多少。如果某个财务比率的系数显著为正,说明这个指标越高,欺诈风险越大。

但逻辑回归也有明显的局限。它假设特征与对数几率之间是线性关系,而现实中财务指标与欺诈风险的关系往往是非线性的。比如,毛利率过低可能说明公司经营困难,但毛利率过高同样可疑,这种"中间正常、两端异常"的关系,逻辑回归很难自动捕捉。此外,当特征之间存在多重共线性时,逻辑回归的系数估计会变得不稳定。

我在使用逻辑回归时,通常会配合L1或L2正则化。L1正则化(Lasso)可以把不重要的特征系数压缩到零,起到特征选择的作用;L2正则化(Ridge)则更适合处理共线性问题。在欺诈检测这种特征维度高、样本量有限的场景下,正则化几乎是必须的。

3.2 SVM:小样本高维场景下的利器

支持向量机(SVM)在会计欺诈检测中的应用,主要优势在于它擅长处理小样本、高维度的数据。SVM的核心思想是找到一个超平面,把欺诈公司和正常公司尽可能分开,并且让两类样本之间的"间隔"最大化。那些恰好落在间隔边界上的样本就是"支持向量",它们决定了分类边界的位置。

SVM之所以适合欺诈检测,有几个原因。第一,欺诈样本本身很少,SVM在小样本下的表现通常比需要大量数据训练的深度模型更稳定。第二,通过核函数(如RBF核),SVM可以处理非线性可分的情况,不需要手动构造多项式特征。第三,SVM的决策边界只依赖于支持向量,对异常值有一定的鲁棒性。

但SVM的调参比较讲究。惩罚系数 ( C ) 控制对误分类的容忍度:( C ) 越大,模型越倾向于把所有训练样本分对,容易过拟合;( C ) 越小,间隔越宽,但可能欠拟合。核函数的参数 ( \gamma ) 控制单个样本的影响范围:( \gamma ) 太大,模型会围绕每个样本画一个小圈,过拟合风险高;( \gamma ) 太小,模型过于平滑,可能欠拟合。我一般会用网格搜索配合交叉验证来选这两个参数,而不是凭感觉拍脑袋。

还有一个实际问题:SVM的输出不是概率,而是样本到超平面的距离。如果业务上需要"欺诈概率"这个指标,就需要用Platt缩放等方法把距离转换成概率。这一步在很多教程里被忽略,但在实际风控系统中很关键。

3.3 AdaBoost:把弱分类器组合成强分类器

AdaBoost是集成学习里最有代表性的算法之一,它的思路是"三个臭皮匠顶个诸葛亮"。具体来说,AdaBoost会训练一系列弱分类器(通常是决策树桩,即深度为1的决策树),每个弱分类器只比随机猜测好一点点。然后它把这些弱分类器加权组合起来,得到一个强分类器。

AdaBoost的精髓在于它的自适应重加权机制。第一轮训练后,被分错的样本会在下一轮获得更高的权重,迫使新的弱分类器去关注那些"难分"的样本。最终分类结果是所有弱分类器的加权投票,分类准确率高的弱分类器权重更大。

在会计欺诈检测中,AdaBoost的优势在于它能自动聚焦于那些难以区分的边界样本。欺诈公司和正常公司之间往往存在大量"灰色地带",AdaBoost通过不断调整样本权重,可以把这些边界刻画得更细致。此外,AdaBoost对特征缩放不敏感,不像SVM和逻辑回归那样需要严格的标准化。

但AdaBoost对噪声标签比较敏感。如果训练数据里有一些被错误标记的样本(比如未被发现的欺诈公司被标为正常),AdaBoost会不断给这些"错误样本"增加权重,导致模型跑偏。这也是为什么在欺诈检测中,标签质量比算法选择更重要。

3.4 三种方法的横向对比

维度逻辑回归SVMAdaBoost
可解释性高,系数直接反映特征影响低,核函数后难以解释中等,可通过特征重要性分析
小样本表现中等,需要正则化好,适合小样本高维中等,依赖弱分类器质量
非线性处理需手动构造特征核函数自动处理通过组合弱分类器处理
对噪声标签较鲁棒较鲁棒敏感
调参难度低中高中等
输出概率天然支持需额外校准可通过加权投票估计

这张表不是让你死记硬背,而是帮助你在实际项目中快速判断该从哪个方法入手。我的经验是:如果业务方需要解释"为什么这家公司被标记为高风险",优先用逻辑回归;如果样本量很小但特征维度很高,先试SVM;如果数据质量较好且追求更高的分类精度,AdaBoost或其它集成方法值得一试。

4. 集成学习:为什么"组合"往往比"单打独斗"更稳

4.1 偏差与方差的权衡

理解集成学习,首先要理解偏差和方差这对概念。偏差衡量的是模型预测值与真实值之间的系统性偏离,方差衡量的是模型在不同训练集上的预测波动。逻辑回归是一个高偏差、低方差的模型——它假设了线性的决策边界,如果真实关系是非线性的,偏差就大,但它在不同数据上的表现比较稳定。决策树则相反,是低偏差、高方差的模型——它可以拟合非常复杂的边界,但换一组训练数据,树的结构可能完全不同。

集成学习的核心目标,就是通过组合多个模型来降低方差(Bagging)或降低偏差(Boosting)。随机森林是Bagging的代表,它通过自助采样和随机特征选择来训练多棵决策树,然后投票取平均,主要降低方差。AdaBoost和梯度提升树(GBDT)是Boosting的代表,它们通过逐步修正前一个模型的错误来降低偏差。

在会计欺诈检测中,数据本身噪声大、样本少,单一模型很容易过拟合。集成学习通过"多个模型投票"的机制,可以在一定程度上抵消单个模型的随机误差。这也是为什么近年来的文献越来越倾向于使用集成方法,而不是单一分类器。

4.2 stacking:让模型学会"如何组合"

除了Bagging和Boosting,还有一种集成策略叫Stacking。它的做法是:先用多个基模型(比如逻辑回归、SVM、AdaBoost)分别做预测,然后把它们的预测结果作为新的特征,训练一个元模型(Meta-learner)来做最终判断。

Stacking在欺诈检测中的价值在于,不同模型可能捕捉到数据的不同侧面。逻辑回归擅长捕捉线性关系,SVM擅长处理高维边界,AdaBoost擅长聚焦难分样本。如果用一个元模型来学习"在什么情况下应该相信哪个基模型",理论上可以得到比任何单一模型都好的结果。

但Stacking也有代价。它的训练和推理成本更高,而且如果基模型之间高度相关,组合带来的增益就很有限。我在实际使用Stacking时,通常会确保基模型之间有足够的差异性——比如一个线性模型、一个核方法、一个树模型,而不是三个都是树模型。

4.3 类别不平衡的处理:采样、加权与阈值调整

回到那个老问题:欺诈样本太少怎么办?集成学习本身不能解决类别不平衡,但可以和以下几种策略配合使用。

第一种是过采样。最简单的是随机复制少数类样本,但这容易导致过拟合。更聪明的方法是SMOTE(合成少数类过采样技术),它在少数类样本之间做插值,生成新的合成样本。不过SMOTE在财务数据上要谨慎使用,因为插值出来的"公司"可能没有实际经济含义。

第二种是欠采样。随机丢弃多数类样本,让正负样本比例接近。缺点是会丢失大量正常公司的信息,可能影响模型对"正常"的刻画能力。

第三种是代价敏感学习。在损失函数里给少数类更高的权重,让模型更重视分错欺诈公司的代价。比如在逻辑回归中,可以把欺诈样本的权重设为正常样本的10倍甚至更高。AdaBoost本身也可以通过调整初始样本权重来实现类似效果。

第四种是阈值调整。模型输出的是概率,默认以0.5为阈值判断类别。但在欺诈检测中,你可以把阈值调低,比如0.3,这样更多公司会被标记为"疑似欺诈",提高召回率,代价是误报增多。具体阈值设多少,取决于业务上能承受多少误报,以及漏掉一个欺诈公司的代价有多大。

5. 从数据到模型:一套可复现的实操流程

5.1 数据获取与清洗的坑

如果你打算复现这篇文献的思路,第一步是拿到数据。美国上市公司的财务数据可以从公开的财务数据库中获取,比如Compustat、CRSP等。但这些数据库通常需要机构订阅,个人研究者可能不容易拿到。一个替代方案是使用SEC的EDGAR系统,它免费提供所有上市公司的申报文件,但需要自己解析XBRL格式的财务数据,工作量不小。

拿到数据后,清洗是绕不开的。常见的坑包括:缺失值、异常值、会计政策变更导致的指标不可比、并购重组导致的报表口径变化。我的做法是,先统计每个特征的缺失率,缺失超过30%的特征直接丢弃;缺失较少的用行业中位数填充。对于异常值,不要急着删除,先检查是不是数据录入错误,如果不是,可以用缩尾处理(Winsorization)把极端值压缩到1%和99%分位数。

提示:财务数据的时间对齐非常重要。确保特征数据的时间戳早于标签事件的时间戳,否则会引入"未来信息泄露",导致模型在测试集上表现虚高。

5.2 特征标准化与降维

逻辑回归和SVM对特征的尺度敏感,所以标准化是必须的。常用的方法是Z-score标准化,即把每个特征减去均值再除以标准差。但要注意,均值和标准差只能从训练集计算,然后应用到测试集,否则会泄露测试集信息。

如果特征维度很高(比如超过50个),可以考虑做主成分分析(PCA)降维。但PCA的缺点是降维后的主成分失去了原始特征的经济含义,解释性变差。在欺诈检测中,解释性往往比一点点精度提升更重要,所以我一般只在特征高度相关且数量过多时才用PCA。

5.3 交叉验证与时间序列分割

普通的K折交叉验证在欺诈检测中有一个隐患:如果数据是面板数据(同一家公司多年的观测),随机划分会导致同一家公司的不同年份数据同时出现在训练集和测试集中,造成信息泄露。更合理的做法是按公司划分,或者按时间划分——用早期年份的数据训练,用后期年份的数据测试。

我在实际项目中通常采用"时间序列交叉验证":比如用2000-2010年的数据训练,2011-2012年验证,2013-2014年测试。这样更接近真实的风控场景——你只能用过去的数据预测未来。

5.4 模型评估:不要只看准确率

前面已经强调过,准确率在类别不平衡场景下会严重误导。我通常关注以下几个指标:

  • 召回率(Recall):在所有真实欺诈公司中,模型抓出了多少。这个指标直接关系到"漏网之鱼"的多少。
  • 精确率(Precision):在模型标记为欺诈的公司中,有多少是真的欺诈。这个指标关系到误报带来的调查成本。
  • F1分数:精确率和召回率的调和平均,适合综合衡量。
  • AUC-ROC:衡量模型在不同阈值下的整体排序能力,对类别不平衡不敏感。
  • AUC-PR:在极度不平衡时,精确率-召回率曲线下的面积比ROC曲线更有参考价值。

我一般会同时看AUC-ROC和AUC-PR。如果两者差距很大,说明模型在少数类上的表现不够稳定,需要进一步调整。

6. 实操中的经验与教训:那些文档里不会写的东西

6.1 标签噪声是最大的敌人

我做过几个财务风控相关的项目,最大的体会是:算法再先进,也救不了糟糕的标签。会计欺诈的标签尤其如此,因为只有被监管机构查实的案例才算正样本,而那些"正在欺诈但还没被发现"的公司会被错误地标为负样本。如果这类噪声样本占比超过10%,模型学到的可能就是"如何识别被查处的公司"而不是"如何识别欺诈行为"。

应对标签噪声,有几个思路。一是使用对噪声鲁棒的损失函数,比如Huber损失或对称交叉熵。二是采用多标签或多来源标签,比如同时参考监管处罚、审计意见、财务重述等多个信号,而不是只依赖单一来源。三是在模型训练后,人工检查那些被模型标记为高概率但标签为正常的样本,看看是不是潜在的漏标案例。

6.2 特征的经济含义比统计显著性更重要

在特征选择时,很多人只看统计检验的p值或模型的特征重要性排序。但在财务欺诈检测中,一个特征是否应该保留,更重要的是它有没有合理的经济解释。比如,"其他应收款占总资产比例"这个特征,如果它在模型中重要性很高,你需要能解释为什么——通常是因为这个科目容易被用来隐藏关联方资金占用或虚增资产。如果一个特征的重要性很高但你解释不了,那它很可能是过拟合的产物,换一组数据就会失效。

6.3 模型只是工具,调查才是目的

最后一点,也是我觉得最容易被技术背景的人忽略的:机器学习模型在会计欺诈检测中的角色,是"筛选器"而不是"判决器"。模型输出的是"这家公司值得进一步调查"的信号,而不是"这家公司一定在欺诈"的结论。真正认定欺诈,需要审计师、律师、监管机构的专业判断。

所以,在实际系统中,模型的输出应该和调查流程无缝衔接。比如,模型给出一个风险评分,风控团队根据评分排序,优先调查高分公司。同时,调查结果应该反馈回模型,形成闭环——被查实欺诈的公司标签更可靠,被排除嫌疑的公司可以作为负样本补充。这种"人机协同"的机制,比单纯追求模型精度更有实际价值。

我在搭建这类系统时,会特别关注模型的可解释性。逻辑回归的系数、决策树的规则、SHAP值等,都可以帮助调查人员理解"为什么这家公司被标记为高风险"。如果模型只是一个黑箱,调查人员很难信任它,更不会把它纳入日常工作流程。

6.4 一个容易被忽略的细节:行业调整

不同行业的财务特征差异巨大。比如,软件公司的毛利率天然高于制造业,金融公司的资产负债率天然高于消费品公司。如果直接拿全样本训练模型,模型可能学到的是"行业差异"而不是"欺诈信号"。解决办法是做行业调整——把每个财务指标减去行业中位数,或者用行业虚拟变量做控制。我在实际项目中,通常会先按行业分层,然后在每个行业内单独训练模型,或者至少在特征工程阶段做行业中性化处理。

这个细节在很多论文里被一笔带过,但在实际应用中,它可能决定模型是"能用"还是"不能用"。我见过一个模型在全体样本上AUC达到0.85,但按行业拆开看,在金融行业只有0.6,在制造业却有0.9。如果不做行业分析,你根本不知道模型在哪些行业靠谱、哪些行业不靠谱。

7. 写在最后:一点个人体会

会计欺诈检测这个方向,技术上的门槛其实没有想象中那么高。逻辑回归、SVM、AdaBoost都是经典算法,网上教程一抓一大把。真正难的是对业务的理解——理解财务数据背后的经济逻辑,理解欺诈行为的动机和模式,理解监管环境和审计流程。我见过太多技术很强但业务理解不足的模型,在实验室里表现漂亮,一到真实场景就露馅。

如果你是从机器学习入门的角度来看这个课题,我的建议是:不要只跑一遍sklearn的API就完事。试着去理解每个特征的经济含义,试着去解释模型为什么做出某个判断,试着去思考如果标签有噪声该怎么办。这些思考,比调参技巧更能让你在这个方向上走得更远。

另外,类别不平衡、标签噪声、时间对齐、行业调整这几个问题,几乎在每一个真实的风控项目里都会遇到。把这几个问题吃透,你再去处理信贷违约、保险欺诈、洗钱检测等类似任务时,会发现底层逻辑是相通的。机器学习方法只是工具,真正值钱的是你对问题本质的理解。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询