Skip to main content

Modelling: Model Tuning

Setelah memilih dan melatih sebuah model, biasanya kita mendapatkan performa awal.

Misalnya:

Random Forest
Accuracy = 82%

Hasil tersebut belum tentu merupakan performa terbaik yang dapat dicapai oleh model tersebut.

Model memiliki sejumlah pengaturan yang dapat kita ubah untuk mencari konfigurasi yang memberikan hasil lebih baik.

Proses tersebut disebut Model Tuning atau Hyperparameter Tuning.

Secara sederhana:

Model

Default Hyperparameters

Training

Evaluation

Tuning

Training ulang

Evaluation

Konfigurasi terbaik

Model tuning merupakan proses eksperimen untuk menemukan kombinasi hyperparameter yang sesuai dengan dataset dan tujuan Machine Learning.


Apa Itu Hyperparameter?

Sebelum memahami tuning, kita perlu membedakan antara parameter dan hyperparameter.

Parameter

Parameter adalah nilai yang dipelajari oleh model selama proses training.

Contohnya pada Linear Regression:

y = w₁x₁ + w₂x₂ + b

Nilai:

w₁
w₂
b

merupakan parameter yang dipelajari model dari training data.

Kita tidak menentukan nilai tersebut secara manual sebelum training.

Model akan mencarinya berdasarkan data.


Hyperparameter

Hyperparameter adalah pengaturan yang ditentukan sebelum atau selama proses training, tetapi bukan nilai yang dipelajari langsung dari data oleh algoritma training.

Contohnya pada Random Forest:

RandomForestClassifier(
n_estimators=100,
max_depth=10
)

Di sini:

n_estimators = 100
max_depth = 10

merupakan hyperparameter.

Kita menentukan nilainya sebelum model dilatih.


Perbedaan Parameter dan Hyperparameter

Perhatikan perbedaan berikut:

AspekParameterHyperparameter
Dipelajari modelYaTidak secara langsung
Ditentukan sebelum trainingTidakYa
ContohWeight, biasmax_depth
Diubah saat tuningBiasanya tidak langsungYa
Bergantung algoritmaYaYa

Secara sederhana:

Hyperparameter

Mengatur bagaimana model belajar

Training

Parameter model

Hyperparameter dapat memengaruhi bagaimana proses training berlangsung dan seberapa kompleks model yang dihasilkan.


Analogi Kenop Oven

Model tuning dapat dianalogikan seperti memasak menggunakan oven.

Bayangkan kita ingin memanggang ayam.

Pengaturan awal:

Suhu = 180°C
Waktu = 60 menit

Setelah dipanggang, ternyata ayam masih belum matang.

Kita kemudian mengubah pengaturan:

Suhu = 200°C
Waktu = 60 menit

Setelah dicoba, hasilnya lebih baik.

Dalam Machine Learning:

Oven

Model

Suhu

Hyperparameter

Memanggang

Training

Hasil masakan

Model Performance

Kita mencoba berbagai konfigurasi untuk menemukan pengaturan yang menghasilkan performa terbaik.


Mengapa Model Perlu Dituning?

Model dengan konfigurasi default belum tentu optimal untuk dataset tertentu.

Misalnya Random Forest menggunakan:

RandomForestClassifier(
n_estimators=100
)

Kemudian hasilnya:

Accuracy = 84%

Kita dapat mencoba:

RandomForestClassifier(
n_estimators=300
)

Kemudian mendapatkan:

Accuracy = 87%

Kita dapat melanjutkan eksperimen dengan hyperparameter lain.

Namun perlu diingat:

Menambah nilai hyperparameter tidak selalu meningkatkan performa.

Tuning adalah proses mencari konfigurasi yang sesuai, bukan sekadar membuat angka hyperparameter menjadi semakin besar.


Hyperparameter pada Random Forest

Random Forest memiliki banyak hyperparameter yang dapat disesuaikan.

Beberapa yang penting:

  • n_estimators
  • max_depth
  • min_samples_split
  • min_samples_leaf
  • max_features
  • max_samples
  • bootstrap

n_estimators

n_estimators menentukan jumlah Decision Tree yang digunakan dalam Random Forest.

Contoh:

RandomForestClassifier(
n_estimators=10
)

berarti model menggunakan 10 tree.

Kita dapat mencoba:

n_estimators = 10
n_estimators = 50
n_estimators = 100
n_estimators = 200
n_estimators = 500

Secara umum, semakin banyak tree:

  • model dapat menjadi lebih stabil
  • waktu training meningkat
  • penggunaan memory meningkat
  • peningkatan performa pada akhirnya dapat semakin kecil

