Lewati ke konten utama

Regresi Spline: Panduan Praktis dengan Python & R

Panduan praktis tentang regresi spline, membahas bagaimana polinomial potongan dan knot memodelkan hubungan nonlinier, jenis-jenis spline utama, dan cara memasangkannya di Python dan R.
Diperbarui 15 Jun 2026  · 15 mnt baca

Jelajahi dengan AI

Buka di ChatGPTBuka di ClaudeBuka di Perplexity

Memaksakan garis lurus pada data yang melengkung tidak akan pernah menjadi ide yang baik.

Regresi linear mengasumsikan hubungan antara prediktor dan target adalah garis lurus. Sayangnya, sebagian besar hubungan di dunia nyata tidak demikian. Pikirkan hubungan antara pendapatan dan pengeluaran atau waktu dan pertumbuhan — keduanya membengkok, mendatar, membengkok lagi, dan berganti arah dengan cara yang tidak bisa direpresentasikan oleh satu kemiringan saja.

Regresi spline mengatasinya dengan membiarkan hubungan membengkok sesuai kebutuhan, tanpa memasangkan kurva liar yang tak terkekang. Idenya adalah memasangkan beberapa segmen polinomial halus di sepanjang rentang prediktor dan menggabungkannya pada titik-titik tertentu.

Dalam artikel ini, Anda akan mempelajari konsep inti di balik regresi spline, bagaimana knot mengendalikan fleksibilitas, jenis-jenis spline utama, dan cara menerapkannya dalam praktik.

Sebelum mempelajari spline, baca tutorial kami yang akan mengajarkan semua yang perlu Anda ketahui tentang regresi linear sederhana.

Apa Itu Regresi Spline?

Regresi spline adalah teknik regresi yang memodelkan hubungan nonlinier menggunakan fungsi polinomial potongan (piecewise) yang disambungkan pada titik-titik tertentu yang disebut knot.

Jadi, alih-alih membuat satu persamaan untuk menggambarkan seluruh hubungan, regresi spline membagi rentang prediktor menjadi bagian-bagian kecil dan memasangkan polinomial terpisah pada setiap bagian. Bagian-bagian ini bertemu di knot, dan kendala memastikan transisinya mulus.

Hasil akhirnya berada di antara dua ekstrem. Ia lebih fleksibel daripada regresi linear, yang hanya dapat membuat satu garis lurus melalui data Anda. Dan ia lebih terstruktur daripada model nonlinier yang benar-benar tak terkekang seperti deep neural networks atau metode kernel, yang bisa memasangkan hampir apa pun tetapi memberi sedikit informasi tentang apa yang mereka pasangkan.

Karena alasan inilah spline begitu sering muncul dalam statistik terapan.

Mengapa Regresi Spline Diperlukan

Data nyata hampir tidak pernah mengikuti garis lurus.

Regresi linear adalah titik awal bawaan untuk memodelkan hubungan, tetapi memiliki asumsi kuat: efek sebuah prediktor terhadap luaran tetap konstan di seluruh rentang. Ketika hubungan sebenarnya melengkung atau berubah arah, garis lurus akan underfit. Anda mendapatkan kesalahan di ekstrem dan model yang tidak dapat mengikuti polanya.

Solusinya adalah menggunakan model yang lebih fleksibel. Regresi polinomial derajat tinggi adalah salah satu opsi — Anda menambahkan x^2, x^3, x^4 hingga kurva cukup membengkok untuk menyesuaikan data Anda. Namun polinomial menjadi tidak stabil di tepi data karena mereka melonjak naik atau turun saat Anda memiliki sedikit titik data. Perilaku itu disebut fenomena Runge, dan membuat polinomial derajat tinggi berisiko untuk prediksi.

Regresi spline berada di antara dua ekstrem ini.

Anda mendapatkan fleksibilitas lokal di tempat data membengkok, tanpa ketidakstabilan global dari satu polinomial derajat tinggi. Setiap segmen adalah polinomial derajat rendah (biasanya kubik), sehingga tidak ada bagian yang bisa berperilaku tak terduga. Dan karena segmen disambungkan dengan mulus pada knot, kurva keseluruhan tetap terlihat seperti satu fungsi kontinu.

Singkatnya, spline menawarkan fleksibilitas yang cukup untuk mengikuti pola kompleks dan struktur yang cukup untuk tetap tertib di ekstrem.

Bagaimana Regresi Spline Bekerja

