首页 文章

机器学习(Python) - 不寻常的准确度99.9%

提问于
浏览
0

我最近在kaggle(Shape:1646801,150)的数据集上构建了一个预测模型(Logistic回归) . 然而,在简单的预处理之后,我得到了非常不寻常的99.9%的准确度 . 数据:https://www.kaggle.com/wordsforthewise/lending-club

enter image description here

迈出了一步:

  • Mapped 不同的 loan_status ('Fully_Paid','Default','Charged Off')到 default (0,1)

  • 查找每列 null 的计数, remove column 如果 null > 10000

  • 删除其他空值的行,形状为左(814392,51)

  • 删除成绩并将 sub_grade ('A1','A3')映射为 integer (0,2)

  • One-Hot Encoding
    具有Logistic回归的

  • Modeling (Class label ratio is 1:4)

对于建模部分,我首先使用列车测试分割并获得99.9%的准确度 . 我还检查了混淆矩阵,TP和TN都很高 . 我还检查了功能的重要性,功能似乎正常,似乎没有任何功能明显优于其他功能 . 我也尝试过5次和10次交叉验证,准确度仍然很高 .

下面是建模代码,如果它似乎有助于解决问题,我将展示任何预处理代码 .

y = df2[['default']].values.ravel()
    X = df2.drop(columns = 'default').values
    X_train, X_test, y_train, y_test=train_test_split(X, y, test_size=.2)
    features = df2.drop(columns = 'default').columns.tolist()
    LR = model.LogisticRegression()
    LR.fit(X_train,y_train)
    y_pred = LR.predict(X_test)
    print('Accuracy : ', metrics.accuracy_score(y_test, y_pred))
    print('\n', metrics.classification_report(y_test, y_pred))
    print('Confusion Matrix')
    print(metrics.confusion_matrix(y_test, y_pred))

什么似乎是问题?这是我做错的任何部分吗?

2 回答

  • 0

    这句话错了 - scores = cross_val_score(LR, X, y, cv=5) . 您在交叉验证步骤中将模型公开为 X_testy_test . 您的模型在培训或交叉验证期间永远无法看到您的测试数据 . 相反,你可以做 scores = cross_val_score(LR, X_train, y_train, cv=5) 并在你的测试集上进行预测 .

    另一种方法可以是使用验证集方法而不是k-fold CV .

    查看scikit-learn的 GridSearchCV .

  • 0

    您需要小心分割数据的方式以及使用的列 . 似乎数据中有一个小time series . 这意味着对于一个客户,可能存在多个数据点 . 我会确保删除id字段 .

    如果仍然没有帮助,请按客户划分数据并将客户分成培训/测试 .

    然后查看与loan_status高度相关的字段 . 有些可能与此人已经违约的事实有关 . 相反,您可以根据上个月的数据预测客户的默认状态 .

    你也删除了很多行 - 这可能没问题,但你也可以选择易于分类的案例 .

相关问题