使用 Python 统计模型解释数据

发布日期:2026-07-19 09:16:04  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 09:16:04  
0

介绍

统计数据为数据中许多重要的潜在模式提供了答案。统计模型有助于简明扼要地总结和推断变量之间的关系。如果不了解这些关系,预测模型通常是不完整的。

在本指南中,读者将学习如何拟合和分析定量(线性回归)和定性(逻辑回归)目标变量的统计模型。我们将使用 Statsmodels进行统计建模。我们将首先导入我们将要使用的库。

加载所需的库和模块

      import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import statsmodels.api as sm
    

数据

线性回归数据

为了建立线性回归模型,我们将使用包含 600 个观测值和 10 个变量的贷款申请人的虚构数据。在这十个变量中,我们将使用以下六个变量:

  1. 受抚养人:申请人的受抚养人人数。

  2. Is_graduate:申请人是否是毕业生(“1”)或不是(“0”)。

  3. Loan_amount:提交申请的贷款金额(以美元计)。

  4. Term_months:贷款期限(以月为单位)。

  5. 年龄:申请人的年龄。

  6. 收入:申请人的年收入(美元)。这是因变量。

逻辑回归数据

为了建立逻辑回归模型,我们将使用包含 768 个观测值和 9 个变量的糖尿病数据集,如下所述:

  1. 怀孕:怀孕的次数。

  2. 葡萄糖:血浆葡萄糖浓度。

  3. diastolic:舒张压(mm Hg)。

  4. 三头肌:皮褶厚度(毫米)。

  5. 胰岛素:小时血清胰岛素(mu U/ml)。

  6. bmi:BMI(体重(公斤)/身高(米))。

  7. dpf:糖尿病谱系功能。

  8. 年龄:年龄(岁)。

  9. 糖尿病:'1' 表示患有糖尿病,而 '0' 表示没有患糖尿病。这是目标变量。

线性回归

线性回归模型是预测连续标签的模型。目标是根据我们选择的评估标准,生成一个代表某些观察到的数据的“最佳拟合”的模型。这方面的好例子是预测房价、零售店的销售额或个人的预期寿命。线性回归模型假设独立变量和因变量之间存在线性关系。

让我们从加载数据开始。第一行代码将数据读入为 pandas 数据框,而第二行打印数据的形状。第三行打印数据的前五个观察值。我们将尝试根据其他变量预测“收入”。

      # Load data
df = pd.read_csv("data_smodel.csv")
print(df.shape) 
df.head(5)
    

输出:

      (600, 10)

|   	| Marital_status 	| Dependents 	| Is_graduate 	| Income 	| Loan_amount 	| Term_months 	| Credit_score 	| approval_status 	| Age 	| Sex 	|
|---	|----------------	|------------	|-------------	|--------	|-------------	|-------------	|--------------	|-----------------	|-----	|-----	|
| 0 	| 0              	| 0          	| 0           	| 362700 	| 44500       	| 384         	| 0            	| 0               	| 55  	| 1   	|
| 1 	| 0              	| 3          	| 0           	| 244000 	| 70000       	| 384         	| 0            	| 0               	| 30  	| 1   	|
| 2 	| 1              	| 0          	| 0           	| 286500 	| 99000       	| 384         	| 0            	| 0               	| 32  	| 1   	|
| 3 	| 0              	| 0          	| 1           	| 285100 	| 55000       	| 384         	| 0            	| 0               	| 68  	| 1   	|
| 4 	| 0              	| 0          	| 1           	| 320000 	| 58000       	| 384         	| 0            	| 0               	| 53  	| 1   	|
    

线性回归 - 单变量

我们将从一个简单的线性回归模型开始,该模型只有一个协变量“Loan_amount”,预测“收入”。下面的代码行适合单变量线性回归模型并打印结果摘要。

      model_lin = sm.OLS.from_formula("Income ~ Loan_amount", data=df)
result_lin = model_lin.fit()
result_lin.summary()
    

输出:

      | Dep. Variable:    	| Income           	| R-squared:          	| 0.587     	|
|-------------------	|------------------	|---------------------	|-----------	|
| Model:            	| OLS              	| Adj. R-squared:     	| 0.587     	|
| Method:           	| Least Squares    	| F-statistic:        	| 851.4     	|
| Date:             	| Fri, 26 Jul 2019 	| Prob (F-statistic): 	| 4.60e-117 	|
| Time:             	| 22:02:50         	| Log-Likelihood:     	| -8670.3   	|
| No. Observations: 	| 600              	| AIC:                	| 1.734e+04 	|
| Df Residuals:     	| 598              	| BIC:                	| 1.735e+04 	|
| Df Model:         	| 1                	|                     	|           	|
| Covariance Type:  	| nonrobust        	|                     	|           	|


