Projekt wykrywania oszustw związanych z kartami kredytowymi – projekt uczenia maszynowego
Opublikowany: 2021-05-24Witamy w naszym projekcie wykrywania oszustw związanych z kartami kredytowymi. Dzisiaj użyjemy Pythona i uczenia maszynowego do wykrywania oszustw w zbiorze danych dotyczących transakcji kartami kredytowymi. Chociaż udostępniliśmy kod dla każdego kroku, najlepiej byłoby zrozumieć, jak działa każdy krok, a następnie go zaimplementować.
Zaczynajmy!
Spis treści
Projekt wykrywania oszustw kart kredytowych z krokami
W naszym projekcie wykrywania oszustw związanych z kartami kredytowymi użyjemy Pythona, jednego z najpopularniejszych dostępnych języków programowania. Nasze rozwiązanie wykryłoby, czy ktoś ominie zabezpieczenia naszego systemu i dokona nielegalnej transakcji.
Zbiór danych zawiera transakcje kartami kredytowymi, a jego cechy są wynikiem analizy PCA. Ma funkcje „Kwota”, „Czas” i „Klasa”, gdzie „Kwota” pokazuje wartość pieniężną każdej transakcji, „Czas” pokazuje sekundy, które upłynęły między pierwszą a odpowiednią transakcją, a „Klasa” pokazuje, czy transakcja jest legalne czy nie.
W „Klasie” wartość 1 oznacza transakcję oszustwa, a wartość 0 – prawidłową transakcję.
Zestaw danych i cały kod źródłowy można pobrać tutaj .
Krok 1: Importuj pakiety
Nasz projekt wykrywania oszustw związanych z kartami kredytowymi rozpoczniemy od zainstalowania wymaganych pakietów. Utwórz plik „main.py” i zaimportuj te pakiety:
importuj numer jako np
importuj pandy jako PD
importuj sklearn
z normy importu scipy.stats
ze scipy.stats importuj multivariate_normal
ze sklearn.preprocessing import MinMaxScaler
importuj matplotlib.pyplot jako plt
importuj seaborn jako sns
Krok 2: Poszukaj błędów
Zanim użyjemy zbioru danych, powinniśmy poszukać w nim ewentualnych błędów i brakujących wartości. Brak wartości może spowodować, że Twój model będzie dawać błędne wyniki, czyniąc go nieefektywnym i nieefektywnym. Dlatego odczytamy zbiór danych i poszukamy brakujących wartości:
df = pd.read_csv('creditcardfraud/creditcard.csv')
# brakujące wartości
print("brakujące wartości:", df.isnull().values.any())
Nie znaleźliśmy brakujących wartości w tym zbiorze danych, więc możemy przejść do następnego kroku.
Dołącz do kursu Sztucznej Inteligencji online z najlepszych światowych uniwersytetów — studiów magisterskich, programów podyplomowych dla kadry kierowniczej oraz zaawansowanego programu certyfikacji w zakresie uczenia maszynowego i sztucznej inteligencji, aby przyspieszyć swoją karierę.
Krok 3: Wizualizacja
Na tym etapie naszego projektu wykrywania oszustw związanych z kartami kredytowymi będziemy wizualizować nasze dane. Wizualizacja pomaga zrozumieć, co pokazują nasze dane i ujawnia wszelkie wzorce, które mogliśmy przeoczyć. Stwórzmy wykres naszego zbioru danych:
# fabuła normalna i oszustwa
count_classes = pd.value_counts(df['Klasa'], sort=True)
count_classes.plot(rodzaj='bar', rot=0)
plt.title("Transakcje rozproszone")
plt.xticks(zakres(2), ['Normalny', 'Oszustwo'])
plt.xlabel("Klasa")
plt.ylabel(„Częstotliwość”)
plt.pokaż()
Na naszym wykresie stwierdziliśmy, że dane są bardzo niezrównoważone. Oznacza to, że nie możemy używać nadzorowanych algorytmów uczenia się, ponieważ spowoduje to nadmierne dopasowanie. Co więcej, nie wymyśliliśmy, jaka byłaby najlepsza metoda rozwiązania naszego problemu, więc przeprowadzimy więcej wizualizacji. Użyj poniższych wskazówek, aby wykreślić mapę termiczną:
# Mapa ciepła
sns.heatmap(df.corr(), vmin=-1)
plt.pokaż()
Teraz utworzymy wykresy dystrybucji danych, które pomogą nam zrozumieć, skąd pochodzą nasze dane:
fig, axs = plt.subplots(6, 5, ściśnięcie=False)
dla i, ax w enumerate(axs.flatten()):
ax.set_facecolor('xkcd:węgiel')
ax.set_title(df.kolumny[i])
sns.distplot(df.iloc[:, i], ax=ax, fit=norm,
kolor=”#DC143C”, fit_kws={„kolor”: „#4e8ef5”})
topór.set_xlabel()
fig.tight_layout(h_pad=-1.5, w_pad=-1.5)
plt.pokaż()
Dzięki wykresom rozkładu danych odkryliśmy, że prawie każda cecha pochodzi z rozkładu Gaussa, z wyjątkiem „Czasu”.
Więc użyjemy wielowymiarowego rozkładu Gaussa do wykrywania oszustw. Ponieważ tylko funkcja „Czas” pochodzi z rozkładu bimodalnego (i zwróć uwagę na rozkład Gaussa), odrzucimy ją. Co więcej, nasza wizualizacja ujawniła, że funkcja „Czas” nie ma żadnych ekstremalnych wartości, jak inne, co jest kolejnym powodem, dla którego ją odrzucimy.
Dodaj następujący kod, aby usunąć omówione przez nas funkcje i skalować inne:
klasy = df['Klasa']
df.drop(['Czas', 'Klasa', 'Kwota'], oś=1, inplace=True)
cols = df.columns.difference(['Klasa'])
MMscaller = MinMaxScaler()
df = MMscaller.fit_transform(df)
df = pd.DataFrame(dane=df, kolumny=kolumny)
df = pd.concat([df, klasy], oś=1)
Krok 4: Dzielenie zbioru danych
Utwórz plik „functions.py”. Tutaj dodamy funkcje, które zaimplementują różne etapy naszego algorytmu. Zanim jednak dodamy te funkcje, podzielmy nasz zbiór danych na dwa zestawy, zestaw walidacyjny i zestaw testowy.
importuj pandy jako PD
importuj numer jako np
def train_validation_splits(df):
# Transakcje oszustwa
oszustwo = df[df['Klasa'] == 1]
# Normalne transakcje
normalny = df[df['Klasa'] == 0]
print('normal:', normal.shape[0])
print('fraud:', fraud.shape[0])
normal_test_start = int(normal.shape[0] * .2)
oszust_test_start = int(oszustwo.shape[0] * .5)
normal_train_start = normal_test_start * 2
val_normal = normalny[:normal_test_start]
val_fraud = oszustwo[:fraud_test_start]
validation_set = pd.concat([wartość_normalna, wartość_oszustwa], oś=0)
test_normal = normalny[normal_test_start:normal_train_start]
test_fraud = oszustwo[fraud_test_start:fraud.shape[0]]
test_set = pd.concat([test_normalny, test_oszustwo], oś=0)
Xval = validation_set.iloc[:, :-1]
Yval = validation_set.iloc[:, -1]
Xtest = test_set.iloc[:, :-1]
Ytest = test_set.iloc[:, -1]
train_set = normalny[normal_train_start:normal.shape[0]]
Xtrain = train_set.iloc[:, :-1]
return Xtrain.to_numpy(), Xtest.to_numpy(), Xval.to_numpy(), Ytest.to_numpy(), Yval.to_numpy()
Krok 5: Oblicz średnią i macierz kowariancji
Poniższa funkcja pomoże nam obliczyć średnią i macierz kowariancji:
def oszacowanie_gaussian_params(X):
„””
Oblicza średnią i kowariancję dla każdej cechy.
Argumenty:
X: zbiór danych
„””
mu = np. średnia(X, oś=0)
sigma = np.cov(XT)
zwróć mu, sigma
Krok 6: Dodaj ostatnie poprawki
W naszym pliku „main.py” zaimportujemy i wywołamy funkcje, które zaimplementowaliśmy w poprzednim kroku dla każdego zestawu:
(Xtrain, Xtest, Xval, Ytest, Yval) = train_validation_splits(df)
(mu, sigma) = szacunkowe_parametry_gaussian(Xtrain)
# oblicz pdf gaussowski
p = multivariate_normal.pdf(Xtrain, mu, sigma)
pval = multivariate_normal.pdf(Xval, mu, sigma)
ptest = multivariate_normal.pdf(Xtest, mu, sigma)
Teraz musimy odwołać się do epsilon (lub progu). Zwykle najlepiej jest zainicjować próg minimalną wartością pliku pdf i zwiększać z każdym krokiem, aż osiągniesz maksymalny plik pdf, jednocześnie zapisując każdą wartość epsilon w wektorze.
Po utworzeniu wymaganego wektora tworzymy pętlę „for” i iterujemy po tym samym. Porównujemy próg z wartościami pliku PDF, które generują nasze przewidywania w każdej iteracji.
Obliczamy również wynik F1 zgodnie z naszymi wartościami prawdy podstawowej i przewidywaniami. Jeśli znaleziony wynik F1 jest wyższy niż poprzedni, zastępujemy zmienną „najlepszego progu”.
Należy pamiętać, że nie możemy używać „dokładności” jako wskaźnika w naszym projekcie wykrywania oszustw związanych z kartami kredytowymi. Dzieje się tak, ponieważ wszystkie transakcje odzwierciedlałyby normalnie z 99% dokładnością, czyniąc nasz algorytm bezużytecznym.
Wszystkie procesy, które omówiliśmy powyżej, zaimplementujemy w naszym pliku „functions.py”:
def metryki(y, prognozy):
fp = np.sum(np.all([prognozy == 1, y == 0], oś=0))
tp = np.sum(np.all([prognozy == 1, y == 1], oś=0))
fn = np.sum(np.all([prognozy == 0, y == 1], oś=0))
precyzja = (tp / (tp + fp)) if (tp + fp) > 0 else 0
przywołaj = (tp / (tp + fn)) if (tp + fn) > 0 else 0
F1 = (2 * precyzja * przypomnienie) / (precyzja +
przypomnieć) jeśli (precyzja + przypomnieć) > 0 inaczej 0
precyzja powrotu, wycofanie, F1
def selectThreshold(yval, pval):
e_wartości = pval
najlepszyF1 = 0
najlepszyEpsilon = 0
dla epsilon w e_values:
przewidywania = pval < epsilon
(precyzja, przypomnienie, F1) = metryki (yval, prognozy)
jeśli F1 > bestF1:
najlepszyF1 = F1
bestEpsilon = epsilon
zwróć bestEpsilon, bestF1
Na koniec zaimportujemy funkcje z pliku „main.py” i wywołamy je w celu zwrócenia wyniku F1 i progu. Pozwoli nam to ocenić nasz model na zestawie testowym:
(epsilon, F1) = selectThreshold(Yval, pval)
print("Najlepszy znaleziony epsilon:", epsilon)
print("Najlepszy F1 w zestawie walidacji krzyżowej:", F1)
(test_precision, test_recall, test_F1) = metryki (Ytest, ptest < epsilon)
print("Znaleziono wartości odstające:", np.sum(ptest < epsilon))
print("Test set Precision:", test_precision)
print("Test set Recall:", test_recall)
print("Test set F1 score:", test_F1)
Oto wyniki całego tego wysiłku:
Najlepszy znaleziony epsilon: 5e-324
Najlepszy F1 w zestawie do walidacji krzyżowej: 0,7852998065764023
Znalezione wartości odstające: 210
Zestaw testowy Precyzja: 0.9095238095238095
Zestaw testowy Przypomnijmy: 0.7764227642276422
Wynik F1 zestawu testowego: 0,837719298245614
Wniosek
Masz to – w pełni funkcjonalny projekt wykrywania oszustw związanych z kartami kredytowymi!
Jeśli masz jakieś pytania lub sugestie dotyczące tego projektu, daj nam znać, umieszczając komentarz poniżej. Chcielibyśmy usłyszeć od ciebie.
Dzięki wszystkim wyuczonym umiejętnościom możesz aktywować się na innych konkurencyjnych platformach, aby sprawdzić swoje umiejętności i zdobyć jeszcze więcej praktycznych umiejętności. Jeśli chcesz dowiedzieć się więcej o kursie, odwiedź stronę Execitive PG Program in Machine Learning & AI i porozmawiaj z naszym doradcą zawodowym, aby uzyskać więcej informacji.
Jaki jest cel projektu wykrywania oszustw związanych z kartami kredytowymi?
Celem tego projektu jest przewidzenie, czy transakcja kartą kredytową jest fałszywa, czy nie, na podstawie kwoty transakcji, lokalizacji i innych danych związanych z transakcją. Ma na celu śledzenie danych transakcji kartą kredytową, co odbywa się poprzez wykrywanie anomalii w danych transakcji. Wykrywanie oszustw związanych z kartą kredytową jest zazwyczaj realizowane przy użyciu algorytmu, który wykrywa wszelkie anomalie w danych transakcji i powiadamia posiadacza karty (jako środek zapobiegawczy) oraz bank o każdej podejrzanej transakcji.
W jaki sposób wykrywanie oszustw związanych z kartami kredytowymi pomaga wykrywać i powstrzymywać oszustwa związane z kartami kredytowymi?
Aby wykryć i powstrzymać oszustwa związane z kartami kredytowymi, firma obsługująca karty kredytowe analizuje dane, które otrzymuje od sprzedawców na temat konsumentów, którzy dokonali zakupów za pomocą swojej karty. Wydawca karty kredytowej automatycznie porównuje dane z zakupu z wcześniej zapisanymi danymi konsumenta, aby określić, czy zakup i konsument są zgodne. Komputer analizuje dane konsumenta i porównuje je z danymi z zakupu. Komputer próbuje również wykryć wszelkie różnice między historią zakupów dokonaną przez konsumenta a bieżącym zakupem. Następnie komputer przeprowadza analizę ryzyka zakupu i określa, czy firma powinna zezwolić na realizację zakupu.
Jaki algorytm uczenia maszynowego jest używany do wykrywania oszustw związanych z kartami kredytowymi?
Istnieje kilka algorytmów uczenia maszynowego, które są wykorzystywane do wykrywania oszustw związanych z kartami kredytowymi. Jednym z najczęstszych algorytmów jest SVM lub maszyny wektorów pomocniczych. SVM to adaptacyjny algorytm klasyfikacji i regresji mający wiele zastosowań w informatyce. Jest używany w wykrywaniu oszustw związanych z kartami kredytowymi do przewidywania i klasyfikowania nowego zestawu danych do zestawu wstępnie zdefiniowanych kategorii (zwanych również klasami). SVM można wykorzystać w wykrywaniu oszustw związanych z kartami kredytowymi, aby przewidzieć, czy nowe dane należą do określonej przez nas kategorii.