lightGBM 集成學習模型 - 以銀行風控業務為例

LightGBM(Light Gradient Boosting Machine)是基于梯度提升決策樹(GBDT)的一種改進實現。其核心思想是通過加法模型(additive model)和前向分布算法(forward distribution algorithm)來逐步構建一個強大的預測模型。下面詳細介紹LightGBM的推導公式及其推導過程,以及它相對于其他模型的優勢。

1. 梯度提升決策樹(GBDT)概述

GBDT是一個集成學習方法,它通過逐步添加決策樹來構建模型,每一步都試圖修正前一步模型的錯誤。其核心思想如下:

1.1 加法模型

加法模型的基本形式是將多個弱學習器(如決策樹)組合起來,以形成一個強學習器。對于一個樣本 ( x i , y i ) (x_i, y_i) (xi?,yi?),模型的預測值 y ^ i \hat{y}_i y^?i?可以表示為:
y ^ i = ∑ m = 1 M f m ( x i ) \hat{y}_i = \sum_{m=1}^{M} f_m(x_i) y^?i?=m=1M?fm?(xi?)
其中, f m ( x ) f_m(x) fm?(x)表示第 m m m個弱學習器。

1.2 損失函數

為了使模型的預測值 y ^ i \hat{y}_i y^?i?接近真實值 y i y_i yi?,我們定義一個損失函數 L ( y , y ^ ) L(y, \hat{y}) L(y,y^?),并希望通過不斷優化該損失函數來改進模型。常見的損失函數包括均方誤差(MSE)和對數損失(Log Loss)。

1.3 梯度提升

梯度提升的思想是在每一步添加一個新的決策樹,使得損失函數在當前模型的基礎上取得最大程度的下降。具體地,假設當前模型的預測值為 y ^ i ( m ? 1 ) \hat{y}_i^{(m-1)} y^?i(m?1)?,則第 m m m步的模型為:
y ^ i ( m ) = y ^ i ( m ? 1 ) + f m ( x i ) \hat{y}_i^{(m)} = \hat{y}_i^{(m-1)} + f_m(x_i) y^?i(m)?=y^?i(m?1)?+fm?(xi?)
其中, f m ( x ) f_m(x) fm?(x)是根據負梯度方向構建的新的決策樹。

2. LightGBM 推導公式

LightGBM在GBDT的基礎上進行了多項改進,其核心推導公式和過程如下:

2.1 基本公式

在每一步迭代中,LightGBM嘗試找到一個新的函數 f m ( x ) f_m(x) fm?(x)來最小化損失函數。假設當前模型的預測值為 y ^ i ( m ? 1 ) \hat{y}_i^{(m-1)} y^?i(m?1)?,則新的預測值為:
y ^ i ( m ) = y ^ i ( m ? 1 ) + η f m ( x i ) \hat{y}_i^{(m)} = \hat{y}_i^{(m-1)} + \eta f_m(x_i) y^?i(m)?=y^?i(m?1)?+ηfm?(xi?)
其中, η \eta η是學習率,控制每次更新的步長。

2.2 目標函數

目標函數包括損失函數和正則化項:
L = ∑ i = 1 n L ( y i , y ^ i ( m ? 1 ) + η f m ( x i ) ) + Ω ( f m ) \mathcal{L} = \sum_{i=1}^{n} L(y_i, \hat{y}_i^{(m-1)} + \eta f_m(x_i)) + \Omega(f_m) L=i=1n?L(yi?,y^?i(m?1)?+ηfm?(xi?))+Ω(fm?)
其中, Ω ( f m ) \Omega(f_m) Ω(fm?)是正則化項,用于控制模型的復雜度,防止過擬合。

2.3 近似優化

為了簡化優化過程,LightGBM采用二階泰勒展開對損失函數進行近似:
L ( y , y ^ + δ ) ≈ L ( y , y ^ ) + g i δ + 1 2 h i δ 2 L(y, \hat{y} + \delta) \approx L(y, \hat{y}) + g_i \delta + \frac{1}{2} h_i \delta^2 L(y,y^?+δ)L(y,y^?)+gi?δ+21?hi?δ2
其中, g i = ? L ( y , y ^ ) ? y ^ g_i = \frac{\partial L(y, \hat{y})}{\partial \hat{y}} gi?=?y^??L(y,y^?)?是損失函數的一階導數(梯度), h i = ? 2 L ( y , y ^ ) ? y ^ 2 h_i = \frac{\partial^2 L(y, \hat{y})}{\partial \hat{y}^2} hi?=?y^?2?2L(y,y^?)?是損失函數的二階導數(Hessian矩陣)。

