我的目标是找到一个预测模型来判断一笔贷款是否会得到偿还。我的数据来源是一个CSV文件,包含了贷款的特征以及是否已被偿还的信息。我使用ROC曲线和AUC来评估模型的性能
df = pd.read_csv(your_path)X = df.values y = df.defaultsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=7)log_reg = LogisticRegression()log_reg.fit(X_train, y_train)fpr, tpr, thresholds = roc_curve(y_test, y_score)print(auc(fpr,tpr))
当我运行这段代码时,得到的AUC分数大约是0.75。
但是当我添加命令行’df = df.reset_index()’如下所示时:
df = pd.read_csv(your_path)df = df.reset_index()X = df.values y = df.defaultsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=7)log_reg = LogisticRegression()log_reg.fit(X_train, y_train)fpr, tpr, thresholds = roc_curve(y_test, y_score)print(auc(fpr,tpr))
我得到了0.93的AUC分数。这似乎是无缘无故地增加了。
为什么重置索引会提高我的模型AUC?
回答:
你这样重置索引会将索引添加为一个新的列。这个新列可以作为输入特征被你的分类器使用。因此,你的索引可能会影响预测的准确性。
考虑这个示例数据框:
class max_speedfalcon bird 389.0parrot bird 24.0lion mammal 80.5monkey mammal NaN
如果我们这样做
df = df.reset_index()print(df)
结果数据框看起来像这样。
index class max_speed0 falcon bird 389.01 parrot bird 24.02 lion mammal 80.53 monkey mammal NaN
为了防止这种情况发生,你可以这样做:
df = df.reset_index(drop = True)df
结果数据框如下:
class max_speed0 bird 389.01 bird 24.02 mammal 80.53 mammal NaN
这样,之前的索引就不会被添加为数据框的一个新列。
编辑:此外,你可以在LogisticRegression()
中设置random_state
参数,以确保回归器的准确性没有随机效应。