首页 > 其他分享 >逻辑回归自己尝试

逻辑回归自己尝试

时间:2023-12-09 14:46:23浏览次数:46  
标签:尝试 逻辑 log 回归 scores X2 X1 col math

自己逻辑回归尝试
1、固定好坏样本,随机种子
先去看分箱情况
data_sd = X1
num_cols=X1.columns
import pycard as pc

num_iv_woedf = pd.DataFrame()

clf = pc.NumBin(max_bins_num=7,min_bin_samples=400)

for i in num_cols:

if data_sd[i].isnull().sum()/len(data_sd)<1:

    clf.fit(data_sd[i] ,data_sd.target)

    num_iv_woedf = num_iv_woedf.append(clf.woe_df_)

import statsmodels.api as sm#逻辑回归另外一个包
x_train,x_test,y_train,y_test=train_test_split(final_data.iloc[:,:-1],final_data['target'],test_size=0.3,stratify=final_data['target'])
X1=sm.add_constant(x_train)
X2=sm.add_constant(x_test)
logit=sm.Logit(y_train.astype(float),X1.astype(float))
result=logit.fit()
result.summary()
result.params#系数全正或全负
import math
import math
p = 50 / math.log(2) #factor = 20 / np.log(2)
q = 600 + 50 * math.log(0.1) / math.log(2)
p1=result.predict(X1)
p2=result.predict(X2)
p1=pd.DataFrame(p1)
p1.columns=['分数']
p1['分数']=p1['分数'].apply(lambda x:q-p*math.log(x/(1-x)))
xlj=toad.metrics.KS_bucket(p1['分数'],Y1,bucket=8, method = 'quantile')
xlj[['min','max','bads','goods','total','bad_rate','good_rate','ks','lift']]

p2=pd.DataFrame(p2)
p2.columns=['分数']
p2['分数']=p2['分数'].apply(lambda x:q-p*math.log(x/(1-x)))
csj=toad.metrics.KS_bucket(p2['分数'],Y2,
bucket=8, method = 'quantile')
csj[['min','max','bads','goods','total','bad_rate','good_rate','ks','lift']]

toad.metrics.PSI(p1['分数'],p2['分数'])

第二种办法
import math
coe=[-2.0111,
0.1151,
0.3572,
0.3207,
0.1028,
1.2132,
0.5397,
0.1861,
0.4674,
0.5649,
0.7729,
0.6253,
0.8328]

我们取600分为基础分值,PDO为20(每高20分好坏比翻一倍),好坏比取20。

p = 20 / math.log(2) #factor = 20 / np.log(2)
q = 600 + 20 * math.log(0.1) / math.log(2) #
baseScore = round(q - p * coe[0], 0) #b=offset+factor*log(o)
print(p,q,baseScore)

model_col=[ '华道_申请机构数',
'华道_互金类金融机构平均授信额度',
'中智诚_D90_手机号码__总申请机构数',
'中智诚_D540_身份证号码_银行类_申请数',
'中智诚_D720_身份证号码_银行类_申请机构数',
'中智诚_D720_手机号码_总申请机构数',
'度小满_早逾_小贷近360天查询机构数',
'度小满_早逾_小贷近1080天查询机构数',
'新颜_申请雷达_查询网络贷款类机构数',
'UPPA010',
'UPPB014',
'UPPC224']

前面已经有了

def get_score(coe,woe,factor):
scores=[]
for w in woe:
score=round(coewfactor,0)
scores.append(score)
return scores

各项部分分数

model_col
for i in range(1,13):
X1[model_col[i-1]+'_scores']=get_score(coe[i], X1[model_col[i-1]], p)

scores_col = [ i for i in X1.columns if i[-7:]=='_scores']
X1['fenshu'] = X1[scores_col].sum(axis=1)
X1['fenshu'] = baseScore-X1['fenshu']

model_col=[ '华道_申请机构数',
'华道_互金类金融机构平均授信额度',
'中智诚_D90_手机号码__总申请机构数',
'中智诚_D540_身份证号码_银行类_申请数',
'中智诚_D720_身份证号码_银行类_申请机构数',
'中智诚_D720_手机号码_总申请机构数',
'度小满_早逾_小贷近360天查询机构数',
'度小满_早逾_小贷近1080天查询机构数',
'新颜_申请雷达_查询网络贷款类机构数',
'UPPA010',
'UPPB014',
'UPPC224']

前面已经有了

def get_score(coe,woe,factor):
scores=[]
for w in woe:
score=round(coewfactor,0)
scores.append(score)
return scores