于是,目標函數可以近似為:
L ≈ ∑ i = 1 n [ L ( y i , y ^ i ( m ? 1 ) ) + g i f m ( x i ) + 1 2 h i f m ( x i ) 2 ] + Ω ( f m ) \mathcal{L} \approx \sum_{i=1}^{n} \left[ L(y_i, \hat{y}_i^{(m-1)}) + g_i f_m(x_i) + \frac{1}{2} h_i f_m(x_i)^2 \right] + \Omega(f_m) Li=1n?[L(yi?,y^?i(m?1)?)+gi?fm?(xi?)+21?hi?fm?(xi?)2]+Ω(fm?)

2.4 樹結構的優化

LightGBM通過構建樹結構來擬合 η f m ( x i ) \eta f_m(x_i) ηfm?(xi?)。樹結構的優化包括選擇最佳分裂點、計算葉子節點的權重等。具體來說,在每個節點處,LightGBM選擇使目標函數下降最多的分裂點,并計算分裂后的葉子節點的最佳權重。

3. LightGBM 相對于其他模型的優勢

3.1 高效性
  • 基于直方圖的算法:LightGBM使用基于直方圖的算法,將連續特征離散化為直方圖,以減少內存使用和計算量。
  • Leaf-wise生長策略:與傳統的層次生長策略不同,LightGBM采用葉子優先生長策略,能更快地降低損失函數,從而提高訓練效率和模型精度。
3.2 可擴展性
  • 支持并行學習:LightGBM支持特征并行和數據并行,能在多核CPU或分布式環境下高效運行。
  • 處理大規模數據:由于其高效的內存管理和計算策略,LightGBM能處理數百萬行甚至數億行的數據集。
3.3 模型性能
  • 處理類別不平衡:LightGBM通過設置正負樣本的權重或使用平衡正負樣本的損失函數,能有效處理類別不平衡問題。
  • 自動捕捉特征交互:由于樹模型的天然優勢,LightGBM能自動捕捉特征之間的復雜交互關系,而無需手動特征工程。

LightGBM(Light Gradient Boosting Machine)是一種高效的梯度提升框架,廣泛應用于大規模數據集的機器學習任務。由于其高性能和可擴展性,它在金融行業中非常受歡迎,特別是在信用評分和風險管理任務中。

4.在銀行風控中的應用

4.1 問題背景

銀行需要評估借款人違約的風險(即借款人未能按時還款)。主要目標是預測違約的可能性,這需要通過分析歷史數據來構建預測模型,從而評估申請人的信用狀況。

4.2 數據集

一個典型的銀行風控數據集可能包括:

  • 客戶人口統計信息:年齡、收入、就業狀況等。
  • 信用歷史:過去貸款的數量、還款歷史、違約記錄等。
  • 貸款詳情:貸款金額、期限、用途等。
  • 財務比率:債務收入比、信用利用率等。
4.3 特征工程和預處理

需要仔細設計和預處理關鍵特征:

  • 處理缺失值:用均值/中值替換缺失值或使用插補技術。
  • 編碼類別變量:使用獨熱編碼或標簽編碼。
  • 歸一化:將數值特征縮放到標準范圍。
  • 特征工程:根據領域知識創建新特征,如交互項或聚合特征。
4.4 實施步驟

步驟 1: 安裝 LightGBM

!pip install lightgbm

步驟 2: 加載和準備數據

import lightgbm as lgb
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score# 加載數據集
data = pd.read_csv('credit_data.csv')# 數據預處理
# 假設 'target' 是我們要預測的列
X = data.drop('target', axis=1)
y = data['target']# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

若沒有現成的數據集,可以用下面的代碼構造一個

import pandas as pd
import numpy as np# 生成隨機數據
np.random.seed(42)
n_samples = 1000# 客戶人口統計信息
age = np.random.randint(18, 70, size=n_samples)
income = np.random.randint(20000, 150000, size=n_samples)
employment_status = np.random.choice(['employed', 'self-employed', 'unemployed'], size=n_samples, p=[0.7, 0.2, 0.1])# 信用歷史
num_past_loans = np.random.randint(0, 10, size=n_samples)
repayment_history = np.random.choice(['good', 'average', 'poor'], size=n_samples, p=[0.7, 0.2, 0.1])
default_history = np.random.randint(0, 5, size=n_samples)# 貸款詳情
loan_amount = np.random.randint(1000, 50000, size=n_samples)
loan_term = np.random.choice([12, 24, 36, 48, 60], size=n_samples, p=[0.2, 0.2, 0.2, 0.2, 0.2])
loan_purpose = np.random.choice(['home improvement', 'debt consolidation', 'business', 'personal', 'education'], size=n_samples)# 財務比率
debt_to_income_ratio = np.round(np.random.uniform(0.1, 0.6, size=n_samples), 2)
credit_utilization = np.round(np.random.uniform(0.1, 0.9, size=n_samples), 2)# 目標變量:違約(1)或未違約(0)
target = np.random.choice([0, 1], size=n_samples, p=[0.85, 0.15])# 創建數據框
data = pd.DataFrame({'age': age,'income': income,'employment_status': employment_status,'num_past_loans': num_past_loans,'repayment_history': repayment_history,'default_history': default_history,'loan_amount': loan_amount,'loan_term': loan_term,'loan_purpose': loan_purpose,'debt_to_income_ratio': debt_to_income_ratio,'credit_utilization': credit_utilization,'target': default  # 目標變量
})# 顯示前幾行數據
print(data.head())# 保存數據集到CSV文件
data.to_csv('credit_data.csv', index=False)

