科普:WOE編碼與One-Hot編碼

WOE編碼是業務邏輯與統計建模的結合,適合強業務導向的場景;
One-Hot編碼是數據驅動的特征工程,適合追求模型性能的場景。

編碼方式核心價值典型案例
WOE編碼保留變量預測能力,適配線性模型銀行違約預測邏輯回歸
One-Hot編碼釋放特征空間表達能力,適配非線性模型圖像分類神經網絡

一、WOE編碼(Weight of Evidence)

WOE 是一種用于將分類變量轉化為連續變量的編碼方法,主要用于金融風控、信用評分等領域。它通過計算每個類別對目標變量(如違約、欺詐)的預測能力,將分類特征轉化為帶有業務含義的數值,從而增強模型的解釋性和預測效果。

WOE的計算基于以下公式:
WOE = ln(好樣本比例 / 壞樣本比例)

  • 好樣本:目標變量為正例(如未違約、正常用戶)。
  • 壞樣本:目標變量為負例(如違約、欺詐用戶)。

以“性別”特征為例,假設目標是預測用戶是否違約:

性別總樣本數違約樣本數未違約樣本數違約率(壞樣本比例)未違約率(好樣本比例)WOE值
1000150850150/1000 = 0.15850/1000 = 0.85ln(0.85/0.15) ≈ 1.76
8008072080/800 = 0.10720/800 = 0.90ln(0.90/0.10) ≈ 2.19

結論

  • 女性的WOE值更高(2.19 > 1.76),表明女性用戶違約概率更低,對目標變量的預測能力更強。
  • 最終,“性別”特征被轉化為兩個WOE值(男→1.76,女→2.19)。
WOE的作用
  1. 處理高基數特征
    對于類別較多的變量(如城市、職業),WOE可通過合并低預測能力的類別減少維度。
  2. 業務解釋性
    WOE值直接反映特征與目標變量的相關性,例如:
    • 正WOE值:類別對應的好樣本比例更高(如女性未違約率高)。
    • 負WOE值:類別對應的壞樣本比例更高(如某職業違約率高)。
  3. 與IV值結合
    **信息值(IV)**可基于WOE計算,用于評估特征的整體預測能力。

業務邏輯、提升模型效果 | 依賴目標變量、需分箱處理 | 金融風控、信用評分 |

實際應用注意事項
  1. 分箱處理
    連續變量需先分箱(如將年齡劃分為“<25”“25-40”“>40”),再計算WOE。
  2. 處理極端情況
    若某類別無好樣本或壞樣本(如違約率為0%或100%),需通過平滑處理(如加1)避免無窮大。
  3. 模型適配
    WOE編碼后的變量適合邏輯回歸、決策樹等模型,但需注意異常值對線性模型的影響。

通過WOE編碼,分類特征可更有效地融入模型,同時保持業務含義的可解釋性。

二、差異對比表

對比維度WOE編碼One-Hot編碼
編碼原理基于分箱后正負樣本比例計算(WOE公式:ln(好樣本率/壞樣本率))將每個類別轉換為獨立的0/1二值特征
適用模型邏輯回歸、線性模型樹模型(決策樹、隨機森林)、神經網絡、支持向量機
特征維度維度不變(每個特征1個WOE值)維度膨脹(n個類別→n個特征)
信息保留保留變量的預測能力(與目標變量相關性)僅保留類別存在性,丟失順序和數值信息
業務解釋性可解釋性強(WOE值大小直接反映風險程度)可解釋性弱(需結合模型特征重要性分析)
計算復雜度需分箱并計算統計量(需目標變量信息)簡單直接(無需目標變量)
稀疏性無稀疏問題(單值連續特征)高稀疏性(大量0值)
單調性要求強制單調性(分箱需滿足WOE單調)無要求
二、典型應用場景對比
  1. WOE編碼的典型場景

    • 銀行風控模型:將年齡分箱后計算WOE值,直接輸入邏輯回歸模型
      # WOE計算示例
      def calculate_woe(bin, target):good = target[bin].mean()bad = 1 - goodreturn np.log(good / bad) if bad !=0 else 0
      
    • 優勢:保留變量與違約率的單調關系,提升模型穩定性
  2. One-Hot編碼的典型場景

    • 電商推薦系統:將用戶省份轉換為One-Hot特征,輸入神經網絡
      # One-Hot轉換示例
      df = pd.get_dummies(df, columns=['省份'])
      
    • 優勢:允許模型自動學習省份與購買行為的非線性關系

