日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 去除nan inf_Python实现半自动评分卡建模(附代码)

發布時間:2024/7/23 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 去除nan inf_Python实现半自动评分卡建模(附代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:Summer Memories
個人公眾號:風控汪的數據分析之路
知乎專欄:小鑫的數據分析筆記

這次分享一個自己寫的python腳本,可以實現半自動化的評分卡建模。運行腳本時需要input已經預處理好的訓練集和測試集數據,所以建模前期的EDA,數據清洗,缺失值填充等需要人工完成。

Github鏈接:

taenggu0309/Semi-auto-modeling?github.com

使用方法:直接調用 get_scorecard_model 函數即可。

PS: 在做缺失值填充時建議當缺失率<=5%時,填充中位數或平均數,>5%時,填充一個映射值,例如-999(把缺失單獨分為一箱)。

整個腳本的大概流程是:

PSI預篩選 --> 特征分箱 --> IV篩選特征 --> 相關性/多重共線性篩選 --> woe單調調整 -- >

顯著性篩選 --> 系數一致篩選 --> 建模 --> 模型評估 --> 標準評分轉換

自己拿一份數據(2w+條, 150+特征)測試了一下,腳本跑完大概需要20s,速度還是可以的。

目前這個腳本只是一個初版,后續各位小伙伴在使用過程中碰到什么問題,有改進的建議,都可以在評論區留言,或者直接私信我。

下面貼上各個模塊的代碼,注釋寫的比較少,見諒。。。

需要import的包import 計算PSIdef cal_psi(df1,df2,col,bin_num=5):"""計算psiparam:df1 -- 數據集A Dataframedf2 -- 數據集B Dataframecol -- 字段名 stringbin_num -- 連續型特征的分箱數 默認為5return:psi floatbin_df -- psi明細表 Dataframe"""# 對于離散型特征直接根據類別進行分箱,分箱邏輯以數據集A為準if df1[col].dtype == np.dtype('object') or df1[col].dtype == np.dtype('bool') or df1[col].nunique()<=bin_num:bin_df1 = df1[col].value_counts().to_frame().reset_index().rename(columns={'index':col,col:'total_A'})bin_df1['totalrate_A'] = bin_df1['total_A']/df1.shape[0]bin_df2 = df2[col].value_counts().to_frame().reset_index().rename(columns={'index':col,col:'total_B'})bin_df2['totalrate_B'] = bin_df2['total_B']/df2.shape[0]else:# 這里采用的是等頻分箱bin_series,bin_cut = pd.qcut(df1[col],q=bin_num,duplicates='drop',retbins=True)bin_cut[0] = float('-inf')bin_cut[-1] = float('inf')bucket1 = pd.cut(df1[col],bins=bin_cut)group1 = df1.groupby(bucket1)bin_df1=pd.DataFrame()bin_df1['total_A'] = group1[col].count()bin_df1['totalrate_A'] = bin_df1['total_A']/df1.shape[0]bin_df1 = bin_df1.reset_index()bucket2 = pd.cut(df2[col],bins=bin_cut)group2 = df2.groupby(bucket2)bin_df2=pd.DataFrame()bin_df2['total_B'] = group2[col].count()bin_df2['totalrate_B'] = bin_df2['total_B']/df2.shape[0]bin_df2 = bin_df2.reset_index()# 計算psibin_df = pd.merge(bin_df1,bin_df2,on=col)bin_df['a'] = bin_df['totalrate_B'] - bin_df['totalrate_A']bin_df['b'] = np.log(bin_df['totalrate_B']/bin_df['totalrate_A'])bin_df['Index'] = bin_df['a']*bin_df['b']bin_df['PSI'] = bin_df['Index'].sum()bin_df = bin_df.drop(['a','b'],axis=1)psi =bin_df.PSI.iloc[0]return psi,bin_df決策樹分箱def tree_split(df,col,target,max_bin,min_binpct,nan_value):"""決策樹分箱param:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringmax_bin -- 最大分箱數 intmin_binpct -- 箱體的最小占比 floatnan_value -- 缺失的映射值 int/floatreturn:split_list -- 分割點 list"""miss_value_rate = df[df[col]==nan_value].shape[0]/df.shape[0]# 如果缺失占比小于5%,則直接對特征進行分箱if miss_value_rate<0.05:x = np.array(df[col]).reshape(-1,1)y = np.array(df[target])tree = DecisionTreeClassifier(max_leaf_nodes=max_bin,min_samples_leaf = min_binpct)tree.fit(x,y)thresholds = tree.tree_.thresholdthresholds = thresholds[thresholds!=_tree.TREE_UNDEFINED]split_list = sorted(thresholds.tolist())# 如果缺失占比大于5%,則把缺失單獨分為一箱,剩余部分再進行決策樹分箱else:max_bin2 = max_bin-1x = np.array(df[~(df[col]==nan_value)][col]).reshape(-1,1)y = np.array(df[~(df[col]==nan_value)][target])tree = DecisionTreeClassifier(max_leaf_nodes=max_bin2,min_samples_leaf = min_binpct)tree.fit(x,y)thresholds = tree.tree_.thresholdthresholds = thresholds[thresholds!=_tree.TREE_UNDEFINED]split_list = sorted(thresholds.tolist())split_list.insert(0,nan_value)return split_list等頻分箱def quantile_split(df,col,target,max_bin,nan_value):"""等頻分箱param:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringmax_bin -- 最大分箱數 intnan_value -- 缺失的映射值 int/floatreturn:split_list -- 分割點 list"""miss_value_rate = df[df[col]==nan_value].shape[0]/df.shape[0]# 如果缺失占比小于5%,則直接對特征進行分箱if miss_value_rate<0.05:bin_series,bin_cut = pd.qcut(df[col],q=max_bin,duplicates='drop',retbins=True)split_list = bin_cut.tolist()split_list.remove(split_list[0])# 如果缺失占比大于5%,則把缺失單獨分為一箱,剩余部分再進行等頻分箱else:df2 = df[~(df[col]==nan_value)]max_bin2 = max_bin-1bin_series,bin_cut = pd.qcut(df2[col],q=max_bin2,duplicates='drop',retbins=True)split_list = bin_cut.tolist()split_list[0] = nan_valuesplit_list.remove(split_list[-1])# 當出現某個箱體只有好用戶或只有壞用戶時,進行前向合并箱體var_arr = np.array(df[col])target_arr = np.array(df[target])bin_trans = np.digitize(var_arr,split_list,right=True)var_tuple = [(x,y) for x,y in zip(bin_trans,target_arr)]delete_cut_list = []for i in set(bin_trans):target_list = [y for x,y in var_tuple if x==i]if target_list.count(1)==0 or target_list.count(0)==0:if i ==min(bin_trans):index=ielse:index = i-1delete_cut_list.append(split_list[index])split_list = [x for x in split_list if x not in delete_cut_list]return split_list計算woedef cal_woe(df,col,target,nan_value,cut=None):"""計算woeparam:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringnan_value -- 缺失的映射值 int/floatcut -- 箱體分割點 listreturn:woe_list -- 每個箱體的woe list"""total = df[target].count()bad = df[target].sum()good = total-badbucket = pd.cut(df[col],cut)group = df.groupby(bucket)bin_df = pd.DataFrame()bin_df['total'] = group[target].count()bin_df['bad'] = group[target].sum()bin_df['good'] = bin_df['total'] - bin_df['bad']bin_df['badattr'] = bin_df['bad']/badbin_df['goodattr'] = bin_df['good']/goodbin_df['woe'] = np.log(bin_df['badattr']/bin_df['goodattr'])# 當cut里有缺失映射值時,說明是把缺失單獨分為一箱的,后續在進行調成單調分箱時# 不考慮缺失的箱,故將缺失映射值剔除if nan_value in cut:woe_list = bin_df['woe'].tolist()[1:]else:woe_list = bin_df['woe'].tolist()return woe_listwoe調成單調遞減或單調遞增def monot_trim(df,col,target,nan_value,cut=None):"""woe調成單調遞減或單調遞增param:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringnan_value -- 缺失的映射值 int/floatcut -- 箱體分割點 listreturn:new_cut -- 調整后的分割點 list"""woe_lst = cal_woe(df,col,target,nan_value,cut = cut)# 若第一個箱體大于0,說明特征整體上服從單調遞減if woe_lst[0]>0:while not judge_decreasing(woe_lst):# 找出哪幾個箱不服從單調遞減的趨勢judge_list = [x>y for x, y in zip(woe_lst, woe_lst[1:])]# 用前向合并箱體的方式,找出需要剔除的分割點的索引,如果有缺失映射值,則索引+1if nan_value in cut:index_list = [i+2 for i,j in enumerate(judge_list) if j==False]else:index_list = [i+1 for i,j in enumerate(judge_list) if j==False]new_cut = [j for i,j in enumerate(cut) if i not in index_list]woe_lst = cal_woe(df,col,target,nan_value,cut = new_cut)# 若第一個箱體小于0,說明特征整體上服從單調遞增elif woe_lst[0]<0:while not judge_increasing(woe_lst):# 找出哪幾個箱不服從單調遞增的趨勢judge_list = [x<y for x, y in zip(woe_lst, woe_lst[1:])]# 用前向合并箱體的方式,找出需要剔除的分割點的索引,如果有缺失映射值,則索引+1if nan_value in cut:index_list = [i+2 for i,j in enumerate(judge_list) if j==False]else:index_list = [i+1 for i,j in enumerate(judge_list) if j==False]new_cut = [j for i,j in enumerate(cut) if i not in index_list]woe_lst = cal_woe(df,col,target,nan_value,cut = new_cut)return new_cut判斷一個list是否是單調變化def judge_increasing(L):"""判斷一個list是否單調遞增"""return all(x<y for x, y in zip(L, L[1:]))def judge_decreasing(L):"""判斷一個list是否單調遞減"""return all(x>y for x, y in zip(L, L[1:]))特征分箱,計算ivdef binning_var(df,col,target,bin_type='dt',max_bin=5,min_binpct=0.05,nan_value=-999):"""特征分箱,計算ivparam:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringbin_type -- 分箱方式 默認是'dt',還有'quantile'(等頻分箱)max_bin -- 最大分箱數 intmin_binpct -- 箱體的最小占比 floatnan_value -- 缺失映射值 int/floatreturn:bin_df -- 特征的分箱明細表 Dataframecut -- 分割點 list"""total = df[target].count()bad = df[target].sum()good = total-bad# 離散型特征分箱,直接根據類別進行groupbyif df[col].dtype == np.dtype('object') or df[col].dtype == np.dtype('bool') or df[col].nunique()<=max_bin:group = df.groupby([col],as_index=True)bin_df = pd.DataFrame()bin_df['total'] = group[target].count()bin_df['totalrate'] = bin_df['total']/totalbin_df['bad'] = group[target].sum()bin_df['badrate'] = bin_df['bad']/bin_df['total']bin_df['good'] = bin_df['total'] - bin_df['bad']bin_df['goodrate'] = bin_df['good']/bin_df['total']bin_df['badattr'] = bin_df['bad']/badbin_df['goodattr'] = (bin_df['total']-bin_df['bad'])/goodbin_df['woe'] = np.log(bin_df['badattr']/bin_df['goodattr'])bin_df['bin_iv'] = (bin_df['badattr']-bin_df['goodattr'])*bin_df['woe']bin_df['IV'] = bin_df['bin_iv'].sum()cut = df[col].unique().tolist()# 連續型特征的分箱else:if bin_type=='dt':cut = tree_split(df,col,target,max_bin=max_bin,min_binpct=min_binpct,nan_value=nan_value)elif bin_type=='quantile':cut = quantile_split(df,col,target,max_bin=max_bin,nan_value=nan_value)cut.insert(0,float('-inf'))cut.append(float('inf'))bucket = pd.cut(df[col],cut)group = df.groupby(bucket)bin_df = pd.DataFrame()bin_df['total'] = group[target].count()bin_df['totalrate'] = bin_df['total']/totalbin_df['bad'] = group[target].sum()bin_df['badrate'] = bin_df['bad']/bin_df['total']bin_df['good'] = bin_df['total'] - bin_df['bad']bin_df['goodrate'] = bin_df['good']/bin_df['total']bin_df['badattr'] = bin_df['bad']/badbin_df['goodattr'] = (bin_df['total']-bin_df['bad'])/goodbin_df['woe'] = np.log(bin_df['badattr']/bin_df['goodattr'])bin_df['bin_iv'] = (bin_df['badattr']-bin_df['goodattr'])*bin_df['woe']bin_df['IV'] = bin_df['bin_iv'].sum()return bin_df,cut調整單調后的分箱,計算IVdef binning_trim(df,col,target,cut=None,right_border=True):"""調整單調后的分箱,計算IVparam:df -- 數據集 Dataframecol -- 分箱的字段名 stringtarget -- 標簽的字段名 stringcut -- 分割點 listright_border -- 箱體的右邊界是否閉合 boolreturn:bin_df -- 特征的分箱明細表 Dataframe"""total = df[target].count()bad = df[target].sum()good = total - badbucket = pd.cut(df[col],cut,right=right_border)group = df.groupby(bucket)bin_df = pd.DataFrame()bin_df['total'] = group[target].count()bin_df['totalrate'] = bin_df['total']/totalbin_df['bad'] = group[target].sum()bin_df['badrate'] = bin_df['bad']/bin_df['total']bin_df['good'] = bin_df['total'] - bin_df['bad']bin_df['goodrate'] = bin_df['good']/bin_df['total']bin_df['badattr'] = bin_df['bad']/badbin_df['goodattr'] = (bin_df['total']-bin_df['bad'])/goodbin_df['woe'] = np.log(bin_df['badattr']/bin_df['goodattr'])bin_df['bin_iv'] = (bin_df['badattr']-bin_df['goodattr'])*bin_df['woe']bin_df['IV'] = bin_df['bin_iv'].sum()return bin_df 相關性篩選def forward_corr_delete(df,col_list):"""相關性篩選,設定的閾值為0.65param:df -- 數據集 Dataframecol_list -- 需要篩選的特征集合,需要提前按IV值從大到小排序好 listreturn:select_corr_col -- 篩選后的特征集合 list"""corr_list=[]corr_list.append(col_list[0])delete_col = []# 根據IV值的大小進行遍歷for col in col_list[1:]:corr_list.append(col)corr = df.loc[:,corr_list].corr()corr_tup = [(x,y) for x,y in zip(corr[col].index,corr[col].values)]corr_value = [y for x,y in corr_tup if x!=col]# 若出現相關系數大于0.65,則將該特征剔除if len([x for x in corr_value if abs(x)>=0.65])>0:delete_col.append(col)select_corr_col = [x for x in col_list if x not in delete_col]return select_corr_col多重共線性篩選def vif_delete(df,list_corr):"""多重共線性篩選param:df -- 數據集 Dataframelist_corr -- 相關性篩選后的特征集合,按IV值從大到小排序 listreturn:col_list -- 篩選后的特征集合 list"""col_list = list_corr.copy()# 計算各個特征的方差膨脹因子vif_matrix=np.matrix(df[col_list])vifs_list=[variance_inflation_factor(vif_matrix,i) for i in range(vif_matrix.shape[1])]# 篩選出系數>10的特征vif_high = [x for x,y in zip(col_list,vifs_list) if y>10]# 根據IV從小到大的順序進行遍歷if len(vif_high)>0:for col in reversed(vif_high):col_list.remove(col)vif_matrix=np.matrix(df[col_list])vifs=[variance_inflation_factor(vif_matrix,i) for i in range(vif_matrix.shape[1])]# 當系數矩陣里沒有>10的特征時,循環停止if len([x for x in vifs if x>10])==0:breakreturn col_list顯著性篩選(前向/后向逐步回歸)def forward_pvalue_delete(x,y):"""顯著性篩選,前向逐步回歸param:x -- 特征數據集,woe轉化后,且字段順序按IV值從大到小排列 Dataframey -- 標簽列 Seriesreturn:pvalues_col -- 篩選后的特征集合 list"""col_list = x.columns.tolist()pvalues_col=[]# 按IV值逐個引入模型for col in col_list:pvalues_col.append(col)# 每引入一個特征就做一次顯著性檢驗x_const = sm.add_constant(x.loc[:,pvalues_col])sm_lr = sm.Logit(y,x_const)sm_lr = sm_lr.fit()pvalue = sm_lr.pvalues[col]# 當引入的特征P值>=0.05時,則剔除,原先滿足顯著性檢驗的則保留,不再剔除if pvalue>=0.05:pvalues_col.remove(col)return pvalues_coldef backward_pvalue_delete(x,y):"""顯著性篩選,后向逐步回歸param:x -- 特征數據集,woe轉化后,且字段順序按IV值從大到小排列 Dataframey -- 標簽列 Seriesreturn:pvalues_col -- 篩選后的特征集合 list"""x_c = x.copy()# 所有特征引入模型,做顯著性檢驗x_const = sm.add_constant(x_c)sm_lr = sm.Logit(y,x_const).fit()pvalue_tup = [(i,j) for i,j in zip(sm_lr.pvalues.index,sm_lr.pvalues.values)][1:]delete_count = len([i for i,j in pvalue_tup if j>=0.05])# 當有P值>=0.05的特征時,執行循環while delete_count>0:# 按IV值從小到大的順序依次逐個剔除remove_col = [i for i,j in pvalue_tup if j>=0.05][-1]del x_c[remove_col]# 每次剔除特征后都要重新做顯著性檢驗,直到入模的特征P值都小于0.05x2_const = sm.add_constant(x_c)sm_lr2 = sm.Logit(y,x2_const).fit()pvalue_tup2 = [(i,j) for i,j in zip(sm_lr2.pvalues.index,sm_lr2.pvalues.values)][1:]delete_count = len([i for i,j in pvalue_tup2 if j>=0.05])pvalues_col = x_c.columns.tolist()return pvalues_col 系數一致篩選def forward_delete_coef(x,y):"""系數一致篩選param:x -- 特征數據集,woe轉化后,且字段順序按IV值從大到小排列 Dataframey -- 標簽列 Seriesreturn:coef_col -- 篩選后的特征集合 list"""col_list = list(x.columns)coef_col = []# 按IV值逐個引入模型,輸出系數for col in col_list:coef_col.append(col)x2 = x.loc[:,coef_col]sk_lr = LogisticRegression(random_state=0).fit(x2,y)coef_dict = {k:v for k,v in zip(coef_col,sk_lr.coef_[0])}# 當引入特征的系數為負,則將其剔除if coef_dict[col]<0:coef_col.remove(col)return coef_col得到特征woe映射集合表def get_map_df(bin_df_list):"""得到特征woe映射集合表param:bin_df_list -- 每個特征的woe映射表 listreturn:map_merge_df -- 特征woe映射集合表 Dataframe"""map_df_list=[]for dd in bin_df_list:# 添加特征名列map_df = dd.reset_index().assign(col=dd.index.name).rename(columns={dd.index.name:'bin'})# 將特征名列移到第一列,便于查看temp1 = map_df['col']temp2 = map_df.iloc[:,:-1]map_df2 = pd.concat([temp1,temp2],axis=1)map_df_list.append(map_df2)map_merge_df = pd.concat(map_df_list,axis=0)return map_merge_df特征映射def var_mapping(df,map_df,var_map,target):"""特征映射param:df -- 原始數據集 Dataframemap_df -- 特征映射集合表 Dataframevar_map -- map_df里映射的字段名,如"woe","score" stringtarget -- 標簽字段名 stringreturn:df2 -- 映射后的數據集 Dataframe"""df2 = df.copy()# 去掉標簽字段,遍歷特征for col in df2.drop([target],axis=1).columns:x = df2[col]# 找到特征的映射表bin_map = map_df[map_df.col==col]# 新建一個映射array,填充0bin_res = np.array([0]*x.shape[0],dtype=float)for i in bin_map.index:# 每個箱的最小值和最大值lower = bin_map['min_bin'][i]upper = bin_map['max_bin'][i]# 對于類別型特征,每個箱的lower和upper時一樣的if lower == upper:x1 = x[np.where(x == lower)[0]]# 連續型特征,左開右閉else:x1 = x[np.where((x>lower)&(x<=upper))[0]]mask = np.in1d(x,x1)# 映射array里填充對應的映射值bin_res[mask] = bin_map[var_map][i]bin_res = pd.Series(bin_res,index=x.index)bin_res.name = x.name# 將原始值替換為映射值df2[col] = bin_resreturn df2繪制ROC曲線和KS曲線def plot_roc(y_label,y_pred):"""繪制roc曲線param:y_label -- 真實的y值 list/arrayy_pred -- 預測的y值 list/arrayreturn:roc曲線"""tpr,fpr,threshold = metrics.roc_curve(y_label,y_pred) AUC = metrics.roc_auc_score(y_label,y_pred) fig = plt.figure(figsize=(6,4))ax = fig.add_subplot(1,1,1)ax.plot(tpr,fpr,color='blue',label='AUC=%.3f'%AUC) ax.plot([0,1],[0,1],'r--')ax.set_ylim(0,1)ax.set_xlim(0,1)ax.set_title('ROC')ax.legend(loc='best')return plt.show(ax)def plot_model_ks(y_label,y_pred):"""繪制ks曲線param:y_label -- 真實的y值 list/arrayy_pred -- 預測的y值 list/arrayreturn:ks曲線"""pred_list = list(y_pred) label_list = list(y_label)total_bad = sum(label_list)total_good = len(label_list)-total_bad items = sorted(zip(pred_list,label_list),key=lambda x:x[0]) step = (max(pred_list)-min(pred_list))/200 pred_bin=[]good_rate=[] bad_rate=[] ks_list = [] for i in range(1,201): idx = min(pred_list)+i*step pred_bin.append(idx) label_bin = [x[1] for x in items if x[0]<idx] bad_num = sum(label_bin)good_num = len(label_bin)-bad_num goodrate = good_num/total_good badrate = bad_num/total_badks = abs(goodrate-badrate) good_rate.append(goodrate)bad_rate.append(badrate)ks_list.append(ks)fig = plt.figure(figsize=(6,4))ax = fig.add_subplot(1,1,1)ax.plot(pred_bin,good_rate,color='green',label='good_rate')ax.plot(pred_bin,bad_rate,color='red',label='bad_rate')ax.plot(pred_bin,ks_list,color='blue',label='good-bad')ax.set_title('KS:{:.3f}'.format(max(ks_list)))ax.legend(loc='best')return plt.show(ax)計算分數校準的A,B值,基礎分def cal_scale(score,odds,PDO,model):"""計算分數校準的A,B值,基礎分param:odds:設定的壞好比 floatscore: 在這個odds下的分數 intPDO: 好壞翻倍比 intmodel:模型return:A,B,base_score(基礎分)"""B = 20/(np.log(odds)-np.log(2*odds))A = score-B*np.log(odds)base_score = A+B*model.intercept_[0]return A,B,base_score得到特征score的映射集合表def get_score_map(woe_df,coe_dict,B):"""得到特征score的映射集合表param:woe_df -- woe映射集合表 Dataframecoe_dict -- 系數對應的字典return:score_df -- score的映射集合表 Dataframe"""scores=[]for cc in woe_df.col.unique():woe_list = woe_df[woe_df.col==cc]['woe'].tolist()coe = coe_dict[cc]score = [round(coe*B*w,0) for w in woe_list]scores.extend(score)woe_df['score'] = scoresscore_df = woe_df.copy()return score_df繪制好壞用戶得分分布圖def plot_score_hist(df,target,score_col,title,plt_size=None):"""繪制好壞用戶得分分布圖param:df -- 數據集 Dataframetarget -- 標簽字段名 stringscore_col -- 模型分的字段名 stringplt_size -- 繪圖尺寸 tupletitle -- 圖表標題 stringreturn:好壞用戶得分分布圖""" plt.figure(figsize=plt_size)plt.title(title)x1 = df[df[target]==1][score_col]x2 = df[df[target]==0][score_col]sns.kdeplot(x1,shade=True,label='bad',color='hotpink')sns.kdeplot(x2,shade=True,label='good',color ='seagreen')plt.legend()return plt.show()評分卡建模def get_scorecard_model(train_data,test_data,target,nan_value=-999,score=400,odds=999/1,pdo=20):"""評分卡建模param:train_data -- 訓練數據集,預處理好的 Dataframetest_data -- 測試數據集,預處理好的 Dataframetarget -- 標簽字段名 stringnan_value -- 缺失的映射值 int 默認-999odds -- 設定的壞好比 float 默認999/1score -- 在這個odds下的分數 int 默認400PDO -- 好壞翻倍比 int 默認20return:lr_model -- lr模型score_map_df -- woe,score映射集合表 Dataframevalid_score -- 驗證集模型分表 Dataframetest_score -- 測試集模型分表 Dataframe"""# psi篩選,剔除psi大于0.25以上的特征all_col = [x for x in train_data.columns if x!=target]psi_tup = []for col in all_col:psi,psi_bin_df = cal_psi(train_data,test_data,col)psi_tup.append((col,psi))psi_delete = [x for x,y in psi_tup if y>=0.25]train = train_data.drop(psi_delete,axis=1)print('psi篩選特征完成')print('-------------')# 特征分箱,默認用的是決策樹分箱train_col = [x for x in train.columns if x!=target]bin_df_list=[]cut_list=[]for col in train_col:try:bin_df,cut = binning_var(train,col,target)bin_df_list.append(bin_df)cut_list.append(cut)except:passprint('特征分箱完成')print('-------------')# 剔除iv無限大的特征bin_df_list = [x for x in bin_df_list if x.IV.iloc[0]!=float('inf')]# 保存每個特征的分割點listcut_dict={}for dd,cc in zip(bin_df_list,cut_list):col = dd.index.namecut_dict[col] = cc# 將IV從大到小進行排序iv_col = [x.index.name for x in bin_df_list]iv_value = [x.IV.iloc[0] for x in bin_df_list]iv_sort = sorted(zip(iv_col,iv_value),key=lambda x:x[1],reverse=True)# iv篩選,篩選iv大于0.02的特征iv_select_col = [x for x,y in iv_sort if y>=0.02]print('iv篩選特征完成')print('-------------')# 特征分類cate_col = []num_col = []for col in iv_select_col:if train[col].dtype==np.dtype('object') or train[col].dtype==np.dtype('bool') or train[col].nunique()<=5:cate_col.append(col)else:num_col.append(col)#相關性篩選,相關系數閾值0.65corr_select_col = forward_corr_delete(train,num_col)print('相關性篩選完成')print('-------------')# 多重共線性篩選,系數閾值10vif_select_col = vif_delete(train,corr_select_col)print('多重共線性篩選完成')print('-------------')# 自動調整單調分箱trim_var_dict = {k:v for k,v in cut_dict.items() if k in vif_select_col}trim_bin_list=[]for col in trim_var_dict.keys():bin_cut = trim_var_dict[col]df_bin = [x for x in bin_df_list if x.index.name==col][0]woe_lst = df_bin['woe'].tolist()if not judge_decreasing(woe_lst) and not judge_increasing(woe_lst):monot_cut = monot_trim(train, col, target, nan_value=nan_value, cut=bin_cut)monot_bin_df = binning_trim(train, col, target, cut=monot_cut, right_border=True)trim_bin_list.append(monot_bin_df)else:trim_bin_list.append(df_bin)# 調整后的分箱再根據iv篩選一遍select_num_df = []for dd in trim_bin_list:if dd.IV.iloc[0]>=0.02:select_num_df.append(dd)print('自動調整單調分箱完成')print('-------------')# 連續型特征的woe映射集合表woe_map_num = get_map_df(select_num_df)woe_map_num['bin'] = woe_map_num['bin'].map(lambda x:str(x))woe_map_num['min_bin'] = woe_map_num['bin'].map(lambda x:x.split(',')[0][1:])woe_map_num['max_bin'] = woe_map_num['bin'].map(lambda x:x.split(',')[1][:-1])woe_map_num['min_bin'] = woe_map_num['min_bin'].map(lambda x:float(x))woe_map_num['max_bin'] = woe_map_num['max_bin'].map(lambda x:float(x))if len(cate_col)>0:bin_cate_list = [x for x in bin_df_list if x.index.name in cate_col]# 剔除woe不單調的離散形特征select_cate_df=[]for i,dd in enumerate(bin_cate_list):woe_lst = dd['woe'].tolist()if judge_decreasing(woe_lst) or judge_increasing(woe_lst):select_cate_df.append(dd)# 離散型特征的woe映射集合表if len(select_cate_df)>0:woe_map_cate = get_map_df(select_cate_df)woe_map_cate['min_bin'] = list(woe_map_cate['bin'])woe_map_cate['max_bin'] = list(woe_map_cate['bin'])woe_map_df = pd.concat([woe_map_cate,woe_map_num],axis=0).reset_index(drop=True)else:woe_map_df = woe_map_num.reset_index(drop=True)# 顯著性篩選,前向逐步回歸select_all_col = woe_map_df['col'].unique().tolist()select_sort_col = [x for x,y in iv_sort if x in select_all_col]train2 = train.loc[:,select_sort_col+[target]].reset_index(drop=True)# woe映射train_woe = var_mapping(train2,woe_map_df,'woe',target)X = train_woe.loc[:,select_sort_col]y = train_woe[target]pvalue_select_col = forward_pvalue_delete(X,y)print('顯著性篩選完成')print('-------------')# 剔除系數為負數的特征X2 = X.loc[:,pvalue_select_col]coef_select_col = forward_delete_coef(X2,y)# LR建模X3 = X2.loc[:,coef_select_col]x_train,x_valid,y_train,y_valid = train_test_split(X3,y,test_size=0.2,random_state=0)# 保存驗證集的indexvalid_index = x_valid.index.tolist()lr_model = LogisticRegression(C=1.0).fit(x_train,y_train)print('建模完成')print('-------------')# 繪制驗證集的auc,ksvalid_pre = lr_model.predict_proba(x_valid)[:,1]print('驗證集的AUC,KS:')plot_roc(y_valid,valid_pre)plot_model_ks(y_valid,valid_pre)woe_map_df2 = woe_map_df[woe_map_df.col.isin(coef_select_col)].reset_index(drop=True)# 繪制測試集的auc,kstest = test_data.loc[:,coef_select_col+[target]].reset_index(drop=True)test_woe = var_mapping(test,woe_map_df2,'woe',target)x_test = test_woe.drop([target],axis=1)y_test = test_woe[target]test_pre = lr_model.predict_proba(x_test)[:,1]print('測試集的AUC,KS:')plot_roc(y_test,test_pre)plot_model_ks(y_test,test_pre)# 評分轉換A,B,base_score = cal_scale(score,odds,pdo,lr_model)score_map_df = get_score_map(woe_map_df2,lr_model,B)# 分數映射valid_data = train2.iloc[valid_index,:].loc[:,coef_select_col+[target]].reset_index(drop=True)valid_score = var_mapping(valid_data,score_map_df,'score',target)valid_score['final_score'] = base_scorefor col in coef_select_col:valid_score['final_score']+=valid_score[col]valid_score['final_score'] = valid_score['final_score'].map(lambda x:int(x))test_score = var_mapping(test,score_map_df,'score',target)test_score['final_score'] = base_scorefor col in coef_select_col:test_score['final_score']+=test_score[col]test_score['final_score'] = test_score['final_score'].map(lambda x:int(x))print('評分轉換完成')print('-------------')# 驗證集的評分分布plot_score_hist(valid_score, target, 'final_score','vaild_score',plt_size=(6,4))# 測試集的評分分布plot_score_hist(test_score, target, 'final_score','test_score',plt_size=(6,4))return lr_model,score_map_df,valid_score,test_score

關于作者:

本人就職于某金融科技公司從事風控建模工作,歡迎交流。

對于風控和機器學習感興趣的童鞋可以關注下我的公眾號:風控汪的數據分析之路。

總結

以上是生活随笔為你收集整理的python 去除nan inf_Python实现半自动评分卡建模(附代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

欧美激情精品久久久久久变态 | 欧美亚洲国产一卡 | 蜜桃视频在线观看一区 | 欧美日韩一区二区三区在线免费观看 | 日韩大片在线看 | 欧美二区视频 | 丁香午夜 | 国产手机在线精品 | 亚洲视频 视频在线 | 色综合色综合久久综合频道88 | 免费观看国产精品 | 日韩av快播电影网 | 日韩网站在线 | 欧美大片在线看免费观看 | 99re8这里有精品热视频免费 | 欧美特一级片 | zzijzzij亚洲日本少妇熟睡 | 91九色精品女同系列 | 黄色录像av| 天天干天天怕 | www.国产毛片| 91福利专区 | 91 在线视频播放 | 99理论片| 97成人在线免费视频 | 亚洲人人爱| 久草视频在线新免费 | 国产亚洲综合在线 | 国产一区二区在线免费播放 | 九九视频免费在线观看 | 日韩精品aaa| 婷婷激情影院 | 久久爽久久爽久久av东京爽 | 色婷婷激情四射 | 精品99免费 | 亚洲视频在线观看免费 | 免费一级特黄毛大片 | 久久草av | 久久综合久久综合久久综合 | 国产精品国产三级国产专区53 | 久久影视中文字幕 | 亚洲国产精品va在线看黑人动漫 | 天天综合天天做天天综合 | 免费看片网站91 | 成人a视频在线观看 | 99视频精品视频高清免费 | 成年人免费在线观看网站 | 高潮毛片无遮挡高清免费 | 91av中文| 美女黄频视频大全 | 涩涩网站在线观看 | 黄a在线观看| 激情网婷婷| 天天舔天天射天天操 | 成人在线观看免费视频 | 久久福利精品 | 在线视频区 | 久久伦理电影 | 黄污网站在线 | 日韩在线电影观看 | 97精品国产一二三产区 | 91在线porny国产在线看 | 国产亚洲精品久久久久动 | 亚洲欧美国产视频 | 国产精品精品国产色婷婷 | 欧美一区二区精美视频 | 在线观看精品视频 | 99视频免费看 | 成人a级大片 | 日韩精品一区二区三区中文字幕 | 国产黄在线免费观看 | 亚洲涩涩涩涩涩涩 | 亚洲第一成网站 | 欧美在线视频一区二区 | 操综合| 激情婷婷欧美 | 在线播放一区二区三区 | 日韩在线观看视频网站 | 日韩欧美在线视频一区二区 | 欧美精品免费一区二区 | 久久国产精品99久久久久久进口 | 亚洲人人射 | 天天天操天天天干 | free. 性欧美.com | 久久电影网站中文字幕 | www五月天婷婷 | 亚洲国产中文字幕在线视频综合 | 最近的中文字幕大全免费版 | 在线亚洲观看 | 日韩高清片 | 天天操天天操天天操天天 | 99久久精品无码一区二区毛片 | 日本黄色免费看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 欧美少妇18p | 日韩动态视频 | 色综合天天在线 | 超碰人人乐| 久久最新网址 | 国产91电影在线观看 | 成年人免费在线观看网站 | 亚洲精品小区久久久久久 | 久久99电影| 欧美日韩一区二区视频在线观看 | 国产中年夫妇高潮精品视频 | 国产成人精品亚洲日本在线观看 | 久久精品视频中文字幕 | 中文字幕 在线 一 二 | 天天色综合天天 | 欧美精品国产精品 | 国产精品高潮呻吟久久久久 | 精品久久久久国产 | 国产精品永久久久久久久久久 | 久艹视频在线免费观看 | 成人久久精品视频 | 亚洲成人资源网 | 国产资源精品在线观看 | 久久久久久久久久福利 | 欧美一级性 | 国产精品k频道 | 伊人超碰在线 | 玖玖视频国产 | 欧美地下肉体性派对 | 国产成人一区二区精品非洲 | 日日爱影视 | 四虎成人在线 | 欧美一级电影在线观看 | 亚洲va欧美 | 五月天中文字幕mv在线 | 91丨九色丨蝌蚪丨对白 | 狠狠色噜噜狠狠狠狠2021天天 | 最新av网址大全 | 中文字幕在线不卡国产视频 | 国产精品国内免费一区二区三区 | 欧美视频不卡 | 久久视频国产 | 99精品热| 久久免费一| 亚洲综合精品视频 | 久久国产成人午夜av影院宅 | 久久涩视频 | 天天拍天天操 | 久久视频 | 欧美小视频在线观看 | 久久精品99国产精品 | 欧美 日韩 国产 中文字幕 | 黄色国产高清 | 久久久久久久久久伊人 | 黄p在线播放 | 国产色婷婷精品综合在线手机播放 | avhd高清在线谜片 | 国产精品一区在线观看你懂的 | 亚洲网站在线看 | 国产黄色美女 | 久久怡红院 | 九九爱免费视频 | 天天天天综合 | 天天综合日 | 一区二区三区四区在线免费观看 | 欧美一二三区在线播放 | 日本中文字幕免费观看 | 精品久久九九 | 色婷婷综合成人av | 国产一区二区高清 | 午夜电影久久久 | 91免费国产在线观看 | 国产成人精品一区二区三区在线 | 日日添夜夜添 | 波多野结衣理论片 | 欧美a级免费视频 | 香蕉视频在线免费 | 中文字幕av电影下载 | 国产xxxx性hd极品 | 午夜精品久久久久久久久久久久 | 天天狠狠| 97看片吧| 99视频国产在线 | 国产免费又粗又猛又爽 | www.夜夜草 | 毛片a级片 | 色婷婷99 | 欧美日一级片 | 91色综合 | 天天综合中文 | 色.com| 欧美一级片免费播放 | 国产999精品久久久 免费a网站 | 亚洲婷久久| 最近高清中文在线字幕在线观看 | av一级久久 | 超碰97人 | 婷婷 综合 色 | 欧美日韩精品在线视频 | 国产破处视频在线播放 | 成人午夜毛片 | 日韩啪视频 | 99精品视频在线播放观看 | 精品黄色视 | 一区二区av| 欧美一区二区三区在线视频观看 | 一区二区三区精品在线 | 激情视频免费在线观看 | 日本69hd| bbw av| av亚洲产国偷v产偷v自拍小说 | 特级黄色视频毛片 | 亚洲小视频在线观看 | 亚洲九九九 | 亚洲永久国产精品 | 天天艹| 国产成人精品三级 | 欧美老女人xx | 久久成人人人人精品欧 | 黄色的视频网站 | 欧美伊人网 | 四虎国产永久在线精品 | 99久久精品免费看国产一区二区三区 | 欧美日韩在线免费视频 | 手机成人在线 | 97在线超碰 | 国产无套精品久久久久久 | 日韩在线观看a | 亚洲日韩中文字幕在线播放 | 一区二区三区在线影院 | 91精品国产自产在线观看 | 成人性生活大片 | 天天干天天射天天插 | 一区二区三区四区精品 | 亚洲国产大片 | 国产福利免费看 | 国产一区二区三区免费观看视频 | 日韩精品视频一二三 | 国产在线精品区 | 91麻豆精品国产91久久久久久 | 麻豆精品传媒视频 | 伊人电影在线观看 | 免费观看成人网 | 久久激情婷婷 | 国产亚洲精品久久久久久大师 | 久久久久久久久艹 | 夜夜躁狠狠躁日日躁视频黑人 | 欧美性生活小视频 | 精品在线观看一区二区 | 人人插人人爱 | av高清一区 | 99热精品在线 | 9ⅰ精品久久久久久久久中文字幕 | 国产精品ssss在线亚洲 | 久久不卡电影 | 成人黄色在线看 | 欧美一区在线观看视频 | 天天操天天添 | 国产一二三区av | 在线观看av的网站 | 欧美日韩国产一区二 | 亚洲欧美精品一区二区 | 国产精品一区二区在线看 | 日本久久综合网 | 亚洲精品视频 | 色婷婷六月 | 手机成人av | 在线欧美国产 | 日韩电影久久 | 中文字幕日韩在线播放 | 特级毛片网站 | 久久精品国产第一区二区三区 | av免费在线免费观看 | 美女在线观看网站 | 久久视频国产 | 亚洲欧美国产精品18p | 丁香婷婷激情国产高清秒播 | 黄色99视频 | 久久久久久久国产精品影院 | 精品国产一区二区三区不卡 | 中文字幕亚洲高清 | av丁香| 在线视频91 | 97热在线观看| 在线国产日韩 | 午夜久久影院 | 在线成人免费电影 | 91视频黄色 | 99国产在线观看 | 天天爽天天爽夜夜爽 | 怡红院av久久久久久久 | 国产一区二区三区高清播放 | www久久久| 免费三及片| 日韩欧美亚州 | 九九在线视频 | 日本黄色免费网站 | 天天干人人插 | 超碰成人网 | 免费av一级电影 | 色婷婷欧美 | 亚洲一区二区三区四区在线视频 | 日韩电影中文,亚洲精品乱码 | 中文字幕视频网站 | 玖玖视频免费在线 | 中文字幕电影网 | 国产视频精品免费 | 在线观看中文字幕网站 | 开心激情综合网 | 波多野结衣在线中文字幕 | 国内成人综合 | 免费精品在线观看 | 中文字幕在线观看第二页 | 国产精品视频资源 | 久久天天躁 | 国产99视频在线观看 | 久久精品久久久精品美女 | 成人av动漫在线观看 | 欧美一级电影在线观看 | 国产黄色一级片 | 日日夜夜免费精品 | 免费欧美精品 | 国内免费久久久久久久久久久 | 欧美在线视频一区二区三区 | 免费观看丰满少妇做爰 | 天堂久色 | 亚洲传媒在线 | 国产打女人屁股调教97 | 色婷婷综合五月 | 久草视频观看 | 日韩欧美在线中文字幕 | 婷婷 中文字幕 | 一区在线免费观看 | 国产中文欧美日韩在线 | 五月天婷亚洲天综合网鲁鲁鲁 | 国产一级片网站 | 少妇bbw撒尿 | 在线观看v片 | 午夜精品视频一区二区三区在线看 | 国产精品一区二区在线 | 狠狠色狠狠色合久久伊人 | 国内精品久久久久久久久 | 欧美日韩国产一区二区三区在线观看 | 欧美日韩国产精品一区 | 免费视频一区二区 | 91在线免费公开视频 | 日韩免费看视频 | www.av小说 | 精品国产乱码一区二区三区在线 | 日韩资源在线 | 午夜成人免费电影 | 在线观看视频黄 | 欧美日韩国产二区 | 国产精品欧美激情在线观看 | 婷婷综合在线 | 日韩精品一区二区不卡 | 91精品啪在线观看国产线免费 | www.天天干| 特级黄色电影 | 西西人体www444 | 免费激情在线电影 | 国产91免费在线 | 免费a级毛片在线看 | 草久久久久 | 久久中文字幕在线视频 | 国产麻豆传媒 | 国产91在线播放 | 精品一区二区av | 亚洲国产精品小视频 | 天天操综 | 美女网站黄免费 | 97国产超碰 | 99色在线播放 | 黄色av网站在线免费观看 | 日韩欧美视频免费看 | 国产在线观看免费观看 | 亚洲综合视频在线播放 | 人人干免费| 国产精品久久久网站 | 97人人爽| 国产又粗又猛又色 | 久久夜色精品国产欧美乱 | 国产精品免费大片视频 | 亚洲黄色三级 | 激情欧美丁香 | 欧美一级视频在线观看 | 在线播放精品一区二区三区 | 久久精品视频在线免费观看 | 91av免费看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产精品视频免费看 | 伊人欧美| 成人app在线免费观看 | 亚洲欧美日韩在线看 | 丁香国产视频 | 超碰在线人 | 一级片免费在线 | www久| 国产成人精品免费在线观看 | 色综合网在线 | 中文字幕在线久一本久 | 夜夜躁狠狠躁日日躁 | 国产视频在线免费观看 | 888av| 激情视频网页 | 国产字幕在线看 | 91麻豆精品国产91久久久无需广告 | 九九热只有这里有精品 | 日本丰满少妇免费一区 | 激情欧美一区二区免费视频 | 欧美成人亚洲成人 | 天天操天天操天天操 | 99热亚洲精品 | 国产一区二区在线看 | 中文字幕在线观看播放 | 国产精品精品国产婷婷这里av | 91在线小视频 | 色 中文字幕| 精品麻豆 | 一区二区丝袜 | 久久久午夜影院 | 精品免费国产一区二区三区四区 | 中文字幕一二三区 | 色婷婷视频在线 | 国产精品久久久久aaaa九色 | 亚洲天堂网站 | 久久免费视频网站 | 88av色| 午夜影院日本 | 国产精品mv | 日韩理论在线 | 免费瑟瑟网站 | 国产一级视频 | 免费看一级黄色 | 日韩视频一 | 国产福利91精品一区二区三区 | 亚洲闷骚少妇在线观看网站 | av电影免费在线看 | 激情婷婷综合网 | 国产精品一区二区果冻传媒 | 日本久草电影 | 99热高清| 国产资源av| 日韩成片 | av免费看av | 国产日女人| 色黄www小说 | 久久人人爽人人爽人人片av软件 | 精品国产乱码久久久久久1区二区 | 就要色综合 | 2024国产精品视频 | 国产99亚洲 | 国产精品mv在线观看 | 黄色aa久久 | 996久久国产精品线观看 | 久久人91精品久久久久久不卡 | 婷婷综合久久 | 2019国产精品 | 久久久久久久久久电影 | 国产中文在线字幕 | 国产午夜精品av一区二区 | 日日夜夜国产 | 天天操天天吃 | 中文字幕在线看视频国产中文版 | 国产亚洲日 | 欧美一二三区播放 | 国产婷婷精品av在线 | 亚洲精品国产成人av在线 | 国产区在线| 韩日av在线 | 国语精品久久 | 中文永久字幕 | 99久久久久久 | 久久久久久久久久久国产精品 | 成人av日韩 | 在线国产中文字幕 | 国产成人av片 | 怡红院av久久久久久久 | 国产不卡在线看 | 成人一区二区在线观看 | 成人sm另类专区 | 亚洲欧美国产视频 | 亚洲在线观看av | 久久婷婷色综合 | 精品爱爱 | 国产手机在线观看视频 | 色狠狠久久av五月综合 | 久久精彩视频 | 日韩狠狠操 | 中文字幕 欧美性 | 日韩欧美区 | 日韩中文字幕一区 | 日韩高清观看 | 国产免费视频一区二区裸体 | 日本韩国精品一区二区在线观看 | 在线观看av中文字幕 | 欧美在线视频一区二区三区 | 网站在线观看日韩 | 一区二区三区四区五区在线 | 天天干天天怕 | 999久久久免费视频 午夜国产在线观看 | 麻豆视频在线免费观看 | 在线观看免费福利 | 久免费视频 | 免费又黄又爽视频 | 久草精品在线观看 | 成人午夜影院在线观看 | 2020天天干天天操 | 中文 一区二区 | 国产午夜在线 | 人人插超碰 | 黄色成人av | 欧美伦理一区 | 色窝资源 | 日韩在线视频国产 | 国产剧情在线一区 | 91新人在线观看 | 一区二区免费不卡在线 | 99久久er热在这里只有精品15 | 国内精品久久久久影院优 | 精品国产一二三 | 日韩高清免费在线 | 久99久精品 | 日韩剧情 | 在线看的毛片 | www毛片com| 香蕉色综合 | 91精品资源 | 亚洲人精品午夜 | 欧美成天堂网地址 | 亚洲色图色 | 91麻豆免费视频 | 国产精品专区在线观看 | 97av免费视频 | 国产精品专区一 | 国产女人18毛片水真多18精品 | 深夜成人av| 中文字幕综合在线 | 欧美精品久久久久久久久久白贞 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 久久久久国产a免费观看rela | 一本一本久久a久久精品牛牛影视 | 亚洲一区久久久 | 亚洲成人av一区 | 免费视频久久久久久久 | 欧美激情综合五月色丁香 | 美女视频是黄的免费观看 | 久久色亚洲 | 日韩色高清 | 六月丁香社区 | 香蕉免费在线 | 国产不卡在线视频 | 亚洲国产精品va在线看 | 国产一区国产精品 | 日本护士撒尿xxxx18 | 中文字幕成人网 | 久久人人爽人人爽人人片av软件 | 亚洲成人家庭影院 | 国产福利小视频在线 | 国产91精品一区二区绿帽 | 91精品办公室少妇高潮对白 | 午夜影院在线观看18 | 日本黄色大片免费 | 国产乱老熟视频网88av | 99精品成人 | 在线视频 日韩 | 亚洲区另类春色综合小说 | 婷婷视频在线观看 | 天天干天天碰 | 毛片视频网址 | 色片网站在线观看 | www夜夜操| 久久久久免费精品国产小说色大师 | 免费a网 | 97成人精品区在线播放 | 国产亚洲视频在线观看 | 日韩xxxx视频 | 99福利片 | 一区二区免费不卡在线 | 日韩有码网站 | 精品久久网站 | 波多野结衣电影久久 | 国产无吗一区二区三区在线欢 | 午夜色性片 | 亚洲视屏在线播放 | 又黄又爽又刺激视频 | 国产免费嫩草影院 | 久久精品在线视频 | 视频一区二区视频 | 黄色大片国产 | 网站在线观看你们懂的 | av片一区二区 | 日韩精品黄 | 丁香婷婷色综合亚洲电影 | 久久精品人 | 三级在线视频观看 | 免费看污片 | 国产色在线观看 | 欧洲亚洲女同hd | 国产中文字幕视频 | 久久精品99国产精品日本 | 精品免费视频. | 国产丝袜 | av中文字幕av | 欧美一级日韩三级 | 日日插日日干 | 国产精品第52页 | a天堂最新版中文在线地址 久久99久久精品国产 | 丁香五月缴情综合网 | 亚洲91中文字幕无线码三区 | 又黄又爽又湿又无遮挡的在线视频 | 国产一区二区手机在线观看 | av一级片网站 | 最新中文字幕在线观看视频 | 国产黄色大片免费看 | avav片| 亚洲国产成人在线播放 | 亚洲精品系列 | 麻豆传媒视频在线免费观看 | 亚洲最大免费成人网 | 麻豆免费视频 | 91高清免费| 激情影院在线 | 国产精品热 | 日韩a欧美| 99久久er热在这里只有精品15 | 337p西西人体大胆瓣开下部 | 免费看黄色小说的网站 | 国产精品毛片一区二区 | 又黄又爽又刺激的视频 | 在线视频婷婷 | 天天操欧美 | 色噜噜狠狠色综合中国 | 国产亚洲综合性久久久影院 | 精品一区二区三区在线播放 | 丁香花在线视频观看免费 | 美女在线免费视频 | 91精品在线观看入口 | 国产伦理精品一区二区 | 欧美整片sss | 国产精品久久久久久久久久了 | 麻豆视频免费观看 | 91麻豆精品国产 | 色婷婷亚洲综合 | 久久综合九色综合久99 | 久久久久中文 | 国产色在线,com | 精品中文字幕在线 | 欧美性色黄大片在线观看 | 欧美91精品久久久久国产性生爱 | 天天干天天操天天拍 | 国产精品久久久久毛片大屁完整版 | 久久在线精品 | 日产乱码一二三区别在线 | 亚洲最新在线视频 | 91黄色免费看 | 国产美女免费观看 | 天天艹日日干 | 精品日韩视频 | 久久99婷婷 | 99视频精品全国免费 | 最新精品国产 | 伊人网综合在线观看 | 日本久久视频 | 国产毛片aaa | 久久久午夜精品理论片中文字幕 | 日韩一级电影在线观看 | 日韩av电影免费在线观看 | 在线91精品 | 二区三区在线视频 | 草久久影院 | 国产成人黄色 | 在线播放 日韩专区 | 午夜国产福利在线 | 日韩在线观看一区二区三区 | 亚洲专区欧美专区 | 在线视频一二三 | 久久亚洲精品国产亚洲老地址 | 这里只有精品视频在线观看 | 天天射天天操天天色 | 六月丁香社区 | av国产在线观看 | 久久久国产影视 | 国产无遮挡又黄又爽馒头漫画 | 园产精品久久久久久久7电影 | 日韩精品无码一区二区三区 | 亚洲精品中文字幕在线 | 久草在线免费资源站 | 天堂在线一区二区 | 国产一区二区三区在线免费观看 | 亚洲精选视频免费看 | 国产成人精品女人久久久 | 六月丁香在线视频 | 国产精品美乳一区二区免费 | 久久久久久蜜桃一区二区 | 狠狠色狠狠色综合日日小说 | 天天操天天舔天天爽 | av先锋中文字幕 | 九九热精品视频在线观看 | 成人午夜电影网 | 欧美伦理一区二区三区 | 国产一级在线看 | 四虎永久免费在线观看 | 四虎在线视频免费观看 | 国产精品一区二区三区观看 | 国产高清精| 久久精品99久久久久久 | 青春草免费视频 | 五月婷丁香网 | 久久69精品久久久久久久电影好 | 亚洲成人av一区二区 | 色综合激情网 | 久久丝袜视频 | 黄av在线 | 国产精品毛片久久蜜 | 亚洲永久精品一区 | 免费在线| 蜜臀av免费一区二区三区 | japanese黑人亚洲人4k | 免费看黄色大全 | 337p日本欧洲亚洲大胆裸体艺术 | 婷婷午夜天 | 亚洲第一中文网 | 久久成人精品电影 | 色婷丁香| 国产一区在线不卡 | 国产欧美精品在线观看 | 欧美一级免费在线 | 日韩av电影免费观看 | 香蕉在线观看 | 九九免费在线看完整版 | 精品国产乱码久久久久久浪潮 | 国产成人精品久久久 | 久久超级碰视频 | 91av视频在线播放 | 黄色日本片 | 精品国产伦一区二区三区免费 | 五月婷婷丁香六月 | 久草在 | 天天干夜夜爱 | 亚洲一区免费在线 | 久久久久久伊人 | 六月丁香激情综合色啪小说 | 精品亚洲一区二区 | 日本xxxxav| 国产精品免费视频久久久 | 五月婷婷欧美视频 | 国产美女视频 | 精品国产精品一区二区夜夜嗨 | 日本激情动作片免费看 | 午夜久久久久 | 麻花豆传媒mv在线观看 | 国产美女视频免费观看的网站 | 国产午夜精品一区二区三区 | av电影在线观看 | 97夜夜澡人人爽人人免费 | 国产视频一级 | 91精品在线免费视频 | 成年人免费在线看 | www.日日日.com | 在线中文字幕观看 | 久久99中文字幕 | 欧美老人xxxx18| 美女视频a美女大全免费下载蜜臀 | 精品黄色片 | 久久久久国产精品免费网站 | 日韩激情片在线观看 | 有没有在线观看av | 久久久福利 | 黄色1级大片 | 久久夜av | 精品久久久久久亚洲 | 黄色免费视频在线观看 | 91精品一区二区三区蜜臀 | 欧美激情精品久久久久久 | 精品在线不卡 | 国产日韩欧美在线免费观看 | 热99在线| 久久精品视频国产 | 99精品欧美一区二区三区 | 久草在| 亚洲精品播放 | 97超视频免费观看 | 蜜臀久久99精品久久久无需会员 | 亚洲最大av网站 | 免费av观看网站 | 色婷婷www| 在线看av的网址 | 欧美国产一区在线 | 国产色a在线观看 | 久草视频免费在线播放 | 国产色秀视频 | 又黄又爽又色无遮挡免费 | 欧美激情va永久在线播放 | 中文字幕在线观看的网站 | 国产又粗又长的视频 | 日本激情中文字幕 | 精品国产一区二区三区四区vr | 中文字幕网站 | 在线观看色网 | 日韩3区 | 开心色插| 亚洲成人资源在线 | 波多野结衣视频一区 | 精品国产1区 | 成人性生爱a∨ | 欧美日韩国产在线 | 99精品免费久久久久久久久日本 | 天堂av在线7 | 美女网站视频久久 | 最新av在线免费观看 | 久久久蜜桃一区二区 | 国产一级电影免费观看 | 99视频 | 久久中国精品 | 国产精品美女毛片真酒店 | 国产成免费视频 | 国产xx视频 | 久久电影日韩 | 欧美日韩性视频在线 | 日韩欧美中文 | 久插视频 | 欧美成人黄色 | 久久国产精品免费视频 | 久久久久久久久网站 | 有码中文在线 | 精品国产欧美一区二区三区不卡 | 夜夜操天天摸 | 国产精品热 | 成人av高清在线 | 国产亚洲人 | 欧美一级电影 | 麻豆视频入口 | 最近中文字幕mv免费高清在线 | 亚洲欧美在线综合 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 中文字幕高清av | 婷婷色站 | 狠狠地日 | av不卡免费看 | 国产精品18p | 国产99久久久国产精品 | 四虎国产精品成人免费4hu | 国产夫妻性生活自拍 | 激情欧美一区二区免费视频 | 国产精品高潮在线观看 | 欧美久久久一区二区三区 | 中文字幕 国产精品 | 日韩一区在线免费观看 | 久久婷婷一区二区三区 | 激情久久久久久久久久久久久久久久 | 欧美最新大片在线看 | 安徽妇搡bbbb搡bbbb | 久久视频在线 | 一区二区三区三区在线 | 国产四虎在线 | 欧美一区二区三区在线视频观看 | 69精品视频在线观看 | 国产精品美女久久久久久久久 | 亚洲第一久久久 | 99久热在线精品视频 | 一区二区在线不卡 | 国产精品久久久久久久久久久不卡 | 精品视频在线播放 | 色香蕉在线视频 | 国产午夜三级一二三区 | 毛片视频电影 | 久久一精品 | 久久亚洲人 | 香蕉色综合 | 亚洲色图激情文学 | 在线观看午夜av | 久久综合中文字幕 | 在线观看视频你懂的 | 午夜久久影视 | 国产爽妇网 | 91九色免费视频 | 亚洲高清国产视频 | 国产剧情av在线播放 | 国产永久免费观看 | 奇米网444 | 西西4444www大胆艺术 | 中文字幕在线免费看 | 国产免费观看久久 | 久久久久女人精品毛片九一 | 成人免费在线视频观看 | a黄色片| 天天天色综合 | 亚洲欧洲精品一区 | 天躁狠狠躁| 久久黄色美女 | 免费网站黄色 | 久久黄色影视 | 黄色片网站av | 国产精品久久久久久久久久久不卡 | 久久久久久久久电影 | 久久久久久久久免费 | 欧美最猛性xxxxx免费 | 日日干网 | 97人人艹 | 欧美日韩国产一二三区 | av在线精品| 日韩欧美一区二区三区免费观看 | 91麻豆精品 | 久久久久电影网站 | 性色av一区二区 | av资源免费观看 | 精品在线观 | 国产视频1 | 99九九热只有国产精品 | 五月天丁香亚洲 | 亚洲成人av电影 | 亚洲 中文 在线 精品 | 一区二区三区精品在线 | 在线色吧| 黄视频色网站 | 最近久乱中文字幕 | 精品国产中文字幕 | 91av九色 | 亚洲自拍av在线 | 免费观看久久久 | 蜜臀av网址 | 99久久久久| 在线亚洲精品 | 日韩 精品 一区 国产 麻豆 | 国产在线观看免费 | 96看片 | 国内精品国产三级国产aⅴ久 | 碰超在线| 国产精品不卡av | 91视频91色 | 一二三久久久 | 狠狠干激情 | 日韩黄色在线观看 | 成人免费视频在线观看 | 日韩av影视在线 | 一本一本久久a久久精品牛牛影视 | 成人一区二区三区在线 | 手机在线中文字幕 | 亚洲h视频在线 | 国产精品嫩草在线 | 国产欧美最新羞羞视频在线观看 | 国产黄色片一级 | 国产精品2018 | 国产一区二区免费 | 亚洲黄色影院 | 精品久久久久久亚洲 | 亚洲精品动漫在线 | 久久免费在线观看视频 | 国产精品99久久久久 | 国产成a人亚洲精v品在线观看 | 亚洲九九爱 | 麻豆影视在线播放 | av在线短片 | 国产精品免费视频观看 | 欧美了一区在线观看 | 色干综合| 高清精品在线 | 精品国产乱码久久久久 | 久久在线免费视频 | 国产精品大片免费观看 | av片在线观看免费 | 久久久久亚洲精品男人的天堂 | 狠狠色丁香婷婷综合橹88 | 色噜噜在线观看 | 久久久 精品 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 久久69精品久久久久久久电影好 | 色鬼综合网 | 欧美动漫一区二区三区 | 91麻豆精品国产91久久久无需广告 | 免费看黄在线观看 | 国产色在线观看 | 日本黄色免费观看 | 久久久久久电影 | 国产亚洲精品综合一区91 | 97夜夜澡人人爽人人免费 | 波多野结衣在线观看一区二区三区 | 免费看黄20分钟 | 2022国产精品视频 | 日韩三级.com| 久久久在线视频 | 91网址在线看 | 欧美亚洲久久 | 91尤物国产尤物福利在线播放 | 日韩免费在线观看视频 | 亚洲无吗视频在线 | 国产资源精品在线观看 | 欧美亚洲xxx | 国产二区免费视频 | 91成人精品在线 | 中文字幕在线观看不卡 | 欧美精品在线观看免费 | 成人av在线一区二区 | 国产一区私人高清影院 | 国产激情电影综合在线看 | 久久伊人婷婷 | 欧美大香线蕉线伊人久久 | 黄色av成人在线观看 | 一区二区不卡视频在线观看 | 日韩av一区二区三区四区 | 久草视频在线播放 | 狠狠黄 | 亚洲欧美日韩精品久久久 |