ข้ามไปยังเนื้อหาหลัก

การถดถอยสปลายน์: คู่มือเชิงปฏิบัติด้วย Python และ R

คู่มือเชิงปฏิบัติของการถดถอยสปลายน์ ครอบคลุมวิธีที่พหุนามแบบแบ่งช่วงและปมจำลองความสัมพันธ์ไม่เชิงเส้น ประเภทสปลายน์หลัก และวิธีฟิตใน Python และ R
อัปเดตแล้ว 15 มิ.ย. 2569  · 15 นาที อ่าน

สำรวจด้วย AI

เปิดใน ChatGPTเปิดใน Claudeเปิดใน Perplexity

การฝืนฟิตเส้นตรงกับข้อมูลที่โค้งงอไม่เคยเป็นความคิดที่ดี

การถดถอยเชิงเส้นตั้งสมมติฐานว่าความสัมพันธ์ระหว่างตัวทำนายกับเป้าหมายเป็นเส้นตรง แต่น่าเสียดายที่ความสัมพันธ์ในโลกจริงส่วนใหญ่ไม่เป็นเช่นนั้น ลองนึกถึงความสัมพันธ์ระหว่างรายได้กับการใช้จ่าย หรือเวลาและการเติบโต — เส้นเหล่านี้โค้ง แบนอีกครั้ง โค้งอีกครั้ง และเปลี่ยนทิศทางในแบบที่ไม่สามารถแทนด้วยความชันเดียวได้

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

ในบทความนี้ จะได้เรียนรู้แนวคิดหลักเบื้องหลังการถดถอยสปลายน์ บทบาทของปมที่ควบคุมความยืดหยุ่น ประเภทสปลายน์หลัก ๆ และวิธีประยุกต์ใช้จริง

ก่อนเรียนรู้เกี่ยวกับสปลายน์ แนะนำให้อ่านบทช่วยสอนที่สอนทุกอย่างที่ต้องรู้เกี่ยวกับ การถดถอยเชิงเส้นแบบง่ายก่อน

การถดถอยสปลายน์คืออะไร?

การถดถอยสปลายน์เป็นเทคนิคการถดถอยที่จำลองความสัมพันธ์ไม่เป็นเชิงเส้นด้วยฟังก์ชันพหุนามแบบแบ่งช่วง โดยเชื่อมต่อกันที่จุดที่เรียกว่าปม (knots)

แทนที่จะใช้สมการเดียวอธิบายความสัมพันธ์ทั้งหมด การถดถอยสปลายน์จะแบ่งช่วงของตัวทำนายเป็นชิ้นเล็ก ๆ และฟิตพหุนามแยกกันในแต่ละชิ้น ชิ้นเหล่านี้มาบรรจบกันที่ปม และมีข้อจำกัดเพื่อให้การเปลี่ยนผ่านเรียบลื่น

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

ด้วยเหตุนี้ สปลายน์จึงถูกใช้บ่อยมากในสถิติประยุกต์

ทำไมต้องการการถดถอยสปลายน์

ข้อมูลจริงแทบไม่เคยเป็นเส้นตรง

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

ทางแก้คือใช้โมเดลที่ยืดหยุ่นขึ้น การถดถอยพหุนามดีกรีสูงเป็นตัวเลือกหนึ่ง — เพิ่มพจน์ x^2, x^3, x^4 จนเส้นโค้งงอพอจะตรงกับข้อมูล แต่พหุนามจะไม่เสถียรที่ขอบข้อมูล เพราะเหวี่ยงขึ้นหรือลงในบริเวณที่มีจุดข้อมูลน้อย พฤติกรรมนี้เรียกว่า Runge's phenomenon และทำให้พหุนามดีกรีสูงเสี่ยงต่อการพยากรณ์

การถดถอยสปลายน์อยู่กึ่งกลางระหว่างสองขั้วนี้

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

สรุปแล้ว สปลายน์ให้ความยืดหยุ่นพอจะตามรูปแบบซับซ้อน และโครงสร้างพอจะคุมพฤติกรรมที่ปลายช่วง

สปลายน์รีเกรสชันทำงานอย่างไร

กระบวนงานของการถดถอยสปลายน์มี 3 ขั้นตอนง่าย ๆ เสมอ

  1. แบ่งช่วงของตัวทำนายเป็นภูมิภาค: เลือกชุดของปมตามแกนตัวทำนาย ปมเหล่านี้แบ่งช่วงออกเป็นอินเทอร์วาล หากวาง 3 ปม จะได้ 4 ภูมิภาค ปมคือเส้นแบ่งระหว่างช่วง
  2. ฟิตพหุนามภายในแต่ละภูมิภาค: ภายในแต่ละอินเทอร์วาล โมเดลจะฟิตพหุนามดีกรีต่ำ แต่ละภูมิภาคมีสัมประสิทธิ์พหุนามของตนเอง ทำให้เส้นโค้งงอแตกต่างกันได้ในส่วนต่าง ๆ ของช่วงตัวทำนาย ภูมิภาคที่ความสัมพันธ์แทบจะราบเรียบจะได้พหุนามที่เกือบเรียบ ส่วนภูมิภาคที่ความสัมพันธ์โค้งชันจะได้เส้นที่โค้งมากขึ้น
  3. เชื่อมต่อภูมิภาค: โมเดลบังคับเงื่อนไขความต่อเนื่องที่ทุกปม ค่าพหุนามจากทั้งสองฝั่งต้องเท่ากันที่ปมเพื่อไม่ให้เส้นกระโดด สำหรับสปลายน์กำลังสาม อนุพันธ์อันดับหนึ่งและสองต้องตรงกันด้วย หมายถึงไม่มีมุมแหลมและไม่มีการเปลี่ยนความโค้งแบบปุบปับ

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

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

