一、项目概述与背景
1.1 项目简介
本项目是《大数据数据分析与应用》课程的实践环节,旨在通过真实的汽车客户数据集,应用朴素贝叶斯分类算法构建购车意向预测模型,展示从数据预处理到模型评估的完整机器学习流程。
1.2 技术栈
编程语言:Python 3
开发环境:Jupyter Notebook
核心库:pandas, numpy, scikit-learn
算法:高斯朴素贝叶斯(GaussianNB)
1.3 项目目标
掌握数据处理与特征工程的基本方法
理解朴素贝叶斯算法的原理与实现
完成一个端到端的机器学习项目
分析模型性能并提出改进方案
二、数据准备与探索性分析
2.1 数据加载与查看
输出结果:
数据形状:(30, 7) - 共30条记录,7个特征
特征包括:user_id, age, gender, annual_income, marital_status, is_local, buy_car_sign
2.2 数据分布统计
1. 年龄分布分析
text
30- 9人(30.0%) 31-40 8人(26.7%) 41-50 7人(23.3%) 51+ 6人(20.0%)
2. 性别分布
text
男性:63.3% 女性:36.7%
3. 收入分布
python
income_dist = data['annual_income'].value_counts() print("年收入分布:") print(income_dist)text
21-40w:15人(50.0%) 41w+:8人(26.7%) 10-20w:7人(23.3%)
4. 目标变量分布
python
target_dist = data['buy_car_sign'].value_counts() print("购车意向分布:") print(f"无购车意向:{target_dist['否']}人") print(f"有购车意向:{target_dist['是']}人")text
无购车意向:16人(53.3%) 有购车意向:14人(46.7%)
2.3 初步数据洞察
通过上述分析发现:
数据集规模较小,可能影响模型泛化能力
特征多为分类变量,需要进行编码转换
目标变量相对平衡,无需进行过采样或欠采样
三、特征工程与数据预处理
3.1 特征与标签分离
3.2 类别特征编码
由于朴素贝叶斯算法需要数值输入,使用OrdinalEncoder进行有序编码:
编码映射关系:
text
age: [(0, '30-'), (1, '31-40'), (2, '41-50'), (3, '51+')] gender: [(0, 'female'), (1, 'male')] annual_income: [(0, '10-20w'), (1, '21-40w'), (2, '41w+')] marital_status: [(0, '否'), (1, '是')] is_local: [(0, '否'), (1, '是')]
3.3 数据集划分
四、模型构建与训练
4.1 高斯朴素贝叶斯模型原理
朴素贝叶斯算法基于贝叶斯定理,假设特征之间相互独立。对于连续特征,高斯朴素贝叶斯假设每个类别的特征服从正态分布:
P(xi∣y)=12πσy2exp(−(xi−μy)22σy2)P(xi∣y)=2πσy21exp(−2σy2(xi−μy)2)
4.2 模型训练
五、模型评估与结果分析
5.1 基础性能评估
python
# 在测试集上评估模型 test_accuracy = model.score(test_x, test_y) train_accuracy = model.score(train_x, train_y) print(f"训练集准确率:{train_accuracy:.2%}") print(f"测试集准确率:{test_accuracy:.2%}")实际运行结果:
text
训练集准确率:62.50% 测试集准确率:50.00%
5.2 详细分类报告
python
# 生成预测结果 y_pred = model.predict(test_x) # 输出分类报告 print("朴素贝叶斯分类报告:") print("=" * 50) print(classification_report(test_y, y_pred, target_names=['不购车', '购车']))分类报告结果:
text
朴素贝叶斯分类报告: ================================================== precision recall f1-score support 不购车 0.50 0.67 0.57 3 购车 0.50 0.33 0.40 3 accuracy 0.50 6 macro avg 0.50 0.50 0.49 6 weighted avg 0.50 0.50 0.49 6
5.3 性能指标解读
准确率(Accuracy):50.00%
模型整体预测正确的比例
当前结果与随机猜测相当
精确率(Precision):
"不购车"类别:50.00%(预测为不购车的客户中,实际不购车的比例)
"购车"类别:50.00%(预测为购车的客户中,实际购车的比例)
召回率(Recall):
"不购车"类别:66.67%(实际不购车的客户中,被正确预测的比例)
"购车"类别:33.33%(实际购车的客户中,被正确预测的比例)
5.4 性能分析
模型性能不理想的主要原因:
数据量不足:仅30条样本,6条测试样本,统计意义有限
特征信息有限:现有特征可能无法充分区分购车意向
特征独立性假设:现实中的特征往往存在相关性
编码方式影响:Ordinal编码可能引入错误的序关系
六、模型应用与预测实例
6.1 新客户预测
python
# 定义新客户特征 new_customer_features = { 'age': '31-40', 'gender': 'female', 'annual_income': '21-40w', 'marital_status': '否', 'is_local': '是' } # 转换为模型输入格式 new_customer_array = [[ new_customer_features['age'], new_customer_features['gender'], new_customer_features['annual_income'], new_customer_features['marital_status'], new_customer_features['is_local'] ]] # 特征编码 new_customer_encoded = encoder.transform(new_customer_array) # 进行预测 prediction = model.predict(new_customer_encoded) print(f"新客户购车意向预测结果:{prediction[0]}")预测结果:
text
新客户购车意向预测结果:否
6.2 预测概率分析
python
# 获取预测概率 prediction_proba = model.predict_proba(new_customer_encoded) print("预测概率详情:") for i, class_name in enumerate(model.classes_): probability = prediction_proba[0][i] print(f"{class_name}({['不购车','购车'][i]})的概率:{probability:.2%}")概率分布:
text
预测概率详情: 否(不购车)的概率:84.61% 是(购车)的概率:15.39%
6.3 业务解读
对于该女性客户:
模型预测其无购车意向的置信度较高(84.61%)
可能原因:年龄31-40岁,收入中等,未婚状态
业务建议:可提供试驾体验或针对性促销,激发购车兴趣
七、项目总结与改进建议
7.1 项目成果总结
技术流程完整性:完成了数据探索、预处理、建模、评估、预测的全流程
算法理解深入:深入理解了朴素贝叶斯的原理、假设和局限性
实践技能提升:掌握了scikit-learn库的使用和模型评估方法
问题分析能力:学会了分析模型性能不足的原因并提出改进方案
7.2 改进方案建议
1. 数据层面改进
python
# 建议收集更多特征 suggested_features = [ '现有车辆数', '家庭成员数', '通勤距离', '职业类型', '教育程度', '购车预算', '品牌偏好', '车型偏好' ]
2. 特征工程优化
尝试One-Hot编码替代Ordinal编码
创建组合特征(如年龄×收入)
特征选择(使用卡方检验、互信息等)
考虑特征离散化处理
3. 模型选择与优化
python
# 可尝试的替代模型 from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC # 模型集成方法 from sklearn.ensemble import VotingClassifier from sklearn.ensemble import BaggingClassifier
4. 评估方法改进
使用K折交叉验证(K=5或10)
设置更合理的评估指标(AUC-ROC, F1-score)
学习曲线分析,判断是否需要更多数据
5. 业务层面建议
收集更多样本数据(建议500+条)
进行更详细的客户画像分析
结合业务规则和专家经验
7.3 学习心得与体会
通过本项目实践,我深刻认识到:
数据质量决定模型上限:充足且高质量的数据是模型成功的基础
特征工程至关重要:合适的特征表示能显著提升模型性能
模型选择需因地制宜:没有最好的算法,只有最适合的算法
业务理解不可或缺:机器学习项目需要技术与业务的深度融合
持续迭代优化:模型开发是一个不断改进的过程
7.4 课程收获
《大数据数据分析与应用》课程让我系统学习了:
大数据处理的基本概念和技术架构
常用机器学习算法的原理与实现
数据预处理和特征工程的方法
模型评估和优化的策略
实际项目的完整开发流程
八、附录
8.1 环境配置
bash
# 所需Python库 pip install pandas numpy scikit-learn jupyter matplotlib seaborn
8.2 代码结构
text
购车意向预测项目/ ├── data/ │ └── ods_bye_car_investigation_info.csv ├── notebooks/ │ └── naive_bayes_car_prediction.ipynb ├── src/ │ ├── data_preprocessing.py │ ├── model_training.py │ └── evaluation.py └── README.md
8.3 参考文献
《机器学习》周志华 著
《Python机器学习实战》Sebastian Raschka 著
scikit-learn官方文档:https://scikit-learn.org/
朴素贝叶斯算法详解:李航《统计学习方法》