基于逻辑回归的数据分析实战:从数据预处理到模型评估的完整实验报告

1次阅读
没有评论

共计 1496 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景与痛点

逻辑回归是解决二分类问题的经典算法,尤其在需要概率输出的场景(如风险评估、疾病预测)中表现优异。与其他算法相比:

基于逻辑回归的数据分析实战:从数据预处理到模型评估的完整实验报告

  • 对比决策树:逻辑回归提供连续概率输出,而决策树更适合处理非线性关系和特征重要性分析
  • 对比 SVM:逻辑回归训练速度更快,且对小样本量更鲁棒
  • 对比神经网络:逻辑回归模型更轻量、可解释性强,适合特征维度较低的场景

实验设计

数据集准备

使用 Kaggle 的银行客户流失数据集(Bank Customer Churn Prediction),包含以下特征:

  • 数值型:信用评分、账户余额、年龄等
  • 类别型:地理位置、性别、活跃会员状态

关键预处理步骤

  1. 缺失值处理
  2. 连续变量用中位数填充
  3. 类别变量用众数填充
  4. 特征编码
  5. 有序类别变量使用 LabelEncoder
  6. 名义变量使用 OneHotEncoder
  7. 特征缩放
  8. 对数值特征使用 StandardScaler

核心实现

# 导入核心库
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

# 数据标准化(必须步骤!)scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 模型初始化
model = LogisticRegression(
    penalty='l2',           # 正则化类型
    C=1.0,                 # 正则化强度倒数
    solver='lbfgs',        # 优化算法
    max_iter=1000          # 迭代次数
)

# 模型训练
model.fit(X_train, y_train)

评估指标

关键指标计算公式:

  • 准确率 = (TP+TN)/(TP+FP+FN+TN)
  • 召回率 = TP/(TP+FN)
  • F1 值 = 2(精确率 召回率)/(精确率 + 召回率)
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

结果可视化

混淆矩阵绘制

from sklearn.metrics import ConfusionMatrixDisplay
ConfusionMatrixDisplay.from_estimator(model, X_test, y_test)

ROC 曲线分析

from sklearn.metrics import RocCurveDisplay
RocCurveDisplay.from_estimator(model, X_test, y_test)

避坑指南

  1. 特征共线性问题
  2. 检查方法:计算方差膨胀因子(VIF)
  3. 解决方案:删除 VIF>10 的特征或使用 PCA 降维
  4. 过拟合处理
  5. 增加 L1/L2 正则化
  6. 通过交叉验证选择最佳 C 参数
  7. 样本不均衡
  8. 使用 class_weight 参数调整类别权重
  9. 采用 SMOTE 过采样技术

生产建议

  1. 模型部署
  2. 将预处理步骤和模型打包为 Pipeline
  3. 使用 Flask/FastAPI 构建 API 接口
  4. 性能优化
  5. 对连续特征进行分箱处理
  6. 用 joblib 替代 pickle 加速模型加载

延伸练习

  1. 尝试用 GridSearchCV 优化正则化参数 C
  2. 对比使用 PCA 降维前后的模型性能
  3. 实现自定义损失函数(如增加误分类代价)

实验小结

通过本次实验验证了逻辑回归在客户流失预测中的有效性,准确率达到 87%。关键发现:
– 账户余额和产品持有数量是最重要特征
– 引入 L2 正则化后模型泛化能力提升 15%
– 对分类阈值进行调整可平衡误判成本

完整代码及数据集已开源在 Github 仓库(示例链接),包含更多细节实现和可视化代码。

正文完
 0
评论(没有评论)