신용 카드 사기 탐지 프로젝트 - 기계 학습 프로젝트

게시 됨: 2021-05-24

신용 카드 사기 탐지 프로젝트에 오신 것을 환영합니다. 오늘 우리는 파이썬과 머신 러닝을 사용하여 신용 카드 거래 데이터 세트에서 사기를 감지할 것입니다. 모든 단계에 대한 코드를 공유했지만 각 단계가 어떻게 작동하는지 이해하고 구현하는 것이 가장 좋습니다.

의 시작하자!

목차

단계가 있는 신용 카드 사기 탐지 프로젝트

신용 카드 사기 탐지 프로젝트에서 가장 널리 사용되는 프로그래밍 언어 중 하나인 Python을 사용합니다. 우리의 솔루션은 누군가 우리 시스템의 보안 장벽을 우회하여 불법적인 거래를 하는지 감지합니다.

데이터세트에는 신용카드 거래가 있으며, 그 특징은 PCA 분석 결과입니다. 'Amount', 'Time' 및 'Class' 기능이 있습니다. 여기서 'Amount'는 모든 거래의 금전적 가치를 표시하고, 'Time'은 첫 번째 거래와 해당 거래 사이에 경과된 시간(초)을 표시하고, 'Class'는 거래 여부를 표시합니다. 합법인지 아닌지.

'Class'에서 값 1은 사기 거래를 나타내고 값 0은 유효한 거래를 나타냅니다.

여기 에서 데이터세트와 전체 소스 코드를 얻을 수 있습니다 .

1단계: 패키지 가져오기

필요한 패키지를 설치하여 신용 카드 사기 탐지 프로젝트를 시작합니다. 'main.py' 파일을 만들고 다음 패키지를 가져옵니다.

numpy를 np로 가져오기

pandas를 pd로 가져오기

수입 sklearn

scipy.stats 수입 규범에서

scipy.stats에서 multivariate_normal 가져오기

sklearn.preprocessing에서 MinMaxScaler 가져오기

matplotlib.pyplot을 plt로 가져오기

씨본을 sns로 가져오기

2단계: 오류 찾기

데이터 세트를 사용하기 전에 데이터 세트에서 오류와 누락된 값을 찾아야 합니다. 누락된 값이 있으면 모델이 잘못된 결과를 제공하여 비효율적이고 비효율적일 수 있습니다. 따라서 데이터 세트를 읽고 누락된 값을 찾습니다.

df = pd.read_csv('creditcardfraud/creditcard.csv')

# 누락된 값

print("결측값:", df.isnull().values.any())

이 데이터세트에서 누락된 값을 찾지 못했으므로 다음 단계로 진행할 수 있습니다.

세계 최고의 대학에서 온라인으로 인공 지능 과정 에 참여하십시오. 석사, 대학원 대학원 과정, ML 및 AI 고급 인증 프로그램을 통해 빠르게 경력을 쌓을 수 있습니다.

3단계: 시각화

신용 카드 사기 탐지 프로젝트의 이 단계에서는 데이터를 시각화합니다. 시각화는 데이터가 표시하는 내용을 이해하는 데 도움이 되며 놓쳤을 수 있는 패턴을 보여줍니다. 데이터 세트의 플롯을 생성해 보겠습니다.

# 일반 및 사기 음모

count_classes = pd.value_counts(df['클래스'], sort=True)

count_classes.plot(종류='막대', rot=0)

plt.title("분산 거래")

plt.xticks(범위(2), ['정상', '사기'])

plt.xlabel("클래스")

plt.ylabel("빈도")

plt.show()

우리의 플롯에서 우리는 데이터가 매우 불균형하다는 것을 발견했습니다. 즉, 과적합이 발생하므로 지도 학습 알고리즘을 사용할 수 없습니다. 또한 문제를 해결하는 가장 좋은 방법이 무엇인지 파악하지 못했기 때문에 더 많은 시각화를 수행할 것입니다. 다음을 사용하여 히트맵을 플로팅합니다.

# 히트맵

sns.heatmap(df.corr(), vmin=-1)

plt.show()

이제 데이터의 출처를 이해하는 데 도움이 되는 데이터 분포 그래프를 생성합니다.

무화과, axs = plt.subplots(6, 5, squeeze=False)

i의 경우 enumerate(axs.flatten())의 ax:

ax.set_facecolor('xkcd:숯')

ax.set_title(df.columns[i])

