การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย
วิเคราะห์ความสัมพันธ์ระหว่างคุณลักษณะกับเป้าหมาย ตรวจจับความไม่สมดุลของคลาส และวัดสารสนเทศร่วม
การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องวิเคราะห์คุณลักษณะเทียบกับเป้าหมาย
เป้าหมายคือตัวแปรที่คุณต้องการทำนาย จุดประสงค์ของ EDA สำหรับการสร้างโมเดลคือการเรียนรู้ว่าคุณลักษณะใดเกี่ยวข้องกับเป้าหมายนั้นจริง
บทเรียนนี้ครอบคลุมกราฟเปรียบเทียบคุณลักษณะกับเป้าหมาย การวัดความให้ข้อมูลด้วยข้อมูลร่วม การตรวจหาความไม่สมดุลของคลาส และการแก้ความเบ้ด้วยการแปลงข้อมูล
คุณลักษณะเทียบกับเป้าหมาย — เป้าหมายเชิงตัวเลข
สำหรับเป้าหมายเชิงตัวเลข กราฟกระจายของ feature เทียบกับ target จะแสดงว่าคุณลักษณะนั้นมีสัญญาณหรือไม่
แนวโน้มที่ชัดเจนหมายความว่าคุณลักษณะนั้นใช้ทำนายได้ ส่วนกลุ่มจุดที่ไร้รูปแบบก็น่าจะหมายความว่าใช้ทำนายไม่ได้
import seaborn as sns
import matplotlib.pyplot as plt
sns.scatterplot(x="rooms", y="price", data=df, alpha=0.4)
plt.show()คุณลักษณะเทียบกับเป้าหมาย — เป้าหมายแบบจัดหมวดหมู่
เมื่อเป้าหมายเป็นป้ายกำกับคลาส ให้เปรียบเทียบการกระจายของคุณลักษณะ ภายในแต่ละคลาส KDE ที่ทับซ้อนกันหมายความว่าคุณลักษณะนั้นแยกคลาสได้ไม่ดี ส่วนเส้นโค้งที่แยกจากกันชัดเจนหมายความว่าคุณลักษณะนั้นมีประโยชน์
sns.kdeplot(data=df, x="balance", hue="churned", common_norm=False, fill=True)
plt.title("Balance by churn status")
plt.show()เปรียบเทียบการกระจายของคลาสด้วยแผนภาพกล่อง
แผนภาพกล่องแบบจัดกลุ่มเป็นอีกวิธีหนึ่งในการดูความสัมพันธ์ระหว่างคุณลักษณะกับคลาส โดยวางคลาสเป้าหมายไว้บนแกน x และคุณลักษณะไว้บนแกน y
ค่ามัธยฐานที่แตกต่างกันระหว่างคลาสบ่งชี้ว่าคุณลักษณะนั้นช่วยแยกคลาสได้
sns.boxplot(x="churned", y="tenure", data=df)
plt.show()ตรวจหาความไม่สมดุลของคลาส
ความไม่สมดุลของคลาสเกิดขึ้นเมื่อคลาสเป้าหมายหนึ่งมีจำนวนมากกว่าอีกคลาสอย่างมาก (เช่น ไม่ใช่การฉ้อโกง 95% และการฉ้อโกง 5%) ปัญหานี้ทำให้ค่าความแม่นยำชวนเข้าใจผิด และทำให้โมเดลเอนเอียงไปทางคลาสส่วนใหญ่
ตรวจสอบได้ด้วยการนับค่าอย่างง่ายบนเป้าหมาย
print(df["churned"].value_counts())
# 0 9200
# 1 800value_counts(normalize=True) สำหรับสัดส่วน
จำนวนดิบอาจปกปิดความรุนแรงของความไม่สมดุลได้ normalize=True จะเปลี่ยนจำนวนให้เป็นสัดส่วน ทำให้คุณอ่านค่าเป็นเปอร์เซ็นต์ได้โดยตรง
print(df["churned"].value_counts(normalize=True))
# 0 0.92
# 1 0.08 -> only 8% positive classเหตุใดความไม่สมดุลจึงสำคัญ
เมื่อค่าลบมีสัดส่วน 92% โมเดลที่ทำนายว่า “ไม่” เสมอจะได้ความแม่นยำ 92% ทั้งที่ใช้งานไม่ได้ นี่จึงเป็นเหตุผลที่ควรตรวจดูความไม่สมดุลตั้งแต่เนิ่น ๆ
วิธีแก้มีทั้งการสุ่มตัวอย่างใหม่ (เพิ่มตัวอย่างคลาสส่วนน้อย / ลดตัวอย่างคลาสส่วนใหญ่) การกำหนดน้ำหนักคลาส หรือใช้ตัวชี้วัดอย่างความแม่นยำเชิงบวก ความครอบคลุม และ F1 แทนความแม่นยำ
ข้อมูลร่วม — การวัดความให้ข้อมูล
ข้อมูลร่วมใช้วัดว่าการรู้ค่าของคุณลักษณะช่วยลดความไม่แน่นอนเกี่ยวกับเป้าหมายได้มากเพียงใด ต่างจากสหสัมพันธ์ตรงที่ยังตรวจจับความสัมพันธ์แบบ ไม่เชิงเส้นได้ด้วย
สำหรับเป้าหมายแบบจำแนกประเภท scikit-learn มี mutual_info_classif ให้ใช้
from sklearn.feature_selection import mutual_info_classif
X = df[["balance", "tenure", "rooms"]]
y = df["churned"]
mi = mutual_info_classif(X, y, random_state=42)
print(dict(zip(X.columns, mi)))จัดอันดับคุณลักษณะด้วยข้อมูลร่วม
การนำคะแนน MI มาใส่ใน Series ที่เรียงลำดับแล้ว จะช่วยจัดอันดับความสำคัญของคุณลักษณะได้อย่างรวดเร็ว ค่า MI ที่สูงกว่าหมายความว่าคุณลักษณะนั้นให้ข้อมูลเกี่ยวกับเป้าหมายได้มากกว่า
นี่เป็นตัวกรองเบื้องต้นที่ดีมากก่อนฝึกโมเดลใด ๆ
import pandas as pd
from sklearn.feature_selection import mutual_info_classif
mi = mutual_info_classif(X, y, random_state=42)
scores = pd.Series(mi, index=X.columns).sort_values(ascending=False)
print(scores)การแปลงลอการิทึมสำหรับคุณลักษณะที่มีความเบ้
คุณลักษณะที่เบ้ไปทางขวา (รายได้ จำนวน และราคา) มักทำงานได้ดีขึ้นหลังใช้ การแปลงลอการิทึม ซึ่งบีบหางยาวให้เข้าใกล้รูปร่างที่สมมาตรมากขึ้น
ใช้ np.log1p (ลอการิทึมของ 1 + x) เพื่อให้จัดการกับค่าศูนย์ได้อย่างปลอดภัย
import numpy as np
df["income_log"] = np.log1p(df["income"])
print(df["income"].skew(), "->", df["income_log"].skew())ก่อนและหลัง: แสดงภาพการแปลงข้อมูล
ตรวจสอบเสมอว่าการแปลงช่วยได้จริงด้วยการแสดงภาพก่อนและหลัง รูปแบบหลังใช้ลอการิทึมควรมีลักษณะใกล้เคียงรูประฆังที่สมมาตรมากขึ้น
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1, 2)
df["income"].hist(ax=ax[0]); ax[0].set_title("Raw")
np.log1p(df["income"]).hist(ax=ax[1]); ax[1].set_title("log1p")
plt.show()ตรวจสอบอย่างรวดเร็ว: แก้ไขคุณลักษณะที่มีความเบ้
คุณลักษณะหนึ่งมีความเบ้ไปทางขวาอย่างมากและมีค่าศูนย์อยู่บางส่วน
สรุป: การวิเคราะห์คุณลักษณะและเป้าหมาย
คุณได้เรียนรู้วิธีเชื่อมโยงคุณลักษณะกับเป้าหมายการทำนายแล้ว:
- ใช้กราฟกระจาย / KDE / แผนภาพกล่องเพื่อดูสัญญาณระหว่างคุณลักษณะกับเป้าหมาย
- ใช้
value_counts(normalize=True)เพื่อตรวจหาและวัดปริมาณความไม่สมดุลของคลาส - ใช้
mutual_info_classifเพื่อจัดอันดับคุณลักษณะตามความให้ข้อมูล รวมถึงความสัมพันธ์แบบไม่เชิงเส้น - ใช้
np.log1pเพื่อลดความเบ้ไปทางขวาของคุณลักษณะ
เท่านี้ก็จบการวิเคราะห์ข้อมูลเชิงสำรวจแล้ว บทถัดไป: การรวบรวมข้อมูลจาก API บนเว็บ
คำถามที่พบบ่อย
บทเรียน “การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย”
วิเคราะห์ความสัมพันธ์ระหว่างคุณลักษณะกับเป้าหมาย ตรวจจับความไม่สมดุลของคลาส และวัดสารสนเทศร่วม คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล
- การวิเคราะห์ตัวแปรเดียว
- การวิเคราะห์สองตัวแปรและหลายตัวแปร
- การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย