汇总数据并推导概率
介绍
毫无疑问,汇总数据是最常见的数据科学和分析任务之一。对于预测建模,您还需要了解概率的概念,它构成了许多机器学习算法(如逻辑回归)的基础。在本指南中,您将学习在 R 中汇总数据和推导概率的技术。
数据
在本指南中,您将使用一个虚构的贷款申请数据集,其中包含 600 个观测值和 9 个变量,如下所述:
- Marital_status:申请人是否已婚(“是”)或未婚(“否”)。 
- Is_graduate:申请人是否是毕业生(“是”)或不是(“否”)。 
- 收入:申请人的年收入(美元)。 
- Loan_amount:提交申请的贷款金额(以美元计)。 
- Credit_score:申请人的信用评分是良好(“满意”)还是不佳(“不满意”)。 
- 年龄:申请人的年龄。 
- 性别:申请人是女性(F)还是男性(M)。 
- authorization_status:贷款申请是否被批准(“是”)或未被批准(“否”)。 
- 投资:申请人申报的股票和共同基金投资(以美元计)。 
下面的代码行加载所需的库和数据。
      library(tidyverse)
library(readr)
library(dplyr)
library(e1071) 
library("ggplot2")
library("reshape2")
library("knitr")
dat <- read_csv("data.csv")
glimpse(dat)
    
输出:
      Observations: 600
Variables: 9
$ Marital_status  <chr> "Yes", "Yes", "No", "Yes", "Yes", "Yes", "Yes", "Yes",...
$ Is_graduate     <chr> "Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "Yes", ...
$ Income          <int> 30680, 70210, 55880, 53450, 46800, 41270, 25710, 15223...
$ Loan_amount     <int> 4350, 10400, 6650, 6450, 13500, 6300, 5550, 250000, 76...
$ Credit_score    <chr> "Satisfactory", "Satisfactory", "Satisfactory", "Satis...
$ approval_status <chr> "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"...
$ Age             <int> 76, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74...
$ Sex             <chr> "M", "M", "M", "M", "M", "M", "F", "M", "F", "M", "M",...
$ Investment      <dbl> 19942.0, 45636.5, 36322.0, 34742.5, 30420.0, 26825.5, ...
    
上面的输出显示五个变量是分类变量(标记为chr),其余四个变量是数字变量(标记为int)。您需要使用以下代码将字符变量转换为因子变量。
      dat$Marital_status = as.factor(dat$Marital_status)
dat$Is_graduate = as.factor(dat$Is_graduate)
dat$Credit_score = as.factor(dat$Credit_score)
dat$approval_status = as.factor(dat$approval_status)
dat$Sex = as.factor(dat$Sex)
glimpse(dat)
    
输出:
      Observations: 600
Variables: 9
$ Marital_status  <fct> Yes, Yes, No, Yes, Yes, Yes, Yes, Yes, No, No, Yes, Ye...
$ Is_graduate     <fct> Yes, Yes, Yes, Yes, Yes, No, No, Yes, Yes, Yes, Yes, N...
$ Income          <int> 30680, 70210, 55880, 53450, 46800, 41270, 25710, 15223...
$ Loan_amount     <int> 4350, 10400, 6650, 6450, 13500, 6300, 5550, 250000, 76...
$ Credit_score    <fct> Satisfactory, Satisfactory, Satisfactory, Satisfactory...
$ approval_status <fct> Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes,...
$ Age             <int> 76, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74...
$ Sex             <fct> M, M, M, M, M, M, F, M, F, M, M, M, F, F, F, M, M, M, ...
$ Investment      <dbl> 19942.0, 45636.5, 36322.0, 34742.5, 30420.0, 26825.5, ...
    
更改已完成,您已准备好总结和分析数据。
汇总单变量数据
作为数据科学家,您经常需要总结数据中的各个变量。最有效的方法之一是通过描述性统计,其中包括集中趋势度量和离散度量。集中趋势度量包括平均值、中位数和众数,而变异度量包括标准差、方差和四分位距 (IQR)。下面简要介绍其中一些度量。
- 平均值:数据的算术平均值 
- 中位数:变量的中间值,将数据分成两个相等的部分 
- 众数:变量中出现频率最高的值,也是唯一可以用于数值和分类变量的集中趋势测量 
- 标准差:量化一组数据值与平均值之间的差异量 
下面的代码行分别计算收入和贷款金额变量的平均值、中位数和标准差。
      # Income
print(mean(dat$Income))
print(median(dat$Income))
print(sd(dat$Income))
# Loan_amount
print(mean(dat$Income))
print(median(dat$Loan_amount))
print(sd(dat$Loan_amount))
    
输出:
      1] 70554.13
[1] 50835
[1] 71142.18
[1] 70554.13
[1] 7600
[1] 72429.35
    
上述代码计算平均值、中位数和标准差。要找到众数,请创建分类变量的频率表,如下面的代码所示。
      table(dat$Credit_score)
    
输出:
      Not _satisfactory      Satisfactory 
              128               472
    