ปม (Knots) ในการถดถอยสปลายน์คืออะไร?

ปมคือจุดตามแกนตัวทำนายที่พหุนามช่วงหนึ่งสิ้นสุดและช่วงถัดไปเริ่มต้น

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

นี่คือเหตุผลที่ปมเป็นคันโยกหลักในการควบคุมความยืดหยุ่นของโมเดล

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

ดังนั้นการเลือกจำนวนและตำแหน่งของปมให้เหมาะสมคือการตัดสินใจหลักในการถดถอยสปลายน์

ปมน้อยเกินไป

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

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

ตัวอย่างปมน้อยเกินไป

ตัวอย่างปมน้อยเกินไป

ปมน้อยเกินไปนำไปสู่การฟิตต่ำเกิน (underfitting) โมเดลเรียบเกินจะใช้งานจริงไม่ได้

ปมมากเกินไป

ปัญหาตรงกันข้ามก็แย่พอกัน หากวางปมมากเกินไป สปลายน์มีช่วงมากจนเริ่มฟิตสัญญาณรบกวนแทนรูปแบบจริง เส้นโค้งจะส่ายไปมาระหว่างการสังเกตแต่ละครั้งและไล่ตามความผันผวนแบบสุ่มแทนแนวโน้มที่อยู่เบื้องหลัง

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

ตัวอย่างปมมากเกินไป

ตัวอย่างปมมากเกินไป

ปมมากเกินไปนำไปสู่การฟิตเกิน (overfitting) โมเดลยืดหยุ่นเกินกว่าจะทั่วไปได้

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

ประเภทของสปลายน์

สปลายน์มีอยู่หลายแบบ โดยตัวเลือกส่วนใหญ่ขึ้นกับพหุนามที่ใช้ในแต่ละช่วงและข้อจำกัดที่วางบนเส้นโค้ง

สปลายน์เชิงเส้น

สปลายน์เชิงเส้นเป็นเวอร์ชันที่ง่ายที่สุด แต่ละช่วงเป็นเส้นตรง และช่วงต่าง ๆ เชื่อมต่อกันที่ปม

ตัวอย่างสปลายน์เชิงเส้น

ตัวอย่างสปลายน์เชิงเส้น

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

สปลายน์เชิงเส้นเหมาะเมื่อสนใจแนวโน้มภาพรวมและไม่กังวลเรื่องความคมของภาพ ทั้งยังตีความง่ายที่สุดเพราะแต่ละช่วงเป็นเส้นตรงที่มีความชันของตนเอง

สปลายน์กำลังสาม (Cubic splines)

สปลายน์กำลังสามเป็นทางเลือกมาตรฐานในหลายงาน แต่ละช่วงเป็นพหุนามกำลังสาม (ดีกรี 3) และเงื่อนไขความต่อเนื่องเข้มงวดกว่าสปลายน์เชิงเส้น

ตัวอย่างสปลายน์กำลังสาม

ตัวอย่างสปลายน์กำลังสาม

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

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

สปลายน์กำลังสามแบบธรรมชาติ (Natural cubic splines)

สปลายน์กำลังสามแบบธรรมชาติเป็นรูปแบบย่อยที่เพิ่มข้อจำกัดพิเศษที่ขอบของข้อมูล

ตัวอย่างสปลายน์กำลังสามแบบธรรมชาติ

ตัวอย่างสปลายน์กำลังสามแบบธรรมชาติ

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

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

บี-สปลายน์ (B-splines)

บี-สปลายน์ (ย่อจาก basis splines) เป็นวิธีสร้างสปลายน์อีกรูปแบบ แทนที่จะกำหนดพหุนามแต่ละช่วงโดยตรง บี-สปลายน์จะสร้างสปลายน์เป็นผลรวมเชิงถ่วงน้ำหนักของฟังก์ชันฐาน

ตัวอย่างบี-สปลายน์

ตัวอย่างบี-สปลายน์

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

บี-สปลายน์มีความเสถียรเชิงตัวเลขและขยายได้ง่าย การใช้งานสปลายน์สมัยใหม่ส่วนใหญ่ใน Python และ R ใช้การแทนแบบบี-สปลายน์ แม้ว่าหน้าตาอินเทอร์เฟซจะเหมือนสปลายน์ทั่วไปก็ตาม หากเคยเรียก bs() ใน R หรือใช้ SplineTransformer ใน scikit-learn แปลว่าคุณได้ใช้บี-สปลายน์แล้ว

