การฉ้อโกงมีจริงในหลายธุรกรรม เราสามารถใช้อัลกอริธึมการเรียนรู้ของเครื่องเพื่อโกหกข้อมูลในอดีตและคาดการณ์ความเป็นไปได้ที่ธุรกรรมจะเป็นธุรกรรมการฉ้อโกง ในตัวอย่างของเรา เราจะทำธุรกรรมด้วยบัตรเครดิต วิเคราะห์ข้อมูล สร้างคุณสมบัติและป้ายกำกับ และสุดท้ายใช้หนึ่งในอัลกอริธึม ML เพื่อตัดสินลักษณะของธุรกรรมว่าเป็นการฉ้อโกงหรือไม่ จากนั้นเราจะค้นพบความแม่นยำ ความแม่นยำ และ f-score ของโมเดลที่เราเลือก
การเตรียมข้อมูล
ในขั้นตอนนี้ เราอ่านข้อมูลต้นทาง ศึกษาตัวแปรที่มีอยู่ในนั้น และดูตัวอย่างข้อมูลบางส่วน ซึ่งจะช่วยให้เรารู้จักคอลัมน์ต่างๆ ในชุดข้อมูลและศึกษาคุณลักษณะต่างๆ เราจะใช้ Pandas is library เพื่อสร้าง data frame ที่จะใช้ในขั้นตอนต่อไป
ตัวอย่าง
นำเข้าแพนด้าเป็น pd#โหลด creditcard.csv โดยใช้ pandasdatainput =pd.read_csv('E:\\creditcard.csv')#https://www.kaggle.com/mlg-ulb/creditcardfraud# พิมพ์ด้านบน 5 บันทึกการพิมพ์(datainput[0:5],"\n")# พิมพ์รูปร่างที่สมบูรณ์ของการพิมพ์ชุดข้อมูล ("รูปร่างของชุดข้อมูลที่สมบูรณ์") พิมพ์ (datainput.shape,"\n")
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
เวลา V1 V2 V3 ... V27 V28 จำนวน Class0 0.0 -1.359807 -0.072781 2.536347 ... 0.133558 -0.021053 149.62 01 0.0 1.191857 0.266151 0.166480 ... -0.008983 0.014724 2.69 02 1.0 -1.358354 -1.340163 1.773209 ... - 0.055353 -0.059752 378.66 03 1.0 -0.966272 -0.185226 1.792993 ... 0.062723 0.061458 123.50 04 2.0 -1.158233 0.877737 1.548718 ... 0.219422 0.215153 69.99 0[5 แถว x 31 คอลัมน์]รูปร่างของชุดข้อมูลที่สมบูรณ์ (284807, 31)
การตรวจสอบความไม่สมดุลในข้อมูล
ตอนนี้เราตรวจสอบวิธีการแจกจ่ายข้อมูลระหว่างธุรกรรมที่เป็นการฉ้อโกงและเป็นของแท้ ข้อมูลนี้ช่วยให้เราทราบว่าข้อมูลที่คาดว่าจะเป็นการฉ้อโกงมีกี่เปอร์เซ็นต์ ในอัลกอริธึม ml นี่เรียกว่าความไม่สมดุลของข้อมูล หากธุรกรรมส่วนใหญ่ไม่ใช่การฉ้อโกง ก็จะเป็นการยากที่จะตัดสินธุรกรรมบางรายการว่าเป็นของแท้หรือไม่ เราใช้คอลัมน์คลาสเพื่อนับจำนวนกลไกการฉ้อโกงในธุรกรรม จากนั้นหาเปอร์เซ็นต์ที่แท้จริงของธุรกรรมที่เป็นการฉ้อโกง
ตัวอย่าง
นำเข้าแพนด้าเป็น pd#โหลด creditcard.csv โดยใช้ pandasdatainput =pd.read_csv('E:\\creditcard.csv')false =datainput[datainput['Class'] ==1]true =datainput[datainput[ 'Class'] ==0]n =len(false)/float(len(true))print(n)print('False Detection กรณี:{}'.format(len(datainput[datainput['Class'] ==1])))print('กรณีการตรวจจับจริง:{}'.format(len(datainput[datainput['Class'] ==0])),"\n")
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
0.0017304750013189597 กรณีการตรวจจับเท็จ:492 กรณีการตรวจจับจริง:284315
รายละเอียดของประเภทธุรกรรม
เราตรวจสอบเพิ่มเติมเกี่ยวกับลักษณะของธุรกรรมสำหรับธุรกรรมที่ฉ้อโกงและไม่ฉ้อโกงแต่ละประเภท เราพยายามประมาณค่าพารามิเตอร์ต่างๆ ทางสถิติ เช่น ค่าเฉลี่ย ค่าสูงสุดของค่าเบี่ยงเบนมาตรฐาน ค่าต่ำสุด และค่าเปอร์เซ็นไทล์ที่ต่างกัน ทำได้โดยใช้วิธีการที่อธิบายไว้
ตัวอย่าง
นำเข้าแพนด้าเป็น pd#โหลด creditcard.csv โดยใช้ pandasdatainput =pd.read_csv('E:\\creditcard.csv')#ตรวจสอบความไม่สมดุลใน datafalse =datainput[datainput['Class'] ==1]true =datainput[datainput['Class'] ==0]#False Detection Casesprint("False Detection Cases")print("----------------------" )print(false.Amount.describe(),"\n")#True Detection Casesprint("กรณีการตรวจจับจริง")print("-------------------- --")print(true.Amount.describe(),"\n")
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
กรณีการตรวจจับเท็จ----------------------นับ 492.000000mean 122.211321std 256.683288 นาที 0.000000025% 1.00000050% 9.25000075% 105.890000max 2125.870000Name:จำนวน dtype:float64กรณีการตรวจจับจริง----------------------นับ 284315.000000mean 88.291022std 250.105092 นาที 0.000000025% 5.65000050% 22.00000075% 77.050000max 25691.160000Name:จำนวน dtype:float64ก่อน>การแยกคุณลักษณะและป้ายกำกับ
ก่อนที่เราจะใช้งานอัลกอริทึม ML เราต้องตัดสินใจเกี่ยวกับคุณสมบัติและป้ายกำกับ ซึ่งโดยทั่วไปหมายถึงการจัดหมวดหมู่ตัวแปรตามและตัวแปรอิสระ ในชุดข้อมูลของเรา คอลัมน์คลาสจะขึ้นอยู่กับคอลัมน์ที่เหลือทั้งหมด ดังนั้นเราจึงสร้าง data frames สำหรับคอลัมน์สุดท้าย เช่นเดียวกับ dataframe อื่นสำหรับส่วนที่เหลือของคอลัมน์อื่นทั้งหมด ดาต้าเฟรมเหล่านี้จะใช้ฝึกโมเดลที่เราจะสร้าง
ตัวอย่าง
นำเข้าแพนด้าเป็น pd#โหลด creditcard.csv โดยใช้ pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) and label(y)# เลือกคอลัมน์ทั้งหมดยกเว้นคอลัมน์สุดท้ายสำหรับทั้งหมด rowsX =datainput.iloc[:, :-1].values# เลือกคอลัมน์สุดท้ายของแถวทั้งหมดY =datainput.iloc[:, -1].valuesprint(X.shape)print(Y.shape)ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
(284807, 30)(284807,)ฝึกโมเดล
ตอนนี้เราแบ่งชุดข้อมูลออกเป็นสองส่วน หนึ่งสำหรับการฝึกอบรมและอีกสำหรับการทดสอบ พารามิเตอร์ test_size ใช้เพื่อกำหนดเปอร์เซ็นต์ของชุดข้อมูลที่จะใช้สำหรับการทดสอบเท่านั้น แบบฝึกหัดนี้จะช่วยให้เรามั่นใจในแบบจำลองที่เรากำลังสร้าง
ตัวอย่าง
นำเข้าแพนด้าเป็น pdfrom sklearn.model_selection import train_test_split#Load the creditcard.csv using pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) and label(y)X =datainput iloc[:, :-1].values# เลือกคอลัมน์สุดท้ายของแถวทั้งหมดY =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)การนำการจัดประเภทโครงสร้างการตัดสินใจไปใช้
มีอัลกอริธึมหลายประเภทที่สามารถนำไปใช้กับสถานการณ์นี้ได้ แต่เราเลือกแผนผังการตัดสินใจเป็นอัลกอริทึมสำหรับการจำแนกประเภท ซึ่งเป็นความลึกของต้นไม้สูงสุด 4 และจัดหาตัวอย่างทดสอบเพื่อทำนายค่า สุดท้าย เราคำนวณความถูกต้องของผลลัพธ์จากการทดสอบเพื่อตัดสินใจว่าจะใช้อัลกอริธึมนี้ต่อหรือไม่
ตัวอย่าง
นำเข้าแพนด้าเป็น pdfrom sklearn เมตริกการนำเข้าจาก sklearn.model_selection นำเข้า train_test_split#โหลด creditcard.csv โดยใช้ pandasdatainput =pd.read_csv('E:\\creditcard.csv')#separating features(X) และ label(y)X =datainput.iloc[:, :-1].valuesY =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)#DecisionTreeClassifierfrom sklearn.tree นำเข้า DecisionTreeClassifierclassifier=DecisionTreeClassifier(max_depth=4)classifier.fit(X_train,Y_train)predicted=classifier.predict(X_test)print("\nค่าที่คาดการณ์ :\n",predicted)#AccuracyDT =metrics.accuracy_score(Y_test, ทำนายไว้) * 100print("\nคะแนนความถูกต้องโดยใช้ DecisionTreeClassifier :",DT)ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
ค่าที่ทำนาย :[0 0 0 ... 0 0 0]คะแนนความแม่นยำโดยใช้ DecisionTreeClassifier :99.936799719111การค้นหาพารามิเตอร์การประเมิน
เมื่อระดับความแม่นยำในขั้นตอนข้างต้นเป็นที่ยอมรับ เราจะทำการประเมินแบบจำลองเพิ่มเติมโดยค้นหาพารามิเตอร์ต่างๆ ซึ่งใช้ความแม่นยำ ค่าการเรียกคืน และคะแนน F เป็นพารามิเตอร์ของเรา ความแม่นยำคือเศษส่วนของอินสแตนซ์ที่เกี่ยวข้องระหว่างอินสแตนซ์ที่ดึงมา ในขณะที่การเรียกคืนคือเศษส่วนของจำนวนอินสแตนซ์ที่เกี่ยวข้องทั้งหมดที่ดึงมาจริง คะแนน F ให้คะแนนเดียวที่สมดุลทั้งความกังวลของความแม่นยำและการเรียกคืนในตัวเลขเดียว
ตัวอย่าง
นำเข้าแพนด้าเป็น pdfrom sklearn import metricsfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import precision_scorefrom sklearn.metrics import Recall_scorefrom sklearn.metrics import f1_score#Load the creditcard.csv using pandasdatainput =pd.read_ccredits csv')#separating features(X) and label(y)X =datainput.iloc[:, :-1].valuesY =datainput.iloc[:, -1].values#train_test_split methodX_train, X_test, Y_train, Y_test =train_test_split(X, Y, test_size=0.2)#DecisionTreeClassifierfrom sklearn.tree import DecisionTreeClassifierclassifier=DecisionTreeClassifier(max_depth=4)classifier.fit(X_train,Y_train)predicted=classifier.predict(X_test)print("\nค่าที่คาดการณ์:\n" ,ทำนาย)## #AccuracyDT =metrics.accuracy_score(Y_test, ทำนาย) * 100print("\nคะแนนความถูกต้องโดยใช้ DecisionTreeClassifier :",DT)## #Precisionprint('precision')# Precision =TP / (TP + FP ) (โดยที่ TP =True Positive, TN =True Negative, FP =False Positive, FN =False Nega tive).ความแม่นยำ =precision_score(Y_test, ทำนาย, pos_label=1)print(precision_score(Y_test, ทำนาย, pos_label=1))#Recallprint('recall')# Recall =TP / (TP + FN)recall =Recall_score(Y_test , ทำนาย, pos_label=1)print(recall_score(Y_test, ทำนาย, pos_label=1))#f1-scoreprint('f-Score')# F - คะแนนเป็นวิธีการทางสถิติสำหรับกำหนดบัญชีความถูกต้องสำหรับทั้งความแม่นยำและการเรียกคืน fscore =f1_score(Y_test, ทำนาย, pos_label=1)print(f1_score(Y_test, ทำนาย, pos_label=1))ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
คะแนนความถูกต้องโดยใช้ DecisionTreeClassifier :99.9403110845827precision0.810126582278481recall0.7710843373493976f-Score0.7901234567901234