51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在交通银行的信贷审批场景中,客户数据来自多个异构源(如征信报告、行为数据、交易记录)。请设计一个特征工程方案,处理这些数据并构建有效特征。具体说明如何处理缺失值、异常值,以及如何选择和组合特征(如统计特征、时序特征、文本特征),并举例说明特征选择方法(如相关性分析、递归特征消除)。

交通银行AI算法工程师难度:中等

答案

1) 【一句话结论】

针对交通银行信贷审批的多源异构数据,通过统一处理缺失值与异常值,构建统计、时序、文本等多维度特征,结合相关性分析与递归特征消除(RFE,结合业务模型评估),筛选有效特征以提升模型AUC,降低信贷违约风险。

2) 【原理/概念讲解】

特征工程是信贷审批模型的核心,需解决异构数据(征信、行为、交易)的统一性问题。首先处理缺失值:数值型数据用均值/中位数填充(低缺失率),高缺失率用模型预测(如用其他特征训练回归模型,评估指标为MAE、RMSE);文本型数据用空值处理。异常值处理用IQR/3σ检测,结合业务逻辑(如大额交易是否为正常业务,标记而非删除)。特征构建分三类:统计特征(如月均收入、最大负债率,反映静态财务状况);时序特征(如交易记录的滚动均值、波动率,捕捉动态行为;征信报告的滞后特征,如最近6个月逾期次数);文本特征(如征信报告中的负面关键词计数,用TF-IDF提取,参数如n-gram=1或2,平滑方法如Laplace)。特征选择通过相关性分析(过滤低相关特征)与RFE(结合逻辑回归或XGBoost,逐步移除贡献最小的特征,评估指标为AUC提升)。类比:特征工程如同烹饪,不同数据源是食材,需清洗(处理缺失/异常)、切配(特征提取),再按菜谱(特征选择)组合,提升模型预测质量。

3) 【对比与适用场景】

缺失值处理方法对比

方法定义特性使用场景注意点
均值/中位数填充用列均值/中位数替换缺失值简单,可能引入偏差数值型数据,缺失比例低(<5%)数据偏态时,中位数更稳定
插值法(线性/多项式)根据相邻值插值保留时间序列趋势时序数据,连续缺失非线性插值需额外参数
模型预测填充用其他特征训练模型预测缺失值保留信息,适合高缺失率(>10%)多源数据,缺失比例高需额外训练预测模型,评估填充效果(如MAE、RMSE)

特征类型对比

特征类型定义举例(交通银行场景)适用场景
统计特征数据的基本统计量月均收入、最大负债率、信用等级(数值化)基础特征,易计算,反映静态财务状况
时序特征时间序列的动态统计最近30天交易滚动均值、交易波动率、滞后1个月逾期次数捕捉客户行为动态变化,如还款能力波动
文本特征非结构化文本关键词提取征信报告“逾期”“失信”关键词计数(TF-IDF编码)处理征信报告等文本数据,捕捉信用历史中的负面信息

4) 【示例】(伪代码)

import pandas as pd
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

# 1. 数据对齐与预处理
def preprocess_data(df_transaction, df_credit, df_behavior):
    # 交易记录:按月聚合,统一时间粒度
    df_transaction = df_transaction.set_index('timestamp').resample('M').agg({
        'amount': ['mean', 'std', 'max']
    }).reset_index()
    df_transaction.columns = ['month', 'avg_amount', 'std_amount', 'max_amount']
    
    # 征信报告:提取文本特征(关键词计数)
    def extract_text_features(text):
        keywords = ['逾期', '失信', '欠款']
        counts = sum(text.str.count(kw) for kw in keywords)
        return counts
    df_credit['text_features'] = df_credit['report_content'].apply(extract_text_features)
    
    # 行为数据:标准化
    scaler = StandardScaler()
    df_behavior_scaled = pd.DataFrame(scaler.fit_transform(df_behavior), columns=df_behavior.columns)
    
    # 合并数据
    df = pd.merge(df_transaction, df_behavior_scaled, on='customer_id', how='inner')
    df = pd.merge(df, df_credit[['customer_id', 'text_features']], on='customer_id', how='inner')
    return df

# 2. 缺失值处理
def handle_missing(df):
    # 交易金额:滚动均值填充
    df['avg_amount'] = df['avg_amount'].fillna(df['avg_amount'].rolling(3, min_periods=1).mean())
    # 文本特征:空值用0填充
    df['text_features'] = df['text_features'].fillna(0)
    # 数值特征:均值填充
    for col in df.select_dtypes(include='number').columns:
        if df[col].isnull().sum() > 0:
            df[col] = df[col].fillna(df[col].mean())
    return df