Regresi spline selalu mengikuti alur kerja tiga langkah yang sederhana.

  1. Bagi rentang prediktor menjadi beberapa wilayah: Anda memilih serangkaian knot di sepanjang sumbu prediktor. Knot ini membagi rentang menjadi interval. Jika Anda menempatkan tiga knot, Anda mendapat empat wilayah. Knot adalah batas antar segmen.
  2. Pasangkan polinomial dalam setiap wilayah: Di dalam setiap interval, model memasangkan polinomial derajat rendah. Setiap wilayah memiliki koefisien polinomialnya sendiri, sehingga kurva dapat membengkok berbeda di bagian berbeda dari rentang prediktor. Wilayah dengan hubungan yang hampir datar mendapat polinomial yang hampir datar. Wilayah dengan hubungan yang melengkung tajam mendapat polinomial yang lebih melengkung.
  3. Sambungkan wilayah-wilayah tersebut: Model menerapkan kendala kontinuitas pada setiap knot. Nilai polinomial dari kedua sisi harus sama pada knot, sehingga kurva tidak melompat. Untuk spline kubik, turunan pertama dan kedua juga harus sama, yang berarti tidak ada sudut tajam dan tidak ada perubahan kelengkungan yang mendadak.

Kendala-kendala inilah yang memberi spline tampilan satu kurva halus yang membengkok secara lokal tetapi mengalir kontinu di seluruh rentang prediktor. Secara visual, Anda tidak dapat melihat di mana satu polinomial berakhir dan berikutnya dimulai.

Knot, derajat polinomial, dan kendala kontinuitas bersama-sama mendefinisikan spline. Mengubah salah satunya akan menghasilkan jenis spline yang berbeda dengan sifat yang berbeda — yang akan dibahas pada bagian-bagian berikutnya.

Apa Itu Knot dalam Regresi Spline?

Knot adalah titik-titik di sepanjang sumbu prediktor tempat satu segmen polinomial berakhir dan segmen berikutnya dimulai.

Anda dapat menganggapnya sebagai sendi dari spline. Jika Anda menempatkan knot pada x = 5, model memasangkan satu polinomial untuk nilai di bawah 5 dan polinomial lain untuk nilai di atas 5. Kedua polinomial bertemu pada knot, dan kendala kontinuitas memastikan mereka terhubung dengan mulus. Jika Anda menambahkan lebih banyak knot, Anda mendapatkan lebih banyak segmen, yang berarti kurva dapat membengkok di lebih banyak tempat.

Inilah sebabnya knot adalah tuas utama untuk mengendalikan seberapa fleksibel modelnya.

Jumlah knot menentukan berapa banyak potongan polinomial terpisah yang membentuk spline. Lokasi knot menentukan di mana kurva diizinkan berubah bentuk. Spline dengan dua knot hanya dapat membengkok di beberapa tempat. Spline dengan dua puluh knot dapat mengikuti hampir setiap titik data.

Jadi memilih jumlah dan penempatan knot yang tepat adalah keputusan utama dalam regresi spline.

Terlalu sedikit knot

Jika Anda menempatkan terlalu sedikit knot, spline tidak memiliki cukup segmen untuk mengikuti pola sebenarnya dalam data. Kurvanya terlalu kaku. Perilakunya hampir seperti polinomial derajat rendah — fleksibel secara umum, tetapi tidak mampu menangkap perubahan lokal.

Bayangkan memasangkan spline dengan satu knot pada data yang memiliki tiga fase berbeda: tren naik, dataran tinggi, dan penurunan. Dengan hanya satu knot, spline hanya memiliki dua segmen untuk bekerja. Ia dapat menangkap kenaikan dan salah satu fase lainnya, tetapi tidak semuanya. Anda berakhir dengan masalah yang sama seperti regresi linear — kesalahan di tempat spline tidak dapat menyesuaikan bentuk data.

Contoh knot terlalu sedikit

Contoh knot terlalu sedikit

Terlalu sedikit knot menyebabkan underfitting. Model terlalu mulus untuk berguna.

Terlalu banyak knot

Masalah yang berlawanan sama buruknya. Jika Anda menempatkan terlalu banyak knot, spline memiliki begitu banyak segmen sehingga mulai memasangkan noise dalam data alih-alih pola sebenarnya. Kurva bergelombang di antara setiap observasi dan mengejar variasi acak alih-alih tren yang mendasarinya.

Spline dengan dua puluh knot pada dataset dengan lima puluh titik akan terlihat lebih seperti gambar sambung-titik daripada model. Ia akan memasangkan data pelatihan hampir sempurna, tetapi prediksi pada data baru tidak akan andal. Perubahan kecil pada input menyebabkan perubahan besar yang tidak terduga pada output.

Contoh knot terlalu banyak

Contoh knot terlalu banyak

Terlalu banyak knot menyebabkan overfitting. Model terlalu fleksibel untuk melakukan generalisasi.

Anda menginginkan cukup banyak knot untuk menangkap kelokan nyata pada data, tetapi tidak terlalu banyak hingga model mulai menghafal noise. Bagian berikutnya akan membahas cara mengambil keputusan itu dalam praktik.

