一、问题分析
将问题抽象成模型,这是一个什么问题(分类、聚类、回归?),使用什么模型
1、明确分析目的,在开展项目之前,问清楚:
- 问题背景:为什么开展这个项目/数据分析/分析需求?为了解决什么问题?
- 业务场景:做这个是用在哪里?干什么的?
- 问题结果:通过这个项目/数据分析需要我解决什么问题?
- 问题方案:思考怎么做
2、确定分析思路,梳理分析思路,搭建分析框架,把分析目的分解成若干个不同的分析要点,即如何具体展开数据分析,需要从那几个角度进行分析,采用哪些分析指标。 最后还要确保分析框架的体系化,使分析结果具有说服力。简单来说就是先分析什么,后分析什么,使得各个分析点之间具有逻辑联系。
二、数据获取
寻找开源数据(竞赛数据集、网站),爬取网络数据(八爪鱼、urlib、beautifulsoup、request)
1、数据获取来源
-
业务库数据
-
相关业务网站爬取(工具:八爪鱼、urlib、beautifulsoup、request)
-
竞赛数据库(如kaggle、天池、DC竞赛、TinyMind)
-
开源数据库(百度、github)
2、数据量少(过拟合)
数据补充方法:
-
补充相关开源数据:垂直领域业务网站爬虫(八爪鱼、urlib、beautifulsoup、request)、竞赛数据库(如kaggle、天池、DC竞赛、TinyMind)、开源数据库
-
造数据:图片识别可以旋转、平移、放大、缩小图片
3、数据量多(业务数据库)
数据筛选方法:
-
抽样采集:非概率抽样(用于某些特定研究项目)、概率抽样(最常用)
4、数据各类不平衡/数据倾斜:
-
对数据进行欠采样/重采样来让正负例保持一个差不多的平衡,或者使用树型算法来做分类
5、数据存储
-
存本地,如语料库
-
存数据库,如mysql、spark、hive
三、数据预处理(数据清洗)
数据质量>>数量,数据决定了模型的上限
1、缺失值(分析缺失原因并处理)
-
数据无关紧要且数据量大,删除
-
均值/中值填充空值与无效值
-
清除不必要的空格
2、重复值:判断后删除(excel去重、pandas去重)
3、异常值:清除极端异常值,有时保留一定的噪声作为特征使用
4、不一致值:分析原因再处理
5、文本清洗:乱码,多余无效空格,网页html标签等
6、数据标注
7、数据集划分:有监督的学习需要划分训练集、验证集、测试集=7:1:2、8:1:1
8、数据清洗及标准化
四、特征工程(基于业务细化特征)
-
分析哪些特征作为模型输入参数,不同业务场景特征不同:NLP(字词句、词向量、关键词、实体词等)、图像(纹理、颜色、形状等)
-
数值型数据做描述性统计:均值、中位数、众数、百分位数、极值、偏差、方差、标准差、显著性
-
推断统计
-
一般地,数据量为特征数的10倍以上,防止过拟合
五、模型构建:算法模型(回归、分类、聚类)
1、确定问题类型
a)有监督学习
- 分类:逻辑回归LR、支持向量机SVM、决策树、随机森林RF
- 回归:线性回归
- 标注:隐马尔科夫HMM
b)无监督学习
- 聚类
2、数据量规模
- 数据量小:数据量很小,用朴素贝叶斯、逻辑回归或支持向量机
- 数据量适中或者较大:用树模型,优先 xgboost和lightgbm
- 数据量较大:尝试使用神经网络
3、服务器算力
- GPU:深度学习框架(tensorflow、keras、pytorch……)、深度学习模型(CNN、RNN/LSTM、attention、bert、……)
- CPU:传统机器学习框架(scikit-learn)、传统机器学习模型(SVM、逻辑回归LR、GBDT、随机森林……)
4、业务场景
- 经验
六、效果评估
1、评价标准
- 混淆矩阵
True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)
-
准确率:被分对的样本数除以所有的样本数
-
精确率:被分为正例的示例中实际为正例的比例
-
召回率:所有正例中被分对的比例,recall=TP/(TP+FN)
-
F1值:P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,当F1较高时则能说明试验方法比较有效
-
ROC曲线:以假正率(FP_rate)和假负率(TP_rate)为轴的曲线,ROC曲线下面的面积叫做AUC,曲线与FP_rate轴围成的面积(记作AUC)越大,说明性能越好
-
PR(Precision-Recall)曲线:横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲 线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本, 小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条P-R 曲线是通过将阈值从高到低移动而生成的。图1是P-R曲线样例图,其中实线代表 模型A的P-R曲线,虚线代表模型B的P-R曲线。原点附近代表当阈值最大时模型的 精确率和召回率。
七、模型优化
1、调参
2、过拟合(在训练集上效果好,在测试集上效果差,泛化能力差):
1)原因:
- 训练数据不足
- 观察值与真实值存在偏差
- 数据有噪声
- 训练模型过度,导致模型非常复杂
2)方法:
a)数据处理:清洗数据、减少特征维度、类别平衡
- 清洗数据:纠正错误标签,删除错误数据(文本分类预测结果复查语料库中错误数据)
- 降维
- 类别平衡
b)辅助分类节点
c)正则化
3、欠拟合(训练集与验证集表现差):
1)原因:训练模型太简单,特征没有学习到
2)方法:
- 特征工程,添加更多特征
- 减少正则化参数,让模型变复杂
- 使用更深或更宽的模型
- 使用集成方法,融合几个具有差异的弱模型,成为一个强模型
八、模型部署(需要上线的业务)
部署为接口
- nginx+uwsgi+flask
- tf-serving(深度学习模型)
九、报告输出
-
word、ppt分析报告
-
结果输出到BI报表,做可视化分析
-
有效结论