อัลกอริทึมการถดถอยโลจิสติก
มาเจาะลึกหลักการทำงานภายในและสร้างอัลกอริทึมการถดถอยโลจิสติกกัน เนื่องจากฟังก์ชัน logit() ของ statsmodels มีความซับซ้อนมาก เราจะเน้นไปที่การสร้างการถดถอยโลจิสติกแบบง่ายสำหรับชุดข้อมูลเดียว
แทนที่จะใช้ผลรวมกำลังสองเป็นเมตริก เราจะใช้ likelihood แทน อย่างไรก็ตาม log-likelihood มีความเสถียรในเชิงคำนวณมากกว่า จึงใช้ค่านั้นแทน นอกจากนี้ยังมีการปรับอีกหนึ่งจุด ได้แก่ เนื่องจากเราต้องการหาค่าสูงสุดของ log-likelihood แต่ minimize() ค้นหาค่าต่ำสุดเป็นค่าเริ่มต้น จึงคำนวณ negative log-likelihood แทนจะสะดวกกว่า
ค่า log-likelihood ของแต่ละการสังเกตคือ $$ log(y_{pred}) * y_{actual} + log(1 - y_{pred}) * (1 - y_{actual}) $$
เมตริกที่ต้องคำนวณคือผลรวมติดลบของค่า log-likelihood เหล่านี้
ค่าตัวแปรอธิบาย (คอลัมน์ time_since_last_purchase ของ churn) พร้อมใช้งานในชื่อ x_actual
ค่าตอบสนอง (คอลัมน์ has_churned ของ churn) พร้อมใช้งานในชื่อ y_actual
logistic นำเข้ามาจาก scipy.stats และ logit() กับ minimize() ก็ถูกโหลดมาแล้วเช่นกัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Regression ระดับกลางด้วย statsmodels ใน Python
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Complete the function
def calc_neg_log_likelihood(coeffs):
# Unpack coeffs
____, ____ = ____
# Calculate predicted y-values
y_pred = ____
# Calculate log-likelihood
log_likelihood = ____
# Calculate negative sum of log_likelihood
neg_sum_ll = ____
# Return negative sum of log_likelihood
return ____
# Test the function with intercept 10 and slope 1
print(calc_neg_log_likelihood([10, 1]))