Jenis-Jenis Spline

Spline hadir dalam beberapa varian, dan pilihan utamanya bergantung pada jenis polinomial yang Anda gunakan di setiap segmen dan kendala apa yang Anda terapkan pada kurva.

Spline linear

Spline linear adalah versi paling sederhana. Setiap segmen adalah garis lurus, dan segmen-segmen terhubung pada knot.

Contoh spline linear

Contoh spline linear

Kendala kontinuitas di sini longgar, karena nilai dari kedua sisi harus sama pada knot, tetapi kemiringannya bisa berubah. Hasilnya terlihat seperti serangkaian segmen garis yang terhubung dengan sudut pada setiap knot. Cukup fleksibel untuk menangani kelokan sederhana, tetapi kadang kurva tidak mulus.

Spline linear cocok saat Anda hanya peduli pada tren besar dan tidak keberatan dengan ketajaman visual. Mereka juga paling mudah diinterpretasikan karena setiap segmen hanyalah garis dengan kemiringannya sendiri.

Spline kubik

Spline kubik adalah pilihan default di sebagian besar penerapan. Setiap segmen adalah polinomial kubik (derajat 3), dan kendala kontinuitasnya lebih ketat daripada spline linear.

Contoh spline kubik

Contoh spline kubik

Pada setiap knot, tiga kondisi harus terpenuhi: nilainya sama, turunan pertama sama, dan turunan kedua sama. Ini berarti tidak ada lompatan, tidak ada sudut, dan tidak ada perubahan kelengkungan yang mendadak. Kurva mengalir melalui knot tanpa ada tanda visual tempat transisi terjadi.

Kubik adalah derajat polinomial terendah yang memungkinkan perubahan kelengkungan yang mulus. Itulah mengapa ia begitu populer. Derajat yang lebih tinggi jarang menambah fleksibilitas yang berguna dan justru membuat model lebih sulit dikendalikan.

Spline kubik natural

Spline kubik natural adalah variasi yang menambahkan kendala ekstra pada batas data.

Contoh spline kubik natural

Contoh spline kubik natural

Masalah pada spline kubik biasa adalah perilakunya bisa aneh di tepi, terutama saat Anda memiliki sedikit titik data. Segmen paling kiri dan paling kanan masih polinomial kubik, dan polinomial kubik dapat cepat melonjak naik atau turun saat mengekstrapolasi.

Spline kubik natural mengatasinya dengan memaksa turunan kedua menjadi nol pada kedua knot batas. Dalam praktiknya, ini berarti kurva menjadi linear di luar knot terluar. Perilaku ekstrapolasi jauh lebih stabil, yang membuat spline kubik natural pilihan lebih baik saat Anda peduli pada prediksi dekat tepi data.

B-spline

B-spline (singkatan dari basis spline) adalah cara berbeda membangun spline. Alih-alih langsung mendefinisikan setiap segmen polinomial, B-spline membangun spline sebagai penjumlahan berbobot dari fungsi-fungsi basis.

Contoh B-spline

Contoh B-spline

Setiap fungsi basis sendiri adalah spline kecil yang bernilai non-nol hanya di wilayah terbatas. Spline penuh adalah jumlah dari fungsi-fungsi basis ini, masing-masing dikalikan koefisien yang diestimasi oleh regresi.

B-spline stabil secara numerik dan mudah diperluas. Sebagian besar implementasi spline modern di Python dan R menggunakan representasi B-spline, bahkan ketika antarmuka untuk pengguna terlihat seperti spline biasa. Jika Anda pernah memanggil bs() di R atau menggunakan SplineTransformer di scikit-learn, berarti Anda telah menggunakan B-spline.

Regresi Spline vs Regresi Polinomial

Baik regresi polinomial maupun regresi spline menangani hubungan nonlinier, tetapi pendekatannya sangat berbeda. Perbedaan utamanya terletak pada bagaimana kurva dibangun.

Regresi polinomial

Regresi polinomial memasangkan satu polinomial global di seluruh rentang prediktor. Anda memilih derajat (2, 3, 5, 10), dan model menemukan satu set koefisien yang meminimalkan kesalahan di seluruh data. Kurva memiliki satu persamaan, dan persamaan itu menggambarkan hubungan di mana pun.

Ini terdengar rapi, tetapi bermasalah. Satu polinomial harus menyeimbangkan kecocokan di seluruh rentang, sehingga apa yang terjadi di satu wilayah memengaruhi wilayah lainnya. Jika Anda meningkatkan derajat untuk menangani kelokan tajam di tengah data, Anda akan melihat kurva mulai bergoyang di tepi. Inilah fenomena Runge yang disebutkan sebelumnya — polinomial derajat tinggi menjadi tidak stabil di dekat batas data.

