基于随机森林特征工程语音用户满意度分析(数据预处理+随机森林)

2023-10-29

1.背景 

数据分析而言,数据是显而易见的核心。但是并不是所有的数据都是有用的。存在不完整的、含噪声的和不一致的数据是现实世界大型的数据库或数据仓库的共同特点。一些比较成熟的算法对其处理的数据集合一般有一定的要求,如数据完整性好、数据的冗余性小、属性之间的相关性小。然而,实际系统中的数据一般无法直接满足数据挖掘算法的要求,因此必须对数据进行预处理,以提高数据质量,使之符合数据挖掘算法的规范和要求。数据预处理技术是数据分析以及数据挖掘过程中非常重要的一环。 数据预处理是指在对数据进行数据挖掘的主要处理以前,先对原始数据进行必要的清洗、集成、转换、离散、归约、特征选择和提取等一系列处理工作,达到挖掘算法进行知识获取要求的最低规范和标准。

2.预处理功能

2.1数据清洗

数据清洗实际上也是数据质量分析,检查原始数据中是否存在脏数据(不符合要求,或者不能直接进行分析的数据),并且处理脏数据。

常见情况如下:

  • 缺失值
  • 异常值
  • 重复数据
#导入库
import seaborn as sns
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt 
import seaborn as sns 
import scipy.stats as st
import warnings
import missingno as msn

from scipy.stats import skew
%matplotlib  inline
plt.style.use('seaborn-darkgrid')
sns.set(style = 'darkgrid')
import  warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['STSong']

 本文使用mathorcup杯B题数据附件1语音用户数据集。语音用户数据集包括5433个样本,每个样本包括51个特征变量和四种评分情况。

链接:https://pan.baidu.com/s/1cELfAf9rjBxCypyHv2i7Uw?pwd=gbit 
提取码:gbit

#源数据导入
file1 = pd.read_excel('./附件1语音业务用户满意度数据.xlsx')
file1_n = file1.copy()
#查看数据集大小
file1_n.shape

 缺失值处理

缺失值处理一般有三个处理步骤(判断数据是否为NaN、过滤缺失值、补全缺失值)。

本文首先查看各个数据条空值比例,并使用missingno库可视化缺失值和绘制缺失比例柱状图。

#缺失值可视化
msno.bar(file1_n)
## 查看空值比例
data_na = (file1_n.isnull().sum()/len(file1_n))*100
data_na = data_na.drop(data_na[data_na == 0].index).sort_values(ascending=False)
## 绘制空值比例的条形图
plt.figure(figsize=(15,10))
sns.barplot(x=data_na.index, y=data_na)
plt.xlabel('特征', fontsize=15)
plt.ylabel('缺失比例', fontsize=15)
plt.xticks(rotation=90) # 倾斜90度

 图1 缺失比例柱状图

 

 由图1 缺失比例柱状图得出:发现“用户描述”,“用户描述.1”,“重定向次数”,“重定向驻留时长”数据缺失比例在96%以上,属于高度缺失数据,那我们对于这些高度缺失数据通常得处理方式是删除,如果数据没有要求得话,那么我们将直接删除。

#用户描述过于分散无判断意义,故删除
file1_n = file1.copy()
file1_n.drop("用户描述", axis = 1, inplace = True)
file1_n.drop("用户描述.1", axis = 1, inplace = True)
#删除重定向次数、重定向时长
file1_n.drop("重定向次数", axis = 1, inplace = True)
file1_n.drop("重定向驻留时长", axis = 1, inplace = True)
#删除id
file1_n.drop("用户id", axis = 1, inplace = True)

删除完数据我们要继续查看缺失数据条,本文得数据就有说明要求“是否关怀用户”和“是否去过营业厅”空白部分为0,故使用fillna()方法进行填充。

#是否关怀用户,空白的为“否
file1_n["是否关怀用户"] = file1_n["是否关怀用户"].fillna('否')
#是否去过营业厅,空白的为“否
file1_n["是否去过营业厅"] = file1_n["是否去过营业厅"].fillna('否')

 填充完成后,我们要养成好习惯继续查看缺失数据条。就会发现剩下一些缺失部分较少的低度缺失数据,通常我们处理这些数据要根据不同数据类型进行不同方式处理。一般数据存在数值数据类型和类别数据类型。数值类型的特征,他们有测量或计数的意义。主要可分为两类:连续特征和离散特征。常用的对数值特征提取和处理方法有:

  • 缩放特征的缩放是一种用来统一特征取值范围的方法,在逻辑回归、SVM等不属于树模型的算法中,往往需要进行缩放以使模型取得较好的效果。常用方法有:Z-score标准化、最大最小归一化等。对数变换对数变换可以对数值较大的范围进行压缩,对数值较小的范围进行扩展,可以很好地应对长尾分布现象,使数据分布更接近正态分布。
  • 数值离散化当原始特征的数值作用不大时,可以采用某种临界点等方法将原始特征转化为二值特征。分箱当数值跨越的数量级范围较大时,可以把数值按一定的顺序划分为几部分,常用方法有:固定宽度分箱、分位数分箱、卡方分箱、聚类分箱等。

