特征衍生 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),列以f0、f1… 命名引用。
表达式语法基于 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())。