输出显示变量Credit_score的众数为 472。这代表最常见标签Satisfactory的计数。
汇总多个变量
在上一节中,您使用描述性统计数据来汇总单变量。但是,您经常需要汇总多个变量。例如,您可能希望在一行代码中计算所有数值变量的平均值。这可以使用 sapply ()函数来完成,如下所示。
      sapply(dat[,c(3,4,7,9)], mean)
    
输出:
      Income   Loan_amount      Age   Investment 
   70554.13    32379.37       49.45    16106.70
    
另一种方法是使用summary()函数,它将打印所有变量的摘要统计信息。下面的代码行执行此操作。
      summary(dat)
    
输出:
      Marital_status Is_graduate     Income        Loan_amount    
 No :209        No :130     Min.   :  3000   Min.   :  1090  
 Yes:391        Yes:470     1st Qu.: 38498   1st Qu.:  6100  
                            Median : 50835   Median :  7600  
                            Mean   : 70554   Mean   : 32379  
                            3rd Qu.: 76610   3rd Qu.: 13025  
                            Max.   :844490   Max.   :778000  
            Credit_score approval_status      Age        Sex       Investment    
 Not _satisfactory:128   No :190         Min.   :22.00   F:111   Min.   :   600  
 Satisfactory     :472   Yes:410         1st Qu.:36.00   M:489   1st Qu.:  7940  
                                         Median :51.00           Median : 10674  
                                         Mean   :49.45           Mean   : 16107  
                                         3rd Qu.:61.00           3rd Qu.: 16872  
                                         Max.   :76.00           Max.   :346658
    
上述输出打印了所有变量的重要汇总统计数据,包括平均值、中位数(50%)、最小值和最大值。我们可以使用第一和第三四分位数来计算 IQR。
有时,您需要使用两个或多个类别的组合来了解统计数据。例如,您可能需要表示申请人性别和批准状态的数值变量的平均值。这可以使用以下代码完成。第一行代码使用aggregate ()函数创建一个表格,其中包含两个分类变量(Sex和approval_status )中所有数值变量的平均值。第二行代码打印输出。
      agg = aggregate(dat[,c(3,4,7,9)], by = list(dat$Sex, dat$approval_status), FUN = mean)
agg
    
输出:
      Group.1 Group.2   Income     Loan_amount      Age      Investment
   1       F      No     544824        228027       44.16    132583.8
   2       M      No     734543        353334      50.32     158825.1
   3       F     Yes    646274         256114       51.55    157135.4
   4       M     Yes     723086        335793       49.17     166090.2
    
从上表中可以得出一个有趣的推论:与贷款申请未获批准的女性申请人相比,贷款申请获批的女性申请人的收入、年龄和投资价值明显更高。这一推论对构建机器学习模型很有用。
可能性
简单来说,概率可以定义为某事件发生的可能性,用有利情况与可能情况总数的比率来衡量。例如,从一个装有 3 个红球和 7 个蓝球的盒子中随机抽取 1 个红球的概率为 0.3。这是通过将有利情况总数(本例中为 3)除以可能情况总数(10)得出的。
您可以应用这个简单的逻辑来计算数据中贷款批准的概率。下面第一行代码中的table()函数给出了批准(用标签“是”表示)和拒绝(用标签“否”表示)申请的频率分布。第二行代码使用上面解释的逻辑来计算贷款申请获得批准的概率。
      table(dat$approval_status)
410/(410+190)
    
输出:
      1] 0.6833333
    
您也可以使用以下代码执行上述步骤。
      prop.table(table(dat$approval_status))
    
输出:
      No       Yes 
0.3166667 0.6833333
    
条件概率
数据科学中一个重要的概率应用是计算条件概率。条件概率是当次要事件 B 已经发生时,事件 A 发生的概率。从数学上讲,它表示为 P(A | B),读作“给定 B 时 A 的概率”。
在此数据集中,您可能希望估算随机选择的申请在申请人年龄至少为 40 岁时获得批准的概率。这是条件概率的一个例子,可以使用以下代码计算。
      dat %>%
  summarize(prob = sum(Age >= 40 & approval_status == "Yes", na.rm = TRUE)/sum(Age >= 40, na.rm = TRUE))
    
输出:
      prob
   <dbl>
1  0.684
    
您可以看到概率为 0.68。这意味着,如果您从数据中随机选择一条记录,则申请人年龄至少为 40 岁且申请获得批准的概率为 68%。
您也可以对两个分类变量重复此操作。例如,您可能想估计在申请人的信用评分不令人满意的情况下随机选择的申请被批准的概率。下面的代码行将计算此概率。
      dat %>%
  summarize(prob = sum(Credit_score == "Not _satisfactory" & approval_status == "Yes", na.rm = TRUE)/sum(Credit_score == "Not _satisfactory", na.rm = TRUE))
    
输出:
      prob
   <dbl>
1  0.296875
    
上面的输出显示,即使信用评分不令人满意,贷款申请也会被批准的条件概率为 29.7%。这一见解可用于指导风险管理政策。
结论
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
 
                                 
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                     
                                 
                             
                                     
                                     
                                     
                                     
     
    
 
             
   
        
请先 登录后发表评论 ~