XGBoost vs LightGBM 2026: Gradient Boosting dan Pertanyaan Interview Data Science

Kuasai XGBoost dan LightGBM untuk interview data science. Bandingkan algoritma gradient boosting, pelajari hyperparameter tuning, dan latihan pertanyaan interview dengan contoh kode.

Perbandingan XGBoost vs LightGBM untuk interview data science

XGBoost dan LightGBM tetap menjadi implementasi gradient boosting paling efektif untuk data tabular di tahun 2026, secara konsisten mengungguli deep learning pada dataset terstruktur. Kedua library ini telah berkembang signifikan, dengan XGBoost 2.1 dan LightGBM 4.5 memperkenalkan peningkatan akselerasi GPU dan penanganan fitur kategorikal yang lebih baik.

Tips Interview

Ketika ditanya "Mengapa menggunakan XGBoost daripada neural network?", tekankan bahwa gradient boosting menangani data tabular dengan sampel lebih sedikit secara lebih efektif, membutuhkan lebih sedikit feature engineering, dan menyediakan feature importance bawaan. Neural network unggul pada data tidak terstruktur (gambar, teks, audio) tetapi kesulitan dengan fitur tabular heterogen.

Perbedaan Gradient Boosting dengan Random Forests

Gradient boosting dan Random Forests sama-sama menggunakan decision trees, tetapi pendekatan trainingnya berbeda secara fundamental. Random Forests melatih tree secara independen dan paralel, kemudian merata-ratakan prediksi. Gradient boosting melatih tree secara sekuensial, dengan setiap tree mengoreksi kesalahan dari ensemble sebelumnya.

Formulasi matematis memperjelas perbedaan ini. Pada iterasi m, gradient boosting menyesuaikan tree baru h_m(x) ke gradien negatif dari loss function terhadap prediksi ensemble saat ini. Untuk squared error loss, gradien negatif ini sama dengan residual.

python
# gradient_boosting_demo.py
import numpy as np
from sklearn.tree import DecisionTreeRegressor

def gradient_boosting_from_scratch(X, y, n_estimators=100, learning_rate=0.1, max_depth=3):
    """Simplified gradient boosting for regression to illustrate the algorithm."""
    # Initialize predictions with the mean (minimizes squared error)
    predictions = np.full(len(y), y.mean())
    trees = []
    
    for _ in range(n_estimators):
        # Compute negative gradient (residuals for MSE loss)
        residuals = y - predictions
        
        # Fit a tree to the residuals
        tree = DecisionTreeRegressor(max_depth=max_depth)
        tree.fit(X, residuals)
        trees.append(tree)
        
        # Update predictions with shrinkage (learning rate)
        predictions += learning_rate * tree.predict(X)
    
    return trees, y.mean()

Ketergantungan sekuensial ini membuat gradient boosting lebih lambat untuk dilatih dibandingkan Random Forests, tetapi biasanya lebih akurat pada dataset yang sama.

Arsitektur XGBoost dan Parameter Utama

XGBoost (eXtreme Gradient Boosting) memperkenalkan beberapa optimisasi yang membuat gradient boosting praktis untuk skala besar. Library ini menggunakan fungsi objektif terregularisasi yang menggabungkan loss dengan penalti L1 dan L2 pada bobot leaf, mengurangi overfitting tanpa cross-validation yang ekstensif.

