Sessi 9: Model Regresi Linear Sederhana
Fokus: Penerapan, Interpretasi Matematis, dan Evaluasi Model Regresi Linear. Fondasi untuk prediksi data kontinu dan analisis hubungan sebab-akibat.
A. Konsep Dasar Regresi Linear Sederhana
Regresi Linear Sederhana (RLS) adalah model Machine Learning paling dasar dan merupakan tulang punggung analisis data ilmiah. RLS mengasumsikan adanya hubungan linear antara satu variabel independen (prediktor) X dan satu variabel dependen (target) Y.
1. Persamaan Matematis
Model RLS berusaha menemukan garis lurus terbaik (best-fit line) yang meminimalkan total kuadrat jarak vertikal dari setiap titik data ke garis tersebut (metode *Least Squares*).
- Ŷ: Nilai prediksi dari variabel dependen.
- β0: Intersep (Intercept), nilai Y ketika X = 0.
- β1: Koefisien Regresi (Slope), perubahan Y untuk setiap perubahan unit X.
- ε: Galat (*Error term*), selisih antara nilai aktual Y dan prediksi Ŷ.
2. Interpretasi Koefisien (β1)
Dalam Fisika dan Matematika, koefisien β1 sering memiliki makna fisik yang eksplisit. Misalnya:
- Jika Y adalah kecepatan dan X adalah waktu, maka β1 merepresentasikan percepatan.
- Jika Y adalah pertambahan panjang dan X adalah gaya, maka β1 merepresentasikan konstanta pegas (Hukum Hooke).
B. Metrik Evaluasi Model Regresi
Setelah model dilatih, kita perlu mengukur seberapa baik garis regresi memprediksi Data Testing. Tiga metrik utama yang digunakan adalah:
1. Mean Squared Error (MSE)
MSE mengukur rata-rata kuadrat dari galat (*error*) antara nilai aktual (yi) dan nilai prediksi (ŷi). Karena dikuadratkan, nilai galat yang besar akan dihukum lebih berat.
2. Root Mean Squared Error (RMSE)
RMSE adalah akar kuadrat dari MSE. Keuntungannya, RMSE memiliki unit yang sama dengan variabel target (Y), sehingga lebih mudah diinterpretasikan dalam konteks fisik.
3. Koefisien Determinasi (R-squared, R2)
R2 mengukur proporsi variabilitas dalam variabel dependen Y yang dapat dijelaskan oleh model. Nilai berkisar antara 0 hingga 1. Semakin dekat ke 1, semakin baik model menjelaskan data.
- SSE (Sum of Squared Errors): Jumlah kuadrat galat (pembilang MSE).
- SST (Total Sum of Squares): Total variasi Y dari nilai rata-ratanya.
C. Studi Kasus Implementasi: Prediksi Kuat Tekan Beton (Concrete Compressive Strength - UCI)
Kita akan menggunakan *dataset* **Concrete Compressive Strength** dari UCI, di mana kita mencoba memprediksi kuat tekan beton (Regresi) berdasarkan salah satu fitur, yaitu kadar semen (Cement).
Langkah 1: Persiapan Data dan Pembagian
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
# Asumsi dataset 'concrete.csv' sudah diunggah ke Colab
# Data fiktif disederhanakan:
data = {
'Cement': [540, 520, 480, 450, 400, 350, 300, 250, 200, 150],
'Age': [28, 7, 28, 90, 14, 28, 56, 7, 28, 90],
'Strength': [79.99, 61.30, 71.30, 44.70, 40.5, 30.1, 26.5, 15.6, 10.4, 8.7]
}
df = pd.DataFrame(data)
# Pilih Fitur (X) dan Target (y)
X = df[['Cement']] # Fitur: Kadar Semen (Regresi Linear Sederhana, hanya 1 fitur)
y = df['Strength'] # Target: Kuat Tekan Beton (kontinu)
# Split Data: 70% Training, 30% Testing (random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
print(f"Data Training: {len(X_train)} baris, Data Testing: {len(X_test)} baris")
Langkah 2: Pelatihan Model dan Interpretasi
# 1. Inisialisasi dan Latih Model
model = LinearRegression()
model.fit(X_train, y_train)
# 2. Ambil Koefisien dan Intersep
# β₀: Intersep
intersep = model.intercept_
# β₁: Koefisien (Slope)
koefisien = model.coef_[0]
print("\n--- Hasil Model Linear Regression ---")
print(f"Intersep (β₀): {intersep:.2f}")
print(f"Koefisien Semen (β₁): {koefisien:.2f}")
# Interpretasi:
# Setiap kenaikan 1 unit kadar Semen (X), kuat tekan beton (Y) diprediksi naik sebesar {koefisien:.2f} MPa.
Langkah 3: Evaluasi Model (Data Testing)
# 1. Lakukan Prediksi pada Data Testing
y_pred = model.predict(X_test)
# 2. Hitung Metrik Evaluasi
# MSE
mse = mean_squared_error(y_test, y_pred)
# RMSE
rmse = mean_squared_error(y_test, y_pred, squared=False)
# R-squared (Koefisien Determinasi)
r2 = r2_score(y_test, y_pred)
print("\n--- Metrik Evaluasi pada Data Testing ---")
print(f"Mean Squared Error (MSE): {mse:.2f}")
print(f"Root Mean Squared Error (RMSE): {rmse:.2f} (Memiliki satuan yang sama dengan Strength, yaitu MPa)")
print(f"R-squared (R²): {r2:.3f}")
# Interpretasi R-squared:
# Nilai R² = {r2:.3f} menunjukkan bahwa {r2*100:.1f}% variabilitas kuat tekan beton dapat dijelaskan oleh kadar semen.
Langkah 4: Visualisasi Garis Regresi
# Visualisasi Garis Regresi
plt.figure(figsize=(8, 6))
# Scatter plot data training
plt.scatter(X_train, y_train, color='blue', label='Data Training')
# Scatter plot data testing
plt.scatter(X_test, y_test, color='red', label='Data Testing (Prediksi)')
# Plot Garis Regresi
# Kita gunakan seluruh X untuk mendapatkan garis lurus yang lengkap
X_plot = df[['Cement']]
y_plot = model.predict(X_plot)
plt.plot(X_plot, y_plot, color='black', linewidth=2, label='Garis Regresi')
plt.title('Regresi Linear Kuat Tekan Beton vs Kadar Semen')
plt.xlabel('Kadar Semen (kg/m³)')
plt.ylabel('Kuat Tekan Beton (MPa)')
plt.legend()
plt.grid(True)
plt.show() # Tampilkan plot di Colab