为什么我的逻辑回归模型只能预测0? /样本量小?

时间:2019-05-14 15:10:31

标签: python logistic-regression

我正在使用python中的逻辑回归建立客户流失预测模型。我的模型精度是0.47,只能预测0s。实现的y变量实际上是81个零和92个。

我拥有的数据集只有一些功能和220个用户(记录)。如果我设置了参考时间,则该时间会更少(训练集约123条记录,测试集173条记录)。因此,我认为样本量太小,无法使用逻辑回归。但是我仍然尝试过,因为这只是一个样本测试,所以我只得到了这个小数据集。 (理论上有更多数据)

from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression()
logreg.fit(x_train, y_train)

y_pred = logreg.predict(x_test)
print('Accuracy: {:.2f}'.format(logreg.score(x_test, y_test)))

即使我不测试模型,也就是我使用整个数据集来构建模型,当我预测未来的客户流失时,它仍然仅返回0。 是我的样本量太小,还是因为精度小于0.5,所以它仅返回一个值(此处为0)?还是我在代码中做错了什么?

非常感谢!

1 个答案:

答案 0 :(得分:1)

逻辑回归模型的预测有很多潜在的原因。为了通知广大听众,我将列出最常见的听众,即使其中一些不适用于您的情况。

  1. 倾斜的输出分布),您的训练数据有偏差,标签分布不平衡。例如,如果您的训练包含1个正值和100000个负值,则回归中的偏差/截距项将非常小。应用链接函数后,预测实际上可以为零。

  2. 稀疏性),特征空间较大,您的数据集较小,导致训练数据稀疏。因此,以前从未见过大多数新的数据点传入实例。在所有特征都是因子的最坏情况下,看不见的因子值将为零,因为无法识别正确的一键热列。

  3. 倾斜的输入分布)特征空间很小,您的数据集密集在一个很小的区域。如果结果表明该区域存在更多零,则即使对于将来的输入实例,预测也始终为零。例如,我的数据X有两列,性别和年龄。事实证明,在101个数据点数据集中,我的大部分数据点是30岁的男性,而100名30岁的男性中有80个像冰淇淋。该模型将预测像冰淇淋这样的30岁男性将来的输入,通常是假设输入分布相似的30岁男性。

您应该使用predict_proba函数检查分数的分布,并使用pairplot之类的命令检查输入特征的分布。