พื้นหลัง
ขณะที่ฉันกำลังพยายามสมัครงานนักวิทยาศาสตร์ข้อมูล ฉันเพิ่งเข้าร่วมโปรแกรม "Become a Data Scientist" ของ Udacity เมื่อไม่นานมานี้
สำหรับโปรเจ็กต์แรก ฉันต้องวิเคราะห์ชุดข้อมูลและแบ่งปันการวิเคราะห์ของฉันบนสื่อ
เริ่มต้นใช้งาน
ฉันตัดสินใจใช้โอกาสนี้เพื่อแบ่งปันสิ่งที่ฉันได้เรียนรู้จากหนังสือที่น่าทึ่งเล่มนี้ (แนะนำเป็นอย่างยิ่ง!)
บริษัทบัตรเครดิตสามารถตรวจจับธุรกรรมการฉ้อโกงได้อย่างไร?
ภาพรวมข้อมูล
“ชุดข้อมูลจริงประกอบด้วยธุรกรรมบัตรเครดิตของผู้ถือบัตรชาวยุโรปในเดือนกันยายน 2556 ชุดข้อมูลนี้มีธุรกรรมการฉ้อโกง 492 รายการจากธุรกรรม 284,807 รายการ ชุดข้อมูลไม่สมดุลอย่างมาก ระดับเชิงบวก (การฉ้อโกง) คิดเป็น 0.172% ของธุรกรรมทั้งหมด
- 'เวลา' ประกอบด้วยวินาทีที่ผ่านไประหว่างแต่ละธุรกรรม
- คุณสมบัติ V1, V2, … V28 เป็นส่วนประกอบหลักที่ได้รับจาก PCA
- 'จำนวนเงิน' คือจำนวนเงินในการทำธุรกรรม คุณลักษณะนี้สามารถใช้สำหรับการเรียนรู้ที่คำนึงถึงต้นทุนโดยขึ้นอยู่กับตัวอย่าง
- 'Class' คือตัวแปรการตอบสนอง และใช้ค่า 1 ในกรณีที่มีการฉ้อโกง และ 0 มิฉะนั้น
data.head()
data.shape
สร้างสถิติสรุป
# describes the data, column by column. data.describe()
data.columns
# The total number of positive labels, or fraudulent transactions data[‘Class’].sum()
ระบุค่าที่ไม่ใช่ตัวเลขตามคุณลักษณะ
nanCounter = np.isnan(data).sum()
ระบุค่าที่แตกต่างตามคุณลักษณะ
เรามีการประทับเวลาที่แตกต่างกัน 124,592 รายการ อย่างไรก็ตาม มีข้อสังเกตทั้งหมด 284,807 รายการ ซึ่งหมายความว่ามีธุรกรรมหลายรายการในการประทับเวลาบางรายการ
สร้างเมทริกซ์คุณลักษณะและอาร์เรย์ป้ายกำกับ
# Create the feature matrix X and the labels array Y dataX = data.copy().drop([‘Class’],axis=1)
dataY = data[‘Class’].copy()
ทำให้คุณลักษณะเมทริกซ์ X เป็นมาตรฐาน
# Rescale the feature matrix so that each feature, except for time, has a mean of zero and standard deviation of one featuresToScale = dataX.drop([‘Time’],axis=1).columns sX = pp.StandardScaler(copy=True) dataX.loc[:,featuresToScale] = sX.fit_transform(dataX[featuresToScale]) dataX.describe()
วิศวกรรมคุณลักษณะและการเลือกคุณลักษณะ
- “การเลือกคุณสมบัติไม่จำเป็น เนื่องจากจำนวนการสังเกต (284,807) มีจำนวนมากกว่าจำนวนคุณสมบัติ (30) อย่างมหาศาล ซึ่งช่วยลดโอกาสที่จะเกิดการติดตั้งมากเกินไปได้อย่างมาก”
ตรวจสอบความสัมพันธ์ของคุณสมบัติ
correlationMatrix = pd.DataFrame(data=[],index=dataX.columns, columns=dataX.columns) for i in dataX.columns: for j in dataX.columns: correlationMatrix.loc[i,j] = np.round(pearsonr(dataX.loc[:,i], dataX.loc[:,j])[0],2)
การแสดงข้อมูล
count_classes = pd.value_counts(data[‘Class’],sort=True).sort_index() ax = sns.barplot( x = count_classes.index, y = count_classes/len(data)) ax.set_title(‘Frequency Percentage by Class’) ax.set_xlabel(‘Class’) ax.set_ylabel(‘Frequency Percentage’)
กราฟแสดงให้เห็นว่าชุดข้อมูลไม่สมดุลเพียงใด
ยังมีต่อ!
ฉันจะกล่าวถึงการเตรียมโมเดล การสร้างโมเดล Machine Learning ในเรื่องถัดไป! คอยติดตาม!