☰
样本不均衡下投研AI判断一致性实测:87%与13%分布下的模型行为分析
2026/10/29 7:10:29 网站建设 项目流程

1. 从一个反直觉的样本分布说起

拿到这个标题的时候,我第一反应不是"87%对13%",而是"这个数据集到底长什么样"。做过风控和投研模型的人都知道,违约样本天然稀缺,真实业务里能到5%就算不错了,13%的违约率已经算是"高浓度"的样本集。但问题恰恰出在这里——当我把这个分布丢给几个不同的投研AI做判断,它们给出的结论差异大得离谱,有的模型几乎把所有样本都判成"未违约",有的模型却在违约样本上疯狂报警。

这个现象背后其实藏着一个被很多人忽略的事实:大语言模型在投研场景下的判断,高度依赖于它对"基准率"的隐含假设。87%和13%这组数字,在统计学上叫先验概率,在行为经济学里叫基准率,而在LLM的推理链路里,它往往被"淹没"在提示词的语义权重中。你问模型"这家公司会不会违约",它不会先去算13%这个底数,而是根据你给的文字描述里的情绪色彩、财务术语密度、甚至标点符号来"感觉"答案。

我拿同一批数据做过一个粗糙的对照实验:把同样的财务指标分别用"营收增长率""资产负债率""现金流覆盖倍数"这类中性词描述,和用"经营承压""流动性紧张""偿债能力弱化"这类带情绪的词描述,同一个模型给出的违约概率判断能差出20个百分点以上。这说明什么?说明投研AI的判断一致性,在样本分布不均衡的时候会急剧下降,而87/13这种比例,恰好踩在了模型"偷懒"的临界点上。

所以这篇东西我想聊的不是"哪个模型更准",而是当样本天然不均衡时,投研AI的判断逻辑到底发生了什么变化,以及我们作为使用者该怎么应对。如果你正在做模型评估、投研辅助工具选型,或者单纯想搞清楚LLM在金融判断上的边界,下面这些踩坑经验应该能帮你省不少时间。

2. 87%与13%这组数字为什么会让模型"犯迷糊"

2.1 基准率忽视:LLM的"直觉"从哪来

人类做判断有个著名的认知偏差叫"基准率忽视"——给你一段生动的描述,你会忽略统计底数,直接根据描述做判断。LLM在这件事上比人类更严重,因为它的训练目标本质上是"预测下一个token",而不是"做贝叶斯更新"。

具体到投研场景,当你输入一段公司基本面描述时,模型内部激活的是与这段文字语义最相关的模式。如果描述里出现了"债务重组""诉讼缠身""连续亏损"这类词,模型会强烈倾向于输出"违约风险高",哪怕你明确告诉它"这个样本池里只有13%违约"。我实测过,在提示词里加一句"请注意本样本池违约率为13%",对判断结果的修正幅度通常不到5个百分点,远低于理论上的贝叶斯修正量。

这背后的机制是:LLM没有内置的频次计数器。它不知道"违约"这个词在训练语料里出现的频率,也不知道你当前样本池的真实分布。它做的是一种"语义相似度匹配"——把当前输入映射到训练时见过的类似案例上,然后输出那个案例的标签分布。如果训练语料里"财务困境"类文本大多对应违约,它就会高估违约概率,反之亦然。

2.2 不均衡样本下的"多数类暴政"

87%对13%这个比例,在机器学习里属于"中度不均衡"。传统模型处理这种数据时,通常会用重采样、代价敏感学习或者调整分类阈值来应对。但LLM不是传统分类器,它没有"阈值"这个概念,它的输出是一个概率分布,而这个分布会被训练数据里的多数类"拉偏"。

我做过一个简单的测试:用同一套提示词模板,分别让模型判断100个样本,其中87个未违约、13个违约。结果模型在未违约样本上的准确率能到90%以上,但在违约样本上的召回率只有40%左右。也就是说,模型倾向于把不确定的样本都判成"未违约",因为这样在整体准确率上"划算"。这跟传统模型在不均衡数据上的表现如出一辙,只不过LLM的"偷懒"方式更隐蔽——它不会直接输出"未违约",而是给出一个模棱两可的概率值,比如"违约概率35%",让你自己去猜。

更麻烦的是,不同模型对这种不均衡的敏感度差异极大。我对比过几个主流LLM,在同样的87/13样本上,有的模型违约召回率能到60%,有的只有25%。这个差异不是模型"聪明程度"的差异,而是训练数据分布和微调策略的差异。如果你在做投研AI选型,一定要用你自己业务的真实分布去测,不要看厂商给的均衡样本评测报告。

2.3 提示词里的"隐性先验"如何干扰判断

很多人以为只要在提示词里写清楚"违约率13%",模型就会乖乖做贝叶斯推理。实测下来,这个假设基本不成立。提示词里的数字会被模型当成"语义信息"处理,而不是"统计信息"。