การถดถอยสปลายน์เทียบกับการถดถอยพหุนาม

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

การถดถอยพหุนาม

การถดถอยพหุนาม ฟิตพหุนามเดียวที่ครอบคลุมช่วงตัวทำนายทั้งหมด คุณเลือกดีกรี (2, 3, 5, 10) แล้วโมเดลหาชุดสัมประสิทธิ์เดียวที่ลดความผิดพลาดรวมของข้อมูลทั้งหมด เส้นโค้งมีสมการเดียว และสมการนั้นอธิบายความสัมพันธ์ทุกที่

ฟังดูเรียบร้อย แต่มีปัญหา พหุนามเส้นเดียวต้องบาลานซ์การฟิตทั่วทั้งช่วง ดังนั้นสิ่งที่เกิดในภูมิภาคหนึ่งส่งผลต่ออีกทุกภูมิภาค หากเพิ่มดีกรีเพื่อรับมือกับโค้งชันกลางข้อมูล คุณจะเห็นเส้นเริ่มเหวี่ยงที่ปลายช่วง นี่คือ Runge's phenomenon ที่กล่าวถึงก่อนหน้า — พหุนามดีกรีสูงจะไม่เสถียรใกล้ขอบข้อมูล

อีกปัญหาคือการถดถอยพหุนามไม่มีแนวคิดเรื่องความเฉพาะที่ (locality) สไปค์ที่ x = 5 อาจเปลี่ยนรูปทรงของฟิตที่ x = 50 เพราะทุกการสังเกตมีส่วนต่อสมการสากลเดียวกัน

การถดถอยสปลายน์

การถดถอยสปลายน์แบ่งช่วงตัวทำนายเป็นช่วงย่อย ๆ และฟิตพหุนามดีกรีต่ำในแต่ละช่วง พหุนามต่าง ๆ ถูกเชื่อมต่อกันอย่างราบรื่นที่ปม แต่ละตัวเป็นอิสระในแง่ที่ว่ารูปทรงของมันขับเคลื่อนโดยข้อมูลในภูมิภาคของตัวเองเป็นหลัก

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

เปรียบเทียบเคียงข้างกัน

การถดถอยพหุนามเทียบกับสปลายน์

การถดถอยพหุนามเทียบกับการถดถอยสปลายน์

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

การเลือกจำนวนและตำแหน่งของปม

การเลือกปมคือส่วนที่สำคัญที่สุดของการถดถอยสปลายน์ ปมน้อยไปทำให้ฟิตต่ำเกิน ปมมากไปทำให้ฟิตเกิน และตำแหน่งที่วางปมเปลี่ยนรูปแบบที่โมเดลจะจับได้

มีหลายวิธี และส่วนใหญ่จะใช้ผสมกัน

  1. ความรู้เชิงโดเมน: หากมีความรู้เกี่ยวกับปัญหา จงใช้มัน การศึกษาทางคลินิกอาจวางปมที่เกณฑ์ทางคลินิกที่ทราบ โมเดลกำหนดราคาสามารถวางปมที่จุดที่คาดว่าพฤติกรรมผู้บริโภคจะเปลี่ยน วิธีวางปมตามโดเมนตีความได้ดีที่สุดเพราะช่วงต่าง ๆ สอดคล้องกับเส้นแบ่งจริง
  2. ปมที่เว้นระยะเท่า ๆ กัน: เลือกจำนวนปมแล้ววางเว้นระยะเท่า ๆ กันตลอดช่วงตัวทำนาย วิธีนี้ใช้ได้เมื่อข้อมูลกระจายสม่ำเสมอตามแกนตัวทำนาย แต่จะไม่เวิร์กเมื่อข้อมูลหนาแน่นบางบริเวณและเบาบางบางบริเวณ — ปมที่เว้นระยะเท่ากันอาจตกในบริเวณที่แทบไม่มีข้อมูล ทำให้ฟิตไม่เสถียร
  3. ปมตามควอนไทล์: แทนที่จะวางปมที่ตำแหน่งเท่ากันบนแกน x ให้วางที่ควอนไทล์ของตัวทำนาย หากมี 4 ปมและวางตามควอนไทล์ จะวางที่เปอร์เซ็นไทล์ที่ 20, 40, 60, และ 80 วิธีนี้รับประกันว่าแต่ละช่วงมีจำนวนการสังเกตใกล้เคียงกัน ทำให้ฟิตน่าเชื่อถือขึ้นในบริเวณที่ข้อมูลเบาบาง
  4. การตรวจสอบไขว้ (Cross-validation): ลองจำนวนปมต่าง ๆ ฟิตสปลายน์แต่ละแบบ แล้วเปรียบเทียบประสิทธิภาพบนข้อมูลที่กันไว้ การตั้งค่าที่ให้ข้อผิดพลาดบนชุดตรวจสอบต่ำสุดชนะ วิธีนี้ลดการเดา แต่เพิ่มต้นทุนการคำนวณ และผลลัพธ์ยังขึ้นกับกลยุทธ์การวางปม (เท่ากัน ควอนไทล์) ที่ค้นหา

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

