โครงการตรวจจับการฉ้อโกงบัตรเครดิต – โครงการการเรียนรู้ของเครื่อง

เผยแพร่แล้ว: 2021-05-24

ยินดีต้อนรับสู่โครงการตรวจจับการฉ้อโกงบัตรเครดิตของเรา วันนี้ เราจะใช้ Python และการเรียนรู้ของเครื่องเพื่อตรวจจับการฉ้อโกงในชุดข้อมูลธุรกรรมบัตรเครดิต แม้ว่าเราจะแชร์โค้ดสำหรับทุกขั้นตอนแล้ว วิธีที่ดีที่สุดคือต้องเข้าใจว่าแต่ละขั้นตอนทำงานอย่างไรและนำไปปฏิบัติ

เอาล่ะ!

สารบัญ

โครงการตรวจจับการฉ้อโกงบัตรเครดิตด้วยขั้นตอน

ในโครงการตรวจจับการฉ้อโกงบัตรเครดิต เราจะใช้ Python ซึ่งเป็นหนึ่งในภาษาโปรแกรมยอดนิยมที่มีให้บริการ โซลูชันของเราจะตรวจพบว่ามีคนข้ามกำแพงความปลอดภัยของระบบของเราและทำธุรกรรมที่ผิดกฎหมายหรือไม่

ชุดข้อมูลมีธุรกรรมบัตรเครดิต และคุณลักษณะดังกล่าวเป็นผลจากการวิเคราะห์ PCA มีคุณสมบัติ 'จำนวน' 'เวลา' และ 'คลาส' โดยที่ 'จำนวนเงิน' แสดงมูลค่าทางการเงินของทุกธุรกรรม 'เวลา' แสดงวินาทีที่ผ่านไประหว่างธุรกรรมแรกและธุรกรรมที่เกี่ยวข้อง และ 'คลาส' แสดงว่าธุรกรรม ถูกกฎหมายหรือไม่

ใน 'Class' ค่า 1 หมายถึงธุรกรรมการฉ้อโกง และค่า 0 หมายถึงธุรกรรมที่ถูกต้อง

คุณสามารถรับชุดข้อมูลและซอร์สโค้ดทั้งหมด ได้ ที่นี่

ขั้นตอนที่ 1: นำเข้าแพ็คเกจ

เราจะเริ่มโครงการตรวจจับการฉ้อโกงบัตรเครดิตโดยการติดตั้งแพ็คเกจที่จำเป็น สร้างไฟล์ 'main.py' และนำเข้าแพ็คเกจเหล่านี้:

นำเข้า numpy เป็น np

นำเข้าแพนด้าเป็น pd

นำเข้า sklearn

จาก scipy.stats นำเข้าบรรทัดฐาน

จาก scipy.stats นำเข้าหลายตัวแปร_normal

จาก sklearn.preprocessing นำเข้า MinMaxScaler

นำเข้า matplotlib.pyplot เป็น plt

นำเข้า seaborn เป็น sns

ขั้นตอนที่ 2: ค้นหาข้อผิดพลาด

ก่อนที่เราจะใช้ชุดข้อมูล เราควรมองหาข้อผิดพลาดและค่าที่ขาดหายไปในนั้น การมีอยู่ของค่าที่หายไปอาจทำให้โมเดลของคุณให้ผลลัพธ์ที่ผิดพลาด ทำให้ไม่มีประสิทธิภาพและไม่มีประสิทธิภาพ ดังนั้น เราจะอ่านชุดข้อมูลและค้นหาค่าที่ขาดหายไป:

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

#ค่าที่หายไป

พิมพ์("ค่าที่หายไป:", df.isnull().values.any())

เราไม่พบค่าที่ขาดหายไปในชุดข้อมูลนี้ ดังนั้นเราจึงสามารถดำเนินการในขั้นตอนต่อไป

เข้าร่วม หลักสูตรปัญญาประดิษฐ์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก – ปริญญาโท โปรแกรม Executive Post Graduate และหลักสูตรประกาศนียบัตรขั้นสูงใน ML & AI เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

ขั้นตอนที่ 3: การสร้างภาพ

ในขั้นตอนนี้ของโครงการตรวจจับการฉ้อโกงบัตรเครดิต เราจะเห็นภาพข้อมูลของเรา การแสดงภาพช่วยในการทำความเข้าใจว่าข้อมูลของเราแสดงอะไรและเผยให้เห็นรูปแบบใด ๆ ที่เราอาจพลาดไป มาสร้างพล็อตชุดข้อมูลของเรากัน:

