当前位置: 首页 > article >正文

科普: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编码。
  • 统计模型(如线性回归):使用虚拟变量(排除基准类别)。

相关文章:

科普:WOE编码与One-Hot编码

WOE编码是业务逻辑与统计建模的结合&#xff0c;适合强业务导向的场景&#xff1b; One-Hot编码是数据驱动的特征工程&#xff0c;适合追求模型性能的场景。 编码方式核心价值典型案例WOE编码保留变量预测能力&#xff0c;适配线性模型银行违约预测逻辑回归One-Hot编码释放特征…...

【Go语言圣经2.6】

目标 概念 GOPATH模型 GOPATH&#xff1a;GOPATH 是一个环境变量&#xff0c;指明 Go 代码的工作区路径。工作区通常包含三个目录&#xff1a; src&#xff1a;存放源代码&#xff0c;按照导入路径组织。例如&#xff0c;包 gopl.io/ch2/tempconv 应存放在 $GOPATH/src/gopl.i…...

Python的基本知识

Python是一种广泛使用的高级编程语言&#xff0c;以下是其基本用法的介绍&#xff1a; 变量与数据类型 - 变量定义&#xff1a;直接赋值即可创建变量&#xff0c;如 x 5 &#xff0c; name "John" 。 - 数据类型&#xff1a;包括 int &#xff08;整数&#xf…...

QEMU源码全解析 —— 块设备虚拟化(4)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...

34个适合机械工程及自动化专业【论文选题】

论文选题具有极其重要的意义&#xff0c;它直接关系到论文的质量、价值以及研究的可行性和顺利程度。选题明确了研究的具体领域和核心问题&#xff0c;就像给研究旅程设定了方向和目的地。例如&#xff0c;选择 “人工智能在医疗影像诊断中的应用” 这一选题&#xff0c;就确定…...

langchain框架

LangChain的架构分为多个层次&#xff0c;支持Python和JavaScript生态 基础层&#xff08;langchain-core&#xff09;&#xff1a;提供LLM抽象接口、表达式语言&#xff08;LCEL&#xff09;等核心机制&#xff0c;支持超过70种主流模型&#xff08;如GPT-4、Llama&#xff0…...

RHCE(RHCSA复习:npm、dnf、源码安装实验)

七、软件管理 7.1 rpm 安装 7.1.1 挂载 [rootlocalhost ~]# ll /mnt total 0 drwxr-xr-x. 2 root root 6 Oct 27 21:32 hgfs[rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# [rootlo…...

Mybatis3 调用存储过程

1. 数据库MySQL&#xff0c;user表 CREATE TABLE user (USER_ID int NOT NULL AUTO_INCREMENT,USER_NAME varchar(100) NOT NULL COMMENT 用户姓名,AGE int NOT NULL COMMENT 年龄,CREATED_TIME datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,CREATED_BY varchar(100) NOT NUL…...

解决 openeuler 系统 docker 下载慢,docker 镜像加速

一、步骤说明 1. 编辑 Docker 配置文件 Docker 的镜像源配置文件路径为 /etc/docker/daemon.json。如果该文件不存在&#xff0c;则需要先创建目录和文件。 # 创建目录&#xff08;如果不存在&#xff09; sudo mkdir -p /etc/docker# 编辑配置文件&#xff08;使用 nano 或…...

HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型

一、软件介绍 文末提供程序和源码下载 HiPixel是一个开源程序基于SwiftUI构建的macOS原生应用程序&#xff0c;用于AI驱动的图像超分辨率&#xff0c;并利用Upscayl的强大AI模型。 二、软件特征 具有 SwiftUI 界面的原生 macOS 应用程序使用 AI 模型进行高质量图像放大通过 G…...

Python 正则表达式模块 re

Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式&#xff1f; 正则表达式&#xff08;Regular Expression, RE&#xff09;是一种用于匹配、查找和替换文本模式的工具&#xff0c;由普通字符&#xff08;如字母、数字&#xff09;和特殊字符&…...

[RN 实践有效]Expo+cross-env配置项目环境变量

首先,从中可以看出,cross-env的主要作用是跨平台设置环境变量,而Expo项目通常通过app.config.js或.env文件来管理这些变量。需要强调安装cross-env的必要性,以及如何在package.json中正确配置脚本命令。 接下来,用户的问题是关于Expo中cross-env的详细配置,因此需要分步骤…...

缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...

Core File Kit做怎删改查操作不便&#xff0c;用Ark Data Kit。 功能介绍 ArkData &#xff08;方舟数据管理&#xff09;为开发者提供数据存储、数据管理和数据同步能力&#xff0c;比如联系人应用数据可以保存到数据库中&#xff0c;提供数据库的安全、可靠以及共享访问等管…...

ES 使用geo point 查询离目标地址最近的数据

需求描述&#xff1a;项目中需要通过经纬度坐标查询目标地所在的行政区。 解决思路大致有种&#xff0c;使用es和mysql分别查询。 1、使用es进行查询 将带有经纬度坐标的省市区数据存入es中&#xff0c;mappings字段使用geo point类型&#xff0c;索引及查询dsl如下。 geo p…...

