Pertemuan 05: Supervised Learning - Regresi
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:
- Memahami konsep regresi untuk prediksi nilai kontinu
- Mengimplementasikan Linear dan Polynomial Regression
- Menguasai teknik regularization (Ridge, Lasso, ElasticNet)
- Memprediksi properti reservoir dari well log
- Mengevaluasi model regresi dengan metrics yang tepat (MAE, RMSE, R²)
Ringkasan Materi
1. Konsep Regresi
Regresi adalah supervised learning untuk memprediksi nilai kontinu berdasarkan input features. Dalam geofisika, regresi sangat penting untuk prediksi properti reservoir seperti porositas, permeabilitas, dan saturasi hidrokarbon.
Aplikasi Regresi dalam Geofisika:
- Prediksi porositas (PHIT) dari well log curves
- Estimasi permeabilitas dari core dan log data
- Prediksi saturasi hidrokarbon (Sw, So, Sg)
- Volume of shale (Vsh) estimation
- Production forecasting
2. Linear Regression
Linear Regression adalah model paling sederhana yang assumes linear relationship antara features dan target.
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import numpy as np
# Prepare data - prediksi porositas
X = df[['GR', 'RHOB', 'NPHI', 'DT']]
y = df['PHIT'] # Total Porosity
# Split data
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Train Linear Regression
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
# Predictions
y_pred = lr_model.predict(X_test)
# Evaluation
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
r2 = r2_score(y_test, y_pred)
print(f"MAE: {mae:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"R² Score: {r2:.4f}")
# Coefficients
for feature, coef in zip(X.columns, lr_model.coef_):
print(f"{feature}: {coef:.4f}")
3. Polynomial Regression
Untuk capture non-linear relationships, transform features menjadi polynomial form.
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline
# Polynomial degree 2
poly_model = Pipeline([
('poly', PolynomialFeatures(degree=2)),
('linear', LinearRegression())
])
poly_model.fit(X_train, y_train)
y_pred_poly = poly_model.predict(X_test)
r2_poly = r2_score(y_test, y_pred_poly)
print(f"Polynomial R²: {r2_poly:.4f}")
4. Regularized Regression
Regularization menambahkan penalty untuk prevent overfitting. Tiga types: Ridge (L2), Lasso (L1), ElasticNet.
from sklearn.linear_model import Ridge, Lasso, ElasticNet
from sklearn.preprocessing import StandardScaler
# Feature scaling
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Ridge Regression (L2)
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train_scaled, y_train)
y_pred_ridge = ridge_model.predict(X_test_scaled)
print(f"Ridge R²: {r2_score(y_test, y_pred_ridge):.4f}")
# Lasso Regression (L1 - feature selection)
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train_scaled, y_train)
y_pred_lasso = lasso_model.predict(X_test_scaled)
print(f"Lasso R²: {r2_score(y_test, y_pred_lasso):.4f}")
# ElasticNet (L1 + L2)
elastic_model = ElasticNet(alpha=0.1, l1_ratio=0.5)
elastic_model.fit(X_train_scaled, y_train)
y_pred_elastic = elastic_model.predict(X_test_scaled)
print(f"ElasticNet R²: {r2_score(y_test, y_pred_elastic):.4f}")
5. Model Evaluation
Metrics evaluasi untuk regression: MAE (interpretable), RMSE (penalize large errors), R² (proportion of variance explained).
- Always plot actual vs predicted values
- Analyze residuals untuk check assumptions
- Use cross-validation untuk robust estimate
- Feature scaling untuk regularized models
- Interpret coefficients dalam konteks geofisika
Resources Tambahan
Tugas & Latihan
- Implementasikan Linear Regression untuk prediksi porositas (PHIT) dari well log
- Bandingkan performa Linear vs Polynomial Regression (degree 2, 3, 4)
- Apply Ridge dan Lasso regularization, compare hasilnya
- Plot actual vs predicted values dan analyze residuals
- Calculate dan interpretasi R² score, MAE, dan RMSE untuk setiap model
Persiapan Pertemuan Selanjutnya
Pada pertemuan berikutnya, kita akan membahas Evaluasi Model & Tuning. Pastikan Anda sudah:
- Memahami konsep overfitting dan underfitting
- Familiar dengan cross-validation
- Install library untuk hyperparameter tuning
- Simpan model-model yang sudah dibuat untuk di-tune minggu depan