เริ่มจาก 3–5 ปมที่วางตามควอนไทล์ แล้วตรวจสอบรีซิดวล หากเห็นรูปแบบเชิงระบบที่สปลายน์ยังจับไม่ได้ ให้เพิ่มปมในบริเวณนั้น หากฟิตดูส่าย ๆ ให้ลดปม ใช้การตรวจสอบไขว้เมื่อจำเป็นต้องปกป้องทางเลือกหรือเมื่อโมเดลจะนำขึ้นโปรดักชัน

การถดถอยสปลายน์ในแมชชีนเลิร์นนิงและสถิติ

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

  • แนวโน้มอนุกรมเวลา: ใช้แยกแนวโน้มเรียบของอนุกรมเวลาออกจากความผันผวนระยะสั้น ฟิตสปลายน์บนเวลาเป็นตัวทำนายจะให้เส้นแนวโน้มยืดหยุ่นที่ปรับกับการเปลี่ยนทิศได้ โดยไม่ตอบสนองเกินต่อสัญญาณรบกวน นักเศรษฐศาสตร์และนักวิเคราะห์ใช้บ่อยเมื่อต้องการอธิบายเส้นทางพื้นฐานของตัวแปร — เช่น GDP หรือราคาหุ้น — โดยไม่ต้องยึดกับสมมติฐานเชิงเส้นหรือเอกซ์โปเนนเชียล
  • เศรษฐศาสตร์และเศรษฐมิติ: ใช้จำลองความสัมพันธ์ที่ผลของตัวแปรเปลี่ยนไปตามช่วง รายได้ต่อการบริโภคไม่ได้คงที่ เพราะครัวเรือนรายได้น้อยกับสูงใช้จ่ายต่างกัน สปลายน์มองเห็นสิ่งนี้โดยไม่ต้องสมมติรูปแบบฟังก์ชันเฉพาะ
  • สาธารณสุขและชีวสถิติ: ผลลัพธ์ด้านสุขภาพจำนวนมากมีความสัมพันธ์ไม่เชิงเส้นกับตัวทำนายอย่างอายุ, BMI, ความดันโลหิต หรือระดับไบโอมาร์กเกอร์ ความเสี่ยงโรคมักมีรูปตัวยูหรือเจ — สุดโต่งทั้งสองด้านอันตราย ตรงกลางปลอดภัย โมเดลเชิงเส้นจะพลาด สปลายน์กำลังสามและแบบธรรมชาติเป็นเครื่องมือมาตรฐานในการจำลองเอฟเฟกต์เหล่านี้ และมีในซอฟต์แวร์สถิติส่วนใหญ่ที่ใช้ในงานวิจัยคลินิก
  • การจำลองด้านสิ่งแวดล้อมและนิเวศวิทยา: ใช้เมื่อจำลองการตอบสนองของชนิดพันธุ์หรือสภาพภูมิอากาศต่อกราเดียนต์สิ่งแวดล้อม ตัวแปรอย่างอุณหภูมิ ความสูง และปริมาณฝนมักมีอิทธิพลไม่เชิงเส้นต่อผลลัพธ์ เช่น ความหนาแน่นของชนิดพันธุ์หรือผลผลิตพืช สปลายน์ช่วยให้ฟิตเส้นตอบสนองได้โดยไม่ต้องกำหนดรูปทรงล่วงหน้า

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

การถดถอยสปลายน์ใน Python

Python มี 3 วิธีทั่วไปในการฟิตการถดถอยสปลายน์: scikit-learn สำหรับเวิร์กโฟลว์แบบ ML, patsy สำหรับการกำหนดโมเดลด้วยสูตร และ statsmodels สำหรับการอนุมานเชิงสถิติ ต่อไปนี้จะกล่าวถึงแต่ละวิธี

การใช้ scikit-learn

scikit-learn มี SplineTransformer ซึ่งแปลงฟีเจอร์เชิงตัวเลขให้เป็นชุดของฟังก์ชันฐานบี-สปลายน์ แล้วป้อนฟีเจอร์เหล่านั้นให้กับโมเดลถดถอยเชิงเส้นใด ๆ ก็ได้

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import SplineTransformer
from sklearn.pipeline import make_pipeline

# Data
np.random.seed(42)
x = np.linspace(0, 10, 100).reshape(-1, 1)
y = np.sin(x).ravel() + 0.3 * x.ravel() + np.random.normal(0, 0.3, 100)

# Spline features + linear regression pipeline
model = make_pipeline(
    SplineTransformer(n_knots=5, degree=3),
    LinearRegression()
)
model.fit(x, y)
y_pred = model.predict(x)

print("R^2 score:", model.score(x, y))

คะแนน R2 ของ scikit-learn

คะแนน R2 ของ scikit-learn

