statsmodel.api如何预测工作

时间:2018-06-21 10:46:04

标签: python binary statsmodels predict

我使用statsmodel拟合了一个逻辑模型,如下所示:

import statsmodels.api as sm

logit = sm.Logit(train1['resp'], train1[v])
result = logit.fit()
result.summary()

=================================================================================================
                                    coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------------------------
AGEINQ                           -0.0420      0.015     -2.782      0.005      -0.072      -0.012
BKROPN12                          0.1048      0.067      1.572      0.116      -0.026       0.236
SCRG001                          -0.1600      0.128     -1.251      0.211      -0.411       0.091
BKRATTH                           0.0037      0.002      1.947      0.051   -2.42e-05       0.007
HET1001_HE                       -0.5102      0.178     -2.866      0.004      -0.859      -0.161
SCRS009                           0.0167      0.010      1.614      0.107      -0.004       0.037
SCRPF33                       -2.874e-06    7.5e-07     -3.834      0.000   -4.34e-06    -1.4e-06
CINS99                           -0.0017      0.001     -2.872      0.004      -0.003      -0.001
SCRBI20                          -0.0158      0.002     -6.365      0.000      -0.021      -0.011
HMP2N24                          -0.1380      0.085     -1.629      0.103      -0.304       0.028
AGE                               0.0326      0.005      6.511      0.000       0.023       0.042
SUB_PRIME_BANKCARD_PROPENSITY    -0.0005      0.001     -1.019      0.308      -0.002       0.000
FINSCR                           -0.0043      0.000    -10.570      0.000      -0.005      -0.003
REVMOF                           -0.0007      0.000     -2.301      0.021      -0.001      -0.000

现在,我正在尝试对以下示例记录使用result.predict()进行预测:

  AGEINQ  BKROPN12  SCRG001  BKRATTH  HET1001_HE  SCRS009  SCRPF33  CINS99  \
      10         0        1       99           0        3   140000     380   

   SCRBI20  HMP2N24  AGE  SUB_PRIME_BANKCARD_PROPENSITY  FINSCR  REVMOF  
    160.0        0   45                            331     711     286  

产生的概​​率为:0.003365。但是,如果我使用手动方法: logit = sum(coeff * var)和prob = 1/1 + exp(-logit),然后得到prob:0.0000897386

statsmodel如何预测效果?

1 个答案:

答案 0 :(得分:1)

我不确定您在做什么错,我已经尝试了模拟数据,并且它可以按预期工作。我的API稍有不同(对我执行.summary()会导致错误,如此处https://github.com/statsmodels/statsmodels/issues/3931所述),因此可能存在某些版本不匹配的情况。请尝试以下方法是否为您提供相同的结果:

from statsmodels.api import Logit
import numpy as np
np.random.seed(0)
x = np.random.randn(15,4)
x2 = np.random.randn(10,4)
y = np.random.randint(0,2,15).astype(bool)
logit = Logit(y,x)
result = logit.fit()
print('Fitted parameters:', result.params)
# Returns [ 0.40596774 -0.09559817 -0.31366232 -0.38795499]
print('Prediction:', result.predict(x2))
# Returns [0.66510963 0.60879072 0.34253278 0.67262531 0.44466609 0.4727276
#          0.530712   0.29249711 0.40258415 0.41042116]
logit = x2.dot(result.params)
print('Manual prediction:', 1/(1+np.exp(-logit)))
# Returns [0.66510963 0.60879072 0.34253278 0.67262531 0.44466609 0.4727276
#          0.530712   0.29249711 0.40258415 0.41042116]