python
# xgboost_classification.py
import xgboost as xgb
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# Generate synthetic classification data
X, y = make_classification(n_samples=10000, n_features=20, n_informative=10, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# XGBoost with commonly tuned hyperparameters
model = xgb.XGBClassifier(
    n_estimators=500,           # Number of boosting rounds
    max_depth=6,                # Maximum tree depth (controls complexity)
    learning_rate=0.1,          # Shrinkage factor (eta in XGBoost docs)
    subsample=0.8,              # Row sampling ratio per tree
    colsample_bytree=0.8,       # Column sampling ratio per tree
    reg_alpha=0.1,              # L1 regularization on leaf weights
    reg_lambda=1.0,             # L2 regularization on leaf weights
    tree_method='hist',         # Histogram-based algorithm (faster)
    early_stopping_rounds=50,   # Stop if no improvement after 50 rounds
    random_state=42
)

model.fit(
    X_train, y_train,
    eval_set=[(X_test, y_test)],  # Validation set for early stopping
    verbose=False
)

print(f"Best iteration: {model.best_iteration}")
print(f"Test accuracy: {model.score(X_test, y_test):.4f}")

Parameter tree_method='hist' layak mendapat perhatian khusus. Histogram-based tree building mengkuantisasi fitur kontinu menjadi bin diskrit, mengurangi penggunaan memori dan mempercepat pencarian split. XGBoost 2.0+ menggunakan metode ini secara default.

LightGBM: Pertumbuhan Leaf-Wise dan Penanganan Kategorikal

LightGBM (Light Gradient Boosting Machine) dari Microsoft memperkenalkan dua inovasi yang sering membuatnya lebih cepat dari XGBoost: pertumbuhan tree leaf-wise dan Gradient-based One-Side Sampling (GOSS).

Decision tree tradisional tumbuh level-by-level, memisahkan semua node pada kedalaman tertentu sebelum bergerak lebih dalam. LightGBM tumbuh leaf-wise, selalu memisahkan leaf dengan potensi gain tertinggi. Pendekatan asimetris ini menghasilkan tree yang lebih kompleks dengan split lebih sedikit, sering mencapai training loss yang lebih rendah lebih cepat.

python
# lightgbm_with_categorical.py
import lightgbm as lgb
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

# Create dataset with categorical features
np.random.seed(42)
df = pd.DataFrame({
    'category_a': np.random.choice(['low', 'medium', 'high'], 10000),
    'category_b': np.random.choice(['type1', 'type2', 'type3', 'type4'], 10000),
    'numeric_1': np.random.randn(10000),
    'numeric_2': np.random.randn(10000),
    'target': np.random.randint(0, 2, 10000)
})

# Convert to categorical dtype (LightGBM reads this automatically)
df['category_a'] = df['category_a'].astype('category')
df['category_b'] = df['category_b'].astype('category')

X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# LightGBM handles categorical features natively
model = lgb.LGBMClassifier(
    n_estimators=500,
    max_depth=-1,               # No limit (leaf-wise growth controls complexity)
    num_leaves=31,              # Maximum leaves per tree (key LightGBM param)
    learning_rate=0.1,
    subsample=0.8,
    colsample_bytree=0.8,
    min_child_samples=20,       # Minimum samples in a leaf
    reg_alpha=0.1,
    reg_lambda=1.0,
    random_state=42,
    verbose=-1
)

model.fit(
    X_train, y_train,
    eval_set=[(X_test, y_test)],
    callbacks=[lgb.early_stopping(50, verbose=False)]
)

print(f"Best iteration: {model.best_iteration_}")
print(f"Test accuracy: {model.score(X_test, y_test):.4f}")

Penanganan kategorikal native LightGBM mengungguli one-hot encoding untuk fitur dengan kardinalitas tinggi. Algoritma ini menemukan split optimal di seluruh nilai kategorikal tanpa membuat matriks sparse.

Siap menguasai wawancara Data Science & ML Anda?

Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.

XGBoost vs LightGBM: Perbandingan Praktis

Pilihan antara XGBoost dan LightGBM tergantung pada karakteristik dataset dan batasan yang ada. Berikut perbandingan langsung berdasarkan benchmark dan pengalaman praktis:

AspekXGBoost 2.1LightGBM 4.5
Kecepatan trainingLebih lambat pada dataset besar2-5x lebih cepat dengan GOSS
Penggunaan memoriLebih tinggiLebih rendah (histogram binning)
Fitur kategorikalMembutuhkan encodingDukungan native
Pertumbuhan treeLevel-wise (default)Leaf-wise
Dukungan GPUCUDA, metode histogramCUDA, dukungan native
Risiko overfittingLebih rendah (level-wise)Lebih tinggi (leaf-wise, tune num_leaves)
Dataset kecil (<10k baris)Sering lebih baikSebanding
Dataset besar (>1M baris)Lebih lambatLebih disukai

Untuk tugas feature engineering di mana waktu training penting, keunggulan kecepatan LightGBM menjadi signifikan selama eksperimen iteratif.

Strategi Hyperparameter Tuning untuk Interview

Pewawancara sering bertanya bagaimana melakukan tuning model gradient boosting. Pendekatan terstruktur menunjukkan pemikiran sistematis daripada random grid search.

python
# hyperparameter_tuning.py
import optuna
import xgboost as xgb
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=5000, n_features=20, n_informative=10, random_state=42)