三、關鍵選擇建議

  1. 模型類型決定編碼方式

    • 線性模型(邏輯回歸):必須使用WOE編碼(保持線性關系)
    • 樹模型/神經網絡:優先使用One-Hot編碼(處理高維稀疏數據能力強)
  2. 數據特性的影響

    • 高基數特征(如IP地址):One-Hot會導致維度爆炸,需結合特征選擇
    • 有序特征(如收入等級):WOE編碼能保留順序信息,優于One-Hot
  3. 業務需求的權衡

    • 需模型可解釋性:WOE編碼的系數可直接解讀(如WOE=0.5表示該箱風險比基準高50%)
    • 追求預測精度:對于樹模型,One-Hot可能比WOE效果更好(但需注意過擬合)
四、混合使用策略
  • 分箱后同時輸出WOE和One-Hot
    # 對年齡特征同時生成WOE和One-Hot
    df['年齡_WOE'] = woe_encoder.transform(df[['年齡']])
    df = pd.concat([df, pd.get_dummies(df['年齡區間'])], axis=1)
    
  • 適用場景:模型融合(如邏輯回歸與隨機森林的stacking)
五、One-Hot編碼及其它啞變量

One-Hot編碼生成的二進制特征被稱為啞變量(Dummy Variables,python程序中的get_dummies),源于其“替代”原分類變量的作用。這些變量本身沒有數值意義,僅作為類別存在的標記符號。例如:

  • 將“性別”(男/女)轉換為兩個啞變量:[男=1, 女=0][男=0, 女=1]
  • 啞變量名稱中的“啞”(Dummy)強調其無實際數值含義,僅用于模型識別不同類別。

除One-Hot編碼外,常見啞變量技術還包括:

1. 虛擬變量(Dummy Variables)
  • 核心差異:僅創建 k-1 個變量(排除一個基準類別),避免多重共線性。
  • 適用場景:傳統統計模型(如線性回歸)。
  • 示例:將“學歷”(高中/本科/碩士)轉換為兩個啞變量:
    # 基準類別為“高中”
    本科=1, 碩士=0 → 本科
    本科=0, 碩士=1 → 碩士
    
2. 效應編碼(Effect Coding)
  • 編碼規則:基準類別用 -1,其他類別用 1
  • 應用場景:方差分析(ANOVA)中對比組效應。
  • 示例
    # 基準類別為“高中”
    本科=1, 碩士=1 → 本科或碩士(對比高中)
    本科=-1, 碩士=-1 → 高中
    
3. 參考編碼(Reference Coding)
  • 特點:每個啞變量代表與基準類別的差異。
  • 示例
    # 基準類別為“男性”
    女性=1 → 對比男性的差異
    

啞變量的使用方法:

1. 數據預處理
# 示例:使用Pandas進行One-Hot編碼
import pandas as pddf = pd.DataFrame({'顏色': ['紅', '藍', '綠']})
one_hot_df = pd.get_dummies(df, columns=['顏色'])
print(one_hot_df)

輸出:

   顏色_紅  顏色_藍  顏色_綠
0      1      0      0
1      0      1      0
2      0      0      1
2. 模型輸入
  • 線性模型(如邏輯回歸):直接使用啞變量,但需注意多重共線性(建議用虛擬變量)。
  • 樹模型(如隨機森林):天然支持高維啞變量,無需處理共線性。
  • 神經網絡:啞變量可作為輸入層特征,模型自動學習類別間關系。
3. 結果解釋
  • 系數解讀:啞變量系數表示該類別與基準類別的差異。
    # 邏輯回歸中,啞變量“顏色_紅”系數為0.5
    # 解釋:紅色用戶的轉化率比基準類別(假設為綠色)高exp(0.5)=1.65倍
    
