โครงการตรวจจับการฉ้อโกงบัตรเครดิต – โครงการการเรียนรู้ของเครื่อง
เผยแพร่แล้ว: 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 ในการตรวจจับการฉ้อโกงบัตรเครดิตเพื่อคาดการณ์ว่าข้อมูลใหม่นั้นเป็นของบางหมวดหมู่ที่เรากำหนดไว้แล้วหรือไม่