def objective(trial):
    """Optuna objective for XGBoost hyperparameter optimization."""
    params = {
        # Start with learning rate and n_estimators
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3, log=True),
        'n_estimators': trial.suggest_int('n_estimators', 100, 1000),
        
        # Tree complexity (most important for bias-variance tradeoff)
        'max_depth': trial.suggest_int('max_depth', 3, 10),
        'min_child_weight': trial.suggest_int('min_child_weight', 1, 10),
        
        # Regularization (reduce overfitting)
        'reg_alpha': trial.suggest_float('reg_alpha', 1e-8, 10.0, log=True),
        'reg_lambda': trial.suggest_float('reg_lambda', 1e-8, 10.0, log=True),
        
        # Sampling (stochastic gradient boosting)
        'subsample': trial.suggest_float('subsample', 0.5, 1.0),
        'colsample_bytree': trial.suggest_float('colsample_bytree', 0.5, 1.0),
        
        'tree_method': 'hist',
        'random_state': 42
    }
    
    model = xgb.XGBClassifier(**params)
    scores = cross_val_score(model, X, y, cv=5, scoring='roc_auc')
    return scores.mean()

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50, show_progress_bar=True)

print(f"Best ROC-AUC: {study.best_value:.4f}")
print(f"Best params: {study.best_params}")

Urutan prioritas tuning penting: learning rate dan jumlah estimator terlebih dahulu, kemudian kompleksitas tree (max_depth, num_leaves), kemudian regularisasi, lalu rasio sampling. Urutan ini mencerminkan bagaimana parameter mempengaruhi bias-variance tradeoff.

Pertanyaan Interview Umum tentang Gradient Boosting

Interview data science menguji pemahaman teoritis dan kemampuan debugging praktis. Pertanyaan-pertanyaan ini sering muncul dalam interview di perusahaan yang bekerja dengan data tabular.

Q: Mengapa gradient boosting lebih mudah overfit dibanding Random Forests?

Gradient boosting melatih secara sekuensial, dengan setiap tree secara eksplisit menyesuaikan kesalahan ensemble. Tree tahap akhir dapat menghafal noise dalam residual. Random Forests melatih tree secara independen pada sampel bootstrap, dan perata-rataan mengurangi varians. Regularisasi (learning rate, subsampling, batasan tree) mengurangi masalah ini dalam gradient boosting.

Q: Apa yang menyebabkan XGBoost memberikan hasil berbeda pada data yang sama?

Non-determinisme berasal dari tiga sumber: row subsampling (subsample), column subsampling (colsample_bytree), dan konstruksi histogram paralel. Mengatur random_state memperbaiki dua yang pertama. Untuk reprodusibilitas yang tepat, atur juga n_jobs=1, meskipun ini memperlambat training.

Q: Bagaimana menangani class imbalance di XGBoost?

Tiga pendekatan yang berhasil:

  1. scale_pos_weight: Atur ke (negative_count / positive_count) untuk klasifikasi biner
  2. sample_weight: Berikan bobot instance ke fit()
  3. Resampling: SMOTE atau random undersampling sebelum training

Pendekatan scale_pos_weight memodifikasi loss function dan mempertahankan distribusi data asli, sering lebih disukai daripada resampling.

Q: Kapan memilih CatBoost daripada XGBoost atau LightGBM?

CatBoost unggul ketika dataset berisi banyak fitur kategorikal dengan kardinalitas tinggi, dan ketika mengurangi overfitting dengan tuning minimal adalah prioritas. Ordered boosting dan struktur tree simetrisnya membuatnya lebih tahan terhadap overfitting pada dataset kecil. Tradeoff-nya adalah training lebih lambat dari LightGBM.

Untuk fundamental klasifikasi lebih lanjut, tinjau modul klasifikasi supervised learning.

Feature Importance dan Interpretabilitas Model

Menjelaskan prediksi penting di industri yang diregulasi dan membangun kepercayaan dengan stakeholder. XGBoost dan LightGBM menyediakan feature importance bawaan, tetapi interpretasinya memerlukan kehati-hatian.

