Python数据分析与挖掘实战笔记

本文详细介绍了数据探索阶段的数据质量分析和特征分析,包括缺失值、异常值处理,以及分布和周期性分析。接着讨论了数据预处理的四个步骤:数据清洗、数据集成、数据变换和数据规约。重点讲解了数据规约中的属性规约和数据规约方法。随后,阐述了挖掘建模中的分类与预测、决策树、聚类分析、关联规则和时间序列分析,以及相应的评价指标和算法。此外,还提及了离群点检测在不同领域的应用。
摘要由CSDN通过智能技术生成

1. 数据探索

通过检测数据集的数据质量、绘制图表、计算某些特征量等手段,对样本数据集的结构和规律进行分析的过程就是数据探索。数据探索有助于选择合适的数据预处理和建模方法,甚至可以完成一些由数据挖掘解决的问题。主要从数据质量分析数据特征分析两个角度对数据进行探索。

1.1 数据质量分析

主要任务 检测原始数据是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据

常见的脏数据

  • 缺失值
  • 异常值
  • 不一致的值
  • 重复数据及含有特殊符号如#、¥、*的数据

缺失值主要包括记录的缺失和记录中某个字段信息的缺失,一般有删除、插值、忽视等三种方法。异常值分析是检验数据是否有录入错误以及有不合常理的数据,其数值明显偏离其余的观测值。也称离群点分析。有简单统计量分析、 3 σ 3\sigma 3σ原则、箱型图分析。一致性分析是指数据的矛盾性或者不相容性,发生在数据集成中,可能数据来自不同数据源、对于重复存放的数据未能进行一致性更新造成的。

1.2 数据特征分析

分布分析能揭示数据的分布和分布类型。对于分析定量数据,欲了解其分布形式是对称的还是非对称的,发现某些特大或者特小的可疑值,可通过绘制频率分布表、绘制频率分布直方图、绘制茎叶图进行直观分析;对于分析定性数据,可以绘制饼图或者条形图直观的显示分布情况。

定量数据分布分析

选择组数组宽是做频率分布分析时最主要的问题。绘制频率分布按照下列顺序进行。

  • 求极差
  • 决定组距与组数
  • 决定分点
  • 列出频率分布表
  • 绘制频率分布直方图

定性数据分析

常使用变量的分类类型分组,可以采用饼图或者条形图描述定性变量的分布。

对比分析

将两个相互联系的指标进行比较,从数量上展示和说明研究对象规模的大小,水平的高低,速度的快慢,以及各种关系是否协调。适用于指标间的横纵比较、时间序列的比较分析。

  • 绝对数据分析。利用绝对数进行分析。
  • 相对数分析
    • 结构相对数。将同一总体内的部分数值与全部数值相比得比重,用以说明事物的性质、结构或者质量。如居民食品支出额占消费支出总额比重、产品合格率等
    • 比例相对数。将同一总体内不同部分数值进行对比,表明总体内各部分的比例关系,如人口性别比例、投资和消费比例。
    • 比较相对数。将同一时期两个性质相同的指标数值进行对比,说明同类现象在不同空间条件下的数量对比关系。如不同地区商品价格对比,不同行业、不同企业间某项指标对比。
    • 强度相对数。将两个性质不同但有一定联系的总量指标进行对比,用于说明现象的强度、密度、普遍程度。如人均国民生产总值(元/人),人口密度用(人/平方公里)表示,人口出生率使用%0表示。
    • 计划完成程序相对数。某一时期实际完成数和计划书的对比,用以说明计划完成程度
    • 动态相对数。将同一现象在不同时期的指标数值进行对比,用以说明发展方向和变化速度。如发展速度、增长速度。

统计量分析

用统计指标对定量数据进行统计描述,常从集中趋势和离中趋势两方面进行分析。平均水平的指标是指对个体集中趋势的度量,使用最广泛的是均值和中位数。反应变异程度的指标是对个体离开平均水平的度量,使用较广泛的是极差、标准差、四分位间距。

极差=最大值-最小值

标准差 s = ∑ ( x i − x ‾ ) 2 n \displaystyle s=\sqrt{\frac{\sum{(x_i-\overline x)^2}}{n}} s=n(xix)2

变异系数 C V = s x ‾ × 100 % CV=\displaystyle \frac{s}{\overline x}\times 100\% CV=xs×100%

四分位间距 上四分位-下四分位

info = df.describe()
max_min_sale = info.loc['max','销售额']-info.loc['min','销售额']
std_sale = info.loc['std','销售额']
cv_sale = std_sale/info.loc['mean','销售额']
distance_4_sale = info.loc['75%','销售额']-info.loc['25%','销售额']

周期性分析

探索某个变量是否随时间变化而呈现出某种周期变化的趋势,时间序列。

贡献度分析