技術核心功能典型場景
One-Hot編碼完整保留所有類別信息樹模型、神經網絡
虛擬變量避免共線性,適配統計模型線性回歸、邏輯回歸
效應編碼對比組間差異方差分析(ANOVA)

選擇建議

  • 機器學習模型(如樹、神經網絡):優先使用One-Hot編碼。
  • 統計模型(如線性回歸):使用虛擬變量(排除基準類別)。

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

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

相關文章

Python----數據分析(Pandas一:pandas庫介紹,pandas操作文件讀取和保存)

一、Pandas庫 1.1、概念 Pandas是一個開源的、用于數據處理和分析的Python庫&#xff0c;特別適合處理表格類數 據。它建立在NumPy數組之上&#xff0c;提供了高效的數據結構和數據分析工具&#xff0c;使得數據操作變得更加簡單、便捷和高效。 Pandas 的目標是成為 Python 數據…

Type-C:智能家居的電力革命與空間美學重構

在萬物互聯的時代浪潮中&#xff0c;家居空間正經歷著從功能容器到智慧終端的蛻變。當意大利設計師安東尼奧奇特里奧提出"消失的設計"理念二十年后&#xff0c;Type-C充電技術正以潤物無聲的方式重塑著現代家居的形態與內核&#xff0c;開啟了一場靜默的居住革命。 【…

C++ 左值(lvalue)和右值(rvalue)

在 C 中&#xff0c;左值&#xff08;lvalue&#xff09;和右值&#xff08;rvalue&#xff09;是指對象的不同類別&#xff0c;區分它們對于理解 C 中的表達式求值和資源管理非常重要&#xff0c;尤其在現代 C 中涉及到移動語義&#xff08;Move Semantics&#xff09;和完美轉…

【含文檔+PPT+源碼】基于SpringBoot和Vue的編程學習系統

項目介紹 本課程演示的是一款 基于SpringBoot和Vue的編程學習系統&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系統 3.該項…

關于新奇的css