# 3. 异常值处理
def handle_outliers(df):
    # 交易金额:IQR检测
    q1 = df['avg_amount'].quantile(0.25)
    q3 = df['avg_amount'].quantile(0.75)
    iqr = q3 - q1
    lower_bound = q1 - 1.5 * iqr
    upper_bound = q3 + 1.5 * iqr
    df['avg_amount'] = df['avg_amount'].clip(lower=lower_bound, upper=upper_bound)
    return df

# 4. 特征组合
def extract_features(df):
    # 统计特征
    stats_features = df[['income', 'debt_ratio']].mean()
    # 时序特征(交易)
    df['rolling_mean'] = df['avg_amount'].rolling(30).mean()
    df['volatility'] = df['avg_amount'].rolling(30).std()
    # 文本特征(已提取)
    return pd.concat([stats_features, df[['rolling_mean', 'volatility', 'text_features']]], axis=1)

# 5. 特征选择(RFE结合逻辑回归)
def select_features(X, y):
    # 相关性分析(初步筛选)
    corr = X.corrwith(y)
    X_corr = X[corr[abs(corr) > 0.1].index]
    # RFE
    model = LogisticRegression()
    rfe = RFE(model, n_features_to_select=10)
    rfe.fit(X_corr, y)
    return X[rfe.support_]

# 示例调用
# df = preprocess_data(...)  # 假设数据已加载
# df = handle_missing(df)
# df = handle_outliers(df)
# X = extract_features(df)
# y = df['default']  # 目标变量
# X_selected = select_features(X, y)

5) 【面试口播版答案】

“面试官您好,针对交通银行信贷审批的多源异构数据,我的特征工程方案核心是:首先统一处理缺失值与异常值,比如交易数据用滚动均值填充缺失,征信文本用空值处理,异常值用IQR检测并替换。然后构建多维度特征,包括统计特征(月均收入、最大负债率)、时序特征(最近30天交易滚动均值、波动率)、文本特征(征信报告中的‘逾期’等关键词计数,用TF-IDF编码)。最后通过相关性分析过滤低相关特征,再用递归特征消除(RFE,结合逻辑回归模型评估),保留与违约率强相关的特征子集,最终提升模型AUC,降低信贷违约风险。”

6) 【追问清单】

  1. 如何处理不同数据源的时序特征对齐?
    回答:统一时间粒度(如月),对齐起始时间,交易记录按月聚合,征信报告的滞后特征(如最近6个月逾期)与交易记录的滚动窗口对齐,确保时间维度一致。

  2. 特征选择中RFE结合模型的具体步骤?
    回答:先用相关性分析初步筛选高相关特征,再用RFE结合逻辑回归模型,通过交叉验证逐步移除贡献最小的特征,保留最优特征子集,评估指标为AUC提升。

  3. 文本特征提取的具体方法?
    回答:采用词袋模型或TF-IDF,提取征信报告中的关键词(如“逾期”“失信”“欠款”),统计每个关键词的出现次数,作为数值特征。

  4. 缺失值处理中,如果缺失比例过高,如何处理?
    回答:用模型预测填充,比如用其他特征(如收入、负债率)训练回归模型预测缺失的交易金额,评估填充效果(如MAE、RMSE)。

  5. 时序特征中,如何处理季节性?
    回答:对交易时间序列进行季节性分解(如用STL分解),提取季节性成分,作为特征(如季节性均值、季节性波动),捕捉季节性变化对还款能力的影响。

7) 【常见坑/雷区】

  1. 忽略数据源时间粒度不一致: 直接合并交易记录(日级)与征信报告(月级)数据,导致特征对齐错误,需统一时间粒度(如月)。
  2. 缺失值处理方法单一: 未根据数据类型和缺失比例选择方法,比如高缺失率的文本特征直接用均值填充,导致信息丢失。
  3. 异常值处理不当: 直接删除异常值(如交易金额过高),可能损失优质客户信息,应标记或用中位数替换。
  4. 特征选择不结合业务逻辑: 仅用统计方法筛选特征,未考虑征信报告中的“信用等级”直接用,而未提取关键负面信息(如逾期次数),导致特征有效性不足。
  5. 时序特征未考虑动态变化: 固定窗口(如固定30天)可能遗漏短期行为变化,应使用滑动窗口或动态调整窗口大小,捕捉客户行为的实时变化。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1