统计分析

  • 1 参数估计
  • 2 假设检验与单样本T检验
  • 3 两样本T检验
  • 3 方差分析
  • 4 相关分析
  • 5 列联表卡方检验

1 参数估计

给定一个变量X改变,另一个变量Y均值改变说明两个变量有关,则这两个变量不独立。X可预测Y,y=f(x)。
分析过程:建立两个变量的描述性统计,观察一个变量改变另一个变量均值是否改变(是否独立)。若不独立,则说名一个变量对另一个变量有预测作用。

  • 检验两变量是否有关的四个检验:

统计学中检验两个变量是否有关,都是通过检验同组两个变量均值的差值是否等于0.如果与0无差异,说明两个变量无关,如果与0有差异,说明两个变量有关。
#样本对总体有代表性,用于对总体的某些指标推断使用
#总体参数(均值、方差、标准差)确定,样本参数是随机变量
估计方法:

  1. 点估计
    统计量由样本获取,用于对总体参数进行估计
  2. 区间估计——置信区间 (以样本均值为中心,2倍标准差的范围作置信区间)
    95%置信区间代表总体参数值有95%的可能在估计值的置信区间内

    均值标准误是衡量估计的均值的变异程度,随样本的标准差的变化而变化
    中心极限定理:样本量足够大时,总体服从正态分布
import pandas as pd
import os
  • 导入地区房价增长率数据
os.chdir(r'D:\python商业实践\《Python数据科学技术详解与商业实践》PDF+源代码+八大案例\《Python数据科学技术详解与商业实践》PDF+源代码+八大案例\源代码\Python_book\6Inference')
house_price_gr=pd.read_csv('house_price_gr.csv',encoding='gbk')

  • 对房屋价格增长率作描述性统计
house_price_gr.describe(include='all')

  • 可视化

(1)

get_ipython().magic('matplotlib inline')
import seaborn as sns
from scipy import stats
sns.distplot(house_price_gr.rate, kde=True, fit=stats.norm)


(2)

import statsmodels.api as sm
from matplotlib import pyplot as plt
fig = sm.qqplot(house_price_gr.rate, fit=True, line='45')
fig.show()


(3)

house_price_gr.plot(kind='box')

  • 置信区间估计 作95%置信区间
se = house_price_gr.rate.std() / len(house_price_gr) ** 0.5   #根号下n
LB = house_price_gr.rate.mean() - 1.98 * se  #下界 两倍(1.98)标准误
UB = house_price_gr.rate.mean() + 1.98 * se
(LB, UB)
############或者使用DescrStatsW得到置信区间
d1 = sm.stats.DescrStatsW(house_price_gr.rate)
d1.tconfint_mean(0.05)

注:95%置信区间的面积对应1.98倍的标准误(2是约等于)

=>房价同比增长率小于等于10%的概率不超过2.5%

2 假设检验与单样本T检验

基本原理:检验样本均值是否等于某个值。如果总体均值在置信区间内,则接受原假设;反之拒绝原假设。
假设检验步骤:
(1)假设 H0=0.1,H1≠0.1
(2)设置显著度 显著度设置与样本量有关 <100 取10%;100~500 取5%;500~1000取1%
(3)收集样本,得到均值
(4)假设均值分布

  • t检验
    假设H0:μ=μ0,计算t统计量

    根据t统计量相应p值判断是否拒绝原假设

DescrStatsW ->statsmodels.api包内方法
import statsmodels.api as sm

d1 = sm.stats.DescrStatsW(house_price_gr.rate)   #检验样本均值与假设的均值的t值
print('t-statistic=%6.4f, p-value=%6.4f, df=%s' %d1.ttest_mean(0.1))   #假设均值μ=0.1,返回t值、p值、自由度

3 两样本T检验

(二分类变量、连续变量)
原理:分类变量分别对应的连续变量是否相等。例:开卡人的平均收入与没开卡人平均收入相等——检验平均收入对开卡是否有影响。
(1)原假设H0:μ1=μ2 、悖假设H1:μ1≠μ2
(2)显著度α:5%
(3)采集样本
(4)计算统计量

  • 导入信用卡客户信息数据
creditcard= pd.read_csv(r'creditcard_exp.csv',skipinitialspace=True)  #skipinitialspace=True在空格处填充NaN

  • 按是否开卡对平均收入作描述性统计
creditcard['Income'].groupby(creditcard['Acc']).describe()

  • 两样本t检验时,首先进行Levene方差齐性检验,p<α,认为其显著。
Suc0 = creditcard[creditcard['Acc'] == 0]['Income']
Suc1 = creditcard[creditcard['Acc'] == 1]['Income']   #把开卡和没开卡的人分别拿出来,得到两列数
leveneTestRes = stats.levene(Suc0, Suc1, center='median')  #center='median'集中趋势
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes)   #p<α,显著

  • 进行t检验