步驟 3: 創建 LightGBM 數據集

train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

步驟 4: 定義參數

params = {'boosting_type': 'gbdt','objective': 'binary','metric': 'auc','num_leaves': 31,'learning_rate': 0.05,'feature_fraction': 0.9
}

步驟 5: 訓練模型

bst = lgb.train(params, train_data, num_boost_round=100, valid_sets=[test_data], early_stopping_rounds=10)

步驟 6: 進行預測和評估

y_pred = bst.predict(X_test, num_iteration=bst.best_iteration)
auc_score = roc_auc_score(y_test, y_pred)
print(f'AUC Score: {auc_score}')
6. 結果解釋

AUC(曲線下面積)得分是二分類問題中常用的評估指標。它衡量模型區分不同類別的能力。得分越接近1,模型表現越好。

7. 特征重要性

理解哪些特征最重要可以提供關于影響風險的因素的見解。

import matplotlib.pyplot as pltlgb.plot_importance(bst, max_num_features=20)
plt.show()

常見挑戰和解決方案

  1. 數據不平衡:在風險建模中,違約的數量通常遠低于非違約數量。可以使用SMOTE(合成少數過采樣技術)、調整類別權重或使用分層抽樣來解決這種不平衡問題。

  2. 過擬合:LightGBM 強大但容易過擬合。使用交叉驗證、設置適當的 num_leaves 和使用 early_stopping_rounds 等技巧可以防止過擬合。

  3. 特征交互:LightGBM 能夠自動捕捉特征交互,但如果已知領域特定的交互,應手動添加這些特征以提高模型性能。

結論

LightGBM 是一個構建銀行風險評估模型的強大工具。其速度和效率,加上處理大型復雜數據集的能力,使其非常適合實時風險評分和決策。通過仔細準備數據、調整模型和解釋結果,銀行可以顯著提升其風險管理能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16320.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16320.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16320.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt pro工程文件編寫匯總(區分debug和release、32位和64位的方法,編譯輸出目錄等)

前言: 從事qt開發已經好幾年了,但有關pro編寫的一些細節問題一直沒有一個很好的梳理匯總——因為實際工作開發中,往往只需要編譯特定版本的軟件(例如32位release版本),項目創建好后并設置好編譯路徑&#x…

ML307R OpenCPU GPIO使用

一、GPIO使用流程圖 二、函數介紹 三、GPIO 點亮LED 四、代碼下載地址 一、GPIO使用流程圖 這個圖是官網找到的,ML307R GPIO引腳電平默認為1.8V,需注意和外部電路的電平匹配,具體可參考《ML307R_硬件設計手冊_OpenCPU版本適用.pdf》中的描…

零基礎PHP入門(一)選擇IDE和配置環境

配置環境 官網下載安裝包,windows https://windows.php.net/download#php-8.3 我是下載的最新版,也可以切換其他版本 https://windows.php.net/downloads/releases/archives/ 下載好壓縮文件后,雙擊解壓到一個目錄 D:\soft\php 復制ph…

成都愛爾眼科醫院《中、歐國際近視手術大數據白皮書2.0》解讀會圓滿舉行

2024年5月12日,愛爾眼科聯合中國健康促進基金會健康傳播與促進專項基金、新華社新媒體中心與中南大學愛爾眼科研究院、愛爾數字眼科研究所重磅發布《中、歐國際近視手術大數據白皮書2.0》。這是繼2021、2022年在國內相繼發布《國人近視手術白皮書》、《2022中、歐近…

Ubuntu系統初始化相關配置

目錄 Ubuntu文件傳輸: ubuntu怎么打開word:安裝wps(應用中心搜索) Ubuntu安裝annoconda

模型蒸餾筆記

文章目錄 一、什么是模型蒸餾二、如何蒸餾三、實踐四、參考文獻 一、什么是模型蒸餾 Hinton在NIPS2014提出了知識蒸餾(Knowledge Distillation)的概念,旨在把一個大模型或者多個模型ensemble學到的知識遷移到另一個輕量級單模型上&#xff0…