SplineTransformer สร้างฐานสปลายน์ด้วย 5 ปมและพหุนามกำลังสาม จากนั้น LinearRegression จะหาสัมประสิทธิ์สำหรับแต่ละฟังก์ชันฐาน คุณสามารถสลับเป็นรีเกรสเซอร์ของ sklearn ตัวใดก็ได้ที่ฟิตโมเดลเชิงเส้นบนฟีเจอร์ที่แปลงแล้ว เช่น ridge, lasso

วิธีนี้เข้ากับเวิร์กโฟลว์ของ sklearn แต่จะไม่ได้ผลลัพธ์ทางสถิติ เช่น ส่วนเบี่ยงเบนมาตรฐานหรือค่า p หากต้องการ ให้ใช้ patsy หรือ statsmodels

การใช้ patsy

patsy เป็นอินเทอร์เฟซแบบสูตรสำหรับสร้างเมทริกซ์ดีไซน์ ใกล้เคียงกับสูตรโมเดลของ R มากที่สุดในโลก Python และเป็นวิธีมาตรฐานในการสร้างฟีเจอร์สปลายน์เพื่อใช้กับ statsmodels

import numpy as np
import pandas as pd
from patsy import dmatrix
import statsmodels.api as sm

np.random.seed(42)
x = np.linspace(0, 10, 100)
y = np.sin(x) + 0.3 * x + np.random.normal(0, 0.3, 100)
df = pd.DataFrame({"x": x, "y": y})

# B-spline basis using patsy
spline_basis = dmatrix("bs(x, df=6, degree=3)", data=df, return_type="dataframe")

# Fit with statsmodels OLS
model = sm.OLS(df["y"], spline_basis).fit()
print(model.summary())

สรุปโมเดลของ patsy

สรุปโมเดลของ patsy

ฟังก์ชัน bs() ภายในสูตรบอกให้ patsy สร้างฐานบี-สปลายน์ที่มี 6 องศาเสรีภาพและดีกรี 3 (กำลังสาม) patsy คืนเมทริกซ์ดีไซน์ซึ่งส่งตรงเข้า sm.OLS() ได้ พารามิเตอร์ df ควบคุมจำนวนฟังก์ชันฐานของสปลายน์ — ค่ายิ่งสูงยิ่งยืดหยุ่น คล้ายกับการเพิ่มจำนวนปม

หากต้องการสปลายน์แบบธรรมชาติ ให้เปลี่ยนจาก bs() เป็น ns():

spline_basis = dmatrix("ns(x, df=6)", data=df, return_type="dataframe")

การใช้ statsmodels กับสูตร

statsmodels มี API แบบสูตรที่ผสานกับ patsy ด้วย นี่เป็นวิธีที่สะอาดที่สุดเมื่ออยากได้การถดถอยสปลายน์บรรทัดเดียวพร้อมเอาต์พุตทางสถิติครบถ้วน

import statsmodels.formula.api as smf

model = smf.ols("y ~ bs(x, df=7, degree=3)", data=df).fit()
print(model.summary())

สรุปโมเดลของ statsmodels

สรุปโมเดลของ statsmodels

เอาต์พุตจาก summary() ให้สัมประสิทธิ์ของแต่ละฟังก์ชันฐานสปลายน์ ส่วนเบี่ยงเบนมาตรฐาน ค่า p และสถิติการฟิตทั่วไป สัมประสิทธิ์เองตีความโดยตรงไม่ได้ เพราะสอดคล้องกับฟังก์ชันฐาน ไม่ใช่ปริมาณในโลกจริง ตีความด้วยการพล็อตค่าพยากรณ์ตลอดช่วงของตัวทำนาย

สำหรับเวิร์กโฟลว์เชิงสถิติส่วนใหญ่ API แบบสูตรของ statsmodels สะดวกที่สุด ใช้ scikit-learn เมื่อสปลายน์เป็นส่วนหนึ่งของไปป์ไลน์ ML ขนาดใหญ่

การถดถอยสปลายน์ใน R

R มีการรองรับสปลายน์ในตัวที่ดีที่สุดในบรรดาภาษาหลัก ๆ แพ็กเกจ splines มาพร้อม R พื้นฐาน และสองฟังก์ชันหลัก — bs() และ ns() — ใช้ได้โดยตรงในสูตรการถดถอยใด ๆ

ฟังก์ชัน bs() สร้างฐานบี-สปลายน์ ส่วน ns() สร้างฐานสปลายน์กำลังสามแบบธรรมชาติ ทั้งสองจะสร้างเมทริกซ์ฟีเจอร์สปลายน์ที่ระบบสูตรของ R แทรกเข้าโมเดลโดยอัตโนมัติ

การใช้ bs() สำหรับบี-สปลายน์

# Data
set.seed(42)
x <- seq(0, 10, length.out = 100)
y <- sin(x) + 0.3 * x + rnorm(100, sd = 0.3)
df <- data.frame(x = x, y = y)

# Cubic B-spline with 6 degrees of freedom
library(splines)
model <- lm(y ~ bs(x, df = 6, degree = 3), data = df)
summary(model)

เอาต์พุต bs() ใน R

เอาต์พุต bs() ใน R