Masalah lainnya adalah regresi polinomial tidak memiliki konsep lokalitas. Lonjakan pada x = 5 dapat mengubah bentuk kecocokan pada x = 50, karena setiap observasi berkontribusi pada persamaan global yang sama.

Regresi spline

Regresi spline membagi rentang prediktor menjadi segmen dan memasangkan polinomial derajat rendah di setiap segmen. Polinomial dihubungkan dengan mulus pada knot, tetapi masing-masing berdiri sendiri dalam arti bentuknya terutama didorong oleh data di wilayahnya sendiri.

Ini memberi Anda fleksibilitas lokal. Wilayah dengan kelokan tajam mendapat polinomial yang lebih melengkung. Wilayah dengan tren datar mendapat yang hampir datar. Dan karena setiap segmen berderajat rendah (biasanya kubik), tidak ada bagian yang bisa berperilaku aneh di ekstrem. Anda mendapatkan kecocokan yang lebih mulus dan stabil, terutama di dekat tepi data.

Perbandingan berdampingan

Regresi polinomial vs spline

Regresi polinomial versus spline

Jadi jika hubungan Anda sedikit nonlinier dan Anda baik-baik saja dengan kecocokan global, regresi polinomial bisa bekerja. Jika polanya lebih kompleks atau Anda peduli pada prediksi di dekat batas, spline adalah pilihan yang lebih aman.

Memilih Jumlah dan Lokasi Knot

Pemilihan knot adalah bagian terpenting dalam regresi spline. Terlalu sedikit knot menyebabkan underfit, dan terlalu banyak menyebabkan overfit. Dan di mana Anda menempatkannya mengubah pola mana yang bisa ditangkap model.

Ada beberapa pendekatan, dan sebagian besar waktu Anda akan menggabungkan beberapa di antaranya.

  1. Pengetahuan domain: Jika Anda tahu sesuatu tentang masalahnya, gunakan itu. Studi klinis mungkin menempatkan knot pada ambang klinis yang diketahui. Model harga mungkin menempatkan knot pada titik-titik di mana perilaku konsumen diperkirakan berubah. Penempatan knot berbasis domain adalah pendekatan paling dapat diinterpretasikan karena segmen sesuai dengan batas nyata.
  2. Knot berjarak merata: Pilih sejumlah knot dan tempatkan secara merata di seluruh rentang prediktor. Ini bekerja baik saat data Anda kira-kira terdistribusi merata di sepanjang sumbu prediktor. Tidak bekerja saat Anda memiliki data padat di beberapa wilayah dan jarang di wilayah lain — knot berjarak merata bisa jatuh di wilayah yang hampir tidak ada data, yang membuat kecocokan tidak stabil.
  3. Knot berbasis kuantil: Alih-alih menempatkan knot pada posisi yang sama di sumbu x, tempatkan pada kuantil prediktor. Dengan 4 knot dan penempatan kuantil, Anda akan menempatkan knot pada persentil ke-20, ke-40, ke-60, dan ke-80. Ini menjamin setiap segmen berisi kira-kira jumlah observasi yang sama, sehingga kecocokan lebih andal di wilayah jarang.
  4. Cross-validation: Anda mencoba berbagai jumlah knot, memasangkan spline untuk masing-masing, dan membandingkan performa pada data yang disisihkan. Konfigurasi dengan galat validasi terendah menang. Ini menghilangkan tebak-tebakan tetapi menambah biaya komputasi, dan hasilnya tetap bergantung pada strategi penempatan (merata, kuantil) yang Anda cari.

Pertukarannya sama seperti yang Anda lihat pada setiap masalah regresi: fleksibilitas versus kompleksitas. Lebih banyak knot berarti lebih banyak fleksibilitas, yang memungkinkan model mengikuti pola yang lebih halus tetapi juga memungkinkan mengejar noise. Lebih sedikit knot berarti model lebih stabil, lebih mudah diinterpretasikan, tetapi bisa melewatkan pola nyata.

Mulailah dengan 3–5 knot yang ditempatkan pada kuantil, lalu periksa residual. Jika Anda melihat pola sistematis yang tidak tertangkap spline, tambahkan knot di wilayah tersebut. Jika kecocokan terlihat bergelombang, kurangi satu. Cross-validation layak digunakan saat Anda perlu mempertahankan pilihan atau saat model akan masuk produksi.

Regresi Spline dalam Machine Learning dan Statistika

