精华内容
下载资源
问答
  • 数据抽样

    2021-03-07 19:05:01
    抽样是数据处理基本步骤之一,也是科学实验、质量检验、社会调查普遍采用一种经济有效工作和研究方法。 数据量过大时候,可能不会使用所有数据去建模,可以使用数据抽样 数据抽样时候,抽样的数据...

    抽样是从整体样本中通过一定的方法选择一部分样本。抽样是数据处理的基本步骤之一,也是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。

    • 数据量过大的时候,可能不会使用所有的数据去建模,可以使用数据抽样

    • 数据抽样时候,抽样的数据能够反映全面的业务问题

    • 抽样的数量不能过少,数据集有5个特征,假如每个特征有2个值域,那么数据记录数需要至少在1000(100×5×2)条以上。

    • 如果是分类问题,经过抽样之后不要人为的造成样本分布不均衡问题

    简单随机抽样

    import random  # 导入标准库
    import numpy as np  # 导入第三方库
    shuffle_index = np.random.choice(np.arange(data.shape[0]),2000,True)#随机生成200个行号
    data_sample = data[shuffle_index] #从原始数据中取出200个行号对应的数据
    print(data_sample[:2])  # 打印输出前2条数据
    print(len(data_sample))  # 打印输出抽样样本量
    '''
    [[-9.71885153  9.99005726  5.91372197 -5.84789006 -5.90005311]
     [-5.82327998 -8.52454738  7.1583941   1.37501342  3.44036884]]
    2000
    '''

    等距抽样

    # 等距抽样
    data = np.loadtxt('data3.txt')  # 导入普通数据文件
    sample_count = 2000  # 指定抽样数量
    record_count = data.shape[0]  # 获取最大样本量
    width = record_count / sample_count  # 计算抽样间距
    data_sample = []  # 初始化空白列表,用来存放抽样结果数据
    i = 0  # 自增计数以得到对应索引值
    while len(data_sample) <= sample_count and i * width <= record_count - 1:  # 当样本量小于等于指定抽样数量并且矩阵索引在有效范围内时
        data_sample.append(data[int(i * width)])  # 新增样本
        i += 1  # 自增长
    print(data_sample[:2])  # 打印输出前2条数据
    print(len(data_sample))  # 打印输出样本数量
    '''
    [array([-3.08057779,  8.09020329,  2.02732982,  2.92353937, -6.06318211]), 
    array([-2.11984871,  7.74916701,  5.7318711 ,  4.75148273, -5.68598747])]
    2000
    '''

     

    展开全文
  • 假设您至少运行了两个要比较的分类任务实验。 一个是您的基线或对照或假设0 ( h0 )。 另一个是希望超越基准或治疗或假设1 ( h1 )的实验条件。 您将h0和h1预测与相同目标进行比较。 因此, h0预测, h1预测和...
  • 假设检验

    千次阅读 2020-08-05 10:20:03
    主要目的: 是在有关总体参数两个相互对立假设中,通过抽样检验来进行抉择 基本思想:小概率事件在一次试验中基本不会发生 基本思路: 对总体参数设定一个假设 利用由样本获得样本统计量,以检验总体参数是否...

    假设检验

    假设检验是推论统计中用于检验统计假设的一种方法

    • 主要目的: 是在有关总体参数的两个相互对立的假设中,通过抽样检验来进行抉择
    • 基本思想:小概率事件在一次试验中基本不会发生
    • 基本思路:
      1. 对总体参数设定一个假设
      2. 利用由样本获得的样本统计量,以检验总体参数是否符合假设
      3. 对此假设做出决策,接收或拒绝此假设

    错误分类

    第一类错误:拒绝正确的零假设

    α=P(Reject H0H0 is True)\alpha = P(Reject ~ H_0 | H_0 ~ is ~True)

    α\alpha 称为显著性水平。

    拒绝正确的零假设意味着接受了错误的备选假设 HAH_A,所以第一类错误又称为“假阳性”。

    有的人在这里可能产生疑惑,为什么不是“接受了错误的零假设” 即第二类错误叫假阳性呢?

    这是因为习惯上,零假设(Null Hypothesis)就是保持原样、不提出新观点

    比如你去医院,医生的零假设就是你没病;AB 测试里,零假设就是产品当前的改动不会带来任何效果提升。对应的备选假设:你有病;产品改动的有效的。

    这样来理解“假阳性”是不是就简单了,你本来没病,医生说你有病(阳性),所以医生把你诊断为 “阳性” 结果是假的。

    第二类错误:接受错误的零假设

    β=P(Accept H0H0 is False)\beta = P(Accept ~ H_0 | H_0 ~ is ~False)

    容易理解,第二类错误又称“假阴性”。

    基本步骤

    1. 确定零假设和备选假设,单尾检验还是双尾检验
    2. 确定显著性水平
    3. 建立拒绝域并判断
    展开全文
  • 方差检验

    千次阅读 2018-08-27 10:22:24
    一个总体方差假设检验的汇总 二、两个总体方差的统计推断 两个总体方差假设检验的汇总 三、多个总体比例的相等性的检验 三个或多个相等性的χ2检验 多重比较方法 四、独立性检验 利用样本数据检验两...

    一、一个总体方差的统计推断
    一个总体方差假设检验的汇总
    这里写图片描述
    二、两个总体方差的统计推断
    两个总体方差假设检验的汇总
    这里写图片描述
    三、多个总体比例的相等性的检验
    三个或多个相等性的χ2检验
    这里写图片描述
    多重比较方法
    这里写图片描述
    四、独立性检验
    利用样本数据检验两个分类变量的独立性
    这里写图片描述
    五、拟合优度检验
    拟合优度检验用来确定一个被抽样的总体是否服从某个特殊的概率分布
    多项概率分布
    这里写图片描述
    正态分布
    这里写图片描述
    这里写图片描述
    六、方差估计量的比较:F检验
    检验k个总体均值相等的过程
    这里写图片描述
    七、Fisher的LSD方法
    确定到底哪些均值之间存在差异
    这里写图片描述
    这里写图片描述
    八、ANOVA方法
    方差分析师将总平方和及其自由度分解成它们对应的来源(处理与误差)的一个过程。
    九、析因实验
    析因实验是一种实验设计,允许我们同时得到有关两个或两个以上因子同时存在的一些统计结论。

    展开全文
  • 案例5 Logistic回归之构建初始信用评级和分类模型检验(代码)8 逻辑回归1、导入数据和数据清洗2、衍生变量:3、分类变量相关关系3.1 交叉表3.2 列联表4、线性回归4.1 数据预处理(字符型转化为数值型,查看变量间...

    8 逻辑回归

    信用风险建模案例
    数据说明:本数据是一份汽车贷款违约数据
    #名称—中文含义
    #application_id—申请者ID
    #account_number—帐户号
    #bad_ind—是否违约
    #vehicle_year—汽车购买时间
    #vehicle_make—汽车制造商
    #bankruptcy_ind—曾经破产标识
    #tot_derog—五年内信用不良事件数量(比如手机欠费消号)
    #tot_tr—全部帐户数量
    #age_oldest_tr—最久账号存续时间(月)
    #tot_open_tr—在使用帐户数量
    #tot_rev_tr—在使用可循环贷款帐户数量(比如信用卡)
    #tot_rev_debt—在使用可循环贷款帐户余额(比如信用卡欠款)
    #tot_rev_line—可循环贷款帐户限额(信用卡授权额度)
    #rev_util—可循环贷款帐户使用比例(余额/限额)
    #fico_score—FICO打分
    #purch_price—汽车购买金额(元)
    #msrp—建议售价
    #down_pyt—分期付款的首次交款
    #loan_term—贷款期限(月)
    #loan_amt—贷款金额
    #ltv—贷款金额/建议售价*100
    #tot_income—月均收入(元)
    #veh_mileage—行使历程(Mile)
    #used_ind—是否二手车
    #weight—样本权重

    import os
    import numpy as np
    from scipy import stats
    import pandas as pd
    import statsmodels.api as sm
    import statsmodels.formula.api as smf
    import matplotlib.pyplot as plt
    
    ?pd.read_csv
    

    1、导入数据和数据清洗

    表格中有两行列标签(需注意)

    accepts = pd.read_csv(r'.\data\accepts.csv',header =1,encoding='gbk')
    accepts2 = accepts.drop([5845,5846,11692]).dropna() ##
    accepts2.head()
    
    application_id account_number bad_ind vehicle_year vehicle_make bankruptcy_ind tot_derog tot_tr age_oldest_tr tot_open_tr ... purch_price msrp down_pyt loan_term loan_amt ltv tot_income veh_mileage used_ind weight
    0 2314049 11613 1 1998 FORD N 7 9 64 2 ... 17200 17350 0 36 17200 99 6550 24000 1 1
    1 63539 13449 0 2000 DAEWOO N 0 21 240 11 ... 19588.54 19788 683.54 60 19588.54 99 4666.67 22 0 4.75
    3 8725187 15359 1 1997 FORD N 3 10 35 5 ... 12999 12100 3099 60 10800 118 1500 10000 1 1
    4 4275127 15812 0 2000 TOYOTA N 0 10 104 2 ... 26328.04 22024 0 60 26328.04 122 4144 14 0 4.75
    5 8712513 16979 0 2000 DODGE Y 2 15 136 4 ... 26272.72 26375 0 36 26272.72 100 5400 1 0 4.75

    5 rows × 25 columns

    #把字符数据转化为浮点型数据
    accepts2['tot_rev_line'] = accepts2['tot_rev_line'].astype(float)
    accepts2['tot_income'] = accepts2['tot_income'].astype(float)
    accepts2['loan_amt'] = accepts2['loan_amt'].astype(float)
    accepts2['tot_income'] = accepts2['tot_income'].astype(float)
    accepts2['down_pyt'] = accepts2['down_pyt'].astype(float)
    accepts2['loan_amt'] = accepts2['loan_amt'].astype(float)
    accepts2['tot_rev_debt'] = accepts2['tot_rev_debt'].astype(float)
    

    2、衍生变量:

    #定义除法
    def divMy(x,y):
        import numpy as np
        if x==np.nan or y==np.nan:
            return np.nan
        elif y==0:
            return -1
        else:
            return x/y
    divMy(1,2)
    
    0.5
    
    ##历史负债收入比:tot_rev_line/tot_income
    accepts2["dti_hist"]=accepts2[["tot_rev_line","tot_income"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
    ##本次新增负债收入比:loan_amt/tot_income
    accepts2["dti_mew"]=accepts2[["loan_amt","tot_income"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
    ##本次贷款首付比例:down_pyt/loan_amt
    accepts2["fta"]=accepts2[["down_pyt","loan_amt"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
    ##新增债务比:loan_amt/tot_rev_debt
    accepts2["nth"]=accepts2[["loan_amt","tot_rev_debt"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
    ##新增债务额度比:loan_amt/tot_rev_line
    accepts2["nta"]=accepts2[["loan_amt","tot_rev_line"]].apply(lambda x:divMy(x[0],x[1]),axis = 1)
    
    accepts2.head()
    
    application_id account_number bad_ind vehicle_year vehicle_make bankruptcy_ind tot_derog tot_tr age_oldest_tr tot_open_tr ... ltv tot_income veh_mileage used_ind weight dti_hist dti_mew fta nth nta
    0 2314049 11613 1 1998 FORD N 7 9 64 2 ... 99 6550.00 24000 1 1 0.076336 2.625954 0.000000 33.992095 34.400000
    1 63539 13449 0 2000 DAEWOO N 0 21 240 11 ... 99 4666.67 22 0 4.75 12.265920 4.197541 0.034895 0.566061 0.342212
    3 8725187 15359 1 1997 FORD N 3 10 35 5 ... 118 1500.00 10000 1 1 3.964000 7.200000 0.286944 2.687236 1.816347
    4 4275127 15812 0 2000 TOYOTA N 0 10 104 2 ... 122 4144.00 14 0 4.75 0.434363 6.353292 0.000000 -1.000000 14.626689
    5 8712513 16979 0 2000 DODGE Y 2 15 136 4 ... 100 5400.00 1 0 4.75 1.064259 4.865319 0.000000 7.196034 4.571554

    5 rows × 30 columns

    3、分类变量的相关关系

    3.1 交叉表

    cross_table = pd.crosstab(accepts2.used_ind,accepts2.bad_ind, margins=True)
    #cross_table = pd.crosstab(accepts.bankruptcy_ind,accepts.bad_ind, margins=True)
    cross_table
    
    bad_ind 0 1 All
    used_ind
    0 2914 612 3526
    1 3724 960 4684
    All 6638 1572 8210

    3.2 列联表

    #法一:
    def percConvert(ser):
        return ser/float(ser[-1])
    
    cross_table = pd.crosstab(accepts2.used_ind,accepts2.bad_ind, margins=True)
    cross_table.apply(percConvert, axis=1)
    
    bad_ind 0 1 All
    used_ind
    0 0.826432 0.173568 1.0
    1 0.795047 0.204953 1.0
    All 0.808526 0.191474 1.0
    print('''chisq = %6.4f 
    p-value = %6.4f
    dof = %i 
    expected_freq = %s'''  %stats.chi2_contingency(cross_table.iloc[:2, :2]))
    
    chisq = 12.5979 
    p-value = 0.0004
    dof = 1 
    expected_freq = [[2850.86333739  675.13666261]
     [3787.13666261  896.86333739]]
    
    #法二:(与预计的结果不一样,目前以方法一为准)
    cross_table = pd.crosstab(accepts2.used_ind,accepts2.bad_ind, margins=False)
    cross_table = cross_table.div(cross_table.sum(1),axis = 0)
    cross_table
    
    print('''chisq = %6.4f 
    p-value = %6.4f
    dof = %i 
    expected_freq = %s'''  %stats.chi2_contingency(cross_table.iloc[:2, :2]))
    

    4、线性回归

    4.1 数据预处理(字符型转化为数值型,查看变量间的关系)

    # 中文乱码的处理
    plt.rcParams['font.sans-serif'] = [u'SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    #导入进来的数据为字符串,先将其转化为数值型
    accepts2['age_oldest_tr'] = accepts2['age_oldest_tr'].astype(int)
    accepts2['bad_ind'] = accepts2['bad_ind'].astype(int)
    
    accepts2.plot(x = 'age_oldest_tr',y = 'bad_ind', kind = 'scatter')
    # plt.scatter(x=accepts2.age_oldest_tr, y=accepts2.bad_ind)
    
    <matplotlib.axes._subplots.AxesSubplot at 0x1fc07313400>
    

    在这里插入图片描述

    4.2 随机抽样,建立训练集与测试集

    #为5.2 1向前法预处理
    candidates = ['bad_ind','tot_derog','age_oldest_tr','tot_open_tr','rev_util','fico_score','loan_term','ltv',
                  'veh_mileage','dti_hist','dti_mew','fta','nth','nta']
    accepts2[candidates] = accepts2[candidates].astype(float)
    
    train = accepts2.sample(frac=0.7, random_state=1234).copy()
    test = accepts2[~ accepts2.index.isin(train.index)].copy()
    print(' 训练集样本量: %i \n 测试集样本量: %i' %(len(train), len(test)))
    
     训练集样本量: 5747 
     测试集样本量: 2463
    

    4.3 线性回归

    lg = smf.glm('bad_ind ~ age_oldest_tr', data=train, 
                 family=sm.families.Binomial(sm.families.links.logit)).fit()  #逻辑回归,0-1分布(伯努利分布)
    lg.summary()
    
    Generalized Linear Model Regression Results
    Dep. Variable: bad_ind No. Observations: 5747
    Model: GLM Df Residuals: 5745
    Model Family: Binomial Df Model: 1
    Link Function: logit Scale: 1.0000
    Method: IRLS Log-Likelihood: -2730.8
    Date: Sat, 15 Feb 2020 Deviance: 5461.6
    Time: 11:24:04 Pearson chi2: 5.89e+03
    No. Iterations: 5 Covariance Type: nonrobust
    coef std err z P>|z| [0.025 0.975]
    Intercept -0.5769 0.065 -8.897 0.000 -0.704 -0.450
    age_oldest_tr -0.0057 0.000 -13.682 0.000 -0.006 -0.005

    4.4 预测

    train['proba'] = lg.predict(train)
    test['proba'] = lg.predict(test)
    
    test['proba'].head(10)
    
    4     0.237216
    10    0.155657
    13    0.277338
    20    0.060517
    22    0.235165
    25    0.098014
    27    0.050966
    32    0.193184
    51    0.254062
    52    0.318912
    Name: proba, dtype: float64
    

    4.5 模型评估

    1、设定阈值

    # 设定阈值
    
    test['prediction'] = (test['proba'] > 0.3).astype('int')
    

    2、混淆矩阵

    pd.crosstab(test.bad_ind, test.prediction, margins=True)
    
    prediction 0 1 All
    bad_ind
    0.0 1877 138 2015
    1.0 366 82 448
    All 2243 220 2463

    3、计算准确率

    acc = sum(test['prediction'] == test['bad_ind']) /np.float(len(test))
    print('The accurancy is %.2f' %acc)
    
    The accurancy is 0.80
    
    #选取准确率最高的阈值
    for i in np.arange(0.02, 0.3, 0.02):
        prediction = (test['proba'] > i).astype('int')
        confusion_matrix = pd.crosstab(prediction,test.bad_ind,
                                       margins = True)
        precision = confusion_matrix.loc[0, 0] /confusion_matrix.loc['All', 0]
        recall = confusion_matrix.loc[0, 0] / confusion_matrix.loc[0, 'All']
        Specificity = confusion_matrix.loc[1, 1] /confusion_matrix.loc[1,'All']
        f1_score = 2 * (precision * recall) / (precision + recall)
        print('threshold: %s, precision: %.2f, recall:%.2f ,Specificity:%.2f , f1_score:%.2f'%(i, precision, recall, Specificity,f1_score))
    
    threshold: 0.02, precision: 0.00, recall:0.50 ,Specificity:0.18 , f1_score:0.00
    threshold: 0.04, precision: 0.01, recall:0.94 ,Specificity:0.18 , f1_score:0.02
    threshold: 0.06, precision: 0.03, recall:0.92 ,Specificity:0.18 , f1_score:0.06
    threshold: 0.08, precision: 0.07, recall:0.93 ,Specificity:0.19 , f1_score:0.14
    threshold: 0.1, precision: 0.13, recall:0.92 ,Specificity:0.19 , f1_score:0.23
    threshold: 0.12000000000000001, precision: 0.21, recall:0.92 ,Specificity:0.21 , f1_score:0.34
    threshold: 0.13999999999999999, precision: 0.27, recall:0.92 ,Specificity:0.21 , f1_score:0.42
    threshold: 0.16, precision: 0.35, recall:0.90 ,Specificity:0.22 , f1_score:0.51
    threshold: 0.18, precision: 0.44, recall:0.89 ,Specificity:0.23 , f1_score:0.59
    threshold: 0.19999999999999998, precision: 0.56, recall:0.87 ,Specificity:0.24 , f1_score:0.68
    threshold: 0.22, precision: 0.68, recall:0.87 ,Specificity:0.27 , f1_score:0.77
    threshold: 0.24, precision: 0.76, recall:0.85 ,Specificity:0.28 , f1_score:0.81
    threshold: 0.26, precision: 0.83, recall:0.85 ,Specificity:0.32 , f1_score:0.84
    threshold: 0.28, precision: 0.88, recall:0.85 ,Specificity:0.34 , f1_score:0.86
    

    4、绘制ROC曲线

    import sklearn.metrics as metrics
    
    fpr_test, tpr_test, th_test = metrics.roc_curve(test.bad_ind, test.proba)
    fpr_train, tpr_train, th_train = metrics.roc_curve(train.bad_ind, train.proba)
    
    plt.figure(figsize=[3, 3])
    plt.plot(fpr_test, tpr_test, 'b--')
    plt.plot(fpr_train, tpr_train, 'r-')
    plt.title('ROC curve')
    plt.show()
    print('AUC = %.4f' %metrics.auc(fpr_test, tpr_test))
    

    在这里插入图片描述

    AUC = 0.6488

    5、逻辑回归

    5.1 包含分类预测变量的逻辑回归

    formula = '''bad_ind ~ C(used_ind)'''
    
    lg_m = smf.glm(formula=formula, data=train, 
                 family=sm.families.Binomial(sm.families.links.logit)).fit()
    lg_m.summary()
    
    Generalized Linear Model Regression Results
    Dep. Variable: bad_ind No. Observations: 5747
    Model: GLM Df Residuals: 5745
    Model Family: Binomial Df Model: 1
    Link Function: logit Scale: 1.0000
    Method: IRLS Log-Likelihood: -2836.2
    Date: Sat, 15 Feb 2020 Deviance: 5672.4
    Time: 11:24:31 Pearson chi2: 5.75e+03
    No. Iterations: 4 Covariance Type: nonrobust
    coef std err z P>|z| [0.025 0.975]
    Intercept -1.5267 0.053 -29.060 0.000 -1.630 -1.424
    C(used_ind)[T.1] 0.1927 0.068 2.838 0.005 0.060 0.326

    5.2 多元逻辑回归

    1、向前法

    def forward_select(data, response):
        remaining = set(data.columns)
        remaining.remove(response)
        selected = []
        current_score, best_new_score = float('inf'), float('inf')
        while remaining:
            aic_with_candidates=[]
            for candidate in remaining:
                formula = "{} ~ {}".format(
                    response,' + '.join(selected + [candidate]))
                aic = smf.glm(
                    formula=formula, data=data, 
                    family=sm.families.Binomial(sm.families.links.logit)
                ).fit().aic
                aic_with_candidates.append((aic, candidate))
            aic_with_candidates.sort(reverse=True)
            best_new_score, best_candidate=aic_with_candidates.pop()
            if current_score > best_new_score: 
                remaining.remove(best_candidate)
                selected.append(best_candidate)
                current_score = best_new_score
                print ('aic is {},continuing!'.format(current_score))
            else:        
                print ('forward selection over!')
                break
                
        formula = "{} ~ {} ".format(response,' + '.join(selected))
        print('final formula is {}'.format(formula))
        model = smf.glm(
            formula=formula, data=data, 
            family=sm.families.Binomial(sm.families.links.logit)
        ).fit()
        return(model)
    
    #只有连续变量可以进行变量筛选,分类变量需要进行WOE转换才可以进行变量筛选
    candidates = ['bad_ind','tot_derog','age_oldest_tr','tot_open_tr','rev_util','fico_score','loan_term','ltv',
                  'veh_mileage','dti_hist','dti_mew','fta','nth','nta']
    data_for_select = train[candidates]
    
    lg_m1 = forward_select(data=data_for_select, response='bad_ind')
    lg_m1.summary()
    
    
    aic is 5112.102444955438,continuing!
    aic is 4930.620746960663,continuing!
    aic is 4867.936361578135,continuing!
    aic is 4862.177989178937,continuing!
    aic is 4856.0240437714365,continuing!
    aic is 4853.140577715231,continuing!
    aic is 4851.285414957676,continuing!
    forward selection over!
    final formula is bad_ind ~ fico_score + ltv + age_oldest_tr + rev_util + nth + tot_derog + fta 
    
    Generalized Linear Model Regression Results
    Dep. Variable: bad_ind No. Observations: 5747
    Model: GLM Df Residuals: 5739
    Model Family: Binomial Df Model: 7
    Link Function: logit Scale: 1.0000
    Method: IRLS Log-Likelihood: -2417.6
    Date: Sat, 15 Feb 2020 Deviance: 4835.3
    Time: 11:24:47 Pearson chi2: 5.60e+03
    No. Iterations: 6 Covariance Type: nonrobust
    coef std err z P>|z| [0.025 0.975]
    Intercept 5.6094 0.591 9.491 0.000 4.451 6.768
    fico_score -0.0139 0.001 -16.606 0.000 -0.015 -0.012
    ltv 0.0278 0.002 11.201 0.000 0.023 0.033
    age_oldest_tr -0.0035 0.000 -7.929 0.000 -0.004 -0.003
    rev_util 0.0010 0.000 2.564 0.010 0.000 0.002
    nth 0.0004 0.000 2.529 0.011 8.63e-05 0.001
    tot_derog 0.0253 0.011 2.271 0.023 0.003 0.047
    fta -0.6570 0.349 -1.880 0.060 -1.342 0.028

    2、计算方差膨胀因子

    # Seemingly wrong when using 'statsmmodels.stats.outliers_influence.variance_inflation_factor'
    #计算方差膨胀因子,若其> 10 表示某变量的多重共线性严重.
    def vif(df, col_i):
        from statsmodels.formula.api import ols
        
        cols = list(df.columns)
        cols.remove(col_i)
        cols_noti = cols
        formula = col_i + '~' + '+'.join(cols_noti)
        r2 = ols(formula, df).fit().rsquared
        return 1. / (1. - r2)
    
    candidates = ['bad_ind','fico_score','ltv','age_oldest_tr','tot_derog','nth','tot_open_tr','veh_mileage','rev_util']
    exog = train[candidates].drop(['bad_ind'], axis=1)
    
    for i in exog.columns:
        print(i, '\t', vif(df=exog, col_i=i))
    
    fico_score 	 1.6474312909303999
    ltv 	 1.0312076990808654
    age_oldest_tr 	 1.2398180183116478
    tot_derog 	 1.387916859405689
    nth 	 1.019005900596472
    tot_open_tr 	 1.130385791173031
    veh_mileage 	 1.0249442971334133
    rev_util 	 1.0857772491871416
    
    train['proba'] = lg_m1.predict(train)
    test['proba'] = lg_m1.predict(test)
    #ROC曲线
    import sklearn.metrics as metrics
    
    fpr_test, tpr_test, th_test = metrics.roc_curve(test.bad_ind, test.proba)
    fpr_train, tpr_train, th_train = metrics.roc_curve(train.bad_ind, train.proba)
    
    plt.figure(figsize=[3, 3])
    plt.plot(fpr_test, tpr_test, 'b--')
    plt.plot(fpr_train, tpr_train, 'r-')
    plt.title('ROC curve')
    plt.show()
    
    print('AUC = %.4f' %metrics.auc(fpr_test, tpr_test))
    

    在这里插入图片描述
    AUC = 0.7756

    6、其他变量处理

    目前vehicle_year、vehicle_make、bankruptcy_ind、used_ind这些分类变量无法通过逐步变量筛选法

    解决方案:

    • 1、逐一根据显著性测试
    • 2、使用决策树等方法筛选变量,但是多分类变量需要事先进行变量概化
    • 3、使用WOE转换,多分类变量也需要事先进行概化,使用scorecardpy包中的woe算法可以自动进行概化

    使用第一种方法

    
    #formula = '''bad_ind ~ fico_score+ltv+age_oldest_tr+tot_derog+nth+tot_open_tr+veh_mileage+rev_util+C(used_ind)+C(vehicle_year)+C(bankruptcy_ind)'''
    formula = '''bad_ind ~ fico_score+ltv+age_oldest_tr+tot_derog+nth+tot_open_tr+veh_mileage+rev_util+C(bankruptcy_ind)'''
    lg_m = smf.glm(formula=formula, data=train, 
                 family=sm.families.Binomial(sm.families.links.logit)).fit()
    lg_m.summary()
    
    Generalized Linear Model Regression Results
    Dep. Variable: bad_ind No. Observations: 5747
    Model: GLM Df Residuals: 5737
    Model Family: Binomial Df Model: 9
    Link Function: logit Scale: 1.0000
    Method: IRLS Log-Likelihood: -2416.0
    Date: Sat, 15 Feb 2020 Deviance: 4832.0
    Time: 11:44:38 Pearson chi2: 5.54e+03
    No. Iterations: 6 Covariance Type: nonrobust
    coef std err z P>|z| [0.025 0.975]
    Intercept 5.4394 0.596 9.122 0.000 4.271 6.608
    C(bankruptcy_ind)[T.Y] -0.3261 0.136 -2.397 0.017 -0.593 -0.059
    fico_score -0.0138 0.001 -16.393 0.000 -0.015 -0.012
    ltv 0.0290 0.002 12.024 0.000 0.024 0.034
    age_oldest_tr -0.0034 0.000 -7.282 0.000 -0.004 -0.002
    tot_derog 0.0330 0.012 2.788 0.005 0.010 0.056
    nth 0.0004 0.000 2.617 0.009 9.82e-05 0.001
    tot_open_tr -0.0103 0.012 -0.866 0.387 -0.034 0.013
    veh_mileage 8.365e-07 1.17e-06 0.713 0.476 -1.46e-06 3.14e-06
    rev_util 0.0011 0.000 2.610 0.009 0.000 0.002
    展开全文
  • 在学习统计学贾书过程,在第6—14章节出有许多需要理解与记忆公式和概念,在此通过博客形式做一次梳理,主要内容为统计学中抽样分布、假设检验、参数估计、分类数据分析、方差分析、一元二元线性分析、时间...
  • 有序/无序分类变量统计推断

    千次阅读 2020-08-04 19:22:47
    有序/无序分类变量统计推断1 有序分类变量统计推断——非参数检验1.1 非参数检验概述1.2 两个配对样本非参数检验1.3 两个独立样本非参数检验1.4 多个独立样本非参数检验1.5 多个配对样本非参数检验2 ...
  • 机器学习; 主要决策树算法;决策树分类算法进展;1数据预处理;1数据预处理;1数据预处理;1数据预处理;2抽样方法;...4. 研究产生决策树训练和检验数据大小及特性与决策树特性之间关系;5.不确定环境下
  • 通俗易懂说假设检验

    千次阅读 2019-01-22 11:29:58
    1.假设检验的分类和基本原理。 假设检验是一种带有概率性质的反证法。其依据是小概率事件在一次观察中不会出现。 例如:北京方便面官方发布一袋北京方便面重100g(默认是正态分布),为了证明官方是否说谎,我们随机...
  • 在学习统计学贾书过程,在第6—14章节出有许多需要理解与记忆公式和概念,在此通过博客形式做一次梳理,主要内容为统计学中抽样分布、假设检验、参数估计、分类数据分析、方差分析、一元二元线性分析、时间...
  • 决策树利用树形结构进行分类和回归,构建树指标有多种,其中一种就是方差。在介绍决策树类算法前,首先介绍一下Spark MLlib中基本统计。...即汇总统计、关联、分层抽样、假设检验、随机数据生成。
  • Python数据科学:正态分布与t检验

    千次阅读 2019-05-11 08:23:52
    昨天介绍了两连续变量相关分析,今天来说说连续变量与分类变量(二分)之间的检验。 通俗来讲,就是去发现变量间关系。 连续变量数量为一个,分类变量数量为两个。 总体:包含所有研究个体集合。 ...
  • 目录 一、保持(holdout)方法 二、随机二次抽样 三、交叉验证 ...在数据集上训练我们的分类模型,在检验集上评估模型的性能。两个集合的划分比例通常根据专家判断,比如2:1,1:2等。 保持方法有众所...
  • Python -双样本T检验

    2021-04-09 20:15:41
    例如一个分类指标(0,1)与连续变量是否有关系。比如我们开卡,是否会开卡(0,1)与每月月均支持金额关系 应用条件: 两个观测样本独立 每一组都符合正态分布 在数据量很大情况下,抽取3000样本量,p值&...
  • 在学习统计学贾书过程,在第6—14章节出有许多需要理解与记忆公式和概念,在此通过博客形式做一次梳理,主要内容为统计学中抽样分布、假设检验、参数估计、分类数据分析、方差分析、一元二元线性分析、时间...
  • 文章目录探索性数据分析概念结构化数据组成矩形数据位置估计变异性估计自由度探索数据分布二元数据和分类数据分布相关性两个及以上变量数据和抽样分布概念随机抽样和样本偏差偏差选择偏差自助法置信区间抽样分布...
  • 4.1.2 假设检验的基本思想 . 87 4.1.3 假设检验在数据分析中的作用 . 88 4.2 假设检验的分析方法 . 88 4.2.1 假设检验的基本步骤 . 88 4.2.2 假设检验与区间估计的联系 . 90 4.2.3 假设检验中的两类错误 . 92 4.2.4 ...
  • 分类变量、连续变量分布描述 bootstrap抽样、秩和检验探索变量关联:比较均值、独立样本 变量变换:P-P图 ...(1)非参数检验(bootstrap抽样、秩和检验)方法-实际上是一种初判方法; (2)或考虑...
  • 回归分析一点见解

    2020-11-23 21:26:37
    数据类型:四种 1、连续数据:温度、...2、t分布:t检验抽样均值; 3、x2分布:X2检验抽样方差; 4、F分布:F检验,两个抽样方差比值; R语言回归分析: 1、回归分析,预测变量为数值型; 2、方差分析,预测变量
  • 品检标准GB2828-2003

    2012-03-30 09:20:32
    4、产品的分类 注 1 :有下述四种通用的产品类别: —服务(如运输); —软件(如计算机程序); —硬件(如发动机机械零件); —流程性材料(特点是工序间连贯,程均匀性,如润滑油)。 许多产品由不同...
  • 人工抽样对实体发现结果进行检验,平均准确率达到80%左右,同时还将构建出的领域实体知识应用到文本分类中,结果显示,当训练集具有一定规模时,以实体为特征的分类模型的准确率较以词为特征分类模型的准确率有显著...
  • 使用独立t检验和卡方检验来检查异常脑电图与年龄和性别关联。 P值≤0.05被认为具有统计学意义。 结果:研究参与者平均年龄为52.98±22.68岁。 有54.5%(n = 240)男性。 约45.2%(n = 199)参与者患有...
  • 使用简单频率百分比分布分析描述性统计数据,并使用卡方检验完成分类变量与性别之间关联。 在p <0.05时接受显着性。 结果:研究发现,在研究人群中男性占76.0%,女性占24.0%。 对五类卫生保健提供者进行了...
  • 数据建模:基于cross_val_score交叉检验、基于LogisticRegression、RandomForest、Bagging概率投票组合模型做分类。 案例数据 以下是本数据集13个特征变量详细说明: order_id:订单ID,...
  • 根据联合国教科文组织对场地类型(自然、混合和文化)的分类,这些受访者被分为三个层次。 系统随机抽样用于根据受访者在总人口中的比例从每个阶层中选择受访者。 假设检验涉及结构方程模型 (SEM) 分析。 卡方/自由...
  • 鸽子学统计

    2021-05-16 23:35:32
    基础统计0 统计学目的和本质0.1 统计分析目的0.2 统计学本质1 描述统计1.1 变量测量尺度分类1.2 均值1.3 众数和中位数1.4 极差和标准差1.5 小结2 总体推断2.1 大数定律和中心极限定理2.2 抽样误差和标准误...
  • 一向分类:按某一种因素来进行的分类 二向分类(列联表):分类是按两种以上的影响因素来进行的  X2~ X2(k-1) 二、列联表分析 三、一致性检验 一致性X2检验与独立性X2检验之间是有差别的 在做独立性X2检验时...
  • 对TSA对货币存款银行盈利能力的影响进行深入分析,不仅可以弄清以前研究报告的分类结果,而且可以为DMB如何改善其流动性提供建议。 基于增量和利益相关者的理论,本研究考察了国库单一帐户(TSA)对尼日利亚存款...
  • 数据科学 6 参数估计与统计推断6.1 参数估计6.1.1 概念1、总体与样本2、分层抽样3、系统抽样 主要内容: 假设检验与单样本T检验 两样本T检验 方差分析(分类变量和连续变量关系检验) 相关分析(两连续变量关系检验) ...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

抽样检验的分类