我正在使用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)?还是我在代码中做错了什么?
非常感谢!
答案 0 :(得分:1)
逻辑回归模型的预测有很多潜在的原因。为了通知广大听众,我将列出最常见的听众,即使其中一些不适用于您的情况。
(倾斜的输出分布),您的训练数据有偏差,标签分布不平衡。例如,如果您的训练包含1个正值和100000个负值,则回归中的偏差/截距项将非常小。应用链接函数后,预测实际上可以为零。
(稀疏性),特征空间较大,您的数据集较小,导致训练数据稀疏。因此,以前从未见过大多数新的数据点传入实例。在所有特征都是因子的最坏情况下,看不见的因子值将为零,因为无法识别正确的一键热列。
(倾斜的输入分布)特征空间很小,您的数据集密集在一个很小的区域。如果结果表明该区域存在更多零,则即使对于将来的输入实例,预测也始终为零。例如,我的数据X有两列,性别和年龄。事实证明,在101个数据点数据集中,我的大部分数据点是30岁的男性,而100名30岁的男性中有80个像冰淇淋。该模型将预测像冰淇淋这样的30岁男性将来的输入,通常是假设输入分布相似的30岁男性。
您应该使用predict_proba
函数检查分数的分布,并使用pairplot
之类的命令检查输入特征的分布。