1. 程式人生 > 實用技巧 >建模常用的自定義函式(ks,auc等)

建模常用的自定義函式(ks,auc等)

1.統計拆分訓練集測試集之後的分佈

def summary(data_train, data_test, y):
    '''
    函式目標:統計資料拆分訓練集和測試集之後的分佈(如樣本數量,壞賬率之類的)
    變數:
    data_train:訓練集(包括label)
    data_test:測試集(包括label),如果label是單獨的,需要先合併,但是也可以直接(data_train, data_test = train_test_split()
    y:label的columns_name
    返回值:
    一個df
    '''

    summary 
= pd.DataFrame( { '樣本數': [len(data_train), len(data_test)], '壞賬數': [data_train[y].sum(), data_test[y].sum()], '壞賬率': [ round(data_train[y].mean(), 4), round(data_test[y].mean(), 4) ], }, index
=['訓練集', '測試集'] )[['樣本數', '壞賬數', '壞賬率']] summary.index.name = '資料集' return summary

2.計算ks

def ks(self, data, y):
    '''
    目標:計算出分類模型的ks值
    變數:
    self:模型fit(x,y),如(self=tree.fit(x,y))
    data:一般是訓練集(不包括label)或者是測試集(也是不包括label)
    y:label的column_name 
    返回:訓練集(或者測試集)的ks值

    
''' p = self.predict(data) fpr, tpr, p_threshold = metrics.roc_curve(data[y], p, drop_intermediate=False, pos_label=1) df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold}) df.loc[0, 'p'] = max(p) ks = (df['tpr'] - df['fpr']).max() return ks

3.計算auc