sns.distplot(df.iloc[:, i], ax=ax, fit=norm,

color=”#DC143C”, fit_kws={“색상”: “#4e8ef5”})

ax.set_xlabel(")

fig.tight_layout(h_pad=-1.5, w_pad=-1.5)

plt.show()

데이터 분포 그래프를 통해 우리는 '시간'을 제외한 거의 모든 기능이 가우스 분포에서 비롯된다는 것을 발견했습니다.

따라서 다변량 가우스 분포를 사용하여 사기를 탐지합니다. '시간' 기능만 바이모달 분포(및 가우스 분포 참고)에서 나오므로 버리겠습니다. 또한 시각화를 통해 '시간' 기능이 다른 것과 같이 극단값을 갖지 않는 것으로 나타났습니다. 이것이 우리가 이를 폐기하는 또 다른 이유입니다.

논의한 기능을 삭제하고 다른 기능을 확장하려면 다음 코드를 추가하세요.

클래스 = df['클래스']

df.drop(['시간', '클래스', '금액'], 축=1, inplace=True)

열 = df.columns.difference(['클래스'])

MMscaller = MinMaxScaler()

df = MMscaller.fit_transform(df)

df = pd.DataFrame(데이터=df, 열=열)

df = pd.concat([df, 클래스], 축=1)

4단계: 데이터 세트 분할

'functions.py' 파일을 만듭니다. 여기에서 알고리즘의 여러 단계를 구현하는 함수를 추가합니다. 그러나 이러한 기능을 추가하기 전에 데이터 세트를 검증 세트와 테스트 세트의 두 세트로 분할하겠습니다.

pandas를 pd로 가져오기

numpy를 np로 가져오기

def train_validation_splits(df):

# 사기 거래

사기 = df[df['클래스'] == 1]

# 일반 거래

일반 = df[df['클래스'] == 0]

print('정상:', normal.shape[0])

print('사기:', 사기.모양[0])

normal_test_start = int(normal.shape[0] * .2)

사기_테스트_시작 = int(fraud.shape[0] * .5)

normal_train_start = normal_test_start * 2

val_normal = normal[:normal_test_start]

val_fraud = 사기[:fraud_test_start]

validation_set = pd.concat([val_normal, val_fraud], 축=0)

test_normal = normal[normal_test_start:normal_train_start]

test_fraud = 사기[fraud_test_start:fraud.shape[0]]

test_set = pd.concat([test_normal, test_fraud], 축=0)

Xval = validation_set.iloc[:, :-1]

Yval = validation_set.iloc[:, -1]

Xtest = test_set.iloc[:, :-1]

Ytest = test_set.iloc[:, -1]

train_set = normal[normal_train_start:normal.shape[0]]

Xtrain = train_set.iloc[:, :-1]

반환 Xtrain.to_numpy(), Xtest.to_numpy(), Xval.to_numpy(), Ytest.to_numpy(), Yval.to_numpy()

5단계: 평균 및 공분산 행렬 계산

다음 함수는 평균과 공분산 행렬을 계산하는 데 도움이 됩니다.

def 추정_gaussian_params(X):

""

각 기능에 대한 평균과 공분산을 계산합니다.

인수:

X: 데이터세트

""

mu = np.mean(X, 축=0)

시그마 = np.cov(XT)

리턴 뮤, 시그마

6단계: 최종 수정 추가

'main.py' 파일에서 모든 세트에 대해 이전 단계에서 구현한 함수를 가져오고 호출합니다.

(Xtrain, Xtest, Xval, Ytest, Yval) = train_validation_splits(df)

(뮤, 시그마) = Estimate_gaussian_params(Xtrain)

# 가우스 pdf 계산

p = multivariate_normal.pdf(Xtrain, 뮤, 시그마)

pval = multivariate_normal.pdf(Xval, 뮤, 시그마)

ptest = multivariate_normal.pdf(Xtest, mu, sigma)

이제 우리는 엡실론(또는 임계값)을 참조해야 합니다. 일반적으로 임계값을 pdf의 최소값으로 초기화하고 모든 엡실론 값을 벡터에 저장하면서 최대 pdf에 도달할 때까지 단계마다 증가시키는 것이 가장 좋습니다.

필요한 벡터를 생성한 후 'for' 루프를 만들고 이를 반복합니다. 임계값을 모든 반복에서 예측을 생성하는 pdf 값과 비교합니다.

또한 실측 값과 예측에 따라 F1 점수를 계산합니다. 발견된 F1 점수가 이전 점수보다 높으면 '최상 임계값' 변수를 재정의합니다.

신용 카드 사기 탐지 프로젝트에서는 '정확도'를 측정항목으로 사용할 수 없습니다. 모든 트랜잭션을 99% 정확도로 정상적으로 반영하여 알고리즘을 쓸모 없게 만들기 때문입니다.

위에서 논의한 모든 프로세스를 'functions.py' 파일에서 구현할 것입니다.

def 메트릭(y, 예측):

fp = np.sum(np.all([예측 == 1, y == 0], 축=0))

tp = np.sum(np.all([예측 == 1, y == 1], 축=0))

fn = np.sum(np.all([예측 == 0, y == 1], 축=0))

정밀도 = (tp / (tp + fp)) if (tp + fp) > 0 else 0

회상 = (tp / (tp + fn)) if (tp + fn) > 0 else 0

F1 = (2 * 정밀도 * 재현율) / (정밀도 +

회상) if (정밀도 + 회상) > 0 else 0

반환 정밀도, 회수, F1

def selectThreshold(yval, pval):

e_values ​​= pval

베스트F1 = 0

베스트엡실론 = 0

e_values의 엡실론:

예측 = pval < 엡실론

(정밀도, 재현율, F1) = 메트릭(yval, 예측)

F1 > bestF1인 경우:

베스트F1 = F1

베스트엡실론 = 엡실론

반환 bestEpsilon, bestF1

결국 우리는 'main.py' 파일에 있는 함수를 가져와 F1 점수와 임계값을 반환하도록 호출합니다. 테스트 세트에서 모델을 평가할 수 있습니다.

(엡실론, F1) = selectThreshold(Yval, pval)

print("최고의 엡실론을 찾았습니다:", 엡실론)

print("교차 검증 집합에서 최상의 F1:", F1)

(test_precision, test_recall, test_F1) = 메트릭스(Ytest, ptest < 엡실론)

print("이상값 발견:", np.sum(ptest < 엡실론))

print("테스트 세트 정밀도:", test_precision)

print("테스트 세트 리콜:", test_recall)

print("테스트 세트 F1 점수:", test_F1)

이 모든 노력의 결과는 다음과 같습니다.

최고의 입실론 발견: 5e-324

교차 검증 세트에 대한 최상의 F1: 0.7852998065764023

발견된 이상치: 210

테스트 세트 정밀도: 0.9095238095238095

테스트 세트 리콜: 0.7764227642276422

테스트 세트 F1 점수: 0.837719298245614

결론

모든 기능을 갖춘 신용 카드 사기 탐지 프로젝트가 있습니다!

이 프로젝트와 관련하여 질문이나 제안 사항이 있으면 아래에 의견을 남겨 알려주십시오. 여러분의 의견을 듣고 싶습니다.

배운 모든 기술을 사용하여 다른 경쟁 플랫폼에서 활동할 수 있을 뿐만 아니라 기술을 테스트하고 더 많은 실습을 할 수 있습니다. 과정에 대해 더 자세히 알고 싶으시면 기계 학습 및 AI의 Execitive PG 프로그램 페이지를 확인하고 자세한 내용은 직업 카운슬러에게 문의하십시오.

신용 카드 사기 탐지 프로젝트의 목적은 무엇입니까?

이 프로젝트의 목적은 거래 금액, 위치 및 기타 거래 관련 데이터를 기반으로 신용 카드 거래가 사기인지 여부를 예측하는 것입니다. 거래 데이터의 이상을 감지하여 수행되는 신용 카드 거래 데이터를 추적하는 것을 목표로 합니다. 신용 카드 사기 탐지는 일반적으로 거래 데이터의 이상을 탐지하고 의심스러운 거래에 대해 카드 소지자와 은행에 통지하는 알고리즘을 사용하여 구현됩니다(예방 조치로).

신용 카드 사기 탐지는 신용 카드 사기를 탐지하고 중지하는 데 어떻게 도움이 됩니까?

신용 카드 사기를 감지하고 방지하기 위해 신용 카드 회사는 카드로 구매한 소비자에 대해 판매자로부터 받은 데이터를 분석합니다. 신용 카드 회사는 구매 데이터와 이전에 저장된 소비자 데이터를 자동으로 비교하여 구매와 소비자가 일치하는지 여부를 결정합니다. 컴퓨터는 소비자의 데이터를 분석하고 구매 데이터와 비교합니다. 컴퓨터는 또한 소비자의 구매 내역과 현재 구매 간의 차이를 감지하려고 시도합니다. 그런 다음 컴퓨터는 구매에 대한 위험 분석을 수행하고 회사에서 구매를 허용해야 하는지 여부를 결정합니다.

신용 카드 사기 탐지에 사용되는 기계 학습 알고리즘은 무엇입니까?

신용 카드 사기 탐지에 사용되는 몇 가지 기계 학습 알고리즘이 있습니다. 가장 일반적인 알고리즘 중 하나는 SVM 또는 지원 벡터 머신입니다. SVM은 컴퓨터 과학에서 많은 응용 프로그램을 사용하는 적응형 분류 및 회귀 알고리즘입니다. 신용 카드 사기 탐지에서 새 데이터 세트를 미리 정의된 범주(클래스라고도 함) 집합으로 예측하고 분류하는 데 사용됩니다. SVM은 신용 카드 사기 탐지에 사용되어 새 데이터가 이미 정의된 범주에 속하는지 여부를 예측할 수 있습니다.