异常值

pandas - 异常值处理

≡放荡痞女 提交于 2019-12-06 01:07:08
异常值概念:是指那些远离正常值的观测,即“不合群”观测。异常值的出现一般是人为的记录错误或者是设备的故障等,异常值的出现会对模型的创建和预测产生 严重的后果。当然异常值也不一定是坏事,有些情况下,通过寻找异常值就能够给业务带来良好的发展,如销毁“钓鱼”网站,关闭“薅羊毛”用户的权限等。 异常值的判定方法: 1.n个标准差法 2.箱线图法 标准差法,就是用以样本均值+样本标准差为基准,如果样本离平均值相差2个标准差以上的就是异常值 箱线图法:以上下四分位作为参考, x > Q3+nIQR 或者 x < Q1 - nIQR 简单地理解,就是如果样本值不在上下四分位+标准差范围内,就是异常值 两种异常值判定是,如数据近似服从正态分布是,优先选择n个标准差法,因为数据的分布相对比较对称:否则优先选择箱线图法,因为分位数并不会受极端值的影响。 异常数据处理方法: 1.删除法(前提是异常观测的比例不能太大) 2.替换法(可以考虑使用低于判别上下限的最大值或最小值,均值或中位数替换等) python处理异常值实例: 原数据(部分): 代码: import pandas as pd sunspots = pd.read_table(r'D:\sunspots.csv',sep = ',') xbar = sunspots.counts.mean() xstd = sunspots.counts

相关分析流程总结

蓝咒 提交于 2019-12-04 05:56:04
为了便于理解,我们先简单介绍下相关分析,然后按照分析流程顺序,对每一步可能会涉及的问题进行简要说明。 相关分析 使用相关分析,通常是研究两个变量的相关性情况。比如学习成绩和听课质量的关系;员工敬业度与薪资的关系等等。 1.数据类型 相关分析的适用范围很广,理论上讲,凡是考察两个变量相关性,都可以叫做相关分析。 但依据习惯,我们通常说的相关分析,多指的是 两个定量数据 之间的 简单相关分析 ,这就要求两个变量都是定量数据,即选项数字大小要可比较,且有实际意义。 如果两个数据均为定类数据,则不可以直接用相关分析,而应该使用卡方分析测量相关性(准确说应该是差异分析)。 如果一个是定类数据,一个是定量数据,则应该使用方差分析。 这种误用常见于分析 背景信息题与核心研究题项的相关情况。 2. 正态性 相关分析要求数据服从正态分布,因此分析前需要检验数据的正态性。 正态性有多种检验方法,常见方法如:正态图、正态性检验、P-P图/Q-Q图等。 正态性的判断标准可以查看之前的文章: 多种判断正态性的方法详细说明 ​ 由于相关分析对正态性要求比较宽松,即使违反计算结果也比较稳健,只要数据基本满足正态即可。如果数据完全不正态,则可以用Spearman相关系数。 3. 查看线性趋势 当两个定量数据在散点图上的散点呈现直线趋势时,就可以认为两者存在直线相关趋势,这也是相关分析的一个基本前提。 SPSSAU

数据分析之信用风险评分卡建立

匿名 (未验证) 提交于 2019-12-03 00:34:01
项目需求:现某金融公司想要通过建立信用风险评分卡对客户进行判断,是否发放贷款 项目描述:数据来源 kaggle 数据量 4 万条,原始字段数 33 个 项目目的: 使用机器学习构建信用卡评分模型,对新样本做出预测 环境和工具: Rstudio, prettyR, smbinning 流程: 1.数据探索:完全缺失字段,以及二分类变量正类缺失的字段进行删除,对异常值采取盖帽 法进行替换 2 对变量进行分箱操作。使用 smbinning 包中的函数,通过决策树进行最优分箱,得到每 个变量的分箱结果,以及对应的 IV 值和 WOE 值。 3 通过 IV 值大于 0.02 的部分,筛选变量(性别,年龄,婚姻,区编号,是否有家庭电话, 工作年限,收入共 7 个变量),并通过 smbinning.gen 和 smbinning.factor.gen 函数生成 新的变量并生成新的数据表。变量值为分箱后对应的 WOE 值,数据模型进行建模 4 采用 Logistic(逻辑回归)进行学习建模,对输出结果通过 smbinning.scaling 进行打分, 生成评分卡 5.通过评分卡对原数据客户进行打分, 基本判断,好坏客户的分数取值分布情况。其次通 过 smbinning.metrics()输出结果, 得到评分卡的分数最优阈值为 546, AUC 值为 0.66, 并不是很好,准确率

餐饮销量额数据缺失值及异常值检测代码

