为什么逻辑回归结果会和autogluon一摸一样啊

我用了逻辑回归与AutoGluon两个方法构架评分卡,按理说AutoGluon构建的模型roc_auc要更好啊,但是结果确是,他俩输出的结果一模一样,为什么会一模一样啊?

Xtr_woe = data_tr_woe.drop(['isDefault','type'],axis=1)
Ytr_woe = data_tr_woe['isDefault']
Xts_woe = data_ts_woe.drop(['isDefault','type'],axis=1)
Yts_woe = data_ts_woe['isDefault']
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(Xtr_woe,Ytr_woe)
from toad.metrics import KS, F1, AUC

EYtr_proba = lr.predict_proba(Xtr_woe)[:,1]
EYtr = lr.predict(Xtr_woe)


print('Training error')
print('KS:', KS(EYtr_proba,Ytr_woe))
print('AUC:', AUC(EYtr_proba,Ytr_woe))

EYts_proba = lr.predict_proba(Xts_woe)[:,1]
EYts = lr.predict(Xts_woe)

print('\nTest error')
print('KS:', KS(EYts_proba,Yts_woe))
print('AUC:', AUC(EYts_proba,Yts_woe))

这是逻辑回归的代码,我一个参数都没调

import autogluon
from autogluon.tabular import TabularDataset,TabularPredictor  
import pandas as pd
import numpy as np
label='isDefault'
train_data=TabularDataset(data_tr_woe.drop(["type"],axis=1)  )
metric = 'roc_auc'
predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data,presets='best_quality')
best=predictor.get_model_best()
print(best)
test_data=TabularDataset(data_ts_woe.drop(['isDefault','type'],axis=1))
auto_proba=predictor.predict_proba(test_data)
auto_proba = np.array(EYts_proba).flatten() 
print(auto_proba )
print(len(auto_proba ))
print('\nTest error')
print('KS:', KS(auto_proba,Yts_woe))
print('AUC:', AUC(auto_proba,Yts_woe))

这是auto的代码,他俩输出的proba一模一样,我要崩溃了


import autogluon
from autogluon.tabular import TabularDataset,TabularPredictor  
import pandas as pd
import numpy as np
label='isDefault'
train_data=TabularDataset(data_tr_woe.drop(["type"],axis=1)  )
metric = 'roc_auc'
predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data,presets='best_quality',auto_stack=True)
test_data=TabularDataset(data_ts_woe.drop(['isDefault','type'],axis=1))
predictor.predict_proba(test_data)
auto_proba=predictor.predict_proba(test_data)
auto_proba=auto_proba.values[:,1]
auto_proba
auto_proba = np.array(auto_proba).flatten() 
print(auto_proba )
print(len(auto_proba ))
print('Training error')
print('KS:', KS(train_proba,Ytr_woe))
print('AUC:', AUC(train_proba,Ytr_woe))




print('\nTest error')
print('KS:', KS(auto_proba,Yts_woe))
print('AUC:', AUC(auto_proba,Yts_woe))



直接复制粘贴我给的,出结果,就是变量赋予错误了。

该回答引用ChatGPT

可能是因为你在计算 AutoGluon 的概率预测时使用了错误的变量。在你的代码中,你已经计算了逻辑回归的概率预测并将其存储在 EYts_proba 中,但是在计算 AutoGluon 的概率预测时,你使用了另一个变量 auto_proba,这个变量的值似乎没有被计算,而是直接使用了 EYts_proba 的值,这样就导致了两个模型输出的概率预测结果一模一样。

请尝试将以下代码行:


auto_proba = np.array(EYts_proba).flatten()

替换为:


auto_proba = np.array(predictor.predict_proba(test_data)).flatten()

这将确保您正在计算 AutoGluon 的概率预测,并将其与逻辑回归的预测进行比较。

参考GPT和自己的思路,如果逻辑回归和AutoGluon两个模型的结果一模一样,可能是因为它们所使用的数据、特征以及超参数设置相同。另外,逻辑回归是AutoGluon使用的默认算法之一,所以两个模型使用的算法也相同。

可以尝试对AutoGluon的参数进行更改,比如修改超参数、使用不同的模型、调整特征选择策略等,以期获得更好的性能。

此外,值得注意的是,在测试集上的预测结果也受到一些随机因素的影响,因此多次运行可以得到更稳定的结果。

以下是修改后的代码,将AutoGluon的预测结果赋值给了auto_proba变量,而不是将逻辑回归的预测结果赋值给auto_proba变量。此外,还将计算KS和AUC的代码也进行了修改,改为使用AutoGluon预测结果的相关函数。

import autogluon
from autogluon.tabular import TabularDataset,TabularPredictor
import pandas as pd
import numpy as np
from toad.metrics import KS, F1, AUC

label = 'isDefault'
train_data = TabularDataset(data_tr_woe.drop(["type"], axis=1))
metric = 'roc_auc'
predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')

test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
auto_proba = predictor.predict_proba(test_data)
auto_proba = np.array(auto_proba)[:, 1]

print('\nTest error')
print('KS:', KS(auto_proba, Yts_woe))
print('AUC:', AUC(auto_proba, Yts_woe))