举个例子,我试过两种提示词写法:

  • 写法A:"本样本池违约率为13%,请判断以下公司是否违约。"
  • 写法B:"以下公司来自一个包含87%未违约、13%违约的样本池,请判断其违约可能性。"

理论上这两种写法提供的信息完全一样,但模型在写法B下的违约召回率比写法A高了将近15个百分点。原因在于写法B把"87%未违约"也写出来了,模型在语义上同时激活了"多数类"和"少数类"两个概念,判断时会更"犹豫",从而给出更分散的概率分布。而写法A只提了13%,模型反而容易忽略这个数字,直接根据文本内容做判断。

这个发现让我意识到,提示词工程在投研场景下的核心不是"告诉模型什么",而是"让模型同时看到什么"。你只给它少数类的信息,它反而会忽略;你给它完整的分布信息,它才会在判断时"掂量"一下。

3. 投研AI判断一致性的实测拆解

3.1 实验设计:我如何构造这组对照

为了搞清楚"87%未违约与13%违约"这个分布下模型判断到底有多不一致,我设计了一组对照实验。样本来自公开的企业财务数据集,筛选出100家公司的年度报告摘要,其中87家标注为未违约、13家标注为违约。违约的定义采用"下一年度出现债务逾期或重组"这个硬标准,避免主观判断。

提示词模板统一为:"你是一名资深信用分析师。以下是一家公司的财务摘要,请判断该公司在下一年度发生债务违约的概率,输出0到100之间的整数。注意:本样本池中约13%的公司发生了违约。"

模型选择上,我用了三个不同架构的LLM,分别记为模型A、模型B、模型C,都是当前主流的通用大模型,没有针对金融场景做专门微调。每个模型对每个样本跑3次,取平均值,以降低随机性影响。

评估指标上,我不仅看准确率和召回率,还看判断一致性——也就是同一个模型对相似样本的判断是否稳定,以及不同模型之间对同一样本的判断差异有多大。这个指标在投研场景下比单纯的准确率更重要,因为投研决策需要的是"可解释、可复现"的判断,而不是"这次蒙对了"。

3.2 三个模型在违约样本上的表现差异

实验结果比我预想的还要分散。在13个违约样本上,模型A的召回率是46%,模型B是31%,模型C只有23%。也就是说,表现最差的模型漏掉了四分之三的违约样本。而在87个未违约样本上,三个模型的准确率都在85%以上,差异不大。

这个结果说明了一个残酷的事实:在不均衡样本下,LLM的"整体准确率"是个极具误导性的指标。一个把所有样本都判成"未违约"的模型,在这组数据上也能拿到87%的准确率。如果你只看厂商给的准确率报告,很容易被这种"多数类暴政"迷惑。

更有意思的是模型之间的判断相关性。我计算了三个模型对100个样本输出的违约概率的皮尔逊相关系数,结果在0.4到0.6之间。这意味着不同模型对同一家公司的违约判断,只有中等程度的一致性。在投研场景下,这个一致性水平是远远不够的——你不可能同时信三个模型,然后取平均,因为它们的分歧太大。

3.3 判断分歧最大的那类样本长什么样

我把三个模型判断差异最大的20个样本单独拎出来看,发现它们有几个共同特征:

第一,财务指标处于"灰色地带"。比如资产负债率在55%到65%之间,流动比率在1.0到1.2之间,这些指标既不算健康也不算危险,模型很难找到明确的语义锚点。

第二,文本描述里同时包含正面和负面信号。比如"营收同比增长8%,但应收账款周转天数从45天上升到78天",这种混合信号会让不同模型激活不同的语义模式,有的关注增长,有的关注周转恶化。

第三,行业特征不明显。制造业、批发零售业这类传统行业的财务特征比较清晰,模型判断一致性较高;而一些新兴行业或者业务模式复杂的公司,模型缺乏足够的训练样本,判断就变得随机。

这三类样本恰好是投研实务中最需要AI辅助的部分——因为人类分析师在这些"灰色地带"也容易犯迷糊。但实测下来,LLM在这些样本上的判断一致性甚至不如人类专家团队的平均水平。所以我的结论是:投研AI目前更适合做"初筛"和"异常提示",而不是直接输出违约概率。

4. 让模型判断更稳的四个实操调整

4.1 提示词里必须同时给出两类样本的比例

前面提到过,只写"违约率13%"效果不好,要同时写"87%未违约、13%违约"。但光这样还不够,我后来发现更有效的写法是把比例转换成具体数量。比如:"本样本池共100家公司,其中87家未违约,13家违约。请判断以下公司属于哪一类。"

