特征衍生 hscredit.core.feature_engineering

基于 numexpr 的表达式衍生引擎 NumExprDerive,支持 where / sin / cos / abs 等函数 与条件逻辑的批量特征衍生。

特征工程模块.

提供特征衍生和转换功能,支持基于表达式的特征高效计算。

核心功能

  • 表达式特征衍生 (NumExprDerive): 使用 numexpr 引擎根据表达式计算新特征, 支持 where、sin、cos、abs 等数学函数,支持条件逻辑

快速开始

>>> import pandas as pd
>>> from hscredit.core.feature_engineering import NumExprDerive
>>> X = pd.DataFrame({
...     "f0": [2, 1.0, 3],
...     "f1": [1, 2, 3],
...     "f2": [2, 3, 4],
...     "f3": [2.1, 1.4, -6.2]
... })
>>> fd = NumExprDerive(derivings=[
...     ("f4", "where(f1>1, 0, 1)"),
...     ("f5", "f1+f2"),
...     ("f6", "sin(f1)"),
...     ("f7", "abs(f3)")
... ])
>>> X_new = fd.fit_transform(X)
class hscredit.core.feature_engineering.NumExprDerive(derivings=None)[源代码]

基类:BaseEstimator, TransformerMixin

基于表达式的特征衍生器(sklearn Transformer)。

通过一组 (新特征名, 表达式) 规则批量衍生新特征,兼容 sklearn Pipeline。 根据输入类型自动选择计算后端:

  • 输入 DataFrame:纯数值列走 numpy 向量化计算(最快),含字符串/布尔等 混合类型列走 pandas Series 计算(类型安全),从而支持任意类型数据。

  • 输入 ndarray:走 numexpr 计算(需安装 numexpr),列以 f0f1 … 命名引用。

表达式语法基于 Python/numpy,额外支持 where(cond, a, b)``(自动转换为 :func:`numpy.where`)以及 ``sin/cos/tan/abs/exp/log/ sqrt/power/floor/ceil 等 numpy 函数。

参数

参数:

derivings --

衍生规则列表,每个元素为 (name, expr) 二元组:

  • name (str):新特征列名

  • expr (str):基于已有列名的表达式字符串,如 "f1 + f2""where(score >= 600, '高', '低')"

None 或空列表时在初始化/fit 阶段抛出 ValueError

属性

  • features_names_: 拟合/转换时记录的原始输入列名列表(DataFrame 输入时)

参考样例

>>> import pandas as pd
>>> from hscredit.core.feature_engineering import NumExprDerive
>>> X = pd.DataFrame({
...     "f0": [2, 1.0, 3],
...     "f1": [np.inf, 2, 3],
...     "f2": [2, 3, 4],
...     "f3": [2.1, 1.4, -6.2]
... })
>>> fd = NumExprDerive(derivings=[
...     ("f4", "where(f1>1, 0, 1)"),  # 条件表达式
...     ("f5", "f1+f2"),              # 加法运算
...     ("f6", "sin(f1)"),            # 三角函数
...     ("f7", "abs(f3)")              # 绝对值
... ])
>>> fd.fit_transform(X)

混合类型样例

>>> X = pd.DataFrame({
...     "score": [650, 580, 720, 490],
...     "status": ["正常", "逾期", "正常", "关注"],
...     "is_vip": [True, False, True, False]
... })
>>> fd = NumExprDerive(derivings=[
...     ("score_band", "where(score >= 600, '高', '低')"),  # 数值条件字符串
...     ("flag", "where((status == '逾期') | is_vip, 1, 0)"),  # 混合类型条件
...     ("score_level", "where(score > 600, score * 1.1, score * 0.9)"),  # 数值条件
... ])
>>> fd.fit_transform(X)

引用

数值/ndarray 路径使用 numexpr 实现表达式的高性能向量化求值,详见 https://numexpr.readthedocs.io/ ;DataFrame 路径基于 pandas 计算引擎 (pandas.eval())。

fit(X, y=None)[源代码]

拟合特征衍生器(校验规则与输入维度,不学习任何参数)。

参数:
  • X -- 输入数据,DataFrame 或 2 维 ndarray

  • y -- 目标变量,未使用,仅为兼容 sklearn 接口而保留

返回:

self,支持链式调用

抛出:

ValueError -- derivings 非法,或 X 不是 2 维时

transform(X)[源代码]

按 derivings 规则衍生新特征并追加到原始特征之后。

参数:

X --

输入数据:

  • DataFrame:表达式按列名引用,返回 原始列 + 衍生列 的新 DataFrame

  • 2 维 ndarray:列以 f0/f1/… 引用,返回水平拼接的新数组 (需安装 numexpr

返回:

含衍生特征的 ``DataFrame``(DataFrame 输入)或 ``ndarray``(数组输入)

抛出:

ImportError -- 输入为 ndarray 且未安装 numexpr 时