科普:WOE编码与One-Hot编码
WOE编码是业务逻辑与统计建模的结合,适合强业务导向的场景;
One-Hot编码是数据驱动的特征工程,适合追求模型性能的场景。
| 编码方式 | 核心价值 | 典型案例 |
|---|---|---|
| WOE编码 | 保留变量预测能力,适配线性模型 | 银行违约预测逻辑回归 |
| One-Hot编码 | 释放特征空间表达能力,适配非线性模型 | 图像分类神经网络 |
一、WOE编码(Weight of Evidence)
WOE 是一种用于将分类变量转化为连续变量的编码方法,主要用于金融风控、信用评分等领域。它通过计算每个类别对目标变量(如违约、欺诈)的预测能力,将分类特征转化为带有业务含义的数值,从而增强模型的解释性和预测效果。
WOE的计算基于以下公式:
WOE = ln(好样本比例 / 坏样本比例)
- 好样本:目标变量为正例(如未违约、正常用户)。
- 坏样本:目标变量为负例(如违约、欺诈用户)。
以“性别”特征为例,假设目标是预测用户是否违约:
| 性别 | 总样本数 | 违约样本数 | 未违约样本数 | 违约率(坏样本比例) | 未违约率(好样本比例) | WOE值 |
|---|---|---|---|---|---|---|
| 男 | 1000 | 150 | 850 | 150/1000 = 0.15 | 850/1000 = 0.85 | ln(0.85/0.15) ≈ 1.76 |
| 女 | 800 | 80 | 720 | 80/800 = 0.10 | 720/800 = 0.90 | ln(0.90/0.10) ≈ 2.19 |
结论:
- 女性的WOE值更高(2.19 > 1.76),表明女性用户违约概率更低,对目标变量的预测能力更强。
- 最终,“性别”特征被转化为两个WOE值(男→1.76,女→2.19)。
WOE的作用
- 处理高基数特征:
对于类别较多的变量(如城市、职业),WOE可通过合并低预测能力的类别减少维度。 - 业务解释性:
WOE值直接反映特征与目标变量的相关性,例如:- 正WOE值:类别对应的好样本比例更高(如女性未违约率高)。
- 负WOE值:类别对应的坏样本比例更高(如某职业违约率高)。
- 与IV值结合:
**信息值(IV)**可基于WOE计算,用于评估特征的整体预测能力。
业务逻辑、提升模型效果 | 依赖目标变量、需分箱处理 | 金融风控、信用评分 |
实际应用注意事项
- 分箱处理:
连续变量需先分箱(如将年龄划分为“<25”“25-40”“>40”),再计算WOE。 - 处理极端情况:
若某类别无好样本或坏样本(如违约率为0%或100%),需通过平滑处理(如加1)避免无穷大。 - 模型适配:
WOE编码后的变量适合逻辑回归、决策树等模型,但需注意异常值对线性模型的影响。
通过WOE编码,分类特征可更有效地融入模型,同时保持业务含义的可解释性。
二、差异对比表
| 对比维度 | WOE编码 | One-Hot编码 |
|---|---|---|
| 编码原理 | 基于分箱后正负样本比例计算(WOE公式:ln(好样本率/坏样本率)) | 将每个类别转换为独立的0/1二值特征 |
| 适用模型 | 逻辑回归、线性模型 | 树模型(决策树、随机森林)、神经网络、支持向量机 |
| 特征维度 | 维度不变(每个特征1个WOE值) | 维度膨胀(n个类别→n个特征) |
| 信息保留 | 保留变量的预测能力(与目标变量相关性) | 仅保留类别存在性,丢失顺序和数值信息 |
| 业务解释性 | 可解释性强(WOE值大小直接反映风险程度) | 可解释性弱(需结合模型特征重要性分析) |
| 计算复杂度 | 需分箱并计算统计量(需目标变量信息) | 简单直接(无需目标变量) |
| 稀疏性 | 无稀疏问题(单值连续特征) | 高稀疏性(大量0值) |
| 单调性要求 | 强制单调性(分箱需满足WOE单调) | 无要求 |
二、典型应用场景对比
-
WOE编码的典型场景
- 银行风控模型:将年龄分箱后计算WOE值,直接输入逻辑回归模型
# WOE计算示例 def calculate_woe(bin, target):good = target[bin].mean()bad = 1 - goodreturn np.log(good / bad) if bad !=0 else 0 - 优势:保留变量与违约率的单调关系,提升模型稳定性
- 银行风控模型:将年龄分箱后计算WOE值,直接输入逻辑回归模型
-
One-Hot编码的典型场景
- 电商推荐系统:将用户省份转换为One-Hot特征,输入神经网络
# One-Hot转换示例 df = pd.get_dummies(df, columns=['省份']) - 优势:允许模型自动学习省份与购买行为的非线性关系
- 电商推荐系统:将用户省份转换为One-Hot特征,输入神经网络
三、关键选择建议
-
模型类型决定编码方式
- 线性模型(逻辑回归):必须使用WOE编码(保持线性关系)
- 树模型/神经网络:优先使用One-Hot编码(处理高维稀疏数据能力强)
-
数据特性的影响
- 高基数特征(如IP地址):One-Hot会导致维度爆炸,需结合特征选择
- 有序特征(如收入等级):WOE编码能保留顺序信息,优于One-Hot
-
业务需求的权衡
- 需模型可解释性: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编码是业务逻辑与统计建模的结合,适合强业务导向的场景; One-Hot编码是数据驱动的特征工程,适合追求模型性能的场景。 编码方式核心价值典型案例WOE编码保留变量预测能力,适配线性模型银行违约预测逻辑回归One-Hot编码释放特征…...
【Go语言圣经2.6】
目标 概念 GOPATH模型 GOPATH:GOPATH 是一个环境变量,指明 Go 代码的工作区路径。工作区通常包含三个目录: src:存放源代码,按照导入路径组织。例如,包 gopl.io/ch2/tempconv 应存放在 $GOPATH/src/gopl.i…...
Python的基本知识
Python是一种广泛使用的高级编程语言,以下是其基本用法的介绍: 变量与数据类型 - 变量定义:直接赋值即可创建变量,如 x 5 , name "John" 。 - 数据类型:包括 int (整数…...
QEMU源码全解析 —— 块设备虚拟化(4)
接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...
34个适合机械工程及自动化专业【论文选题】
论文选题具有极其重要的意义,它直接关系到论文的质量、价值以及研究的可行性和顺利程度。选题明确了研究的具体领域和核心问题,就像给研究旅程设定了方向和目的地。例如,选择 “人工智能在医疗影像诊断中的应用” 这一选题,就确定…...
langchain框架
LangChain的架构分为多个层次,支持Python和JavaScript生态 基础层(langchain-core):提供LLM抽象接口、表达式语言(LCEL)等核心机制,支持超过70种主流模型(如GPT-4、Llama࿰…...
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,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。如果该文件不存在,则需要先创建目录和文件。 # 创建目录(如果不存在) sudo mkdir -p /etc/docker# 编辑配置文件(使用 nano 或…...
HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型
一、软件介绍 文末提供程序和源码下载 HiPixel是一个开源程序基于SwiftUI构建的macOS原生应用程序,用于AI驱动的图像超分辨率,并利用Upscayl的强大AI模型。 二、软件特征 具有 SwiftUI 界面的原生 macOS 应用程序使用 AI 模型进行高质量图像放大通过 G…...
Python 正则表达式模块 re
Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式? 正则表达式(Regular Expression, RE)是一种用于匹配、查找和替换文本模式的工具,由普通字符(如字母、数字)和特殊字符&…...
[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做怎删改查操作不便,用Ark Data Kit。 功能介绍 ArkData (方舟数据管理)为开发者提供数据存储、数据管理和数据同步能力,比如联系人应用数据可以保存到数据库中,提供数据库的安全、可靠以及共享访问等管…...
ES 使用geo point 查询离目标地址最近的数据
需求描述:项目中需要通过经纬度坐标查询目标地所在的行政区。 解决思路大致有种,使用es和mysql分别查询。 1、使用es进行查询 将带有经纬度坐标的省市区数据存入es中,mappings字段使用geo point类型,索引及查询dsl如下。 geo p…...
本地部署OpenManus及原理介绍
概述: 最近Minaus特别火,随后开源社区就有项目尝试复刻Minaus,项目名称为OpenManus,原理是用推理模型为决策者,将我们输入的问题进行分解后调用本地工具执行。 OpenManus安装: 本人在Ubuntu桌面版本上安装…...
高效手机检测:视觉分析技术的优势
在当今社会,手机已成为人们日常生活和工作中不可或缺的工具。然而,在某些特定场合,如考场、工作场所等,手机的使用却可能带来负面影响。因此,如何有效监测和防止在这些场合偷用手机的行为,成为了一个亟待解…...
Java 多线程编程:提升系统并发处理能力!
多线程是 Java 中实现并发任务执行的关键技术,能够显著提升程序在多核处理器上的性能以及处理多任务的能力。本文面向初级到中级开发者,从多线程的基本定义开始,逐步讲解线程创建、状态管理、同步机制、并发工具以及新兴的虚拟线程技术。每部…...
Linux实时内核稳定性案例
稳定性问题分析 RT_RUNTIME_SHARE案例死锁问题Linux-rt下卡死之hrtimer分析Linux内核宕机案例 -mmap空指针Linux Hung Task分析过程...
解决 VSCode SSH 连接报错:“REMOTE HOST IDENTIFICATION HAS CHANGED” 的问题
问题描述 在使用 VSCode 通过 SSH 连接远程服务器时,我们可能会遇到类似如下的错误日志: 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 和爬虫在合规获取实时商品数据方面的成本与效率对比: 成本对比 淘宝 API 开发成本:需要申请开发者账号并获取 API 权限,部分敏感或高频访问的接口可能需要额外的审核或付费。开发过程中需要按照平台规定进行编程,相…...
01-Canvas-使用fabric初始
fabric官网: 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 是一个开源的跨平台构建系统生成工具,旨在简化和自动化项目的构建过程。它主要用于管理和控制软件构建的过程,特别是在处理复杂的项目结构和多个平台时。CMake 并不直接进行编译或链接,而是生成本地构建系统所需的文件࿰…...
树莓派 连接 PlutoSDR 教程
在树莓派5上安装PlutoSDR(ADALM-Pluto)的驱动程序,主要需要安装相关的库和工具,以便与PlutoSDR通信,比如libiio和libad9361,并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统(通常是…...
【时时三省】(C语言基础)用printf函数输出数据3
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 ( 5 ) e格式符。 用格式声明%e指定以指数形式输出实数。如果不指定输出数据所占的宽度和数字部分的小数位数,许多C编译系统(如VisualC)会自动给出数字部分…...
Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境
在日常的开发过程中,使用版本控制工具 Git 是一个非常重要的技能,特别是对于管理和协作开发。通过 GitHub,我们可以轻松地进行代码版本管理和共享。这篇博客将带您一步步学习如何配置 Git 环境并将本地仓库与 GitHub 远程仓库连接起来。 一、…...
在Pycharm配置conda虚拟环境的Python解释器
〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后,终于找到的解决的方案,遂将该方法简要的记录下来,以备后用,并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下,假…...
CURL一文通
文章目录 1.什么是curl2.curl可以发送什么请求3.常见curl发http相关请求怎么写4.curl带上的参数分别有什么,可以怎么用5.进阶用法6.常见错误以及学习指导建议 1.什么是curl 是利用URL语法在命令行下工作的开源文件传输工具。尤其被广泛应用的在linux系统下。 2.cu…...
零基础keil:设置注释快捷键
1.打开快捷键设置: 在Keil中,选择菜单栏中的“Settings”,然后选择“Shortcuts”来打开快捷键设置界面。 2.选择注释命令: 在快捷键设置界面中,找到与注释相关的命令,如“Comment Selection”࿰…...
Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别
文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用:避免空指针异常2.3 为什么要用?2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明: orElse 如何使用orElseGet 如何使用两者的…...
