由于“完美分离错误”,无法运行逻辑回归

2023-12-28

我是 Python 数据分析的初学者,并且在完成这项特定任务时遇到了麻烦。我进行了广泛的搜索,但无法找出问题所在。

我导入了一个文件并将其设置为数据框。清理了文件中的数据。然而,当我尝试将我的模型拟合到数据时,我得到了

检测到完美分离,结果不可用

这是代码:

from scipy import stats
import numpy as np
import pandas as pd 
import collections
import matplotlib.pyplot as plt
import statsmodels.api as sm

loansData = pd.read_csv('https://spark-   public.s3.amazonaws.com/dataanalysis/loansData.csv')

loansData = loansData.to_csv('loansData_clean.csv', header=True, index=False)

## cleaning the file
loansData['Interest.Rate'] = loansData['Interest.Rate'].map(lambda x:  round(float(x.rstrip('%')) / 100, 4))
loanlength = loansData['Loan.Length'].map(lambda x: x.strip('months'))
loansData['FICO.Range'] = loansData['FICO.Range'].map(lambda x: x.split('-'))
loansData['FICO.Range'] = loansData['FICO.Range'].map(lambda x: int(x[0]))
loansData['FICO.Score'] = loansData['FICO.Range']

#add interest rate less than column and populate
## we only care about interest rates less than 12%
loansData['IR_TF'] = pd.Series('', index=loansData.index)
loansData['IR_TF'] = loansData['Interest.Rate'].map(lambda x: True if x < 12 else False)

#create intercept column
loansData['Intercept'] = pd.Series(1.0, index=loansData.index)

# create list of ind var col names
ind_vars = ['FICO.Score', 'Amount.Requested', 'Intercept'] 

#define logistic regression
logit = sm.Logit(loansData['IR_TF'], loansData[ind_vars])

#fit the model
result = logit.fit()

#get fitted coef
coeff = result.params

print coeff

任何帮助将非常感激!

Thx, A


你有PerfectSeparationError因为你的贷款数据['IR_TF']只有一个值True(或 1)。您首先将利率从 % 转换为小数,因此您应该将 IR_TF 定义为

loansData['IR_TF'] = loansData['Interest.Rate'] < 0.12 #not 12, and you don't need .map 

然后你的回归将成功运行:

Optimization terminated successfully.
         Current function value: 0.319503
         Iterations 8
FICO.Score           0.087423
Amount.Requested    -0.000174
Intercept          -60.125045
dtype: float64

另外,我注意到各个地方都可以变得更容易阅读和/或获得一些性能改进,特别是.map可能不如矢量化计算快。以下是我的建议:

from scipy import stats
import numpy as np
import pandas as pd 
import collections
import matplotlib.pyplot as plt
import statsmodels.api as sm

loansData = pd.read_csv('https://spark-public.s3.amazonaws.com/dataanalysis/loansData.csv')

## cleaning the file
loansData['Interest.Rate'] = loansData['Interest.Rate'].str.rstrip('%').astype(float).round(2) / 100.0

loanlength = loansData['Loan.Length'].str.strip('months')#.astype(int)  --> loanlength not used below

loansData['FICO.Score'] = loansData['FICO.Range'].str.split('-', expand=True)[0].astype(int)

#add interest rate less than column and populate
## we only care about interest rates less than 12%
loansData['IR_TF'] = loansData['Interest.Rate'] < 0.12

#create intercept column
loansData['Intercept'] = 1.0

# create list of ind var col names
ind_vars = ['FICO.Score', 'Amount.Requested', 'Intercept'] 

#define logistic regression
logit = sm.Logit(loansData['IR_TF'], loansData[ind_vars])

#fit the model
result = logit.fit()

#get fitted coef
coeff = result.params

#print coeff
print result.summary() #result has more information


Logit Regression Results                           
==============================================================================
Dep. Variable:                  IR_TF   No. Observations:                 2500
Model:                          Logit   Df Residuals:                     2497
Method:                           MLE   Df Model:                            2
Date:                Thu, 07 Jan 2016   Pseudo R-squ.:                  0.5243
Time:                        23:15:54   Log-Likelihood:                -798.76
converged:                       True   LL-Null:                       -1679.2
                                        LLR p-value:                     0.000
====================================================================================
                       coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------------
FICO.Score           0.0874      0.004     24.779      0.000         0.081     0.094
Amount.Requested    -0.0002    1.1e-05    -15.815      0.000        -0.000    -0.000
Intercept          -60.1250      2.420    -24.840      0.000       -64.869   -55.381
====================================================================================

对了——这是P2P借贷数据吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于“完美分离错误”,无法运行逻辑回归 的相关文章

