
1. 项目背景与核心价值这个毕业设计项目将Django框架与金融风控领域常用的评分卡模型、概率加权模型相结合打造了一个具备智能客户评估功能的CRM系统。不同于传统CRM仅实现客户信息管理本系统通过机器学习模型实现了客户价值量化评估为销售策略制定提供了数据支撑。我在金融科技行业工作期间曾参与过多个类似系统的商业化落地。从实际业务角度看这种技术组合解决了三个核心痛点传统CRM缺乏量化评估维度人工判断客户价值存在主观偏差销售资源分配缺乏数据依据系统采用Python技术栈实现前端使用BootstrapECharts构建可视化界面后端采用Django REST framework提供API服务模型训练使用scikit-learn和Scorecardpy库。完整代码包含7个核心模块下文将重点解析模型集成方案和系统架构设计。2. 系统架构设计解析2.1 技术选型依据选择Django作为基础框架主要基于以下考虑内置Admin后台快速实现数据管理ORM支持多数据库适配项目使用MySQL 8.0完善的中间件机制便于模型服务集成原生支持RESTful API开发评分卡模型选用逻辑回归WOE编码方案因其具有模型可解释性强符合金融场景合规要求特征分箱处理适合离散化业务指标输出结果可直接转换为信用分数概率加权模型采用改进的RFM模型最近消费时间Recency消费频率Frequency消费金额Monetary新增客户活跃度Activity维度2.2 核心模块交互设计系统采用分层架构设计CRM_System/ ├── core/ # 核心业务逻辑 │ ├── scoring/ # 评分卡服务 │ └── weighting/ # 概率加权服务 ├── api/ # REST接口 ├── web/ # 前端界面 ├── ml_models/ # 模型训练代码 └── config/ # 数据库及服务配置关键交互流程前端通过AJAX调用API接口API层调用core服务处理业务逻辑模型服务通过pickle加载预训练模型结果经ORM存入数据库异步任务更新客户评分看板3. 评分卡模型实现细节3.1 特征工程处理使用德国信用卡数据集作为训练样本包含20个特征字段。关键处理步骤# 示例WOE分箱转换 from scorecardpy import woebin bins woebin(df, ytarget, methodtree, positivebad|1) # 生成IV值报表 iv woebin_ply(df, bins) print(iv.sort_values(iv, ascendingFalse))特征筛选标准IV值0.02的特征保留相关性系数0.7的特征组合最终保留12个有效特征3.2 模型训练与验证采用5折交叉验证确保稳定性from sklearn.linear_model import LogisticRegressionCV model LogisticRegressionCV( Cs10, cv5, scoringroc_auc, max_iter1000 ) model.fit(X_train, y_train) # 输出模型指标 print(fAUC: {roc_auc_score(y_test, model.predict_proba(X_test)[:,1]):.3f})典型性能指标AUC: 0.82-0.85KS值: 0.35-0.4模型稳定性PSI0.13.3 模型部署方案生产环境部署注意事项使用Joblib替代pickle加速模型加载设置模型版本管理机制添加输入数据校验中间件实现批量预测异步任务# Django中间件示例 class ModelValidationMiddleware: def __init__(self, get_response): self.get_response get_response def __call__(self, request): if request.path.startswith(/api/scoring): data json.loads(request.body) if not validate_inputs(data): return JsonResponse({error: Invalid inputs}, status400) return self.get_response(request)4. 概率加权模型实现4.1 RFMA模型构建在传统RFM模型基础上增加活跃度维度def calculate_rfma_score(df): # 计算各维度分位数 r_score pd.qcut(df[recency], q5, labelsFalse) f_score pd.qcut(df[frequency], q5, labelsFalse) m_score pd.qcut(df[monetary], q5, labelsFalse) a_score pd.qcut(df[activity], q5, labelsFalse) # 加权计算权重可配置 return 0.3*r_score 0.2*f_score 0.3*m_score 0.2*a_score权重配置建议B2C场景提高Recency权重B2B场景提高Monetary权重新客为主的业务提高Activity权重4.2 客户分群策略基于得分实现自动分群-- 数据库视图定义 CREATE VIEW customer_segments AS SELECT id, CASE WHEN rfma_score 80 THEN 高价值 WHEN rfma_score 60 THEN 潜力客户 WHEN rfma_score 40 THEN 一般客户 ELSE 低价值 END AS segment FROM customer_scores;5. 系统集成关键问题5.1 性能优化方案数据库层面为评分字段建立索引使用物化视图缓存计算结果设置定时任务夜间更新分数代码层面使用django-bulk批量操作实现查询结果缓存启用Gzip压缩响应# 批量预测优化示例 from django.db import transaction transaction.atomic def batch_scoring(customer_ids): customers Customer.objects.filter(id__incustomer_ids).select_related(profile) scores [] for cust in customers: input_data prepare_features(cust) scores.append({ id: cust.id, score: scoring_model.predict(input_data) }) return update_scores(scores)5.2 常见问题排查模型服务报错ValueError: Input contains NaN检查前端表单验证规则确认数据库字段约束添加中间件日志记录原始输入评分结果不稳定检查训练数据时间范围验证特征分箱边界一致性监控模型PSI指标变化并发请求响应慢增加Redis缓存层优化数据库查询语句考虑使用Celery异步任务6. 毕业设计扩展建议业务维度扩展增加客户流失预警模块集成营销活动效果分析添加客户生命周期管理技术深度扩展实现模型在线学习机制增加AutoML自动调参开发移动端管理应用展示效果优化使用D3.js实现动态可视化增加数据导出功能制作系统演示视频关键实现提示毕业设计答辩时建议重点展示模型构建过程与业务价值关联演示时准备三个典型客户案例对比人工判断与系统评分的差异。