พื้นฐานการถดถอย

พื้นหลัง

เมื่อเร็ว ๆ นี้ฉันได้เข้าร่วมสัมมนาเกี่ยวกับการประยุกต์ใช้การถดถอยในธุรกิจ ฉันค่อนข้างแปลกใจกับสิ่งที่รวมอยู่และสิ่งที่เหลืออยู่ หลักสูตร/ตำราสถิติประยุกต์หลายหลักสูตรให้ความสำคัญกับช่วงความเชื่อมั่นของการประมาณค่าสัมประสิทธิ์เป็นอย่างมาก (อาจมากเกินไป) แต่อย่าใช้เวลามากในการอธิบายช่วงความเชื่อมั่นที่คุณสามารถสร้างได้เกี่ยวกับการทำนายของแบบจำลอง มีข้อมูลมากมายที่เราสามารถเรียนรู้ได้จากสิ่งตกค้างของแบบจำลองการถดถอย ตัวชี้วัดที่เราจะเน้นในวันนี้คือค่าเบี่ยงเบนมาตรฐานที่เหลือโดยประมาณ σ^ ('หมวก' ควรอยู่เหนือซิกมา แต่สื่อไม่สนับสนุนนิพจน์ทางคณิตศาสตร์มากนัก)

ซิกม่าแฮท

ค่าเบี่ยงเบนมาตรฐานคงเหลือโดยประมาณมีค่ามากกว่าค่าสัมประสิทธิ์ R-Squared ที่จริงแล้วมันสามารถบอกเราเกี่ยวกับความแม่นยำของการทำนายของเราได้ สมมติว่าเราถดถอยคะแนนสอบมาตรฐานของนักเรียนในเรื่องรายได้ของครอบครัว และเราพบว่าค่าเบี่ยงเบนมาตรฐานของยอดคงเหลือคือ 7 คะแนน สิ่งนี้บอกเราว่าเราสามารถทำนายคะแนนสอบของนักเรียน ให้หรือรับ 7 คะแนนได้ นอกจากนี้ยังช่วยให้เราสร้างช่วงความมั่นใจสำหรับการทำนายของแบบจำลองของเราด้วย เพื่ออธิบายเพิ่มเติม เราต้องพูดถึงการกระจายตัวตัวอย่างของความแปรปรวนคงเหลือโดยประมาณ σ^²

การกระจายตัวอย่างข้างต้นมีศูนย์กลางอยู่ที่ความแปรปรวนคงเหลือของประชากร σ² และมีลักษณะคล้ายกับการกระจายตัวแบบไคสแควร์ที่มีจำนวนการสังเกตลบด้วยจำนวนระดับความเป็นอิสระของตัวทำนาย เมื่อรู้สิ่งนี้แล้ว เราสามารถยืนยันได้ว่า 95 เปอร์เซ็นต์ของตัวอย่างที่เหลือควรอยู่ในช่วงบวกหรือลบ 2σ^² และประมาณ 67 เปอร์เซ็นต์อยู่ภายในบวกหรือลบ σ^² ลองใช้ Python และข้อมูลจริงเพื่อดูว่าความรู้นี้จะมีประโยชน์ได้อย่างไร

ตัวอย่าง

ที่นี่เราจะถดถอยคะแนนการทดสอบของนักเรียนระดับอนุบาลถึงมัธยมศึกษาปีที่ 8 (จากแคลิฟอร์เนีย) เกี่ยวกับจำนวนคอมพิวเตอร์ต่อนักเรียนหนึ่งคน ชุดข้อมูลนี้เป็นชุดข้อมูลที่ค่อนข้างเป็นที่รู้จักในหมู่นักศึกษาวิชาเศรษฐมิติ เรียกว่า "caschool"

import pandas as pd
from statsmodels.formula.api import ols
data = pd.read_csv('/Users/vincentshields/desktop\
/econometrics/caschool.csv')
reg = ols('testscr ~ comp_stu', data=data).fit\
(cov_type = 'HC3')

เราสามารถเข้าถึงส่วนที่เหลือของโมเดลผ่าน statsmodels.formula.api.ols.regressionresults.resid ซึ่งหมายความว่าเราจะได้ σ^ เช่นนี้:

reg.resid.std()

ในกรณีของเรา คำสั่งนี้จะแสดงผล 18.34194887504922 (มีทศนิยมมากกว่าที่จำเป็นหลายตำแหน่ง) ขั้นแรก ให้เขียนฟังก์ชันการทำนายแบบกำหนดเอง:

def predict(data,reg):
    
    """Takes an array-like object and
    returns regression predictions for 
    each element"""
    
    output = []
    for x in data:
        output.append(reg.params[0] + x*reg.params[1])
    return output
predict([0.35,0.41,0.22],reg)

จากนี้เราได้รับ

[671.1550136421824, 675.9193047688409, 660.8323828677557]

เรามั่นใจแค่ไหนกับคำทำนายเหล่านี้? เราสามารถค้นหาได้ดังนี้:

print("We are 95\
 percent confident that\
 the true value falls within +-{:.4f} points\
 from our prediction.".format(2*reg.resid.std()))
# outputs
We are 95 percent confident that the true value falls within +-36.6839 points from our prediction.

ควรกล่าวว่าสิ่งที่เรากำลังทำอยู่ที่นี่คือการสมมติว่าการถดถอยแบบพอดีของเรานั้นเป็นแบบจำลองที่แท้จริง ไม่ใช่แบบจำลองโดยประมาณ ดังนั้นเราจึงถือว่า σ^ เป็นข้อผิดพลาดมาตรฐานของการทำนาย ในความเป็นจริง ข้อผิดพลาดมาตรฐานที่แท้จริงน่าจะสูงกว่า σ^ เล็กน้อย

วิธีนี้จะมีประโยชน์ โดยเฉพาะอย่างยิ่งกับการพยากรณ์ทางการเงินโดยใช้ ols โมเดลไม่จำเป็นต้องเป็นแบบเชิงเส้น คุณสามารถใช้เทคนิคเดียวกันนี้กับโมเดลเลขชี้กำลังหรือลอการิทึมได้ อย่างไรก็ตามขอขอบคุณที่อ่าน! ฉันหวังว่าข้อมูลนี้จะเป็นประโยชน์กับใครบางคน