贡献度分析又称帕累托分析,原理是帕累托法则,对于一个公司来讲,80%的利润来自20%最畅销的产品,其他80%的产品只产生了20%的利润。例子产生80%利润的产品优先增加成本投入,减少其他产品的投入。

相关性分析

分析连续变量之间线性关系程度的强弱,并用适当统计指标表示出来的过程称为相关分析。

  1. 直接绘制散点图,判断两个变量之间是否有相关关系

  2. 绘制散点图矩阵,考察多个变量之间的相关关系

  3. 计算相关系数

    • pearson相关系数,一般用于分析两个连续变量之间的线性关系,要求连续变量的取值服从正态分布

    • spearman秩相关系数。

      不服从正态分布的变量、分类或者等级变量之间的关联性可采用Spearman秩相关系数,也称等级相关系数描述。
      r s = 1 − ∑ i = 1 n ( R i − Q ) 2 n ( n 2 − 1 ) r_s=1-\frac{\sum_{i=1}^n(R_i-Q)^2}{n(n^2-1)} rs=1n(n21)i=1n(RiQ)2
      R i R_i Ri表示 x i x_i xi的秩次, Q i Q_i Qi表示 y i y_i yi的秩次, R i − Q i R_i-Q_i RiQi x i 、 y i x_i、y_i xiyi的秩次之差。只要两个变量之间具有严格单调的函数关系,那么他们就是完全Spearman相关的。

    • 判定系数。即使pearson相关系数的平方。

2. 数据预处理

数据预处理的内容包括数据清洗、数据集成、数据变换和数据规约。数据预处理一方面要提高数据的质量,另一方面就是让数据更加适应特定的挖掘技术或工具。统计发现数据预处理工作占到整个过程的60%。

2.1 数据清洗

数据清洗的任务主要是删除原始数据集中无关数据、重复数据、平滑噪声数据、筛选掉与挖掘主题无关的数据,处理缺失值、异常值。

缺失值处理

  • 删除记录
  • 数据插补
  • 不处理

常见的数据插补方法

  • 均数、中位数、众数插补

  • 使用固定值。将缺失的属性用一个常量替换,如广州某工厂外来务工人员基本工资属性的缺失值可以使用广州市的外来务工人员工资标准。

  • 最近邻插补。在记录中找到与缺失样本最接近的样本的属性值插补

  • 回归方法。对有缺失值的变量,根据已有数据和与其他有关的变量数据建立拟合模型预测缺失度额属性值

  • 插值法。利用已知点建立合适的差值函数 f ( x ) f(x) f(x),未知点由对应的 x i x_i xi求出的函数值 f ( x i ) f(x_i) f(xi)替代

    • 拉格朗日插值法

      from scipy.interpolate import lagrange
      #s为原始序列,原始序列的第n个值为null
      #Lagrange(x,y)函数将(y.index,list(y))当做(x,y)传入返回一个ploy1d(x),然后传入x获取拟合值
      def ployinterp_column(s,n,k=5):
          #利用第n个值的前k个数和后k个数进行插值
          y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]
          y = y[y.notnull()]
          return lagrange(y.index,list(y))(n)
      
    • 牛顿插值法

异常值处理

  • 删除含有异常值的记录
  • 视为缺失值,利用缺失值的方法处理
  • 平均值修正,利用前后两个观测值的平均修正该异常值
  • 不处理,直接在含有异常值的数据上进行挖掘建模

大多数情况下需要分析异常值出现可能原因,再判断异常值是否应该舍弃,如果是正常的数据,可以直接在含有异常值的数据集上进行建模。

2.2 数据集成

数据集成就是将多个数据源合并且存放到一个一致的数据存储中的过程。要考虑实体识别属性冗余的问题,将源数据在最底层上进行转换、提炼、集成。

实体识别

  • 同名异议。数据源A的属性ID和数据源B的属性ID分别描述菜品编号和订单编号,描述不同实体。
  • 异名同义。数据源A中的sale_date和数据源B中的sale_dt都是表示销售日期的。
  • 单位不统一。描述同一实体分别使用国际单位和中国传统单位。

检测和解决这些冲突就是实体识别的任务。

冗余属性识别

  • 同一属性多次出现
  • 同一属性命名不一致导致重复

2.3 数据变换

对数据进行规范会处理,使数据转换为适当的形式。

简单的函数变换

简单的函数变换是对原始数据进行某些数学变换,常用的变换包括平方、开方、取对数、差分运算等。即
x ′ = x 2 x ′ = x x ′ = l o g ( x ) ∇ f ( x k ) = f ( x k + 1 ) − f ( x k ) x\prime=x^2\\ x\prime=\sqrt{x}\\ x\prime=log(x)\\ \nabla f(x_k)=f(x_{k+1})-f(x_k) x=x2x=x x=log(x)f(xk)=f(xk+1)f(xk)
简单的函数变换常用将不具有正态分布的数据变换成具有正态分布的数据。在时间序列分析中,简单的对数变换或者差分运算可将非平稳序列转换为平稳序列。又比如个人年收入取值范围在10000元到1亿元,使用对数变换对数据进行压缩是一种常用的变换处理方法。