类别特征的取值没有数学意义,不能直接进行计算,需要通过各种编码方法将其变为数值特征。

常用的类别特征提取方法有:

  • 标签编码(Label Encoding)标签编码是对类别特征中的每一类特征值赋予一个数值,从而转化为数值特征。当类别特征取值为有序变量时,优先选择标签编码;其他情况下则一般不采用,否则会为特征引入额外的空间距离信息。
  • 独热编码(One-Hot Encoding)独热编码又称一位有效编码,是最为常用的编码方法,可以将一个维度为M的特征转变为M个二值特征。对类别特征采用One-Hot编码,会使特征之间距离计算更加合理,也起到了扩充特征的作用。
  • 计数编码(Count Encoding)计数编码通过计算每个特征值出现的次数来表示特征的信息,在各种模型中都有一定的效果。其缺点是容易受到异常值的影响,且不同特征值的编码可能产生冲突,根据这一点进一步提出计数排名(LabelCount)编码。
  • 目标编码(Target Encoding)目标编码是一种结合目标变量进行编码的方法,即有监督的编码方法,最典型的是Micci-Barreca提出的均值编码(Mean Encoding)。对于高基数(即特征取值较多)特征,使用独热编码会导致特征维度急剧增加,不利于模型预测,而目标编码则适合于这种情形。

本文示例对于类别型变量的缺失值用众数进行填充、对于数值型变量的缺失值用平均数进行填充

fill_col = ['是否4G网络客户(本地剔除物联网)', '终端品牌类型', 
'是否5G网络客户', '是否实名登记用户', '客户星级标识','当月欠费金额', 
'前第3个月欠费金额', '终端品牌', '外省流量占比']

# 对于分类型变量的缺失值用众数进行填充、对于数值型变量的缺失值用平均数进行填充
for s in fill_col:
    if s in file1_n.columns:
        if file1_n[s].dtype==object:
            fill_none = file1_n[s].value_counts().index[0]
        else:
            fill_none = np.mean(file1_n[s])
        file1_n[s] = file1_n[s].fillna(fill_none)

使数据分布更接近正态分布。

numeric_feats = file1_n.dtypes[file1_n.dtypes != "object"].index

# 检查所有数值特征的偏斜
skewed_feats = file1_n[numeric_feats].apply(lambda x: skew(x.dropna())).sort_values(ascending=False)
print("\n转换后特征偏度: \n")
skewness = pd.DataFrame({'Skew' :skewed_feats})
skewness.head(10)
#boxcox转换
from scipy.special import boxcox1p
skewed_features = skewness.index
lam = 0.15
for feat in skewed_features:
    #all_data[feat] += 1
    file1_n[feat] = boxcox1p(file1_n[feat], lam)

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于随机森林特征工程语音用户满意度分析(数据预处理+随机森林) 的相关文章

