Big_Data_Classification_Phone_User_Python
该项目有关大数据的分类问题,是根据用户信息提取不同的特征,然后监督学习用户的分类,总共有5类,正常用户、客服人员、外卖员、快递员、*扰电话。
-
代码文件夹**有3个文件夹,分别是data。
data文件夹下存放客户通话记录call_data.csv、顾客数据信息cust_data.csv、手机应用软件使用信息dpi_data.csv、手机产品信息prd_data.csv、终端信息trml_data_update.csv和最后的标签信息train_result.csv。
这几个数据所蕴含的数据即为原始特征。
-
代码文件有模型优化.ipynb,即jupyter notebook,而另一个代码文件network_.py是专门多层感知机模型的代码。
-
- OS:Windows 10
- IDE:PyCharm
- CPU or GPU
-
代码块会先导入所有数据,通过将所有数据预处理得到不同的特征,即特征工程。
-
训练一个二分类的xgboost将正常和其他类分开,其他类包括其他4种类别:客服人员、外卖员、快递员、*扰电话。模型性能良好,训练集下F1结果为99%,测试集下F1结果为95%。
-
将二分类的xgboost分出来的其他类再进行特征修改和组合。
-
将其他类通过4个分类,即多分类的xgboost进行训练,分类性能一般,需要优化。训练集F1结果为72%,测试集的F1结果为70%。
-
- 在Jupyter Notebook中运行模型优化.ipynb中的代码块进行模型执行。
-
-
F1结果:F1=2*(准确率*召回率)/(准确率+召回率)
-
F1的值是精准率与召回率的调和平均数。F1的取值范围从0到1的数量越大,表明实现越理想。
-
Precision(精准率)=TP/(TP+FP)
-
-
-
数据层面:由于客户数据不能像图像一个可以翻转、变换大小来生成新的图片以数据增强,因此数据增强方向不可行。
-
特征工程:由第二级分类器输出可以得到分类器对于训练集的f1有90%以上,而对测试集的f1只有70%,因此可以推断是过拟合问题,从该角度出发,选择减少特征数量以简化分类器,防止模型过复杂而导致的过拟合问题。
尝试了两种特征修改:一、将原来的特征,包括原始特征和整合出来的新特征进行修改,将原始特征剔除,只让模型学习新的特征。但该修改方式没有性能的提升,依然在测试集上输出70%的f1。二、在修改方式一的基础上再将新特征进行筛选,筛选过程如代码块注释部分,并新增一些客户产品换用频率等特征,如代码块注释所示,该修改方式依然没有性能的提升,输出依然为70%。
-
模型层面:因为上述两种特征修改方式没有效果,但对于新的特征已经不知道怎么挖掘。因此,从模型层面入手。
原始代码中的xgboost模型还有lgb模型都是基于决策树模型的,决策树模型学习简单,但是因为树会随着深度增加而复杂度指数型增长的,因此决策树模型对于数据敏感,容易过拟合。
第一次尝试使用多层感知机模型,使用4层感知机,其中一层输入层、一层输出层、两层隐含层,隐藏层神经元个数分别为300个和100个,输入使用第二种特征修改方式下的特征数据输入,但输出性能依然没有提升。第二次尝试使用多层感知机最后一层加上全连接层,即5层结构,前四层为第一次尝试的4层感知机,最后一层为全连接层。前四层神经元个数依然和第一次尝试的多层感知机一致,这一次是代码出bug,输出的标签只有3,而没有其他类型的标签输出。
-
思考总结:由输出结果,还是判断是过拟合问题。新的尝试思路仍然是特征工程和模型角度出发。
一、特征工程可能需要专业人士判断并筛选出对于分类有用的信息和整合出来的新特征。56个特征可能还是有点多,模型需要接收刚刚好的重要特征信息。
二、从模型角度出发,可以尝试SVM多分类器等普适分类器,神经网络这边多层感知机或者全连接层模型都可以尝试,更偏向于神经网络效果会好。