规范化

为了消除指标之间的量纲和取值范围差异的影响,需要进行标准化处理,将数据按照比例进行缩放,是指落在一个特定的区域,便于进行综合分析。

  • 离差规范化

    x ∗ = x − x m i n x m a x − x m i n \displaystyle x^*=\frac{x-x_{min}}{x_{max}-x_{min}} x=xmaxxminxxmin

  • 零-均值规范化

    x ∗ = x − x ‾ σ \displaystyle x^*=\frac{x-\overline x}{\sigma} x=σxx

    经过处理的数据均值为0,标准差为1

#离差标准化
(df-df.min())/(df.max()-df.min())
#0均值标准化
(df-df.mean())/df.std()

连续属性离散化

在某些分类算法中ID3或者Apriori算法,要求数据是分类属性形式。常常需将连续属性变换为分类属性,即连续属性离散化。

连续属性的离散化也就是在数据的取值范围内设定若干个离散的划分点,将取值返回划分为一些离散化的区间,最后用不同的符号或者整数值代表落在整个子区间中的数据值。

常用的离散化方法

  • 等宽法

    将属性的值分成具有相同长度的区间,区间的个数有数据本身的特点决定,或者用户指定,类似于制作频率分布表。

    #pd.cut(data,number or list,labels)
    #第二个参数为number时等宽离散化,如果是list默认是区间划分,和plt.hist()类似
    #等宽离散化
    k = 4
    d1 = pd.cut(data,4,labels=range(k))
    
  • 等频法

    将相同数量的记录放进不同的区间

    # 等频离散化 w首先化为频率分布
    w = [1.0*i/k for i in range(k+1)]
    # 然后获取对应的百分比的数据
    w = data.describe(percentiles=w)[4:4+k+1]
    w[0] = w[0]*(1-1e-10)
    d2 = pd.cut(data,w,labels=range(k))
    
  • 基于聚类分析的方法

    直接将连续属性值进行聚类算法进行聚类,然后将聚类得到的簇进行处理。

    # kmeans聚类离散化
    from sklearn.cluster import KMeans
    clf = KMeans(n_clusters=k,n_jobs=4)
    clf.fit(data.values.reshape((len(data),1)))
    #记录聚类中心
    c = pd.DataFrame(clf.cluster_centers_).sort_values(0)
    #求取前两个均值作为边界点
    w = c.rolling(2).mean().iloc[1:]
    #获取分类边界
    w = [0] + list(w[0]) + [data.max()]
    d3 = pd.cut(data,w,labels=range(k))
    

属性构造

为了提取有用的信息,需要利用已有的属性集构造新的属性,并加入到现有的属性集合中。

例如在防窃电诊断建模时利用已有的供入电量、供出电量,构造出 线 损 率 = 供 入 电 量 − 供 出 电 量 供 入 电 量 \displaystyle 线损率=\frac{供入电量-供出电量}{供入电量} 线=

小波变换

进行信号处理、图像处理、语音处理、模式识别、量子物理等领域

2.4 数据规约

数据规约产生更小但保持原数据完整性的新数据集,数据规约的意义

  • 降低无效、错误数据对建模的影响,提高建模的准确性
  • 少量且具有代表性的数据将大幅缩短数据挖掘所需的时间
  • 降低存储数据的成本

属性规约

通过属性合并创建新属性维数,或者直接通过删除不相关属性来减少数据维数,从而提高数据挖掘的效率、降低计算成本。属性规约的目标是寻找最小属性子集并确保新数据子集的概率分布尽可能地接近原来数据集的概率分布。

常用方法

  • 合并属性。将一些旧属性合并且新属性
  • 逐步向前选择
  • 逐步向后选择
  • 决策树归纳。可认为没有出现在该决策树上的属性可认为是无关属性。
  • 主成分分析。主成分分析是一种用于连续属性的数据降维方法,构造了原始数据的一个正交变换,新空间的基底去除了原始空间基底下数据的相关性,只需使用少数新变量就能解释原始数据中的大部分变异。在应用中通常使用主成分分析代替原始变量进行建模。
​```
sklearn.decomposition.PCA(n_components=None,copy=True,whiten=False)
n_components 要保留的主成分个数
copy 是否在原数据上运算
whiten 是否白化
​```
from sklearn.decomposition import PCA
pca = PCA(3)
pca.fit(df)
#降维操作low_d降维之后的数据
low_d = pca.transform(df)
#输出各成分的贡献率
print(pca.explained_variance_ratio_)

数据规约