สูตร y ~ bs(x, df = 6, degree = 3) บอก R ให้แทน x ด้วยฐานบี-สปลายน์ดีกรี 3 และ 6 องศาเสรีภาพ R จัดการส่วนที่เหลือ — สร้างเมทริกซ์ฐาน ฟิตโมเดลเชิงเส้น และให้วัตถุ lm มาตรฐานพร้อมเครื่องมือวิเคราะห์ทั่วไป

คุณสามารถกำหนดตำแหน่งปมเองได้หากต้องการควบคุมเต็มที่:

model <- lm(y ~ bs(x, knots = c(2, 5, 8), degree = 3), data = df)

วิธีนี้วางปมที่ x = 2, x = 5 และ x = 8 แทนที่จะปล่อยให้ R เลือกให้

การใช้ ns() สำหรับสปลายน์แบบธรรมชาติ

สำหรับสปลายน์กำลังสามแบบธรรมชาติ (ที่มีพฤติกรรมเชิงเส้นเลยขอบเขต) ให้ใช้ ns():

model_natural <- lm(y ~ ns(x, df = 6), data = df)
summary(model_natural)

เอาต์พุต ns() ใน R

เอาต์พุต ns() ใน R

ไวยากรณ์เหมือนกัน แต่พฤติกรรมที่ขอบต่างกัน สปลายน์แบบธรรมชาติมักปลอดภัยกว่าเมื่อสนใจการพยากรณ์หรือการตีความใกล้ขอบของข้อมูล

การตีความเอาต์พุต

สัมประสิทธิ์ในเอาต์พุต summary() สอดคล้องกับฟังก์ชันฐานสปลายน์ ไม่ใช่ปริมาณที่ตีความได้โดยตรง เพื่อดูว่าโมเดลเรียนรู้อะไร ให้พยากรณ์บนกริดของค่า x ที่หนาแน่นและพล็อตผลลัพธ์:

x_grid <- data.frame(x = seq(0, 10, length.out = 200))
preds <- predict(model, newdata = x_grid)
plot(df$x, df$y)
lines(x_grid$x, preds, col = "green", lwd = 2)

การตีความเอาต์พุตในการถดถอยสปลายน์ R

การตีความเอาต์พุตใน R

นี่เป็นรูปแบบมาตรฐานใน R ที่ฟิตสปลายน์ พยากรณ์บนกริดที่เรียบ แล้วซ้อนเส้นโค้งลงบนข้อมูล R ยังอนุญาตให้ใช้เทอมสปลายน์ร่วมกับตัวทำนายอื่นในสูตรเดียวกันได้:

model_multi <- lm(y ~ ns(x, df = 6) + other_var, data = df)

โมเดลนี้ฟิตเอฟเฟกต์ไม่เชิงเส้นสำหรับ x และเอฟเฟกต์เชิงเส้นสำหรับ other_var ในโมเดลเดียว ความยืดหยุ่นนี้คือเหตุผลที่สปลายน์ถูกใช้กว้างขวางในเวิร์กโฟลว์เชิงสถิติที่ใช้ R

ข้อดีของการถดถอยสปลายน์

ต่อไปนี้คือข้อดีบางประการของสปลายน์เมื่อเทียบกับโมเดลแมชชีนเลิร์นนิงยอดนิยม

  • จำลองความสัมพันธ์ไม่เชิงเส้นโดยไม่ต้องรู้รูปแบบล่วงหน้า: ไม่ต้องผูกกับรูปทรงฟังก์ชันเฉพาะ สปลายน์ปล่อยให้ข้อมูลกำหนดเส้นโค้ง จึงจำลองโค้ง ช่วงราบ และการเปลี่ยนทิศได้โดยไม่ต้องรู้ล่วงหน้าว่าจะเกิดที่ใด
  • ฟิตที่เรียบและตีความได้: เอาต์พุตคือเส้นโค้งต่อเนื่อง ไม่ใช่การพยากรณ์แบบกล่องดำ สามารถพล็อตสปลายน์ เห็นว่าการตอบสนองเปลี่ยนอย่างไรตามช่วงของตัวทำนาย และอธิบายให้ผู้ไม่เชี่ยวชาญเข้าใจได้
  • เสถียรกว่าพหุนามดีกรีสูง: แต่ละช่วงเป็นพหุนามดีกรีต่ำ จึงไม่มีชิ้นใดมีพฤติกรรมหลุดโลกที่ปลายช่วง พฤติกรรมที่ขอบควบคุมได้ดีกว่า โดยเฉพาะกับสปลายน์กำลังสามแบบธรรมชาติ
  • ทำงานร่วมกับเวิร์กโฟลว์การถดถอยที่มีอยู่ได้: สปลายน์ทำงานภายในกรอบการถดถอยเชิงเส้นมาตรฐาน รวมกับตัวทำนายอื่น การทำให้เป็นระเบียบ (regularization) เอฟเฟกต์ผสม และเครื่องมืออื่น ๆ ที่ต่อยอดจาก OLS ได้

ข้อจำกัดของการถดถอยสปลายน์

