过去 6 个月我一直在做一个项目。这是一个预测我们公司客户流失的模型,假设这是一家提供每月服务的公司,费用类似于有线电视。
输入数据集有大约150万个客户用于训练/测试。主要由16列组成
我使用 pycarat 找到了 AUC 和 F1 的最佳模型。
AUC:Catboost F1:Xgboost
现在数据不平衡,活跃客户多于取消客户。所以我有以下代码来解释这一点。
在训练测试分割和训练模型之后,我最终得到的训练数据上两种方法的模型精度都在 90 年代中低水平。在测试数据上,它的正确值为 90。但是,当我将本月的数据插入模型时(没有看到),它只能正确预测 25% 的取消客户。其余的甚至在抛硬币附近都没有流失的可能性,它们几乎都接近于零<.1.
测试数据的准确性如此之高,让我产生了怀疑。我在输入数据中没有看到任何表明数据泄漏的信息。任何的意见都将会有帮助。也许我错过了一些东西,我对数据科学还很陌生。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Calculate class weights
total_samples = len(y_train)
class_counts = y_train.value_counts()
class_weights = {0: total_samples / (2 * class_counts[0]), # Weight for class 0 (non churn)
1: total_samples / (2 * class_counts[1])} # Weight for class 1 (churn)
catboost_model = CatBoostClassifier(class_weights=class_weights)