Pertanyaan dan Skenario yang Berlaku
Anda memiliki data permintaan perjalanan harian selama dua tahun untuk 200 kota. Pekerjaan produksi melakukan pelatihan ulang setiap hari Senin dan memprediksi 7 hari ke depan untuk setiap kota. Fitur-fitur mencakup permintaan masa lalu, hari dalam seminggu, hari libur, prakiraan cuaca, dan promosi harga yang direncanakan. Tim mengusulkan pemisahan acak (random split) train-validation dan ingin memilih model dengan MAPE agregat terendah.
Rancang validasi offline yang bebas kebocoran (leakage-free). Cakup pemisahan data, ketersediaan fitur, baseline, metrik, agregasi di seluruh kota, pemilihan model, dan kriteria peluncuran (launch gates). Dua tahun, 200 kota, 7 hari, dan pelatihan ulang mingguan adalah asumsi wawancara, bukan tolok ukur industri.
Pertanyaan ini berlaku untuk peran data science, machine learning, dan forecasting. Intinya adalah mereproduksi apa yang benar-benar diketahui pada setiap origin forecast historis, sehingga kategorinya adalah data.
Apa yang Dievaluasi Pewawancara
Pertama, apakah kandidat dapat menerjemahkan proses forecasting di produksi ke dalam protokol evaluasi? Jawaban yang kuat menetapkan origin forecast, horizon, frekuensi pelatihan ulang, dan kebijakan jendela pelatihan (training window) sebelum membahas model. Hanya sekadar "memisahkan secara kronologis" tidaklah lengkap.
Kedua, apakah kandidat dapat menemukan kebocoran di luar pemisahan data? Informasi masa depan dapat masuk melalui penskalaan data penuh (full-data scaling), rolling window yang melintasi origin, data yang direvisi, cuaca yang terealisasi, promosi yang belum disetujui, atau target encoding yang dipasang pada seluruh tanggal.
Ketiga, apakah metrik-metrik tersebut sesuai dengan keputusan bisnis? Satu metrik agregat dapat menyembunyikan kegagalan pada horizon yang jauh, kota-kota bervolume rendah yang performanya buruk, bias yang persisten, atau interval yang salah dikalibrasi. Jawaban yang kuat mempertahankan hasil berdasarkan horizon, segmen kota, dan fold temporal, dengan baseline sederhana di samping model.
Keempat, apakah kandidat dapat memisahkan tuning dari estimasi akhir? Validasi rolling memilih model dan ambang batas. Periode berurutan final yang tidak pernah memengaruhi pemilihan digunakan untuk mengestimasi performa pipeline terpilih. Memeriksa holdout tersebut berulang kali sambil mengubah model akan mengubahnya menjadi set validasi lainnya.
Pertanyaan untuk Diklarifikasi Sebelum Menjawab
- Kapan origin forecast yang sebenarnya? Eksekusi pada hari Senin pukul 06:00 harus membekukan data pada waktu tersebut. Forecasting rolling harian menciptakan origin yang berbeda dan biaya pelatihan ulang yang berbeda.
- Apakah jalur 7 hari dihasilkan secara langsung atau rekursif satu hari demi satu hari? Strategi ini mengubah pembuatan fitur dan memerlukan hasil untuk horizon 1 hingga 7 secara terpisah.
- Kovariat masa depan mana yang diketahui pada origin? Kalender biasanya diketahui; prakiraan cuaca tersedia, tetapi cuaca yang terealisasi belum ada; hanya promosi yang sudah disetujui dan dipublikasikan yang memenuhi syarat.
- Kapan label lengkap? Jika jumlah perjalanan tiba terlambat dua hari, pelatihan memerlukan jeda (gap) yang setara atau snapshot point-in-time.
- Apakah overforecasting dan underforecasting sama biayanya? Perencanaan kapasitas dapat memiliki biaya kekurangan armada dan biaya kapasitas menganggur yang asimetris, yang tidak dapat diekspresikan oleh MAE saja.
- Apakah semua kota sama pentingnya? Rata-rata makro bobot setara antar kota mengukur cakupan; pembobotan volume mengukur dampak agregat. Keduanya tidak saling menggantikan.
- Berapa banyak riwayat yang digunakan produksi? Jendela tetap (fixed window) dapat beradaptasi dengan perubahan struktural, sedangkan musiman tahunan yang stabil mungkin memerlukan riwayat yang lebih panjang.
Kerangka Jawaban 30 Detik
"Saya akan bekerja mundur dari produksi dan menjalankan backtest rolling-origin. Pada setiap hari Senin historis, saya hanya akan menggunakan data yang tersedia dan lengkap pada waktu tersebut, melatih dengan jendela produksi, memprediksi 7 hari ke depan, dan bergerak maju. Setiap transformasi, fitur lag, dan keputusan tuning dipasang di dalam fold pelatihan; cuaca masa depan yang terealisasi tidak boleh menggantikan prakiraannya. Saya akan membandingkan dengan baseline seasonal-naive dan melaporkan MAE, bias, dan kerugian bisnis berdasarkan horizon 1 hingga 7, kota, dan fold temporal; metrik persentase memerlukan kebijakan nol yang eksplisit. Setelah seleksi, saya akan mengevaluasi sekali pada holdout berurutan yang belum tersentuh dan meluncurkannya hanya jika kota-kota penting, minggu-minggu puncak, dan cakupan interval lolos dari kriteria peluncuran yang telah ditentukan."
Pembahasan Mendalam Langkah-demi-Langkah
Langkah 1: Perlakukan satu eksekusi produksi sebagai satu fold backtest.
Untuk origin forecast t, pelatihan hanya boleh berisi rekaman yang tersedia pada t dengan label lengkap. Interval pengujian adalah t+1 hingga t+7. Geser origin ke depan sebanyak 7 hari untuk mensimulasikan pelatihan ulang mingguan. Lewati origin awal yang tidak memiliki cukup riwayat untuk pola musiman yang dibutuhkan pipeline.
Jendela yang terus membesar (expanding window) menggunakan seluruh riwayat hingga t, yang meningkatkan pemanfaatan data tetapi mempertahankan rezim lama. Jendela tetap (fixed window) beradaptasi lebih cepat tetapi dapat membuang pola musiman tahunan. Backtest harus mereproduksi kebijakan produksi yang diinginkan; memilih kebijakan setelah melihat holdout final akan mengontaminasi holdout tersebut.
Langkah 2: Tentukan kontrak ketersediaan fitur.
Untuk setiap fitur, catat waktu peristiwa, waktu ketersediaan sistem, kebijakan revisi, dan penanganan nilai yang hilang. Rekonstruksi snapshot yang tersedia pada setiap origin:
- lag satu hari berasal dari
tatau lebih awal, dan rata-rata bergerak (rolling mean) 7 hari tidak boleh melintasit; - penskalaan, imputasi, encoding, seleksi fitur, dan transformasi target hanya dipasang pada data pelatihan fold tersebut;
- gunakan prakiraan cuaca yang dipublikasikan pada
t, bukan cuaca terealisasi di kemudian hari; - fitur promosi masa depan hanya mencakup rencana yang dikonfirmasi pada
t; - jika label terlambat dua hari, akhiri pelatihan pada
t-2atau terapkan jeda yang setara.
Pemeriksaan yang dapat dieksekusi harus memastikan available_at <= t untuk setiap sel pelatihan, membuat ulang fitur setelah menghapus semua data mentah setelah origin, dan memutar ulang beberapa origin dari snapshot yang disimpan. Prakiraan historis yang berubah saat data masa depan yang tidak tersedia dihapus menandakan adanya kebocoran atau dependensi yang tidak dapat direproduksi.
Langkah 3: Tetapkan baseline yang sulit dimanipulasi.
Minimal, bandingkan dengan prakiraan seasonal-naive yang menggunakan hari yang sama dari minggu sebelumnya. Tambahkan baseline tahun sebelumnya jika musiman tahunan cukup stabil. Model yang kompleks sebanding dengan biayanya hanya jika model tersebut menang secara konsisten pada origin, fitur yang tersedia, dan baris yang dinilai yang identik. Peningkatan performa yang sangat besar dan tidak masuk akal harus memicu audit penyelarasan waktu dan kebocoran sebelum dirayakan.
Langkah 4: Cocokkan metrik dengan biaya kegagalan.
Gunakan MAE untuk kesalahan mutlak tipikal, RMSE untuk menyoroti kesalahan besar, dan mean signed error untuk mengungkap overforecasting atau underforecasting yang persisten. MAPE tidak terdefinisi pada nilai nol dan tidak stabil di dekat nol, sehingga tidak boleh menjadi satu-satunya metrik. Untuk perbandingan lintas skala, MASE dapat menskalakan kesalahan dengan kesalahan seasonal-naive yang dihitung dari fold pelatihan. WAPE dapat mendukung perencanaan agregat, tetapi kota-kota bervolume tinggi akan mendominasinya.
Untuk perkiraan kuantil, berikan skor pada setiap kuantil dengan pinball loss dan bandingkan cakupan empiris dengan tingkat yang diinginkan, seperti P90. Cakupan harus dipasangkan dengan lebar interval: interval yang sangat lebar dapat memberikan cakupan yang baik namun tidak berguna untuk keputusan kapasitas.
Langkah 5: Pertahankan struktur kesalahan sebelum melakukan agregasi.
Pertahankan origin, horizon, city, nilai aktual, dan perkiraan pada setiap baris yang dinilai, lalu laporkan:
- horizon 1 hingga 7 secara terpisah, sehingga akurasi jangka pendek tidak menyembunyikan kehancuran horizon yang jauh;
- rata-rata makro bobot setara antar kota dan hasil dengan pembobotan volume;
- distribusi di seluruh fold temporal, bukan hanya nilai rata-ratanya;
- periode puncak, hari libur, kota bervolume rendah, kota baru, dan jendela cuaca yang tidak biasa secara terpisah;
- rangkaian bias searah yang berkelanjutan di dalam suatu kota.
Langkah 6: Lakukan seleksi di dalam fold rolling dan kunci pengujian akhir.
Gunakan fold rolling pengembangan untuk model, jendela waktu, dan hyperparameter. Catat eksperimen ketika jumlah perbandingan banyak agar uji coba berulang tidak secara diam-diam mengoptimalkan noise pada beberapa fold. Bekukan pipeline secara lengkap, lalu evaluasi sekali pada 8 hingga 12 minggu berurutan final. Durasi tersebut merupakan asumsi wawancara lainnya dan harus disesuaikan dengan musiman dan kebutuhan sampel.
Tentukan kriteria peluncuran sebelumnya: kerugian bisnis agregat mengalahkan seasonal-naive; kota-kota penting tidak melampaui ambang batas penurunan performa (regression threshold); horizon 7 tetap dapat diterima; bias tetap berada dalam toleransi kapasitas; serta cakupan dan lebar interval lolos uji. Jika rata-rata menang tetapi kriteria penting gagal, jangan luncurkan secara global—lakukan rilis canary hanya pada kota-kota yang lolos atau pertahankan baseline.
Langkah 7: Perluas protokol ke dalam pemantauan produksi.
Catat versi model, snapshot data, origin forecast, prediksi horizon, dan versi fitur. Ketika label telah matang dan lengkap, lakukan backfill untuk metrik yang sama dan bandingkan dengan distribusi backtest. Pantau ketersediaan data, nilai yang hilang, signed bias, kesalahan berdasarkan horizon, dan selisih (delta) dari baseline. Setelah terjadi perubahan rezim struktural, evaluasi ulang kebijakan jendela pelatihan daripada berasumsi bahwa pelatihan ulang yang sering akan memperbaiki protokol.
Contoh Jawaban Berkualitas Tinggi
"Saya akan mereproduksi satu eksekusi produksi pada serangkaian origin historis. Jika pekerjaan melakukan pelatihan ulang pada hari Senin pukul 06:00 dan mengeluarkan tujuh hari sekaligus, setiap fold hanya melihat data yang tersedia dengan label lengkap pada waktu tersebut, melatih dengan jendela produksi, dan memberi skor untuk tujuh hari berikutnya. Jika label terlambat dua hari, pelatihan berakhir dua hari sebelum origin. Cuaca menggunakan versi prakiraan yang tersedia saat itu, tidak pernah menggunakan observasi cuaca yang terealisasi.
Semua transformasi berada di dalam fold. Scaler, imputer, encoder, dan seleksi fitur hanya dipasang pada baris pelatihan, sementara lag dan rolling window harus berakhir tidak lebih lambat dari origin. Saya juga akan menghapus data mentah pasca-origin dan membuat ulang fitur untuk memverifikasi bahwa prediksi historis tidak berubah.
Pembanding pertama adalah prakiraan seasonal-naive hari yang sama dari minggu lalu. Saya menyimpan hasil berdasarkan kota, origin, dan horizon, lalu melaporkan MAE, RMSE, signed bias, dan biaya bisnis. Kota-kota mendapatkan pembobotan yang setara maupun pembobotan volume. MAPE gagal pada nilai nol, jadi saya tidak akan menggunakannya sendirian. Untuk kuantil, saya akan menambahkan pinball loss, cakupan berdasarkan horizon, dan lebar interval.
Fold rolling memilih pipeline; periode berurutan final digunakan satu kali saja. Kriteria peluncuran ditetapkan sebelum pengujian tersebut: mengalahkan baseline secara keseluruhan, menghindari penurunan performa yang tidak dapat diterima pada kota-kota penting, lolos horizon 7 dan minggu puncak, serta memenuhi persyaratan bias dan kalibrasi interval. Di produksi, saya mencatat origin dan versi data sehingga label yang matang dapat mereproduksi potongan data yang sama. Hal ini membuat peningkatan performa offline sebanding dengan sistem yang sebenarnya akan kita jalankan."
Kesalahan Umum
- Mengacak tanggal secara acak → Pelatihan melihat mekanisme dan statistik fitur dari waktu setelah tanggal pengujian → Gunakan rolling origin yang mereproduksi eksekusi produksi.
- Membuat fitur dan melakukan penskalaan pada dataset lengkap → Informasi validasi telah masuk ke dalam pelatihan → Pasang setiap transformasi per fold dan putar ulang fitur berdasarkan waktu ketersediaannya.
- Mengganti prakiraan cuaca dengan cuaca yang terealisasi → Evaluasi offline memiliki informasi yang tidak dimiliki produksi → Simpan dan gunakan versi prakiraan yang tersedia pada setiap origin.
- Melaporkan satu MAPE agregat saja → Nilai nol, kota-kota kecil, dan horizon jauh salah ditangani atau tersembunyi → Gabungkan kesalahan mutlak, bias, kerugian bisnis, dan hasil tersegmentasi.
- Menghilangkan baseline seasonal-naive → Kompleksitas model tidak memiliki tolok ukur inkremental yang kredibel → Beri skor baseline pada fold dan baris yang identik.
- Mengubah model setelah melihat pengujian akhir → Holdout kini ikut serta dalam proses pemilihan → Bekukan sekali; jika gagal, tunggu holdout masa depan yang baru.
- Meluncurkan secara global hanya karena rata-rata menang → Kota bervolume tinggi dapat menyembunyikan penurunan performa subkelompok penting → Tentukan kriteria subkelompok, puncak, dan horizon sebelumnya, serta lakukan rilis canary per kota.
Pertanyaan Lanjutan dan Tanggapan
Bagaimana Anda mengevaluasi kota yang belum pernah muncul dalam pelatihan?
Fold rolling biasa menempatkan kota yang sama di dalam train dan test, sehingga tidak dapat mengestimasi cold start. Tambahkan evaluasi city-held-out: hapus sekelompok kota sepenuhnya saat melatih model bersama, lalu gunakan hanya atribut statis atau riwayat singkat yang benar-benar tersedia saat peluncuran. Laporkan kasus tanpa riwayat dan riwayat singkat secara terpisah terhadap baseline naive regional dan global.
Suatu promosi berdampak selama 14 hari sementara horizon perkiraan adalah 7 hari. Apakah Anda memerlukan jeda (gap)?
Jeda bergantung pada ketersediaan informasi dan label yang tumpang tindih, bukan secara mekanis mengikuti horizon. Jika label pelatihan atau agregat mengonsumsi hasil dari 14 hari setelah origin, pangkas atau berikan pemisahan yang cukup. Jika rencana promosi dikonfirmasi sebelum origin dan fitur hanya berisi rencana tersebut, durasi 14 hari itu sendiri tidak menciptakan kebocoran. Gambarlah garis waktu untuk setiap kolom.
Bagaimana jika model baru hanya meningkatkan performa di kota-kota bervolume tinggi?
Tunjukkan manfaat dengan pembobotan volume di samping penurunan performa rata-rata bobot setara antar kota dan ubah kebutuhan bisnis menjadi kriteria peluncuran. Meluncurkan model baru hanya untuk kota-kota bervolume tinggi sambil mempertahankan baseline atau model hierarki di kota lainnya dapat menjadi keputusan yang valid. Satu rata-rata tertimbang tidak membuktikan bahwa setiap kota mendapatkan manfaat.
Kesalahan online jauh lebih buruk daripada backtest. Apa yang Anda periksa terlebih dahulu?
Mulailah dengan reproduktibilitas: apakah model, origin, snapshot fitur, dan versi variabel eksogen yang tepat dapat membangun kembali prediksi tersebut? Kemudian pisahkan keterlambatan data atau perubahan definisi, perbedaan transformasi train-serving (train-serving skew), pergeseran rezim yang juga merugikan baseline, dan drift spesifik model. Temukan ketidaksesuaian protokol sebelum memilih pelatihan ulang, jendela yang lebih pendek, rollback, atau desain validasi baru.