随机推荐

  • Matlab绘图时的几个小技巧(修改刻度线长度、添加/去掉右边和上面的轴与刻度线、出图时去掉旁边的空白部分)

    set gca TickLength 0 005 0 035 修改坐标轴刻度线的长度 box on 开启右面和上面的坐标轴 box off 关闭右面和上面的坐标轴 set gca LooseInset 0 0 0 0 删除掉图旁边多余的空白
  • 技术至简-8:调制解调到底是什么样的数学运算?---从时域和频域两个角度看调制解调的本质

    目录 1 从时域的角度看调制 原始信号与载波信号的相乘 2 从频率的角度看调制 原始信号的频谱搬移到载波信号的频谱附近 3 从时域的角度看解调 调制后信号与载波信号的相乘 4 从频率的角度看解调 把载波频谱附近的原始信号的频谱搬移到原始信号
  • 单极性非归零NRZ码、双极性非归零NRZ码、2ASK、2FSK、2PSK、2DPSK及MATLAB仿真

    这篇博客是用MATLAB仿真观察二进制数字信号码元速率和它的带宽的关系 书上给了数字基带信号和频带信号的功率谱密度 但是我还没搞明白FFT与功率谱密度的关系 所以博客里图片的信号幅值就不要纠结啦 看包络形状和带宽就行 如果有明白FFT与功率
  • k8s之Informer Store、Indexer、ThreadStore详解

    Store 在 Informer 中 Store 提供了将存储对象的能力 而 Indexer 在 Store 的基础上又提供了可以自定义索引来查询对象的功能 Store 接口提供的功能比较直观 主要是用于对对象的增删改查 包括Indexer
  • Docker 之MySQL 重启,提示Error response from daemon: driver failed programming external connectivity on **

    今天刚刚修改基于Docker服务的MySQL配置参数 准备重新加载MySQL 容器 提示如下截图的错误信息 root localhost docker restart 7d98a59a8012 Error response from dae
  • 【Vue】【01】vue环境搭建

    1 环境安装 https nodejs org zh cn 选择长期维护版 下载完成下一步下一步安装 建议选择版本低的行安装 2 cmd命令 node v npm v 3 淘宝镜像cnpm npm install g cnpm regist
  • 如何使用GPT2中文闲聊对话系统,机器人对话,自动对话!

    目录 目录结构 运行环境 首次运行 如何训练自己的模型 数据预处理 训练模型 如何确定这个 val num数值 编辑 编辑最后说明 打算做一个微博自动评论的一个模型 假象可以模拟回复粉丝 或者评论其他微博 首先下载GPT2模型代码 http
  • 运维实践

    欢迎关注 WeiyiGeek 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 全栈实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主页 ht
  • (已解决) org.apache.ibatis.ognl.OgnlException: source is null for getProperty(null, “staffId“)

    问题现象 今天在项目中遇到一个mybatis的报错 org apache ibatis ognl OgnlException source is null for getProperty null staffId 这是我之前从未遇到过的问题
  • 如何结合FT2232HL/CMSIS-DAP+Eclipse+OpenOCD软硬件工具使用SWD调试接口在Windows10操作系统在线调试S32K3XX(Cortex M7)

    由于我们公司自己需要开发烧录工具 本人通过google搜相关文档和看ARM公司的技术文档 终于实现了这个功能 因为涉及的内容知识点比较多 对于玩嵌入式MCU的小白来说要普及的知识 逐个介绍篇幅会比较长 本文中只介绍相应的关键知识点 篇幅有相
  • 大家好,这里是第一篇博客文章!

    大家好 我的第一篇CSDN博客与大家见面了 去年曾经在班级微信公众平台写过一篇关于MySql的安装及配置的推送 周围同学的反响还都不错 想着为今后找到一个技术分享交流的平台 也能够快速地增删改查已发布的文章 并且进行有效的沟通交流 便开通了
  • 面向对象的设计原则

    开放封闭原则 软件实体 类 模块 函数等 应该可以扩展 但是不可修改 大白话 就是面对新需求时 现有的类最好不做修改 以增加新的类的方式来完成新需求 这样方便维护和扩展 依赖倒转原则 抽象不应该依赖细节 细节应该依赖于抽象 1 高层模块不应
  • 慕课:软件测试各章节答案

    说明 1 该课程为西北工业大学的软件测试的慕课 2 绿色选项为正确答案 题目后括号中的答案为本人的作答 对的用绿色标示 错的用红色标示 与错题集类似 第一章 软件测试基础 1 软件测试目的是什么 ABC A 修正软件错误和缺陷提高软件质量
  • NUC980开源项目29-W25N01挂载YAFFS2文件系统

    上面是我的微信和QQ群 欢迎新朋友的加入 配置内核 取消ramdisk 设置Boot option set bootargs noinitrd root dev mtdblock2 rootfstype yaffs2 rootflags i
  • 互连线的阻抗不连续

    前言 保持互连通道的阻抗连续性 是信号完整性设计的一项重要内容 互连通道中如果存在阻抗不连续点 不仅会引起待传输信号本身的反射 而且可能还会放大其他方面因素的影响 例如串扰噪声耦合到邻近线 在临近线上传播 如果邻近线上存在多处不连续点 串扰
  • 亲密关系-【有效表达】-如何完善自己的表达思路?

    有效沟通三步 1 正面假设 2 区分感受和结论 3 区分请求和命令 案例 最近工作压力大 跟老公说我需要他安慰 他却觉得我作 还说最近是不是闲的 你需要安慰 老公理解的是 老公说你作 你听到的是 攻击 不想再表达 你听到这件事 想说些什么
  • 关于数据治理ChatGPT是如何回答的?

    这两天你的朋友圈是不是被火爆全网的ChatGPT霸屏了 你是不是已经迫不及待感受过ChatGPT带来的惊喜 那你知道ChatGPT是什么吗 面对掀起的一波话题热潮 好奇使然 小编去特别关注了一下最近火热的ChatGPT 看看这是何方神圣 竟
  • openvas漏洞扫描器

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 一 openvas简介 二 作用 三 安装及使用 openvas架构 在这里插入图片描述 https img blog csdnimg cn f46eba30a8a
  • jvm垃圾回收机制原理读书笔记

    可达性分析 主要是用来解决哪些对象是不可用的 可以被回收 以一系列称为GC Roots的对象为起点 若对象到GC Roots之间没有任何引用关系 则认为该对象是不可用的 可以被回收 具体可作为GC Roots的对象如下 不是全部 所有Jav
  • 基于随机森林特征工程语音用户满意度分析(数据预处理+随机森林)

    1 背景 数据分析而言 数据是显而易见的核心 但是并不是所有的数据都是有用的 存在不完整的 含噪声的和不一致的数据是现实世界大型的数据库或数据仓库的共同特点 一些比较成熟的算法对其处理的数据集合一般有一定的要求 如数据完整性好 数据的冗余性