过采样处理

一、数据读取与初步观察

首先,使用pandas库读取信用卡交易数据集:

复制代码
data = pd.read_csv(r"./creditcard.csv")
print(data.head())

通过head()方法查看数据集的前几行,初步了解数据的结构和内容。该数据集包含交易时间、交易金额、多个匿名特征以及交易是否为欺诈(Class,0 表示正常交易,1 表示欺诈交易)等信息。

二、数据标准化

由于数据集中的Amount列数值范围差异较大,为了提高模型的训练效果和收敛速度,需要对其进行标准化处理:

复制代码
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
print(data.head())

StandardScaler会将数据标准化为均值为 0,标准差为 1 的分布,使得不同特征之间具有可比性。

三、数据清洗与特征选择

数据集中的Time列对于欺诈检测的实际意义不大,因此将其删除:

复制代码
data = data.drop(['Time'], axis=1)

同时,为了确保图表能够正确显示中文,设置matplotlib的字体:

复制代码
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

四、样本不均衡问题分析

查看数据集中正负样本(正常交易与欺诈交易)的数量分布:

复制代码
lables_count = pd.value_counts(data['Class'])
print(lables_count)

# 绘制正负样本数量柱状图
plt.title("正负例样本数")
plt.xlabel("类别")
plt.ylabel("频数")
lables_count.plot(kind='bar')
plt.show()

结果显示,数据集中正常交易的数量远远多于欺诈交易,存在严重的样本不均衡问题。这种不均衡可能导致模型在训练过程中更倾向于学习正常交易的特征,从而对欺诈交易的识别能力不足。

五、数据划分与过采样处理

将数据集划分为训练集和测试集:

复制代码
X = data.drop(['Class'], axis=1)
y = data['Class']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

为了解决样本不均衡问题,使用SMOTE( Synthetic Minority Over-sampling Technique)算法对训练集进行过采样:

复制代码
oversampler = SMOTE(random_state=0)
os_x_train, os_y_train = oversampler.fit_resample(X_train, y_train)

SMOTE算法通过合成少数类样本,增加了训练集中欺诈交易样本的数量,使得正负样本比例更加均衡,有助于提升模型对少数类样本的识别能力。

六、逻辑回归模型调优

6.1 超参数搜索

逻辑回归模型中的超参数C(正则化强度的倒数)对模型性能有着重要影响。为了找到最优的C值,采用交叉验证的方式进行搜索:

复制代码
scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]
for i in c_param_range:
    start_time = time.time()
    lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=2000)
    score = cross_val_score(lr, os_x_train, os_y_train, cv=8, scoring='recall')
    score_mean = sum(score) / len(score)
    scores.append(score_mean)
    end_time = time.time
    print("{} time speed :{:.2f}".format(end_time - start_time))
print("recall:}".format(score_mean))

best_c = c_param_range[np.argmax(scores)]
print("最优惩罚因子为:{}".format(best_c))

在上述代码中,遍历不同的C值,使用 8 折交叉验证评估模型在训练集上的召回率(recall),选择召回率最高的C值作为最优超参数。召回率在欺诈检测中尤为重要,它衡量了模型正确识别出欺诈交易的能力。

6.2 模型训练与评估

使用最优的超参数训练逻辑回归模型,并在训练集和测试集上进行评估:

复制代码
lr = LogisticRegression(C=best_c, penalty='l2', solver='lbfgs', max_iter=1000)
lr.fit(os_x_train, os_y_train)

train_predicted = lr.predict(os_x_train)
print(metrics.classification_report(os_y_train, train_predicted))

test_predicted = lr.predict(os_x_test_w)
print(metrics.classification_report(os_y_test_w, test_predicted))

test_predicted_big = lr.predict(x_test_w)
print(metrics.classification_report(y_test_w, test_predicted_big))

通过classification_report输出模型在训练集和测试集上的精确率、召回率、F1 值等评估指标,全面了解模型的性能表现。

七、阈值调整

逻辑回归模型默认以 0.5 作为分类阈值,但在样本不均衡的情况下,调整阈值可能会进一步提升模型性能。尝试不同的阈值,并计算对应的召回率:

复制代码
lr = LogisticRegression(C=best_c, penalty='l2')
lr.fit(os_x_train, os_y_train)

thresholds = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
recalls = []
for i in thresholds:
    y_predict_proba = lr.predict_proba(os_x_train)
    y_predict_proba = pd.DataFrame(y_predict_proba)
    y_predict_proba = y_predict_proba.drop([0], axis=1)
    y_predict_proba[y_predict_proba[[1]] > i] = 1
    y_predict_proba[y_predict_proba[[1]] <= i] = 0

    recall = metrics.recall_score(os_y_train, y_predict_proba[1])
    recalls.append(recall)
    print("{} Recall metric in the testing dataset: {:.3f}".format(i, recall))

通过调整阈值,可以在精确率和召回率之间进行权衡,根据实际业务需求选择最合适的阈值,以达到更好的欺诈检测效果。

八、总结

本文通过对信用卡交易数据集的处理,详细展示了从数据预处理、样本不均衡处理、模型调优到阈值调整的完整流程。在实际应用中,还可以尝试其他机器学习算法(如随机森林、支持向量机等),或者结合集成学习方法进一步提升模型的性能。同时,随着数据的不断更新和业务场景的变化,持续优化模型也是保障信用卡欺诈检测准确性的关键。希望本文的实践经验能够为从事金融风控领域的读者提供有益的参考。

相关推荐
Guheyunyi4 分钟前
监测预警系统重塑隧道安全新范式
大数据·运维·人工智能·科技·安全
码码哈哈爱分享4 分钟前
[特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
人工智能·whisper·语音识别
郄堃Deep Traffic10 分钟前
机器学习+城市规划第十三期:XGBoost的地理加权改进,利用树模型实现更精准的地理加权回归
人工智能·机器学习·回归·城市规划
Lucky-Niu11 分钟前
解决transformers.adapters import AdapterConfig 报错的问题
人工智能·深度学习
FserSuN16 分钟前
Prompt工程学习之思维树(TOT)
人工智能·学习·prompt
字节跳动_离青1 小时前
智能的路径
人工智能
王上上1 小时前
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
论文阅读·人工智能·cnn
Channing Lewis1 小时前
如果科技足够发达,是否还需要维持自然系统(例如生物多样性)中那种‘冗余’和‘多样性’,还是可以只保留最优解?
大数据·人工智能·科技
禺垣1 小时前
区块链技术概述
大数据·人工智能·分布式·物联网·去中心化·区块链
IT科技那点事儿1 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
人工智能·安全