Contoh eksperimen:

from sklearn.ensemble import RandomForestClassifier

for n in [10, 50, 100, 200]:
model = RandomForestClassifier(
n_estimators=n,
random_state=42
)

model.fit(X_train, y_train)

score = model.score(X_test, y_test)

print(n, score)

Contoh hasil:

10 → 0.81
50 → 0.84
100 → 0.86
200 → 0.86

Dari contoh tersebut, menambah tree dari 100 menjadi 200 tidak memberikan peningkatan berarti.


max_depth

max_depth menentukan kedalaman maksimum Decision Tree.

Contoh:

RandomForestClassifier(
max_depth=5
)

Tree yang lebih dalam dapat mempelajari pola yang lebih kompleks.

Namun tree yang terlalu dalam dapat meningkatkan risiko overfitting.

Contoh:

max_depth = 2

Model terlalu sederhana

max_depth = 10

Model lebih kompleks

max_depth = None

Tree dapat berkembang sangat dalam

Kita dapat menguji:

for depth in [2, 5, 10, 20, None]:
model = RandomForestClassifier(
n_estimators=100,
max_depth=depth,
random_state=42
)

model.fit(X_train, y_train)

score = model.score(X_test, y_test)

print(depth, score)

min_samples_split

Hyperparameter ini menentukan jumlah minimum sample yang dibutuhkan agar sebuah node dapat di-split.

Contoh:

RandomForestClassifier(
min_samples_split=10
)

Dengan nilai yang lebih besar, model menjadi lebih konservatif dalam melakukan pemisahan node.

Hal ini dapat membantu mengurangi kompleksitas model.


min_samples_leaf

min_samples_leaf menentukan jumlah minimum sample yang harus ada pada sebuah leaf.

Contoh:

RandomForestClassifier(
min_samples_leaf=5
)

Nilai yang lebih besar dapat membuat model lebih sederhana dan dapat membantu mengurangi overfitting.


Hyperparameter pada Neural Network

Neural Network juga memiliki berbagai hyperparameter.

Contohnya:

  • jumlah hidden layer
  • jumlah neuron
  • learning rate
  • batch size
  • jumlah epoch
  • optimizer
  • dropout
  • activation function

Contoh sederhana:

Input

Dense Layer

Dense Layer

Output

Kita dapat mengubah:

Jumlah layer
Jumlah neuron
Learning rate
Batch size
Epoch
Dropout

Jumlah Layer

Misalnya kita memiliki Neural Network:

Input

10 neuron

Output

Kemudian kita mencoba:

Input

64 neuron

32 neuron

Output

Model kedua lebih kompleks.

Namun model yang lebih kompleks tidak otomatis lebih baik.

Jika dataset kecil, model yang terlalu kompleks dapat lebih mudah mengalami overfitting.


Learning Rate

Learning rate merupakan salah satu hyperparameter penting dalam proses optimasi Neural Network.

Secara sederhana, learning rate menentukan seberapa besar langkah perubahan parameter model ketika melakukan proses optimasi.

Jika terlalu kecil:

Training

Perubahan sangat kecil

Training sangat lama

Jika terlalu besar:

Training

Perubahan terlalu besar

Sulit mencapai solusi yang baik

Kita ingin menemukan learning rate yang sesuai.

Contoh:

0.1
0.01
0.001
0.0001

Nilai yang tepat sangat bergantung pada model dan dataset.


Epoch

Epoch menunjukkan berapa kali model melakukan satu kali proses pembelajaran terhadap seluruh training dataset.

Misalnya:

Dataset Training

Epoch 1

Epoch 2

Epoch 3

...

Jika menggunakan:

epochs = 10

model akan melakukan training selama 10 epoch.

Terlalu sedikit epoch dapat menyebabkan model belum belajar dengan cukup.

Terlalu banyak epoch dapat menyebabkan model mengalami overfitting.


Batch Size

Batch size menentukan berapa banyak sample yang diproses sebelum model melakukan satu langkah update parameter.

Misalnya dataset memiliki 1.000 sample.

Dengan:

batch_size = 100

satu epoch membutuhkan sekitar:

1000 / 100 = 10 batch

Contoh:

Batch 1 → 100 data
Batch 2 → 100 data
Batch 3 → 100 data
...
Batch 10 → 100 data

Tuning Menggunakan Validation Set

Idealnya, proses tuning tidak dilakukan berdasarkan Test Set.

Workflow yang lebih tepat:

Dataset

Training Set
Validation Set
Test Set

Kemudian:

Training Set

Training

Model

Validation Set

Evaluation

Tuning

Training ulang