background: linear-gradient(154deg, #07070915 30%, hsl(var(--primary) / 30%) 48%, #07070915 64%); filter: blur(100px); background: linear-gradient(154deg, #07070915 30%, hsl(var(--primary) / 30%) 48%, #07070915 64%); 這是一個線性漸變背景設置&#xff0c;角度…

Maxscript如何通過單擊現有按鈕添加新按鈕?

創建一個按鈕,你可以單擊它,然后添加一個新按鈕。 你必須創建一個動態UI,使用maxscript UI元素,將卷展欄構建為字符串,然后評估該字符串并打開新的卷展欄以更新你的UI;使用RolloutCreator(請參閱幫助文件)幫助您構建卷展欄,并打開新的卷展欄以更新您的UI,看下面的示…

Android控件Selector封裝優化指南:高效實現動態UI效果

本文詳細介紹了如何在Android開發中優化selector的封裝&#xff0c;涵蓋Button、TextView、ImageView、CheckBox、RadioButton等常見控件的動態效果實現。通過結合Material Design組件、矢量圖、Ripple效果以及動畫Selector&#xff0c;提供了一套現代化、高性能的解決方案&…

pytest+allure+jenkins

本地運行參考&#xff1a;pytestallure 入門-CSDN博客 jenkins運行如下&#xff1a; 安裝插件&#xff1a;allure 配置allure安裝目錄 配置pytest、allure 環境變量 配置流水線 進行build,結果如下 ,點擊allure report 查看結果

C#核心筆記——(五)框架概述

.NET Ftamework中幾乎所有功能都是通過大量的托管類型提供的。這些類型組織在層次化的命名空間中&#xff0c;并打包為一套程序集&#xff0c;與CLR一起構成了.NET平臺。 有些.NET類型是由CLR直接使用的&#xff0c;且對于托管宿主環境而言是必不可少的。這些類型位于一個名為…

phpstudy+phpstorm+xdebug【學習筆記】

配置PHPStudy 配置PHPSTORM phpstorm選擇PHP版本 配置DEBUG 設置服務器 編輯配置 學習參考鏈接&#xff1a;&#xff1a;https://blog.csdn.net/m0_60571842/article/details/133246064

Vue:Vue+TS學習筆記

文章目錄 前文Vue 3學習 Vue3 的重要性變更內容 底層邏輯選項式 API 和組合式 API體驗組合式 API很多鉤子組件通信 和 TS 結合開發為什么要用 TS? 正式上手 Vuets 開發給 ref 添加類型標記。ref, reactive, computed 綜合代碼模板引用類型傳值寫法 解決問題: 第三方包想要有類…

ACwing—01背包(暴力bfs+dp+遞歸+記憶化搜索算法)

問題 有 N件物品和一個容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的體積是 vi&#xff0c;價值是 wi。 求解將哪些物品裝入背包&#xff0c;可使這些物品的總體積不超過背包容量&#xff0c;且總價值最大。 輸出最大價值。 輸入格式 第一行兩個整數&#xff0c…

洛谷 P2801 教主的魔法 題解

之前學過 莫隊 算法&#xff0c;其運用了分塊思想&#xff1b;但是我居然是第一次寫純種的分塊題目。 題意 給你一個長度為 n n n 的序列 a a a&#xff08;一開始 ? a i ∈ [ 1 , 1000 ] \forall a_i\in[1,1000] ?ai?∈[1,1000]&#xff09;。要求執行 q q q 次操作&…

leetcode 75.顏色分類(荷蘭國旗問題)

題目描述 題目分析 本題是經典的「荷蘭國旗問題」&#xff0c;由計算機科學家 Edsger W. Dijkstra 首先提出。 要想單獨解決這道題本身還是很簡單的&#xff0c;統計0、1、2的數量然后按順序賦值&#xff0c;或者手寫一個冒泡排序&#xff0c;whatever。 但是在這一題中我們主…

rc4算法簡單介紹及實現

0. 介紹 RC4是一種流密碼&#xff0c;但因為安全性問題已經被棄用。 1. 算法描述 1.1 初始化 Key為生成的隨機密鑰&#xff1a;1-256B S為一數組&#xff1a;256B T為輔助數組&#xff1a;keylenB for (int i 0;i < 256;i) {S[i] i;T[i] S[i % keylen]; }1.2 初始化…

OpenEuler20.3 安裝 Elasticsearch7.17

1、下載elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.17-linux-x86_64.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.17-linux-x86_64.tar.gz.sha512 shasum -a 512 -c elasticsea…

單元測試知識總結

&#x1f345; 點擊文末小卡片 &#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 一、什么是單元測試&#xff1f; 單元測試是指&#xff0c;對軟件中的最小可測試單元在與程序其他部分相隔離的情況下進行檢查和驗證的工作&#xff0c;這里的…

python爬蟲筆記(一)

文章目錄 html基礎標簽和下劃線無序列表和有序列表表格加邊框 html的屬性a標簽&#xff08;網站&#xff09;target屬性換行線和水平分割線 圖片設置寬高width&#xff0c;height html區塊——塊元素與行內元素塊元素與行內元素塊元素舉例行內元素舉例 表單from標簽type屬性pla…

【mysql】centOS7安裝mysql詳細操作步驟!—通過tar包方式

【mysql】centOS7安裝mysql詳細操作步驟&#xff01; linux系統安裝mysql版本 需要 root 權限&#xff0c;使用 root 用戶進行命令操作。使用tar文件包&#xff0c;安裝&#xff0c;gz包也可以但是還需要配置用戶&#xff0c;tar包雖然大&#xff0c;但是全啊&#xff01; 1. …

[新能源]新能源汽車快充與慢充說明

接口示意圖 慢充接口為交流充電口&#xff08;七孔&#xff09;&#xff0c;快充接口為直流充電口&#xff08;九孔&#xff09;。 引腳說明 上圖給的是充電口的引腳圖&#xff0c;充電槍的為鏡像的。 慢充接口引腳說明 快充接口引腳說明 充電流程 慢充示意圖 慢充&…