天天看點

“梧桐杯”中國移動大資料應用創新大賽 - 智慧金融賽道Baseline

老肥今天和大家分享的是“梧桐杯”中國移動大資料應用創新大賽的智慧金融賽道的Baseline方案(抱歉鴿了很久),線上成績為0.9438,處于一個相對靠前的排名位置。

賽題介紹

背景

在金融領域,活躍着一批“職業羊毛黨”,他們通過套現、套利行為大肆牟利,影響普通使用者本應享有的權益。他們制作各種自動、半自動的黑産工具,如自動注冊機、刷單自動機、短信代接平台、分身軟體、貓池等,并捆綁手機卡、銀行卡或通過第三方平台交易完成套現,進而實作“薅羊毛”活動,自身獲利的同時對商家、銀行、平台、營運商的利益造成損失。如何從普通使用者中有效鑒别出羊毛黨,進而提前進行防範,在實際商業應用中有着重要的意義。

任務

防羊毛黨評分模型旨在從普通使用者中區分出羊毛黨使用者号碼,本次挑戰賽設定了更具挑戰性的任務,相比其他競賽,本次競賽所提供的訓練字段相對較少,總體為低資源的競賽任務,具體包含:

初賽——利用使用者通信、流量、app使用等行為資料識别真實羊毛黨群體,即簡單的二分類問題,是羊毛黨,或者不是羊毛黨。

資料

每一個号碼樣本包含兩個月的資料,由加密過的手機号碼和月份共同構成主鍵。包含兩個基礎特征以及多個月消費特征、APP通路特征、短信特征。訓練資料是一月份以及二月份的特征,測試資料為三月份以及四月份的特征。

評價名額

評價名額為标準的F1 score, 我們可以在這個名額上做很多後處理來提升成績。

Baseline方案

本方案未做細緻特征工程,非常簡單的Baseline,将特征分為數值類型的和類别特征。

data = pd.read_csv('data/data_a.csv')
# 将\N替換為空值
data.replace('\\N', np.NaN, inplace=True)
# 數值特征
f_features = ['gprs_fee', 'overrun_flux_fee', 'out_actvcall_dur', 'actvcall_fee',
       'out_activcall_fee', 'monfix_fee', 'gift_acct_amt', 'call_cnt',
       'up_flux', 'down_flux', 'p2psms_up_cnt',
       'p2psms_cmnct_fee', 'p2psms_pkg_fee']
data[f_features] = data[f_features].astype('float')
# 類别特征
cat_cols = ['if_family', 'if_group', 'sms_inpkg_ind']
data.sort_values('month', inplace=True)
data.drop_duplicates('phone', inplace=True)
data.reset_index(drop=True, inplace=True)
data[cat_cols] = data[cat_cols].astype('category')           

并且隻選擇了一月份的資料來做訓練資料,鏡像地選用測試集的三月份資料作為測試集資料,使用分層五折進行lgb模型的訓練,模型的參數使用祖傳參數,評價标準為binary_error生成預測檔案。

def find_best_t(y_pred, y_true):
    best_score = f1_score(y_true, np.where(y_pred >= 0.5, 1, 0))
    t = 0.5
    for i in tqdm(range(300, 700)):
        current_score = f1_score(y_true, np.where(y_pred >= i / 1000, 1, 0))
        if current_score > best_score:
            best_score = current_score
            t = i / 1000
            print(f'best score: {best_score}, best t: {t}')
    return t

t = 0.5
t = find_best_t(oof_lgb, y)           

對于該二分類問題,我們還可以通過調整門檻值的後處理方法來提分,選擇本地驗證集最高f1_score的門檻值, 在預測時采用相同的門檻值(原來門檻值為0.5),大于該門檻值取1,小于該門檻值則取0。

繼續閱讀