0Pricing
Learn AI with Python · บทเรียน

การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย

วิเคราะห์ความสัมพันธ์ระหว่างคุณลักษณะกับเป้าหมาย ตรวจจับความไม่สมดุลของคลาส และวัดสารสนเทศร่วม

การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย เป็นบทเรียน 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     800

value_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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เวิร์กโฟลว์ EDA และการทำโปรไฟล์ข้อมูล
  2. การวิเคราะห์ตัวแปรเดียว
  3. การวิเคราะห์สองตัวแปรและหลายตัวแปร
  4. การแจกแจงคุณลักษณะและการวิเคราะห์เป้าหมาย
← กลับไปที่ Learn AI with Python