您现在的位置:首页 >> 环保科技

行业案例 | 数据分析在银行业运用于之欺诈检测

时间:2025-02-27 12:26:23

8 5050 non-null float64

8 V9 5050 non-null float64

9 V10 5050 non-null float64

10 V11 5050 non-null float64

11 V12 5050 non-null float64

12 V13 5050 non-null float64

13 V14 5050 non-null float64

14 V15 5050 non-null float64

15 V16 5050 non-null float64

16 V17 5050 non-null float64

17 V18 5050 non-null float64

18 V19 5050 non-null float64

19 V20 5050 non-null float64

20 V21 5050 non-null float64

21 V22 5050 non-null float64

22 V23 5050 non-null float64

23 V24 5050 non-null float64

24 V25 5050 non-null float64

25 V26 5050 non-null float64

26 V27 5050 non-null float64

27 V28 5050 non-null float64

28 Amount 5050 non-null float64

29 Class 5050 non-null int64

dtypes: float64(29), int64(1)

memory usage: 1.2 MB

V1 V2 V3 V4 V5 V6 V7

0 1.725265 -1.337256 -1.012687 -0.361656 -1.431611 -1.098681 -0.842274

1 0.683254 -1.681875 0.533349 -0.326064 -1.455603 0.101832 -0.520590

2 1.067973 -0.656667 1.029738 0.253899 -1.172715 0.073232 -0.745771

V8 V9 V10 V11 V12 V13 V14

0 -0.026594 -0.032409 0.215113 1.618952 -0.654046 -1.442665 -1.546538

1 0.114036 -0.601760 0.444011 1.521570 0.499202 -0.127849 -0.237253

2 0.249803 1.383057 -0.483771 -0.782780 0.005242 -1.273288 -0.269260

V15 V16 V17 V18 V19 V20 V21

0 -0.230008 1.785539 1.419793 0.071666 0.233031 0.275911 0.414524

1 -0.752351 0.667190 0.724785 -1.736615 0.702088 0.638186 0.116898

2 0.091287 -0.347973 0.495328 -0.925949 0.099138 -0.083859 -0.189315

V22 V23 V24 V25 V26 V27 V28

0 0.793434 0.028887 0.419421 -0.367529 -0.155634 -0.015768 0.010790

1 -0.304605 -0.125547 0.244848 0.069163 -0.460712 -0.017068 0.063542

2 -0.426743 0.079539 0.129692 0.002778 0.970498 -0.035056 0.017313

Amount Class

0 189.00 0

1 315.17 0

2 59.98 0

数据资料集涵盖所列数据类型:

数最大值格式的数据类型V1到V28是从PCA离散中会赢得的主分量。由于原因,未有给予有关早期动态的背景信息。 Amount数据类型回应交割金额。 Class数据类型显示交割确实为欺骗(1)或非欺骗(0)。 幸运的是,就其性质而言,欺骗事件在任何交割列表中会都是极寡数。然而,当数据资料以外会涵盖的不同各种类型或多或寡存在时,方法学方法多半效果同样。否则,就不能什么数据资料可供借鉴。这个原因被称为各种类型失衡。

让我们计算出新来欺骗交割占数据资料以外会交割据统计的百分比:

round(creditcard_data['Class'].value_counts()*100/len(creditcard_data)).convert_dtypes()

0 99

1 1

Name: Class, dtype: Int64

并创设一个图表,将欺骗与非欺骗的数据资料点可视化。

import matplotlib.pyplot as plt

import numpy as np

def prep_data(df):

X = df.iloc[:, 1:28]

X = np.array(X).astype(float)

y = df.iloc[:, 29]

y = np.array(y).astype(float)

return X, y

def plot_data(X, y):

plt.scatter(X[y==0, 0], X[y==0, 1], label='Class #0', alpha=0.5, linewidth=0.15)

plt.scatter(X[y==1, 0], X[y==1, 1], label='Class #1', alpha=0.5, linewidth=0.15, c='r')

plt.legend()

return plt.show()

X, y = prep_data(creditcard_data)

plot_data(X, y)

我们过去可以确定,欺骗割的分之一并不低,我们有一个各种类型不平衡原因的案例。为了解决这个原因,我们可以采用还原寡数人超抽样技术(SMOTE)来直新平衡我们的数据资料。与随机超额取样不同,SMOTE稍微复杂一些,因为它不只是创设观察最大值的有用副本。相反,它采用欺骗法院的最大值得注意邻居的特征来创设更进一步、还原的结果显示,这些结果显示与寡数人各种类型中会的原有观察最大值并不类似。让我们把SMOTE应采用我们的持卡人数据资料。

from imblearn.over_sampling import SMOTE

method = SMOTE()

X_resampled, y_resampled = method.fit_resample(X, y)

plot_data(X_resampled, y_resampled)

正如我们所看到的,采用SMOTE突然给我们给予了更是多的寡数各种类型的观察结果。为了更是好地看到这种方式的结果,我们将把它们与早期数据资料进行较为。

def compare_plot(X, y, X_resampled, y_resampled, method):

f, (ax1, ax2) = plt.subplots(1, 2)

