feat: add model selection

This commit is contained in:
Evelyn Sucitro 2026-09-19 13:21:34 +07:00
commit c9f8a02573
2 changed files with 70 additions and 0 deletions

23
model_selection.md Normal file
View File

@ -0,0 +1,23 @@
(a) Prediksi stok barang dari 12 bulan historis penjualan
Arsitektur: LSTM (atau ML Klasik seperti XGBoost / SARIMA sebagai alternatif kuat).
Justifikasi: Data penjualan historis merupakan deret waktu (time-series) yang memiliki dependensi temporal, tren, dan pola musiman antar-bulan. LSTM dirancang khusus untuk memproses data sekuensial dengan mempertahankan informasi masa lalu melalui mekanisme cell state dan gates, sehingga mampu menangkap dinamika tren penjualan tanpa kehilangan memori jangka panjang.
(b) Klasifikasi foto produk rusak vs normal di lini produksi
Arsitektur: CNN (Convolutional Neural Network).
Justifikasi: Data citra memerlukan ekstraksi pola visual lokal seperti goresan, retakan, atau perbedaan warna yang terikat pada korelasi spasial antarpiksel. Operasi konvolusi pada CNN mampu mengekstraksi hierarki fitur visual (dari garis tepi hingga tekstur utuh) serta memiliki sifat translation invariance, sehingga cacat produk tetap terdeteksi meskipun posisinya bergeser.
(c) Analisis sentimen review Google Play Store
Arsitektur: LSTM (atau variannya seperti Bi-LSTM / model berbasis Transformer).
Justifikasi: Ulasan teks adalah data sekuensial linguistik di mana arti suatu kalimat sangat bergantung pada urutan dan konteks kata di sekitarnya. LSTM secara efektif menangani panjang kalimat yang bervariasi dan mampu mempertahankan konteks makna dari awal hingga akhir ulasan untuk menentukan polaritas sentimen positif atau negatif secara akurat.
(d) Prediksi churn pelanggan dari 15 kolom tabular
Arsitektur: ML Klasik (seperti XGBoost, LightGBM, atau Random Forest).
Justifikasi: Pada data tabular berdimensi kecil (15 fitur), model gradient boosted decision trees secara konsisten mengungguli deep learning dalam hal performa generalisasi, kecepatan latih, dan interpretasi fitur (feature importance). Jaringan saraf seperti ANN cenderung membutuhkan volume sampel yang jauh lebih besar dan rentan overfitting pada batas keputusan data tabular yang tidak terstruktur secara spasial.

View File

@ -0,0 +1,47 @@
import numpy as np
import tensorflow as tf
from tensorflow import keras
from keras.layers import Conv2D, Dense, Embedding, Flatten, LSTM, MaxPooling2D
from keras.models import Sequential
from xgboost import XGBClassifier
# (a) Prediksi Stok Barang (LSTM)
# Input shape: (samples, time_steps=12, features=1)
model_a = Sequential([
LSTM(32, input_shape=(12, 1)),
Dense(1)
])
model_a.compile(optimizer='adam', loss='mse')
# (b) Klasifikasi Foto Produk Rusak vs Normal (CNN)
# Input shape contoh citra RGB 128x128
model_b = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
MaxPooling2D((2, 2)),
Flatten(),
Dense(64, activation='relu'),
Dense(1, activation='sigmoid') # binary: rusak vs normal
])
model_b.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# (c) Analisis Sentimen Ulasan Play Store (LSTM + Embedding)
vocab_size = 5000
max_length = 100
model_c = Sequential([
Embedding(input_dim=vocab_size, output_dim=64, input_length=max_length),
LSTM(64),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid') # binary: positif vs negatif
])
model_c.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# (d) Prediksi Churn Pelanggan Tabular (ML Klasik - XGBoost)
# X_train memiliki dimensi (n_samples, 15)
model_d = XGBClassifier(
n_estimators=100,
max_depth=4,
learning_rate=0.1,
random_state=42
)
# model_d.fit(X_train, y_train)