随机推荐

  • 从复选框列表中删除项目

    这是主要形式
  • IOError: [Errno 2] 没有这样的文件或目录: 'README.md'

    当我尝试使用 pip 安装omnature 时 收到以下错误 IOError Errno 2 No such file or directory README md 我基本上是在尝试连接到 Adob e Analytics API 有人能帮
  • Ruby:是否可以设置通过字符串命名的实例变量的值?

    不确定这种模式叫什么 但场景如下 class Some this class has instance variables called thing 1 thing 2 etc end 有没有什么方法可以设置实例变量的值 其中实例变量名称是
  • 是否可以在 iOS 上发送 SILENT LOCAL 通知

    My app wakes up从暂停模式开始静音遥控器来自服务器的通知 正是我想要的 该服务器发送带有 的推送通知 内容可用 1 它完成了这项工作 现在我想在没有服务器帮助的情况下执行此操作 所以我想发送本地无声通知 来自应用程序 将来的某
  • 将值从 MSBuild 任务传递到 TFS 构建工作流程

    有许多示例和方法可以将属性值从 TFS 2010 构建工作流传递到 MSBuild 但我需要执行相反的操作 基本上 在构建盒上编写了自定义目标文件 以对盒上运行的所有构建进行一些处理 这些目标文件中包含自定义任务 其中一些任务公开返回值 或
  • 尝试在 rake 任务中启动 redis 和 resque 调度程序

    我想从 rake 任务启动 redis 和 redis scheduler 所以我正在执行以下操作 namespace raketask do task start do system QUEUE rake resque work syst
  • 在 Unix 中的邮件中附加 2 个以上文件

    我有很多文件需要附加并通过电子邮件发送 我正在运行脚本来执行此操作 你能帮我写代码吗 您可以使用选项 a of mailx多次 例如 mailx s Few files attached a file1 txt a file2 txt em
  • IE 中的 window.location 问题

    我有这个简单的代码 可以在每个浏览器中正常工作 但不能在 IE 每个版本 中工作 window setTimeout window location http www domain modules yobilab copyright cla
  • 在 iOS 应用程序中使用现有的系统声音 [swift|

    是否可以在我自己的应用程序中使用现有的Apple系统声音 我想用 Swift 编写一个示例应用程序 执行以下步骤 读取 获取设备上所有可用系统声音的列表 我认为它们位于 System Library Audio UISounds 在屏幕上显
  • 宏定义冲突

    我遇到了这个问题 这与宏函数无关 只是简单的字符串值宏替换 我有两个头文件 test1 h define TEST 123 test2 h define TEST 456 现在我有一个程序包含这两个标头 但我希望我的实际 TEST 为 12
  • 将雪(和降雪)与 AWS 结合使用,在 R 中进行并行处理

    相对于我之前的类似的问题 https stackoverflow com questions 7241244 using aws for parallel processing with r 我尝试在AWS上使用snow snowfall进
  • .NET 4.5 中的序列化中断

    我们遇到了一个仅在 NET 4 5 中发生的序列化问题 相同的代码在 NET 4 中工作正常 我们正在尝试使用一些字段序列化继承类型 基类和继承类都标记为可序列化属性 我们在 Web 服务的客户端收到一个异常 说有一个方法访问异常在服务器端
  • 用于模糊字符串比较的好 Python 模块? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • Wagtail:如何将模型实例传递给小部件并在模板中访问它

    我有一个基于 Wagtails 的模型Page模型 我正在将自定义小部件分配给模型字段之一 渲染管理视图时是否可以在小部件 HTML 模板中访问模型实例 我需要管理视图中的小部件来知道哪个 IDSimplePage该小部件所属 即获取值 p
  • OSX Mavericks - 不再安装 BIND...如何使本地 DNS 服务器正常工作?

    我一直在 OSX 上使用 BIND 为我的本地开发机器提供本地 DNS 解析器 特别是为了方便虚拟机访问我的本地开发环境 愚蠢的是 我决定连夜升级到 OSX Mavericks 但似乎不再安装 BIND 即使添加了命令行开发人员工具 有人建
  • clang 尝试捕获失败

    这是我所说的代码部分 try std cerr lt lt first try lt lt std endl po store po parse config file ifs configFileOptions false vm catc
  • 从两个向量创建新的 ID(双向)

    我在一个由因子组成的数据框中有两个向量 每个向量中有约 10000 个唯一因子 这是我的数据的简化示例 tg lt data frame A sample letters 1 5 30 replace TRUE B sample lette
  • Pandas 数据框 to_csv - 分成多个输出文件

    将非常大的数据帧 50GB 分割成多个输出 水平 的最佳 最简单方法是什么 我想过做类似的事情 stepsize int 1e8 for id i in enumerate range 0 df size stepsize start i
  • 如何在 JasperReports Server 4.0.0 中配置邮件服务器设置

    我在用着JasperReports服务器4 0 0我想如何配置邮件服务器设置以通过报告计划邮寄报告 我怎样才能做到这一点 有人知道这个吗 您应该编辑
  • 由于“完美分离错误”,无法运行逻辑回归

    我是 Python 数据分析的初学者 并且在完成这项特定任务时遇到了麻烦 我进行了广泛的搜索 但无法找出问题所在 我导入了一个文件并将其设置为数据框 清理了文件中的数据 然而 当我尝试将我的模型拟合到数据时 我得到了 检测到完美分离 结果不