精华内容
下载资源
问答
  • 银行客户流失分析预测

    千次阅读 2020-09-27 17:22:20
    毫无疑问,客户流失会给银行带来大量损失。考虑到避免一位客户流失的成本很可能远低于挖掘一位新客户,对客户流失情况的分析预测至关重要。本文分析的数据为某银行10000条客户信息,有14个字段。 ...

    客户流失意味着客户终止了和银行的各项业务,毫无疑问,一定量的客户流失会给银行带来巨大损失。考虑到避免一位客户流失的成本很可能远低于挖掘一位新客户,因此对客户流失情况的分析预测至关重要。本文分析了某银行10000条客户信息,含14个字段,接下来我们将从这些数据中探索客户流失特征和原因,推测目前客户管理、业务等方面可能存在的问题,建立预测模型预警客户流失情况,为制定挽留策略提供依据。

    1. 探索性分析

    1.1 认识字段

    首先,初步了解下这些数据。

    在这里插入图片描述
    字段依次表示行号、客户Id、姓氏、信用积分、地理位置、性别、年龄、开户时长、账户余额、产品数量、有无信用卡、是否活跃、收入估计、是否流失(即目标变量)。为了便于后续处理,对字段重新排列,将目标变量放在首列,并去除无用字段。显然其中行号、客户Id、姓氏对流失情况的分析预测意义不大,可以忽略,其余字段可分为分类变量和数值变量,在数据处理环节再做变换等操作。另外,剔除少量异常数据。

    1.2 流失率与分类变量

    从数据中不难得知流失率为20.4%,接下来先对分类变量做初步探索,为了便于观察流失占比,这里采用饼图,饼图大小代表用户数量,橙、蓝分别代表流失、留存用户:
    在这里插入图片描述

    按性别分,女性用户少于男性用户数量,但流失率更高。建议银行提升女性的用户体验,考虑到女性消费能力很强,可以考虑和商家联手推出倾向女性顾客的优惠活动。按有无信用卡分,有信用卡者明显居多,有信用卡的两类群体中流失率略低。按国家分,法国用户数量最多,德国用户与西班牙用户数量相近,但德国用户流失率远高于其他两国,建议对德国的客户管理情况做进一步深入调研。按照活跃度分,不活跃用户流失率远高于活跃用户,因此活跃度是个需要重点关注和提升的指标。

    1.3 流失率与数值变量

    下面继续观察下数值变量的分布情况,如图:
    在这里插入图片描述
    从账户余额看,余额在10万-15万之间的较高余额用户流失率很高,这势必会对银行业务造成不小损失,值得重点关注。从年龄看,用户多分布在年龄在25-50岁之间,年龄较长的客户(45-65岁)流失率非常高,因而在采取挽留策略时需要视不同的年龄划分而定。从信用积分看,信用积分分布在600-700分之间的客户最多,流失的客户数量也最多。从开户时长看,用户的开户时长主要为1-9年,且开户1-9年的这些客户开户时长频数分布比较均匀,流失率没有明显差异;然而开户时间短于1年或者高于9年的用户有更高的流失风险,可以考虑优化新客户的开发和挽留策略。从产品数量看,拥有产品数为1、2的客户数量最多,且有2个产品的用户流失率低于拥有1个产品的用户,可以考虑提升产品的吸引力,增强用户黏度。从收入看,用户收入多在2万-18万间,且用户数量和流失率在此区间分布较为均匀,事实上社会中人群的收入分布并不是如此均匀,这表明有大量的潜在客户可以开发。

    2.数据处理

    2.1 删除字段

    前文已提到行号、客户Id、姓氏可以忽略,这里我们将这三个字段剔除。

    2.2 新增字段

    除了存款和收入,客户将多少比例的收入存到银行同样是个重要的考量参数,因此新增一个特征:存款收入比,即存款/收入。所有客户的存款收入比均大于零,且存款收入比越高,越容易流失。
    在这里插入图片描述

    2.3 处理缺失值、异常值

    数据无需处理缺失值,省略。至于异常值不止一两个,且对流失情况预测可能有一定意义,选择暂不处理。

    2.4 转换分类变量

    分类变量的种类较少,可直接选用独热编码来处理性别和国家,所用函数为pd. get_dummies()。

    2.5 归一化数值变量

    在归一化数值变量前先随机将80%数据划分为训练集,余下20%为测试集。然后对数值变量分别归一化,变换方法如下:
    df_train[col1] = (df_train[col1]-col1_min)/(col1_max-col1_min)
    顺便提下,在模型训练时,测试集属于外来数据,应该和训练集完全分开,如果直接对所有数据进行归一化,测试集的数据可能给训练集的特征范围等带来影响,进而影响模型效果。

    3. 模型拟合和选取

    3.1 模型调用

    将目标变量提取出来,命名为y_train, y_test,余下变量则命名为X_train,X_test。采用决策树、KNN近邻、支持向量机(SVM)几种常用的算法训练模型,并选取最优算法。
    这里涉及参数多采用sklearn中的默认参数,以简化工作。当然,随着对机器学习的了解深入,可以通过调参、模型融合等方式进一步提升预测效果。

    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.svm import SVC
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import accuracy_score
    
    model = [KNeighborsClassifier(), SVC(), DecisionTreeClassifier()]
    model_names = ["KNN", "SVM", "Decision tree"]
    for i in range(0, 3):
        y_pred = model[i].fit(X_train, y_train).predict(X_test)
        accuracy = accuracy_score(y_pred, y_test)*100
        print(model_names[i], ":", accuracy, "%")
    
    3.2 最佳预测模型

    三种模型在测试集中的预测准确率分别如下:
    在这里插入图片描述

    发现支持向量机SVM模型的效果最好,故选取该模型。对测试集的预测准确率达84.2%,可以推测用该模型对银行客户流失情况预测具有一定准确率,预测结果具备重要的参考价值。

    3.3 预测模型意义

    银行客户流失情况预测模型的建立,能够给银行业务提供有效的预警。对有流失倾向的客户做出标记,能使银行在客户管理和策略制定上更有针对性,用较低成本实现客户挽留率的改善,减少客户流失带来的损失。

    展开全文
  • 多元线性回归分析预测法概述

    万次阅读 2017-11-21 16:27:23
    在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于几个影响因素的...这时采用一元回归分析预测法进行预测是难以奏效的,需要采用多元回归分析预测法。  多元回归分析预测法,是指通过对两个或两个以

    在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于几个影响因素的情况,也就是一个因变量和几个自变量有依存关系的情况。而且有时几个影响因素主次难以区分,或者有的因素虽属次要,但也不能略去其作用。例如,某一商品的销售量既与人口的增长变化有关,也与商品价格变化有关。这时采用一元回归分析预测法进行预测是难以奏效的,需要采用多元回归分析预测法。

      多元回归分析预测法,是指通过对两个或两个以上的自变量与一个因变量的相关分析,建立预测模型进行预测的方法。当自变量与因变量之间存在线性关系时,称为多元线性回归分析。

    多元线性回归的计算模型[1]

      一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。

      设y为因变量,x_1,x_2,\cdots x_k为自变量,并且自变量与因变量之间为线性关系时,则多元线性回归模型为:

      y=b_0+b_1x_1+b_2x_2+\cdots+b_kx_k+e

      其中,b0为常数项,b_1,b_2,\cdots b_k为回归系数,b1x_2,x_3\cdots x_k固定时,x1每增加一个单位对y的效应,即解析失败 (PNG 转换失败; 请检查是否正确安装了 latex, dvips, gs 和 convert): x_1 对y的偏回归系数;同理b2x1,xk固定时,x2每增加一个单位对y的效应,即,x2对y的偏回归系数,等等。如果两个自变量x1,x2同一个因变量y呈线相关时,可用二元线性回归模型描述为:

        y = b0 + b1x1 + b2x2 + e

      建立多元性回归模型时,为了保证回归模型具有优良的解释能力和预测效果,应首先注意自变量的选择,其准则是:

      (1)自变量对因变量必须有显著的影响,并呈密切的线性相关

      (2)自变量与因变量之间的线性相关必须是真实的,而不是形式上的;

      (3)自变量之间应具有一定的互斥性,即自变量之间的相关程度不应高于自变量与因变量之因的相关程度;

      (4)自变量应具有完整的统计数据,其预测值容易确定。

      多元性回归模型的参数估计,同一元线性回归方程一样,也是在要求误差平方和(\sum e^2)为最小的前提下,用最小二乘法求解参数。以二线性回归模型为例,求解回归参数的标准方程组为

      \begin{cases}\sum y=nb_0+b_1\sum x_1+b_2\sum x_2\\ \sum x_1y=b_0\sum x_1+b_1\sum x_1^2+b_2\sum x_1x_2 \\ \sum x_2y=b_0\sum x_2+b_1\sum x_1x_2+b_2\sum x^2_2 \end{cases}

      解此方程可求得b0,b1,b2的数值。亦可用下列矩阵法求得

      b==(x'x)^{-1}\cdot(x'y)

      即

      \begin{bmatrix} b_0 \\ b_1 \\ b_2 \end{bmatrix}=\begin{bmatrix}n & \sum x_1 & \sum x_2 \\ \sum x_1 & \sum x^2_1 & \sum x_1x_2 \\ \sum x_2 & \sum x_1x_2 & \sum x^2_2\end{bmatrix}^{-1}\cdot \begin{bmatrix} \sum_y \\ \sum_{x_1y} \\ \sum_{x_2y} \end{bmatrix}

    多元线性回归模型的检验[1]

      多元性回归模型与一元线性回归模型一样,在得到参数的最小二乘法的估计值之后,也需要进行必要的检验与评价,以决定模型是否可以应用。

      1、拟合程度的测定。

      与一元线性回归中可决系数r2相对应,多元线性回归中也有多重可决系数r2,它是在因变量的总变化中,由回归方程解释的变动(回归平方和)所占的比重,R2越大,回归方各对样本数据点拟合的程度越强,所有自变量与因变量的关系越密切。计算公式为:

      R^2=\frac{\sum(\hat{y}-\bar{y})^2}{\sum(y-\bar{y})^2}

      =1-\frac{\sum(y-\hat{y})^2}{\sum(y-\bar{y})^2}

      其中,

      \sum(y-\hat{y})^2=\sum y^2-(b_0\sum y+b_1\sum x_1y+b_2\sum x_2y+\cdots+b_k\sum x_ky)

      \sum(y-\bar{y})^2=\sum y^2-\frac{1}{n}(\sum y)^2

      2.估计标准误差

      估计标准误差,即因变量y的实际值与回归方程求出的估计值\hat{y}之间的标准误差,估计标准误差越小,回归方程拟合程度越程。

      S_y=\sqrt{\frac{\sum(y-\hat{y})^2}{n-k-1}}

      v_k=\frac{S_y}{y}

      其中,k为多元线性回归方程中的自变量的个数。

      3.回归方程的显著性检验

      回归方程的显著性检验,即检验整个回归方程的显著性,或者说评价所有自变量与因变量的线性关系是否密切。能常采用F检验,F统计量的计算公式为:

      F=\frac{\sum(\hat{y}-\bar{y})^2/k}{\sum(y-\hat{y})^2/n-k-1}

      =\frac{R^2/k}{(1-R^2)/n-k-1}

      根据给定的显著水平a,自由度(k,n-k-1)查F分布表,得到相应的临界值Fa,若F > Fa,则回归方程具有显著意义,回归效果显著;F < Fa,则回归方程无显著意义,回归效果不显著。

      4.回归系数的显著性检验

      在一元线性回归中,回归系数显著性检验(t检验)与回归方程的显著性检验(F检验)是等价的,但在多元线性回归中,这个等价不成立。t检验是分别检验回归模型中各个回归系数是否具有显著性,以便使模型中只保留那些对因变量有显著影响的因素。检验时先计算统计量ti;然后根据给定的显著水平a,自由度n-k-1查t分布表,得临界值tata / 2,t > t − ata / 2,则回归系数bi与0有显著关异,反之,则与0无显著差异。统计量t的计算公式为:

      t_i=\frac{b_i}{s_y\sqrt{C_{ij}}}=\frac{b_i}{s_{bi}}

      其中,Cij是多元线性回归方程中求解回归系数矩阵的逆矩阵(x'x) − 1的主对角线上的第j个元素。对二元线性回归而言,可用下列公式计算:

      C_{11}=\frac{S_{22}}{S_{11}S_{22}-S^2_{12}}

      C_{22}=\frac{S_{11}}{S_{11}S_{22}-S^2_{12}}

      其中,

      S_{11}=\sum(x_1-\bar{x_1})^2=\sum x^2_1-\frac{1}{n}(\sum x_1)^2

      S_{22}=\sum(x_2-\bar{x_2})^2=\sum x^2_2-\frac{1}{n}(\sum x_2)^2

      S_{12}=\sum(x_1-\bar{x_1})(x_2-\bar{x}_2)=s_{21}

      \sum x_1x_2-\frac{1}{n}(\sum x_1)(\sum x_2)

      5.多重共线性判别

      若某个回归系数的t检验通不过,可能是这个系数相对应的自变量对因变量的影平不显著所致,此时,应从回归模型中剔除这个自变量,重新建立更为简单的回归模型或更换自变量。也可能是自变量之间有共线性所致,此时应设法降低共线性的影响。

      多重共线性是指在多元线性回归方程中,自变量之间有较强的线性关系,这种关系若超过了因变量与自变量的线性关系,则回归模型的稳定性受到破坏,回归系数估计不准确。需要指出的是,在多元回归模型中,多重共线性的难以避免的,只要多重共线性不太严重就行了。判别多元线性回归方程是否存在严惩的多重共线性,可分别计算每两个自变量之间的可决系数r2,若r2 > R2或接近于R2,则应设法降低多重线性的影响。亦可计算自变量间的相关系数矩阵的特征值的条件数k = λ1 / λp1为最大特征值,λp为最小特征值),k<100,则不存在多重点共线性;若100≤k≤1000,则自变量间存在较强的多重共线性,若k>1000,则自变量间存在严重的多重共线性。降低多重共线性的办法主要是转换自变量的取值,如变绝对数相对数平均数,或者更换其他的自变量。

      6.D.W检验

      当回归模型是根据动态数据建立的,则误差项e也是一个时间序列,若误差序列诸项之间相互独立,则误差序列各项之间没有相关关系,若误差序列之间存在密切的相关关系,则建立的回归模型就不能表述自变量与因变量之间的真实变动关系。D.W检验就是误差序列的自相关检验。检验的方法与一元线性回归相同。

    多元线性回归分析预测法案例分析

    案例一:公路客货运输量多元线性回归预测方法探讨[2]

      一、背景

      公路客、货运输量的定量预测,近几年来在我国公路运输领域大面积广泛地开展起来,并有效的促进了公路运输经营决策的科学化和现代化。

      关于公路客、货运输量的定量预测方法很多,本文主要介绍多元线性回归方法在公路客货运输量预测中的具体操作。根据笔者先后参加的部、省、市的科研课题的实践,证明了多元线性回归方法是对公路客、货运输量预测的一种置信度较高的有效方法。

      二、多元线性回归预测

      线性回归分析法是以相关性原理为基础的.相关性原理是预测学中的基本原理之一。由于公路客、货运输量受社会经济有关因素的综合影响。所以,多元线性回归预测首先是建立公路客、货运输量与其有关影响因素之间线性关系的数学模型。然后通过对各影响因素未来值的预测推算出公路客货运输量的预测值。

      三、公路客、货运输量多元线性回归预测方法的实施步骤

      1.影响因素的确定

      影响公路客货运输量的因素很多,主要包括以下一些因素:

      (1)客运量影响因素

      人口增长量裤保有量、国民生产总值国民收入工农业总产值,基本建设投资额城乡居民储蓄额铁路和水运客运量等。

      (2)货运量影响因素

      人口货车保有量(包括拖拉机),国民生产总值国民收入、工农业总产值,基本建设投资额,主要工农业产品产量,社会商品购买力社会商品零售总额.铁路和水运货运量菩。

      上述影响因素仅是对一般而言,在针对具体研究对象时会有所增减。因此,在建立模型时只须列入重要的影响因素,对于非重要因素可不列入模型中。若疏漏了某些重要的影响因素,则会造成预测结果的失真。另外,影响因素太少会造成模型的敏感性太强.反之,若将非重要影响因素列入模型,则会增加计算工作量,使模型的建立复杂化并增大随机误差

      影响因素的选择是建立预测模型首要的关键环节,可采取定性和定量相结合的方法进行.影响因素的确定可以通过专家调查法,其目的是为了充分发挥专家的聪明才智和经验。

      具体做法就是通过对长期从事该地区公路运输企业和运输管理部门的领导干部、专家、工作人员和行家进行调查。可通过组织召开座谈会.也可以通过采访,填写调查表等方法进行,从中选出主要影响因素为了避免影响因素确定的随意性,提高回归模型的精度和减少预测工作量,可通过查阅有关统计资料后,再对各影响因素进行相关度(或关联度)和共线性分析,从而再次筛选出最主要的影响因素.所谓相关度分析就是将各影响因素的时间序列与公路客货运量的时间序列做相关分杯事先确定—个相关系数,对相关系数小于的影响因素进行淘汰.关联度是灰色系统理论中反映事物发展变化过程中各因素之间的关联程度,可通过建空公路客、货运量与各影响影响因素之间关联系数矩阵,按一定的标准系数舍去关联度小的影响因素.所谓共线性是指某些影响因素之问存在着线性关系或接近于线性关系.由于公路运输经济自身的特点,影响公路客,货运输量的诸多因素之问总是存在着一定的相关性,持别是与国民经济有关的一些价值型指标。

      我们研究的不是有无相关性问题而是共线性的程度,如果影响因素之间的共线性程度很高,首先会降低参数估计值的精度。其次在回归方程建立后的统计检验中导致舍去重要的影响因素或错误的地接受无显著影响的因素,从而使整个预测工作失去实际意义。关于共线性程度的判定,可利用逐步分析估计法数理统计理论编制计算机程序来实现。或者通过比较rijR2的大小来判定。在预测学上,一般认为当rij > R2时,共线性是严重的,其含义是,多元线性回归方程中所含的任意两个自变量xi,xj之间的相关系数rij大于或等于该方程的样本可决系数R2时,说明自变量中存在着严重的共线性问题。

      2.建立经验线性回归方程利用最小二乘法原理寻求使误差平方和达到撮小的经验线性回归方程: y=a_0+a_1x_1+a_2x_2+\ldots+a_nx_n

      y——预测的客、货运量

      g——各主要影响因数

      3.数据整理

      对收集的历年客、货运输量和各主要影响因素的统计资料进行审核和加工整理是为了保证预测工作的质量。

      资料整理主要包括下列内容:

      (1)资料的补缺和推算。

      (2)对不可靠资料加以核实调整.对查明原因的异常值加以修正。

      (3)对时间序列中不可比的资料加以调整和规范化;对按当年价格计算的价值指标应折算成按统。

      4.多元线性回归模型的参数估计

      在经验线性回归模型中,a_0,a_1,a_2,\ldots,a_n是要估计的参数,可通过数理统计理论建立模型来确定。在实际预测中,可利用多元线性回归复相关分析的计算机程序来实现·5.对模型参数的估计值进行检验。

      此项工作的目的在于判定估计值是否满意、可靠。一般检验工作须从以下几方面来进行。

    • 经济意义检验

      关于经济预测的数学模型,首先要检验模型是否有经济意义,γp若参数估计值的符号和大小与公路运输经济发展以及经济判别不符合时,这时所估计的模型就不能或很难解释公路运输经济的一般发展规律.就应抛弃这个模型.需要重新构造模型或重新挑选影响因素。

    • 统计检验

      统计检验是数理统计理论的重要内容,用于检验模型估计值的可靠性。通常,在公路客、货运量预测中应采用的统计检验是:

    • 拟合度检验

      所谓拟合度是指所建立的模型与观察的实际情况轨迹是否吻合、接近,接近到什么程度。统计学是通过构造统计量R2来量度的,R2可由样本数据计算得出。若建立的模型愈接近于实际,则R^2愈接近于1。

    • 回归方程的显著性检验

      回归方程的显著性检验是通过方差分析构造统计量F来进行的,统计量F是通过样本数据计算得出的。当给定某一置信度后,可以通过查阅F表来确定回归模型从总体效果来看是否可以采纳。

      估计值的标准差是衡量估计值与真实参数值的离差的一种量度。参数的标准差越大,估计值的可靠性也就越小;反之,如果标准差越小,那么估计值的可靠性也就越大。参数值标准差的检验,可以通过构造大统计量来进行量度。当给定某一置信度后,可以通过查表来确定模型中某个参数估计值的可靠性。

      应当强调指出.统计检验相对于经济意义检验来说是第二位的。如果经济意义检验不合理,那么即使统计检验可以达到很高的置信度,也应当抛弃这种估计结果,因为用这样的结果来进行经济预测是没有意义的。

      6.最优回归方程的确定

      经过上述的经济意义和统计检验后,挑选出的线性回归方程往往是好几个、为了从中优选出用于进行实际预测的方程,我们可以采用定性和定量相结合的办法。

      从数理统计的原理来讲,应挑选方程的剩余均方和S·E较小为好.但作为经济预'删还必须尽量考虑到方程中的影响因素更切合实际和其未来值更易把握的原则来综合考虑。当然、有时也可以从中挑选出好几个较优的回归方程.通过预测后,分别作为不同的高、中、低方案以供决策人员选择。

      7.模型的实际预测检验

      在获得模型参数估计值后,又经过了上述一系列检验而选出的最优(或较优)回归方程,还必须对模型的预测能力加以检验。不难理解、最优回归方程对于样本期间来说是正确的,但是对用于实际预测是否合适呢?为此,还必须研究参数估计值的稳定性及相对于样本容量变化时的灵敏度,也必须研究确定估计出来的模型是否可以用于样本观察值以外的范国,其具休做法是:

      (1)采用把增大样本容量以后模型估计的结果与原来的估计结果进行比较,并检验其差异的显著性。

      (2)把估计出来的模型用于样本以外某一时间的实际预测,并将这个预测值与实际的观察值作一比较,然后检验其差异的显著性。

      8.模型的应用

      公路客、货运输量多元线性回归预测模型的研究目的主要有以下几个方面。

      (1)进行结构分析,研究影响该地区的公路客、货运输量的主耍因素和各影响因素影响程度的大小,进一步探讨该地区公路运输经济理论。

      (2)预测该地区今后年份的公路客、货运输量的变化,以便为公路运输市场、公路运输政策及公路运辅建设项目投资作出正确决策提供理论依据。另外,还可以通过公路客.货运输量与公路交通量作相关分析来对公路的饱和度发展趋势进行预测。从而为公路的新建、扩建项目的投资提供决策分析。

      (3)模拟各种经济政策下的经济效果,以便对有关政策进行评价。

      四、经调查分析,影响某地区旅客运输量的因素为。

      x1——国民收入

      x2——工农业总产值

      x3——社会总产值

      x4——人口

      x5——客车保有量

      x6——城乡居民储蓄存款

      经计算得下列相关系数表:

      x1 x2 x3 x4 x5 x6
    Y 0.9439 0.92 87 O.90 43 0.9914 0.9670 0.7021
    Z 0.97 3 6 0.96l 4 O.932 6 O.8645 O.9321 0.6678

      Y——客运盈

      Z——旅客周转量

      若令α = 0.85,则可以舍去x6这个影响因索,也就是认为“城乡居民储蓄存款”不能作为响旅客运输量的主要因素。

      2.经调查分析、影响某地区旅客运输量的因素为:

      x1——国民收入

      x2——工农业总产值

      x3——社会总产值

      x4——人口

      x5——客车保有量

      x6——国民生产总值

      x7——公路通车里程

      经计算得客运量和旅客周转量的经验线性回归方程如下:

      Y = α0 + α1x1 + α2x2 + α5x5  R^2=0.9997

      Y=\alpha^\prime_0+\alpha^\prime_1x_1+\alpha^\prime_3x_3+a^\prime_4x_4  R^2=0.9962

      Z = β0 + β4x4 + β5x5 + β7x7  R^2=0.9983

      Z=\beta^\prime_0+\beta^\prime_4x_4+\beta^\prime_5x_5+\beta^\prime_7x_7  R2 = 0.9990

      Y——客运盈

      Z——旅客周转量

      各自变量问的相关系数表如下:

    各自变量问的相关系数表

      由上述计算可知,四个方程中均未出现rij > R2的情况.因此可以认为各自方程中的影响因素之间不存在严重共线性问题。

      3.经调查分析,影响某地区货运周转量的因素为:

      x1——国民收入

      x2——工农业总产值

      x3——基建投资额

      x4——原煤产量

      x5——钢铁、化肥、水泥、粮食总产量

      x6——国民总产值

      x7——社会商品零售总额

      x8——相邻地、市工农业总产值的平均值

      Y = a0 + a4x4 + a6x6 + a7x7  (1)

      其中:R2=0.9875  F=206.33  S·E=1673.24

      t4=-2.8321  t6=3.1407  t7=2.7431

      Y = b0 + b2x2 + b4x4  (2)

      其中:R2=0.9764  F=164.59  S·E=1044.27

    展开全文
  • Python通过ARIMA模型进行时间序列分析预测

    千次阅读 热门讨论 2020-03-18 17:30:17
    时间序列分析预测就是在已有的和时间有关的数据序列的基础上构建其数据模型并预测其未来的数据,例如航空公司的一年内每日乘客数量、某个地区的人流量,这些数据往往具有周期性的规律。如下图所示,有的数据呈现出...

    ARIMA模型预测

    时间序列分析预测就是在已有的和时间有关的数据序列的基础上构建其数据模型并预测其未来的数据,例如航空公司的一年内每日乘客数量、某个地区的人流量,这些数据往往具有周期性的规律。如下图所示,有的数据呈现出简单的周期性循环,有的呈现出周期性循环变化。

       

    ARIMA(Autoregressive Integrated Moving Average model,差分整合移动平均自回归模型)不仅可以很好地对已有数据进行拟合,并且还可以在此基础上对未来数据进行预测。其函数原型为:ARIMA(data,order=(p,d,q)),因此除了需要传入原始数据data之外,还需要三个参数p、d、q,这三个参数与ARIMA的原理有关。

    ARIMA可以拆分为AR、I、MA,分别对应p、d、q三个参数。

    1. AR(AutoRegressive,自回归模型)描述当前值与历史值之间的关系,用变量自身的历史时间数据对自身进行预测,自回归过程的公式定义: yt是当前值 u是常数项 P是阶数 ri是自相关系数 et是误差。因此参数p为自回归模型的阶数。
    2. MA(Moving Average,移动平均值)利用一定时间间隔内的平均值作为某一期的估计值,这样可以消除数据的周期性影响。其公式为。因此参数q为移动平均的阶数。
    3. I代表差分操作,时间序列最常用来剔除周期性因素的方法,它主要是对等周期间隔的数据进行线性求减。从而使数据变得平稳,ARIMA一般进行一次差分即可稳定,因此d一般取值为0、1、2,这里取1,进行一次差分。

    确定参数值

    根据BIC

    因此要使用ARIMA模型进行预测首先需要确定参数p、q的值。因为一般阶数不超过整体数据的十分之一,因此这里采用穷举法。分别从0~10取p、q,并且得到该模型的BIC值(贝叶斯信息量 bayesian information criterion)。BIC准则综合考虑了残差大小和自变量的个数,残差越小、自变量个数越少BIC值越小,模型越优。因此从所有的p、q取值中找出bic值最小的即为理想的模型参数。经过如下函数,我得到p、q为5、5

    def get_order(data):
        pmax = int(len(data) / 10)    #一般阶数不超过 length /10
        qmax = int(len(data) / 10)
        bic_matrix = []
        for p in range(pmax +1):
            temp= []
            for q in range(qmax+1):
                try:
                    temp.append(ARIMA(data, order=(p, 1, q)).fit().bic)    # 将bic值存入二维数组
                except:
                    temp.append(None)
            bic_matrix.append(temp)    
        bic_matrix = pd.DataFrame(bic_matrix)   #将其转换成Dataframe 数据结构
        p,q = bic_matrix.stack().astype('float64').idxmin()        # 找出bic值最小对应的索引
        return p,q

    根据图像

    还可以根据自相关系数ACF与偏自相关系数PACF图像来确定阶数p、q的值,若下所示使用库函数输出数据的图像

    from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
    
    def draw_acf_pacf(data,lags):
        f = plt.figure(facecolor='white')
        ax1 = f.add_subplot(211)
        plot_acf(data,ax=ax1,lags=lags)
        ax2 = f.add_subplot(212)
        plot_pacf(data,ax=ax2,lags=lags)
        plt.subplots_adjust(hspace=0.5)
        plt.show()

    绘制图像有如下两种类型,拖尾是指序列以指数率单调递减或震荡衰减,如下左图所示。截尾指序列从某个时点变得非常小,如下右图所示。

     

    根据ACF图像与PACF图像的拖尾结尾选取不同的模型:

    • 自相关系数拖尾,则q=0,偏自相关系数p阶截尾:AR(p)模型,
    • 自相关系数q阶截尾,偏自相关函数拖尾,p=0:MA(q)模型
    • 自相关函数和偏自相关函数均拖尾,阶数分别为q、p:ARMA(p,q)模型

     那么图像如何确定阶数呢?即观察图片从第几个数据之后收敛到置信区间,例如上面右图从24之后再无超出置信区间的数据,所以认为其24阶截尾。

    进行预测

    接下来就可以使用arima模型进行模型拟合与预测了,这里使用的是python第三方包statsmodels.tsa.arima.model中的ARIMA模型。这是Statsmodels自从0.11版本新独立的模块,其原来的模块为statsmodels.tsa.arima_model.ARIMA,二者在功能上都实现了arima模型,并且具有相同的属性和方法名,其返回值均为ARIMAResults对象,通过该对象的predict()、forecast()得到预测值。值得注意的是新旧模块的方法的传入参数和返回值类型不太相同,因此使用时需要注意。其官方文档连接为:statsmodels.tsa.arima.model.ARIMAResultsstatsmodels.tsa.arima_model.ARIMAResults

    这里使用predict()函数进行预测,其可以传入start、end参数代表预测数据的开始和结束坐标,坐标值不仅可以是int、str,还可以是 datetime时间类型,如果start、end介于原有数据区域内,即为对原数据的预测拟合,如果end超过了原有数据长度,即代表对未来数据进行预测。forecast()函数接收一个steps参数,代表对未来多少个数据进行预测,也可以传入datetime时间,代表从样本数据结束一直预测到该时间。特别注意的是在使用pandas的Datetime时间索引的数据进行训练和预测时,要保证时间间隔是有规律的,否则在预测时索引会出错而报错如下:

    KeyError: 'The `end` argument could not be matched to a location related to the index of the data.'

    import h5py
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from statsmodels.tsa.arima.model import ARIMA
    
    %matplotlib inline  
    plt.rcParams['font.sans-serif'] = ['SimHei']    # 设置字符集显示中文
    plt.rcParams['axes.unicode_minus'] = False      # 设置负号正确显示
    
    # 显示数据趋势图
    def draw_data(data):
        plt.figure()
        plt.plot(data)
        
    with h5py.File('./taxi.h5', 'r') as hf:
        # 读取数据
        in_data=np.array(hf['in_data'])
        in_area = in_data.transpose(2, 0, 1)  # 调整维度
        in_mean_day = in_area.mean(axis=2)
        sub_data=pd.Series(in_mean_day[116][0:100])      # 截取数据集中的100个作为样本
        draw_data(sub_data)
        
        # 确定模型阶数
        # p,q=get_order(sub_data)
        # print('阶数:',p,q) 
        
        # 利用ARIMA模型进行预测
        model=ARIMA(sub_data,order=(5,1,5)).fit()        # 传入参数,构建并拟合模型
        predict_data=model.predict(0,150)                # 预测数据
        forecast=model.forecast(21)                      # 预测未来数据
        
        # 绘制原数据和预测数据对比图
        plt.plot(sub_data,label='原数据')
        plt.plot(predict_data,label='预测数据')
        plt.legend()
        plt.show()
        
    

    如下所示为拟合预测结果:

     数据预处理

    稳定性

    ARIMA所需要的数据是稳定的,这样才能进行规律的发掘和拟合,稳定的数据是指其均值和方差为一个常量、自协方差与时间无关,如下所示分别为稳定的数据和均值不稳定、方差不稳定、自协方差随时间变化

     

    数据的稳定性可以利用单位根检验Dickey-Fuller Test 进行判断,即在一定置信水平下,假设时序数据Null hypothesis: 非稳定、序列具有单位根。因此对于一个平稳的时序数据,就需要在给定的置信水平上显著,拒绝原假设。如下通过statsmodels包中的adfuller来进行检测:

    from statsmodels.tsa.stattools import adfuller
    
    # 利用ADF检测数据是否平稳
    def check_stable(data):
        adf_res=adfuller(data)
        print('t统计量',adf_res[0])
        print('t统计量的P值',adf_res[1])
        print('延迟阶数',adf_res[2])
        print('观测值的个数',adf_res[3])
        for key,value in adf_res[4].items():
            print('临界区间:',key,',值:',value)

     统计结果如下:其中P值低于0.05,可以拒绝原假设,即数据是平稳的

     移动平均

    那么如何使数据变得平稳,首先可以使用数据平滑技术消除数据的周期性起伏变化,常用的平滑技术有移动平均、加权移动平均,移动平均即利用一定时间间隔内的平均值作为某一期的估计值,而指数平均则是用变权的方法来计算均值。通过pandas的rolling()方法可以实现数据移动,ewa()实现加权移动,mean()实现平均。step平均的间隔。

    # 对数据进行移动平均来平滑数据
    def move_average(data,step):
        series=pd.Series(data)
        rol_mean=series.rolling(window=step).mean()     # 移动平均
        rol_weight_mean=pd.DataFrame.ewm(series,span=step).mean()       # 加权移动平均
        
        return rol_mean,rol_weight_mean

    差分

    通过将相同间隔的数据做差来消除周期性的因素。pandas的diff可以完成对序列相隔steps作差,例如当steps=7时,前7个数据是没法和前面的数据作差的,因此前七个数据为Nan,通过dropna()删除。

    在预测操作之后,还需要将差分的数据还原回来。差分操作只是简单的相减,因此还原就是相加,将原数据通过shift向后移动7个位置然后相加,即可实现还原操作。

    # 进行差分
    diff=series.diff(steps)
    diff=diff.dropna()
    
    # 差分还原
    diff_shift=sub_data.shift(7)
    diff_recover=predict_data.add(diff_shift)

     

    展开全文
  • 之前跟大家一起分享了如何用EXCEL...时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任何时...

    之前跟大家一起分享了如何用EXCEL进行回归分析,现在跟大家一起来学习一下如何用EXCEL做时间序列分析。

    在百科里,时间序列分析分析的解释是这样的:时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任何时间形式。而时间序列分析的作用有以下四点:

    1.可以反映社会经济现象的发展变化过程,描述现象的发展状态和结果。

    2.可以研究社会经济现象的发展趋势和发展速度。

    3.可以探索现象发展变化的规律,对某些社会经济现象进行预测。

    4.利用时间序列可以在不同地区或国家之间进行对比分析,这也是统计分析的重要方法之一

    看完上面的介绍,大家是不是已经对时间序列有了一定的了解了。今天主要是跟大家分享一下时间序列分析中的一种:利用季节指数法进行预测。

    当我们的时间序列数据如果具有季节性周期变化(受季节更替等因素影响,序列依一固定周期规则性的变化,又称商业循环)的时候,我们一般就会采用季节指数法来进行分析。

    话不多说,我们直接进入正题,下面就是我们这次需要进行分析的数据:

    8d3c950def2825f8d05ff41b43646a25.png

    这是某个企业在2015-2018之间每个季度的销售量,我们的目标是要通过现有的这些数据来预测这个企业在2019年四个季度的销售量大概是多少。

    首先,我们需要知道时间序列的模型:

    Y=T*S*C*I

    在这个模型里,我们需要利用的季节指数就是变量S,我们先在EXCEL表里建立一张表格:

    9410f385edbd00c19bf0a4ed8567a7dc.png

    首先我们需要对现有数据里面的销售量Y进行四项平均:

    e54f6fefd57efe69244bc2d34895f16b.png

    做完四项平均以后,我们还需要对所得到的数进行中心平均,这样我们就能够得到TC的值:

    2ba94a11359b9cbc5318198154fb810a.png

    求出TC以后我们根据公式就能得出带不规则变动的季节指数SI(SI=Y/TC):

    9b3e69b498e5f5f41035a6304511b433.png

    当我们求出SI以后,因为我们是需要得到季节指数S,所以我们需要把里面的不规则变动I去掉,所以我们还需要对SI进行处理:

    fd2fec68a37f9ebb2403d56c2a1553fe.png

    上图就是我们需要去掉不规则变动I所进行的处理,我们把每个季度的SI这样放到一个新的表格中,下方的季节平均就是每个季度在四年里面的平均值:

    72c6d3700a1bc9ac1867ef3e1348104a.png

    这个时候我们在季节平均后把四个数进行求和处理:

    3b05458132b3db70fd109f0a4704a944.png

    最后我们就能够得出我们所需要的去除不规则变动I的季节指数S:

    07e5b2a411510a1147d60a1aacce26ea.png

    这个时候我们便完成了对季节指数S的计算,现在我们需要把求出来的季节指数放到我们最开始做的表格里面:

    517bdda6e66a71e6fd5272813e391fef.png

    当我们把最重要的2015-2018年季节指数求出来了以后,我们就可以进行下一步计算了,在这道题里,我们可以使用趋势外推的方法来求表中的长期趋势T,这是完成整个预测里面重要的一个步骤,用到的就是我们昨天给大家分享的回归分析:

    5d14a15cfb12ce931d01181d2da20e2d.png

    上图就是我们做回归分析所进行的操作,然后得出下图的结论:

    ec4e07f2015ba49094ec64597edb0b1c.png

    回归分析的结果就不跟大家一一讲解了,昨天的文章里面都有谈到,我们从结果可以看出整个模型的效果还是挺好的,然后我们得出的回归方程为:

    Y=-115.5+204.18X

    这个时候我们回到最初的那个表里把长期趋势T求出来:

    6a2867b1cfc70b0a381a0818a1684e16.png

    到这里,我们整个分析就差最后一步了,使用季节指数S以及趋势值T来对2019年的销售量Y进行预测,我们先把数据补充完整:

    6e652f0bea8e1f43c838367371a04d53.png

    当我们把表格完成以后,我们需要的预测值Y就等于2019年各个季度的季节指数S*长期趋势T:

    2232c007bf45dbcd245be142314eea87.png

    上图中黄色部分就是我们本次分析里面所预测到的2019年四个季度销售量Y的值。到这里,我们这次的分析就算全部做完了。

    其实在我们工作当中,时间序列分析用到的地方特别多,今天只是跟大家介绍了如何用EXCEL进行来进行分析,在其他的数据分析工具当中,也都能够用这个模型进行分析,比如说SPSS、R、PYTHON等都是可以做这个分析的。大家在工作当中需要根据情况来选择自己合适的分析方法以及工具,才能够达到事半功倍的效果。

    展开全文
  • 中国疫情发展趋势分析预测(python实现)

    万次阅读 多人点赞 2020-03-06 15:28:49
    中国疫情发展趋势预测 笔者使用的增长模型预测中国疫情发展趋势,使用了3种增长模型进行了预测,这里只贴出利用逻辑斯蒂增长模型的代码。 logistic增长的曲线也称为s型曲线。下图左图为曲线数量,右图为增长...
  • 语法分析 预测分析

    千次阅读 2011-05-03 19:15:00
    清华大学计算机系列教材 编译原理第二版 张素琴,吕映芝等编著 ...tip:预测分析法和回归分析法都是自顶向下的方法,预测分析法只能分析满足LL1的文法 简单示例,为清楚原理 //课本P96 例1 #includ
  • 本节的内容是衔接上节数据挖掘宽表处理的部分,上节分析了电信业客户流失问题分析预测的准备工作,这节继续进行探索性分析和建模分析及模型评估,客户流失预测分为流失规则的预测以及流失评分预测。本节的流失规则...
  • github有一个Apple股价预测项目,https://github.com/Twabeeric/AAPLTextMining股评师分析报告是否会对股价产生影响,为此本文使用文本情感...
  • 沈志勇-百度大数据引擎与分析预测

    千次阅读 2014-11-27 13:09:47
    沈志勇-百度大数据引擎与分析预测 大数据是目前全球关注的一个热点技术领域。百度大数据实验室作为百度大数据引擎的重要组成部分,以深厚的大数据处理和大规模机器学习技术积累为基础,基于百度自有数据以及...
  • cups.head(3)
  • 作者|Nature出品|AI机器思维人类生活的现实社会经常遇到分类与预测的问题,目标变量可能受多个因素影响,根据相关系数可以判断影响因子的重要性。正如一个病人得某种病是多种因素影响造成的。房价的高低也是受多个...
  • 时间序列分析预测实战之指数平滑法

    万次阅读 多人点赞 2018-10-31 14:50:25
    在工作中,常常要对数据进行预测,确定业务未来的发展趋势,进而配置相关的营销策略、制定业务目标,由此引申出了一个重要的用数据预测未来的方法——时间序列分析,今天和大家分享就是实战中难度系数比较高的时间...
  • 机器学习之时序预测问题简单原理及实战。
  • 用ARMA模型做时间序列分析预测

    千次阅读 2020-03-09 15:31:56
    根据技术理论,未来的市场价格是可以通过过去的交易信息进行分析预测的。但是根据过去来分析预测未来,会有两个截然不同的方向:一个是趋势理论,这个理论说价格走势会自我强化,上涨的价格会愈发上涨,而下跌的...
  • python利用LSTM进行时间序列分析预测

    万次阅读 多人点赞 2017-01-12 12:52:38
     关于理论部分,可以参考这两篇文章(RNN、LSTM),本文主要从数据、代码角度,利用LSTM进行时间序列预测。(1)原始时间序列数据(只列出了18行)1455.219971 1399.420044 1402.109985 1403.449951 1441.469971 ...
  • 使用回归分析预测连续型变量

    千次阅读 2018-11-08 00:17:13
    能准确地预测 y y y 。 回归任务最常用的性能度量就是均平方误差(MSE,mean squared error): J ( w , b ) = 1 2 ∑ i = 1 N ( y i − h ( x i ) ) 2 = 1 2 ∑ i = 1 N ( y i − w T x i + b ) 2 J(\bm{w},b)=\frac...
  • R语言实战分析预测海藻数量

    千次阅读 2016-12-06 20:54:24
    R语言数据分析项目实战---利用多元线性回归,决策树,随机森林对海藻数量进行预测分析,包括前期的数据分析整理,很全面的项目实战
  • Autoregression / AR,就是用前期数据来预测后期数据的回归模型,所以叫做自回归模型。 它的逻辑简单,但对时间序列问题能够做出相当准确的预测。 1)自回归函数 y^t=b0+b1yt−1+...+bnyt−n,其中n<t y\hat{}_t =...
  • 使用决策树与随机森林预测糖尿病 数据源:https://www.kaggle.com/uciml/pima-indians-diabetes-database#diabetes.csv 目的:生成决策树可视化;输出决策树和随机森林的性能报告;画出ROC图;分析不同特征的重要性...
  • 时间序列分析预测实战之ARIMA模型

    千次阅读 2018-11-09 16:40:21
    接着上一章的内容,当数据超过100个,要对数据进行更加精准的预测,该用什么样的方法呢? 这时候ARIMA模型就登场了,全称是自回归差分移动平均模型,使用这个模型建模,具体的操作步骤如下: 1)观察时序的平稳性...
  • 使用python对股票数据分析预测

    千次阅读 2019-07-16 21:19:38
    安装quandl 安装Pandas_Datareader 1、获取数据 import Pandas_Datareader.data as web import datetime start=datetime.datetime(2018,1,1) ...end=datetime.datetime.now() ...SZ000001=web.DataReader('000001.SZ'...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,612
精华内容 18,644
关键字:

分析预测