通过选择替代的、较小的数据减少数据量。有参数的方法是指使用一个模型来评估数据,只需存放参数,不存放实际数据。无参数方法需要存放实际数据,例如直方图、聚类、抽样。

  • 直方图的将每个桶换成一个价格的等宽直方图

  • 聚类

  • 抽样。使用比原始数据小的多的随机样本表示原始数据。

  • 参数回归

  • 对数线性模型。 l n m = β 0 + β 1 x 1 + ⋯ + β k x k ln m =\beta_0+\beta_1 x_1+\cdots+\beta_kx_k lnm=β0+β1x1++βkxk

3.挖掘建模

根据挖掘目标和数据形式可以建立分类与预测、聚类分析、关联规则、时序模式、偏差检测等模型,挖掘数据中蕴含的商业价值。

3.1 分类和预测

分类主要是预测分类标号,离散属性,预测主要是建立连续值函数模型,预测给定自变量对应的因变量的值。

主要的分类和预测算法

  • 回归分析
  • 决策树
  • 人工神经网络
  • 贝叶斯网络
  • 支持向量机

主要回归模型分类

  • 线性回归

    • logistics回归,因变量一般有0和1两种取值
  • 非线性回归,通过简单的函数变换

  • 参与建模的自变量之间具有多重共线性

    • 岭回归

    • 主成分回归

logistics回归模型

在n个独立变量 x 1 , x 2 , ⋯   , x n x_1,x_2,\cdots,x_n x1,x2,,xn作用下,记取一的概率 p = P ( y = 1 ∣ X ) p=P(y=1|X) p=P(y=1X),取0的概率是1-p,取1和取0的概率之比为 p 1 − p \displaystyle \frac{p}{1-p} 1pp,称为事件的优势比odds。对优势比取对数即可得到logistics变换, l o g i t ( p ) = l n ( p 1 − p ) = z logit(p)=ln(\frac{p}{1-p})=z logit(p)=ln(1pp)=z,则 p = 1 1 + e − z \displaystyle p=\frac{1}{1+e^{-z}} p=1+ez1。logistics回归模型是建立 l n ( p 1 − p ) ln(\frac{p}{1-p}) ln(1pp)与自变量的线性回归模型。logistics回归模型为 l n ( p 1 − p ) = β 0 + β 1 x 1 + ⋯ + β n x n + ϵ ln(\frac{p}{1-p})=\beta_0+\beta_1x_1+\cdots+\beta_nx_n+\epsilon ln(1pp)=β0+β1x1++βnxn+ϵ。则 p = 1 1 + e − ( β 0 + β 1 x 1 + ⋯ + β n x n + ϵ ) \displaystyle p=\frac{1}{1+e^{-(\beta_0+\beta_1x_1+\cdots+\beta_nx_n+\epsilon)}} p=1+e(β0+β1x1++βnxn+ϵ)1

3.2 决策树

采用划分后样本集的不确定性作为衡量划分好坏的标准,用信息增益值度量不确定性,信息增益值越大,不确定性越小。ID3在每个非叶结点选择信息增益最大的属性作为测试属性,可得到当前情况下最纯划分,得到较小的决策树。

设S为s个数据样本的集合,假定有m个集合,为 C i ( i = 1 , 2 , ⋯   , m ) C_i(i=1,2,\cdots,m) Ci(i=1,2,,m),设 s i s_i si为类 C i C_i Ci中的样本数。对于一个给定的样本,总信息熵为 I ( s 1 , s 2 , ⋯   , s m ) = − ∑ i = 1 m P i l o g 2 ( P i ) I(s_1,s_2,\cdots,s_m)=-\sum_{i=1}^m P_ilog_2(P_i) I(s1,s2,,sm)=i=1mPilog2(Pi)

设一个属性A具有k个不同的值 { a 1 , a 2 , ⋯   , a k } \{a_1,a_2,\cdots,a_k\} {a1,a2,,ak},利用属性A将集合S划分为k个子集 { S 1 , S 2 , ⋯   , S k } \{S_1,S_2,\cdots,S_k\} {S1,S2,,Sk}。如果选择A作为测试属性,那么这些子集就是从A生长出去的新的叶结点。设 s i j s_{ij} sij为子集 S j S_j Sj中类别为 C i C_i Ci的样本数,则根据属性A划分样本的期望信息熵值为 E ( A ) = ∑ i = 1 k s 1 j + s 2 j + ⋯ + s k j s I ( s 1 j , s 2 j , ⋯   , s m j ) \displaystyle E(A)=\sum_{i=1}^k\frac{s_{1j}+s_{2j}+\cdots+s_{kj}}{s}I(s_{1j},s_{2j},\cdots,s_{mj}) E(A)=i=1kss1j+s2j++skjI(s1j,s2j,,smj)。其中 I ( s 1 j , s 2 j , ⋯   , s m j ) I(s_{1j},s_{2j},\cdots,s_{mj}) I(s1j,s2j,,smj)为子集 S j S_j Sj的信息熵, s 1 j + s 2 j + ⋯ + s k j s \displaystyle \frac{s_{1j}+s_{2j}+\cdots+s_{kj}}{s} ss1j+s2j++skj为子集 S j S_j Sj个数占S个数比例。

