以下是针对金融风控场景的样本不均衡问题解决方案,包含数据处理、模型优化、部署监控全流程技术细节,以及可直接落地的代码示例:
一、金融风控数据特性与挑战
特性 | 挑战 | 解决方案方向 |
---|---|---|
极低正样本比例(0.1%~1%) | 模型易忽视欺诈模式 | 分层增强+半监督学习 |
高维度稀疏特征 | 传统过采样方法失效(如SMOTE) | 特征压缩+GAN合成 |
时序依赖性强 | 简单随机采样破坏序列模式 | 时间窗口保留+状态增强 |
对抗性演化 | 欺诈手段快速变化导致模型失效 | 在线学习+对抗训练 |
强监管要求 | 需要可解释的模型决策 | SHAP分析+规则引擎融合 |
二、全流程解决方案
1. 数据预处理与增强
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder
import ctgan
# 1.1 混合编码处理高维类别特征
preprocessor = ColumnTransformer(
transformers=[
('num', 'passthrough', ['amount', 'hour']),
('cat', OneHotEncoder(handle_unknown='ignore'), ['merchant_type', 'device_os'])
])
# 1.2 使用CTGAN合成少数类样本
synth = ctgan.CTGANSynthesizer(epochs=100)
synth.fit(fraud_data, discrete_columns=['merchant_type', 'is_fraud']) # fraud_data为欺诈样本
synthetic_fraud = synth.sample(5000) # 生成5000条合成欺诈样本
# 1.3 时间序列特征增强
def create_temporal_features(df):
# 添加时间窗口统计量
df['1h_avg_amount'] = df.groupby('user_id')['amount'].transform(lambda x: x.rolling('1h').mean())
df['24h_freq'] = df.groupby('user_id')['timestamp'].transform(lambda x: x.diff().dt.total_seconds().lt(3600*24).sum())
return df
2. 混合模型架构(LightGBM + NN)
import lightgbm as lgb
import tensorflow as tf
from sklearn.model_selection import train_test_split
# 2.1 LightGBM处理结构化特征
lgb_params = {
'objective': 'binary',
'metric': 'auc',
'scale_pos_weight': 100, # 正样本权重=负样本数/正样本数
'num_leaves': 31,
'feature_fraction': 0.8
}
lgb_train = lgb.Dataset(X_train, y_train)
gbm = lgb.train(lgb_params, lgb_train)
# 2.2 神经网络处理时序序列
tf_model = tf.keras.Sequential([
tf.keras.layers.LSTM(64, input_shape=(24, 10)), # 24小时时间步
tf.keras.layers.Dense(1, activation=