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

Why is my logistic regression model predicting 0s only? /small sample size?

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

我的数据集只有几个特征和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)))

即使我不测试模型,这意味着我使用整个数据集来构建模型,当我预测未来流失时它仍然 returns 只有 0。 是我的样本量太小了,还是因为精度小于 0.5 所以它只有 returns 一个值(这里是 0)?还是我代码有问题?

非常感谢!

逻辑回归模型的预测存在严重偏差的潜在原因有多种。为了告知一般观众,我将列出最常见的,尽管其中一些不适用于您的情况。

  1. (输出分布偏斜) 您的训练数据有偏差,标签分布不平衡。例如,如果您的训练包含 1 个正例和 100000 个负例,则回归中的 bias/intercept 项将非常小。应用 link 函数后,预测几乎可以为零。

  2. (稀疏性) 特征space很大,你的数据集很小,导致训练数据稀疏。因此,大多数新传入的数据点实例以前是看不到的。在最坏的情况下,所有特征都是因子,看不见的因子值会导致零,因为无法识别正确的 one-hot 列。

  3. (倾斜输入分布)特征space很小,你的数据集在一个小区域周围很密集。如果结果在该区域有更多的零,即使对于未来的输入实例,预测也将始终为零。例如,我的数据 X 有两列,性别和年龄。事实证明,我的大部分数据点都是 30 岁的男性,在 101 data-point 数据集中,100 个 30-year-old 男性中有 80 个像 ice-cream。该模型将预测 30-year-old 男性喜欢 ice-cream 作为未来的输入,这通常是针对 30-year-old 假设相似输入分布的男性。

您应该使用 predict_proba 函数检查分数的分布,并使用类似 pairplot.

的函数检查输入特征的分布