Regresi spline muncul di mana pun seseorang perlu memodelkan efek nonlinier yang mulus tanpa berkomitmen pada bentuk fungsional tertentu. Berikut beberapa area umum:

  • Tren deret waktu: Penggunaan umum adalah memisahkan tren halus dalam deret waktu dari fluktuasi jangka pendek. Spline yang dipasangkan pada waktu sebagai prediktor memberi Anda garis tren fleksibel yang beradaptasi dengan perubahan arah tanpa bereaksi berlebihan terhadap noise. Para ekonom dan analis sering menggunakannya saat ingin menggambarkan lintasan dasar suatu variabel — pikirkan PDB atau harga saham — tanpa berkomitmen pada asumsi linear atau eksponensial.
  • Ekonomi dan ekonometrika: Spline digunakan untuk memodelkan hubungan di mana efek suatu variabel berubah sepanjang rentangnya. Efek pendapatan terhadap konsumsi tidak konstan, karena rumah tangga berpendapatan rendah berbelanja secara berbeda dari yang berpendapatan tinggi. Spline melihat hal ini tanpa mengasumsikan bentuk fungsional tertentu.
  • Kesehatan dan biostatistik: Banyak luaran kesehatan memiliki hubungan nonlinier dengan prediktor seperti usia, BMI, tekanan darah, atau kadar biomarker. Risiko penyakit sering mengikuti bentuk U atau J — kedua ekstrem berbahaya, bagian tengah aman. Model linear akan melewatkan hal ini. Spline kubik dan spline kubik natural adalah alat standar untuk memodelkan efek ini, dan telah terintegrasi dalam sebagian besar perangkat lunak statistik yang digunakan dalam riset klinis.
  • Pemodelan lingkungan dan ekologi: Spline juga digunakan saat memodelkan bagaimana spesies atau variabel iklim merespons gradien lingkungan. Hal seperti suhu, ketinggian, dan curah hujan sering memiliki efek nonlinier pada luaran seperti kelimpahan spesies atau hasil panen. Spline memungkinkan peneliti memasangkan kurva respons tanpa menentukan bentuknya terlebih dahulu.

Dalam semua kasus ini, spline memberikan fleksibilitas saat dibutuhkan, tanpa memaksa Anda menebak bentuk fungsional hubungan. Itu membuatnya cocok untuk pemodelan eksploratif dan pilihan solid untuk model produksi ketika interpretabilitas penting.

Regresi Spline di Python

Python memiliki tiga cara umum untuk memasangkan regresi spline: scikit-learn untuk alur ML bergaya pipeline, patsy untuk spesifikasi model berbasis formula, dan statsmodels untuk inferensi statistik. Saya akan membahas masing-masing.

Menggunakan scikit-learn

scikit-learn menyediakan SplineTransformer, yang mengonversi fitur numerik menjadi sekumpulan fungsi basis B-spline. Anda kemudian memasukkan fitur-fitur tersebut ke model regresi linear apa pun.

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))

skor R2 scikit-learn

skor R2 scikit-learn

SplineTransformer membuat basis spline dengan 5 knot dan polinomial kubik. Lalu, LinearRegression menemukan koefisien untuk setiap fungsi basis. Anda dapat menukar dengan regressor sklearn apa pun di sini — ridge, lasso, apa pun yang memasangkan model linear pada fitur yang ditransformasi.

Pendekatan ini sesuai dengan alur kerja sklearn, tetapi Anda tidak mendapatkan keluaran statistik seperti standar error atau p-value. Untuk itu, Anda memerlukan patsy atau statsmodels.

Menggunakan patsy

patsy adalah antarmuka berbasis formula untuk membangun matriks desain. Ini adalah hal yang paling mirip dengan formula model R di Python, dan merupakan cara standar untuk membangun fitur spline untuk digunakan dengan 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())

ringkasan model patsy

ringkasan model patsy

bs() di dalam formula memberi tahu patsy untuk membangun basis B-spline dengan 6 derajat kebebasan dan derajat 3 (kubik). patsy mengembalikan matriks desain, yang langsung masuk ke sm.OLS(). Parameter df mengontrol jumlah fungsi basis spline — nilai lebih tinggi memberi lebih banyak fleksibilitas, mirip dengan menambah lebih banyak knot.

Jika Anda menginginkan spline natural, cukup ganti bs() dengan ns():

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

Menggunakan statsmodels dengan formula

statsmodels juga memiliki API formula yang terintegrasi dengan patsy. Ini adalah versi paling rapi saat Anda menginginkan regresi spline satu baris dengan keluaran statistik lengkap.

import statsmodels.formula.api as smf

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

ringkasan model statsmodels

ringkasan model statsmodels

Keluaran summary() memberi Anda koefisien untuk setiap fungsi basis spline, standar error, p-value, dan statistik kecocokan yang biasa. Koefisiennya sendiri tidak dapat diinterpretasikan secara langsung, karena masing-masing berkorespondensi dengan fungsi basis, bukan besaran dunia nyata. Anda menginterpretasikan kecocokan dengan memplot prediksi di seluruh rentang prediktor.