#โครงเรื่องปกติและฉ้อโกง

count_classes = pd.value_counts(df['Class'], sort=True)

count_classes.plot(kind='bar', rot=0)

plt.title (“ธุรกรรมแบบกระจาย”)

plt.xticks(range(2), ['Normal', 'Fraud'])

plt.xlabel("คลาส")

plt.ylabel("ความถี่")

plt.show()

ในโครงเรื่องของเรา เราพบว่าข้อมูลมีความไม่สมดุลอย่างมาก ซึ่งหมายความว่าเราไม่สามารถใช้อัลกอริธึมการเรียนรู้ภายใต้การดูแลได้ เนื่องจากจะส่งผลให้มีการทำงานมากเกินไป นอกจากนี้ เรายังไม่ทราบว่าวิธีใดดีที่สุดในการแก้ปัญหาของเรา ดังนั้นเราจะทำการแสดงภาพให้มากขึ้น ใช้สิ่งต่อไปนี้เพื่อพล็อตแผนที่ความร้อน:

#แผนที่ความร้อน

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

plt.show()

ตอนนี้ เราจะสร้างกราฟการกระจายข้อมูลเพื่อช่วยให้เราเข้าใจว่าข้อมูลของเรามาจากไหน:

fig, axs = plt.subplots(6, 5, squeeze=False)

สำหรับฉัน ขวานในการแจกแจง (axs.flatten()):

ax.set_facecolor('xkcd:ถ่าน')

ax.set_title(df.คอลัมน์[i])

sns.distplot(df.iloc[:, i], ขวาน=ขวาน, พอดี=บรรทัดฐาน,

สี=”#DC143C”, fit_kws={“สี”: “#4e8ef5”})

ax.set_xlabel(”)

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

plt.show()

ด้วยกราฟการกระจายข้อมูล เราพบว่าคุณลักษณะเกือบทั้งหมดมาจากการกระจายแบบเกาส์เซียน ยกเว้น "เวลา"

ดังนั้นเราจะใช้การแจกแจงแบบเกาส์เซียนหลายตัวแปรเพื่อตรวจจับการฉ้อโกง เนื่องจากเฉพาะคุณลักษณะ 'เวลา' เท่านั้นที่มาจากการแจกแจงแบบไบโมดอล (และหมายเหตุการแจกแจงแบบเกาส์เซียน) เราจะยกเลิกมัน นอกจากนี้ การแสดงภาพข้อมูลของเรายังเผยให้เห็นว่าคุณลักษณะ 'เวลา' ไม่ได้มีค่าสุดขั้วเหมือนอย่างอื่นๆ ซึ่งเป็นอีกเหตุผลที่เราจะละทิ้งมัน

เพิ่มโค้ดต่อไปนี้เพื่อยกเลิกคุณลักษณะที่เราพูดคุยและปรับขนาดอื่นๆ:

คลาส = df['คลาส']

df.drop(['เวลา', 'คลาส', 'จำนวน'], แกน = 1, แทนที่ = จริง)

cols = df.columns.difference (['คลาส'])

MMscaller = MinMaxScaler ()

df = MMscaller.fit_transform (df)

df = pd.DataFrame (ข้อมูล = df คอลัมน์ = cols)

df = pd.concat([df, คลาส], axis=1)

ขั้นตอนที่ 4: แยกชุดข้อมูล

สร้างไฟล์ 'functions.py' ในที่นี้ เราจะเพิ่มฟังก์ชันเพื่อใช้งานขั้นตอนต่างๆ ของอัลกอริทึมของเรา อย่างไรก็ตาม ก่อนที่เราจะเพิ่มฟังก์ชันเหล่านั้น ให้แบ่งชุดข้อมูลของเราออกเป็นสองชุด คือ ชุดตรวจสอบความถูกต้องและชุดทดสอบ

นำเข้าแพนด้าเป็น pd

นำเข้า numpy เป็น np

def train_validation_splits(df):

# ธุรกรรมฉ้อโกง

การฉ้อโกง = df[df['Class'] == 1]

# การทำธุรกรรมปกติ

ปกติ = df[df['Class'] == 0]

พิมพ์ ('ปกติ:', normal.shape[0])

พิมพ์ ('ฉ้อโกง:', การฉ้อโกง. รูปร่าง[0])

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

การฉ้อโกง_test_start = int(fraud.shape[0] * .5)

normal_train_start = normal_test_start * 2

val_normal = ปกติ[:normal_test_start]

val_fraud = การฉ้อโกง[:fraud_test_start]

validation_set = pd.concat([val_normal, val_fraud], แกน=0)

test_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_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)