【SpringBoot】SpringBoot中防止接口重復提交(單機環境和分布式環境)

📝個人主頁:哈__ 期待您的關注 目錄 🌼前言 🔒單機環境下防止接口重復提交 📕導入依賴 📂項目結構 🚀創建自定義注解 ?創建AOP切面 🚗創建Conotroller 💻分布…

構建高效的在線培訓機構CRM應用架構實踐

在當今數字化時代,在線培訓已成為教育行業的重要趨勢之一。為了提供更好的學習體驗和管理服務,在線培訓機構需要構建高效的CRM(Customer Relationship Management)應用架構。本文將探討在線培訓機構CRM應用架構的設計與實踐。 一、…

PTA 6-3 入侵者圍剿第二關3情報解密

經過上一步已經將2個分隊得到的秘密情報合并到一起,并進行了信息去重。接下來,經過情報的分析,發現情報進行加密的方式,將鏈表從正中間斷開,然后后面的鏈表全部接到前面,輸出來的次序就是敵方的武器發射次序…

綠色智能:AI機器學習在環境保護中的深度應用與實踐案例

🧑 博主簡介:阿里巴巴嵌入式技術專家,深耕嵌入式人工智能領域,具備多年的嵌入式硬件產品研發管理經驗。 📒 博客介紹:分享嵌入式開發領域的相關知識、經驗、思考和感悟,歡迎關注。提供嵌入式方向…

在vps的centos系統中用Python和青龍檢測網頁更新

環境:vps,centos7,python3.8.10,青龍面板(用寶塔安裝) 任務:用python代碼,監控一個網站頁面是否有更新(新帖子),若有,則提醒&#xf…

【數據結構】二叉樹的認識與實現

目錄 二叉樹的概念: 二叉樹的應用與實現: 二叉樹實現接口: 通過前序遍歷的數組"ABD##E#H##CF##G##"構建二叉樹 二叉樹節點個數?編輯 二叉樹葉子節點個數 二叉樹第k層節點個數 二叉樹查找值為x的節點?編輯 二叉樹前序遍…

XSS+CSRF攻擊

一、前言 在DVWA靶場的XSS攻擊下結合CSRF攻擊完成修改密碼 也就是在具有XSS漏洞的情況下實施CSRF攻擊 二、實驗 環境配置與上一篇博客一致,有興趣可以參考CSRF跨站請求偽造實戰-CSDN博客 首先登錄DVWA,打開XSS模塊 name隨便輸入,message…

嵌入式0基礎開始學習 Ⅲ Linux基礎(1)Linux基本命令

1.APT unbuntu中功能最強大的命令行軟件包管理工具, 用來獲取,安裝,編譯,卸載,查詢軟件包。 工作原理; /etc/apt/sources.list -> 文件 用來指針ubuntu的軟件源服務器…

HQL面試題練習 —— 合并數據

題目來源:京東 目錄 1 題目2 建表語句3 題解 1 題目 已知有數據 A 如下,請分別根據 A 生成 B 和 C。 數據A ------------ | id | name | ------------ | 1 | aa | | 2 | aa | | 3 | aa | | 4 | d | | 5 | c | | 6 | aa…

Android 使用 ActivityResultLauncher 申請權限

前面介紹了 Android 運行時權限。 其中,申請權限的步驟有些繁瑣,需要用到:ActivityCompat.requestPermissions 函數和 onRequestPermissionsResult 回調函數,今天就借助 ActivityResultLauncher 來簡化書寫。 步驟1:創…

基于FPGA的VGA協議實現

文章目錄 一、VGA介紹1.1 VGA原理1.2VGA電路 二、配置三、實現3.1 字符顯示3.2圖片顯示 四、代碼4.1.vga驅動模塊4.2數據模塊4.3按鍵消抖模塊4.4頂層模塊4.5TCL引腳綁定 參考 一、VGA介紹 1.1 VGA原理 VGA接口 最主要的幾根線: VGA其實就是相當于一塊芯片&#…

gcc g++不同版本切換命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切換 gcc/g 版本_ubuntu降低g版本-CSDN博客

YOLOv10嘗鮮測試五分鐘極簡配置

最近清華大學團隊又推出YOLOv10,真是好家伙了。 安裝: pip install supervision githttps://github.com/THU-MIG/yolov10.git下載權重:https://github.com/THU-MIG/yolov10/releases/download/v1.0/yolov10n.pt 預測: from ult…

Superset,基于瀏覽器的開源BI工具

BI工具是數據分析的得力武器,目前市場上有很多BI軟件,眾所周知的有Tableau、PowerBI、Qlikview、帆軟等,其中大部分是收費軟件或者部分功能收費。這些工具一通百通,用好一個就夠了,重要的是分析思維。 我一直用的Tabl…