|         	| coef       	| std err      	| t      	| P>|t| 	| [0.025   	| 0.975]   	|
|-------------	|-----------	|----------	|--------	|-------	|----------	|----------	|
| Intercept   	| 4.618e+05 	| 2.05e+04 	| 22.576 	| 0.000 	| 4.22e+05 	| 5.02e+05 	|
| Loan_amount 	| 0.7528    	| 0.026    	| 29.180 	| 0.000 	| 0.702    	| 0.803    	|


| Omnibus:       	| 459.463 	| Durbin-Watson:    	| 1.955     	|
|----------------	|---------	|-------------------	|-----------	|
| Prob(Omnibus): 	| 0.000   	| Jarque-Bera (JB): 	| 10171.070 	|
| Skew:          	| 3.186   	| Prob(JB):         	| 0.00      	|
| Kurtosis:      	| 22.137  	| Cond. No.         	| 8.69e+05  	|
    

模型系数和 P 值的解释

输出的中间部分(标题以coef开头)对于模型解释很重要。拟合模型意味着,当比较两个“贷款金额”相差一个单位的申请人时,贷款金额较高的申请人的“收入”平均会高出 0.75 个单位。这个差异具有统计学意义,因为标有 ***P>|t|*** 的列下显示的 p 值小于显著性值 0.05。这意味着有强有力的证据表明变量“收入”和“贷款金额”之间存在线性关联。

R 平方值的解释

测试模型有效性的另一个参数是R 平方值,它表示由独立变量(贷款金额)解释的因变量(收入)的百分比变化。值越高,模型的可解释性越好,最高值为 1。在我们的例子中,R 平方值为 0.587,意味着变量“收入”的 59% 变化由变量“贷款金额”解释。

相关系数的解释

皮尔逊相关系数也是衡量两个变量之间线性关系程度和强度的指标。下面的代码行计算并打印相关系数,结果为 0.766。这是两个变量之间的强正相关性,最高值为 1。

      cc = df[["Income", "Loan_amount"]].corr()
print(cc)
    

输出:

      Income  Loan_amount
    Income       1.00000      0.76644
    Loan_amount  0.76644      1.00000
    

线性回归 - 多元

在上一节中,我们介绍了使用一个变量的简单线性回归。然而,在现实世界中,我们将处理多个变量。这称为多元回归。在我们的例子中,我们将使用五个独立变量构建多元统计模型。

下面的代码行适合多元线性回归模型并打印结果摘要。需要注意的是,语法Income ~ Loan_amount + Age + Term_months + Dependents + Is_graduate并不意味着这五个变量实际上是相加的。相反,它只意味着这些变量被纳入模型作为变量“收入”的预测因子。

      model_lin = sm.OLS.from_formula("Income ~ Loan_amount + Age + Term_months +  Dependents + Is_graduate", data=df)
result_lin = model_lin.fit()
result_lin.summary()
    

输出:

      | Dep. Variable:    	| Income           	| R-squared:          	| 0.595     	|
|-------------------	|------------------	|---------------------	|-----------	|
| Model:            	| OLS              	| Adj. R-squared:     	| 0.592     	|
| Method:           	| Least Squares    	| F-statistic:        	| 174.7     	|
| Date:             	| Fri, 26 Jul 2019 	| Prob (F-statistic): 	| 3.95e-114 	|
| Time:             	| 22:04:27         	| Log-Likelihood:     	| -8664.6   	|
| No. Observations: 	| 600              	| AIC:                	| 1.734e+04 	|
| Df Residuals:     	| 594              	| BIC:                	| 1.737e+04 	|
| Df Model:         	| 5                	|                     	|           	|
| Covariance Type:  	| nonrobust        	|                     	|           	|


|         	| coef       	| std err      	| t      	| P>|t| 	| [0.025    	| 0.975]   	|
|-------------	|-----------	|----------	|--------	|-------	|-----------	|----------	|
| Intercept   	| 2.68e+05  	| 1.32e+05 	| 2.029  	| 0.043 	| 8575.090  	| 5.27e+05 	|
| Loan_amount 	| 0.7489    	| 0.026    	| 28.567 	| 0.000 	| 0.697     	| 0.800    	|
| Age         	| -856.1704 	| 1265.989 	| -0.676 	| 0.499 	| -3342.530 	| 1630.189 	|
| Term_months 	| 338.6069  	| 295.449  	| 1.146  	| 0.252 	| -241.644  	| 918.858  	|
| Dependents  	| 8437.9050 	| 1.84e+04 	| 0.460  	| 0.646 	| -2.76e+04 	| 4.45e+04 	|
| Is_graduate 	| 1.365e+05 	| 4.56e+04 	| 2.995  	| 0.003 	| 4.7e+04   	| 2.26e+05 	|