stats.stats.ttest_ind(Suc0, Suc1, equal_var=False)  #equal_var=False代表显著


p值远小于显著度α
**在实际运用中,方差齐性检验与否并不影响最后结论,省略,只需进行t检验即可

stats.stats.ttest_ind(Suc0, Suc1)   #p值仍远小于α

3 方差分析

(多分类变量、连续变量)

总变异(离差平方和):

组内变异SSe:每个样本偏离各自组均值情况,代表模型所不能解释的变异,自由度为n-k+1
组间变异SSm:每个组的均值偏离总体均值情况,代表模型所能解释的变异,自由度为k-1

F(组间变异,组内变异)=MSm/MSe

import statsmodels.api as sm
from statsmodels.formula.api import ols  #调用osl线性回归

教育等级(分为四个等级)对月均支出的影响:
anova_lm方差分析

sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)',data=creditcard).fit())  #avg_exp受edu_class的影响

#python默认连续变量 C(edu_class)加大写C说明分类变量

最后得到p值很小,说明教育等级对支出有明显作用

多因素方差分析

sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)+C(gender)',data=creditcard).fit()) #不考虑交叉
sm.stats.anova_lm(ols('avg_exp ~ C(edu_class)+C(gender)+C(edu_class)*C(gender)',data=creditcard).fit())  #考虑交叉

4 相关分析

(连续变量、连续变量)
判断两个变量是否有关:一个变量取值发生改变,另一个变量均值是否改变
三种相关系数:
Pearson相关系数:参数方法、连续变量之间的相关
Spearman相关系数(秩相关系数):非参方法
Kendall相关系数:非参方法,叙述变量之间的相关

  • 散点图观察两连续变量的关系
creditcard.plot(x='Income', y='avg_exp', kind='scatter')


#一个变量与另一个变量呈发散关系,说明直方图趋势为右偏,对Y取对数

  • 计算Pearson相关系数
creditcard[['avg_exp_ln', 'Income']].corr(method='pearson')  #0.6说明中度相关,两变量有关系

注:|r|越大表明两个变量之间的相关性越强,一般认为:
|r|≥0.8 时,两个变量高度相关
0.5≤|r|≤0.8时,两个变量中度相关
0.3≤|r|≤0.5时,两个变量低度相关
|r|<0.3 时,认为两个变量几乎不存在相关性

5 列联表卡方检验

(分类变量、分类变量)
确定两个分类变量间的相关性:一个分类变量的分布会随另一个分类变量的改变而改变。
列联交叉表显示每一行列组合上的观察值出现的频数
#解释变量为行变量,被解释变量为列变量

#是否二手车、是否违约,二手车中违约的比例大,说明这两个分类变量有关
建模之前变量生成,衍生变量
所有的假设都是假设两个变量没关系
卡方检验
卡方检验和对应p值,可以确定两变量是否相关,不能测量相关性的强弱。

#其中A为实际值,T为期望值

#数据导入与清洗
accepts=pd.read_csv('accepts.csv').dropna()   #去除有缺失值的行
#验证分类变量相关关系
##生成交叉表
cross_table=pd.crosstab(accepts.used_ind,accepts.bad_ind,margins=True)  #margins=True 生成边缘分布
##生成列联表,查看行百分比
def percConvert(ser):return ser/(ser['All'])
cross_table.apply(percConvert,axis=1)   #axis=1  以行为单位进行



#由结果看出二手车中违约的比例大,初步说明这两个变量有关

print('''chisq = %6.4f
p-value = %6.4f
dof = %i
expected_freq = %s'''  %stats.chi2_contingency(cross_table.iloc[:2, :2]))


样本量4105,取显著度α=0.01%~0.1%,p<α,拒绝原假设,两个变量有关系。

注:在建模之前,可先创造衍生变量