Untuk sebagian besar alur kerja statistik, API formula statsmodels adalah pilihan paling nyaman. Gunakan scikit-learn saat spline menjadi bagian dari pipeline ML yang lebih besar.

Regresi Spline di R

R memiliki dukungan bawaan terbaik untuk spline di antara bahasa-bahasa utama. Paket splines hadir bersama base R, dan dua fungsi utamanya — bs() dan ns() — bekerja langsung di dalam formula regresi apa pun.

Fungsi bs() membuat basis B-spline. Fungsi ns() membuat basis spline kubik natural. Keduanya menghasilkan matriks fitur spline yang secara otomatis dimasukkan sistem formula R ke dalam model.

Menggunakan bs() untuk B-spline

# 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)

keluaran bs() di R

keluaran bs() di R

Formula y ~ bs(x, df = 6, degree = 3) memberi tahu R untuk mengganti x dengan basis B-spline berderajat 3 dan 6 derajat kebebasan. R menangani sisanya — membangun matriks basis, memasangkan model linear, dan menghasilkan objek lm standar dengan semua diagnostik biasa.

Anda dapat memberikan posisi knot secara langsung jika menginginkan kontrol penuh:

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

Ini menempatkan knot pada x = 2, x = 5, dan x = 8 alih-alih membiarkan R memilihnya untuk Anda.

Menggunakan ns() untuk spline natural

Untuk spline kubik natural (yang berperilaku linear di luar batas), gunakan ns():

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

keluaran ns() di R

keluaran ns() di R

Sintaksnya sama, tetapi perilaku batasnya berbeda. Spline natural biasanya pilihan yang lebih aman saat Anda peduli pada prediksi atau interpretasi di dekat tepi data.

Menginterpretasikan keluaran

Koefisien pada keluaran summary() berkorespondensi dengan fungsi basis spline, bukan besaran yang dapat diinterpretasikan. Untuk melihat apa yang sebenarnya dipelajari model, prediksikan di atas grid nilai x dan plot hasilnya:

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)

Interpretasi keluaran pada regresi spline di R

Interpretasi keluaran di R

Ini adalah pola standar di R, di mana Anda memasangkan spline, memprediksi pada grid yang halus, dan menimpa kurva pada data. R juga memungkinkan Anda menggunakan term spline bersama prediktor lain dalam formula yang sama:

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

Ini memasangkan efek nonlinier untuk x dan efek linear untuk other_var dalam model yang sama. Fleksibilitas itulah yang membuat spline begitu luas digunakan dalam alur kerja statistik berbasis R.

Keunggulan Regresi Spline

Berikut beberapa keunggulan spline dibandingkan model machine learning yang lebih populer:

  • Memodelkan hubungan nonlinier tanpa mengetahui bentuknya: Anda tidak harus berkomitmen pada bentuk fungsional tertentu. Spline membiarkan data membentuk kurva, sehingga Anda dapat memodelkan kelokan, dataran tinggi, dan perubahan arah tanpa mengetahui sebelumnya di mana itu akan terjadi.
  • Kecocokan mulus dan dapat diinterpretasikan: Keluaran adalah kurva kontinu, bukan prediksi kotak hitam. Anda dapat memplot spline, melihat bagaimana respons berubah di sepanjang rentang prediktor, dan menjelaskannya kepada audiens nonteknis.
  • Lebih stabil daripada polinomial derajat tinggi: Setiap segmen adalah polinomial derajat rendah, sehingga tidak ada bagian yang bisa berperilaku liar di ekstrem. Perilaku batas jauh lebih terkendali, terutama dengan spline kubik natural.
  • Menyatu dengan alur kerja regresi yang ada: Spline bekerja di dalam regresi linear standar. Anda dapat menggabungkannya dengan prediktor lain, regularisasi, efek campuran, dan alat lain yang dibangun di atas OLS.

Keterbatasan Regresi Spline

Seperti kebanyakan model, spline memiliki beberapa trade-off yang perlu Anda ketahui:

  • Pemilihan knot adalah bagian tersulit: Memilih jumlah dan lokasi knot membutuhkan upaya. Default kadang baik, tetapi dalam banyak kasus Anda memerlukan cross-validation atau pengetahuan domain untuk mendapatkan kecocokan yang baik. Tidak ada satu aturan yang selalu berhasil.
  • Interpretasi semakin sulit dengan lebih banyak knot: Spline dengan tiga knot masih cukup mudah diinterpretasikan. Spline dengan dua puluh knot tidak. Anda masih bisa memplot kurva, tetapi menjelaskan apa yang dilakukan model secara ketat menjadi jauh lebih sulit.
  • Masih bisa overfit: Spline lebih stabil daripada polinomial derajat tinggi, tetapi tidak kebal terhadap overfitting. Terlalu banyak knot, penempatan knot yang buruk, terlalu banyak outlier, atau ukuran sampel kecil dapat menghasilkan model yang cocok dengan baik pada data pelatihan namun gagal pada data baru.
  • Koefisien tidak bermakna secara langsung: Koefisien terpasang berkorespondensi dengan fungsi basis, bukan besaran dunia nyata. Anda tidak bisa membaca "kenaikan satu unit pada x mengubah y sebesar beta" seperti pada regresi linear. Anda harus menginterpretasikan kecocokan secara visual.