c0 = ax1.scatter(X[y==0, 0], X[y==0, 1], label='Class #0',alpha=0.5)

c1 = ax1.scatter(X[y==1, 0], X[y==1, 1], label='Class #1',alpha=0.5, c='r')

ax1.set_title('Original set')

ax2.scatter(X_resampled[y_resampled==0, 0], X_resampled[y_resampled==0, 1], label='Class #0', alpha=.5)

ax2.scatter(X_resampled[y_resampled==1, 0], X_resampled[y_resampled==1, 1], label='Class #1', alpha=.5,c='r')

ax2.set_title(method)

plt.figlegend((c0, c1), ('Class #0', 'Class #1'), loc='lower center', ncol=2, labelspacing=0.)

plt.tight_layout(pad=3)

return plt.show()

print(f'Original set:'

f'{pd.value_counts(pd.Series(y))}'

f'SMOTE:'

f'{pd.value_counts(pd.Series(y_resampled))}')

compare_plot(X, y, X_resampled, y_resampled, method='SMOTE')

Original set:

0.0 5000

1.0 50

dtype: int64

SMOTE:

0.0 5000

1.0 5000

dtype: int64

因此,SMOTE方式已经完全平衡了我们的数据资料,寡数群体过去与多数群体的规模完全一致。

我们很快时会回到SMOTE方式的实质分析方法,但过去,让我们回到早期数据资料,并尝试测定欺骗法院。按照这类“老派”的方式,我们必须制定一些规则来抓捕欺骗行为。

例如,此类规则可能涉及不寻常的交割地点或可疑的不时交割。其想法是基于常用的统计数据资料假定阈最大值,多半是基于观察最大值的平均最大值,并在我们的动态上采用这些阈最大值来测定欺骗。

print(creditcard_data.groupby('Class').mean().round(3)[['V1', 'V3']])

V1 V3

Class

0 0.035 0.037

1 -4.985 -7.294

在我们的特殊情况下,让我们分析方法所列条件:V1

creditcard_data['flag_as_fraud'] = np.where(np.logical_and(creditcard_data['V1']

print(pd.crosstab(creditcard_data['Class'], creditcard_data['flag_as_fraud'], rownames=['Actual Fraud'], colnames=['Flagged Fraud']))

Flagged Fraud 0 1

Actual Fraud

0 4984 16

1 28 22

我们测定出新50个欺骗法院中会的22个,但没有测定出新其他28个,并取得16个误报。让我们是不是采用方法学技术确实能反败为胜这些结果。

我们过去要在我们的持卡人数据资料上实现一个简单的语义直返分类方法来标识欺骗行为的遭遇,然后在误解标量上将结果可视化。

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

lr = LogisticRegression()

lr.fit(X_train, y_train)

predictions = lr.predict(X_test)

print(pd.crosstab(y_test, predictions, rownames=['Actual Fraud'], colnames=['Flagged Fraud']))

Flagged Fraud 0.0 1.0

Actual Fraud

0.0 1504 1

1.0 1 9

需要注意的是,在这里我们在误解标量中会要查看的观测最大值较寡,因为我们只采用测定集来计算出新来模型结果,即仅占整个数据资料集的30%。

我们发现了更是高分之一的欺骗法院:90%(9/10),而先前的结果是44%(22/50)。我们取得的误报也比基本上寡了很多,所以这是一个进步。

过去让我们回到前面发表意见的类不平衡原因,并探索确实可以通过将语义直返模型与SMOTE直采样方式结合体来进一步降低得出新结论结果。为了高效、一次性地完成这项临时工,我们需要假定一个管道,并在我们的数据资料上运行它:

from imblearn.pipeline import Pipeline

# Defining which resampling method and which ML model to use in the pipeline

resampling = SMOTE()

lr = LogisticRegression()

pipeline = Pipeline([('SMOTE', resampling), ('Logistic Regression', lr)])

pipeline.fit(X_train, y_train)

predictions = pipeline.predict(X_test)

print(pd.crosstab(y_test, predictions, rownames=['Actual Fraud'], colnames=['Flagged Fraud']))

Flagged Fraud 0.0 1.0

Actual Fraud

0.0 1496 9

1.0 1 9

我们可以看到,在我们的案例中会,SMOTE并不能带给任何改进:我们仍然捕获了90%的欺骗事件,而且,我们的假阳性比例略高。这里的解释是,直新取样一般而言在所有情况下都能带给更是好的结果。当欺骗法院在数据资料中会并不分散时,其最大值得注意的一般而言也是欺骗法院,所以采用SMOTE时会引入一个偏见。

作为一个可能的方式,为了降低语义直返模型的准确性,我们可以调整一些方法值。也可以并不需要采用K-fold对角验证法,而不是直接将数据资料集组成两部分。最后,我们可以尝试一些其他的方法学方法(如议程树或随机树林),是不是它们确实能得出新更是好的结果。

杭州白癜风医院哪里比较好
天津口腔专业医院
长沙炎治疗医院
南京癫痫医院挂号
杭州妇科医院哪最好
英太青凝胶对腱鞘炎有用吗
肩周炎怎么治疗最好
阳了要吃什么药
老人抽搐
视疲劳滴眼液