修改AutoGluon代码,应该能够得到正确的AutoGluon模型的预测概率,并且与逻辑回归模型的预测概率不同。

predictor=TabularPredictor(label=label,eval_metric=metric).fit(train_data, presets='best_quality', auto_stack=True)
auto_proba=predictor.predict_proba(test_data)

该回答引用GPTᴼᴾᴱᴺᴬᴵ
可能有几个原因会导致你的逻辑回归模型和AutoGluon模型输出的结果一模一样。

首先,你在逻辑回归模型中没有调整任何参数,而AutoGluon模型是使用了自动调参的方法,如果逻辑回归模型的默认参数恰好与AutoGluon自动搜索的最佳参数相同,那么两个模型的结果可能是相同的。

其次,你在输出AutoGluon模型的预测结果时,使用了逻辑回归模型的预测概率值(EYts_proba),这可能是一个错误。应该使用AutoGluon模型的预测概率值(auto_proba)来计算KS和AUC。

最后,两个模型输入的数据可能是相同的,这可能是导致结果相同的原因之一。

你可以尝试打印出两个模型的参数和输入数据,以进一步排除问题。

可能是因为你使用了相同的数据集和参数设置来训练这两个模型,导致它们产生了相同的结果。如果你想证实AutoGluon比逻辑回归更好,可以尝试使用不同的数据集或参数设置来训练模型,并比较它们的性能。

您提供的AutoGluon代码中,使用的是逻辑回归模型的预测结果EYts_proba,而不是AutoGluon模型的预测结果auto_proba。
你可以用一下代码试试

import autogluon.tabular as ag_tabular
from autogluon.tabular import TabularDataset, TabularPredictor
from toad.metrics import KS, AUC
import pandas as pd

label = 'isDefault'
train_data = TabularDataset(data_tr_woe.drop(['type'], axis=1))
metric = 'roc_auc'
predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
best_model = predictor.get_model_best()

test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
y_true = test_data[label]
auto_proba = predictor.predict_proba(test_data)
auto_proba = auto_proba[label].values

print('Test error')
print('KS:', KS(auto_proba, y_true))
print('AUC:', AUC(auto_proba, y_true))

回答不易,还请能够采纳!!

根据提供的代码,可以发现问题出在AutoGluon代码中的以下行:

auto_proba = np.array(EYts_proba).flatten() 

这里使用了之前在逻辑回归代码中定义的 EYts_proba 变量,而实际上应该使用 AutoGluon 中预测出的概率值 auto_proba。因此,可以将这一行修改为:

auto_proba = predictor.predict_proba(test_data)

修改后的完整代码如下:

import autogluon
from autogluon.tabular import TabularDataset, TabularPredictor
from toad.metrics import KS, AUC
import pandas as pd
import numpy as np

# 读取数据
data_tr_woe = pd.read_csv('train_woe.csv')
data_ts_woe = pd.read_csv('test_woe.csv')

# 定义标签列名
label = 'isDefault'

# 训练数据
train_data = TabularDataset(data_tr_woe.drop(['type'], axis=1))

# 指定评价指标
metric = 'roc_auc'

# 模型训练
predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')
best = predictor.get_model_best()

# 预测概率值
test_data = TabularDataset(data_ts_woe.drop(['isDefault', 'type'], axis=1))
auto_proba = predictor.predict_proba(test_data)

# 计算模型性能
print('\nTest error')
print('KS:', KS(auto_proba, Yts_woe))
print('AUC:', AUC(auto_proba, Yts_woe))

这样修改后,应该可以得到正确的结果。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,逻辑回归是一个已经被广泛应用的机器学习算法,在数据量较小或特征数量较少的场景下,其可能会与AutoGluon(一款基于深度学习和集成学习的自动化机器学习工具)获得相似的性能。

其次,你的代码中有一处小错误, auto_proba = np.array(EYts_proba).flatten(),将逻辑回归的预测概率赋值给了 auto_proba,导致输出的值相同。实际应该是 auto_proba=predictor.predict_proba(test_data)[:,1],才能获得AutoGluon模型的预测概率。

下面是修改后的AutoGluon代码:

import autogluon
from autogluon.tabular import TabularDataset, TabularPredictor  
import pandas as pd
import numpy as np
from toad.metrics import KS, F1, AUC

# 读取数据
data_tr_woe=pd.read_csv('train_woe.csv')
data_ts_woe=pd.read_csv('test_woe.csv')

label = 'isDefault'
train_data = TabularDataset(data_tr_woe.drop(["type"], axis=1))
test_data = TabularDataset(data_ts_woe.drop(['isDefault','type'], axis=1))

metric = 'roc_auc'
predictor = TabularPredictor(label=label, eval_metric=metric).fit(train_data, presets='best_quality')

# 获取模型预测概率
auto_proba = predictor.predict_proba(test_data)[:, 1]

# 输出测试误差
print('\nTest error')
print('KS:', KS(auto_proba, Yts_woe))
print('AUC:', AUC(auto_proba, Yts_woe))

希望以上回答对你有所帮助!
如果我的回答解决了您的问题,请采纳!