匿名 (未验证) 提交于 2019-12-03 00:19:01
餐饮销量额数据缺失值及异常值检测代码 # 设置工作空间 # 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间 setwd( "E:\\R_workspace\\R语言数据分析与挖掘实战\\chp3" ) # 读入数据 saledata <- read.csv(file = "./data/catering_sale.csv" , header = TRUE) View(saledata) # 缺失值检测 并打印结果,由于R把TRUE和FALSE分别当作1、0, # 可以用sum()和mean()函数来分别获取缺失样本数、缺失比例 # complete.cases的TURE为完整值 # > an=c(1,2,NA,3,4,5,6) # > complete.cases(an) # [1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE # 完整值 sum(complete.cases(saledata)) # 缺失值 sum(!complete.cases(saledata)) # 缺失比例:1/201 mean(!complete.cases(saledata)) # 显示缺失的数据 saledata[!complete.cases(saledata), ] # 异常值检测箱线图 # 希望将box统一调粗或者调细时

Python学习-数据异常检测

匿名 (未验证) 提交于 2019-12-02 22:54:36
数据科学中,在对数据分析前,必须要多数据进行处理。将非正常的、错误的数据输入到算法中会导致不好的结果。所以异常的检测及处理为非常重要的一环。 1.1 单变量异常检测 先用箱图来直观观察一下每个特征的分布情况 from sklearn.datasets import load_boston import numpy as np import pandas as pd from sklearn import preprocessing data=load_boston() boston=pd.DataFrame( data.data) boston.columns=data['feature_names'] boston.pop('CHAS')#remove column normolized_data=preprocessing.StandardScaler().fit_transform(boston) boston.boxplot(sym='r',vert=False,patch_artist=True,meanline=False,showmeans=True) 箱图能非常直观的观察数据间离散程度、异常值(红色)、分布差异等。在这里, sym='r',表示异常点的形状, vert=False表示横向、竖向, patch_artist=True表示上下四分位框内是否填充

smooth L1 loss个人理解

僤鯓⒐⒋嵵緔 提交于 2019-12-02 15:03:51
最近在整理目标检测损失函数,特将Fast R-CNN损失函数记录如下: smooth L1 损失函数图像如下所示: L1损失的缺点就是有折点,不光滑,导致不稳定。 L2 loss的导数(梯度)中包含预测值与目标值的差值,当预测值和目标值相差很大,L2就会梯度爆炸。说明L2对异常点更敏感。L1 对噪声更加鲁棒。 当差值太大时, loss在|x|>1的部分采用了 l1 loss,避免梯度爆炸。原先L2梯度里的x−t被替换成了±1, 这样就避免了梯度爆炸, 也就是它更加健壮。 总的来说:相比于L2损失函数,其对离群点、异常值(outlier)不敏感,可控制梯度的量级使训练时不容易跑飞。 附录 (1)鲁棒性 最小绝对值偏差之所以是鲁棒的,是因为它能处理数据中的异常值。这或许在那些异常值可能被安全地和有效地忽略的研究中很有用。如果需要考虑任一或全部的异常值,那么最小绝对值偏差是更好的选择。 从直观上说,因为L2范数将误差平方化(如果误差大于1,则误差会放大很多),模型的误差会比L1范数来得大,因此模型会对这个样本更加敏感,这就需要调整模型来最小化误差。如果这个样本是一个异常值,模型就需要调整以适应单个的异常值,这会牺牲许多其它正常的样本,因为这些正常样本的误差比这单个的异常值的误差小。 (2)稳定性 最小绝对值偏差方法的不稳定性意味着,对于数据集的一个小的水平方向的波动,回归线也许会跳跃很大

【数据分析与挖掘实战】数据探索篇

别来无恙 提交于 2019-12-02 08:57:24
目录 1.数据质量分析 1.1缺失值分析 1.2异常值分析 1.3一致性分析 2.数据特征分析 2.1分布分析 2.2对比分析 2.3统计量分析 2.4周期性分析 2.5贡献度分析 2.6相关性分析 3.数据探索主要工具 1.数据质量分析 在做数据分析和挖掘时,在获取数据后,一般第一步就是对数据进行探索性的分析,通过计算一些统计量或者绘制图表等方法来看数据特征。数据探索有利于后期的数据建模,本文从数据质量和数据特征两部分介绍数据探索的过程。 码字不易,喜欢请点赞!!! 1.1缺失值分析 缺失值主要包括 记录缺失 和 属性值缺失 , 产生原因 可能是: 信息无法获取,或获取成本太高 信息遗漏 属性值不存在 缺失值影响 主要有: 数据建模丢失大量有用信息 数据建模不确定性增加,模型中规律更难把握 包含空值的数据导致建模过程混乱,输出的可靠性降低 缺失值处理 主要包括 删除缺失值存在的记录 和 缺失值插补 以及 不处理 三种方法。缺失值处理的具体过程后面介绍数据预处理的时候再介绍。 1.2异常值分析 异常值也成为 离群点 ,异常值对数据建模的影响非常大,因此需要先进行处理,一般会找到异常值后修正,无法修正的就剔除。异常值检验的三个方法: 简单统计量分析 :通过对变量进行描述性统计,看看哪些数据不合理,比如年龄199岁这样的不合理数据。 3 σ \sigma σ 原则

