พื้นหลัง

ขณะที่ฉันกำลังพยายามสมัครงานนักวิทยาศาสตร์ข้อมูล ฉันเพิ่งเข้าร่วมโปรแกรม "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 ในเรื่องถัดไป! คอยติดตาม!