Test Set disimpan untuk evaluasi final.


Mengapa Tidak Tuning Menggunakan Test Set?

Misalnya kita mencoba beberapa konfigurasi:

Model 1 → Test Accuracy = 82%
Model 2 → Test Accuracy = 85%
Model 3 → Test Accuracy = 88%
Model 4 → Test Accuracy = 90%

Jika kita terus memilih model berdasarkan Test Set, maka informasi Test Set secara tidak langsung memengaruhi keputusan pengembangan model.

Akibatnya, Test Set tidak lagi benar-benar menjadi data yang independen untuk evaluasi akhir.

Lebih baik:

Training Set

Training

Validation Set

Tuning & Model Selection

Test Set

Final Evaluation

Jika Tidak Memiliki Validation Set

Pada dataset tertentu, terutama ketika dataset relatif kecil, kita dapat menggunakan Cross-Validation.

Contohnya menggunakan K-Fold Cross-Validation:

Dataset
├── Fold 1
├── Fold 2
├── Fold 3
├── Fold 4
└── Fold 5

Model dilatih dan dievaluasi beberapa kali menggunakan kombinasi fold yang berbeda.

Contohnya:

Round 1:
Train → Fold 2, 3, 4, 5
Valid → Fold 1

Round 2:
Train → Fold 1, 3, 4, 5
Valid → Fold 2

Round 3:
Train → Fold 1, 2, 4, 5
Valid → Fold 3

Kemudian hasilnya dirata-ratakan.


Scikit-learn menyediakan beberapa tools untuk membantu melakukan tuning.

Salah satunya adalah GridSearchCV.

Misalnya kita ingin menguji beberapa kombinasi Random Forest:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

model = RandomForestClassifier(
random_state=42
)

param_grid = {
"n_estimators": [100, 200],
"max_depth": [None, 10, 20],
"min_samples_split": [2, 5]
}

Kemudian:

grid_search = GridSearchCV(
estimator=model,
param_grid=param_grid,
cv=5,
scoring="accuracy",
n_jobs=-1
)

grid_search.fit(X_train, y_train)

Setelah selesai:

print(grid_search.best_params_)

Untuk melihat score terbaik:

print(grid_search.best_score_)

Model terbaik:

best_model = grid_search.best_estimator_

Bagaimana Grid Search Bekerja?

Misalnya kita memiliki:

"n_estimators": [100, 200]
"max_depth": [10, 20]

Maka kombinasi yang dicoba adalah:

100 trees + depth 10
100 trees + depth 20
200 trees + depth 10
200 trees + depth 20

Jika menggunakan cv=5, setiap konfigurasi akan dievaluasi menggunakan 5-fold cross-validation.

Artinya jumlah training yang dilakukan dapat menjadi cukup besar.


Grid Search dapat menjadi mahal secara komputasi jika jumlah hyperparameter dan kandidat nilainya banyak.

Misalnya:

5 n_estimators
×
5 max_depth
×
4 min_samples_split
×
3 max_features

Jumlah kombinasi:

5 × 5 × 4 × 3 = 300 kombinasi

Jika:

cv = 5

maka dapat terjadi:

300 × 5 = 1.500 training

Belum termasuk proses training ulang atau eksperimen lainnya.

Karena itu, Grid Search sebaiknya digunakan secara terkontrol.


Alternatifnya adalah RandomizedSearchCV.

Daripada mencoba seluruh kombinasi, Random Search memilih sejumlah kombinasi secara acak dari ruang pencarian.

Contoh:

from sklearn.model_selection import RandomizedSearchCV

random_search = RandomizedSearchCV(
estimator=model,
param_distributions=param_grid,
n_iter=20,
cv=5,
scoring="accuracy",
random_state=42,
n_jobs=-1
)

random_search.fit(X_train, y_train)

Parameter:

n_iter=20

berarti hanya mencoba sekitar 20 konfigurasi yang dipilih dari ruang pencarian.


AspekGrid SearchRandom Search
StrategiSemua kombinasiKombinasi acak
Jumlah eksperimenDapat sangat besarDapat dibatasi
KontrolSangat terstrukturLebih fleksibel
Cocok untukRuang pencarian kecilRuang pencarian besar
KomputasiBisa mahalBiasanya lebih efisien

Secara umum:

Search Space kecil

Grid Search

Sedangkan:

Search Space besar

Random Search

Jangan Tuning Semua Hyperparameter Sekaligus

Kesalahan umum adalah langsung melakukan tuning terhadap terlalu banyak hyperparameter.

Misalnya:

n_estimators
max_depth
min_samples_split
min_samples_leaf
max_features
max_samples
bootstrap
criterion
...

