1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 5124字,需瀏覽 11分鐘

         ·

        2022-07-09 12:33

        日前,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) ?? 和 ??,負標(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ù)字段基本進行了匿名處理:



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



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


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


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



        解題要點


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


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


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

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

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

        通過上述方法可以將數(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)化比賽,因此可以考慮直接使用樹模型來進行建模,具體的步驟為:

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

        ?定義樹模型進行訓(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進行訓(xùn)練;


        瀏覽 65
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲va国产va天堂va久久 | 国产99久精在线观看V18 操你啦在线 | 免费国产91视频 | 欧美肥妇毛多水多 | 找个大鸡巴操我 | 国产精品久久免费观看 | 三级无码视频 | 亚洲无码成人电影 | 国产精品久久久久久亚洲影视 | 国产一级三级 |