有偏数据的逻辑回归

数据挖掘 机器学习 r 逻辑回归
2021-09-18 17:12:35

我目前正在研究一个数据集,以根据过去的数据和客户的交易来预测客户流失。

总共有 2,40,000 名客户,其中大约 1,77,000 名客户是活跃的(截至今天),而其余的则处于非活跃状态(6300 名)。这是示例标题的样子:

custID|custAge|custGender|TQuantity|TVolume|TValue|TAmount|HolidayStatus|...

总的来说,我有 40 个预测变量,包括客户详细信息、交易详细信息、项目详细信息等。

数据中的活跃客户明显多于不活跃客户,即不活跃客户仅占整个客户群的 2.6%因此,活跃客户(2500 万/3200 万)进行的交易多于非活跃客户(之前活跃)(600 万/3200 万)。

尽管如此,我还是使用随机数据创建了一个逻辑回归模型 ( shuf -n 500000 data.csv)。该模型在输入随机数据时的预测准确率达到 96.69%。

问题:如何让模型在这种有偏差的数据集上更准确地预测?或者我如何更恰当地对数据进行采样?

模型预测:以 99.7% 的概率,它预测客户将是活跃的,而客户是不活跃的

PS:更改阈值无济于事

2个回答

背景

我将从一些背景开始,以帮助您自己研究解决方案,然后添加一些细节。unbalanced classes您所说的“有偏见的数据”在数据科学世界中更为常见。“客户流失率”也经常被称为churn

指标

正如许多Ng'ian 奉献者无疑会指出的那样,您需要从设计一组unbalanced classesaccuracy. 准确性在测试不平衡类别的预测质量方面做得很差,例如,如果对发生在 0.05% 人群中的癌症进行癌症测试,如果它总是预测“没有癌症”,则准确率为 99.95%。我建议将F1-score用作交叉验证模型的关键指标是 和的F1-score调和平均值,precision并且recall往往适用于平衡和不平衡类。还有其他调和平均数,在特殊情况下可能会起作用,所以要注意这些

您还应该了解其他指标ROC-AUC 可能在您应该了解和了解的其他指标列表的顶部。

模型选择和交叉验证

开始分类任务Logistic Regression是一个很棒的策略。我强调总是对回归任务使用线性回归,对分类任务使用逻辑回归。线性模型提供了对问题的重要洞察力feature importance并有助于构建问题。

但是在这个初步调查之后,您应该转向其他更复杂的模型。许多人会给你一连串的尝试。您也许应该专注于一两个并开发模型,同时非常仔细地关注bias测试您的模型variance一旦你有了更好的直觉,完整的可能是不必要的,但它是新手开始的好cross-validate地方bias-variance decomposition

我建议从 an 开始SVM并最终尝试 a random forestornaive Bayes模型,因为这将遍历多种模型类型(类比、决策树、装袋、贝叶斯)。

最后......不平衡的类

有两种处理不平衡类的典型方法。这些包括对少数类进行过采样,以及通过更改超平面 (SVM)更改先验 (Bayes)来修复模型

如果您搜索“ ”,则会有很多关于此问题和解决方案摘要但是,尽管有所有文献,这仍然是一个棘手的问题。祝你好运...unbalanced classes

希望这可以帮助!

虽然有众所周知的技术,如处理不平衡类的下采样(这在金融行业中很常见,破产的发生率约为 1-3%),但我认为在您的情况下,模型类型将更为重要。如果您将解释能力优先于预测能力,或者如果您的数据集很小,那么逻辑回归就可以了。但是,如果你有一个大数据集(你有)并且你更关心预测(听起来像你做的那样),那么你应该选择更高级的模型类型。

一些很好的例子:随机森林、梯度提升和支持向量机。基于树的方法(如梯度提升和随机森林)能够识别变量交互,如果您使用逻辑回归,您会手动/自己发现这些交互。这些模型可以在 R(插入符号)、Python(scikit-learn)或 Java/Scala(Spark 的 ML lib 或 Weka)中轻松访问。