def divMy(x,y):import numpy as npif x==np.nan or y==np.nan:return np.nanelif y==0:return -1else:return x/y
divMy(1,2)
#%%创造衍生变量
##
##历史负债收入比:tot_rev_line/tot_income
accepts["dti_hist"]=accepts[["tot_rev_line","tot_income"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
##本次新增负债收入比:loan_amt/tot_income
accepts["dti_mew"]=accepts[["loan_amt","tot_income"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
##本次贷款首付比例:down_pyt/loan_amt
accepts["fta"]=accepts[["down_pyt","loan_amt"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
##新增债务比:loan_amt/tot_rev_debt
accepts["nth"]=accepts[["loan_amt","tot_rev_debt"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
##新增债务额度比:loan_amt/tot_rev_line
accepts["nta"]=accepts[["loan_amt","tot_rev_line"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)accepts.head()

(五)统计分析基本算法相关推荐

  1. 通信网络基础期末复习-第五章-路由算法

    写在前面:本文主要依据为<通信网络基础>李建东,盛敏编著,如有侵权,请联系作者删除.本文仅用于个人期末复习与知识结构的搭建. 文章目录 第五章 路由算法 5.1 路由算法概述 5.1.1路 ...

  2. MySQL 五.索引与算法

    MySQL 五. 索引与算法 索引太多,插入时性能会受到影响, 应用程序的性能会受到影响;索引太少,查询时候的性能又比较底,所以说索引的创建要考虑其中的平衡点; 5.1 InnoDB存储引擎索引 B+ ...

  3. php四舍六入五成双算法

    四舍六入五成双算法,本文是用php实现 1.四舍六入五成双是什么?首先看一下百度百科怎么定义的: 2.php封装方法 public function calculate($num,$precision ...

  4. 用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...

  5. java 连珠五子棋.现代职业_用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 五子连珠算法为自创算法,对于五子棋该算法性能足以. 该算法原理是这样的: 根据当前下子位置获取该位置上的4条直线8个方向的与当前棋子同色的棋子连珠数量,如果 ...

  6. 实验五:Romberg算法

    实验五:Romberg算法 上一次实验课我们练习使用复化求积公式的使用,先来看一下上一次实验课的内容: 实验内容:将[0,1]区间4等分,仅有等分点的函数值,分别用复化梯形公式.复化Simpson公式 ...

  7. 五元组评价算法实现简易五子棋【人工智能】

    一.实验题目 五子棋游戏算法设计,方法不限.        以两人为一组,分为甲方和乙方对弈.各自设计自己的算法: 针对对方下的每一步骤棋落子,由算法给出相应的本方落子,最终胜者只有一个. 二.实验环 ...

  8. 五种最短路径算法的总结(待更新)

    最短路径算法: 1:Dijkstra     2:Floyd     3:Bellman-Ford     4:SPFA     5:A* 这五种最短路径算法初学的时候非常容易混淆,因为他们的松弛方法 ...

  9. c++多元线性回归_五种优化算法实现多元线性回归

    实现多元线性回归的要求及假设条件: '''线性回归的假设条件:1.样本独立,即每个预测样本之间没有依赖关系:2.残差e要服从正态分布,即y_true-y_pred的残差需要服从高斯分布:3.特征之间独 ...

最新文章

  1. 快手,字节面试题,将IP地址转换成整数类型,再转换回来。C++代码
  2. MaxCompute存储力持续升级,每年节省不止一个亿
  3. 微信回应朋友圈表情包评论关闭:灰度测试;Twitter漏洞波及1700万用户;Ruby 2.7.0发布 | 极客头条...
  4. 大屏可视化Axure效果图数据管理后台设计PSD样图HTML静态模板(共5771份,27.8G,附件中为网盘链接)
  5. 脚本之家电子书下载:https://www.jb51.net/books/
  6. 长沙计算机学院王进,王进教授
  7. linux运维每天都要做什么,Linux运维工作清闲吗?每天需要干什么?
  8. Android 蓝牙 单独打开和关闭BLE - 详解
  9. activemq保证消息顺序原理
  10. uestc_retarded 模板
  11. mysql高可用——MHA详细部署过程
  12. Geany设置全黑色主题
  13. linux内核radeon gpu源码解析1 —— 什么是radeon
  14. 【案例】某省行政执法综合管理,实现互联互通、信息共享、业务协同、智能便捷
  15. 敏捷开发个人理解及简单执行流程
  16. 微软等数据结构+算法面试100题
  17. office软件哪一款是免费的
  18. 如何用uc自媒体做淘宝客?UC自媒体号哪里有?
  19. 计算机类文献管理软件,你和学霸只差一款好用的文献管理入门软件
  20. 莆田学院计算机系录取分数线,莆田学院2021年各省录取分数线预测 历年文理科分数线...

热门文章

  1. linux下repo是什么文件夹,yum的repo文件详解、以及epel简介、yum源的更换
  2. Error while executing topic command : replication factor: 3 larger than available brokers: 0
  3. 简单工厂之Delphi实现
  4. 记一次美团点评校招java面试经历
  5. 网页如何打开php文件怎么打开,PHP文件怎么打开?打开PHP文件方法介绍
  6. python最佳ide_2014年最佳PHP IDE-调查结果
  7. mysql insert 空字符报错
  8. IBM 员工大地震:3万职位面临调整 1万人或被裁
  9. 【开源电机驱动】H 桥驱动-软件篇
  10. javascript var变量长度问题 --笔记