<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【baseline】Kaggle新賽!信用違約預(yù)測大賽

          共 5124字,需瀏覽 11分鐘

           ·

          2022-07-05 00:50

          日前,Kaggle發(fā)布了American Express - Default Prediction 信用違約預(yù)測大賽。要求參賽者:

          運用機器學(xué)習(xí)技能來預(yù)測信用違約


          這是一個金融風(fēng)控場景下的結(jié)構(gòu)化數(shù)據(jù)挖掘任務(wù),對本領(lǐng)域感興趣的小伙伴,千萬不要錯過。


          下面是本場比賽的baseline。


          加我回復(fù)“運通”獲取baseline+數(shù)據(jù)集




          01
          PART
          賽題分析+baseline


          1、賽題鏈接

          https://www.kaggle.com/competitions/amex-default-prediction


          2、賽題描述

          信用違約預(yù)測是管理消費貸款業(yè)務(wù)風(fēng)險的核心。信用違約預(yù)測允許貸方優(yōu)化貸款決策,從而帶來更好的客戶體驗和穩(wěn)健的商業(yè)經(jīng)濟。當(dāng)前的模型可以幫助管理風(fēng)險。但是有可能創(chuàng)建更好的模型,這些模型的性能優(yōu)于當(dāng)前使用的模型。美國運通是一家全球綜合支付公司。作為世界上最大的支付卡發(fā)行商,他們?yōu)榭蛻籼峁┴S富生活和建立商業(yè)成功的產(chǎn)品、見解和體驗。


          在本次比賽中,您將運用機器學(xué)習(xí)技能來預(yù)測信用違約。具體來說,您將利用工業(yè)規(guī)模的數(shù)據(jù)集來構(gòu)建機器學(xué)習(xí)模型,以挑戰(zhàn)生產(chǎn)中的當(dāng)前模型。訓(xùn)練、驗證和測試數(shù)據(jù)集包括時間序列行為數(shù)據(jù)和匿名客戶檔案信息。您可以自由探索任何技術(shù)來創(chuàng)建最強大的模型,從創(chuàng)建特征到在模型中以更有機的方式使用數(shù)據(jù)。


          3、評價指標(biāo)


          本次比賽的評估指標(biāo) ?? 是排名排序的兩個度量的平均值:歸一化基尼系數(shù) ?? 和 4% 的違約率 ??組成:.

          對于子指標(biāo) ?? 和 ??,負(fù)標(biāo)簽的權(quán)重為 20 以調(diào)整下采樣。計算過程可以從這里找到

          https://www.kaggle.com/code/inversion/amex-competition-metric-python


          4、數(shù)據(jù)介紹


          本次比賽的目的是根據(jù)客戶每月的客戶資料預(yù)測客戶未來不償還信用卡余額的概率。目標(biāo)二元變量是通過觀察最近一次信用卡賬單后 18 個月的績效窗口來計算的,如果客戶在最近一次賬單日后的 120 天內(nèi)未支付到期金額,則將其視為違約事件。


          該數(shù)據(jù)集包含每個客戶在每個報表日期的匯總配置文件特征。特征通過了匿名和歸一化處理,特征可以分為以下類別:


          D_* = 拖欠變量
          S_* = 支出變量
          P_* = 付款變量
          B_* = 平衡變量
          R_* = 風(fēng)險變量


          加我回復(fù)“運通”獲取baseline+數(shù)據(jù)集


          其中這些變量為類別變量:

           ['B_30', 'B_38', 'D_114', 'D_116', 'D_117', 'D_120', 'D_126', 'D_63', 'D_64', 'D_66', 'D_68']

          是為每個customer_ID預(yù)測未來付款違約的概率(目標(biāo) = 1),每個文件內(nèi)容的介紹如下:


          train_data.csv - 每個 customer_ID 具有多個日期的訓(xùn)練數(shù)據(jù)

          train_labels.csv - 每個 customer_ID 的目標(biāo)標(biāo)簽

          test_data.csv - 對應(yīng)的測試數(shù)據(jù);您的目標(biāo)是預(yù)測每個 customer_ID 的目標(biāo)標(biāo)簽

          sample_submission.csv - 格式正確的示例提交文件


          數(shù)據(jù)分析


          首先我們來查看下數(shù)據(jù)集,在數(shù)據(jù)集中的數(shù)據(jù)字段基本進(jìn)行了匿名處理:



          在數(shù)據(jù)集中也有較多的字段包含了缺失值:



          比賽標(biāo)簽分布中違約用戶占比較少,類別分布比較均衡:


          接下來我們可以查看字段按照分類之后的統(tǒng)計,如下圖所示:


          進(jìn)一步我們也可以統(tǒng)計字段與標(biāo)簽的相關(guān)性:



          解題要點


          數(shù)據(jù)壓縮方法


          由于數(shù)據(jù)集原始數(shù)據(jù)集文件較大(50GB左右),直接進(jìn)行讀取并進(jìn)行分析并不可取。在進(jìn)行送入模型進(jìn)行之前可以考慮對數(shù)據(jù)值進(jìn)行壓縮,具體的壓縮方法包括:


          ?將數(shù)據(jù)集中的類別字段,使用Pandas的category進(jìn)行代替;

          ?將數(shù)據(jù)集中的數(shù)值字段,使用flaoat16和float32代替原始的float64;

          ?將數(shù)據(jù)集使用feather或者parquet格式進(jìn)行存儲;

          通過上述方法可以將數(shù)據(jù)集壓縮到總共5GB左右,接下來就可以嘗試后續(xù)的建模過程。


          數(shù)據(jù)集壓縮和轉(zhuǎn)換的過程可以參考:

          https://www.kaggle.com/code/abdellatifsassioui/create-pickeld-data-from-50-gb-to-6gb


          加我回復(fù)“運通”獲取baseline+數(shù)據(jù)集


          樹模型模型


          本次賽題是一個典型的匿名結(jié)構(gòu)化比賽,因此可以考慮直接使用樹模型來進(jìn)行建模,具體的步驟為:

          ?對數(shù)據(jù)集進(jìn)行處理

          ?定義樹模型進(jìn)行訓(xùn)練

          ?五折交叉完成預(yù)測


          定義模型參數(shù):


          # XGB MODEL PARAMETERS xgb_parms = {      'max_depth':4,      'learning_rate':0.05,      'subsample':0.8,     'colsample_bytree':0.6,      'eval_metric':'logloss',     'objective':'binary:logistic',     'tree_method':'gpu_hist',     'predictor':'gpu_predictor',     'random_state':SEED }


          模型多折交叉訓(xùn)練:


          skf = KFold(n_splits=FOLDS) for fold,(train_idx, valid_idx) in enumerate(skf.split(             train, train.target )):              # TRAIN, VALID, TEST FOR FOLD K     Xy_train = IterLoadForDMatrix(train.loc[train_idx], FEATURES, 'target')     X_valid = train.loc[valid_idx, FEATURES]     y_valid = train.loc[valid_idx, 'target']          dtrain = xgb.DeviceQuantileDMatrix(Xy_train, max_bin=256)     dvalid = xgb.DMatrix(data=X_valid, label=y_valid)          # TRAIN MODEL FOLD K     model = xgb.train(xgb_parms,                  dtrain=dtrain,                 evals=[(dtrain,'train'),(dvalid,'valid')],                 num_boost_round=9999,                 early_stopping_rounds=100,                 verbose_eval=100)      model.save_model(f'XGB_v{VER}_fold{fold}.xgb')          # GET FEATURE IMPORTANCE FOR FOLD K     dd = model.get_score(importance_type='weight')     df = pd.DataFrame({'feature':dd.keys(),f'importance_{fold}':dd.values()})     importances.append(df)                  # INFER OOF FOLD K     oof_preds = model.predict(dvalid)     acc = amex_metric_mod(y_valid.values, oof_preds)     print('Kaggle Metric =',acc,'\n')          # SAVE OOF     df = train.loc[valid_idx, ['customer_ID','target'] ].copy()     df['oof_pred'] = oof_preds     oof.append( df )          del dtrain, Xy_train, dd, df     del X_valid, y_valid, dvalid, model     _ = gc.collect()


          深度學(xué)習(xí)模型


          由于本次比賽數(shù)據(jù)量比較多,因此深度學(xué)習(xí)模型也可以考慮。深度學(xué)習(xí)模型主要需要調(diào)整網(wǎng)絡(luò)結(jié)構(gòu),下面是一個基礎(chǔ)的全連接網(wǎng)絡(luò)代碼:


          def my_model(n_inputs=len(train.columns)):     activation = 'swish'     l1 = 1e-7     l2 = 4e-4     inputs = Input(shape=(n_inputs, ))     x0 = BatchNormalization()(inputs)     x0 = Dense(256,                 kernel_regularizer=tf.keras.regularizers.L1L2(l1=l1,l2=l2),               activation=activation,              )(x0)     x0 = Dropout(0.1)(x0)     x = Dense(64,                kernel_regularizer=tf.keras.regularizers.L1L2(l1=l1,l2=l2),               activation=activation,              )(x0)     x = Dense(64,                kernel_regularizer=tf.keras.regularizers.L1L2(l1=l1,l2=l2),               activation=activation,              )(x)     x = Concatenate()([x, x0])     x = Dropout(0.1)(x)     x = Dense(16,                kernel_regularizer=tf.keras.regularizers.L1L2(l1=l1,l2=l2),               activation=activation,              )(x)     x = Dense(1,               activation='sigmoid',              )(x)     model = Model(inputs, x)     model.compile(optimizer=tf.keras.optimizers.Nadam(learning_rate=LR_START,                                                       clipvalue= 0.5,                                                       clipnorm = 1.0 # prevent gradient explosion                                                      ),                   loss=tf.keras.losses.BinaryCrossentropy(),                  )     del x,x0     return model



          加我回復(fù)“運通”獲取baseline+數(shù)據(jù)集


          上分路線


          本次比賽是一個典型的匿名結(jié)構(gòu)化比賽,因此主要的關(guān)注點可以放在模型結(jié)構(gòu)和模型集成。

          ? 可以優(yōu)先調(diào)整每額每個模型,樹模型和深度學(xué)習(xí)模型都可以取得0.796左右的精度;

          ? 增加每個模型的隨機性,大量使用bagging進(jìn)行訓(xùn)練;

          瀏覽 74
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操b在线看 | 无码视频中文字幕 | 国国产精品美女 | 大香蕉伊人成人网 | 国产乱╳╳A |