เช่นเดียวกับโมเดลส่วนใหญ่ สปลายน์มาพร้อมข้อแลกเปลี่ยนสองสามอย่างที่ต้องรู้

  • การเลือกปมคือส่วนที่ยาก: การเลือกจำนวนและตำแหน่งของปมต้องใช้ความพยายาม ค่าเริ่มต้นใช้ได้ในบางครั้ง แต่หลายกรณีต้องใช้การตรวจสอบไขว้หรือความรู้เชิงโดเมนเพื่อให้ได้ฟิตที่ดี ไม่มีสูตรตายตัวที่ใช้ได้เสมอ
  • ยิ่งมีปมมาก การตีความยิ่งยาก: สปลายน์สามปมยังตีความได้ง่าย แต่ยี่สิบปมไม่ใช่ แม้ยังพล็อตเส้นโค้งได้ แต่การอธิบายว่าโมเดลทำอะไรอย่างเข้มงวดจะยากขึ้นมาก
  • ยังคงฟิตเกินได้: สปลายน์เสถียรกว่าพหุนามดีกรีสูง แต่ไม่กันฟิตเกิน ปมมากเกิน วางปมไม่ดี มีเอาต์ไลเออร์มาก หรือขนาดตัวอย่างเล็ก ล้วนทำให้โมเดลฟิตข้อมูลฝึกได้ดีแต่พลาดข้อมูลใหม่
  • สัมประสิทธิ์ตีความโดยตรงไม่ได้: สัมประสิทธิ์ที่ฟิตสอดคล้องกับฟังก์ชันฐาน ไม่ใช่ปริมาณในโลกจริง คุณไม่สามารถอ่านว่า "เพิ่ม x หนึ่งหน่วยทำให้ y เปลี่ยนไปเท่ากับเบต้า" แบบการถดถอยเชิงเส้น ต้องตีความเชิงภาพจากเส้นฟิต

ข้อผิดพลาดที่พบบ่อยกับการถดถอยสปลายน์

ต่อไปนี้คือข้อผิดพลาดบางอย่างที่ผู้เริ่มต้นมักทำกับสปลายน์รีเกรสชัน

  • ใช้ปมมากเกินไป: มือใหม่มักเพิ่มปมจนฟิตดูดีด้วยตาในข้อมูลฝึก นี่คือกับดักฟิตเกลินแบบคลาสสิก หากสปลายน์ส่ายไปมาระหว่างทุกการสังเกต แปลว่ามีปมมากเกินไป จงตรวจสอบไขว้หรือเริ่มจากปมน้อย ๆ แล้วเพิ่มเฉพาะเมื่อรีซิดวลแสดงรูปแบบชัดเจน
  • ใช้ปมน้อยเกินไปแล้วสมมติว่าข้อมูลเป็นเส้นตรง: ตรงกันข้าม หากฟิตสปลายน์ด้วยหนึ่งหรือสองปมแล้วรีซิดวลยังแสดงความโค้ง โมเดลกำลังฟิตต่ำเกิน สปลายน์มีช่วงไม่พอจะตามรูปแบบจริง ให้เพิ่มปมในบริเวณที่รีซิดวลผิดเพี้ยน
  • เข้าใจพฤติกรรมที่ขอบผิดพลาด: สปลายน์กำลังสามทั่วไปอาจมีพฤติกรรมแปรปรวนใกล้ขอบของข้อมูล หากกำลังพยากรณ์ใกล้ขอบ (หรือเลยขอบ) ให้ใช้สปลายน์กำลังสามแบบธรรมชาติ ซึ่งบังคับให้เส้นเป็นเชิงเส้นหลังปมขอบ และหลีกเลี่ยงการสวิงที่สปลายน์กำลังสามทั่วไปอาจสร้าง
  • เปรียบเทียบสปลายน์โดยตรงกับโมเดลไม่เชิงเส้นไร้ข้อจำกัด: สปลายน์ไม่ได้พยายามเป็นนิวรัลเน็ตหรือแรนดอมฟอเรสต์ หากวัดเทียบกับโมเดลกล่องดำไม่เชิงเส้นล้วน ๆ ในด้านความแม่นยำการพยากรณ์ โมเดลกล่องดำมักชนะในเชิงประสิทธิภาพดิบ แต่นั่นไม่ใช่ประเด็น สปลายน์ชนะในด้านการตีความและความสามารถในการเข้ากับการอนุมานสถิติแบบดั้งเดิม

การถดถอยสปลายน์เทียบกับเทคนิคการจำลองไม่เชิงเส้นอื่น ๆ

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

การถดถอยพหุนาม

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

แบบจำลองเชิงบวกพูนทั่วไป (GAMs)

GAM แทบจะเป็นสปลายน์ในสเกลใหญ่ อนุญาตให้ฟิตสปลายน์สำหรับตัวทำนายแต่ละตัวอย่างเป็นอิสระและรวมกันแบบบวกพูน คุณอาจคิดว่าการถดถอยสปลายน์คือ GAM แบบตัวแปรเดียว และ GAM คือผลรวมของสปลายน์ข้ามหลายตัวแปร