(mu, sigma) = ค่าประมาณ_gaussian_params(Xtrain)

# คำนวณเกาส์เซียน pdf

p = multivariate_normal.pdf(Xtrain, mu, sigma)

pval = multivariate_normal.pdf (Xval, mu, sigma)

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

ตอนนี้เราต้องอ้างถึงเอปซิลอน (หรือธรณีประตู) โดยปกติ เป็นการดีที่สุดที่จะเริ่มต้นขีดจำกัดด้วยค่าต่ำสุดของ pdf และเพิ่มในทุกขั้นตอนจนกว่าจะถึง pdf สูงสุดในขณะที่บันทึกค่า epsilon ทุกค่าในเวกเตอร์

หลังจากที่เราสร้างเวกเตอร์ที่ต้องการแล้ว เราก็สร้างลูป 'for' และวนซ้ำไปซ้ำมา เราเปรียบเทียบเกณฑ์กับค่าของ pdf ที่สร้างการคาดการณ์ของเราในการทำซ้ำทุกครั้ง

นอกจากนี้เรายังคำนวณคะแนน F1 ตามค่าความจริงพื้นฐานและการคาดคะเนของเรา หากคะแนน F1 ที่ตรวจพบสูงกว่าคะแนนก่อนหน้า เราจะแทนที่ตัวแปร 'เกณฑ์ที่ดีที่สุด'

โปรดทราบว่าเราไม่สามารถใช้ 'ความแม่นยำ' เป็นตัวชี้วัดในโครงการตรวจจับการฉ้อโกงบัตรเครดิตของเรา นั่นเป็นเพราะมันสะท้อนการทำธุรกรรมทั้งหมดตามปกติด้วยความแม่นยำ 99% ทำให้อัลกอริทึมของเราไร้ประโยชน์

เราจะนำกระบวนการทั้งหมดที่กล่าวถึงข้างต้นไปใช้ในไฟล์ 'functions.py' ของเรา:

def metrics(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)) ถ้า (tp + fp) > 0 อื่น 0

เรียกคืน = (tp / (tp + fn)) ถ้า (tp + fn) > 0 อื่น 0

F1 = (2 * ความแม่นยำ * การเรียกคืน) / (ความแม่นยำ +

เรียกคืน) ถ้า (แม่นยำ + เรียกคืน) > 0 อื่น 0

คืนความแม่นยำ, เรียกคืน, F1

def selectThreshold(yval, pval):

e_values ​​= pval

bestF1 = 0

ดีที่สุดEpsilon = 0

สำหรับ epsilon ใน e_values:

การคาดคะเน = pval < epsilon

(ความแม่นยำ, การเรียกคืน, F1) = ตัวชี้วัด (yval, การคาดคะเน)

ถ้า F1 > bestF1:

bestF1 = F1

bestEpsilon = เอปซิลอน

ส่งคืน bestEpsilon, bestF1

ในท้ายที่สุด เราจะนำเข้าฟังก์ชันต่างๆ ในไฟล์ 'main.py' และเรียกใช้ฟังก์ชันเหล่านี้เพื่อส่งคืนคะแนน F1 และเกณฑ์ จะช่วยให้เราสามารถประเมินแบบจำลองของเราในชุดทดสอบ:

(epsilon, F1) = selectThreshold(Yval, pval)

พิมพ์("พบเอปไซลอนที่ดีที่สุด:", เอปซิลอน)

พิมพ์("F1 ที่ดีที่สุดบนชุดตรวจสอบข้าม:", F1)

(test_precision, test_recall, test_F1) = เมตริก (Ytest, ptest < epsilon)

print("พบค่าผิดปกติ:", np.sum(ptest < epsilon))

พิมพ์("ชุดทดสอบความแม่นยำ:", test_precision)

พิมพ์("ชุดทดสอบเรียกคืน:", test_recall)

พิมพ์(“คะแนนชุดทดสอบ F1:”, test_F1)

นี่คือผลลัพธ์ของความพยายามทั้งหมด:

พบเอปไซลอนที่ดีที่สุด: 5e-324

F1 ที่ดีที่สุดในชุดการตรวจสอบความถูกต้อง: 0.7852998065764023

พบค่าผิดปกติ: 210

ชุดทดสอบ ความแม่นยำ: 0.9095238095238095

เรียกคืนชุดทดสอบ: 0.7764227642276422

คะแนนชุดทดสอบ F1: 0.837719298245614

บทสรุป

มีแล้ว – โครงการตรวจจับการฉ้อโกงบัตรเครดิตที่ทำงานได้อย่างสมบูรณ์!

