แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป
ผู้เรียนจะแยกความแตกต่างระหว่างข้อมูลเปลี่ยนแปลงกับแนวคิดเปลี่ยนแปลงโดยใช้ตัวอย่างอนุกรมเวลา และทำความเข้าใจว่า data drift ไม่ได้หมายความว่าประสิทธิภาพของแบบจำลองจะลดลงเสมอไป
แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป เป็นบทเรียน Machine Learning Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Machine Learning Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเปลี่ยนแปลงของแนวคิดคืออะไร
การเปลี่ยนแปลงของแนวคิดเกิดขึ้นเมื่อความสัมพันธ์ระหว่างคุณลักษณะนำเข้า X กับป้ายกำกับเป้าหมาย Y เปลี่ยนไปตามเวลา แม้ว่าการแจกแจงของคุณลักษณะจะยังคงเดิมก็ตาม ในการตรวจจับการฉ้อโกง ผู้ฉ้อโกงจะเรียนรู้ว่าธุรกรรมใดถูกทำเครื่องหมายและเปลี่ยนรูปแบบของตน ดังนั้นธุรกรรมที่ดูเหมือนฉ้อโกงในปี 2022 อาจดูปกติในปี 2024 “แนวคิด” ที่กำลังเรียนรู้ (ลักษณะของการฉ้อโกง) เปลี่ยนไป แต่การแจกแจงของคุณลักษณะอาจดูไม่เปลี่ยนแปลง ทำให้ตรวจจับการเปลี่ยนแปลงของแนวคิดได้ยากกว่าการเปลี่ยนแปลงของข้อมูล
การเปลี่ยนแปลงของข้อมูลเทียบกับการเปลี่ยนแปลงของแนวคิด: ความแตกต่างสำคัญ
ความแตกต่างที่สำคัญคือ การเปลี่ยนแปลงของข้อมูลเป็นการเปลี่ยนแปลงของ P(X) หรือการแจกแจงคุณลักษณะนำเข้า ส่วนการเปลี่ยนแปลงของแนวคิดเป็นการเปลี่ยนแปลงของ P(Y|X) หรือความสัมพันธ์แบบมีเงื่อนไขระหว่างคุณลักษณะกับป้ายกำกับ การเปลี่ยนแปลงของข้อมูลไม่ได้ทำให้ประสิทธิภาพของแบบจำลองลดลงเสมอไป หากการแจกแจงใหม่ยังอยู่ภายในขอบเขตการตัดสินใจที่เรียนรู้ไว้ ส่วนการเปลี่ยนแปลงของแนวคิดทำให้ประสิทธิภาพลดลงเสมอ เพราะการจับคู่จาก X ไปยัง Y ที่แบบจำลองเรียนรู้ไว้ไม่ถูกต้องแล้ว ไม่ว่า X จะดูเหมือนเดิมหรือไม่
import numpy as np
import pandas as pd
# Scenario: credit scoring model
# Feature: income. Label: 1 = defaults, 0 = repays
# Training period: incomes 30-50k correlate with defaults
np.random.seed(42)
train_income = np.random.normal(40000, 8000, 1000)
train_default = (train_income < 35000).astype(int) # low income -> default
# Concept drift: inflation shifts threshold; now defaults start at 50k
prod_income = np.random.normal(40000, 8000, 500) # SAME distribution (no data drift)
prod_default = (prod_income < 50000).astype(int) # new relationship
print('Train default rate:', train_default.mean().round(3))
print('Prod default rate:', prod_default.mean().round(3))
print('Feature distribution same (no data drift).',
'But Y|X relationship has changed (concept drift).')ประเภทของการเปลี่ยนแปลงของแนวคิด
การเปลี่ยนแปลงของแนวคิดมีสี่รูปแบบ การเปลี่ยนแปลงฉับพลัน: ความสัมพันธ์เปลี่ยนไปอย่างทันที (เช่น COVID-19 ทำให้รูปแบบการใช้จ่ายของผู้บริโภคเปลี่ยนไปในชั่วข้ามคืน) การเปลี่ยนแปลงแบบค่อยเป็นค่อยไป: แนวคิดเดิมค่อย ๆ เลือนหายและแนวคิดใหม่เริ่มปรากฏ (เช่น นิยามของจดหมายขยะที่เปลี่ยนไปตลอดหลายเดือน) การเปลี่ยนแปลงแบบเพิ่มขึ้นต่อเนื่อง: การเปลี่ยนแปลงอย่างช้า ๆ ต่อเนื่องโดยไม่มีจุดเปลี่ยนที่ชัดเจน การเปลี่ยนแปลงแบบเกิดซ้ำ: รูปแบบตามฤดูกาล ความสัมพันธ์ในช่วงคริสต์มาสต่างจากเดือนกรกฎาคม แต่ในที่สุดเดือนกรกฎาคมก็กลับมาอีกครั้ง
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 100, 1000)
# Sudden drift: step function at t=50
sudden = np.where(t < 50, 0.8, 0.3) # accuracy drops at t=50
# Gradual drift: linear transition
gradual = np.where(t < 40, 0.8,
np.where(t > 60, 0.4,
0.8 - (t - 40) * 0.02))
# Recurring drift: seasonal pattern
recurring = 0.6 + 0.2 * np.sin(2 * np.pi * t / 20)
for name, series in [('Sudden', sudden), ('Gradual', gradual), ('Recurring', recurring)]:
print(f'{name} drift -- min acc: {series.min():.2f}, max: {series.max():.2f}')การตรวจจับการเปลี่ยนแปลงของแนวคิดผ่านการตรวจสอบประสิทธิภาพ
สัญญาณที่น่าเชื่อถือที่สุดของการเปลี่ยนแปลงของแนวคิดคือประสิทธิภาพของแบบจำลองที่ลดลงบนข้อมูลการใช้งานจริงซึ่งมีป้ายกำกับ ติดตามเมตริกที่เลือก (ความแม่นยำ, F1, AUC) บนหน้าต่างเคลื่อนที่ของผลการทำนายล่าสุดที่มีป้ายกำกับจริงพร้อมใช้งาน แนวโน้มประสิทธิภาพที่ลดลงโดยไม่มีคำอธิบายจากการเปลี่ยนแปลงของข้อมูล (คุณลักษณะดูเหมือนเดิม) เป็นหลักฐานที่ชัดเจนของการเปลี่ยนแปลงของแนวคิด วิธีนี้ต้องมีวงจรป้อนกลับ ซึ่งก็คือการรวบรวมป้ายกำกับจริงสำหรับผลการทำนายในการใช้งานจริง และอาจใช้เวลาตั้งแต่หลายวันถึงหลายเดือนตามลักษณะงาน
import numpy as np
import pandas as pd
np.random.seed(42)
# Simulate weekly model accuracy tracking
weekly_accuracy = [
0.92, 0.91, 0.90, 0.89, 0.88, # slight decline
0.86, 0.83, 0.79, 0.74, 0.68, # accelerating decline = concept drift
0.65, 0.61
]
df = pd.DataFrame({'week': range(1, 13), 'accuracy': weekly_accuracy})
df['rolling_mean'] = df['accuracy'].rolling(3).mean()
df['alert'] = df['accuracy'] < 0.75 # threshold
print(df.to_string(index=False))
print('Weeks with alerts:', df[df['alert']]['week'].tolist())การตรวจจับการเปลี่ยนแปลงของแนวคิดโดยไม่มีป้ายกำกับ
การรอป้ายกำกับจริงใช้เวลานาน เมื่อป้ายกำกับมาถึงล่าช้า ให้ใช้การตรวจสอบการแจกแจงผลการทำนายเป็นสัญญาณเตือนล่วงหน้า หาก P(X) คงที่ (ไม่มีการเปลี่ยนแปลงของข้อมูล) แต่การแจกแจงป้ายกำกับที่แบบจำลองทำนายเปลี่ยนไปอย่างมีนัยสำคัญ นั่นบ่งชี้ว่าแนวคิดพื้นฐานอาจเปลี่ยนไป ตัวอย่างเช่น หากอัตราการทำนายผลบวกของตัวจำแนกแบบทวิภาคีลดลงจาก 30% เหลือ 5% โดยไม่มีการเปลี่ยนแปลงของการแจกแจงคุณลักษณะ แบบจำลองอาจกำลังพบความสัมพันธ์ระหว่างคุณลักษณะกับกลุ่มผลบวกที่แตกต่างออกไป
import numpy as np
# Monitoring prediction distributions as a proxy for concept drift
# Period 1 (training distribution): ~30% positive predictions
period1_probs = np.random.beta(2, 5, 1000) # right-skewed, ~30% above 0.5
period1_pos_rate = (period1_probs > 0.5).mean()
# Period 2 (concept drifted): only ~5% positive predictions (model confused)
period2_probs = np.random.beta(1, 15, 500) # very right-skewed
period2_pos_rate = (period2_probs > 0.5).mean()
print(f'Period 1 positive rate: {period1_pos_rate:.2%}')
print(f'Period 2 positive rate: {period2_pos_rate:.2%}')
print(f'Rate drop: {(period1_pos_rate - period2_pos_rate):.2%}')
print('Possible concept drift detected!')การฝึกใหม่แบบใช้หน้าต่าง: การปรับให้เข้ากับการเปลี่ยนแปลงของแนวคิด
กลยุทธ์ที่ใช้บ่อยที่สุดในการจัดการการเปลี่ยนแปลงของแนวคิดคือการฝึกใหม่แบบใช้หน้าต่าง โดยฝึกแบบจำลองใหม่เป็นระยะด้วยตัวอย่าง N รายการล่าสุดเท่านั้น และทิ้งข้อมูลเก่าที่สะท้อนรูปแบบล้าสมัย หน้าต่างเลื่อนจะเก็บตัวอย่าง N รายการล่าสุด ส่วนหน้าต่างขยายจะใช้ข้อมูลทั้งหมดโดยให้น้ำหนักกับข้อมูลล่าสุด ขนาดหน้าต่างที่เหมาะสมขึ้นอยู่กับความเร็วในการพัฒนาของแนวคิด โดเมนที่เปลี่ยนแปลงเร็ว (ตลาดการเงิน) ต้องใช้หน้าต่างเล็กกว่าโดเมนที่เปลี่ยนแปลงช้า (การพยากรณ์อากาศ)
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
np.random.seed(42)
def simulate_concept_drift(n, t):
X = np.random.normal(0, 1, (n, 2))
# Decision boundary rotates over time
y = ((X[:, 0] * np.cos(t) - X[:, 1] * np.sin(t)) > 0).astype(int)
return X, y
# Full retrain vs sliding window retrain
for window_size in [100, 500, None]: # None = all data
all_X, all_y = [], []
accs = []
for t in np.linspace(0, np.pi, 10):
X, y = simulate_concept_drift(200, t)
all_X.append(X)
all_y.append(y)
if window_size:
train_X = np.vstack(all_X[-window_size//200:])
train_y = np.hstack(all_y[-window_size//200:])
else:
train_X = np.vstack(all_X)
train_y = np.hstack(all_y)
clf = LogisticRegression().fit(train_X, train_y)
accs.append(clf.score(X, y))
print(f'Window={window_size}: avg accuracy={np.mean(accs):.3f}')การให้น้ำหนักตัวอย่าง: ลดน้ำหนักข้อมูลเก่า
แทนที่จะตัดข้อมูลด้วยขอบเขตหน้าต่างแบบตายตัว ให้กำหนดน้ำหนักที่ลดลงแบบเอ็กซ์โพเนนเชียลแก่ตัวอย่างฝึก เพื่อให้ตัวอย่างล่าสุดมีส่วนต่อแบบจำลองมากกว่า ตัวอย่างจากสัปดาห์ที่แล้วมีน้ำหนัก 1.0 ตัวอย่างจากเดือนที่แล้วมีน้ำหนัก 0.5 และตัวอย่างจากหกเดือนที่แล้วมีน้ำหนัก 0.1 ตัวประมาณจำนวนมากใน scikit-learn ยอมรับพารามิเตอร์ sample_weight ใน fit method จึงนำไปใช้งานได้ง่ายโดยไม่ต้องทิ้งข้อมูลใด ๆ
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
np.random.seed(42)
# Simulate 1000 training examples collected over 10 weeks
X = np.random.normal(0, 1, (1000, 5))
y = (X[:, 0] + np.random.normal(0, 0.5, 1000) > 0).astype(int)
weeks_ago = np.linspace(10, 0, 1000) # example 0 is oldest, 999 is newest
# Exponential decay: half-life of 3 weeks
half_life = 3.0
sample_weights = np.exp(-weeks_ago * np.log(2) / half_life)
sample_weights /= sample_weights.sum()
clf = GradientBoostingClassifier(n_estimators=100, random_state=42)
clf.fit(X, y, sample_weight=sample_weights * len(y)) # scale up
print('Model trained with recency-weighted samples.')
print('Weight ratio new/old:', round(sample_weights[-1] / sample_weights[0], 2))ตัวตรวจจับการเปลี่ยนแปลง CUSUM และ ADWIN
อัลกอริทึมเฉพาะสำหรับตรวจจับการเปลี่ยนแปลงของแนวคิดให้การแจ้งเตือนที่มีหลักการมากขึ้น CUSUM (ผลรวมสะสม) ตรวจจับการเปลี่ยนแปลงของค่าเฉลี่ยในลำดับข้อมูลโดยสะสมค่าความเบี่ยงเบนจากค่าอ้างอิง ADWIN (การใช้หน้าต่างแบบปรับตัว) รักษาหน้าต่างที่มีความยาวแปรผัน และลดขนาดหน้าต่างลงเมื่อการทดสอบทางสถิติตรวจพบการเปลี่ยนแปลงของการแจกแจงภายในหน้าต่าง ไลบรารี river (เดิมคือ scikit-multiflow) รองรับทั้งสองวิธีสำหรับข้อมูลแบบกระแส
# Using the river library for streaming drift detection
# pip install river
# from river.drift import ADWIN
# adwin = ADWIN(delta=0.002) # delta controls sensitivity
# error_sequence = [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1] # errors over time
#
# for i, error in enumerate(error_sequence):
# adwin.update(error)
# if adwin.drift_detected:
# print(f'ADWIN detected drift at step {i}')
# adwin = ADWIN(delta=0.002) # reset detector
# Manual CUSUM example:
def cusum(errors, threshold=5, drift=0.01):
cum_sum, alerts = 0, []
for i, e in enumerate(errors):
cum_sum = max(0, cum_sum + e - drift)
if cum_sum > threshold:
alerts.append(i)
cum_sum = 0
return alerts
errors = [0]*10 + [1]*15 # errors spike after step 10
print('CUSUM drift alerts at steps:', cusum(errors))การเปลี่ยนแปลงของแนวคิดเทียบกับฤดูกาล
ฤดูกาลคือความแปรผันเป็นคาบที่คาดการณ์ได้ (เช่น การซื้อของพุ่งสูงในช่วงคริสต์มาสและรูปแบบการเดินทางช่วงฤดูร้อน) ขณะที่การเปลี่ยนแปลงของแนวคิดคือการเปลี่ยนแปลงแบบมีทิศทางเดียวที่คาดการณ์ไม่ได้ ระบบตรวจสอบที่ดีจะแยกความแตกต่างได้โดยตรวจสอบรูปแบบฤดูกาลในอดีต หากการแจกแจงปัจจุบันตรงกับการแจกแจงของช่วงเวลาเดียวกันในปีก่อน ก็น่าจะเป็นฤดูกาลมากกว่าการเปลี่ยนแปลง เพิ่มคุณลักษณะช่วงเวลาของปีในแบบจำลองเพื่อจัดการฤดูกาลที่คาดการณ์ได้ แทนที่จะเริ่มการฝึกใหม่โดยไม่จำเป็น
import numpy as np
from scipy.stats import ks_2samp
np.random.seed(42)
# Training: July 2023 data
july_2023 = np.random.normal(100, 20, 1000) # low activity (summer)
# Monitoring: July 2024 (seasonal -- same month last year)
july_2024 = np.random.normal(102, 21, 500) # similar to last July
# Monitoring: December 2024 (seasonal spike -- same as Dec 2023)
dec_2024 = np.random.normal(180, 30, 500) # high activity (Christmas)
stat_july, p_july = ks_2samp(july_2023, july_2024)
stat_dec, p_dec = ks_2samp(july_2023, dec_2024)
print(f'July 2024 vs July 2023: KS={stat_july:.3f} p={p_july:.3f} -> {"drift" if p_july < 0.05 else "seasonal OK"}')
print(f'Dec 2024 vs July 2023: KS={stat_dec:.3f} p={p_dec:.3f} -> Expected seasonal shift')การสร้างแผนตอบสนองต่อการเปลี่ยนแปลงของแนวคิด
ตอบสนองต่อการเปลี่ยนแปลงของแนวคิดด้วยแผนแบบแบ่งระดับ ระดับ 1 (การเตือนล่วงหน้า): แจ้งเตือนเมื่อการแจกแจงผลการทำนายเปลี่ยนไปโดยไม่ต้องรอป้ายกำกับ ระดับ 2 (การยืนยัน): เมื่อป้ายกำกับมาถึง ให้ยืนยันว่าประสิทธิภาพลดลงเกิน 5% เมื่อเทียบตามสัดส่วน ระดับ 3 (การดำเนินการ): เริ่มการฝึกใหม่แบบใช้หน้าต่างโดยอัตโนมัติ และใช้เวลาที่ตรวจพบการเปลี่ยนแปลงเป็นจุดตัดของหน้าต่าง ระดับ 4 (การยกระดับ): หากการฝึกใหม่ไม่ทำให้ประสิทธิภาพกลับคืนมา ให้ส่งต่อให้นักวิทยาศาสตร์ข้อมูลตรวจสอบวิศวกรรมคุณลักษณะ
def concept_drift_response(current_accuracy, baseline_accuracy,
data_drift_detected, prediction_rate_shift):
relative_drop = (baseline_accuracy - current_accuracy) / baseline_accuracy
if relative_drop > 0.10:
return ('TIER 4 ESCALATION: >10% accuracy drop. '
'Manual feature engineering review required.')
elif relative_drop > 0.05:
return ('TIER 3 ACTION: 5-10% accuracy drop. '
'Trigger windowed retraining immediately.')
elif data_drift_detected or prediction_rate_shift > 0.15:
return ('TIER 2 MONITOR: Early warning signals present. '
'Increase monitoring to daily. Queue retraining.')
else:
return 'TIER 1 OK: No significant concept drift detected.'
print(concept_drift_response(0.84, 0.92, False, 0.05)) # TIER 3
print(concept_drift_response(0.91, 0.92, True, 0.18)) # TIER 2
print(concept_drift_response(0.91, 0.92, False, 0.03)) # TIER 1แบบจำลอง ансамбเบิลและความทนทานต่อการเปลี่ยนแปลงของแนวคิด
วิธีการแบบ ансамбเบิล เช่น ป่าสุ่มและการเพิ่มค่าเกรเดียนต์ อาจปกปิดการเปลี่ยนแปลงของแนวคิดได้นานกว่าแบบจำลองเดี่ยว เพราะความหลากหลายของแบบจำลองทำให้ไวต่อการเปลี่ยนแปลงของการแจกแจงคุณลักษณะใดคุณลักษณะหนึ่งน้อยลง อย่างไรก็ตาม ความทนทานนี้มีข้อเสียสองด้าน แบบจำลองจะเสื่อมประสิทธิภาพช้าลงและเงียบยิ่งขึ้น ให้ตรวจสอบอัตราความไม่เห็นพ้องของต้นไม้แต่ละต้นในป่า เมื่อบรรดาต้นไม้ไม่เห็นพ้องกันเกี่ยวกับผลการทำนายมากขึ้น นี่คือสัญญาณเริ่มต้นว่าแนวคิดกำลังเปลี่ยนแปลงและแบบจำลอง ансамбเบิลกำลังประสบปัญหาในการหาข้อสรุปร่วมกัน
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# Measure inter-tree disagreement on current data as drift signal
def inter_tree_disagreement(forest, X):
predictions = np.array([tree.predict(X) for tree in forest.estimators_])
# Fraction of pairs of trees that disagree per sample, averaged over samples
n_trees = len(forest.estimators_)
disagreement_per_sample = []
for i in range(X.shape[0]):
preds = predictions[:, i]
disagree = (preds != preds[0]).sum() / n_trees
disagreement_per_sample.append(disagree)
return np.mean(disagreement_per_sample)
# Higher disagreement = more concept drift
# print(inter_tree_disagreement(model, X_current))ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิดการเรียนรู้ของเครื่องด้วย Python จากบทเรียนนี้
ทบทวนบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า การเปลี่ยนแปลงของแนวคิดคือการเปลี่ยนแปลงของ P(Y|X) หรือการจับคู่จากคุณลักษณะไปยังป้ายกำกับ ซึ่งอาจเกิดขึ้นได้แม้การแจกแจงคุณลักษณะจะดูคงที่ ประสิทธิภาพของแบบจำลองที่ลดลงบนข้อมูลการใช้งานจริงซึ่งมีป้ายกำกับเป็นสัญญาณยืนยันของการเปลี่ยนแปลงของแนวคิด และ การฝึกใหม่แบบใช้หน้าต่างกับการให้น้ำหนักตัวอย่างเป็นกลยุทธ์หลักในการปรับตัว เพื่อให้แบบจำลองทันต่อแนวคิดที่เปลี่ยนแปลง ต่อไปเราจะศึกษาการตรวจสอบการแจกแจงผลการทำนายและคะแนนความมั่นใจในฐานะระบบเตือนล่วงหน้า เมื่อยังไม่มีป้ายกำกับจริง
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Machine Learning Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป”
ผู้เรียนจะแยกความแตกต่างระหว่างข้อมูลเปลี่ยนแปลงกับแนวคิดเปลี่ยนแปลงโดยใช้ตัวอย่างอนุกรมเวลา และทำความเข้าใจว่า data drift ไม่ได้หมายความว่าประสิทธิภาพของแบบจำลองจะลดลงเสมอไป คุณปฏิบัติ Machine Learning Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Machine Learning Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Machine Learning Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Machine Learning Academy นี้ได้ไหม
ได้ บทเรียน Machine Learning Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อมูลเปลี่ยนแปลง: การเลื่อนของการกระจายคุณลักษณะตามเวลา
- แนวคิดเปลี่ยนแปลง: เมื่อความสัมพันธ์ระหว่าง X และ Y เปลี่ยนไป
- การติดตามการกระจายของการทำนายและคะแนนความมั่นใจ
- สร้างไปป์ไลน์แจ้งเตือนการเปลี่ยนแปลงของข้อมูลด้วย Evidently AI