Kesalahan Umum dengan Regresi Spline

Sekarang saya akan membahas beberapa kesalahan yang sering dilakukan pemula dengan regresi spline:

  • Menggunakan terlalu banyak knot: Pemula sering menambah knot hingga kecocokan terlihat bagus secara visual pada data pelatihan. Ini adalah jebakan overfitting klasik. Jika spline bergelombang di antara setiap observasi, Anda memiliki terlalu banyak knot. Lakukan cross-validation atau mulai dengan lebih sedikit knot dan tambahkan hanya saat residual menunjukkan pola yang jelas.
  • Menggunakan terlalu sedikit knot dan mengasumsikan data linear: Kebalikan dari sebelumnya. Jika Anda memasangkan spline dengan satu atau dua knot dan residual masih menunjukkan kelengkungan, model mengalami underfitting. Spline tidak memiliki cukup segmen untuk mengikuti pola sebenarnya. Tambahkan lebih banyak knot di wilayah di mana residual meleset.
  • Salah paham perilaku batas: Spline kubik biasa dapat berperilaku tidak menentu di dekat tepi data. Jika Anda membuat prediksi dekat batas (atau mengekstrapolasi melewatinya), gunakan spline kubik natural. Mereka memaksa perilaku linear melewati knot batas dan menghindari ayunan yang dapat dihasilkan spline kubik biasa.
  • Membandingkan spline langsung dengan model nonlinier tak terkekang: Spline tidak berusaha menjadi neural network atau random forest. Jika Anda membandingkan spline dengan model kotak hitam nonlinier penuh pada akurasi prediktif mentah, model kotak hitam sering menang dalam performa. Itu bukan intinya. Spline unggul dalam interpretabilitas dan kemampuan untuk masuk ke dalam inferensi statistik tradisional.

Regresi Spline vs Teknik Pemodelan Nonlinier Lain

Spline bukan satu-satunya cara untuk memodelkan hubungan nonlinier, tetapi ia berguna jika Anda peduli pada interpretabilitas. Berikut perbandingannya dengan alternatif paling umum.

Regresi polinomial

Regresi polinomial menggunakan satu persamaan global. Lebih sederhana untuk dispesifikasikan tetapi kurang stabil, terutama di batas. Spline mengungguli polinomial dalam fleksibilitas dan stabilitas saat hubungan memiliki lebih dari satu kelokan. Polinomial lebih mudah diinterpretasikan hanya pada derajat sangat rendah (2 atau 3). Setelah itu, spline menjadi lebih andal sekaligus lebih mudah diinterpretasikan.

Generalized Additive Models (GAM)

GAM pada dasarnya adalah spline dalam skala besar. GAM memungkinkan Anda memasangkan spline untuk setiap prediktor secara independen dan menggabungkannya secara aditif. Anda dapat menganggap regresi spline sebagai GAM variabel tunggal, dan GAM sebagai jumlah spline di berbagai variabel.

GAM menangani banyak prediktor nonlinier dengan lebih rapi daripada memasangkan spline secara manual untuk masing-masing. Mereka juga menyertakan penalti pemulusan yang memilih tingkat fleksibilitas yang tepat, yang mengurangi sebagian pekerjaan pemilihan knot. Jika Anda bekerja dengan banyak prediktor dan beberapa di antaranya membutuhkan perlakuan nonlinier, GAM biasanya pilihan yang lebih baik.

Decision tree

Decision tree mengambil pendekatan yang sama sekali berbeda. Alih-alih memasangkan kurva mulus, mereka membagi ruang prediktor menjadi wilayah persegi panjang dan memprediksi nilai konstan di setiap wilayah. Hasilnya adalah fungsi langkah (step function).

Tree lebih fleksibel daripada spline dalam beberapa hal — mereka dapat memodelkan interaksi dan perubahan mendadak. Namun fungsi yang dipasangkan tidak mulus atau kontinu. Ia juga tidak melakukan generalisasi dengan baik di wilayah yang jarang data. Spline lebih baik jika Anda peduli pada kemulusan dan ekstrapolasi yang stabil. Tree lebih baik saat Anda peduli memodelkan batas tajam atau interaksi di banyak variabel.

Mengapa Regresi Spline Penting