GAM จัดการตัวทำนายไม่เชิงเส้นหลายตัวได้สะอาดกว่าการฟิตสปลายน์ทีละตัวเอง ทั้งยังมีโทษการทำให้เรียบ (smoothing penalties) เพื่อเลือกปริมาณความยืดหยุ่นที่เหมาะสม ซึ่งตัดงานเลือกปมบางส่วนออก หากทำงานกับหลายตัวทำนายและมีบางตัวที่ต้องการการปฏิบัติแบบไม่เชิงเส้น GAM มักเป็นตัวเลือกที่ดีกว่า

ต้นไม้ตัดสินใจ

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

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

เหตุผลที่การถดถอยสปลายน์สำคัญ

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

เหตุผลคือสมดุลที่สปลายน์มอบให้ — ความยืดหยุ่นพอจะรับมือข้อมูลยุ่งเหยิง และโครงสร้างพอจะคงความตีความได้และเสถียร

สปลายน์ยังเป็นรากฐานของวิธีขั้นสูงอื่น ๆ แบบจำลองเชิงบวกพูนทั่วไปสร้างขึ้นบนสปลายน์โดยตรง สปลายน์ทำให้เรียบ (smoothing splines) ขยายแนวคิดด้วยการทำให้เป็นระเบียบในตัว และเทคนิคการถดถอยไม่เชิงเส้นสมัยใหม่จำนวนมากใช้ฐานสปลายน์ หากอยากเข้าใจวิธีเหล่านี้ ต้องเข้าใจสปลายน์ก่อน

ดังนั้น สปลายน์จึงสำคัญเพราะใช้งานได้จริง และเป็นบล็อกก่อสร้างสำหรับหลายอย่างถัดไป มันไม่ใช่โมเดลที่ทรงพลังที่สุด แต่เป็นหนึ่งในโมเดลที่เชื่อถือได้ที่สุด — ซึ่งมักเป็นสิ่งที่สำคัญ

สรุป

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

ปมและความเรียบลื่นคือสองแนวคิดที่ต้องทำความเข้าใจให้ถ่องแท้ ทุกอย่างที่เหลือ (ประเภทสปลายน์ การแทนแบบฐาน การนำไปใช้ใน R และ Python) เป็นเพียงวิธีต่าง ๆ ในการทำงานกับสองแนวคิดนี้

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

หากอยากเจาะลึกคณิตศาสตร์เบื้องหลังสปลายน์และอัลกอริทึมอื่น ๆ อีกมากมาย ลงทะเบียนใน เส้นทาง Machine Learning Scientist in Python ของเรา มีทุกอย่างที่ต้องการเพื่อพร้อมทำงานในปี 2026

คำถามที่พบบ่อยเกี่ยวกับ Spline Regression

อธิบายการถดถอยสปลายน์แบบง่าย ๆ คืออะไร?

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

ควรใช้การถดถอยสปลายน์แทนการถดถอยเชิงเส้นเมื่อใด?

ใช้การถดถอยสปลายน์เมื่อความสัมพันธ์ระหว่างตัวทำนายกับผลลัพธ์ไม่ใช่เส้นตรง หากโมเดลเชิงเส้นทิ้งรูปแบบไว้ในรีซิดวล — เช่น ความผิดพลาดเป็นบวกตรงกลางและเป็นลบที่ปลายช่วง — นั่นเป็นสัญญาณว่าความสัมพันธ์ไม่เชิงเส้น

ปม (knots) ในการถดถอยสปลายน์คืออะไร?

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

ความแตกต่างระหว่างสปลายน์กำลังสามทั่วไปกับสปลายน์กำลังสามแบบธรรมชาติคืออะไร?

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

จะเลือกจำนวนปมสำหรับโมเดลสปลายน์ได้อย่างไร?

เริ่มจาก 3–5 ปมที่วางตามควอนไทล์ของตัวทำนาย เพื่อให้แต่ละช่วงมีจำนวนการสังเกตใกล้เคียงกัน หากรีซิดวลแสดงรูปแบบที่สปลายน์ยังจับไม่ได้ ให้เพิ่มปมในบริเวณนั้น หากต้องการแนวทางที่เข้มงวดกว่า ใช้การตรวจสอบไขว้เพื่อเปรียบเทียบจำนวนปมต่าง ๆ แล้วเลือกการตั้งค่าที่ให้ข้อผิดพลาดบนชุดตรวจสอบต่ำสุด

หัวข้อ

เรียนรู้กับ DataCamp

Courses

Generalized Linear Models in R

4 ชม.
21.8K
The Generalized Linear Model course expands your regression toolbox to include logistic and Poisson regression.
ดูรายละเอียดRight Arrow
เริ่มหลักสูตร

Courses

Deep Learning เบื้องต้นด้วย PyTorch

4 ชม.
87.7K
เรียนรู้วิธีสร้างโครงข่ายประสาทเทียมแรกของคุณ ปรับไฮเปอร์พารามิเตอร์ และจัดการปัญหาการจำแนกประเภทและการถดถอยใน PyTorch
ดูเพิ่มเติมRight Arrow