泰迪杯数据挖掘大赛A题实战:基于XGBoost与特征工程的金融风控模型优化

1次阅读
没有评论

共计 2081 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

赛题背景

26 年泰迪杯数据挖掘大赛 A 题聚焦金融风控场景,提供了包含用户交易记录、时间戳、金额、交易类型等字段的数据集。数据特点包括:

泰迪杯数据挖掘大赛 A 题实战:基于 XGBoost 与特征工程的金融风控模型优化

  • 字段含义:包含 transaction_id(交易 ID)、user_id(用户 ID)、timestamp(时间戳)、amount(金额)、merchant_category(商户类别)等 20+ 维度
  • 评估指标:以 AUC(Area Under Curve)作为主要评价标准,兼顾召回率(Recall)
  • 核心挑战:欺诈交易占比不足 5%,存在严重的类别不平衡问题

技术选型对比

在金融风控场景下,我们对比了三种常见模型:

  1. 逻辑回归(Logistic Regression)
  2. 优点:模型简单、可解释性强
  3. 缺点:难以捕捉非线性关系,对特征工程要求高

  4. 随机森林(Random Forest)

  5. 优点:自动处理特征交互,抗过拟合能力强
  6. 缺点:训练速度慢,难以处理超大规模数据

  7. XGBoost(eXtreme Gradient Boosting)

  8. 选择理由:
    • 原生支持缺失值处理
    • 提供特征重要性(feature_importance)输出
    • 支持 GPU 加速训练

特征工程实战

# Python 3.8+ 必需库:pandas 1.3+, tsfresh 0.18+
import pandas as pd
from tsfresh import extract_features

# 构造时间窗口统计特征
def create_rolling_features(df):
    """
    为每个用户生成过去 1h/24h 的交易统计
    :param df: 原始交易 DataFrame
    :return: 新增特征 DataFrame
    """return df.groupby('user_id').rolling('1h', on='timestamp').agg({'amount': ['mean','std','count'],'is_fraud':'sum'  # 注意:线上预测时需移除该字段
    })

# 使用 tsfresh 自动生成时序特征
tsfresh_features = extract_features(df[['user_id', 'timestamp', 'amount']], 
    column_id="user_id", 
    column_sort="timestamp"
)

# 金额 WOE 分箱(Weight of Evidence)from sklearn.preprocessing import KBinsDiscretizer

discretizer = KBinsDiscretizer(
    n_bins=5, 
    encode='ordinal', 
    strategy='quantile'
)
df['amount_bin'] = discretizer.fit_transform(df[['amount']])

模型调优

关键超参数网格搜索范围:

参数 搜索范围 最优值
max_depth [3, 5, 7] 5
learning_rate [0.01, 0.1, 0.3] 0.1
subsample [0.6, 0.8, 1.0] 0.8
scale_pos_weight [1, 10, 20] 15

通过 5 折交叉验证得到的 AUC 变化曲线:

import matplotlib.pyplot as plt
plt.plot(cv_results['iterations'], cv_results['train-auc-mean'], label='Train')
plt.plot(cv_results['iterations'], cv_results['test-auc-mean'], label='Test')
plt.xlabel('Boosting Rounds')
plt.ylabel('AUC Score')
plt.legend()

避坑指南

  • 内存优化:
  • 使用 dtype={'amount': 'float32'} 减少内存占用
  • 分块读取大数据:pd.read_csv('data.csv', chunksize=100000)

  • 类别不平衡处理:

    from imblearn.over_sampling import SMOTE
    sm = SMOTE(sampling_strategy=0.3)
    X_res, y_res = sm.fit_resample(X_train, y_train)

  • 线上提交检查:

  • 确保测试集特征与训练集完全一致
  • 移除任何包含未来信息的特征(如基于 is_fraud 的统计)
  • 检查特征维度是否匹配

延伸思考

  1. 实时风控迁移:
  2. 将特征工程模块封装为 API 服务
  3. 使用 XGBoost 的 predict_proba 输出风险分数
  4. 考虑添加规则引擎作为第一道防线

  5. 新增用户画像处理:

  6. 对画像类别特征进行 Target Encoding
  7. 构造交叉特征(如 ” 高消费频率 + 深夜交易 ” 组合)
  8. 使用图神经网络挖掘用户关联关系

参赛心得

通过本次实战,深刻体会到金融风控场景中特征工程的重要性。建议选手们重点关注:

  • 时序特征的构造方式(滑动窗口、周期统计等)
  • 模型可解释性与业务需求的平衡
  • 在有限算力下如何做高效的超参数搜索

代码仓库已开源在 GitHub(伪链接):github.com/example/tidydata26-solution

正文完
 0
评论(没有评论)