共计 1496 个字符,预计需要花费 4 分钟才能阅读完成。
背景与痛点
逻辑回归是解决二分类问题的经典算法,尤其在需要概率输出的场景(如风险评估、疾病预测)中表现优异。与其他算法相比:

- 对比决策树:逻辑回归提供连续概率输出,而决策树更适合处理非线性关系和特征重要性分析
- 对比 SVM:逻辑回归训练速度更快,且对小样本量更鲁棒
- 对比神经网络:逻辑回归模型更轻量、可解释性强,适合特征维度较低的场景
实验设计
数据集准备
使用 Kaggle 的银行客户流失数据集(Bank Customer Churn Prediction),包含以下特征:
- 数值型:信用评分、账户余额、年龄等
- 类别型:地理位置、性别、活跃会员状态
关键预处理步骤
- 缺失值处理:
- 连续变量用中位数填充
- 类别变量用众数填充
- 特征编码:
- 有序类别变量使用 LabelEncoder
- 名义变量使用 OneHotEncoder
- 特征缩放:
- 对数值特征使用 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)
避坑指南
- 特征共线性问题:
- 检查方法:计算方差膨胀因子(VIF)
- 解决方案:删除 VIF>10 的特征或使用 PCA 降维
- 过拟合处理:
- 增加 L1/L2 正则化
- 通过交叉验证选择最佳 C 参数
- 样本不均衡:
- 使用 class_weight 参数调整类别权重
- 采用 SMOTE 过采样技术
生产建议
- 模型部署:
- 将预处理步骤和模型打包为 Pipeline
- 使用 Flask/FastAPI 构建 API 接口
- 性能优化:
- 对连续特征进行分箱处理
- 用 joblib 替代 pickle 加速模型加载
延伸练习
- 尝试用 GridSearchCV 优化正则化参数 C
- 对比使用 PCA 降维前后的模型性能
- 实现自定义损失函数(如增加误分类代价)
实验小结
通过本次实验验证了逻辑回归在客户流失预测中的有效性,准确率达到 87%。关键发现:
– 账户余额和产品持有数量是最重要特征
– 引入 L2 正则化后模型泛化能力提升 15%
– 对分类阈值进行调整可平衡误判成本
完整代码及数据集已开源在 Github 仓库(示例链接),包含更多细节实现和可视化代码。
正文完
发表至: 未分类
近一天内