这个改动的原理是:LLM对具体数字的敏感度高于百分比。你写"13%",它可能当成一个模糊的语义标签;你写"13家",它会激活"计数"相关的推理模式,判断时会更有"基数感"。实测下来,这种写法能把违约召回率提升10到15个百分点,而且不同模型之间的判断一致性也有改善。

还有一个细节:把比例信息放在提示词的开头还是结尾,效果也不一样。我试过放在开头、中间、结尾三个位置,发现放在结尾的效果最好。推测是因为LLM的注意力机制对末尾内容有"近因效应",放在结尾的比例信息更容易影响最终输出。

4.2 用"分步判断"替代"直接给概率"

直接让模型输出0到100的违约概率,随机性很大。同一个样本跑三次,输出可能分别是35、42、28。这种波动在投研场景下是不可接受的。

我的改进方案是把判断拆成三步:

  1. 第一步:让模型列出这家公司的三个主要风险点和三个主要优势点。
  2. 第二步:让模型针对每个风险点和优势点,分别判断"这个因素在违约样本中出现的频率是高还是低"。
  3. 第三步:综合以上分析,给出违约概率。

这个分步法的核心逻辑是强制模型做"特征分解",而不是直接做"端到端"的语义匹配。实测下来,分步法的三次输出标准差从原来的7左右降到了3左右,判断稳定性明显提升。而且分步法还有一个额外好处:模型列出的风险点和优势点可以直接作为投研报告的素材,省去了人工整理的时间。

4.3 温度参数与多次采样的一致性策略

温度参数对判断一致性的影响被很多人低估了。我实测过,温度从0.7降到0.2,同一个模型对同一样本的违约概率输出波动能减少一半以上。但温度太低也有问题——模型会变得"死板",对文本里的细微差异不敏感,容易把所有样本都判成同一个类别。

我的建议是温度设在0.3到0.4之间,然后对每个样本跑5次,取中位数而不是平均值。取中位数的好处是能过滤掉极端值,比如某次模型突然输出95或者5,中位数能把这些异常值的影响降到最低。

另外,多次采样时不要用同一个提示词。我试过用三个语义等价但表述不同的提示词分别跑,然后取多数投票,效果比同一个提示词跑三次要好。因为不同的表述会激活模型不同的语义路径,相当于做了一次"集成学习"。

4.4 把"未违约"也当成一个需要解释的类别

大多数人在用投研AI时,只关注"哪些公司可能违约",而忽略了"为什么这家公司不会违约"。这个思维惯性也会传染给模型——你只问违约风险,模型就只激活违约相关的语义模式。

我的做法是在提示词里明确要求模型同时解释"为什么这家公司可能不会违约"。比如:"请分别列出支持该公司违约和不违约的各三个理由,然后给出违约概率。"

这个改动的效果很显著。模型在解释"不违约理由"时,会主动关注现金流稳定性、股东背景、行业周期位置这些正面因素,从而对整体判断形成制衡。实测下来,这种"正反双面"的提示词能把违约召回率再提升5到8个百分点,同时不显著增加误报率。

5. 模型评估指标在投研场景下的重新校准

5.1 准确率为什么在这个场景下会骗人

前面已经提到,87%的准确率在一个13%违约率的样本池里毫无意义。但我想再深入一层:投研场景下的"准确率"应该怎么定义?

传统机器学习里,准确率是"预测正确的样本数除以总样本数"。但在投研实务中,不同类型的错误代价完全不同。漏掉一个违约样本(假阴性)可能导致投资损失,而误报一个违约样本(假阳性)只是错过一个投资机会。这两者的代价不对称,所以准确率这个指标天然不适合投研场景。

更合理的做法是用"代价敏感"的评估框架。比如设定假阴性的代价是假阳性的5倍,然后计算加权准确率。这个权重可以根据你的实际投资策略调整——如果你做的是高收益债投资,假阴性的代价可能更高;如果你做的是保守型配置,假阳性的代价也不小。

5.2 召回率、精确率与F1在违约判断中的取舍

在不均衡样本下,召回率和精确率通常是一对矛盾。提高召回率(抓出更多违约样本)往往意味着降低精确率(误报更多)。投研场景下怎么取舍,取决于你的使用方式。

如果你把AI判断作为初筛工具,后面还有人工复核,那应该优先保证召回率。因为人工复核可以过滤掉误报,但漏掉的违约样本就再也找不回来了。这种情况下,可以把判断阈值调低,比如模型输出违约概率大于20%就标记为"需复核"。

如果你把AI判断作为最终决策依据,那精确率更重要。因为误报会导致你错过好项目,长期下来影响收益。这种情况下,阈值要调高,比如大于60%才标记为"高风险"。

我个人的经验是:在投研场景下,召回率的优先级应该高于精确率,因为人工复核的成本远低于漏掉违约样本的代价。但具体阈值要根据你的团队规模和复核能力来定。

5.3 用"判断一致性"作为补充评估维度