本地部署OpenManus及原理介绍

概述&#xff1a; 最近Minaus特别火&#xff0c;随后开源社区就有项目尝试复刻Minaus&#xff0c;项目名称为OpenManus&#xff0c;原理是用推理模型为决策者&#xff0c;将我们输入的问题进行分解后调用本地工具执行。 OpenManus安装&#xff1a; 本人在Ubuntu桌面版本上安装…...

高效手机检测:视觉分析技术的优势

在当今社会&#xff0c;手机已成为人们日常生活和工作中不可或缺的工具。然而&#xff0c;在某些特定场合&#xff0c;如考场、工作场所等&#xff0c;手机的使用却可能带来负面影响。因此&#xff0c;如何有效监测和防止在这些场合偷用手机的行为&#xff0c;成为了一个亟待解…...

Java 多线程编程:提升系统并发处理能力!

多线程是 Java 中实现并发任务执行的关键技术&#xff0c;能够显著提升程序在多核处理器上的性能以及处理多任务的能力。本文面向初级到中级开发者&#xff0c;从多线程的基本定义开始&#xff0c;逐步讲解线程创建、状态管理、同步机制、并发工具以及新兴的虚拟线程技术。每部…...

Linux实时内核稳定性案例

稳定性问题分析 RT_RUNTIME_SHARE案例死锁问题Linux-rt下卡死之hrtimer分析Linux内核宕机案例 -mmap空指针Linux Hung Task分析过程...

解决 VSCode SSH 连接报错:“REMOTE HOST IDENTIFICATION HAS CHANGED” 的问题

问题描述 在使用 VSCode 通过 SSH 连接远程服务器时&#xff0c;我们可能会遇到类似如下的错误日志&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! ... Offending ED25519 key in C:\Users\DELL/…...

Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理

目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理 文章目录 1. Spring Boot 配置类实现自动装载1.1 @Configuration注解1.2 @Configuration 注解完成 bean 注入流程图1.3 @ConfigurationProperties注解赋值2. Spring Boot的核心机制:自动装配2.1 @SpringBo…...

淘宝API vs 爬虫:合规获取实时商品数据的成本与效率对比

以下是淘宝 API 和爬虫在合规获取实时商品数据方面的成本与效率对比&#xff1a; 成本对比 淘宝 API 开发成本&#xff1a;需要申请开发者账号并获取 API 权限&#xff0c;部分敏感或高频访问的接口可能需要额外的审核或付费。开发过程中需要按照平台规定进行编程&#xff0c;相…...

01-Canvas-使用fabric初始

fabric官网&#xff1a; https://fabric5.fabricjs.com/demos/ 创建画布并绘制 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…...

CMake简单入门

简介 CMake 是一个开源的跨平台构建系统生成工具&#xff0c;旨在简化和自动化项目的构建过程。它主要用于管理和控制软件构建的过程&#xff0c;特别是在处理复杂的项目结构和多个平台时。CMake 并不直接进行编译或链接&#xff0c;而是生成本地构建系统所需的文件&#xff0…...

树莓派 连接 PlutoSDR 教程

在树莓派5上安装PlutoSDR&#xff08;ADALM-Pluto&#xff09;的驱动程序&#xff0c;主要需要安装相关的库和工具&#xff0c;以便与PlutoSDR通信&#xff0c;比如libiio和libad9361&#xff0c;并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统&#xff08;通常是…...

【时时三省】(C语言基础)用printf函数输出数据3

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 ( 5 ) e格式符。 用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数&#xff0c;许多C编译系统&#xff08;如VisualC&#xff09;会自动给出数字部分…...

Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境

在日常的开发过程中&#xff0c;使用版本控制工具 Git 是一个非常重要的技能&#xff0c;特别是对于管理和协作开发。通过 GitHub&#xff0c;我们可以轻松地进行代码版本管理和共享。这篇博客将带您一步步学习如何配置 Git 环境并将本地仓库与 GitHub 远程仓库连接起来。 一、…...

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…...

CURL一文通

文章目录 1.什么是curl2.curl可以发送什么请求3.常见curl发http相关请求怎么写4.curl带上的参数分别有什么&#xff0c;可以怎么用5.进阶用法6.常见错误以及学习指导建议 1.什么是curl 是利用URL语法在命令行下工作的开源文件传输工具。尤其被广泛应用的在linux系统下。 2.cu…...

零基础keil:设置注释快捷键

1.打开快捷键设置&#xff1a; 在Keil中&#xff0c;选择菜单栏中的“Settings”&#xff0c;然后选择“Shortcuts”来打开快捷键设置界面。 2.选择注释命令&#xff1a; 在快捷键设置界面中&#xff0c;找到与注释相关的命令&#xff0c;如“Comment Selection”&#xff0…...

Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用&#xff1a;避免空指针异常2.3 为什么要用&#xff1f;2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明&#xff1a; orElse 如何使用orElseGet 如何使用两者的…...