Spline ada di mana-mana dalam statistik terapan. Mereka muncul dalam riset klinis, analisis ekonomi, ilmu lingkungan, pemodelan deret waktu, dan bidang apa pun di mana seseorang perlu memodelkan efek nonlinier yang mulus tanpa menggunakan model kotak hitam.

Alasannya adalah keseimbangan yang mereka tawarkan — cukup fleksibel untuk menangani data yang berantakan, tetapi cukup terstruktur untuk tetap dapat diinterpretasikan dan stabil.

Mereka juga menjadi fondasi bagi metode yang lebih lanjut. Generalized Additive Models dibangun langsung di atas spline, smoothing spline memperluas gagasan dengan regularisasi bawaan, dan banyak teknik regresi nonlinier modern menggunakan basis spline. Jika Anda ingin memahami metode-metode ini, Anda harus memahami spline terlebih dahulu.

Jadi spline penting karena bersifat praktis dan karena menjadi blok bangunan bagi banyak hal berikutnya. Mereka bukan model yang paling kuat, tetapi salah satu yang paling andal — dan itu sering kali yang paling penting.

Kesimpulan

Regresi spline memodelkan hubungan nonlinier dengan menggabungkan polinomial potongan pada titik yang disebut knot. Itulah idenya, dan sisanya adalah variasi dari itu.

Knot dan kemulusan adalah dua gagasan yang perlu Anda pahami. Sisanya (jenis-jenis spline, representasi basis, implementasi di R dan Python) hanyalah berbagai cara untuk bekerja dengan dua konsep tersebut.

Cobalah beberapa jenis spline pada data Anda sendiri. Bandingkan kubik, kubik natural, dan B-spline. Geser knot dan lihat apa yang terjadi. Bereksperimenlah karena sifat visual dari kecocokan memudahkan Anda melihat dampak setiap pilihan.

Jika Anda ingin menggali lebih dalam matematika di balik spline dan banyak algoritma lainnya, daftarlah ke jalur Machine Learning Scientist in Python kami. Di sana ada semua yang Anda butuhkan untuk siap kerja pada 2026.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Senior Data Scientist yang berbasis di Kroasia. Penulis Tekno Teratas dengan lebih dari 700 artikel yang telah diterbitkan, menghasilkan lebih dari 10 juta tayangan. Penulis buku Machine Learning Automation with TPOT.

FAQ Regresi Spline

Apa itu regresi spline dalam istilah sederhana?

Regresi spline adalah cara untuk memodelkan hubungan melengkung dalam data dengan membagi rentang prediktor menjadi segmen dan memasangkan polinomial kecil di tiap segmen. Segmen-segmen terhubung mulus pada titik yang disebut knot, sehingga hasil keseluruhan adalah satu kurva kontinu. Ia lebih fleksibel daripada regresi linear dan lebih stabil daripada regresi polinomial derajat tinggi.

Kapan saya harus menggunakan regresi spline alih-alih regresi linear?

Gunakan regresi spline saat hubungan antara prediktor dan luaran Anda bukan garis lurus. Jika model linear menyisakan pola pada residual — misalnya, kesalahan positif di tengah data dan negatif di ekstrem — itu tanda hubungannya nonlinier.

Apa itu knot dalam regresi spline?

Knot adalah titik di sepanjang sumbu prediktor tempat satu segmen polinomial berakhir dan berikutnya dimulai. Mereka mengendalikan seberapa fleksibel spline. Lebih banyak knot berarti kurva bisa membengkok di lebih banyak tempat. Memilih jumlah dan penempatan knot yang tepat adalah keputusan sentral dalam regresi spline. Terlalu sedikit berarti model underfit, dan terlalu banyak berarti overfit.

Apa perbedaan antara spline kubik dan spline kubik natural?

Keduanya memasangkan polinomial kubik di antara knot, tetapi berbeda dalam perilaku di batas data. Spline kubik biasa bisa berperilaku tak terduga di tepi karena setiap ujung masih merupakan polinomial kubik penuh. Spline kubik natural memaksa kurva menjadi linear di luar knot terluar, yang membuat prediksi di dekat atau melewati batas jauh lebih stabil.

Bagaimana cara memilih jumlah knot untuk model spline?

Mulailah dengan 3–5 knot yang ditempatkan pada kuantil prediktor sehingga setiap segmen memiliki jumlah observasi yang serupa. Jika residual menunjukkan pola yang tidak ditangkap spline, tambahkan knot di wilayah tersebut. Untuk pendekatan yang lebih ketat, gunakan cross-validation untuk membandingkan jumlah knot berbeda dan pilih konfigurasi dengan galat validasi terendah.

Topik

Belajar bersama DataCamp

Kursus

Model Linear Tergeneralisasi di R

4 Hr
21.8K
Mata kuliah Model Linier Umum memperluas kotak alat regresi Anda untuk mencakup regresi logistik dan regresi Poisson.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow