
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。这种波动在投研场景下是不可接受的。我的改进方案是把判断拆成三步第一步让模型列出这家公司的三个主要风险点和三个主要优势点。第二步让模型针对每个风险点和优势点分别判断这个因素在违约样本中出现的频率是高还是低。第三步综合以上分析给出违约概率。这个分步法的核心逻辑是强制模型做特征分解而不是直接做端到端的语义匹配。实测下来分步法的三次输出标准差从原来的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可以帮你看但拍板还是得人来。