def id_shenfen(self, id_no): id_yinshe = lujings().id_yinshe() id_city = lujings().id_city() ids = id_no[0:4] city = list(id_yinshe[id_yinshe['ID_4_digit'] == int(ids)]['City'])[0] ##print(city) idss = list(id_city[id_city['id_city'] == city]['ids'])[0] return idss
def datas(self, results_dicts): ###xgb的输出 # results_dicts['id_city'] = 'M_B' #results_dicts = self.join() df_all = pd.DataFrame([results_dicts], dtype='float') #print('pppppppppppppppp',df_all) df_all['frg_group_num'] = df_all['frg_group_num'].apply( lambda x: 1 if x == 'a' else (2 if x == 'b' else (3 if x == 'c' else (4 if x == 'd' else 4)))) #print('qqqqqqqqqqq',df_all['frg_group_num']) #df_all['id_city'] = 1 df_all['ir_id_x_cell_notmat_days'] = 0 df_all['a86'] = -999 df_all['b14'] = -999 df_all['b2'] = -999 df_all['b26'] = -999 df_all['d40'] = -999 df_all['b20'] = -999 df_all['d15'] = -999 # xgb = lujins.xgb() # feature = lujins.feature() #print('wwwwwwwwwwwwwwwwwwwwwww',list(df_all.columns)) feature = lujings().feature() td_in = [x for x in feature if x not in list(df_all.columns)] #print('ttttttttttttttttttttttttttttttttttttttttttt', td_in) for ff in td_in: df_all[ff] = -99 #print('eeeeeeeeeeeeeeee', df_all[feature]) xgb = lujings().xgb() p = xgb.predict_proba(df_all[feature])[:, 1] s = (0.1 / 0.9) / (0.05 / 0.95) p_1 = 1 / (1 + s * np.exp(-np.log(p / (1 - p)))) score = 652 - 95 * np.log((p_1 / (1 - p_1)) / (0.05 / 0.95)) if score < 300: score = 300 elif score > 1000: score = 1000 else: score = score return score
def join(self): cell_province = lujings().cell_province() cell_province['cell_province'] = cell_province[ 'cell_province'].str.strip() province = list(self.cellphone['cell_province'])[0] #print('111111', province) cell_city = lujings().cell_city()[['cell_city', 'ids']] cell_city['cell_city'] = cell_city['cell_city'].str.strip() city = list(self.cellphone['cell_city'])[0] #print('222222', city) self.data['cell_province'] = list(cell_province[ cell_province['cell_province'] == province]['ids'])[0] #print('333333333333333333', cell_province[cell_province['cell_province'] == province]['ids']) # #print('qqqqqq',results_dicts) self.data['cell_city'] = list( (cell_city[cell_city['cell_city'] == city]['ids']))[0] self.data.update(self.dict_sex) #print('dddddddddddddddddddddddd', self.data) return self.data
import json import pandas as pd from django.shortcuts import render, HttpResponse from akamx.bairong import Bairong import json from bs4 import BeautifulSoup import requests from akamx.lujing import lujings from akamx.tongdun import Tongdun from akamx.ir import Score from rest_framework.response import Response from akamx.bairongcelv import Strategy from akamx.pboccl import People from akamx.models import jsonss score = Score() lujins = lujings() www = lujins.shenfen() import logging logger = logging.getLogger('django') class akmoxing: ##print("kaishi") # 定义请求方法为post, def gets(self, parameter): a = time.clock() # logger.info("开始时间{a}".format(a=a)) # parameter_json = request.body # # # json转字典
class Score: def __init__(self): self.col = [ "woe_als_m12_id_nbank_orgnum", "woe_cell_city_ec_level", "woe_i_max_cnt_partner_daily_Loan_finance_365day", "woe_i_get_node_rank_value_Loan_all_all", "woe_融资金额", 'woe_age_frg', "woe_ir_m6_cell_x_linkman_cell_cnt", "woe_sl_gender", "woe_cell_province", 'woe_cell_city', "flagy" ] # diqu = lujings().diqu() # theProv1 = diqu['theProv1'] theProv2 = diqu['theProv2'] theProv3 = diqu['theProv3'] theProv4 = diqu['theProv4'] theCity1 = diqu['theCity1'] theCity2 = diqu['theCity2'] theCity3 = diqu['theCity3'] # theProv1 = {'上海', '江西', '湖北', '河北', 'M_B'} # theProv2 = {'广东', '湖南', '重庆', '浙江', '内蒙古', '河南', '山东', '天津', '黑龙江'} # theProv3 = {'贵州', '青海', '陕西', '山西', '四川', '辽宁', '福建', '新疆', '广西', '江苏', '西藏'} # theProv4 = {'云南', '甘肃', '安徽', '海南', '宁夏', '北京', '吉林'} # # theCity1 = {'莆田', '衡水', '烟台', '吉安', '承德', '秦皇岛', '南充', '永州', '宁波', '龙岩', '开封', # '万州', '邵阳', '邯郸', '赤峰', '奎屯', '临沂', '淮安', '威海', '三门峡', 'M_B', '乌海', '湘潭', '赣州', # '玉树', '大庆', '连云港', '韶关', '清远', '九江', '咸宁', '江门', '日照', '衢州', '安阳', '泰州', '甘孜', # '抚顺', '揭阳', '钦州', '松原', '通化', '贺州', '阿坝'} # # theCity2 = {'潍坊', '深圳', '东莞', '乐山', '南宁', '武汉', '盘锦', '临汾', '成都', '兴义', '岳阳', '廊坊', # '惠州', '常德', '崇左', '厦门', '荆州', '包头', '沧州', '青岛', '柳州', '大连', '苏州', '海西', '南通', '襄阳', # '桂林', '广安', '邢台', '驻马店', '台州', '绍兴', '渭南', '金华', '德州', '娄底', '阿拉善盟', '湘西', '眉山', # '鸡西', '枣庄', '无锡', '凯里', '保定', '海南', '武威', '亳州', '白城', '莱芜', '泰安', '盐城', '吐鲁番', '营口', # '汕尾', '海北', '茂名', '阳江', '博乐', '仙桃', '克拉玛依', '海拉尔', '云浮', '珲春', '鹰潭', '黑河', '西昌', '延边'} # # theCity3 = {'重庆', '宝鸡', '丽水', '北京', '昆明', '萍乡', '宜宾', '平凉', '天津', '曲靖', '漳州', '西安', '遵义', # '泸州', '太原', '铜仁', '定西', '忻州', '锡林浩特', '巴中', '石家庄', '延安', '嘉兴', '恩施', '广元', '达州', '白银', # '银川', '海口', '许昌', '庆阳', '酒泉', '内江', '西双版纳', '吉首', '广州', '凉山', '吕梁', '西宁', '长治', '陇南', # '天水', '玉溪', '株洲', '淮南', '济南', '大同', '洛阳', '汕头', '温州', '文山', '南京', '济宁', '珠海', '南阳', '果洛', # '张掖', '咸阳', '格尔木', '唐山', '晋城', '大理', '红河', '阜阳', '海东', '保山', '宜昌', '镇江', '贵阳', '楚雄', '固原', # '合肥', '绵阳', '泉州', '巴彦淖尔', '贵港', '菏泽', '佛山', '杭州', '兰州', '郑州', '上海', '上饶', '阿克苏', '益阳', '石河子', # '嘉峪关', '汉中', '景德镇', '运城', '郴州', '毕节', '涪陵', '芜湖', '丽江', '玉林', '六安', '乌鲁木齐', '安顺', '临沧', '聊城', # '扬州', '中卫', '六盘水', '福州', '长沙', '葫芦岛', '三明', '共和', '怀化', '黔江', '信阳', '淄博', '迪庆', '晋中', '中山', # '吴忠', '乌兰察布', '沈阳', '昭通', '张家口', '都匀', '徐州', '新乡', '金昌', '黄南', '通辽', '思茅', '黔东南', '黄冈', '德阳', # '随州', '德令哈', '南昌', '伊犁', '安庆', '衡阳', '百色', '舟山', '鄂尔多斯', '抚州', '资阳', '常州', '河池', '海晏', '濮阳', '朔州', # '黔西南', '攀枝花', '淮北', '四平', '肇庆', '宜春', '滨州', '周口', '甘南', '铁岭', '安康', '焦作', '梅州', '平顶山', '黔南', # '池州', '呼和浩特', '自贡', '朝阳', '滁州', '本溪', '怒江', '宁德', '哈尔滨', '荆门', '牡丹江', '临夏', '石嘴山', '雅安', '鞍山', # '那曲', '辽阳', '白山', '昌吉', '湛江', '梧州', '商丘', '孝感', '哈密', '克孜勒苏', '德宏', '东营', '榆林', '防城港', '宿迁', '乌兰浩特', # '长春', '锦州', '湖州', '蚌埠', '北海', '十堰', '江汉', '宿州', '集宁', '林芝', '大兴安岭', '吉林', '宣城', '漯河', '商洛', '遂宁', '丹东', # '普洱', '张家界', '河源', '铜川', '喀什', '阿勒泰', '阜新', '南平', '伊春', '拉萨', '阳泉', '阿里', '锡林郭勒盟', '潮州', '鄂州', '新余', # '来宾', '铜陵', '库尔勒', '黄石'} @staticmethod def WOE_als(df: pd.DataFrame) -> float: temp = df['als_m12_id_nbank_orgnum'] if temp <= -99: return -0.9905 elif temp <= -1: return -0.6534 elif temp <= 1: return -0.2642 elif temp <= 2: return 0.0430 elif temp <= 5: return 0.4120 elif temp <= 10: return 1.1025 else: return 1.3919 @staticmethod def WOE_city_ec(df: pd.DataFrame) -> float: temp = df['cell_city_ec_level'] if temp <= -1: return -0.1563 elif temp <= 1200: return -0.4482 elif temp <= 1350: return -0.3093 elif temp <= 1900: return 0.0475 elif temp <= 3000: return 0.0622 else: return 0.6009 @staticmethod def WOE_i_max_cnt_partner_daily_Loan_finance_365day( df: pd.DataFrame) -> float: temp = df['i_max_cnt_partner_daily_Loan_finance_365day'] if temp <= -99: return -1.0218 elif temp <= 1: return -0.3546 elif temp <= 2: return 0.5453 else: return 1.1982 @staticmethod def WOE_i_get_node_rank_value_Loan_all_all(df: pd.DataFrame) -> float: temp = df['i_get_node_rank_value_Loan_all_all'] if temp <= -1111: return -0.1196 elif temp <= -999: return -0.3269 elif temp == 0: return 0.5136 else: return 0.5265 @staticmethod def WOE_RZJE(df: pd.DataFrame) -> float: temp = df['融资金额'] if temp <= 70000: return 0.0199 elif temp <= 80000: return -0.4453 elif temp <= 95000: return -0.3649 elif temp <= 110000: return 0.2451 else: return 0.5391 @staticmethod def WOE_age_frg(df: pd.DataFrame) -> float: if df['frg_list_level'] <= -99 and df['apply_age'] < 25: return -0.2532 elif df['frg_list_level'] <= -99 and df['apply_age'] < 45: return -0.5545 elif df['frg_list_level'] <= -99 and df['apply_age'] >= 45: return -0.4625 elif df['frg_list_level'] < 5: return 0.7118 else: return 1.2803 @staticmethod def WOE_ir(df: pd.DataFrame) -> float: temp = df['ir_m6_cell_x_linkman_cell_cnt'] if temp <= -99: return -1.1601 elif temp <= -1: return -0.5295 else: return 0.4640 @staticmethod def WOE_SS(df: pd.DataFrame) -> float: theSp = df['flag_specialList_c'] thegen = df['gender'] if thegen == 0 and theSp == 0: return -0.1126 elif thegen == 1 and theSp == 0: return -0.0585 else: return 0.8694 @staticmethod def WOE_cell_province(df: pd.DataFrame) -> float: temp = df['cell_province'] if temp in Score.theProv1: return 0.5578 elif temp in Score.theProv2: return 0.4508 elif temp in Score.theProv3: return 0.0003 else: return -0.4442 @staticmethod def WOE_cell_city(df: pd.DataFrame) -> float: temp = df['cell_city'] if temp in Score.theCity1: return 0.7762 elif temp in Score.theCity2: return 0.5512 else: return -0.1598 @staticmethod def get_odds(df: pd.DataFrame) -> pd.DataFrame: df["odds"] = df["woe_als_m12_id_nbank_orgnum"] * 0.38929019234372647 \ + df["woe_cell_city_ec_level"] * 0.4256609883834146 \ + df["woe_i_max_cnt_partner_daily_Loan_finance_365day"] * 0.3376071667460782 \ + df["woe_i_get_node_rank_value_Loan_all_all"] * 0.2793197568224026 \ + df["woe_融资金额"] * 0.8403668316875686 \ + df["woe_age_frg"] * 0.2150064685794368 \ + df["woe_ir_m6_cell_x_linkman_cell_cnt"] * 0.2794698572885128 \ + df["woe_sl_gender"] * 0.49792835781599715 \ + df["woe_cell_province"] * 0.5784174302105042 \ + df["woe_cell_city"] * 0.5417858499432695 \ - 2.9770612620547205 return df @staticmethod def get_score(odds: pd.Series) -> pd.Series: p_1 = 1 / (1 + np.exp(-odds)) score = 655 - 95 * np.log2((p_1 / (1 - p_1)) / (0.05 / 0.95)) return score def derive(self, df: pd.DataFrame) -> pd.DataFrame: df["woe_als_m12_id_nbank_orgnum"] = df.apply(Score.WOE_als, axis=1) df["woe_cell_city_ec_level"] = df.apply(Score.WOE_city_ec, axis=1) df["woe_i_max_cnt_partner_daily_Loan_finance_365day"] = df.apply( Score.WOE_i_max_cnt_partner_daily_Loan_finance_365day, axis=1) df["woe_i_get_node_rank_value_Loan_all_all"] = df.apply( Score.WOE_i_get_node_rank_value_Loan_all_all, axis=1) df["woe_融资金额"] = df.apply(Score.WOE_RZJE, axis=1) df["woe_age_frg"] = df.apply(Score.WOE_age_frg, axis=1) df["woe_ir_m6_cell_x_linkman_cell_cnt"] = df.apply(Score.WOE_ir, axis=1) df["woe_sl_gender"] = df.apply(Score.WOE_SS, axis=1) df["woe_cell_province"] = df.apply(Score.WOE_cell_province, axis=1) df["woe_cell_city"] = df.apply(Score.WOE_cell_city, axis=1) return df def predict(self, df: pd.DataFrame) -> pd.DataFrame: df = self.derive(df) df = self.get_odds(df) df.loc[:, "score"] = df["odds"].apply(self.get_score) df.loc[(df["score"] < 300), "score"] = 300 df.loc[(df["score"] > 1000), "score"] = 1000 return df
def bar_moing(self, results_dicts): www = lujings().shenfen() # print('wwwwwwwwwwwwwwwwwwwwwwwwwww',www) # print(results_dicts) # www['号段'] = www['号段'].astype('str') cell_province = lujings().cell_province() cell_province['cell_province'] = cell_province[ 'cell_province'].str.strip() cell_city = lujings().cell_city()[['cell_city', 'ids']] cell_city['cell_city'] = cell_city['cell_city'].str.strip() #results_dicts = self.requestss() if results_dicts != 4000: try: ###print('results_dictsresults_dictsresults_dictsresults_dicts',results_dicts) dict_sex = self.sex_gender() ### 获取百融数据的result_list ###取百融模型 bl_json = {} list_binaliang = [ 'als_m12_id_nbank_orgnum', 'frg_list_level', 'ir_m6_cell_x_linkman_cell_cnt', 'flag_specialList_c' ] if results_dicts['flag_applyloanstr'] == '1': for ii in list_binaliang: if ii in results_dicts.keys(): bl_json[ii] = results_dicts[ii] else: bl_json[ii] = -1 else: bl_json = { 'als_m12_id_nbank_orgnum': -99, 'frg_list_level': -99, 'ir_m6_cell_x_linkman_cell_cnt': -99, 'flag_specialList_c': -99 } # ##print(bl_json) # model_path = r"C:\Users\Administrator\shenfen.pickle" www['号段'] = www['号段'].apply(lambda x: str(x)) ###print('www',www) phon_a = self.cellphone[0:7] ss = www[www['号段'] == phon_a] ### LR的模型 ss_dict = ss.to_dict(orient='records')[0] bl_json.update(ss_dict) bl_json.update(dict_sex) ##print('ccccccccccccccccccccccccc') ##print(cell_province) ##print('cell_city',cell_city) xgb = xgboost(results_dicts, ss, dict_sex) datas = xgb.join() id_city = xgb.id_shenfen(self.id_no) datas['id_city'] = id_city ##print('dadadadaaaa',datas['id_city']) xgb_score = xgb.datas(datas) return bl_json, xgb_score except: bl_json = {'bairong': 4000} xgb_score = [0] return bl_json, xgb_score else: bl_json = {'bairong': 4000} xgb_score = [0] return bl_json, xgb_score