python
# feature_importance.py
import xgboost as xgb
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=5000, n_features=20, n_informative=10, random_state=42)
feature_names = [f'feature_{i}' for i in range(20)]

model = xgb.XGBClassifier(n_estimators=100, random_state=42)
model.fit(X, y)

# Three importance types available
importance_types = ['weight', 'gain', 'cover']

for imp_type in importance_types:
    importance = model.get_booster().get_score(importance_type=imp_type)
    print(f"\n{imp_type.upper()} importance (top 5):")
    sorted_imp = sorted(importance.items(), key=lambda x: x[1], reverse=True)[:5]
    for feat, score in sorted_imp:
        print(f"  {feat}: {score:.2f}")
  • Weight: Jumlah kali fitur muncul dalam split di seluruh tree
  • Gain: Rata-rata peningkatan dalam fungsi objektif ketika fitur digunakan untuk splitting
  • Cover: Rata-rata jumlah sampel yang terpengaruh oleh split pada fitur ini

Gain biasanya memberikan ukuran importance paling bermakna, karena langsung berkaitan dengan peningkatan model. Namun, fitur yang berkorelasi dapat memiliki importance yang kurang dinyatakan karena model mungkin melakukan split pada salah satunya.

Untuk interpretasi kausal, SHAP values (tersedia melalui library shap) menyediakan atribusi fitur yang konsisten dan berdasar teori per prediksi.

Pertimbangan Deployment Produksi

Men-deploy model gradient boosting memperkenalkan masalah latensi dan serialisasi yang berbeda dari training.

python
# model_serialization.py
import xgboost as xgb
import json

# Train a model
model = xgb.XGBClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# Save in XGBoost's native binary format (recommended for production)
model.save_model('model.ubj')  # Universal Binary JSON format

# Load for inference
loaded_model = xgb.XGBClassifier()
loaded_model.load_model('model.ubj')

# For model versioning, save with metadata
metadata = {
    'version': '1.0.0',
    'trained_at': '2026-09-17',
    'features': feature_names,
    'best_iteration': model.best_iteration
}
with open('model_metadata.json', 'w') as f:
    json.dump(metadata, f)

Latensi inferensi tergantung pada kedalaman dan jumlah tree. Untuk aplikasi real-time dengan persyaratan latensi ketat (di bawah 10ms), pertimbangkan:

  • Mengurangi n_estimators dengan learning rate yang lebih tinggi
  • Membatasi max_depth ke 4-5
  • Menggunakan metode predict() dengan iteration_range untuk menggunakan lebih sedikit tree

Poin Penting untuk Interview XGBoost dan LightGBM

  • Gradient boosting melatih tree secara sekuensial pada residual, tidak seperti Random Forests yang melatih secara paralel dan merata-ratakan
  • XGBoost menambahkan regularisasi L1/L2 ke fungsi objektif, mengurangi overfitting tanpa cross-validation ekstensif
  • LightGBM menggunakan pertumbuhan leaf-wise dan sampling GOSS, membuatnya 2-5x lebih cepat pada dataset besar
  • Penanganan kategorikal native di LightGBM mengungguli one-hot encoding untuk fitur kardinalitas tinggi
  • Tune secara berurutan: learning rate, kompleksitas tree, regularisasi, rasio sampling
  • scale_pos_weight menangani class imbalance dengan memodifikasi loss function, mempertahankan distribusi asli
  • Feature importance berbasis gain mengukur peningkatan model aktual, tetapi fitur berkorelasi dapat tampak kurang penting
  • Untuk produksi, gunakan format .ubj dan pertimbangkan mengurangi jumlah tree untuk aplikasi sensitif latensi

Mulai berlatih!

Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.

Tantangan harian

Bisakah kamu menemukan bug di Data Science & ML?

Satu potongan kode nyata, satu bug tersembunyi, satu percobaan per hari. Tanpa akun untuk mencoba.

Anthony Fillion-Maillet

Ditulis oleh

Anthony Fillion-Maillet

Pendiri SharpSkill

Developer fullstack selama lebih dari 10 tahun. Ia menjalankan SharpSkill dan bertanggung jawab atas semua yang diterbitkan di sini.

Diperbarui 17 September 2026

Tag

#xgboost
#lightgbm
#gradient-boosting
#machine-learning
#data-science-interview

Bagikan

Artikel terkait