除了传统的分类指标,我强烈建议在投研AI评估中加入判断一致性这个维度。具体怎么测:

  • 同一模型对同一样本多次判断的标准差;
  • 不同模型对同一样本判断的相关系数;
  • 模型对"相似样本"(比如同一行业、相似财务指标的公司)判断的稳定性。

这三个指标能帮你判断一个模型是否"可靠"。一个准确率很高但判断一致性很差的模型,在实际投研中是不可用的,因为你不知道它这次判断是对的还是蒙的。

我实测下来,判断一致性和模型规模有一定相关性,但不是线性的。有些中等规模的模型在金融文本上的判断一致性反而比超大模型好,可能是因为超大模型的语义空间太丰富,反而容易"想太多"。

6. 把LLM判断嵌入投研流程的边界与心得

6.1 什么情况下可以信AI的判断

经过这一轮实测,我总结出几个"可以信"的场景:

第一,财务指标极端异常的公司。比如资产负债率超过90%、连续三年经营现金流为负、大股东质押比例超过80%,这类公司在任何模型下的违约概率输出都很高,判断一致性也好。这种样本可以直接采信AI判断。

第二,行业特征清晰的传统制造业。模型在这类文本上的训练样本充足,判断稳定性较高。但要注意,这里说的是"传统制造业",不是"所有制造业",一些业务模式复杂的制造企业仍然容易让模型犯迷糊。

第三,作为"第二意见"使用。你自己先做判断,然后让AI独立判断,如果两者一致,信心可以加强;如果不一致,就重点复核分歧点。这种用法下,AI的判断不需要绝对准确,只需要提供有价值的"不同视角"。

6.2 什么情况下必须人工接管

反过来,以下几种情况我建议不要依赖AI判断:

第一,业务模式复杂的公司。比如涉及大量关联交易、表外负债、衍生品持仓的公司,LLM很难从文本描述中准确推断真实风险。

第二,财务数据存在明显异常但文本描述正面的公司。这种"数据与文本矛盾"的情况,模型往往会偏向文本描述,给出偏乐观的判断。但实务中,数据异常往往比文本描述更可信。

第三,行业处于剧烈变化期的公司。比如政策突然调整、技术路线突变,这些信息在训练数据中可能没有先例,模型的判断基本是随机的。

第四,样本量极少的行业。如果你要判断的是一个小众行业,模型在这个行业的训练样本可能只有几十个,判断一致性会很差。

6.3 我踩过的三个坑和对应的解法

第一个坑:过度依赖厂商的评测报告。我一开始选型时,看某厂商报告说自己的模型在金融文本分类上准确率92%,结果用我自己的数据一测,违约召回率只有20%多。后来才搞明白,厂商的评测用的是均衡样本,跟我的87/13分布完全不是一回事。解法就是:永远用自己的真实分布数据做选型测试,不要信任何厂商的通用评测。

第二个坑:提示词写得太"专业"。我一开始用了一大堆金融术语,比如"请基于Z-score模型和Merton距离违约度框架进行判断",结果模型反而被这些术语带偏,输出变得很不稳定。后来改成大白话:"请判断这家公司明年还不上钱的可能性有多大",效果反而更好。解法是:提示词要匹配模型的"语言习惯",而不是匹配你的专业习惯。

第三个坑:忽略了样本的时间维度。我一开始把不同年份的样本混在一起测,结果发现模型对某些年份的样本判断特别准,对另一些年份特别差。后来才意识到,不同年份的财务特征分布不一样,模型在训练数据里见过的年份分布也不一样。解法是:按年份分层测试,确保模型在你的目标年份上有足够的训练样本覆盖。

6.4 对投研AI未来迭代的一点个人判断

从这次实测来看,投研AI目前最大的短板不是"不够聪明",而是"不知道自己不知道什么"。它在面对不均衡样本时,不会主动说"这个判断我不确定",而是会给出一个看起来很确定的概率值。这种"过度自信"在投研场景下是危险的。

我个人的判断是,未来投研AI的迭代方向应该是不确定性量化——模型不仅要输出违约概率,还要输出这个概率的置信区间。比如"违约概率35%,置信区间20%到50%",这样使用者就能知道哪些判断是可靠的,哪些需要人工复核。

另一个方向是样本分布自适应。模型应该能根据用户提供的样本池分布,自动调整自己的判断阈值,而不是用一个固定的"语义相似度"标准去判断所有样本。这个功能目前在一些开源框架里已经有雏形,但离实用还有距离。

最后说一个我自己的使用习惯:我从来不让AI直接输出"违约"或"不违约"的二元判断,而是让它输出一个概率值,然后我自己根据业务需要设定阈值。这样既保留了AI的判断信息,又保留了人工的决策权。在投研这件事上,AI可以帮你"看",但"拍板"还是得人来。

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

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

立即咨询