各项部分分数

model_col
for i in range(1,13):
X2[model_col[i-1]+'_scores']=get_score(coe[i], X2[model_col[i-1]], p)

scores_col = [ i for i in X2.columns if i[-7:]=='_scores']
X2['fenshu'] = X2[scores_col].sum(axis=1)
X2['fenshu'] = baseScore-X2['fenshu']
gg=pd.DataFrame(X2['fenshu'])
gg=gg.reset_index()
gg=gg.merge(pd.DataFrame(Y2).reset_index(),on = 'index',how='left')
import toad
toad.metrics.KS_bucket(gg['fenshu'],gg['target'], bucket=10, method = 'quantile')

评分卡
dpd1 = pd.DataFrame()
for i in col:
dd=ZT.drop_duplicates(subset=[i])[[i,i+'_scores']]
dd.columns=['区间','分数']
dd['变量']=i
dpd1 = dpd1.append(dd)

标签:尝试,逻辑,log,回归,scores,X2,X1,col,math
From: https://www.cnblogs.com/chenqianguan/p/17890929.html

相关文章

  • 逻辑回归思路
    整体建模思路1、拿到样本先分训练集和测试集,0.7或0.8,根据样本数量考虑是否增加验证集,本次不增加验证集。2、对训练集样本进行初筛。iv大于0.01,相关系数低于80%,缺失率根据变量中文名无特殊情况,不得高于80%。3、对训练集先用决策树分6-8箱。此时对变量进行二次筛选。主要考虑变量......
  • 逻辑回归
    2、逻辑回归2.1常规但是要考虑样本均衡问题importmatplotlib.pyplotaspltx=z.iloc[:,0:7]y=z.iloc[:,7:]fromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportclassification_report......
  • 机器学习-线性回归-最大似然估计求解-解析解-01
    最大似然估计已经从某一分布中获取到n个样本并且假设改样本的分布服从某一个分布f(θ),θ为需要估计的参数,根据这n个样本去推导θ的值就叫做最大似然估计,假设样本服从某分布,根据样本计算出分布中的参数,参数计算出之后,就能去进行预测,正态分布概率密度:假设样本的误差服从正......
  • R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
    全文链接:https://tecdat.cn/?p=34506原文出处:拓端数据部落公众号信用风险建模是金融领域的重要课题,通过建立合理的信用风险模型,可以帮助金融机构更好地评估借款人的信用状况,从而有效降低信贷风险。本文使用了R语言中的逻辑回归(logistic)模型,利用国泰安数据库中的103个上市公司......
  • 处理回归 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/process/handling-regressions.html#处理回归我们不会引起回归-本文描述了对开发人员来说,“Linux内核开发的第一法则”在实践中意味着什么。它是对报告回归的补充,该报告从用户的角度涵盖了这个主题;如果你从未阅读过那篇文章,至少在继续......
  • [WUSTCTF 2020](病假回归)
    [WUSTCTF2020]level1下载下来后有俩文件,先看level1查壳,无壳64位,拖入IDA中看到其中的i&1,为按位与运算,取2进制整数i的最低位,如果最低位是1则得1,如果最低位是0则得0。奇数i的最低位是1,偶数i的最低位是0。再看到output文件,里面有198,232,816,200,1536,300,6144,984,5......
  • CSP-J2022逻辑表达式(expr)
    #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=1e6;structnode{   charv;   intl,r;};vector<node>g(MAXN);intbuild_tree(stringsl){   intlast=1;   stack<int>st;   for(inti=0;i<......
  • 从根上理解elasticsearch(lucene)查询原理(1)-lucece查询逻辑介绍
    大家好,我是蓝胖子,最近在做一些elasticsearch慢查询优化的事情,通常用分析elasticsearch慢查询的时候可以通过profileapi去分析,分析结果显示的底层lucene在搜索过程中使用到的函数调用。所以要想彻底弄懂elasticsearch慢查询的原因,还必须将lucene的查询原理搞懂,今天我们就先来介......
  • 数学建模回归分析part2
    回归系数的解释思考:y=b+b1*Inx;此时b1怎么解释?什么时候取对数经验法则:(1)与市场价值相关的,例如,价格、销售额、工资等都可以取对数;(2)以年度量的变量,如受教育年限、工作经历等通常不取对数;(3)比例变量,如失业率、参与率等,两者均可;(4)变量取值必须是非负数,如果包含0,则可以对y......
  • 汇编-逻辑运算指令
     xor异或               or逻辑或                 and逻辑与not非                 TEST逻辑与        ......