算法启蒙

淺唱寂寞╮ 提交于 2019-12-01 18:50:31
https://www.cnblogs.com/nxld/p/6168380.html 本文,主要想简单介绍下数据挖掘中的算法,以及它包含的类型。然后,通过现实中触手可及的、活生生的案例,去诠释它的真实存在。 一般来说,数据挖掘的算法包含四种类型,即分类、预测、聚类、关联。前两种属于有监督学习,后两种属于无监督学习,属于描述性的模式识别和发现。 有监督学习 有监督的学习,即存在目标变量,需要探索特征变量和目标变量之间的关系,在目标变量的监督下学习和优化算法。例如,信用评分模型就是典型的有监督学习,目标变量为“是否违约”。算法的目的在于研究特征变量(人口统计、资产属性等)和目标变量之间的关系。 分类算法 分类算法和预测算法的最大区别在于,前者的目标变量是分类离散型(例如,是否逾期、是否肿瘤细胞、是否垃圾邮件等),后者的目标变量是连续型。一般而言,具体的分类算法包括,逻辑回归、决策树、KNN、贝叶斯判别、SVM、随机森林、神经网络等。 预测算法 预测类算法,其目标变量一般是连续型变量。常见的算法,包括线性回归、回归树、神经网络、SVM等。 无监督学习 无监督学习,即不存在目标变量,基于数据本身,去识别变量之间内在的模式和特征。例如关联分析,通过数据发现项目A和项目B之间的关联性。例如聚类分析,通过距离,将所有样本划分为几个稳定可区分的群体。这些都是在没有目标变量监督下的模式识别和分析。

【Python数据分析】——药品销售数据分析(完整项目实战)

只谈情不闲聊 提交于 2019-12-01 02:10:25
一、前言 这篇文章找来了有关药品销售数据进行案例分析练习,利用适当的统计方法对相关数据进行月均消费次数、月均消费金额、客单价和消费趋势等几个业务指标进行分析。 分析过程为: 数据获取、数据清洗、建模分析、可视化 二、数据获取 (文末有数据获取方式) 这是我们的原始数据,xlsx格式 导入相关的包并读取数据,读取的时候用object读取,防止有些数据读取不了。 接着可以查看数据的相关信息 从上图中我们可以看到该数据集一共有6578行数据,其中第一行是标题,有7列。“购药时间”和“社保卡号”有6576条数据,而其余的有6577条,说明数据中存在这缺失值。“购药时间”和“社保卡号”各缺失一行数据,在这里我们要对数据进行缺失值等进一步处理。 三、数据清洗 数据清洗的过程包括: 选择子集、列名重命名、缺失值处理、数据类型转换、异常值处理以及数据排序。 3.1选择子集。 在数据分析的过程中,有可能数据量会非常大,但并不是每一列都有分析的价值,这时候就要从这些数据中选择有用的子集进行分析,这样才能提高分析的价值和效率。但是本例子中暂不需要选择子集,可以忽略这一步。 3.2列名重命名。 在数据分析的过程中,有些列名和数据容易混淆或者让人产生歧义。比如说本数据集的第一列是“购药时间”,然而我们做数据分析的时候应该是站在商家的角度来看,因此将列名改为“销售时间”就会更清晰明了

上下文管理协议

断了今生、忘了曾经 提交于 2019-11-30 23:51:40
一、上下文管理协议其实就是 with obje as f 在文件操作时用过,with open("a.txt","r") as f: 当时的好处就是不用手动关闭文件了 学到现在我们知道了,其实open也是一个类,之所以能用 with as 是类里做了“小手脚” class Foo: def __init__(self,name): self.name = name def __enter__(self): print("执行enter") return self def __exit__(self, exc_type, exc_val, exc_tb): print("执行exit") with Foo('a.txt') as f: print(f) print(f.name) print("======>") print("======>") print("000000000000000") 上述过程: 1. with obj ------->触发 obj.__enter__(), 拿到的返回值赋值给 f (with obj as f 等同于 f= obj.__enter__()) 2. with obj as f 内的代码执行完毕后触发 __exit__() 二、__exit__中的异常处理 先了解下异常 分为:异常类,异常值,追踪信息 ①没有异常的情况下