Jika setiap parameter memiliki banyak kandidat, jumlah kombinasi dapat meningkat dengan sangat cepat.

Lebih baik memulai dari beberapa hyperparameter yang paling relevan.

Contoh:

param_grid = {
"n_estimators": [100, 200],
"max_depth": [10, 20, None]
}

Setelah mendapatkan hasil yang masuk akal, kita dapat melakukan eksperimen lanjutan.


Tuning Secara Bertahap

Pendekatan yang praktis:

Default Model

Baseline

Identifikasi hyperparameter penting

Tuning sederhana

Evaluasi

Persempit search space

Tuning lanjutan

Final Model

Contohnya:

Tahap 1

n_estimators:
100, 200, 300

Tahap 2

Setelah mendapatkan hasil terbaik di sekitar 200:

n_estimators:
150, 200, 250

Dengan cara tersebut, kita dapat mempersempit ruang pencarian.


Tuning dan Overfitting

Tuning juga dapat menyebabkan overfitting jika dilakukan secara tidak hati-hati.

Misalnya kita melakukan banyak eksperimen terhadap validation set:

Experiment 1 → Validation
Experiment 2 → Validation
Experiment 3 → Validation
...
Experiment 100 → Validation

Semakin sering kita mengambil keputusan berdasarkan validation set, semakin besar kemungkinan kita secara tidak langsung menyesuaikan model terhadap karakteristik validation set.

Karena itu, Test Set tetap harus disimpan dan hanya digunakan untuk evaluasi akhir.


Contoh Lengkap Model Tuning

Berikut contoh sederhana menggunakan Random Forest dan Grid Search.

Import Library

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score

Membagi Dataset

X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
stratify=y
)

Pada contoh ini kita menggunakan cross-validation pada training data untuk memilih hyperparameter.

Membuat Model

model = RandomForestClassifier(
random_state=42
)

Menentukan Search Space

param_grid = {
"n_estimators": [100, 200],
"max_depth": [None, 10, 20],
"min_samples_split": [2, 5]
}
grid_search = GridSearchCV(
estimator=model,
param_grid=param_grid,
cv=5,
scoring="accuracy",
n_jobs=-1
)

Training

grid_search.fit(
X_train,
y_train
)

Melihat Hyperparameter Terbaik

print("Best Parameters:")
print(grid_search.best_params_)

Melihat Validation Score Terbaik

print("Best CV Score:")
print(grid_search.best_score_)

Mendapatkan Model Terbaik

best_model = grid_search.best_estimator_

Evaluasi pada Test Set

test_predictions = best_model.predict(X_test)

test_accuracy = accuracy_score(
y_test,
test_predictions
)

print(f"Test Accuracy: {test_accuracy:.2%}")

Perhatikan bahwa Test Set baru digunakan setelah proses pemilihan hyperparameter selesai.


Membandingkan Baseline dengan Tuned Model

Setelah tuning selesai, kita dapat membandingkan model awal dengan model hasil tuning.

Misalnya:

Baseline Model
Accuracy = 84%

Tuned Model
Accuracy = 89%

Maka tuning memberikan peningkatan:

89% - 84% = 5 percentage points

Namun jangan hanya melihat peningkatan score.

Pertimbangkan juga:

Accuracy
Precision
Recall
F1 Score
Training Time
Prediction Time
Model Size
Complexity

Metric yang digunakan harus sesuai dengan masalah yang sedang diselesaikan.


Tuning Bukan Jaminan Performa Meningkat

Penting untuk dipahami bahwa tuning tidak selalu menghasilkan peningkatan performa.

Contohnya:

Baseline
Accuracy = 89%

Tuned Model
Accuracy = 89%

Hal tersebut bukan berarti tuning gagal.

Bisa saja model default memang sudah memberikan konfigurasi yang sangat baik untuk dataset tersebut.

Tuning juga dapat menghasilkan model yang:

lebih lambat
lebih kompleks
lebih besar

tanpa peningkatan performa yang berarti.

Dalam kondisi tersebut, model baseline mungkin justru lebih baik secara praktis.


Model Tuning sebagai Eksperimen

Jangan melihat tuning sebagai:

"Tuning = menaikkan accuracy"

Lebih tepat melihatnya sebagai:

Tuning

Eksperimen

Menguji konfigurasi

Mengukur performa

Menganalisis hasil

Memilih konfigurasi

Setiap eksperimen harus memiliki tujuan yang jelas.

Misalnya:

Hipotesis:
Menambah jumlah tree dari 100 menjadi 300
akan meningkatkan stabilitas model.

