You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LightAutoML训练银行流水多分类模型时出现0模型训练完成错误

问题描述

使用LightAutoML的TabularAutoML处理银行流水多分类任务时触发AssertionError,报错提示:Pipeline finished with 0 models for some reason. Probably one or more models failed。任务基于[id, Date, TextTransactionBrief, Charge, Deposit]特征预测Categoria列(如薪资、税费等类别),尝试加入文本特征、简化参数配置后问题仍存在。

原始代码

import pandas as pd
from lightautoml.automl.presets.text_presets import TabularAutoML
from lightautoml.tasks import Task

N_THREADS = 4  # 线程数

# 从CSV文件加载数据集
data = pd.read_csv('C:/Dataset2023_24.csv')

# 检查'Categoria'列是否存在NaN值,若有则用默认值填充或删除
data['Categoria'] = data['Categoria'].fillna('Desconocido')

# 定义字段角色:'target'为类别列,'drop'为需要丢弃的id列
roles = {'target': 'Categoria', 'drop': ['id']}

# 定义任务类型:多分类任务
task = Task('multiclass')  # 若只有两类可改为'binary'

# 实例化AutoML模型
automl = TabularAutoML(task=task,
                       cpu_limit=N_THREADS,
                       reader_params = {'n_jobs':N_THREADS},
                       general_params = {'use_algos':[['linear_l2','lgb','lgb_tuned']]},
                       tuning_params = {'max_tuning_time':25*60},
                       timeout=600) # 可调整超时时间(单位:秒)

# 训练模型
oof_pred = automl.fit_predict(data, roles=roles)

# 输出Out-of-Fold(OOF)预测结果
print(oof_pred)

# 如需保存训练好的模型
automl.save_model('trained_model.pkl')

# 若要对新数据集进行预测,可使用以下代码:
# test_data = pd.read_csv('path_to_test_data.csv')
# preds = automl.predict(test_data)
# print(preds)

报错日志

Traceback (most recent call last):
  File "C:\Users\Compumex\Documents\Desarrollo\MainTabSBC_GPT.py", line 29, in <module>
    oof_pred = automl.fit_predict(data, roles=roles)
  File "C:\Users\Compumex\AppData\Local\Programs\Python\Python310\lib\site-packages\lightautoml\automl\presets\tabular_presets.py", line 721, in fit_predict
    oof_pred = super().fit_predict(train, roles=roles, cv_iter=cv_iter, valid_data=valid_data, verbose=verbose)
  File "C:\Users\Compumex\AppData\Local\Programs\Python\Python310\lib\site-packages\lightautoml\automl\presets\base.py", line 208, in fit_predict
    result = super().fit_predict(
  File "C:\Users\Compumex\AppData\Local\Programs\Python\Python310\lib\site-packages\lightautoml\automl\base.py", line 218, in fit_predict
    pipe_pred = ml_pipe.fit_predict(train_valid)
  File "C:\Users\Compumex\AppData\Local\Programs\Python\Python310\lib\site-packages\lightautoml\pipelines\ml\base.py", line 135, in fit_predict
    assert (
AssertionError: Pipeline finished with 0 models for some reason.
Probably one or more models failed

简化参数版本代码

task = Task('multiclass')  # 若只有两类可改为'binary'

# 实例化AutoML模型
automl = TabularAutoML(task=task, timeout=3600)  # 可调整超时时间(单位:秒)

# 训练模型
oof_pred = automl.fit_predict(data, roles=roles)

# 输出Out-of-Fold(OOF)预测结果
print(oof_pred)

解决思路与方案

1. 排查数据集核心问题

  • 目标列校验:检查Categoria列的类别分布,确认是否存在样本数为0的类别,或所有样本属于同一类别(这种情况多分类任务无意义)。执行以下代码查看:
    print(data['Categoria'].value_counts())
    
  • 特征数据校验:
    • 检查Charge、Deposit是否存在大量缺失值或异常值(如无穷大):
      print(data[['Charge', 'Deposit']].isna().sum())
      print(data[['Charge', 'Deposit']].describe())
      
    • 确认Date列是否为字符串格式,未转换为datetime可能导致特征处理失败,建议转换:
      data['Date'] = pd.to_datetime(data['Date'], errors='coerce')
      # 检查转换后缺失值
      print(data['Date'].isna().sum())
      
    • 检查TextTransactionBrief是否全为空值,若为空则文本特征无意义,需移除该列或填充:
      print(data['TextTransactionBrief'].isna().sum())
      

2. 调整LightAutoML配置与日志

  • 开启详细日志:在TabularAutoML实例化时添加verbose=3,查看每个模型训练的具体报错信息,定位是哪个模型失败:
    automl = TabularAutoML(task=task,
                           cpu_limit=N_THREADS,
                           reader_params={'n_jobs':N_THREADS},
                           general_params={'use_algos':[['linear_l2','lgb','lgb_tuned']]},
                           tuning_params={'max_tuning_time':25*60},
                           timeout=600,
                           verbose=3)
    
  • 明确文本特征角色:使用text_presets的TabularAutoML时,需在roles中指定文本列,否则模型无法正确处理文本特征:
    roles = {'target': 'Categoria', 'drop': ['id'], 'text': ['TextTransactionBrief']}
    
  • 简化模型测试:先只训练单个简单模型(如linear_l2),排除流水线复杂配置的问题:
    automl = TabularAutoML(task=task,
                           cpu_limit=N_THREADS,
                           reader_params={'n_jobs':N_THREADS},
                           general_params={'use_algos':[['linear_l2']]},
                           timeout=1200,
                           verbose=3)
    
  • 确认任务类型:若Categoria列只有2个类别,需将Task改为binary,错误的任务类型会导致模型训练失败。

3. 单独调试单个模型

若上述步骤仍无法定位问题,可单独训练单个模型,排查是否为数据适配问题:

import pandas as pd
from lightautoml.tasks import Task
from lightautoml.ml_algo.lgb import LGB
from lightautoml.pipelines.features.lgb_pipeline import LGBSimpleFeatures
from lightautoml.pipelines.ml.base import MLPipeline

data = pd.read_csv('C:/Dataset2023_24.csv')
data['Categoria'] = data['Categoria'].fillna('Desconocido')
data['Date'] = pd.to_datetime(data['Date'], errors='coerce')
roles = {'target': 'Categoria', 'drop': ['id'], 'text': ['TextTransactionBrief']}
task = Task('multiclass')

# 构建简单特征流水线与单个LGB模型
feats_pipe = LGBSimpleFeatures()
ml_algo = LGB(task=task)
pipe = MLPipeline([ml_algo], pre_selection=None, features_pipeline=feats_pipe)

# 训练并查看报错
pipe.fit(data, roles=roles)

内容的提问来源于stack exchange,提问作者Matriz51

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:44:57