หากคุณมีคำถามหรือข้อเสนอแนะเกี่ยวกับโครงการนี้ โปรดแจ้งให้เราทราบโดยแสดงความคิดเห็นด้านล่าง เราชอบที่จะได้ยินจากคุณ

ด้วยทักษะที่เรียนรู้ทั้งหมด คุณสามารถใช้งานบนแพลตฟอร์มการแข่งขันอื่นๆ รวมทั้งทดสอบทักษะของคุณและลงมือปฏิบัติจริงได้มากขึ้น หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับหลักสูตร โปรดดูที่หน้า Execitive PG Program in Machine Learning & AI และพูดคุยกับที่ปรึกษาด้านอาชีพของเราสำหรับข้อมูลเพิ่มเติม

เป้าหมายของโครงการตรวจจับการฉ้อโกงบัตรเครดิตคืออะไร?

จุดมุ่งหมายของโครงการนี้คือการคาดการณ์ว่าธุรกรรมบัตรเครดิตเป็นการฉ้อโกงหรือไม่ โดยพิจารณาจากจำนวนธุรกรรม สถานที่ และข้อมูลที่เกี่ยวข้องกับธุรกรรมอื่นๆ มีจุดมุ่งหมายเพื่อติดตามข้อมูลการทำธุรกรรมของบัตรเครดิตซึ่งทำได้โดยการตรวจจับความผิดปกติในข้อมูลการทำธุรกรรม โดยทั่วไปแล้ว การตรวจจับการฉ้อโกงบัตรเครดิตจะดำเนินการโดยใช้อัลกอริธึมที่ตรวจจับความผิดปกติใดๆ ในข้อมูลธุรกรรมและแจ้งให้ผู้ถือบัตรทราบ (เพื่อเป็นมาตรการป้องกันไว้ก่อน) และธนาคารเกี่ยวกับธุรกรรมที่น่าสงสัยใดๆ

การตรวจจับการฉ้อโกงบัตรเครดิตช่วยตรวจจับและหยุดการฉ้อโกงบัตรเครดิตได้อย่างไร

เพื่อตรวจจับและหยุดการฉ้อโกงบัตรเครดิต บริษัทบัตรเครดิตจะวิเคราะห์ข้อมูลที่ได้รับจากร้านค้าเกี่ยวกับผู้บริโภคที่ซื้อสินค้าด้วยบัตรของตน บริษัทบัตรเครดิตจะเปรียบเทียบข้อมูลจากการซื้อโดยอัตโนมัติกับข้อมูลที่จัดเก็บไว้ก่อนหน้านี้ในผู้บริโภค เพื่อพิจารณาว่าการซื้อและผู้บริโภคมีความสอดคล้องกันหรือไม่ คอมพิวเตอร์วิเคราะห์ข้อมูลของผู้บริโภคและเปรียบเทียบกับข้อมูลจากการซื้อ คอมพิวเตอร์ยังพยายามตรวจหาความแตกต่างระหว่างประวัติการซื้อของผู้บริโภคกับการซื้อในปัจจุบัน จากนั้นคอมพิวเตอร์จะทำการวิเคราะห์ความเสี่ยงสำหรับการซื้อและพิจารณาว่าบริษัทควรอนุญาตให้การซื้อนั้นผ่านหรือไม่

อัลกอริธึมการเรียนรู้ของเครื่องใดที่ใช้ในการตรวจจับการฉ้อโกงบัตรเครดิต

มีอัลกอริธึมการเรียนรู้ของเครื่องหลายอย่างที่ใช้ในการตรวจจับการฉ้อโกงบัตรเครดิต หนึ่งในอัลกอริธึมที่พบบ่อยที่สุดคือ SVM หรือสนับสนุนเครื่องเวกเตอร์ SVM เป็นอัลกอริธึมการจำแนกและการถดถอยแบบปรับตัวได้พร้อมแอปพลิเคชั่นมากมายในด้านวิทยาการคอมพิวเตอร์ ใช้ในการตรวจจับการฉ้อโกงบัตรเครดิตเพื่อคาดการณ์และจัดประเภทชุดข้อมูลใหม่เป็นชุดของหมวดหมู่ที่กำหนดไว้ล่วงหน้า (หรือที่เรียกว่าคลาส) สามารถใช้ SVM ในการตรวจจับการฉ้อโกงบัตรเครดิตเพื่อคาดการณ์ว่าข้อมูลใหม่นั้นเป็นของบางหมวดหมู่ที่เรากำหนดไว้แล้วหรือไม่