最终用属性A划分样本集S后所得信息增益就是 G a i n ( A ) = I ( s 1 j , s 2 j , ⋯   , s m j ) − E ( A ) Gain(A)=I(s_{1j},s_{2j},\cdots,s_{mj})-E(A) Gain(A)=I(s1j,s2j,,smj)E(A)。因此信息增益越大,则选择A之后对分类的不确定性越小。然后通过递归就可以直接建成决策树。

具体流程

  • 对于当前样本集合,计算所有属性的信息增益
  • 选择信息增益最大的属性作为测试属性,把测试属性相同的样本划分为同一个样本集
  • 若子样本集的类别属性只有单个属性,直接划分为叶子结点;否则对于子样本集继续递归调用本算法

分类和预测算法评价

为了有效判断一个预测或者分类模型的性能表现,需要一组没有参与预测模型建立的数据集,并在该数据集上评价预测模型的准确率,这组独立的数据集叫测试集。模型预测效果通常使用相对、绝对误差,平均绝对误差、均方误差、均方根误差等指标衡量。

  • 绝对误差。 E = Y − Y ^ E=Y-\hat Y E=YY^
  • 相对误差。 e = Y − Y ^ Y \displaystyle e=\frac{Y-\hat Y}{Y} e=YYY^
  • 平均绝对误差。 M A E = 1 n ∑ i = 1 n ∣ Y i − Y ^ i ∣ MAE=\frac{1}{n}\sum_{i=1}^n\vert Y_i-\hat Y_i\vert MAE=n1i=1nYiY^i
  • 均方误差。 M S E = 1 n ∑ i = 1 n ( Y i − Y ^ i ) 2 MSE=\frac{1}{n}\sum_{i=1}^n(Y_i-\hat Y_i)^2 MSE=n1i=1n(YiY^i)2
  • 均方根误差。 R M S E = M S E RMSE=\sqrt{MSE} RMSE=MSE
  • 平均绝对百分误差。 M A P E = 1 n ∑ i = 1 n ∣ Y i − Y ^ i Y i ∣ \displaystyle MAPE=\frac{1}{n}\sum_{i=1}^n\vert \frac{Y_i-\hat Y_i}{Y_i}\vert MAPE=n1i=1nYiYiY^i
  • Kappa统计。
  • 识别准确度。 A c c u r a c y = T P + F N T P + T N + F P + F N \displaystyle Accuracy=\frac{TP+FN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+FN
  • 识别精确率。 P r e c i s i o n = T P T P + F P \displaystyle Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
  • 召回率。 R e c a l l = T P T P + T N Recall = \frac{TP}{TP+TN} Recall=TP+TNTP
  • ROC曲线。
  • 混淆矩阵。

3.3 聚类分析

数据类型相似度的度量

对于连续属性,首先对各个属性值进行零均值规范,再进行距离的计算。样本和簇之前的距离可以使用样本到簇中心的距离 d ( e i , x ) d(e_i,x) d(ei,x);簇与簇之间的距离可以用簇中心的距离 d ( e i , e j ) d(e_i,e_j) d(ei,ej)

  • 连续属性的SSE。 S S E = ∑ i = 1 K ∑ x ∈ E i d i s t ( e i , x ) 2 \displaystyle SSE=\sum_{i=1}^K\sum_{x\in E_i}dist(e_i,x)^2 SSE=i=1KxEidist(ei,x)2
  • 文档数据的SSE。 S S E = ∑ i = 1 K ∑ x ∈ E i c o s ( e i , x ) 2 \displaystyle SSE=\sum_{i=1}^K\sum_{x\in E_i}cos(e_i,x)^2 SSE=i=1KxEicos(ei,x)2
  • E i E_i Ei的聚类中心 e i e_i ei的计算公式为 e i = 1 n ∑ x ∈ E i x \displaystyle e_i=\frac{1}{n}\sum_{x\in E_i}x ei=n1xEix

聚类分析的算法评价,聚类算法的目标是实现组内对象之间的相似,不同组之间的对象是不同的。组内的相似性越大,组件差别越大,聚类效果越好。

  • purity评价法,只需计算正确聚类数占总数的比例, ( x 1 , x 2 , ⋯   , x k ) (x_1,x_2,\cdots,x_k) (x1,x2,,xk)为聚类的集合, ( y 1 , y 2 , ⋯   , y k ) (y_1,y_2,\cdots,y_k) (y1,y2,,yk)表示需要被聚类的集合,n表示被聚类集合对象的总数。

    p u r i t y = 1 n ∑ k m a x ∣ x k ∩ y i ∣ \displaystyle purity=\frac{1}{n}\sum_k max\vert x_k\cap y_i\vert purity=n1kmaxxkyi

  • RI评价法
    R I = R + W R + M + D + W RI=\frac{R+W}{R+M+D+W} RI=R+M+D+WR+W

  • F值评价法
    F α = ( 1 + α 2 p r ) α 2 p + r p = R R + M r = R R + D F_{\alpha}=\frac{(1+\alpha^2pr)}{\alpha^2p+r}\\ p=\frac{R}{R+M}\\ r=\frac{R}{R+D}\\ Fα=α2p+r(1+α2pr)p=R+MRr=R+DR
    改进的RI评价法,将p和r视为不同的重要性

3.4 关联规则

关联规则分析目的是在一个数据集中找出各项之间的关联关系。

项集A、B同时发生的概率称为关联规则的支持度,也称为相对支持度 S u p p o r t ( A ⇒ B ) = P ( A ∪ B ) Support(A\Rightarrow B)=P(A\cup B) Support(AB)=P(AB)

项集A发生,则项集B发生的概率为关联规则的置信度 C o n f i d e n c e ( A ⇒ B ) = P ( B ∣ A ) Confidence(A\Rightarrow B)=P(B|A) Confidence(AB)=P(BA)

最小支持度是用户或专家定义的衡量支持度的一个阈值,表示项目集在统计意义上最低可能性;最小置信度是用户或专家定义的衡量置信度的一个阈值,表示关联规则的最低可能性。同时满足最小支持度阈值和最小置信度阈值的规则称为强规则

项集 项的集合。包含k项的项集称为k项集,比如集合 { 牛 奶 , 麦 片 , 糖 } \{牛奶,麦片,糖\} {}是一个三项集。项集的出现频率为所有包含项集的事务计数,又称为绝对支持度或支持度计数。如果项集I的相对支持度满足预定义的最小支持度阈值,则I是频繁项集。频繁k项集通常记作k。

项集A的支持度计数是事务数据集中包含项集A的事务个数,简称为项集的频率或计数

S u p p o r t ( A ⇒ B ) = A , B 同 时 发 生 的 事 务 的 个 数 所 有 事 务 个 数 = S u p p o r t _ c o u n t ( A ∩ B ) T o t a l _ c o u n t C o n f i d e n c e ( A ⇒ B ) = P ( B ∣ A ) = S u p p o r t ( A ∩ B ) S u p p o r t ( A ) = S u p p o r t _ c o u n t ( A ∩ B ) S u p p o r t _ c o u n t ( A ) Support(A\Rightarrow B)=\frac{A,B同时发生的事务的个数}{所有事务个数}=\frac{Support\_count(A\cap B)}{Total\_count}\\ Confidence(A\Rightarrow B)=P(B|A)=\frac{Support(A\cap B)}{Support(A)}=\frac{Support\_count(A\cap B)}{Support\_count(A)} Support(AB)=A,B=Total_countSupport_count(AB)Confidence(AB)=P(BA)=Support(A)Support(AB)=Support_count(A)Support_count(AB)
几种常见的关联规则算法

  • Apriori
  • FP-Tree
  • Eclat算法
  • 灰度关联法

Apriori算法基本原理

性质

频繁项集的所有非空子集必须是频繁项集。向不是频繁项集的项集中添加事务A,新的事物 I ∪ A I\cup A IA一定也不是频繁项集。

实现

  1. 找出所有的频繁项集,连接步和剪枝步融合,最终得到最大频繁项集 L k L_k Lk
    • 连接步。对于给定的最小支持度阈值,分别对1项候选集 C 1 C_1 C1,剔除小于该阈值的项集得到1项频繁集 L 1 L_1 L1。下一步由 L 1 L_1 L1自身连接产生2项候选集 C 2 C_2 C2,保留 C 2 C_2 C2中满足约束条件的项集得到2项频繁项集 L 1 、 L 2 L_1、L_2 L1L2。再下一步 L 1 L_1 L1 L 2 L_2 L2连接产生候选集 C 3 C_3 C3,保留 C 3 C_3 C3中满足约束条件的项集得到3项频繁项集,记为 L 3 L_3 L3,一直持续下去。
    • 剪枝步。剪枝步紧接着连接步,在产生候选项 C k C_k Ck的过程中起到减小搜索空间的目的。由于 C k C_k Ck是由 L k − 1 L_{k-1} Lk1 L k L_k Lk连接产生的,由于Apriori的性质频繁项集的所有非空子集也必须是频繁项集,所有不满足该性质的项集不会出现在 C k C_k Ck中,该过程就是剪枝。
  2. 由频繁项集产生强关联规则,由过程1可知超过预订最小支持度阈值的项集已被剔除,如果剩下这些规则又满足了预订的最小置信度阈值,那就挖掘出了强关联规则。
#搜索频繁项集的例子
from apriori import *
data = pd.read_excel(PATH+"menu_orders.xls",header=None)
ct = lambda x:pd.Series(1,index=x[pd.notnull(x)])
b = map(ct,data.values)
data = pd.DataFrame(list(b)).fillna(0)
print("转换完毕")
del b
support = 0.2
confidence = 0.5
ms = '----'
find_rule(data,support,confidence,ms)

3.5 时间序列

常用按时间顺序排列的一组随机变量 X 1 , X 2 , ⋯   , X t X_1,X_2,\cdots,X_t X1,X2,,Xt来表示一个随机事件的时间序列,简记 { X t } \{X_t\} {Xt}。用 x 1 , x 2 , ⋯   , x n x_1,x_2,\cdots,x_n x1,x2,,xn表示该随机序列的n个有序观察值,称之为序列长度为n的观察值序列。时间序列的目的就是给定了一个已被观测了的时间序列,预测该序列的未来值。

常用的时间序列模型

  • 平滑法
  • 趋势拟合法
  • 组合模型
  • AR模型
  • MA模型
  • ARMA模型
  • ARIMA模型
  • ARCH模型
  • GARCH模型及其衍生模型

时间序列的预处理

拿到一个观察值序列首先对其纯随机性平稳性进行检验,根据检验结果可将序列划分为不同类型,对不同类型序列使用不同分析方法。

对于纯随机序列,又称为白噪声序列,序列的各项之间没有任何相关关系,序列在进行完全无序的随机波动,可终止对该序列的分析,白噪声序列是没有信息可提取的平稳序列。

对于平稳非白噪声序列,其均值和方差为常数,ARMA模型是常用的平稳序列拟合模型。

对于非平稳序列,由于其均值和方差不稳定,处理方法一般是将其转化为平稳序列,就可应用有关平稳时间序列的分析方法。如果一个时间序列经差分运算之后有平稳性,则该序列为差分平稳序列,可使用ARIMA模型进行分析。

平稳性检验

  • 时序图检验

  • 自相关图检验

  • 单位根检验

纯随机性检验

平稳时间序列分析

AR模型

具有如下结构的模型称为p阶自回归模型,简称为 A R ( p ) AR(p) AR(p)

x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ϵ t x_t=\phi_0+\phi_1 x_{t-1}+\phi_2x_{t-2}+\cdots+\phi_px_{t-p}+\epsilon_t xt=ϕ0+ϕ1xt1+ϕ2xt2++ϕpxtp+ϵt

即在t时刻的随机变量 X t X_t Xt的取值 x t x_t xt是前p期 x t − 1 , x t − 2 , ⋯   , x t − p x_{t-1},x_{t-2},\cdots,x_{t-p} xt1,xt2,,xtp的多元线性回归,认为 x t x_t xt主要是受过去p期序列值的影响,误差项 ϵ t \epsilon_t ϵt是当前的随机干扰,为零均值白噪声序列。

统计量性质统计量性质
均值常数均值自相关系数acf拖尾
方差常数均值偏自相关系数pacfp阶拖尾

均值 μ = ϕ 0 1 − ϕ 1 − ϕ 2 − ⋯ − ϕ p \displaystyle \mu=\frac{\phi_0}{1-\phi_1-\phi_2-\cdots-\phi_p} μ=1ϕ1ϕ2ϕpϕ0

方差 平稳 A R ( p ) AR(p) AR(p)模型的方差有界,等于常数。

自相关系数 ρ k = ρ ( t , t − k ) = c o v ( X t , X t − k ) ρ t ρ t − k \displaystyle \rho_k=\rho(t,t-k)=\frac{cov(X_t,X_{t-k})}{\rho_t\rho_{t-k}} ρk=ρ(t,tk)=ρtρtkcov(Xt,Xtk)

偏自相关系数 P A C F PACF PACF 具有p阶截尾性

MA模型

具有如下结构的q阶自回归模型,简记为MA(q)。

x t = μ + ϵ t − θ 1 ϵ t − 1 − ⋯ − θ q ϵ t − q \displaystyle x_t=\mu+\epsilon_t-\theta_1\epsilon_{t-1}-\cdots-\theta_q\epsilon_{t-q} xt=μ+ϵtθ1ϵt1θqϵtq

即在t时刻的随机变量 X t X_t Xt的取值 x t x_t xt是前q期的随机扰动 ϵ t − 1 , ϵ t − 2 , ⋯   , ϵ t − q \epsilon_{t-1},\epsilon_{t-2},\cdots,\epsilon_{t-q} ϵt1,ϵt2,,ϵtq的多元线性函数,误差项是当期的随机干扰 ϵ t \epsilon_t ϵt,为零均值白噪声均值序列,认为 x t x_t xt主要是受过去q期误差项的影响。

统计量性质统计量性质
均值常数均值自相关系数ACFq阶截尾
方差常数方差偏自相关系数PACF拖尾
平滑MA模型的性质

ARMA模型

具有如下结构的模型称为自回归移动平均模型,简记为 A R M A ( p , q ) ARMA(p,q) ARMA(p,q)

x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + ⋯ + ϕ p x t − p + ϵ t + ϵ t − θ 1 ϵ t − 1 − ⋯ − θ q ϵ t − q x_t=\phi_0+\phi_1 x_{t-1}+\phi_2x_{t-2}+\cdots+\phi_px_{t-p}+\epsilon_t+\epsilon_t-\theta_1\epsilon_{t-1}-\cdots-\theta_q\epsilon_{t-q} xt=ϕ0+ϕ1xt1+ϕ2xt2++ϕpxtp+ϵt+ϵtθ1ϵt1θqϵtq

即在t时刻的随机变量 X t X_t Xt的取值 x t x_t xt是前p期 x t − 1 , x t − 2 , ⋯   , x t − p x_{t-1},x_{t-2},\cdots,x_{t-p} xt1,xt2,,xtp和前q期 ϵ t − 1 , ϵ t − 2 , ⋯   , ϵ t − q \epsilon_{t-1},\epsilon_{t-2},\cdots,\epsilon_{t-q} ϵt1,ϵt2,,ϵtq的多元线性函数,误差项是当前的随机干扰项 ϵ t \epsilon_t ϵt,为零均值白噪声序列。认为 x t x_t xt主要受过去p期序列值和过去q期的误差项的共同影响。

特别的,当q=0是,ARMA模型为AR(p)模型;当p=0时,是MA(q)模型。

统计量性质统计量性质
均值常数均值自相关系数ACFp阶拖尾
方差常数方差偏自相关系数PACFq阶拖尾
ARMA(p,q)性质

平稳时间序列建模

  • 计算ACF和PACF。先计算非平稳白噪声序列的自相关系数ACF和偏自相关系数PACF
  • ARMA模式识别。也称为模型定阶,由AR§,MA(q),和ARMA(p,q)的自相关系数和偏自相关系数的性质,选择合适的模型
  • 估计模型中未知参数的值并进行参数进行检验
  • 模型检验
  • 模型优化
  • 模型应用,进行短期预测

非平稳时间序列分析

对非平稳时间序列分析可以分为确定性因素分解的时序分析随机时序分析两大类。

确定性因素分解方法把所有序列的变化都归结为4个因素,长期趋势,季节变动,循环变动,随机波动的综合影响,其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动难以确定和分析,对随机信息浪费严重,会导致模型拟合精度不够理想。

随机时序分析法就是为了弥补确定性因素分解方法的不足,根据时间序列的不同特点,有ARIMA模型、残差自回归模型、季节模型、异方差模型。

  1. 差分运算。

    • p阶差分。相距一期的两个序列值之间的减法运算称为1阶差分运算。
    • k步差分。相距k期的两个序列值之间的减法运算称为k步差分运算。
  2. ARIMA模型

    差分运算具有强大的确定性信息提取能力,许多非平稳序列差分之后会显示出平稳序列的性质,称该非平稳序列为差分平稳序列。对差分平稳序列可以使用ARMA模型进行拟合。

3.6 离群点检测

任务是发现与大部分其他对象显著不同的对象,大部分数据挖掘方法将差异信息视为噪声丢弃,然而在一些应用中,罕见的数据可能蕴含极大的研究价值。

离群点检测被广泛应用于电信和信用卡的诈骗检测,贷款审批,电子商务,网络入侵和天气预报等领域。比如可以使用离群点检测分析运动员的统计数据,以发现异常的运动员。

离群点的成因 数据来源不同的类,自然变异,数据测量,收集误差

离群点的类型

  • 从数据范围。全局离群点和局部离群点。
  • 从数据类型。数值型离群点和分类型离群点。
  • 从属性个数。一维离群点和多维离群点。

常用的离群点检测方法

  • 基于统计。大部分是基于统计的离群点检测方法是构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为离群点
  • 基于邻近度。通常可以把数据对象之间定义邻近性度量,把远离大部分点的对象视为离群点
  • 基于密度。考虑数据集可能存在不同密度区域,基于密度的观点分析,离群点是在低密度区域中的对象。一个对象的离群点得分是该对象周围密度的逆
  • 基于聚类。一种利用聚类检测离群点的方法是丢弃远离其他簇的小簇。

一元正态分布中的离群点检测

x x x进行0-1标准化,然后根据 3 σ 3\sigma 3σ原则在 ( − ∞ , − 3 ) ∪ ( 3 , ∞ ) (-\infty,-3)\cup(3,\infty) (,3)(3,)范围之内的被称为离群点。

基于KMeans或者DBSCAN聚类找出离群点。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值