| Omnibus:       	| 460.035 	| Durbin-Watson:    	| 1.998     	|
|----------------	|---------	|-------------------	|-----------	|
| Prob(Omnibus): 	| 0.000   	| Jarque-Bera (JB): 	| 10641.667 	|
| Skew:          	| 3.173   	| Prob(JB):         	| 0.00      	|
| Kurtosis:      	| 22.631  	| Cond. No.         	| 5.66e+06  	|
    

模型系数和 P 值的解释

上面的输出表明,当其他变量保持不变时,如果我们比较两个“贷款金额”相差一个单位的申请人,则“贷款金额”较高的申请人的“收入”平均会高出 0.75 个单位。

利用P>|t|结果,我们可以推断变量“Loan_amount”和“Is_graduate”是两个具有统计意义的变量,因为它们的 p 值小于 0.05。

每当分类变量在回归模型中用作协变量时,该变量的一个水平将被省略,并自动赋予零系数。这个水平称为协变量的参考水平。在上面的模型中,“Is_graduate”是一个分类变量,回归输出中只包含“Graduate”申请人的系数,而“Not Graduate”是参考水平。

R 平方值的解释

R平方值从 0.587 略微增加到 0.595,这意味着现在“收入”变化的 59.5% 由五个独立变量解释,而之前为 58.7%。略微增加可能是因为纳入了同样具有统计意义的“Is_graduate”变量。

逻辑回归

逻辑回归是一种用于分类问题的广义线性模型。其目标是预测分类结果,例如预测客户是否会流失,或者银行贷款是否会违约。

在本指南中,我们将构建统计模型来预测二元结果,即只能采用两个不同值的结果。让我们从加载数据开始。第一行代码将数据读入为 pandas 数据框,而第二行打印数据的形状。第三行打印前五个观察值。我们将尝试根据其他变量预测“糖尿病”。

      df2 = pd.read_csv("diabetes.csv")
print(df2.shape)
df2.head(5)
    

输出:

      (768, 9)

|   	| pregnancies 	| glucose 	| diastolic 	| triceps 	| insulin 	| bmi  	| dpf   	| age 	| diabetes 	|
|---	|-------------	|---------	|-----------	|---------	|---------	|------	|-------	|-----	|----------	|
| 0 	| 6           	| 148     	| 72        	| 35      	| 0       	| 33.6 	| 0.627 	| 50  	| 1        	|
| 1 	| 1           	| 85      	| 66        	| 29      	| 0       	| 26.6 	| 0.351 	| 31  	| 0        	|
| 2 	| 8           	| 183     	| 64        	| 0       	| 0       	| 23.3 	| 0.672 	| 32  	| 1        	|
| 3 	| 1           	| 89      	| 66        	| 23      	| 94      	| 28.1 	| 0.167 	| 21  	| 0        	|
| 4 	| 0           	| 137     	| 40        	| 35      	| 168     	| 43.1 	| 2.288 	| 33  	| 1        	|
    

逻辑回归 - 单变量

我们将从只有一个协变量“年龄”的基本逻辑回归模型开始,预测“糖尿病”。下面的代码行适合单变量逻辑回归模型并打印结果摘要。

      model = sm.GLM.from_formula("diabetes ~ age", family=sm.families.Binomial(), data=df2)
result = model.fit()
result.summary()
    

输出:

      | Dep. Variable:  	| diabetes         	| No. Observations: 	| 768     	|
|-----------------	|------------------	|-------------------	|---------	|
| Model:          	| GLM              	| Df Residuals:     	| 766     	|
| Model Family:   	| Binomial         	| Df Model:         	| 1       	|
| Link Function:  	| logit            	| Scale:            	| 1.0     	|
| Method:         	| IRLS             	| Log-Likelihood:   	| -475.36 	|
| Date:           	| Fri, 26 Jul 2019 	| Deviance:         	| 950.72  	|
| Time:           	| 22:08:35         	| Pearson chi2:     	| 761.    	|
| No. Iterations: 	| 4                	|                   	|         	|


|       	| coef     	| stderr   	| z      	| P>|z| 	| [0.025 	| 0.975] 	|
|-----------	|---------	|-------	|--------	|-------	|--------	|--------	|
| Intercept 	| -2.0475 	| 0.239 	| -8.572 	| 0.000 	| -2.516 	| -1.579 	|
| age       	| 0.0420  	| 0.007 	| 6.380  	| 0.000 	| 0.029  	| 0.055  	|
    

使用上面的<fon

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据