Kemudian kita menguji:

100 trees → 85%
200 trees → 87%
300 trees → 87%

Kesimpulannya:

Peningkatan berhenti sekitar 200 trees.

Ini jauh lebih baik daripada sekadar mencoba angka secara acak tanpa mencatat hasil.


Prinsip Eksperimen yang Baik

Saat melakukan tuning:

1. Catat Setiap Eksperimen

Contohnya:

Experimentn_estimatorsmax_depthScore
A100None84%
B200None87%
C300None87%
D2001088%

Dengan catatan seperti ini, kita dapat memahami perkembangan eksperimen.

2. Gunakan Random State

Untuk eksperimen yang dapat dipengaruhi oleh randomization:

random_state=42

Hal ini membantu menghasilkan eksperimen yang lebih reproducible.

3. Gunakan Validation atau Cross-Validation

Jangan menjadikan Test Set sebagai tempat mencoba semua konfigurasi.

4. Jangan Mencari Hyperparameter Secara Buta

Gunakan pemahaman tentang algoritma untuk menentukan search space.

5. Perhatikan Biaya Komputasi

Search space yang terlalu besar dapat menyebabkan training menjadi sangat lama.


Workflow Model Tuning

Workflow yang dapat digunakan:

Dataset

Problem Definition

Preprocessing

Train / Validation / Test

Baseline Model

Evaluate

Tentukan Hyperparameter

Tuning

Cross-Validation

Pilih Konfigurasi Terbaik

Final Model

Test Set

Final Evaluation

Jika hasil belum memuaskan:

Final Evaluation

Belum cukup baik

Analisis masalah

Perbaiki data / fitur / model

Eksperimen kembali

Kesalahan Umum Saat Model Tuning

Menggunakan Test Set Berulang Kali

Salah:

Training

Test

Tuning

Test

Tuning

Test

Lebih baik:

Training

Validation / Cross-Validation

Tuning

Final Model

Test sekali untuk evaluasi akhir

Menganggap Hyperparameter Semakin Besar Semakin Baik

Contohnya:

n_estimators = 100

tidak otomatis lebih buruk daripada:

n_estimators = 1000

Nilai yang lebih besar juga dapat meningkatkan waktu dan penggunaan resource.

Menggunakan Search Space Terlalu Besar

Search space yang terlalu besar dapat membuat eksperimen sangat mahal.

Hanya Mengejar Satu Metric

Accuracy yang tinggi belum tentu berarti model lebih baik.

Gunakan metric yang sesuai dengan problem.


Checklist Model Tuning

Sebelum menyelesaikan tahap tuning, pastikan:

  • Sudah memahami perbedaan parameter dan hyperparameter
  • Sudah memiliki baseline model
  • Sudah mengetahui hyperparameter yang relevan
  • Sudah menentukan metric evaluasi
  • Tuning dilakukan menggunakan validation atau cross-validation
  • Test Set tidak digunakan untuk memilih hyperparameter
  • Search space sudah ditentukan
  • Eksperimen dicatat
  • Random state digunakan jika diperlukan
  • Biaya komputasi dipertimbangkan
  • Baseline dibandingkan dengan tuned model
  • Model terbaik diuji pada Test Set setelah proses tuning selesai

Ringkasan

Model Tuning adalah proses menyesuaikan hyperparameter model untuk menemukan konfigurasi yang sesuai dengan dataset.

Perbedaan penting:

Parameter

Dipela­jari model selama training

Hyperparameter

Ditentukan oleh kita

Contoh hyperparameter Random Forest:

n_estimators
max_depth
min_samples_split
min_samples_leaf
max_features

Contoh hyperparameter Neural Network:

learning rate
number of layers
number of neurons
batch size
epochs
dropout
optimizer

Proses tuning dapat dilakukan secara manual maupun menggunakan tools seperti:

GridSearchCV
RandomizedSearchCV

Workflow yang baik:

Baseline

Training

Validation / Cross-Validation

Tuning

Model Selection

Final Model

Test Set

Hal yang paling penting untuk diingat:

Model tuning bukan sekadar mencari angka hyperparameter terbesar, tetapi mencari konfigurasi yang memberikan keseimbangan antara performa, generalisasi, kompleksitas, dan biaya komputasi.

Dengan memahami tuning, kita tidak hanya menggunakan model dengan pengaturan default, tetapi mulai melakukan eksperimen Machine Learning secara sistematis.

Pada materi berikutnya, kita akan membahas Model Comparison, yaitu bagaimana membandingkan beberapa model secara objektif dan menentukan model yang paling sesuai untuk suatu permasalahan.