Tanpa alat ukur yang tepat, kualitas model regresi tidak dapat dinilai. Topik ini membahas empat metrik regresi yang menjadi standar, yaitu MAE, MSE, RMSE, dan R-squared, beserta rumus, satuan, dan sifat khas masing-masing. Perhitungan keempat metrik dilakukan pada prediksi model diabetes, dilanjutkan demonstrasi pengaruh satu pencilan terhadap MAE dan MSE serta jebakan membandingkan MSE pada data yang skalanya berbeda.
MAE, MSE, dan RMSE#
MAE atau mean absolute error adalah rata-rata selisih mutlak antara nilai aktual dan prediksi pada sampel:
Setiap selisih dihitung apa adanya tanpa dikuadratkan, sehingga metrik ini berada pada satuan asli target dan setiap kesalahan menyumbang sebanding dengan jaraknya. MSE atau mean squared error mengkuadratkan selisih tersebut sebelum dirata-rata:
Kuadrat membuat kesalahan besar terhukum jauh lebih berat, yaitu satu kesalahan sepuluh kali lipat menyumbang seratus kali lipat pada MSE. Konsekuensi satuannya, MSE berada pada satuan target yang dikuadratkan sehingga sulit dibaca langsung. RMSE atau root mean squared error mengambil akar kuadrat dari MSE:
Akar mengembalikan metrik ke satuan asli target, sehingga RMSE dapat dibandingkan dengan nilai target secara langsung sambil tetap mempertahankan kepekaan terhadap kesalahan besar.
R-squared#
R-squared atau koefisien determinasi membandingkan model dengan baseline sederhana yang selalu memprediksi rata-rata target:
Penyebutnya adalah variansi total target di sekitar rata-ratanya , sedangkan pembilangnya adalah sisa variansi yang tidak dijelaskan model. Nilai 1 berarti seluruh variansi target tertangkap model, sedangkan nilai 0 berarti model tidak lebih baik daripada menebak rata-rata. Nilai dapat bernegatif apabila model lebih buruk daripada baseline rata-rata, dan keadaan ini sah terjadi pada data uji ketika model yang dilatih pada data latih tidak menggeneralisasi. Metode score yang muncul pada topik Regresi Linear mengembalikan nilai ini, sehingga skor 0.4849 pada data uji diabetes berarti model menjelaskan sekitar 48 persen variansi target.
Perhitungan pada prediksi diabetes#
Program berikut melatih LinearRegression pada dataset diabetes, kemudian menghitung keempat metrik pada data uji sekaligus rata-rata target sebagai pembanding konteks.
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
data = load_diabetes()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
model = LinearRegression().fit(X_train, y_train)
prediksi = model.predict(X_test)
mae = mean_absolute_error(y_test, prediksi)
mse = mean_squared_error(y_test, prediksi)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, prediksi)
print(f"MAE : {mae:.2f}")
print(f"MSE : {mse:.2f}")
print(f"RMSE : {rmse:.2f}")
print(f"R2 : {r2:.4f}")
print(f"Rata-rata target uji : {y_test.mean():.2f}")MAE : 41.55
MSE : 2848.31
RMSE : 53.37
R2 : 0.4849
Rata-rata target uji : 145.54Angka-angka tersebut dibaca berlapis. MAE 41.55 menyatakan rata-rata kesalahan model dalam satuan asli target, sehingga terhadap rata-rata target 145.54 model rata-rata meleset sekitar 29 persen. RMSE 53.37 berada jauh di atas MAE, dan jarak keduanya menandakan adanya kesalahan-kesalahan besar yang menggelembungkan MSE 2848.31. Nilai 0.4849 konsisten dengan skor pada topik Regresi Linear, yaitu sekitar separuh variansi target terjelaskan. Keempatnya saling melengkapi, sehingga satu angka saja tidak cukup untuk menggambarkan kualitas model.
Pengaruh satu pencilan pada MAE dan MSE#
Karakter kedua metrik paling terlihat apabila satu nilai ekstrem dimasukkan. Contoh berikut menggunakan lima prediksi yang sama pada dua kondisi, yaitu kondisi biasa dan kondisi ketika satu nilai aktual berubah menjadi 400.
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error
y_aktual = np.array([200.0, 210.0, 190.0, 205.0, 195.0])
y_prediksi = np.array([198.0, 212.0, 188.0, 207.0, 193.0])
mae = mean_absolute_error(y_aktual, y_prediksi)
mse = mean_squared_error(y_aktual, y_prediksi)
print(f"Kondisi biasa : MAE {mae:.2f}, MSE {mse:.2f}")
y_pencilan = y_aktual.copy()
y_pencilan[2] = 400.0
mae_p = mean_absolute_error(y_pencilan, y_prediksi)
mse_p = mean_squared_error(y_pencilan, y_prediksi)
print(f"Satu pencilan : MAE {mae_p:.2f}, MSE {mse_p:.2f}")Kondisi biasa : MAE 2.00, MSE 4.00
Satu pencilan : MAE 44.00, MSE 8992.00Satu pencilan menggeser MAE dari 2.00 menjadi 44.00, sedangkan MSE melonjak dari 4.00 menjadi 8992.00. MAE naik karena pencilan menyumbang kesalahannya sebesar 212 ke dalam rata-rata, tetapi MSE naik jauh lebih besar karena 212 dikuadratkan menjadi 44944 sebelum dirata-rata. Perbandingan ini menegaskan pilihan praktisnya, yaitu MSE dan RMSE dipilih ketika kesalahan besar memang harus dihindari sekeras apa pun, sedangkan MAE dipilih ketika data rawan pencilan dan metrik yang tahan terhadapnya lebih diinginkan.
Jebakan membandingkan MSE lintas skala#
MSE bergantung penuh pada satuan target, sehingga angkanya tidak dapat dibandingkan antar dataset yang skalanya berbeda. Contoh berikut mengukur kesalahan yang persis sama dalam kilogram dan dalam gram.
from sklearn.metrics import mean_squared_error, r2_score
y_kg = [1.0, 2.0, 3.0]
p_kg = [1.5, 2.0, 2.5]
y_gr = [1000.0, 2000.0, 3000.0]
p_gr = [1500.0, 2000.0, 2500.0]
print(f"MSE dalam kilogram : {mean_squared_error(y_kg, p_kg):.4f}")
print(f"MSE dalam gram : {mean_squared_error(y_gr, p_gr):.1f}")
print(f"R2 dalam kilogram : {r2_score(y_kg, p_kg):.4f}")
print(f"R2 dalam gram : {r2_score(y_gr, p_gr):.4f}")MSE dalam kilogram : 0.1667
MSE dalam gram : 166666.7
R2 dalam kilogram : 0.7500
R2 dalam gram : 0.7500Kesalahan prediksinya identik, tetapi MSE dalam gram terlihat sejuta kali lebih besar karena gram adalah ribuan kali kilogram dan MSE mengkuadratkannya. Sementara itu, tetap 0.7500 pada kedua satuan karena pembagi variansi ikut terskala dengan cara yang sama. Inilah alasan lazim digunakan untuk membandingkan performa lintas dataset, dengan catatan nilai tersebut selalu disertai MAE atau RMSE agar besarnya kesalahan tipikal tetap terbaca.
Kesalahan umum#
Kesalahan pertama adalah melaporkan MSE sebagai satu-satunya angka kualitas model kepada pihak yang bukan teknisi. Nilai 2848.31 pada dataset diabetes tidak berarti apa pun tanpa keterangan bahwa satuannya berupa kuadrat target, sehingga MAE atau RMSE yang berada pada satuan asli selalu disertakan. Kesalahan kedua adalah menyandingkan metrik jarak dari model yang targetnya berbeda skala, sebagaimana ditunjukkan contoh kilogram dan gram di atas.
Kesalahan ketiga adalah menafsirkan negatif sebagai tanda kode yang rusak. Nilai negatif sah terjadi ketika model lebih buruk daripada baseline rata-rata pada data uji, dan kejadian itu justru menjadi sinyal penting bahwa generalisasi model gagal.
Ringkasan#
- MAE mengukur rata-rata kesalahan pada satuan asli target dan menyumbang setiap kesalahan sebanding jaraknya, sedangkan MSE mengkuadratkan kesalahan sehingga kesalahan besar terhukum berat.
- RMSE mengembalikan MSE ke satuan asli target melalui akar kuadrat, dan jarak RMSE terhadap MAE menandakan keberadaan kesalahan besar.
- menyatakan proporsi variansi target yang terjelaskan, bernilai 0 untuk baseline rata-rata, dan sah bernilai negatif ketika model gagal menggeneralisasi.
- MSE tidak dapat dibandingkan lintas skala target, sedangkan tidak terpengaruh skala karena pembaginya ikut terskala.
Referensi#
- 3.3. Metrics and scoring — scikit-learn documentation — Mengulas metrik regresi beserta rumus dan kapan masing-masing digunakan.
- mean_absolute_error — scikit-learn documentation — Rujukan fungsi MAE beserta contoh pemanggilannya.
- mean_squared_error — scikit-learn documentation — Rujukan fungsi MSE dan hubungannya dengan RMSE.
- r2_score — scikit-learn documentation — Rujukan fungsi R-squared beserta rumus dan catatan batasannya.